# HG changeset patch
# Node ID 02433c5b0077
# Parent  a9223009939a
diff --git a/finch/gntblist.c b/finch/gntblist.c
--- a/finch/gntblist.c
+++ b/finch/gntblist.c
@@ -105,7 +105,7 @@
 static FinchBuddyList *ggblist;
 
 static void add_buddy(PurpleBuddy *buddy, FinchBuddyList *ggblist);
-static void add_contact(PurpleContact *contact, FinchBuddyList *ggblist);
+static void add_contact(PurpleMetaContact *contact, FinchBuddyList *ggblist);
 static void add_group(PurpleGroup *group, FinchBuddyList *ggblist);
 static void add_chat(PurpleChat *chat, FinchBuddyList *ggblist);
 static void add_node(PurpleBlistNode *node, FinchBuddyList *ggblist);
@@ -161,7 +161,7 @@
 			return TRUE;  /* Show if the buddy just signed off */
 		if (purple_blist_node_get_bool(node, "show_offline"))
 			return TRUE;
-	} else if (PURPLE_IS_CONTACT(node)) {
+	} else if (PURPLE_IS_META_CONTACT(node)) {
 		PurpleBlistNode *child;
 		for (child = purple_blist_node_get_first_child(node);
 				child; child = purple_blist_node_get_sibling_next(child)) {
@@ -197,7 +197,7 @@
 {
 	gpointer ret = NULL;
 
-	if (PURPLE_IS_BUDDY(node) || PURPLE_IS_CONTACT(node) || PURPLE_IS_CHAT(node))
+	if (PURPLE_IS_BUDDY(node) || PURPLE_IS_META_CONTACT(node) || PURPLE_IS_CHAT(node))
 		ret = purple_blist_node_get_parent(node);
 
 	if (ret)
@@ -215,8 +215,8 @@
 
 	str = g_string_new("");
 
-	if (PURPLE_IS_CONTACT(node)) {
-		PurpleBuddy *pr = purple_contact_get_priority_buddy((PurpleContact*)node);
+	if (PURPLE_IS_META_CONTACT(node)) {
+		PurpleBuddy *pr = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
 		gboolean offline = !PURPLE_BUDDY_IS_ONLINE(pr);
 		gboolean showoffline = purple_prefs_get_bool(PREF_ROOT "/showoffline");
 		const char *name = purple_buddy_get_name(pr);
@@ -329,8 +329,8 @@
 	PurpleBuddy *buddy;
 	int color = 0;
 
-	if (PURPLE_IS_CONTACT(node))
-		node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)));
+	if (PURPLE_IS_META_CONTACT(node))
+		node = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node)));
 	if (!PURPLE_IS_BUDDY(node))
 		return 0;
 
@@ -360,8 +360,8 @@
 
 	if (fnode && fnode->signed_timer)
 		flag |= GNT_TEXT_FLAG_BLINK;
-	else if (PURPLE_IS_CONTACT(node)) {
-		node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)));
+	else if (PURPLE_IS_META_CONTACT(node)) {
+		node = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node)));
 		fnode = g_object_get_data(G_OBJECT(node), UI_DATA);
 		if (fnode && fnode->signed_timer)
 			flag |= GNT_TEXT_FLAG_BLINK;
@@ -396,8 +396,8 @@
 
 	if(PURPLE_IS_BUDDY(node)) {
 		add_buddy((PurpleBuddy*)node, ggblist);
-	} else if (PURPLE_IS_CONTACT(node)) {
-		add_contact((PurpleContact*)node, ggblist);
+	} else if (PURPLE_IS_META_CONTACT(node)) {
+		add_contact((PurpleMetaContact*)node, ggblist);
 	} else if (PURPLE_IS_GROUP(node)) {
 		add_group((PurpleGroup*)node, ggblist);
 	} else if (PURPLE_IS_CHAT(node)) {
@@ -486,7 +486,7 @@
 		node_update(list, purple_blist_node_get_parent(node));
 	} else if (PURPLE_IS_CHAT(node)) {
 		add_node(node, FINCH_BUDDY_LIST(list));
-	} else if (PURPLE_IS_CONTACT(node)) {
+	} else if (PURPLE_IS_META_CONTACT(node)) {
 		if (g_object_get_data(G_OBJECT(node), UI_DATA) == NULL) {
 			/* The core seems to expect the UI to add the buddies. */
 			for (node = purple_blist_node_get_first_child(node); node; node = purple_blist_node_get_sibling_next(node))
@@ -787,8 +787,8 @@
 	char status[8] = " ";
 	const char *name = NULL;
 
-	if (PURPLE_IS_CONTACT(node))
-		node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)));  /* XXX: this can return NULL?! */
+	if (PURPLE_IS_META_CONTACT(node))
+		node = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node)));  /* XXX: this can return NULL?! */
 
 	if (node == NULL)
 		return NULL;
@@ -858,7 +858,7 @@
 }
 
 static void
