diff --git a/ChangeLog.API b/ChangeLog.API
--- a/ChangeLog.API
+++ b/ChangeLog.API
@@ -731,6 +731,7 @@
 		* pidgin_conv_placement_get_fnc
 		* pidgin_conv_placement_set_current_func
 		* pidgin_conv_placement_get_current_func
+		* pidgin_conv_update_buddy_icon
 		* pidgin_create_dialog, use pidgin_dialog_new instead.
 		* pidgin_create_small_button, use pidgin_close_button_new instead.
 		* pidgin_create_status_icon
diff --git a/pidgin/gtkconv.h b/pidgin/gtkconv.h
--- a/pidgin/gtkconv.h
+++ b/pidgin/gtkconv.h
@@ -151,14 +151,6 @@
 PurpleConversationUiOps *pidgin_conversations_get_conv_ui_ops(void);
 
 /**
- * pidgin_conv_update_buddy_icon:
- * @im: The IM conversation.
- *
- * Updates the buddy icon on a conversation.
- */
-void pidgin_conv_update_buddy_icon(PurpleIMConversation *im);
-
-/**
  * pidgin_conv_switch_active_conversation:
  * @conv: The conversation
  *
diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c
--- a/pidgin/gtkconv.c
+++ b/pidgin/gtkconv.c
@@ -81,14 +81,7 @@
 	GtkWidget *progress;
 	guint32 typing_timer;
 
-	/* Buddy icon stuff */
-	GtkWidget *icon_container;
-	GtkWidget *icon;
-	gboolean show_icon;
-	gboolean animate;
-	GdkPixbufAnimation *anim;
-	GdkPixbufAnimationIter *iter;
-	guint32 icon_timer;
+	GtkWidget *avatar;
 };
 
 /*
@@ -1859,9 +1852,6 @@
 	pidgin_conv_switch_active_conversation(PURPLE_CONVERSATION(im));
 }
 
-/**************************************************************************
- * A bunch of buddy icon functions
- **************************************************************************/
 static void
 update_tab_icon(PurpleConversation *conv)
 {
@@ -1880,16 +1870,6 @@
 			emblem = pidgin_blist_get_emblem((PurpleBlistNode*)b);
 	}
 
-#if 0
-	/* This was purposely left busted rather than providing an intermitent fix,
-	 * as the infopane will be split out and rewritten as a proper widget
-	 * shortly.
-	 */
-	gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model),
-			&(gtkconv->infopane_iter),
-			CONV_ICON_COLUMN, infopane_status, -1);
-#endif
-
 	gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model),
 			&(gtkconv->infopane_iter),
 			CONV_EMBLEM_COLUMN, emblem, -1);
@@ -1913,343 +1893,7 @@
 	gtk_widget_queue_draw(gtkconv->infopane);
 }
 
-static gboolean
-redraw_icon(gpointer data)
-{
-	PidginConversation *gtkconv = (PidginConversation *)data;
-	PurpleConversation *conv = gtkconv->active_conv;
-	PurpleAccount *account;
-
-	GdkPixbuf *buf;
-	GdkPixbuf *scale;
-	gint delay;
-	int scale_width, scale_height;
-	int size;
-
-	gtkconv = PIDGIN_CONVERSATION(conv);
-	account = purple_conversation_get_account(conv);
-
-	if (!(account && purple_account_get_connection(account))) {
-		gtkconv->u.im->icon_timer = 0;
-		return FALSE;
-	}
-
-	gdk_pixbuf_animation_iter_advance(gtkconv->u.im->iter, NULL);
-	buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter);
-
-	scale_width = gdk_pixbuf_get_width(buf);
-	scale_height = gdk_pixbuf_get_height(buf);
-
-	gtk_widget_get_size_request(gtkconv->u.im->icon_container, NULL, &size);
-	size = MIN(size, MIN(scale_width, scale_height));
-	size = CLAMP(size, BUDDYICON_SIZE_MIN, BUDDYICON_SIZE_MAX);
-
-	if (scale_width == scale_height) {
-		scale_width = scale_height = size;
-	} else if (scale_height > scale_width) {
-		scale_width = size * scale_width / scale_height;
-		scale_height = size;
-	} else {
-		scale_height = size * scale_height / scale_width;
-		scale_width = size;
-	}
-
-	scale = gdk_pixbuf_scale_simple(buf, scale_width, scale_height,
-		GDK_INTERP_BILINEAR);
-	if (pidgin_gdk_pixbuf_is_opaque(scale))
-		pidgin_gdk_pixbuf_make_round(scale);
-
-	gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->u.im->icon), scale);
-	g_object_unref(G_OBJECT(scale));
-	gtk_widget_queue_draw(gtkconv->u.im->icon);
-
-	delay = gdk_pixbuf_animation_iter_get_delay_time(gtkconv->u.im->iter);
-
-	if (delay < 100)
-		delay = 100;
-
-	gtkconv->u.im->icon_timer = g_timeout_add(delay, redraw_icon, gtkconv);
-
-	return FALSE;
-}
-
-static void
-start_anim(GtkWidget *widget, PidginConversation *gtkconv)
-{
-	int delay;
-
-	if (gtkconv->u.im->anim == NULL)
-		return;
-
-	if (gtkconv->u.im->icon_timer != 0)
-		return;
-
-	if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim))
-		return;
-
-	delay = gdk_pixbuf_animation_iter_get_delay_time(gtkconv->u.im->iter);
-
-	if (delay < 100)
-		delay = 100;
-
-	gtkconv->u.im->icon_timer = g_timeout_add(delay, redraw_icon, gtkconv);
-}
-
-static void
-remove_icon(GtkWidget *widget, PidginConversation *gtkconv)
-{
-	GList *children;
-	GtkWidget *event;
-	PurpleConversation *conv = gtkconv->active_conv;
-
-	g_return_if_fail(conv != NULL);
-
-	gtk_widget_set_size_request(gtkconv->u.im->icon_container, -1, BUDDYICON_SIZE_MIN);
-	children = gtk_container_get_children(GTK_CONTAINER(gtkconv->u.im->icon_container));
-	if (children) {
-		/* We know there's only one child here. It'd be nice to shortcut to the
-		   event box, but we can't change the PidginConversation until 3.0 */
-		event = (GtkWidget *)children->data;
-		gtk_container_remove(GTK_CONTAINER(gtkconv->u.im->icon_container), event);
-		g_list_free(children);
-	}
-
-	if (gtkconv->u.im->anim != NULL)
-		g_object_unref(G_OBJECT(gtkconv->u.im->anim));
-
-	if (gtkconv->u.im->icon_timer != 0)
-		g_source_remove(gtkconv->u.im->icon_timer);
-
-	if (gtkconv->u.im->iter != NULL)
-		g_object_unref(G_OBJECT(gtkconv->u.im->iter));
-
-	gtkconv->u.im->icon_timer = 0;
-	gtkconv->u.im->icon = NULL;
-	gtkconv->u.im->anim = NULL;
-	gtkconv->u.im->iter = NULL;
-	gtkconv->u.im->show_icon = FALSE;
-}
-
-static void
-saveicon_writefile_cb(void *user_data, const char *filename)
-{
-	PidginConversation *gtkconv = (PidginConversation *)user_data;
-	PurpleIMConversation *im = PURPLE_IM_CONVERSATION(gtkconv->active_conv);
-	PurpleBuddyIcon *icon;
-	const void *data;
-	size_t len;
-
-	icon = purple_im_conversation_get_icon(im);
-	data = purple_buddy_icon_get_data(icon, &len);
-
-	if ((len <= 0) || (data == NULL) || !g_file_set_contents(filename, data, len, NULL)) {
-		purple_notify_error(gtkconv, NULL, _("Unable to save icon file to disk."), NULL, NULL);
-	}
-}
-
-static void
-custom_icon_sel_cb(const char *filename, gpointer data)
-{
-	if (filename) {
-		PurpleContact *contact = data;
-
-		purple_buddy_icons_node_set_custom_icon_from_file((PurpleBlistNode*)contact, filename);
-	}
-	g_object_set_data(G_OBJECT(data), "buddy-icon-chooser", NULL);
-}
-
-static void
-set_custom_icon_cb(GtkWidget *widget, PurpleContact *contact)
-{
-	GtkFileChooserNative *win = NULL;
-
-	/* Should not happen as menu item should be disabled. */
-	g_return_if_fail(contact != NULL);
-
-	win = g_object_get_data(G_OBJECT(contact), "buddy-icon-chooser");
-	if (win == NULL) {
-		GtkMenu *menu = GTK_MENU(gtk_widget_get_parent(widget));
-		GtkWidget *toplevel =
-		        gtk_widget_get_toplevel(gtk_menu_get_attach_widget(menu));
-		win = pidgin_buddy_icon_chooser_new(GTK_WINDOW(toplevel),
-		                                    custom_icon_sel_cb, contact);
-		g_object_set_data_full(G_OBJECT(contact), "buddy-icon-chooser", win,
-				       g_object_unref);
-	}
-	gtk_native_dialog_show(GTK_NATIVE_DIALOG(win));
-}
-
-static void
-change_size_cb(GtkWidget *widget, PidginConversation *gtkconv)
-{
-	int size = 0;
-	PurpleConversation *conv = gtkconv->active_conv;
-	GSList *buddies;
-
-	gtk_widget_get_size_request(gtkconv->u.im->icon_container, NULL, &size);
-
-	if (size == BUDDYICON_SIZE_MAX) {
-		size = BUDDYICON_SIZE_MIN;
-	} else {
-		size = BUDDYICON_SIZE_MAX;
-	}
-
-	gtk_widget_set_size_request(gtkconv->u.im->icon_container, -1, size);
-	pidgin_conv_update_buddy_icon(PURPLE_IM_CONVERSATION(conv));
-
-	buddies = purple_blist_find_buddies(purple_conversation_get_account(conv),
-			purple_conversation_get_name(conv));
-	for (; buddies; buddies = g_slist_delete_link(buddies, buddies)) {
-		PurpleBuddy *buddy = buddies->data;
-		PurpleContact *contact = purple_buddy_get_contact(buddy);
-		purple_blist_node_set_int((PurpleBlistNode*)contact, "pidgin-infopane-iconsize", size);
-	}
-}
-
-static void
-remove_custom_icon_cb(GtkWidget *widget, PidginConversation *gtkconv)
-{
-	const gchar *name;
-	PurpleBuddy *buddy;
-	PurpleAccount *account;
-	PurpleContact *contact;
-	PurpleConversation *conv = gtkconv->active_conv;
-
-	account = purple_conversation_get_account(conv);
-	name = purple_conversation_get_name(conv);
-	buddy = purple_blist_find_buddy(account, name);
-	if (!buddy) {
-		return;
-	}
-	contact = purple_buddy_get_contact(buddy);
-
-	purple_buddy_icons_node_set_custom_icon_from_file((PurpleBlistNode*)contact, NULL);
-}
-
-static void
-icon_menu_save_cb(GtkWidget *widget, PidginConversation *gtkconv)
-{
-	PurpleConversation *conv = gtkconv->active_conv;
-	const gchar *ext;
-	gchar *buf;
-
-	g_return_if_fail(conv != NULL);
-
-	ext = purple_buddy_icon_get_extension(purple_im_conversation_get_icon(PURPLE_IM_CONVERSATION(conv)));
-
-	buf = g_strdup_printf("%s.%s", purple_normalize(purple_conversation_get_account(conv), purple_conversation_get_name(conv)), ext);
-
-	purple_request_file(gtkconv, _("Save Icon"), buf, TRUE,
-		G_CALLBACK(saveicon_writefile_cb), NULL,
-		purple_request_cpar_from_conversation(conv), gtkconv);
-
-	g_free(buf);
-}
-
-static void
-stop_anim(GtkWidget *widget, PidginConversation *gtkconv)
-{
-	if (gtkconv->u.im->icon_timer != 0)
-		g_source_remove(gtkconv->u.im->icon_timer);
-
-	gtkconv->u.im->icon_timer = 0;
-}
-
-
-static void
-toggle_icon_animate_cb(GtkWidget *w, PidginConversation *gtkconv)
-{
-	gtkconv->u.im->animate =
-		gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w));
-
-	if (gtkconv->u.im->animate)
-		start_anim(NULL, gtkconv);
-	else
-		stop_anim(NULL, gtkconv);
-}
-
-static gboolean
-icon_menu(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkconv)
-{
-	GtkWidget *menu = NULL;
-	GList *old_menus = NULL;
-	PurpleConversation *conv;
-	PurpleBuddy *buddy;
-
-	if (e->button == GDK_BUTTON_PRIMARY && e->type == GDK_BUTTON_PRESS) {
-		change_size_cb(NULL, gtkconv);
-		return TRUE;
-	}
-
-	if (!gdk_event_triggers_context_menu((GdkEvent *)e)) {
-		return FALSE;
-	}
-
-	/*
-	 * If a menu already exists, destroy it before creating a new one,
-	 * thus freeing-up the memory it occupied.
-	 */
-	while ((old_menus = gtk_menu_get_for_attach_widget(widget)) != NULL) {
-		menu = old_menus->data;
-		gtk_menu_detach(GTK_MENU(menu));
-		gtk_widget_destroy(menu);
-	}
-
-	menu = gtk_menu_new();
-	gtk_menu_attach_to_widget(GTK_MENU(menu), widget, NULL);
-
-	if (gtkconv->u.im->anim &&
-		!(gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)))
-	{
-		pidgin_new_check_item(menu, _("Animate"),
-							G_CALLBACK(toggle_icon_animate_cb), gtkconv,
-							gtkconv->u.im->icon_timer);
-	}
-
-	conv = gtkconv->active_conv;
-	buddy = purple_blist_find_buddy(purple_conversation_get_account(conv),
-	                                purple_conversation_get_name(conv));
-
-	pidgin_new_menu_item(menu, _("Hide Icon"), NULL,
-                        G_CALLBACK(remove_icon), gtkconv);
-
-	pidgin_new_menu_item(menu, _("Save Icon As..."), GTK_STOCK_SAVE_AS,
-                        G_CALLBACK(icon_menu_save_cb), gtkconv);
-
-	if (buddy) {
-		PurpleContact *contact = purple_buddy_get_contact(buddy);
-		pidgin_new_menu_item(menu, _("Set Custom Icon..."), NULL,
-		                     G_CALLBACK(set_custom_icon_cb), contact);
-	} else {
-		GtkWidget *item =
-		        pidgin_new_menu_item(menu, _("Set Custom Icon..."), NULL,
-		                             G_CALLBACK(set_custom_icon_cb), NULL);
-		gtk_widget_set_sensitive(item, FALSE);
-	}
-
-	pidgin_new_menu_item(menu, _("Change Size"), NULL,
-                        G_CALLBACK(change_size_cb), gtkconv);
-
-	/* Is there a custom icon for this person? */
-	if (buddy)
-	{
-		PurpleContact *contact = purple_buddy_get_contact(buddy);
-		if (contact && purple_buddy_icons_node_has_custom_icon((PurpleBlistNode*)contact))
-		{
-			pidgin_new_menu_item(menu, _("Remove Custom Icon"),
-                                        NULL, G_CALLBACK(remove_custom_icon_cb),
-                                        gtkconv);
-		}
-	}
-
-	gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *)e);
-
-	return TRUE;
-}
-
-/**************************************************************************
- * End of the bunch of buddy icon functions
- **************************************************************************/
+
 void
 pidgin_conv_present_conversation(PurpleConversation *conv)
 {
@@ -3876,7 +3520,6 @@
 	PurpleConversation *conv = gtkconv->active_conv;
 	PurpleBuddy *buddy;
 	gboolean chat = PURPLE_IS_CHAT_CONVERSATION(conv);
-	int buddyicon_size = 0;
 
 	/* Setup the top part of the pane */
 	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
@@ -3888,9 +3531,6 @@
 	gtk_widget_show(event_box);
 	gtkconv->infopane_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 
-	GtkWidget *avatar = pidgin_avatar_new();
-	gtk_box_pack_end(GTK_BOX(gtkconv->infopane_hbox), avatar, FALSE, FALSE, 0);
-
 	gtk_box_pack_start(GTK_BOX(vbox), event_box, FALSE, FALSE, 0);
 	gtk_container_add(GTK_CONTAINER(event_box), gtkconv->infopane_hbox);
 	gtk_widget_show(gtkconv->infopane_hbox);
@@ -3926,26 +3566,16 @@
 		gtk_widget_show(sizing_vbox);
 	}
 	else {
-		gtkconv->u.im->icon_container = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+		gtkconv->u.im->avatar = pidgin_avatar_new();
+		gtk_box_pack_end(GTK_BOX(gtkconv->infopane_hbox), gtkconv->u.im->avatar,
+		                 FALSE, FALSE, 0);
 
 		if ((buddy = purple_blist_find_buddy(purple_conversation_get_account(conv),
 						purple_conversation_get_name(conv))) != NULL) {
-			PurpleContact *contact = purple_buddy_get_contact(buddy);
-			if (contact) {
-				buddyicon_size = purple_blist_node_get_int((PurpleBlistNode*)contact, "pidgin-infopane-iconsize");
-			}
-
-			pidgin_avatar_set_buddy(avatar, buddy);
+			pidgin_avatar_set_buddy(gtkconv->u.im->avatar, buddy);
 		} else {
-			pidgin_avatar_set_conversation(avatar, conv);
+			pidgin_avatar_set_conversation(gtkconv->u.im->avatar, conv);
 		}
-		buddyicon_size = CLAMP(buddyicon_size, BUDDYICON_SIZE_MIN, BUDDYICON_SIZE_MAX);
-		gtk_widget_set_size_request(gtkconv->u.im->icon_container, -1, buddyicon_size);
-
-		gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox),
-				   gtkconv->u.im->icon_container, FALSE, FALSE, 0);
-
-		gtk_widget_show(gtkconv->u.im->icon_container);
 	}
 
 	gtk_widget_show(gtkconv->infopane);