-add_contact(PurpleContact *contact, FinchBuddyList *ggblist)
+add_contact(PurpleMetaContact *contact, FinchBuddyList *ggblist)
 {
 	gpointer parent;
 	PurpleBlistNode *node = (PurpleBlistNode*)contact;
@@ -886,7 +886,7 @@
 {
 	gpointer parent;
 	PurpleBlistNode *node = (PurpleBlistNode *)buddy;
-	PurpleContact *contact;
+	PurpleMetaContact *contact;
 
 	if(g_object_get_data(G_OBJECT(node), UI_DATA)) {
 		return;
@@ -900,7 +900,7 @@
 				parent, NULL));
 
 	blist_update_row_flags(ggblist, (PurpleBlistNode *)buddy);
-	if (buddy == purple_contact_get_priority_buddy(contact)) {
+	if (buddy == purple_meta_contact_get_priority_buddy(contact)) {
 		blist_update_row_flags(ggblist, (PurpleBlistNode *)contact);
 	}
 }
@@ -914,8 +914,8 @@
 	if (!node)
 		return;
 
-	if (PURPLE_IS_CONTACT(node))
-		node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)));
+	if (PURPLE_IS_META_CONTACT(node))
+		node = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node)));
 
 	if (PURPLE_IS_BUDDY(node))
 	{
@@ -1210,7 +1210,7 @@
 
 /* Xerox'd from gtkdialogs.c:purple_gtkdialogs_remove_contact_cb */
 static void
-remove_contact(PurpleContact *contact)
+remove_contact(PurpleMetaContact *contact)
 {
 	PurpleBlistNode *bnode, *cnode;
 	PurpleGroup *group;
@@ -1233,10 +1233,10 @@
 	if (name && !*name)
 		name = NULL;
 
-	if (PURPLE_IS_CONTACT(node)) {
-		PurpleContact *contact = (PurpleContact*)node;
-		PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact);
-		purple_contact_set_alias(contact, name);
+	if (PURPLE_IS_META_CONTACT(node)) {
+		PurpleMetaContact *contact = (PurpleMetaContact*)node;
+		PurpleBuddy *buddy = purple_meta_contact_get_priority_buddy(contact);
+		purple_meta_contact_set_alias(contact, name);
 		purple_buddy_set_local_alias(buddy, name);
 		purple_serv_alias_buddy(buddy);
 	} else if (PURPLE_IS_BUDDY(node)) {
@@ -1257,8 +1257,8 @@
 	char *prompt;
 	const char *text;
 
-	if (PURPLE_IS_CONTACT(node))
-		name = purple_contact_get_alias((PurpleContact*)node);
+	if (PURPLE_IS_META_CONTACT(node))
+		name = purple_meta_contact_get_alias((PurpleMetaContact*)node);
 	else if (PURPLE_IS_BUDDY(node))
 		name = purple_buddy_get_contact_alias((PurpleBuddy*)node);
 	else if (PURPLE_IS_CHAT(node))
@@ -1288,7 +1288,7 @@
 	cnode = purple_blist_node_get_first_child(((PurpleBlistNode*)group));
 
 	while (cnode) {
-		if (PURPLE_IS_CONTACT(cnode)) {
+		if (PURPLE_IS_META_CONTACT(cnode)) {
 			bnode = purple_blist_node_get_first_child(cnode);
 			cnode = purple_blist_node_get_sibling_next(cnode);
 			while (bnode) {
@@ -1322,8 +1322,8 @@
 static void
 finch_blist_remove_node(PurpleBlistNode *node)
 {
-	if (PURPLE_IS_CONTACT(node)) {
-		remove_contact((PurpleContact*)node);
+	if (PURPLE_IS_META_CONTACT(node)) {
+		remove_contact((PurpleMetaContact*)node);
 	} else if (PURPLE_IS_BUDDY(node)) {
 		PurpleBuddy *buddy = (PurpleBuddy*)node;
 		PurpleGroup *group = purple_buddy_get_group(buddy);
@@ -1343,9 +1343,9 @@
 	char *primary;
 	const char *name, *sec = NULL;
 
-	if (PURPLE_IS_CONTACT(node)) {
-		PurpleContact *c = (PurpleContact*)node;
-		name = purple_contact_get_alias(c);
+	if (PURPLE_IS_META_CONTACT(node)) {
+		PurpleMetaContact *c = (PurpleMetaContact*)node;
+		name = purple_meta_contact_get_alias(c);
 		if (purple_counting_node_get_total_size(PURPLE_COUNTING_NODE(c)) > 1)
 			sec = _("Removing this contact will also remove all the buddies in the contact");
 	} else if (PURPLE_IS_BUDDY(node)) {
@@ -1384,8 +1384,8 @@
 	} else {
 		ggblist->tagged = g_list_prepend(ggblist->tagged, node);
 	}
-	if (PURPLE_IS_CONTACT(node))
-		update_buddy_display(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)), ggblist);
+	if (PURPLE_IS_META_CONTACT(node))
+		update_buddy_display(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node)), ggblist);
 	else if (PURPLE_IS_BUDDY(node))
 		update_buddy_display((PurpleBuddy*)node, ggblist);
 	else
@@ -1396,15 +1396,15 @@
 finch_blist_place_tagged(PurpleBlistNode *target)
 {
 	PurpleGroup *tg = NULL;
-	PurpleContact *tc = NULL;
+	PurpleMetaContact *tc = NULL;
 
 	if (PURPLE_IS_GROUP(target))
 		tg = (PurpleGroup*)target;
 	else if (PURPLE_IS_BUDDY(target)) {
-		tc = (PurpleContact*)purple_blist_node_get_parent(target);
+		tc = (PurpleMetaContact*)purple_blist_node_get_parent(target);
 		tg = (PurpleGroup*)purple_blist_node_get_parent((PurpleBlistNode*)tc);
-	} else if (PURPLE_IS_CONTACT(target)) {
-		tc = (PurpleContact *)target;
+	} else if (PURPLE_IS_META_CONTACT(target)) {
+		tc = (PurpleMetaContact *)target;
 		tg = (PurpleGroup *)purple_blist_node_get_parent(target);
 	} else if (PURPLE_IS_CHAT(target)) {
 		tg = (PurpleGroup*)purple_blist_node_get_parent(target);
@@ -1423,24 +1423,24 @@
 				update_node_display(node, ggblist);
 				/* Add the group after the current group */
 				purple_blist_add_group((PurpleGroup*)node, (PurpleBlistNode*)tg);
-			} else if (PURPLE_IS_CONTACT(node)) {
-				update_buddy_display(purple_contact_get_priority_buddy((PurpleContact*)node), ggblist);
+			} else if (PURPLE_IS_META_CONTACT(node)) {
+				update_buddy_display(purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node), ggblist);
 				if (PURPLE_BLIST_NODE(tg) == target) {
 					/* The target is a group, just add the contact to the group. */
-					purple_blist_add_contact((PurpleContact*)node, tg, NULL);
+					purple_blist_add_contact((PurpleMetaContact*)node, tg, NULL);
 				} else if (tc) {
 					/* The target is either a buddy, or a contact. Merge with that contact. */
-					purple_contact_merge((PurpleContact*)node, (PurpleBlistNode*)tc);
+					purple_meta_contact_merge((PurpleMetaContact*)node, (PurpleBlistNode*)tc);
 				} else {
 					/* The target is a chat. Add the contact to the group after this chat. */
-					purple_blist_add_contact((PurpleContact*)node, NULL, target);
+					purple_blist_add_contact((PurpleMetaContact*)node, NULL, target);
 				}
 			} else if (PURPLE_IS_BUDDY(node)) {
 				update_buddy_display((PurpleBuddy*)node, ggblist);
 				if (PURPLE_BLIST_NODE(tg) == target) {
 					/* The target is a group. Add this buddy in a new contact under this group. */
 					purple_blist_add_buddy((PurpleBuddy*)node, NULL, tg, NULL);
-				} else if (PURPLE_IS_CONTACT(target)) {
+				} else if (PURPLE_IS_META_CONTACT(target)) {
 					/* Add to the contact. */
 					purple_blist_add_buddy((PurpleBuddy*)node, tc, NULL, NULL);
 				} else if (PURPLE_IS_BUDDY(target)) {
@@ -1482,7 +1482,7 @@
 	tree = GNT_TREE(ggblist->tree);
 
 	node = gnt_tree_get_selection_data(tree);
-	if (node && !(PURPLE_IS_BUDDY(node) || PURPLE_IS_CONTACT(node) ||
+	if (node && !(PURPLE_IS_BUDDY(node) || PURPLE_IS_META_CONTACT(node) ||
 	              PURPLE_IS_GROUP(node) || PURPLE_IS_CHAT(node)))
 		return;
 
@@ -1498,10 +1498,10 @@
 	if (!node) {
 		create_group_menu(GNT_MENU(context), NULL);
 		title = g_strdup(_("Buddy List"));
-	} else if (PURPLE_IS_CONTACT(node)) {
-		ggblist->cnode = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)));
+	} else if (PURPLE_IS_META_CONTACT(node)) {
+		ggblist->cnode = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node)));
 		create_buddy_menu(GNT_MENU(context), (PurpleBuddy*)ggblist->cnode);
-		title = g_strdup(purple_contact_get_alias((PurpleContact*)node));
+		title = g_strdup(purple_meta_contact_get_alias((PurpleMetaContact*)node));
 	} else if (PURPLE_IS_BUDDY(node)) {
 		PurpleBuddy *buddy = (PurpleBuddy *)node;
 		create_buddy_menu(GNT_MENU(context), buddy);
@@ -1526,13 +1526,13 @@
 		add_custom_action(GNT_MENU(context), _("Remove"),
 				G_CALLBACK(finch_blist_remove_node_cb), node);
 
-		if (ggblist->tagged && (PURPLE_IS_CONTACT(node)
+		if (ggblist->tagged && (PURPLE_IS_META_CONTACT(node)
 				|| PURPLE_IS_GROUP(node))) {
 			add_custom_action(GNT_MENU(context), _("Place tagged"),
 					G_CALLBACK(finch_blist_place_tagged), node);
 		}
 
-		if (PURPLE_IS_BUDDY(node) || PURPLE_IS_CONTACT(node)) {
+		if (PURPLE_IS_BUDDY(node) || PURPLE_IS_META_CONTACT(node)) {
 			add_custom_action(GNT_MENU(context), _("Toggle Tag"),
 					G_CALLBACK(finch_blist_toggle_tag_buddy), node);
 		}
@@ -1753,7 +1753,7 @@
 static void
 update_buddy_display(PurpleBuddy *buddy, FinchBuddyList *ggblist)
 {
-	PurpleContact *contact;
+	PurpleMetaContact *contact;
 
 	contact = purple_buddy_get_contact(buddy);
 
@@ -1761,7 +1761,7 @@
 	gnt_tree_change_text(GNT_TREE(ggblist->tree), contact, 0, get_display_name((PurpleBlistNode*)contact));
 
 	blist_update_row_flags(ggblist, (PurpleBlistNode *)buddy);
-	if (buddy == purple_contact_get_priority_buddy(contact))
+	if (buddy == purple_meta_contact_get_priority_buddy(contact))
 		blist_update_row_flags(ggblist, (PurpleBlistNode *)contact);
 
 	if (ggblist->tnode == (PurpleBlistNode *)buddy) {
@@ -2179,9 +2179,9 @@
 		return purple_buddy_presence_compare(
 			PURPLE_BUDDY_PRESENCE(purple_buddy_get_presence(PURPLE_BUDDY(n1))),
 			PURPLE_BUDDY_PRESENCE(purple_buddy_get_presence(PURPLE_BUDDY(n2))));
-	} else if (PURPLE_IS_CONTACT(n1)) {
-		s1 = purple_contact_get_alias((PurpleContact*)n1);
-		s2 = purple_contact_get_alias((PurpleContact*)n2);
+	} else if (PURPLE_IS_META_CONTACT(n1)) {
+		s1 = purple_meta_contact_get_alias((PurpleMetaContact*)n1);
+		s2 = purple_meta_contact_get_alias((PurpleMetaContact*)n2);
 	} else {
 		return blist_node_compare_position(n1, n2);
 	}
@@ -2203,10 +2203,10 @@
 	if (G_OBJECT_TYPE(n1) != G_OBJECT_TYPE(n2))
 		return blist_node_compare_position(n1, n2);
 
-	if (PURPLE_IS_CONTACT(n1))
-		n1 = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(n1)));
-	if (PURPLE_IS_CONTACT(n2))
-		n2 = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(n2)));
+	if (PURPLE_IS_META_CONTACT(n1))
+		n1 = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(n1)));
+	if (PURPLE_IS_META_CONTACT(n2))
+		n2 = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(n2)));
 
 	if (PURPLE_IS_BUDDY(n1) && PURPLE_IS_BUDDY(n2)) {
 		ret = purple_buddy_presence_compare(
@@ -2313,7 +2313,7 @@
 		node_remove(purple_blist_get_default(), node);
 	} else {
 		update_node_display(node, ggblist);
-		if (purple_blist_node_get_parent(node) && PURPLE_IS_CONTACT(purple_blist_node_get_parent(node)))
+		if (purple_blist_node_get_parent(node) && PURPLE_IS_META_CONTACT(purple_blist_node_get_parent(node)))
 			update_node_display(purple_blist_node_get_parent(node), ggblist);
 	}
 
@@ -2337,7 +2337,7 @@
 	g_object_ref(node);
 	fnode->signed_timer = g_timeout_add_seconds(6, (GSourceFunc)buddy_recent_signed_on_off, data);
 	update_node_display(node, ggblist);
-	if (purple_blist_node_get_parent(node) && PURPLE_IS_CONTACT(purple_blist_node_get_parent(node)))
+	if (purple_blist_node_get_parent(node) && PURPLE_IS_META_CONTACT(purple_blist_node_get_parent(node)))
 		update_node_display(purple_blist_node_get_parent(node), ggblist);
 	return FALSE;
 }
diff --git a/finch/gntconv.c b/finch/gntconv.c
--- a/finch/gntconv.c
+++ b/finch/gntconv.c
@@ -196,7 +196,7 @@
 {
 	PurpleBlistNode *node;
 	PurpleBuddy *buddy = purple_blist_find_buddy(account, name);
-	PurpleContact *contact;
+	PurpleMetaContact *contact;
 	PurpleConversation *im = NULL;
 
 	if(!PURPLE_IS_BUDDY(buddy)) {
diff --git a/finch/plugins/grouping/grouping.c b/finch/plugins/grouping/grouping.c
--- a/finch/plugins/grouping/grouping.c
+++ b/finch/plugins/grouping/grouping.c
@@ -80,8 +80,8 @@
 
 static gboolean on_offline_can_add_node(PurpleBlistNode *node)
 {
-	if (PURPLE_IS_CONTACT(node)) {
-		PurpleContact *contact = PURPLE_CONTACT(node);
+	if (PURPLE_IS_META_CONTACT(node)) {
+		PurpleMetaContact *contact = PURPLE_META_CONTACT(node);
 		if (purple_counting_node_get_current_size(PURPLE_COUNTING_NODE(contact)) > 0)
 			return TRUE;
 		return FALSE;
@@ -105,8 +105,8 @@
 {
 	gpointer ret = NULL;
 
-	if (PURPLE_IS_CONTACT(node)) {
-		node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)));
+	if (PURPLE_IS_META_CONTACT(node)) {
+		node = PURPLE_BLIST_NODE(purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node)));
 		ret = PURPLE_BUDDY_IS_ONLINE(PURPLE_BUDDY(node)) ? online : offline;
 	} else if (PURPLE_IS_BUDDY(node)) {
 		ret = purple_blist_node_get_parent(node);
@@ -163,8 +163,8 @@
 
 static gpointer meebo_find_parent(PurpleBlistNode *node)
 {
-	if (PURPLE_IS_CONTACT(node)) {
-		PurpleBuddy *buddy = purple_contact_get_priority_buddy(PURPLE_CONTACT(node));
+	if (PURPLE_IS_META_CONTACT(node)) {
+		PurpleBuddy *buddy = purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node));
 		if (buddy && !PURPLE_BUDDY_IS_ONLINE(buddy)) {
 			return &meebo;
 		}
diff --git a/libpurple/accounts.c b/libpurple/accounts.c
--- a/libpurple/accounts.c
+++ b/libpurple/accounts.c
@@ -502,7 +502,7 @@
 		while(cnode) {
 			PurpleBlistNode *cnode_next = purple_blist_node_get_sibling_next(cnode);
 
-			if(PURPLE_IS_CONTACT(cnode)) {
+			if(PURPLE_IS_META_CONTACT(cnode)) {
 				bnode = purple_blist_node_get_first_child(cnode);
 				while(bnode) {
 					PurpleBlistNode *bnode_next = purple_blist_node_get_sibling_next(bnode);
diff --git a/libpurple/buddy.h b/libpurple/buddy.h
--- a/libpurple/buddy.h
+++ b/libpurple/buddy.h
@@ -220,7 +220,7 @@
  *
  * Returns: (transfer none): The buddy's contact.
  */
-PurpleContact *purple_buddy_get_contact(PurpleBuddy *buddy);
+PurpleMetaContact *purple_buddy_get_contact(PurpleBuddy *buddy);
 
 /**
  * purple_buddy_get_presence:
diff --git a/libpurple/buddy.c b/libpurple/buddy.c
--- a/libpurple/buddy.c
+++ b/libpurple/buddy.c
@@ -436,7 +436,7 @@
 const gchar *
 purple_buddy_get_contact_alias(PurpleBuddy *buddy) {
 	PurpleBuddyPrivate *priv = NULL;
-	PurpleContact *c = NULL;
+	PurpleMetaContact *c = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
 
@@ -450,8 +450,8 @@
 
 	/* The contact alias */
 	c = purple_buddy_get_contact(buddy);
-	if((c != NULL) && (purple_contact_get_alias(c) != NULL)) {
-		return purple_contact_get_alias(c);
+	if((c != NULL) && (purple_meta_contact_get_alias(c) != NULL)) {
+		return purple_meta_contact_get_alias(c);
 	}
 
 	/* The server alias */
@@ -610,15 +610,15 @@
 	return NULL;
 }
 
-PurpleContact *
+PurpleMetaContact *
 purple_buddy_get_contact(PurpleBuddy *buddy) {
 	PurpleBlistNode *parent = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
 
 	parent = purple_blist_node_get_parent(PURPLE_BLIST_NODE(buddy));
-	if(PURPLE_IS_CONTACT(parent)) {
-		return PURPLE_CONTACT(parent);
+	if(PURPLE_IS_META_CONTACT(parent)) {
+		return PURPLE_META_CONTACT(parent);
 	}
 
 	return NULL;
@@ -660,7 +660,7 @@
 
 	if(old_online != new_online) {
 		PurpleBlistNode *cnode = NULL, *gnode = NULL;
-		PurpleContact *contact = NULL;
+		PurpleMetaContact *contact = NULL;
 		PurpleCountingNode *contact_counter = NULL, *group_counter = NULL;
 		gint delta = 0, limit = 0;
 
@@ -678,7 +678,7 @@
 		}
 
 		cnode = purple_blist_node_get_parent(PURPLE_BLIST_NODE(buddy));
-		contact = PURPLE_CONTACT(cnode);
+		contact = PURPLE_META_CONTACT(cnode);
 		contact_counter = PURPLE_COUNTING_NODE(contact);
 		gnode = purple_blist_node_get_parent(cnode);
 		group_counter = PURPLE_COUNTING_NODE(gnode);
@@ -702,7 +702,7 @@
 	 * because something, somewhere changed.  Calling the stuff below
 	 * certainly won't hurt anything.  Unless you're on a K6-2 300.
 	 */
-	purple_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy));
+	purple_meta_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy));
 
 	purple_blist_update_node(blist, PURPLE_BLIST_NODE(buddy));
 }
@@ -737,7 +737,7 @@
 	g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
 
 	contact = purple_blist_node_get_parent(PURPLE_BLIST_NODE(buddy));
-	if(!PURPLE_IS_CONTACT(contact)) {
+	if(!PURPLE_IS_META_CONTACT(contact)) {
 		return purple_blist_get_default_group();
 	}
 
diff --git a/libpurple/buddyicon.c b/libpurple/buddyicon.c
--- a/libpurple/buddyicon.c
+++ b/libpurple/buddyicon.c
@@ -882,7 +882,7 @@
 
 	g_return_val_if_fail(node != NULL, NULL);
 
-	if (!PURPLE_IS_CONTACT(node) &&
+	if (!PURPLE_IS_META_CONTACT(node) &&
 	    !PURPLE_IS_CHAT(node) &&
 	    !PURPLE_IS_GROUP(node)) {
 		return NULL;
@@ -914,7 +914,7 @@
 
 	manager = purple_conversation_manager_get_default();
 
-	if (PURPLE_IS_CONTACT(node)) {
+	if (PURPLE_IS_META_CONTACT(node)) {
 		PurpleBlistNode *child;
 		for (child = purple_blist_node_get_first_child(node);
 		     child;
@@ -976,7 +976,7 @@
 
 	g_return_val_if_fail(node != NULL, NULL);
 
-	if (!PURPLE_IS_CONTACT(node) &&
+	if (!PURPLE_IS_META_CONTACT(node) &&
 	    !PURPLE_IS_CHAT(node) &&
 	    !PURPLE_IS_GROUP(node)) {
 		return NULL;
@@ -1062,7 +1062,7 @@
 				g_free(path);
 			}
 		}
-		else if (PURPLE_IS_CONTACT(node) ||
+		else if (PURPLE_IS_META_CONTACT(node) ||
 		         PURPLE_IS_CHAT(node) ||
 		         PURPLE_IS_GROUP(node))
 		{
diff --git a/libpurple/buddylist.h b/libpurple/buddylist.h
--- a/libpurple/buddylist.h
+++ b/libpurple/buddylist.h
@@ -281,7 +281,7 @@
  * group if node is NULL.  If both are NULL, the buddy will be added to
  * the default group.
  */
-void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node);
+void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleMetaContact *contact, PurpleGroup *group, PurpleBlistNode *node);
 
 /**
  * purple_blist_add_group:
@@ -306,7 +306,7 @@
  * The new contact will be inserted after insert or prepended to the list if
  * node is NULL.
  */
-void purple_blist_add_contact(PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node);
+void purple_blist_add_contact(PurpleMetaContact *contact, PurpleGroup *group, PurpleBlistNode *node);
 
 /**
  * purple_blist_remove_buddy:
@@ -329,7 +329,7 @@
  *
  * See purple_blist_remove_buddy().
  */
-void purple_blist_remove_contact(PurpleContact *contact);
+void purple_blist_remove_contact(PurpleMetaContact *contact);
 
 /**
  * purple_blist_remove_chat:
diff --git a/libpurple/buddylist.c b/libpurple/buddylist.c
--- a/libpurple/buddylist.c
+++ b/libpurple/buddylist.c
@@ -232,7 +232,7 @@
 }
 
 static PurpleXmlNode *
-contact_to_xmlnode(PurpleContact *contact)
+contact_to_xmlnode(PurpleMetaContact *contact)
 {
 	PurpleXmlNode *node, *child;
 	PurpleBlistNode *bnode;
@@ -316,9 +316,9 @@
 	{
 		if (purple_blist_node_is_transient(cnode))
 			continue;
-		if (PURPLE_IS_CONTACT(cnode))
+		if (PURPLE_IS_META_CONTACT(cnode))
 		{
-			child = contact_to_xmlnode(PURPLE_CONTACT(cnode));
+			child = contact_to_xmlnode(PURPLE_META_CONTACT(cnode));
 			purple_xmlnode_insert_child(node, child);
 		}
 		else if (PURPLE_IS_CHAT(cnode))
@@ -498,7 +498,7 @@
 }
 
 static void
-parse_buddy(PurpleGroup *group, PurpleContact *contact, PurpleXmlNode *bnode) {
+parse_buddy(PurpleGroup *group, PurpleMetaContact *contact, PurpleXmlNode *bnode) {
 	PurpleAccount *account;
 	PurpleAccountManager *manager = purple_account_manager_get_default();
 	PurpleBuddy *buddy;
@@ -546,7 +546,7 @@
 static void
 parse_contact(PurpleGroup *group, PurpleXmlNode *cnode)
 {
-	PurpleContact *contact = purple_contact_new();
+	PurpleMetaContact *contact = purple_meta_contact_new();
 	PurpleXmlNode *x;
 	const char *alias;
 
@@ -554,7 +554,7 @@
 			_purple_blist_get_last_child((PurpleBlistNode*)group));
 
 	if ((alias = purple_xmlnode_get_attrib(cnode, "alias"))) {
-		purple_contact_set_alias(contact, alias);
+		purple_meta_contact_set_alias(contact, alias);
 	}
 
 	for (x = cnode->child; x; x = x->next) {
@@ -980,14 +980,14 @@
 			cnode);
 }
 
-void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node)
+void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleMetaContact *contact, PurpleGroup *group, PurpleBlistNode *node)
 {
 	PurpleBuddyListClass *klass = NULL;
 	PurpleBuddyListPrivate *priv = NULL;
 	PurpleBlistNode *cnode, *bnode;
 	PurpleCountingNode *contact_counter, *group_counter;
 	PurpleGroup *g;
-	PurpleContact *c;
+	PurpleMetaContact *c;
 	PurpleAccount *account;
 	struct _purple_hbuddy *hb, *hb2;
 	GHashTable *account_buddies;
@@ -1007,7 +1007,7 @@
 		return;
 
 	if (node && PURPLE_IS_BUDDY(node)) {
-		c = (PurpleContact*)node->parent;
+		c = (PurpleMetaContact*)node->parent;
 		g = (PurpleGroup*)node->parent->parent;
 	} else if (contact) {
 		c = contact;
@@ -1021,7 +1021,7 @@
 			purple_blist_add_group(
 			        g, purple_blist_get_last_sibling(priv->root));
 		}
-		c = purple_contact_new();
+		c = purple_meta_contact_new();
 		purple_blist_add_contact(c, g,
 				_purple_blist_get_last_child((PurpleBlistNode*)g));
 	}
@@ -1074,9 +1074,9 @@
 		}
 
 		if (!bnode->parent->child) {
-			purple_blist_remove_contact((PurpleContact*)bnode->parent);
+			purple_blist_remove_contact((PurpleMetaContact*)bnode->parent);
 		} else {
-			purple_contact_invalidate_priority_buddy((PurpleContact*)bnode->parent);
+			purple_meta_contact_invalidate_priority_buddy((PurpleMetaContact*)bnode->parent);
 
 			if (klass && klass->update) {
 				klass->update(purplebuddylist, bnode->parent);
@@ -1131,7 +1131,7 @@
 
 	g_hash_table_replace(account_buddies, hb2, buddy);
 
-	purple_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy));
+	purple_meta_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy));
 
 	if (klass) {
 		if (klass->save_node) {
@@ -1149,7 +1149,7 @@
 			PURPLE_BLIST_NODE(buddy));
 }
 
-void purple_blist_add_contact(PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node)
+void purple_blist_add_contact(PurpleMetaContact *contact, PurpleGroup *group, PurpleBlistNode *node)
 {
 	PurpleBuddyListClass *klass = NULL;
 	PurpleBuddyListPrivate *priv = NULL;
@@ -1157,7 +1157,7 @@
 	PurpleBlistNode *gnode, *cnode, *bnode;
 	PurpleCountingNode *contact_counter, *group_counter;
 
-	g_return_if_fail(PURPLE_IS_CONTACT(contact));
+	g_return_if_fail(PURPLE_IS_META_CONTACT(contact));
 	g_return_if_fail(PURPLE_IS_BUDDY_LIST(purplebuddylist));
 
 	if (PURPLE_BLIST_NODE(contact) == node)
@@ -1166,7 +1166,7 @@
 	klass = PURPLE_BUDDY_LIST_GET_CLASS(purplebuddylist);
 	priv = purple_buddy_list_get_instance_private(purplebuddylist);
 
-	if (node && (PURPLE_IS_CONTACT(node) ||
+	if (node && (PURPLE_IS_META_CONTACT(node) ||
 				PURPLE_IS_CHAT(node)))
 		g = PURPLE_GROUP(node->parent);
 	else if (group)
@@ -1260,7 +1260,7 @@
 		}
 	}
 
-	if (node && (PURPLE_IS_CONTACT(node) ||
+	if (node && (PURPLE_IS_META_CONTACT(node) ||
 				PURPLE_IS_CHAT(node))) {
 		if (node->next)
 			node->next->prev = cnode;
@@ -1381,14 +1381,14 @@
 			gnode);
 }
 
-void purple_blist_remove_contact(PurpleContact *contact)
+void purple_blist_remove_contact(PurpleMetaContact *contact)
 {
 	PurpleBuddyListClass *klass = NULL;
 	PurpleBlistNode *node, *gnode;
 	PurpleGroup *group;
 
 	g_return_if_fail(PURPLE_IS_BUDDY_LIST(purplebuddylist));
-	g_return_if_fail(PURPLE_IS_CONTACT(contact));
+	g_return_if_fail(PURPLE_IS_META_CONTACT(contact));
 
 	klass = PURPLE_BUDDY_LIST_GET_CLASS(purplebuddylist);
 	node = (PurpleBlistNode *)contact;
@@ -1443,7 +1443,7 @@
 	PurpleBuddyListPrivate *priv = NULL;
 	PurpleBlistNode *node, *cnode, *gnode;
 	PurpleCountingNode *contact_counter, *group_counter;
-	PurpleContact *contact;
+	PurpleMetaContact *contact;
 	PurpleGroup *group;
 	struct _purple_hbuddy hb;
 	GHashTable *account_buddies;
@@ -1458,7 +1458,7 @@
 	node = PURPLE_BLIST_NODE(buddy);
 	cnode = node->parent;
 	gnode = (cnode != NULL) ? cnode->parent : NULL;
-	contact = (PurpleContact *)cnode;
+	contact = (PurpleMetaContact *)cnode;
 	group = (PurpleGroup *)gnode;
 
 	/* Remove the node from its parent */
@@ -1487,8 +1487,8 @@
 		purple_counting_node_change_total_size(contact_counter, -1);
 
 		/* Re-sort the contact */
-		if (cnode->child && purple_contact_get_priority_buddy(contact) == buddy) {
-			purple_contact_invalidate_priority_buddy(contact);
+		if (cnode->child && purple_meta_contact_get_priority_buddy(contact) == buddy) {
+			purple_meta_contact_invalidate_priority_buddy(contact);
 
 			if (klass && klass->update) {
 				klass->update(purplebuddylist, cnode);
@@ -1838,7 +1838,7 @@
 		if (!PURPLE_IS_GROUP(gnode))
 			continue;
 		for (cnode = gnode->child; cnode; cnode = cnode->next) {
-			if (PURPLE_IS_CONTACT(cnode)) {
+			if (PURPLE_IS_META_CONTACT(cnode)) {
 				gboolean recompute = FALSE;
 					for (bnode = cnode->child; bnode; bnode = bnode->next) {
 						if (PURPLE_IS_BUDDY(bnode) &&
@@ -1857,8 +1857,8 @@
 				        if (recompute ||
 				            purple_blist_node_get_bool(
 				                    cnode, "show_offline")) {
-					        purple_contact_invalidate_priority_buddy(
-					                (PurpleContact *)cnode);
+					        purple_meta_contact_invalidate_priority_buddy(
+					                (PurpleMetaContact *)cnode);
 					        klass->update(purplebuddylist,
 					                      cnode);
 				        }
@@ -1881,7 +1881,7 @@
 	PurpleCountingNode *contact_counter, *group_counter;
 	PurpleBuddy *buddy;
 	PurpleChat *chat;
-	PurpleContact *contact;
+	PurpleMetaContact *contact;
 	PurpleGroup *group;
 	GList *list = NULL, *iter = NULL;
 
@@ -1896,9 +1896,9 @@
 		group = (PurpleGroup *)gnode;
 
 		for (cnode = gnode->child; cnode; cnode = cnode->next) {
-			if (PURPLE_IS_CONTACT(cnode)) {
+			if (PURPLE_IS_META_CONTACT(cnode)) {
 				gboolean recompute = FALSE;
-				contact = (PurpleContact *)cnode;
+				contact = (PurpleMetaContact *)cnode;
 
 				for (bnode = cnode->child; bnode; bnode = bnode->next) {
 					if (!PURPLE_IS_BUDDY(bnode))
@@ -1928,8 +1928,8 @@
 						if (!g_list_find(list, presence))
 							list = g_list_prepend(list, presence);
 
-						if (purple_contact_get_priority_buddy(contact) == buddy)
-							purple_contact_invalidate_priority_buddy(contact);
+						if (purple_meta_contact_get_priority_buddy(contact) == buddy)
+							purple_meta_contact_invalidate_priority_buddy(contact);
 						else
 							recompute = TRUE;
 
@@ -1941,7 +1941,7 @@
 					}
 				}
 				if (recompute) {
-					purple_contact_invalidate_priority_buddy(contact);
+					purple_meta_contact_invalidate_priority_buddy(contact);
 
 					if (klass && klass->update) {
 						klass->update(purplebuddylist,
@@ -1988,7 +1988,7 @@
 		}
 
 		for(meta_contact = group->child; meta_contact != NULL; meta_contact = meta_contact->next) {
-			if(PURPLE_IS_CONTACT(meta_contact)) {
+			if(PURPLE_IS_META_CONTACT(meta_contact)) {
 				if(meta_contact_func != NULL) {
 					meta_contact_func(meta_contact, data);
 				}
diff --git a/libpurple/contact.h b/libpurple/contact.h
--- a/libpurple/contact.h
+++ b/libpurple/contact.h
@@ -23,35 +23,35 @@
 # error "only <purple.h> may be included directly"
 #endif
 
-#ifndef PURPLE_CONTACT_H
-#define PURPLE_CONTACT_H
+#ifndef PURPLE_META_CONTACT_H
+#define PURPLE_META_CONTACT_H
 
-#define PURPLE_TYPE_CONTACT             (purple_contact_get_type())
-#define PURPLE_CONTACT(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_CONTACT, PurpleContact))
-#define PURPLE_CONTACT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_CONTACT, PurpleContactClass))
-#define PURPLE_IS_CONTACT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_CONTACT))
-#define PURPLE_IS_CONTACT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_CONTACT))
-#define PURPLE_CONTACT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_CONTACT, PurpleContactClass))
+#define PURPLE_TYPE_META_CONTACT             (purple_meta_contact_get_type())
+#define PURPLE_META_CONTACT(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_META_CONTACT, PurpleMetaContact))
+#define PURPLE_META_CONTACT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_META_CONTACT, PurpleMetaContactClass))
+#define PURPLE_IS_META_CONTACT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_META_CONTACT))
+#define PURPLE_IS_META_CONTACT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_META_CONTACT))
+#define PURPLE_META_CONTACT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_META_CONTACT, PurpleMetaContactClass))
 
-typedef struct _PurpleContact PurpleContact;
-typedef struct _PurpleContactClass PurpleContactClass;
+typedef struct _PurpleMetaContact PurpleMetaContact;
+typedef struct _PurpleMetaContactClass PurpleMetaContactClass;
 
 #include "countingnode.h"
 #include "group.h"
 
 /**
- * PurpleContact:
+ * PurpleMetaContact:
  *
  * A contact on the buddy list.
  *
  * A contact is a counting node, which means it keeps track of the counts of
  * the buddies under this contact.
  */
-struct _PurpleContact {
+struct _PurpleMetaContact {
 	PurpleCountingNode counting;
 };
 
-struct _PurpleContactClass {
+struct _PurpleMetaContactClass {
 	PurpleCountingNodeClass counting_class;
 
 	/*< private >*/
@@ -68,62 +68,62 @@
 /**************************************************************************/
 
 /**
- * purple_contact_get_type:
+ * purple_meta_contact_get_type:
  *
- * Returns: The #GType for the #PurpleContact object.
+ * Returns: The #GType for the #PurpleMetaContact object.
  */
-GType purple_contact_get_type(void);
+GType purple_meta_contact_get_type(void);
 
 /**
- * purple_contact_new:
+ * purple_meta_contact_new:
  *
  * Creates a new contact
  *
  * Returns:       A new contact struct
  */
-PurpleContact *purple_contact_new(void);
+PurpleMetaContact *purple_meta_contact_new(void);
 
 /**
- * purple_contact_get_group:
+ * purple_meta_contact_get_group:
  * @contact:  The contact
  *
- * Gets the PurpleGroup from a PurpleContact
+ * Gets the PurpleGroup from a PurpleMetaContact
  *
  * Returns: (transfer none): The group.
  */
-PurpleGroup *purple_contact_get_group(const PurpleContact *contact);
+PurpleGroup *purple_meta_contact_get_group(const PurpleMetaContact *contact);
 
 /**
- * purple_contact_get_priority_buddy:
+ * purple_meta_contact_get_priority_buddy:
  * @contact:  The contact
  *
  * Returns the highest priority buddy for a given contact.
  *
  * Returns: (transfer none): The highest priority buddy.
  */
-PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact);
+PurpleBuddy *purple_meta_contact_get_priority_buddy(PurpleMetaContact *contact);
 
 /**
- * purple_contact_set_alias:
+ * purple_meta_contact_set_alias:
  * @contact:  The contact
  * @alias:    The alias
  *
  * Sets the alias for a contact.
  */
-void purple_contact_set_alias(PurpleContact *contact, const char *alias);
+void purple_meta_contact_set_alias(PurpleMetaContact *contact, const char *alias);
 
 /**
- * purple_contact_get_alias:
+ * purple_meta_contact_get_alias:
  * @contact:  The contact
  *
  * Gets the alias for a contact.
  *
  * Returns:  The alias, or NULL if it is not set.
  */
-const char *purple_contact_get_alias(PurpleContact *contact);
+const char *purple_meta_contact_get_alias(PurpleMetaContact *contact);
 
 /**
- * purple_contact_on_account:
+ * purple_meta_contact_on_account:
  * @contact:  The contact to search through.
  * @account:  The account.
  *
@@ -131,19 +131,19 @@
  *
  * Returns: TRUE if there are any buddies from account in the contact, or FALSE otherwise.
  */
-gboolean purple_contact_on_account(PurpleContact *contact, PurpleAccount *account);
+gboolean purple_meta_contact_on_account(PurpleMetaContact *contact, PurpleAccount *account);
 
 /**
- * purple_contact_invalidate_priority_buddy:
+ * purple_meta_contact_invalidate_priority_buddy:
  * @contact:  The contact
  *
  * Invalidates the priority buddy so that the next call to
- * purple_contact_get_priority_buddy recomputes it.
+ * purple_meta_contact_get_priority_buddy recomputes it.
  */
-void purple_contact_invalidate_priority_buddy(PurpleContact *contact);
+void purple_meta_contact_invalidate_priority_buddy(PurpleMetaContact *contact);
 
 /**
- * purple_contact_merge:
+ * purple_meta_contact_merge:
  * @source:  The contact to merge
  * @node:    The place to merge to (a buddy or contact)
  *
@@ -151,10 +151,10 @@
  *
  * All of the buddies from source will be moved to target
  */
-void purple_contact_merge(PurpleContact *source, PurpleBlistNode *node);
+void purple_meta_contact_merge(PurpleMetaContact *source, PurpleBlistNode *node);
 
 
 G_END_DECLS
 
-#endif /* PURPLE_CONTACT_H */
+#endif /* PURPLE_META_CONTACT_H */
 
diff --git a/libpurple/contact.c b/libpurple/contact.c
--- a/libpurple/contact.c
+++ b/libpurple/contact.c
@@ -27,9 +27,9 @@
 #include "purpleprivate.h"
 #include "util.h"
 
-typedef struct _PurpleContactPrivate    PurpleContactPrivate;
+typedef struct _PurpleMetaContactPrivate    PurpleMetaContactPrivate;
 
-struct _PurpleContactPrivate {
+struct _PurpleMetaContactPrivate {
 	char *alias;                  /* The user-set alias of the contact  */
 	PurpleBuddy *priority_buddy;  /* The "top" buddy for this contact   */
 	gboolean priority_valid;      /* Is priority valid?                 */
@@ -48,18 +48,18 @@
  *****************************************************************************/
 static GParamSpec *properties[PROP_LAST];
 
-G_DEFINE_TYPE_WITH_PRIVATE(PurpleContact, purple_contact,
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleMetaContact, purple_meta_contact,
 		PURPLE_TYPE_COUNTING_NODE);
 
 /******************************************************************************
  * API
  *****************************************************************************/
 static void
-purple_contact_compute_priority_buddy(PurpleContact *contact) {
+purple_meta_contact_compute_priority_buddy(PurpleMetaContact *contact) {
 	PurpleBlistNode *bnode;
 	PurpleBuddy *new_priority = NULL;
-	PurpleContactPrivate *priv =
-			purple_contact_get_instance_private(contact);
+	PurpleMetaContactPrivate *priv =
+			purple_meta_contact_get_instance_private(contact);
 
 	priv->priority_buddy = NULL;
 	for (bnode = PURPLE_BLIST_NODE(contact)->child;
@@ -102,24 +102,24 @@
 }
 
 PurpleGroup *
-purple_contact_get_group(const PurpleContact *contact)
+purple_meta_contact_get_group(const PurpleMetaContact *contact)
 {
-	g_return_val_if_fail(PURPLE_IS_CONTACT(contact), NULL);
+	g_return_val_if_fail(PURPLE_IS_META_CONTACT(contact), NULL);
 
 	return PURPLE_GROUP(PURPLE_BLIST_NODE(contact)->parent);
 }
 
 void
-purple_contact_set_alias(PurpleContact *contact, const char *alias)
+purple_meta_contact_set_alias(PurpleMetaContact *contact, const char *alias)
 {
-	PurpleContactPrivate *priv = NULL;
+	PurpleMetaContactPrivate *priv = NULL;
 	PurpleConversationManager *manager = NULL;
 	PurpleBlistNode *bnode;
 	char *old_alias;
 	char *new_alias = NULL;
 
-	g_return_if_fail(PURPLE_IS_CONTACT(contact));
-	priv = purple_contact_get_instance_private(contact);
+	g_return_if_fail(PURPLE_IS_META_CONTACT(contact));
+	priv = purple_meta_contact_get_instance_private(contact);
 
 	if ((alias != NULL) && (*alias != '\0'))
 		new_alias = purple_utf8_strip_unprintables(alias);
@@ -165,24 +165,24 @@
 	g_free(old_alias);
 }
 
-const char *purple_contact_get_alias(PurpleContact* contact)
+const char *purple_meta_contact_get_alias(PurpleMetaContact* contact)
 {
-	PurpleContactPrivate *priv = NULL;
+	PurpleMetaContactPrivate *priv = NULL;
 
-	g_return_val_if_fail(PURPLE_IS_CONTACT(contact), NULL);
+	g_return_val_if_fail(PURPLE_IS_META_CONTACT(contact), NULL);
 
-	priv = purple_contact_get_instance_private(contact);
+	priv = purple_meta_contact_get_instance_private(contact);
 	if (priv->alias)
 		return priv->alias;
 
-	return purple_buddy_get_alias(purple_contact_get_priority_buddy(contact));
+	return purple_buddy_get_alias(purple_meta_contact_get_priority_buddy(contact));
 }
 
-gboolean purple_contact_on_account(PurpleContact *c, PurpleAccount *account)
+gboolean purple_meta_contact_on_account(PurpleMetaContact *c, PurpleAccount *account)
 {
 	PurpleBlistNode *bnode, *cnode = (PurpleBlistNode *) c;
 
-	g_return_val_if_fail(PURPLE_IS_CONTACT(c), FALSE);
+	g_return_val_if_fail(PURPLE_IS_META_CONTACT(c), FALSE);
 	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), FALSE);
 
 	for (bnode = cnode->child; bnode; bnode = bnode->next) {
@@ -198,43 +198,43 @@
 	return FALSE;
 }
 
-void purple_contact_invalidate_priority_buddy(PurpleContact *contact)
+void purple_meta_contact_invalidate_priority_buddy(PurpleMetaContact *contact)
 {
-	PurpleContactPrivate *priv = NULL;
+	PurpleMetaContactPrivate *priv = NULL;
 
-	g_return_if_fail(PURPLE_IS_CONTACT(contact));
+	g_return_if_fail(PURPLE_IS_META_CONTACT(contact));
 
-	priv = purple_contact_get_instance_private(contact);
+	priv = purple_meta_contact_get_instance_private(contact);
 	priv->priority_valid = FALSE;
 }
 
-PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact)
+PurpleBuddy *purple_meta_contact_get_priority_buddy(PurpleMetaContact *contact)
 {
-	PurpleContactPrivate *priv = NULL;
+	PurpleMetaContactPrivate *priv = NULL;
 
-	g_return_val_if_fail(PURPLE_IS_CONTACT(contact), NULL);
+	g_return_val_if_fail(PURPLE_IS_META_CONTACT(contact), NULL);
 
-	priv = purple_contact_get_instance_private(contact);
+	priv = purple_meta_contact_get_instance_private(contact);
 	if (!priv->priority_valid)
-		purple_contact_compute_priority_buddy(contact);
+		purple_meta_contact_compute_priority_buddy(contact);
 
 	return priv->priority_buddy;
 }
 
-void purple_contact_merge(PurpleContact *source, PurpleBlistNode *node)
+void purple_meta_contact_merge(PurpleMetaContact *source, PurpleBlistNode *node)
 {
 	PurpleBlistNode *sourcenode = (PurpleBlistNode*)source;
 	PurpleBlistNode *prev, *cur, *next;
-	PurpleContact *target;
+	PurpleMetaContact *target;
 
-	g_return_if_fail(PURPLE_IS_CONTACT(source));
+	g_return_if_fail(PURPLE_IS_META_CONTACT(source));
 	g_return_if_fail(PURPLE_IS_BLIST_NODE(node));
 
-	if (PURPLE_IS_CONTACT(node)) {
-		target = (PurpleContact *)node;
+	if (PURPLE_IS_META_CONTACT(node)) {
+		target = (PurpleMetaContact *)node;
 		prev = _purple_blist_get_last_child(node);
 	} else if (PURPLE_IS_BUDDY(node)) {
-		target = (PurpleContact *)node->parent;
+		target = (PurpleMetaContact *)node->parent;
 		prev = node;
 	} else {
 		return;
@@ -260,14 +260,14 @@
  **************************************************************************/
 /* Set method for GObject properties */
 static void
-purple_contact_set_property(GObject *obj, guint param_id, const GValue *value,
+purple_meta_contact_set_property(GObject *obj, guint param_id, const GValue *value,
 		GParamSpec *pspec)
 {
-	PurpleContact *contact = PURPLE_CONTACT(obj);
+	PurpleMetaContact *contact = PURPLE_META_CONTACT(obj);
 
 	switch (param_id) {
 		case PROP_ALIAS:
-			purple_contact_set_alias(contact, g_value_get_string(value));
+			purple_meta_contact_set_alias(contact, g_value_get_string(value));
 			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -277,19 +277,19 @@
 
 /* Get method for GObject properties */
 static void
-purple_contact_get_property(GObject *obj, guint param_id, GValue *value,
+purple_meta_contact_get_property(GObject *obj, guint param_id, GValue *value,
 		GParamSpec *pspec)
 {
-	PurpleContact *contact = PURPLE_CONTACT(obj);
-	PurpleContactPrivate *priv =
-			purple_contact_get_instance_private(contact);
+	PurpleMetaContact *contact = PURPLE_META_CONTACT(obj);
+	PurpleMetaContactPrivate *priv =
+			purple_meta_contact_get_instance_private(contact);
 
 	switch (param_id) {
 		case PROP_ALIAS:
 			g_value_set_string(value, priv->alias);
 			break;
 		case PROP_PRIORITY_BUDDY:
-			g_value_set_object(value, purple_contact_get_priority_buddy(contact));
+			g_value_set_object(value, purple_meta_contact_get_priority_buddy(contact));
 			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -299,7 +299,7 @@
 
 /* GObject initialization function */
 static void
-purple_contact_init(PurpleContact *contact)
+purple_meta_contact_init(PurpleMetaContact *contact)
 {
 	purple_blist_new_node(purple_blist_get_default(),
 	                      PURPLE_BLIST_NODE(contact));
@@ -307,26 +307,26 @@
 
 /* GObject finalize function */
 static void
-purple_contact_finalize(GObject *object)
+purple_meta_contact_finalize(GObject *object)
 {
-	PurpleContactPrivate *priv = purple_contact_get_instance_private(
-			PURPLE_CONTACT(object));
+	PurpleMetaContactPrivate *priv = purple_meta_contact_get_instance_private(
+			PURPLE_META_CONTACT(object));
 
 	g_free(priv->alias);
 
-	G_OBJECT_CLASS(purple_contact_parent_class)->finalize(object);
+	G_OBJECT_CLASS(purple_meta_contact_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
-static void purple_contact_class_init(PurpleContactClass *klass)
+static void purple_meta_contact_class_init(PurpleMetaContactClass *klass)
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	obj_class->finalize = purple_contact_finalize;
+	obj_class->finalize = purple_meta_contact_finalize;
 
 	/* Setup properties */
-	obj_class->get_property = purple_contact_get_property;
-	obj_class->set_property = purple_contact_set_property;
+	obj_class->get_property = purple_meta_contact_get_property;
+	obj_class->set_property = purple_meta_contact_set_property;
 
 	properties[PROP_ALIAS] = g_param_spec_string(
 		"alias",
@@ -347,9 +347,9 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-PurpleContact *
-purple_contact_new(void)
+PurpleMetaContact *
+purple_meta_contact_new(void)
 {
-	return g_object_new(PURPLE_TYPE_CONTACT, NULL);
+	return g_object_new(PURPLE_TYPE_META_CONTACT, NULL);
 }
 
diff --git a/libpurple/group.c b/libpurple/group.c
--- a/libpurple/group.c
+++ b/libpurple/group.c
@@ -67,7 +67,7 @@
 		if (PURPLE_IS_CHAT(cnode)) {
 			if (!g_slist_find(l, purple_chat_get_account(PURPLE_CHAT(cnode))))
 				l = g_slist_append(l, purple_chat_get_account(PURPLE_CHAT(cnode)));
-		} else if (PURPLE_IS_CONTACT(cnode)) {
+		} else if (PURPLE_IS_META_CONTACT(cnode)) {
 			for (bnode = cnode->child; bnode; bnode = bnode->next) {
 				if (PURPLE_IS_BUDDY(bnode)) {
 					if (!g_slist_find(l, purple_buddy_get_account(PURPLE_BUDDY(bnode))))
@@ -83,8 +83,8 @@
 gboolean purple_group_on_account(PurpleGroup *g, PurpleAccount *account) {
 	PurpleBlistNode *cnode;
 	for (cnode = ((PurpleBlistNode *)g)->child; cnode; cnode = cnode->next) {
-		if (PURPLE_IS_CONTACT(cnode)) {
-			if(purple_contact_on_account((PurpleContact *) cnode, account))
+		if (PURPLE_IS_META_CONTACT(cnode)) {
+			if(purple_meta_contact_on_account((PurpleMetaContact *) cnode, account))
 				return TRUE;
 		} else if (PURPLE_IS_CHAT(cnode)) {
 			PurpleChat *chat = (PurpleChat *)cnode;
@@ -137,11 +137,11 @@
 		while (child)
 		{
 			next = child->next;
-			if (PURPLE_IS_CONTACT(child)) {
+			if (PURPLE_IS_META_CONTACT(child)) {
 				PurpleBlistNode *bnode;
-				purple_blist_add_contact((PurpleContact *)child, dest, prev);
+				purple_blist_add_contact((PurpleMetaContact *)child, dest, prev);
 				for (bnode = child->child; bnode != NULL; bnode = bnode->next) {
-					purple_blist_add_buddy((PurpleBuddy *)bnode, (PurpleContact *)child,
+					purple_blist_add_buddy((PurpleBuddy *)bnode, (PurpleMetaContact *)child,
 							NULL, bnode->prev);
 					moved_buddies = g_list_append(moved_buddies, bnode);
 				}
@@ -166,7 +166,7 @@
 
 		/* Build a GList of all buddies in this group */
 		for (cnode = PURPLE_BLIST_NODE(source)->child; cnode != NULL; cnode = cnode->next) {
-			if (PURPLE_IS_CONTACT(cnode))
+			if (PURPLE_IS_META_CONTACT(cnode))
 				for (bnode = cnode->child; bnode != NULL; bnode = bnode->next)
 					moved_buddies = g_list_append(moved_buddies, bnode);
 		}
diff --git a/libpurple/plugins/autoaccept/autoaccept.c b/libpurple/plugins/autoaccept/autoaccept.c
--- a/libpurple/plugins/autoaccept/autoaccept.c
+++ b/libpurple/plugins/autoaccept/autoaccept.c
@@ -117,7 +117,7 @@
 	   stranger setting. */
 	if (node) {
 		node = purple_blist_node_get_parent(node);
-		g_return_if_fail(PURPLE_IS_CONTACT(node));
+		g_return_if_fail(PURPLE_IS_META_CONTACT(node));
 		accept_setting = purple_blist_node_get_int(node, "autoaccept");
 	} else {
 		accept_setting = g_settings_get_enum(settings, PREF_STRANGER);
@@ -210,7 +210,7 @@
 {
 	if (PURPLE_IS_BUDDY(node))
 		node = purple_blist_node_get_parent(node);
-	g_return_if_fail(PURPLE_IS_CONTACT(node));
+	g_return_if_fail(PURPLE_IS_META_CONTACT(node));
 	purple_blist_node_set_int(node, "autoaccept", choice);
 }
 
@@ -221,10 +221,10 @@
 
 	if (PURPLE_IS_BUDDY(node))
 		node = purple_blist_node_get_parent(node);
-	g_return_if_fail(PURPLE_IS_CONTACT(node));
+	g_return_if_fail(PURPLE_IS_META_CONTACT(node));
 
 	message = g_strdup_printf(_("When a file-transfer request arrives from %s"),
-					purple_contact_get_alias(PURPLE_CONTACT(node)));
+					purple_meta_contact_get_alias(PURPLE_META_CONTACT(node)));
 	purple_request_choice(plugin, _("Set Autoaccept Setting"), message,
 						NULL, GINT_TO_POINTER(purple_blist_node_get_int(node, "autoaccept")),
 						_("_Save"), G_CALLBACK(save_cb),
@@ -242,7 +242,7 @@
 {
 	PurpleActionMenu *action;
 
-	if (!PURPLE_IS_BUDDY(node) && !PURPLE_IS_CONTACT(node) &&
+	if (!PURPLE_IS_BUDDY(node) && !PURPLE_IS_META_CONTACT(node) &&
 		!purple_blist_node_is_transient(node))
 		return;
 
diff --git a/libpurple/protocols/bonjour/bonjour.c b/libpurple/protocols/bonjour/bonjour.c
--- a/libpurple/protocols/bonjour/bonjour.c
+++ b/libpurple/protocols/bonjour/bonjour.c
@@ -78,7 +78,7 @@
 	/* Go through and remove all buddies that belong to this account */
 	for (cnode = purple_blist_node_get_first_child((PurpleBlistNode *) bonjour_group); cnode; cnode = cnodenext) {
 		cnodenext = purple_blist_node_get_sibling_next(cnode);
-		if (!PURPLE_IS_CONTACT(cnode))
+		if (!PURPLE_IS_META_CONTACT(cnode))
 			continue;
 		for (bnode = purple_blist_node_get_first_child(cnode); bnode; bnode = bnodenext) {
 			bnodenext = purple_blist_node_get_sibling_next(bnode);
diff --git a/libpurple/protocols/demo/purpledemocontacts.c b/libpurple/protocols/demo/purpledemocontacts.c
--- a/libpurple/protocols/demo/purpledemocontacts.c
+++ b/libpurple/protocols/demo/purpledemocontacts.c
@@ -27,7 +27,7 @@
  *****************************************************************************/
 static void
 purple_demo_protocol_load_status(PurpleAccount *account, PurpleGroup *group,
-                                 PurpleContact *contact, PurpleBuddy *buddy,
+                                 PurpleMetaContact *contact, PurpleBuddy *buddy,
                                  JsonObject *buddy_object)
 {
 	JsonObject *status_object = NULL;
@@ -98,7 +98,7 @@
 
 static void
 purple_demo_protocol_load_buddies(PurpleAccount *account, PurpleGroup *group,
-                                  PurpleContact *contact, GList *buddies)
+                                  PurpleMetaContact *contact, GList *buddies)
 {
 	while(buddies != NULL) {
 		JsonNode *buddy_node = NULL;
@@ -142,14 +142,14 @@
                                    GList *contacts)
 {
 	while(contacts != NULL) {
-		PurpleContact *contact = NULL;
+		PurpleMetaContact *contact = NULL;
 		JsonNode *contact_node = NULL;
 		JsonObject *contact_object = NULL;
 
 		contact_node = (JsonNode *)contacts->data;
 		contact_object = json_node_get_object(contact_node);
 
-		contact = purple_contact_new();
+		contact = purple_meta_contact_new();
 
 		/* Set the contact's alias if one was specified. */
 		if(json_object_has_member(contact_object, "alias")) {
@@ -157,7 +157,7 @@
 
 			alias = json_object_get_string_member(contact_object, "alias");
 
-			purple_contact_set_alias(contact, alias);
+			purple_meta_contact_set_alias(contact, alias);
 		}
 
 		/* Add the contact to the group. */
diff --git a/libpurple/protocols/gg/purplew.c b/libpurple/protocols/gg/purplew.c
--- a/libpurple/protocols/gg/purplew.c
+++ b/libpurple/protocols/gg/purplew.c
@@ -103,7 +103,7 @@
 
 	gnode = PURPLE_BLIST_NODE(group);
 	for (cnode = gnode->child; cnode; cnode = cnode->next) {
-		if (!PURPLE_IS_CONTACT(cnode))
+		if (!PURPLE_IS_META_CONTACT(cnode))
 			continue;
 		for (bnode = cnode->child; bnode; bnode = bnode->next) {
 			PurpleBuddy *buddy;
diff --git a/libpurple/protocols/novell/novell.c b/libpurple/protocols/novell/novell.c
--- a/libpurple/protocols/novell/novell.c
+++ b/libpurple/protocols/novell/novell.c
@@ -1260,7 +1260,7 @@
 		for (cnode = purple_blist_node_get_first_child(gnode);
 				cnode;
 				cnode = purple_blist_node_get_sibling_next(cnode)) {
-			if (!PURPLE_IS_CONTACT(cnode))
+			if (!PURPLE_IS_META_CONTACT(cnode))
 				continue;
 			for (bnode = purple_blist_node_get_first_child(cnode);
 					bnode;
diff --git a/libpurple/protocols/sametime/sametime.c b/libpurple/protocols/sametime/sametime.c
--- a/libpurple/protocols/sametime/sametime.c
+++ b/libpurple/protocols/sametime/sametime.c
@@ -661,7 +661,7 @@
     for(cn = purple_blist_node_get_first_child(gn);
 			cn;
 			cn = purple_blist_node_get_sibling_next(cn)) {
-      if(! PURPLE_IS_CONTACT(cn)) continue;
+      if(! PURPLE_IS_META_CONTACT(cn)) continue;
 
       for(bn = purple_blist_node_get_first_child(cn);
 			  bn;
@@ -966,7 +966,7 @@
   for(cn = purple_blist_node_get_first_child(gn);
 		  cn;
 		  cn = purple_blist_node_get_sibling_next(cn)) {
-    if(! PURPLE_IS_CONTACT(cn)) continue;
+    if(! PURPLE_IS_META_CONTACT(cn)) continue;
 
     for(bn = purple_blist_node_get_first_child(cn);
 			bn;
@@ -1035,7 +1035,7 @@
   for(cn = purple_blist_node_get_first_child(gn);
 		  cn;
 		  cn = purple_blist_node_get_sibling_next(cn)) {
-    if(! PURPLE_IS_CONTACT(cn)) continue;
+    if(! PURPLE_IS_META_CONTACT(cn)) continue;
 
     for(bn = purple_blist_node_get_first_child(cn);
 			bn;
@@ -1311,7 +1311,7 @@
     for(cnode = purple_blist_node_get_first_child(gnode);
 			cnode;
 			cnode = purple_blist_node_get_sibling_next(cnode)) {
-      if(! PURPLE_IS_CONTACT(cnode))
+      if(! PURPLE_IS_META_CONTACT(cnode))
 	continue;
       for(bnode = purple_blist_node_get_first_child(cnode);
 			  bnode;
diff --git a/libpurple/purplebuddypresence.c b/libpurple/purplebuddypresence.c
--- a/libpurple/purplebuddypresence.c
+++ b/libpurple/purplebuddypresence.c
@@ -141,7 +141,7 @@
 		purple_signal_emit(purple_blist_get_handle(), "buddy-idle-changed", buddy,
 		                 old_idle, idle);
 
-	purple_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy));
+	purple_meta_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy));
 
 	/* Should this be done here? It'd perhaps make more sense to
 	 * connect to buddy-[un]idle signals and update from there
diff --git a/pidgin/gtkblist.c b/pidgin/gtkblist.c
--- a/pidgin/gtkblist.c
+++ b/pidgin/gtkblist.c
@@ -181,8 +181,8 @@
 pidgin_blist_get_selected_buddy(PidginBuddyList *blist) {
 	PurpleBuddy *buddy = NULL;
 
-	if(PURPLE_IS_CONTACT(blist->selected_node)) {
-		buddy = purple_contact_get_priority_buddy(PURPLE_CONTACT(blist->selected_node));
+	if(PURPLE_IS_META_CONTACT(blist->selected_node)) {
+		buddy = purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(blist->selected_node));
 	} else if(PURPLE_IS_BUDDY(blist->selected_node)) {
 		buddy = PURPLE_BUDDY(blist->selected_node);
 	}
@@ -264,8 +264,8 @@
 		if (PURPLE_IS_BUDDY(node)) {
 			PurpleGroup *group = purple_buddy_get_group(PURPLE_BUDDY(node));
 			purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(group), NULL);
-		} else if (PURPLE_IS_CONTACT(node) || PURPLE_IS_CHAT(node)) {
-			PurpleGroup *group = purple_contact_get_group(PURPLE_CONTACT(node));
+		} else if (PURPLE_IS_META_CONTACT(node) || PURPLE_IS_CHAT(node)) {
+			PurpleGroup *group = purple_meta_contact_get_group(PURPLE_META_CONTACT(node));
 			purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(group), NULL);
 		} else if (PURPLE_IS_GROUP(node)) {
 			purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(PURPLE_GROUP(node)), NULL);
@@ -291,8 +291,8 @@
 		gtk_tree_model_get(GTK_TREE_MODEL(blist->treemodel), &iter, NODE_COLUMN, &node, -1);
 		if (PURPLE_IS_BUDDY(node))
 			purple_blist_request_add_chat(NULL, purple_buddy_get_group(PURPLE_BUDDY(node)), NULL, NULL);
-		if (PURPLE_IS_CONTACT(node) || PURPLE_IS_CHAT(node))
-			purple_blist_request_add_chat(NULL, purple_contact_get_group(PURPLE_CONTACT(node)), NULL, NULL);
+		if (PURPLE_IS_META_CONTACT(node) || PURPLE_IS_CHAT(node))
+			purple_blist_request_add_chat(NULL, purple_meta_contact_get_group(PURPLE_META_CONTACT(node)), NULL, NULL);
 		else if (PURPLE_IS_GROUP(node))
 			purple_blist_request_add_chat(NULL, (PurpleGroup*)node, NULL, NULL);
 	} else {
@@ -511,8 +511,8 @@
 		pidgin_dialogs_remove_chat(PURPLE_CHAT(node));
 	} else if(PURPLE_IS_GROUP(node)) {
 		pidgin_dialogs_remove_group(PURPLE_GROUP(node));
-	} else if(PURPLE_IS_CONTACT(node)) {
-		pidgin_dialogs_remove_contact(PURPLE_CONTACT(node));
+	} else if(PURPLE_IS_META_CONTACT(node)) {
+		pidgin_dialogs_remove_contact(PURPLE_META_CONTACT(node));
 	}
 }
 
@@ -658,8 +658,8 @@
 	gtk_tree_path_free (path);
 	gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
 
-	if (PURPLE_IS_CONTACT(node))
-		text = purple_contact_get_alias(PURPLE_CONTACT(node));
+	if (PURPLE_IS_META_CONTACT(node))
+		text = purple_meta_contact_get_alias(PURPLE_META_CONTACT(node));
 	else if (PURPLE_IS_BUDDY(node))
 		text = purple_buddy_get_alias(PURPLE_BUDDY(node));
 	else if (PURPLE_IS_GROUP(node))
@@ -695,7 +695,7 @@
 		if (PURPLE_IS_BUDDY(node))
 			node = purple_blist_node_get_parent(node);
 
-		if (!PURPLE_IS_CONTACT(node))
+		if (!PURPLE_IS_META_CONTACT(node))
 			continue;
 
 		for (b = purple_blist_node_get_first_child(node);
@@ -723,7 +723,7 @@
 		if (node == contact)
 			continue;
 
-		purple_contact_merge((PurpleContact *)node, contact);
+		purple_meta_contact_merge((PurpleMetaContact *)node, contact);
 	}
 
 	/* And show the expanded contact, so the people know what's going on */
@@ -744,10 +744,10 @@
 	     contact != NULL;
 	     contact = purple_blist_node_get_sibling_next(contact)) {
 		char *node_alias;
-		if (!PURPLE_IS_CONTACT(contact))
+		if (!PURPLE_IS_META_CONTACT(contact))
 			continue;
 
-		node_alias = g_utf8_casefold(purple_contact_get_alias((PurpleContact *)contact), -1);
+		node_alias = g_utf8_casefold(purple_meta_contact_get_alias((PurpleMetaContact *)contact), -1);
 		if (node_alias && !g_utf8_collate(node_alias, a)) {
 			merges = g_list_append(merges, contact);
 			i++;
@@ -804,23 +804,23 @@
 	gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), TRUE);
 	g_object_set(G_OBJECT(gtkblist->text_rend), "editable", FALSE, NULL);
 
-	if (PURPLE_IS_CONTACT(node)) {
-		PurpleContact *contact = PURPLE_CONTACT(node);
+	if (PURPLE_IS_META_CONTACT(node)) {
+		PurpleMetaContact *contact = PURPLE_META_CONTACT(node);
 		PidginBlistNode *gtknode = g_object_get_data(G_OBJECT(node), UI_DATA);
 
 		/*
-		 * Using purple_contact_get_alias here breaks because we
+		 * Using purple_meta_contact_get_alias here breaks because we
 		 * specifically want to check the contact alias only (i.e. not
-		 * the priority buddy, which purple_contact_get_alias does).
+		 * the priority buddy, which purple_meta_contact_get_alias does).
 		 * The "alias" GObject property gives us just the alias.
 		 */
 		g_object_get(contact, "alias", &alias, NULL);
 
 		if (alias || gtknode->contact_expanded) {
-			purple_contact_set_alias(contact, arg2);
+			purple_meta_contact_set_alias(contact, arg2);
 			gtk_blist_auto_personize(purple_blist_node_get_parent(node), arg2);
 		} else {
-			PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact);
+			PurpleBuddy *buddy = purple_meta_contact_get_priority_buddy(contact);
 			purple_buddy_set_local_alias(buddy, arg2);
 			purple_serv_alias_buddy(buddy);
 			gtk_blist_auto_personize(purple_blist_node_get_parent(node), arg2);
@@ -1239,7 +1239,7 @@
 		purple_blist_node_set_bool(node, "collapsed", TRUE);
 
 		for(cnode = purple_blist_node_get_first_child(node); cnode; cnode = purple_blist_node_get_sibling_next(cnode)) {
-			if (PURPLE_IS_CONTACT(cnode)) {
+			if (PURPLE_IS_META_CONTACT(cnode)) {
 				gtknode = g_object_get_data(G_OBJECT(cnode), UI_DATA);
 				if (!gtknode->contact_expanded)
 					continue;
@@ -1248,7 +1248,7 @@
 			}
 		}
 		gtk_widget_trigger_tooltip_query(gtkblist->treeview);
-	} else if(PURPLE_IS_CONTACT(node)) {
+	} else if(PURPLE_IS_META_CONTACT(node)) {
 		pidgin_blist_collapse_contact_cb(NULL, node);
 	}
 }
@@ -1261,11 +1261,11 @@
 	gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
 	gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
 
-	if(PURPLE_IS_CONTACT(node) || PURPLE_IS_BUDDY(node)) {
+	if(PURPLE_IS_META_CONTACT(node) || PURPLE_IS_BUDDY(node)) {
 		PurpleBuddy *buddy;
 
-		if(PURPLE_IS_CONTACT(node))
-			buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
+		if(PURPLE_IS_META_CONTACT(node))
+			buddy = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
 		else
 			buddy = (PurpleBuddy*)node;
 
@@ -1307,7 +1307,7 @@
 	PurpleBlistNode *bnode;
 	GtkTreePath *path;
 
-	if(!PURPLE_IS_CONTACT(node)) {
+	if(!PURPLE_IS_META_CONTACT(node)) {
 		return;
 	}
 
@@ -1341,7 +1341,7 @@
 	PurpleBlistNode *bnode;
 	PidginBlistNode *gtknode;
 
-	if(!PURPLE_IS_CONTACT(node))
+	if(!PURPLE_IS_META_CONTACT(node))
 		return;
 
 	gtknode = g_object_get_data(G_OBJECT(node), UI_DATA);
@@ -1377,8 +1377,8 @@
 	if(state & GDK_CONTROL_MASK && (keyval == 'o' || keyval == 'O')) {
 		PurpleBuddy *buddy;
 
-		if(PURPLE_IS_CONTACT(node)) {
-			buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
+		if(PURPLE_IS_META_CONTACT(node)) {
+			buddy = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
 		} else if(PURPLE_IS_BUDDY(node)) {
 			buddy = (PurpleBuddy*)node;
 		} else {
@@ -1424,7 +1424,7 @@
 				path = gtk_tree_model_get_path(model, &iter);
 				if (!gtk_tree_view_row_expanded(tv, path)) {
 					/* Expand the Group */
-					if (PURPLE_IS_CONTACT(node)) {
+					if (PURPLE_IS_META_CONTACT(node)) {
 						pidgin_blist_expand_contact_cb(NULL, node);
 						gtk_tree_path_free(path);
 						return TRUE;
@@ -1498,9 +1498,9 @@
 		enabled = purple_blist_node_get_bool(node, "gtk-persistent");
 		variant = g_variant_new_boolean(enabled);
 		g_simple_action_set_state(G_SIMPLE_ACTION(action), variant);
-	} else if ((PURPLE_IS_CONTACT(node)) && (gtknode->contact_expanded)) {
+	} else if ((PURPLE_IS_META_CONTACT(node)) && (gtknode->contact_expanded)) {
 		menu = gtk_application_get_menu_by_id(gtk_application, "contact");
-	} else if (PURPLE_IS_CONTACT(node) || PURPLE_IS_BUDDY(node)) {
+	} else if (PURPLE_IS_META_CONTACT(node) || PURPLE_IS_BUDDY(node)) {
 		PurpleAccount *account = NULL;
 		PurpleBuddy *buddy = NULL;
 		PurpleConnection *connection = NULL;
@@ -1510,8 +1510,8 @@
 
 		menu = gtk_application_get_menu_by_id(gtk_application, "buddy");
 
-		if(PURPLE_IS_CONTACT(node)) {
-			buddy = purple_contact_get_priority_buddy(PURPLE_CONTACT(node));
+		if(PURPLE_IS_META_CONTACT(node)) {
+			buddy = purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node));
 		} else {
 			buddy = PURPLE_BUDDY(node);
 		}
@@ -1625,7 +1625,7 @@
 
 	/* CTRL+middle click expands or collapse a contact */
 	} else if ((button == GDK_BUTTON_MIDDLE) && (n_press == 1) &&
-			   (state & GDK_CONTROL_MASK) && PURPLE_IS_CONTACT(node)) {
+			   (state & GDK_CONTROL_MASK) && PURPLE_IS_META_CONTACT(node)) {
 		if (gtknode->contact_expanded)
 			pidgin_blist_collapse_contact_cb(NULL, node);
 		else
@@ -1634,11 +1634,11 @@
 
 	/* Double middle click gets info */
 	} else if ((button == GDK_BUTTON_MIDDLE) && (n_press == 2) &&
-			   (PURPLE_IS_CONTACT(node) || PURPLE_IS_BUDDY(node))) {
+			   (PURPLE_IS_META_CONTACT(node) || PURPLE_IS_BUDDY(node))) {
 		PurpleAccount *account;
 		PurpleBuddy *b;
-		if(PURPLE_IS_CONTACT(node))
-			b = purple_contact_get_priority_buddy((PurpleContact*)node);
+		if(PURPLE_IS_META_CONTACT(node))
+			b = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
 		else
 			b = (PurpleBuddy *)node;
 
@@ -1711,15 +1711,15 @@
 	GdkPixbuf *buf, *ret = NULL;
 	PurpleBuddyIcon *icon = NULL;
 	PurpleAccount *account = NULL;
-	PurpleContact *contact = NULL;
+	PurpleMetaContact *contact = NULL;
 	PurpleImage *custom_img;
 	PurpleProtocol *protocol = NULL;
 	PurpleBuddyIconSpec *icon_spec = NULL;
 	gint orig_width, orig_height, scale_width, scale_height;
 
-	if (PURPLE_IS_CONTACT(node)) {
-		buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
-		contact = (PurpleContact*)node;
+	if (PURPLE_IS_META_CONTACT(node)) {
+		buddy = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
+		contact = (PurpleMetaContact*)node;
 	} else if (PURPLE_IS_BUDDY(node)) {
 		buddy = (PurpleBuddy*)node;
 		contact = purple_buddy_get_contact(buddy);
@@ -1922,9 +1922,9 @@
 	PurpleBuddy *buddy = NULL;
 	PurpleChat *chat = NULL;
 
-	if(PURPLE_IS_CONTACT(node)) {
+	if(PURPLE_IS_META_CONTACT(node)) {
 		if(!gtknode->contact_expanded) {
-			buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
+			buddy = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
 			if(buddy != NULL) {
 				gtkbuddynode = g_object_get_data(G_OBJECT(buddy), UI_DATA);
 			}
@@ -2074,9 +2074,9 @@
 			add_tip_for_account(grid, row, account);
 		}
 
-	} else if (PURPLE_IS_CONTACT(node)) {
+	} else if (PURPLE_IS_META_CONTACT(node)) {
 		PurpleBlistNode *child;
-		PurpleBuddy *b = purple_contact_get_priority_buddy(PURPLE_CONTACT(node));
+		PurpleBuddy *b = purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node));
 		gint row = 0;
 
 		for(child = node->child; child; child = child->next) {
@@ -2249,13 +2249,13 @@
 			cur = g_list_delete_link(cur, cur);
 		}
 	}
-	else if (PURPLE_IS_CONTACT(node) || PURPLE_IS_BUDDY(node))
+	else if (PURPLE_IS_META_CONTACT(node) || PURPLE_IS_BUDDY(node))
 	{
 		/* NOTE: THIS FUNCTION IS NO LONGER CALLED FOR CONTACTS.
 		 * It is only called by create_tip_for_node(), and create_tip_for_node() is never called for a contact.
 		 */
 		PurpleAccount *account;
-		PurpleContact *c;
+		PurpleMetaContact *c;
 		PurpleBuddy *b;
 		PurplePresence *presence;
 		PurpleNotifyUserInfo *user_info;
@@ -2264,10 +2264,10 @@
 		gchar *alias;
 		time_t idle_secs, signon;
 
-		if (PURPLE_IS_CONTACT(node))
+		if (PURPLE_IS_META_CONTACT(node))
 		{
-			c = (PurpleContact *)node;
-			b = purple_contact_get_priority_buddy(c);
+			c = (PurpleMetaContact *)node;
+			b = purple_meta_contact_get_priority_buddy(c);
 		}
 		else
 		{
@@ -2356,7 +2356,7 @@
 			PurpleBlistNode *bnode;
 			int lastseen = 0;
 
-			if (gtknode && (!gtknode->contact_expanded || PURPLE_IS_CONTACT(node)))
+			if (gtknode && (!gtknode->contact_expanded || PURPLE_IS_META_CONTACT(node)))
 			{
 				/* We're either looking at a buddy for a collapsed contact or
 				 * an expanded contact itself so we show the most recent
@@ -2488,9 +2488,9 @@
 	PurplePresence *p = NULL;
 	PurpleStatus *tune;
 
-	if(PURPLE_IS_CONTACT(node)) {
+	if(PURPLE_IS_META_CONTACT(node)) {
 		if(!gtknode->contact_expanded) {
-			buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
+			buddy = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
 		}
 	} else if(PURPLE_IS_BUDDY(node)) {
 		PidginBlistNode *pidgin_node = NULL;
@@ -2595,14 +2595,14 @@
 	const char *name, *name_color, *status_color, *dim_grey;
 	char *text = NULL;
 	PurpleProtocol *protocol = NULL;
-	PurpleContact *contact;
+	PurpleMetaContact *contact;
 	PurplePresence *presence;
 	PidginBlistNode *gtkcontactnode = NULL;
 	char *idletime = NULL, *statustext = NULL, *nametext = NULL;
 	gchar *contact_alias;
 
 	/* XXX Good luck cleaning up this crap */
-	contact = PURPLE_CONTACT(PURPLE_BLIST_NODE(b)->parent);
+	contact = PURPLE_META_CONTACT(PURPLE_BLIST_NODE(b)->parent);
 	if(contact) {
 		gtkcontactnode = g_object_get_data(G_OBJECT(contact), UI_DATA);
 	}
@@ -2742,7 +2742,7 @@
 		gtkblist->selected_node = NULL;
 	if (get_iter_from_node(node, &iter)) {
 		gtk_tree_store_remove(gtkblist->treemodel, &iter);
-		if(update && (PURPLE_IS_CONTACT(node) ||
+		if(update && (PURPLE_IS_META_CONTACT(node) ||
 			PURPLE_IS_BUDDY(node) || PURPLE_IS_CHAT(node))) {
 			pidgin_blist_update(list, node->parent);
 		}
@@ -2848,7 +2848,7 @@
 			return FALSE;
 	}
 
-	g_return_val_if_fail(PURPLE_IS_CONTACT(node), FALSE);
+	g_return_val_if_fail(PURPLE_IS_META_CONTACT(node), FALSE);
 
 	pidgin_node = g_object_get_data(G_OBJECT(node), UI_DATA);
 
@@ -2979,8 +2979,8 @@
 		return TRUE;
 
 	compare = NULL;
-	if (PURPLE_IS_CONTACT(node)) {
-		PurpleBuddy *b = purple_contact_get_priority_buddy(PURPLE_CONTACT(node));
+	if (PURPLE_IS_META_CONTACT(node)) {
+		PurpleBuddy *b = purple_meta_contact_get_priority_buddy(PURPLE_META_CONTACT(node));
 		if (!purple_buddy_get_local_alias(b))
 			compare = purple_buddy_get_name(b);
 	} else if (PURPLE_IS_BUDDY(node)) {
@@ -3298,7 +3298,7 @@
 	if(get_iter_from_node(node, &cur))
 		curptr = &cur;
 
-	if(PURPLE_IS_CONTACT(node) || PURPLE_IS_CHAT(node)) {
+	if(PURPLE_IS_META_CONTACT(node) || PURPLE_IS_CHAT(node)) {
 		current_sort_method->func(node, list, parent_iter, curptr, iter);
 	} else {
 		sort_method_none(node, list, parent_iter, curptr, iter);
@@ -3331,7 +3331,7 @@
 		if(PURPLE_IS_GROUP(node->parent)) {
 			if(!purple_blist_node_get_bool(node->parent, "collapsed"))
 				expand = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &parent_iter);
-		} else if(PURPLE_IS_CONTACT(node->parent) &&
+		} else if(PURPLE_IS_META_CONTACT(node->parent) &&
 				gtkparentnode->contact_expanded) {
 			expand = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &parent_iter);
 		}
@@ -3362,7 +3362,7 @@
 		gnode = node;
 	else if (PURPLE_IS_BUDDY(node))
 		gnode = node->parent->parent;
-	else if (PURPLE_IS_CONTACT(node) || PURPLE_IS_CHAT(node))
+	else if (PURPLE_IS_META_CONTACT(node) || PURPLE_IS_CHAT(node))
 		gnode = node->parent;
 	else
 		return;
@@ -3485,7 +3485,7 @@
 static void pidgin_blist_update_contact(PurpleBuddyList *list, PurpleBlistNode *node)
 {
 	PurpleBlistNode *cnode;
-	PurpleContact *contact;
+	PurpleMetaContact *contact;
 	PurpleBuddy *buddy;
 	PidginBlistNode *gtknode;
 
@@ -3497,7 +3497,7 @@
 	else
 		cnode = node;
 
-	g_return_if_fail(PURPLE_IS_CONTACT(cnode));
+	g_return_if_fail(PURPLE_IS_META_CONTACT(cnode));
 
 	/* First things first, update the group */
 	if (PURPLE_IS_BUDDY(node))
@@ -3505,8 +3505,8 @@
 	else
 		pidgin_blist_update_group(list, cnode->parent);
 
-	contact = (PurpleContact*)cnode;
-	buddy = purple_contact_get_priority_buddy(contact);
+	contact = (PurpleMetaContact*)cnode;
+	buddy = purple_meta_contact_get_priority_buddy(contact);
 
 	if (buddy_is_displayable(buddy))
 	{
@@ -3521,7 +3521,7 @@
 			gchar *mark;
 			const gchar *icon_name = NULL;
 
-			mark = g_markup_escape_text(purple_contact_get_alias(contact), -1);
+			mark = g_markup_escape_text(purple_meta_contact_get_alias(contact), -1);
 
 			icon_name = pidgin_blist_get_status_icon_name(cnode);
 
@@ -3656,7 +3656,7 @@
 
 	if(PURPLE_IS_GROUP(node)) {
 		pidgin_blist_update_group(list, node);
-	} else if(PURPLE_IS_CONTACT(node)) {
+	} else if(PURPLE_IS_META_CONTACT(node)) {
 		pidgin_blist_update_contact(list, node);
 	} else if(PURPLE_IS_BUDDY(node)) {
 		pidgin_blist_update_buddy(list, node, TRUE);
@@ -3998,8 +3998,8 @@
 
 	const char *my_name;
 
-	if(PURPLE_IS_CONTACT(node)) {
-		my_name = purple_contact_get_alias((PurpleContact*)node);
+	if(PURPLE_IS_META_CONTACT(node)) {
+		my_name = purple_meta_contact_get_alias((PurpleMetaContact*)node);
 	} else if(PURPLE_IS_CHAT(node)) {
 		my_name = purple_chat_get_name((PurpleChat*)node);
 	} else {
@@ -4019,8 +4019,8 @@
 
 		gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &n, -1);
 
-		if(PURPLE_IS_CONTACT(n)) {
-			this_name = purple_contact_get_alias((PurpleContact*)n);
+		if(PURPLE_IS_META_CONTACT(n)) {
+			this_name = purple_meta_contact_get_alias((PurpleMetaContact*)n);
 		} else if(PURPLE_IS_CHAT(n)) {
 			this_name = purple_chat_get_name((PurpleChat*)n);
 		} else {
@@ -4058,8 +4058,8 @@
 
 	PurpleBuddy *my_buddy, *this_buddy;
 
-	if(PURPLE_IS_CONTACT(node)) {
-		my_buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
+	if(PURPLE_IS_META_CONTACT(node)) {
+		my_buddy = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)node);
 	} else if(PURPLE_IS_CHAT(node)) {
 		if (cur != NULL) {
 			*iter = *cur;
@@ -4086,16 +4086,16 @@
 
 		gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &n, -1);
 
-		if(PURPLE_IS_CONTACT(n)) {
-			this_buddy = purple_contact_get_priority_buddy((PurpleContact*)n);
+		if(PURPLE_IS_META_CONTACT(n)) {
+			this_buddy = purple_meta_contact_get_priority_buddy((PurpleMetaContact*)n);
 		} else {
 			this_buddy = NULL;
 		}
 
 		name_cmp = purple_utf8_strcasecmp(
-			purple_contact_get_alias(purple_buddy_get_contact(my_buddy)),
+			purple_meta_contact_get_alias(purple_buddy_get_contact(my_buddy)),
 			(this_buddy
-			 ? purple_contact_get_alias(purple_buddy_get_contact(this_buddy))
+			 ? purple_meta_contact_get_alias(purple_buddy_get_contact(this_buddy))
 			 : NULL));
 
 		presence_cmp = purple_buddy_presence_compare(
diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c
--- a/pidgin/gtkconv.c
+++ b/pidgin/gtkconv.c
@@ -1231,7 +1231,7 @@
 	if (purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)
 		return;
 
-	if (PURPLE_IS_CONTACT(node))
+	if (PURPLE_IS_META_CONTACT(node))
 	{
 		PurpleBlistNode *bnode;
 
@@ -1588,7 +1588,7 @@
 pidgin_conv_find_gtkconv(PurpleConversation * conv)
 {
 	PurpleBuddy *bud = purple_blist_find_buddy(purple_conversation_get_account(conv), purple_conversation_get_name(conv));
-	PurpleContact *c;
+	PurpleMetaContact *c;
 	PurpleBlistNode *cn, *bn;
 
 	if (!bud)
@@ -2222,7 +2222,7 @@
 }
 
 static PidginConversation *
-get_gtkconv_with_contact(PurpleContact *contact)
+get_gtkconv_with_contact(PurpleMetaContact *contact)
 {
 	PurpleBlistNode *node;
 
diff --git a/pidgin/gtkdialogs.h b/pidgin/gtkdialogs.h
--- a/pidgin/gtkdialogs.h
+++ b/pidgin/gtkdialogs.h
@@ -39,7 +39,7 @@
 void pidgin_dialogs_remove_buddy(PurpleBuddy *buddy);
 void pidgin_dialogs_remove_group(PurpleGroup *group);
 void pidgin_dialogs_remove_chat(PurpleChat *chat);
-void pidgin_dialogs_remove_contact(PurpleContact *contact);
+void pidgin_dialogs_remove_contact(PurpleMetaContact *contact);
 void pidgin_dialogs_merge_groups(PurpleGroup *group, const char *name);
 
 G_END_DECLS
diff --git a/pidgin/gtkdialogs.c b/pidgin/gtkdialogs.c
--- a/pidgin/gtkdialogs.c
+++ b/pidgin/gtkdialogs.c
@@ -243,7 +243,7 @@
 }
 
 static void
-pidgin_dialogs_remove_contact_cb(PurpleContact *contact)
+pidgin_dialogs_remove_contact_cb(PurpleMetaContact *contact)
 {
 	PurpleBlistNode *bnode, *cnode;
 	PurpleGroup *group;
@@ -259,9 +259,9 @@
 }
 
 void
-pidgin_dialogs_remove_contact(PurpleContact *contact)
+pidgin_dialogs_remove_contact(PurpleMetaContact *contact)
 {
-	PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact);
+	PurpleBuddy *buddy = purple_meta_contact_get_priority_buddy(contact);
 
 	g_return_if_fail(contact != NULL);
 	g_return_if_fail(buddy != NULL);
@@ -340,7 +340,7 @@
 	cnode = ((PurpleBlistNode*)group)->child;
 
 	while (cnode) {
-		if (PURPLE_IS_CONTACT(cnode)) {
+		if (PURPLE_IS_META_CONTACT(cnode)) {
 			bnode = cnode->child;
 			cnode = cnode->next;
 			while (bnode) {
diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c
--- a/pidgin/gtkutils.c
+++ b/pidgin/gtkutils.c
@@ -360,7 +360,7 @@
 
 		for (cnode = gnode->child; cnode != NULL; cnode = cnode->next)
 		{
-			if (!PURPLE_IS_CONTACT(cnode))
+			if (!PURPLE_IS_META_CONTACT(cnode))
 				continue;
 
 			g_object_get(cnode, "alias", &alias, NULL);
diff --git a/pidgin/pidginavatar.c b/pidgin/pidginavatar.c
--- a/pidgin/pidginavatar.c
+++ b/pidgin/pidginavatar.c
@@ -76,13 +76,13 @@
 {
 	GdkPixbufAnimation *ret = NULL;
 	GInputStream *stream = NULL;
-	PurpleContact *contact = NULL;
+	PurpleMetaContact *contact = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
 
 	/* First check if our user has set a custom icon for this buddy. */
 	contact = purple_buddy_get_contact(buddy);
-	if(PURPLE_IS_CONTACT(contact)) {
+	if(PURPLE_IS_META_CONTACT(contact)) {
 		PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
 		PurpleImage *custom_image = NULL;
 
@@ -264,7 +264,7 @@
 	file = gtk_file_chooser_get_file(chooser);
 	filename = g_file_get_path(file);
 	if(filename != NULL) {
-		PurpleContact *contact = purple_buddy_get_contact(buddy);
+		PurpleMetaContact *contact = purple_buddy_get_contact(buddy);
 		PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
 
 		purple_buddy_icons_node_set_custom_icon_from_file(node, filename);
@@ -308,7 +308,7 @@
 
 	buddy = pidgin_avatar_get_effective_buddy(avatar);
 	if(PURPLE_IS_BUDDY(buddy)) {
-		PurpleContact *contact = purple_buddy_get_contact(buddy);
+		PurpleMetaContact *contact = purple_buddy_get_contact(buddy);
 		PurpleBlistNode *node = PURPLE_BLIST_NODE(contact);
 
 		purple_buddy_icons_node_set_custom_icon_from_file(node, NULL);