@@ -4030,13 +3660,6 @@
 		gtkconv
 	);
 
-	if (!chat) {
-		/* For sending typing notifications for IMs */
-		gtkconv->u.im->typing_timer = 0;
-		gtkconv->u.im->animate = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons");
-		gtkconv->u.im->show_icon = TRUE;
-	}
-
 	return vbox;
 }
 
@@ -4168,11 +3791,7 @@
 		purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar")
 	);
 
-	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons"))
-		gtk_widget_show(gtkconv->infopane_hbox);
-	else
-		gtk_widget_hide(gtkconv->infopane_hbox);
-
+	gtk_widget_show(gtkconv->infopane_hbox);
 
 	g_signal_connect_swapped(G_OBJECT(pane), "focus",
 	                         G_CALLBACK(gtk_widget_grab_focus),
@@ -4266,12 +3885,6 @@
 	g_object_unref(gtkconv->tab_cont);
 
 	if (PURPLE_IS_IM_CONVERSATION(conv)) {
-		if (gtkconv->u.im->icon_timer != 0)
-			g_source_remove(gtkconv->u.im->icon_timer);
-
-		if (gtkconv->u.im->anim != NULL)
-			g_object_unref(G_OBJECT(gtkconv->u.im->anim));
-
 		if (gtkconv->u.im->typing_timer != 0)
 			g_source_remove(gtkconv->u.im->typing_timer);
 
@@ -4967,12 +4580,6 @@
 		purple_conversation_autoset_title(conv);
 	}
 
-	if (fields & PIDGIN_CONV_BUDDY_ICON)
-	{
-		if (PURPLE_IS_IM_CONVERSATION(conv))
-			pidgin_conv_update_buddy_icon(PURPLE_IM_CONVERSATION(conv));
-	}
-
 	if (fields & PIDGIN_CONV_MENU)
 	{
 		gray_stuff_out(PIDGIN_CONVERSATION(conv));
@@ -5231,184 +4838,6 @@
  * Public conversation utility functions
  **************************************************************************/
 void
-pidgin_conv_update_buddy_icon(PurpleIMConversation *im)
-{
-	PidginConversation *gtkconv;
-	PurpleConversation *conv;
-	PidginConvWindow *win;
-
-	PurpleBuddy *buddy;
-
-	PurpleImage *custom_img = NULL;
-	gconstpointer data = NULL;
-	size_t len;
-
-	GdkPixbuf *buf;
-
-	GList *children;
-	GtkWidget *event;
-	GdkPixbuf *scale;
-	int scale_width, scale_height;
-	int size = 0;
-
-	PurpleAccount *account;
-
-	PurpleBuddyIcon *icon;
-
-	conv = PURPLE_CONVERSATION(im);
-
-	g_return_if_fail(conv != NULL);
-	g_return_if_fail(PIDGIN_IS_PIDGIN_CONVERSATION(conv));
-
-	gtkconv = PIDGIN_CONVERSATION(conv);
-	win = gtkconv->win;
-	if (conv != gtkconv->active_conv)
-		return;
-
-	if (!gtkconv->u.im->show_icon)
-		return;
-
-	account = purple_conversation_get_account(conv);
-
-	/* Remove the current icon stuff */
-	children = gtk_container_get_children(GTK_CONTAINER(gtkconv->u.im->icon_container));
-	if (children) {
-		/* We know there's only one child here. It'd be nice to shortcut to the
-		   event box, but we can't change the PidginConversation until 3.0 */
-		event = (GtkWidget *)children->data;
-		gtk_container_remove(GTK_CONTAINER(gtkconv->u.im->icon_container), event);
-		g_list_free(children);
-	}
-
-	if (gtkconv->u.im->anim != NULL)
-		g_object_unref(G_OBJECT(gtkconv->u.im->anim));
-
-	gtkconv->u.im->anim = NULL;
-
-	if (gtkconv->u.im->icon_timer != 0)
-		g_source_remove(gtkconv->u.im->icon_timer);
-
-	gtkconv->u.im->icon_timer = 0;
-
-	if (gtkconv->u.im->iter != NULL)
-		g_object_unref(G_OBJECT(gtkconv->u.im->iter));
-
-	gtkconv->u.im->iter = NULL;
-
-	if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons"))
-		return;
-
-	if (purple_conversation_get_connection(conv) == NULL)
-		return;
-
-	buddy = purple_blist_find_buddy(account, purple_conversation_get_name(conv));
-	if (buddy)
-	{
-		PurpleContact *contact = purple_buddy_get_contact(buddy);
-		if (contact) {
-			custom_img = purple_buddy_icons_node_find_custom_icon((PurpleBlistNode*)contact);
-			if (custom_img) {
-				/* There is a custom icon for this user */
-				data = purple_image_get_data(custom_img);
-				len = purple_image_get_data_size(custom_img);
-			}
-		}
-	}
-
-	if (data == NULL) {
-		icon = purple_im_conversation_get_icon(im);
-		if (icon == NULL)
-		{
-			gtk_widget_set_size_request(gtkconv->u.im->icon_container,
-			                            -1, BUDDYICON_SIZE_MIN);
-			return;
-		}
-
-		data = purple_buddy_icon_get_data(icon, &len);
-		if (data == NULL)
-		{
-			gtk_widget_set_size_request(gtkconv->u.im->icon_container,
-			                            -1, BUDDYICON_SIZE_MIN);
-			return;
-		}
-	}
-
-	gtkconv->u.im->anim = pidgin_pixbuf_anim_from_data(data, len);
-	if (custom_img)
-		g_object_unref(custom_img);
-
-	if (!gtkconv->u.im->anim) {
-		purple_debug_error("gtkconv", "Couldn't load icon for conv %s\n",
-				purple_conversation_get_name(conv));
-		return;
-	}
-
-	if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) {
-		GdkPixbuf *stat;
-		gtkconv->u.im->iter = NULL;
-		stat = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim);
-		buf = gdk_pixbuf_add_alpha(stat, FALSE, 0, 0, 0);
-	} else {
-		GdkPixbuf *stat;
-		gtkconv->u.im->iter =
-			gdk_pixbuf_animation_get_iter(gtkconv->u.im->anim, NULL); /* LEAK */
-		stat = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter);
-		buf = gdk_pixbuf_add_alpha(stat, FALSE, 0, 0, 0);
-		if (gtkconv->u.im->animate)
-			start_anim(NULL, gtkconv);
-	}
-
-	scale_width = gdk_pixbuf_get_width(buf);
-	scale_height = gdk_pixbuf_get_height(buf);
-
-	gtk_widget_get_size_request(gtkconv->u.im->icon_container, NULL, &size);
-	size = MIN(size, MIN(scale_width, scale_height));
-
-	/* Some sanity checks */
-	size = CLAMP(size, BUDDYICON_SIZE_MIN, BUDDYICON_SIZE_MAX);
-	if (scale_width == scale_height) {
-		scale_width = scale_height = size;
-	} else if (scale_height > scale_width) {
-		scale_width = size * scale_width / scale_height;
-		scale_height = size;
-	} else {
-		scale_height = size * scale_height / scale_width;
-		scale_width = size;
-	}
-	scale = gdk_pixbuf_scale_simple(buf, scale_width, scale_height,
-				GDK_INTERP_BILINEAR);
-	g_object_unref(buf);
-	if (pidgin_gdk_pixbuf_is_opaque(scale))
-		pidgin_gdk_pixbuf_make_round(scale);
-
-	event = gtk_event_box_new();
-	gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event);
-	gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE);
-	gtk_widget_add_events(event,
-	                      GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
-	g_signal_connect(G_OBJECT(event), "button-press-event",
-					 G_CALLBACK(icon_menu), gtkconv);
-
-	pidgin_tooltip_setup_for_widget(event, gtkconv, pidgin_conv_create_tooltip, NULL);
-	gtk_widget_show(event);
-
-	gtkconv->u.im->icon = gtk_image_new_from_pixbuf(scale);
-	gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon);
-	gtk_widget_show(gtkconv->u.im->icon);
-
-	g_object_unref(G_OBJECT(scale));
-
-	/* The buddy icon code needs badly to be fixed. */
-	if(pidgin_conv_window_is_active_conversation(conv))
-	{
-		buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim);
-		if (buddy && !PURPLE_BUDDY_IS_ONLINE(buddy))
-			gdk_pixbuf_saturate_and_pixelate(buf, buf, 0.0, FALSE);
-		gtk_window_set_icon(GTK_WINDOW(win->window), buf);
-	}
-}
-
-void
 pidgin_conv_update_buttons_by_protocol(PurpleConversation *conv)
 {
 	PidginConvWindow *win;
@@ -5575,63 +5004,6 @@
 }
 
 static void
-animate_buddy_icons_pref_cb(const char *name, PurplePrefType type,
-							gconstpointer value, gpointer data)
-{
-	GList *l;
-	PurpleConversation *conv;
-	PidginConversation *gtkconv;
-	PidginConvWindow *win;
-
-	if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons"))
-		return;
-
-	/* Set the "animate" flag for each icon based on the new preference */
-	for (l = purple_conversations_get_ims(); l != NULL; l = l->next) {
-		conv = (PurpleConversation *)l->data;
-		gtkconv = PIDGIN_CONVERSATION(conv);
-		if (gtkconv)
-			gtkconv->u.im->animate = GPOINTER_TO_INT(value);
-	}
-
-	/* Now either stop or start animation for the active conversation in each window */
-	for (l = pidgin_conv_windows_get_list(); l != NULL; l = l->next) {
-		win = l->data;
-		conv = pidgin_conv_window_get_active_conversation(win);
-		pidgin_conv_update_buddy_icon(PURPLE_IM_CONVERSATION(conv));
-	}
-}
-
-static void
-show_buddy_icons_pref_cb(const char *name, PurplePrefType type,
-						 gconstpointer value, gpointer data)
-{
-	GList *l;
-
-	for (l = purple_conversations_get_all(); l != NULL; l = l->next) {
-		PurpleConversation *conv = l->data;
-		if (!PIDGIN_CONVERSATION(conv))
-			continue;
-		if (GPOINTER_TO_INT(value))
-			gtk_widget_show(PIDGIN_CONVERSATION(conv)->infopane_hbox);
-		else
-			gtk_widget_hide(PIDGIN_CONVERSATION(conv)->infopane_hbox);
-
-		if (PURPLE_IS_IM_CONVERSATION(conv)) {
-			pidgin_conv_update_buddy_icon(PURPLE_IM_CONVERSATION(conv));
-		}
-	}
-
-	/* Make the tabs show/hide correctly */
-	for (l = pidgin_conv_windows_get_list(); l != NULL; l = l->next) {
-		PidginConvWindow *win = l->data;
-		if (pidgin_conv_window_get_gtkconv_count(win) == 1)
-			gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook),
-						   GPOINTER_TO_INT(value) == 0);
-	}
-}
-
-static void
 account_status_changed_cb(PurpleAccount *account, PurpleStatus *oldstatus,
                           PurpleStatus *newstatus)
 {
@@ -6096,10 +5468,7 @@
 	purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/width", 340);
 	purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/height", 390);
 
-	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons", TRUE);
-
 	purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height", 54);
-	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons", TRUE);
 
 	purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new", "never");
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately", TRUE);
@@ -6121,10 +5490,6 @@
 		minimum_entry_lines_pref_cb, NULL);
 
 	/* IM callbacks */
-	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons",
-								animate_buddy_icons_pref_cb, NULL);
-	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons",
-								show_buddy_icons_pref_cb, NULL);
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/hide_new",
 								hide_new_pref_cb, NULL);
 
@@ -6921,8 +6286,6 @@
 		g_source_remove(gtkconv->u.im->typing_timer);
 		gtkconv->u.im->typing_timer = 0;
 	}
-
-	stop_anim(NULL, gtkconv);
 }
 
 static void
@@ -7084,14 +6447,6 @@
 	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu->show_formatting_toolbar),
 	                             purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar"));
 
-	/*
-	 * We pause icons when they are not visible.  If this icon should
-	 * be animated then start it back up again.
-	 */
-	if (PURPLE_IS_IM_CONVERSATION(conv) &&
-	    (gtkconv->u.im->animate))
-		start_anim(NULL, gtkconv);
-
 	purple_signal_emit(pidgin_conversations_get_handle(), "conversation-switched", conv);
 }
 
@@ -7458,9 +6813,6 @@
 
 	gtk_widget_show(gtkconv->menu_tabby);
 
-	if (PURPLE_IS_IM_CONVERSATION(conv))
-		pidgin_conv_update_buddy_icon(PURPLE_IM_CONVERSATION(conv));
-
 	/* Build and set conversations tab */
 	pidgin_conv_tab_pack(win, gtkconv);
 
@@ -7568,11 +6920,20 @@
 	                        "tab-expand", !tabs_side && !angle,
 	                        "tab-fill", TRUE, NULL);
 
-	if (pidgin_conv_window_get_gtkconv_count(win) == 1)
-		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook),
-					   purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs") &&
-                                           (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons") ||
-                                           purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") != GTK_POS_TOP));
+	if (pidgin_conv_window_get_gtkconv_count(win) == 1) {
+		gboolean show_tabs = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs");
+		gint tab_side = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side");
+
+		if(show_tabs) {
+			if(tab_side == GTK_POS_TOP) {
+				gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE);
+			} else {
+				gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), TRUE);
+			}
+		} else {
+			gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE);
+		}
+	}
 
 	/* show the widgets */
 /*	gtk_widget_show(gtkconv->icon); */
diff --git a/pidgin/gtkprefs.c b/pidgin/gtkprefs.c
--- a/pidgin/gtkprefs.c
+++ b/pidgin/gtkprefs.c
@@ -117,8 +117,6 @@
 		GtkWidget *show_incoming_formatting;
 		struct {
 			GtkWidget *close_immediately;
-			GtkWidget *show_buddy_icons;
-			GtkWidget *animate_buddy_icons;
 			GtkWidget *send_typing;
 		} im;
 		GtkWidget *use_smooth_scrolling;
@@ -1547,14 +1545,6 @@
 	pidgin_prefs_bind_checkbox(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately",
 			win->conversations.im.close_immediately);
 
-	pidgin_prefs_bind_checkbox(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons",
-			win->conversations.im.show_buddy_icons);
-	pidgin_prefs_bind_checkbox(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons",
-			win->conversations.im.animate_buddy_icons);
-	g_object_bind_property(win->conversations.im.show_buddy_icons, "active",
-			win->conversations.im.animate_buddy_icons, "sensitive",
-			G_BINDING_SYNC_CREATE);
-
 	pidgin_prefs_bind_checkbox("/purple/conversations/im/send_typing",
 			win->conversations.im.send_typing);
 
@@ -2760,12 +2750,6 @@
 			conversations.im.close_immediately);
 	gtk_widget_class_bind_template_child(
 			widget_class, PidginPrefsWindow,
-			conversations.im.show_buddy_icons);
-	gtk_widget_class_bind_template_child(
-			widget_class, PidginPrefsWindow,
-			conversations.im.animate_buddy_icons);
-	gtk_widget_class_bind_template_child(
-			widget_class, PidginPrefsWindow,
 			conversations.im.send_typing);
 	gtk_widget_class_bind_template_child(
 			widget_class, PidginPrefsWindow,
diff --git a/pidgin/pidginavatar.c b/pidgin/pidginavatar.c
--- a/pidgin/pidginavatar.c
+++ b/pidgin/pidginavatar.c
@@ -24,13 +24,6 @@
 
 #include "pidgin/pidginavatar.h"
 
-#define PIDGIN_AVATAR_ACTION_PREFIX "avatar"
-
-/* if you change this value, you _MUST_ update Avatar/menu.ui for the new value
- * as well.
- */
-#define PIDGIN_AVATAR_ANIMATE_ACTION "animate"
-
 struct _PidginAvatar {
 	GtkEventBox parent;
 
@@ -58,16 +51,6 @@
  * Actions
  *****************************************************************************/
 static void
-pidgin_avatar_animate_toggle(GSimpleAction *action, GVariant *value,
-                             gpointer data)
-{
-	PidginAvatar *avatar = PIDGIN_AVATAR(data);
-
-	pidgin_avatar_set_animate(avatar, g_variant_get_boolean(value));
-	g_simple_action_set_state(action, value);
-}
-
-static void
 pidgin_avatar_save_response_cb(GtkNativeDialog *native, gint response,
                                gpointer data)
 {
@@ -196,10 +179,6 @@
 
 static GActionEntry actions[] = {
 	{
-		.name = PIDGIN_AVATAR_ANIMATE_ACTION,
-		.state = "false",
-		.change_state = pidgin_avatar_animate_toggle,
-	}, {
 		.name = "save-avatar",
 		.activate = pidgin_avatar_save_cb,
 	}, {
@@ -386,19 +365,8 @@
                                    gpointer user_data)
 {
 	PidginAvatar *avatar = PIDGIN_AVATAR(widget);
-	GActionGroup *group = NULL;
 
-	group = gtk_widget_get_action_group(widget, PIDGIN_AVATAR_ACTION_PREFIX);
-	if(G_IS_SIMPLE_ACTION_GROUP(group)) {
-		GVariant *state = NULL;
-
-		state = g_action_group_get_action_state(group,
-		                                        PIDGIN_AVATAR_ANIMATE_ACTION);
-
-		if(!g_variant_get_boolean(state)) {
-			pidgin_avatar_set_animate(avatar, FALSE);
-		}
-	}
+	pidgin_avatar_set_animate(avatar, FALSE);
 
 	return FALSE;
 }
@@ -479,8 +447,7 @@
 	g_action_map_add_action_entries(G_ACTION_MAP(group), actions,
 	                                G_N_ELEMENTS(actions), avatar);
 
-	gtk_widget_insert_action_group(GTK_WIDGET(avatar),
-	                               PIDGIN_AVATAR_ACTION_PREFIX,
+	gtk_widget_insert_action_group(GTK_WIDGET(avatar), "avatar",
 	                               G_ACTION_GROUP(group));
 }
 
diff --git a/pidgin/resources/Avatar/menu.ui b/pidgin/resources/Avatar/menu.ui
--- a/pidgin/resources/Avatar/menu.ui
+++ b/pidgin/resources/Avatar/menu.ui
@@ -3,10 +3,6 @@
   <menu id="menu">
     <section>
       <item>
-        <attribute name="label" translatable="yes">Animate</attribute>
-        <attribute name="action">avatar.animate</attribute>
-      </item>
-      <item>
         <attribute name="label" translatable="yes">Save Avatar As...</attribute>
         <attribute name="action">avatar.save-avatar</attribute>
       </item>
diff --git a/pidgin/resources/Prefs/prefs.ui b/pidgin/resources/Prefs/prefs.ui
--- a/pidgin/resources/Prefs/prefs.ui
+++ b/pidgin/resources/Prefs/prefs.ui
@@ -674,36 +674,6 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkCheckButton" id="conversations.im.show_buddy_icons">
-                                    <property name="label" translatable="yes">Show _detailed information</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="draw_indicator">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">3</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="conversations.im.animate_buddy_icons">
-                                    <property name="label" translatable="yes">Enable buddy ic_on animation</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="draw_indicator">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">4</property>
-                                  </packing>
-                                </child>
-                                <child>
                                   <object class="GtkCheckButton" id="conversations.im.send_typing">
                                     <property name="label" translatable="yes">_Notify buddies that you are typing to them</property>
                                     <property name="visible">True</property>
