diff -udp gaim-1.5.0/src/conversation.c gaim-1.5.0_patched/src/conversation.c
--- gaim-1.5.0/src/conversation.c	2005-07-01 06:55:27.000000000 +0200
+++ gaim-1.5.0_patched/src/conversation.c	2005-08-21 16:24:40.000000000 +0200
@@ -1174,6 +1174,13 @@ gaim_conversation_autoset_title(GaimConv
 		}
 	}
 
+	if (gaim_prefs_get_bool("/core/conversations/add_screen_name_in_title")) {
+		if(account && ((b = gaim_find_buddy(account, name)) != NULL)) {
+			if (b->server_alias != NULL)
+				text = g_strdup_printf("%s (%s)", text, b->server_alias);
+		}
+	}
+	
 	if (text == NULL)
 		text = name;
 
@@ -2845,6 +2852,7 @@ gaim_conversations_init(void)
 	/* Conversations */
 	gaim_prefs_add_none("/core/conversations");
 	gaim_prefs_add_bool("/core/conversations/use_alias_for_title", TRUE);
+	gaim_prefs_add_bool("/core/conversations/add_screen_name_in_title", TRUE);
 
 	/* Conversations -> Chat */
 	gaim_prefs_add_none("/core/conversations/chat");
@@ -2859,6 +2867,8 @@ gaim_conversations_init(void)
 			update_titles_pref_cb, NULL);
 	gaim_prefs_connect_callback("/core/buddies/use_server_alias",
 			update_titles_pref_cb, NULL);
+	gaim_prefs_connect_callback("/core/conversations/add_screen_name_in_title",
+			update_titles_pref_cb, NULL);
 
 
 	/**********************************************************************
Only in gaim-1.5.0_patched/src/: .conversation.c.marks
Only in gaim-1.5.0_patched/src/: .deps
diff -udp gaim-1.5.0/src/gtkblist.c gaim-1.5.0_patched/src/gtkblist.c
--- gaim-1.5.0/src/gtkblist.c	2005-07-05 04:03:17.000000000 +0200
+++ gaim-1.5.0_patched/src/gtkblist.c	2005-08-16 19:39:26.000000000 +0200
@@ -2110,7 +2110,58 @@ static void gaim_gtk_blist_drag_data_rcv
 static void gaim_gtk_blist_paint_tip(GtkWidget *widget, GdkEventExpose *event, GaimBlistNode *node)
 {
 	GtkStyle *style;
-	GdkPixbuf *pixbuf = gaim_gtk_blist_get_status_icon(node, GAIM_STATUS_ICON_LARGE);
+	
+	GaimBuddy *b;
+	GdkPixbuf *orgbuddyicon, *buddyicon;
+	
+	if(GAIM_BLIST_NODE_IS_CONTACT(node)) {
+		GaimContact *contact = (GaimContact*)node;
+		b = gaim_contact_get_priority_buddy(contact);
+	} else {
+		b = (GaimBuddy *)node;
+	}
+	
+	int margin_size = 4;
+	int border_size = 0;
+	int buddyicon_width = 30, buddyicon_height = 30;
+	
+	// * try to use patched layout
+	if(gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons_in_tooltip"))
+	{
+		margin_size = 4;
+		border_size = 1;
+		buddyicon_width = 96;
+		buddyicon_height = 96;
+		orgbuddyicon = gaim_gtk_blist_get_buddy_icon(b);
+		buddyicon = gdk_pixbuf_scale_simple(orgbuddyicon, buddyicon_width, buddyicon_height, GDK_INTERP_BILINEAR);
+
+		//gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+		//				   NULL, gtkblist->tipwindow, "tooltip", margin_size-border_size, margin_size-border_size, margin_size + buddyicon_width + border_size, margin_size + buddyicon_height + border_size);
+	}
+	
+	// * If there is no buddy icon or user chosed not to use buddy icons in tooltips, just use the default looks
+	if(!orgbuddyicon || !gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons_in_tooltip"))
+	{
+		margin_size = 4;
+		border_size = 0;
+		buddyicon_width = 30;
+		buddyicon_height = 30;
+		orgbuddyicon = gaim_gtk_blist_get_status_icon(node, GAIM_STATUS_ICON_LARGE);
+		buddyicon = gdk_pixbuf_scale_simple(orgbuddyicon, buddyicon_width, buddyicon_height, GDK_INTERP_BILINEAR);
+		
+		// * If there is no buddy icon to show, just display the standard protocol icon
+		if(!orgbuddyicon)
+		{
+			orgbuddyicon = gaim_gtk_blist_get_status_icon(node, GAIM_STATUS_ICON_LARGE);
+			buddyicon = gdk_pixbuf_scale_simple(orgbuddyicon, buddyicon_width, buddyicon_height, GDK_INTERP_BILINEAR);
+		}
+		
+	}
+	
+	if(orgbuddyicon)
+		g_object_unref(orgbuddyicon);
+	
+	
 	PangoLayout *layout;
 	char *tooltiptext = gaim_get_tooltip_text(node);
 
@@ -2125,18 +2176,26 @@ static void gaim_gtk_blist_paint_tip(Gtk
 
 	gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
 					   NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1);
-
+	
+	// * Make a black frame for the buddy icon
+	if(border_size > 0)
+	{
+		gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+						   NULL, gtkblist->tipwindow, "tooltip", margin_size, margin_size, buddyicon_width + (2*border_size), buddyicon_height + (2*border_size));
+	}
+	
 #if GTK_CHECK_VERSION(2,2,0)
-	gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, pixbuf,
-			0, 0, 4, 4, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0);
+	gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, buddyicon,
+			0, 0, margin_size + border_size, margin_size + border_size, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0);
 #else
-	gdk_pixbuf_render_to_drawable(pixbuf, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 4, 4, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
+	gdk_pixbuf_render_to_drawable(buddyicon, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, margin_size + border_size, margin_size + border_size, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
 #endif
 
-	gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-			  NULL, gtkblist->tipwindow, "tooltip", 38, 4, layout);
-
-	g_object_unref (pixbuf);
+  	gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, TRUE,
+			  NULL, gtkblist->tipwindow, "tooltip", buddyicon_width + (margin_size*2) + (border_size*2), margin_size, layout);
+	if(buddyicon)
+		g_object_unref(buddyicon);
+	
 	g_object_unref (layout);
 	g_free(tooltiptext);
 
@@ -2315,11 +2374,21 @@ static gboolean gaim_gtk_blist_tooltip_t
 
 	w = PANGO_PIXELS(w) + 8;
 	h = PANGO_PIXELS(h) + 8;
-
-	/* 38 is the size of a large status icon plus 4 pixels padding on each side.
+	
+	// * {{{ patched
+	// * 66 is the extra size needed to display an icon of 96x96 pixels
+	// * 2x1 px for the 1 pixel border (north/south or east/west) around the buddy icon */
+	int border_width = 1;
+	int margin = 4;
+	int ico_size_w = 96, ico_size_h = 96;
+	w = w + ico_size_w + (margin*2) + (border_width*2);
+	h = MAX(h, ico_size_h + (margin*2) + (border_width*2));
+	// * }}} patched
+	
+	/* 38 is the size of a large status icon plus 4 pixels margin on each side.
 	 *  I should #define this or something */
-	w = w + 38;
-	h = MAX(h, 38);
+	//w = w + 38;
+	//h = MAX(h, 38);
 
 #if GTK_CHECK_VERSION(2,2,0)
 	if( w > mon_size.width )
@@ -2773,16 +2842,18 @@ GdkPixbuf *gaim_gtk_blist_get_status_ico
 	return scale;
 }
 
-static GdkPixbuf *gaim_gtk_blist_get_buddy_icon(GaimBuddy *b)
+// * this function was patched to return the original image instead of resizing it
+GdkPixbuf *gaim_gtk_blist_get_buddy_icon(GaimBuddy *b)
 {
-	GdkPixbuf *buf, *ret;
+	GdkPixbuf *buf;
 	GdkPixbufLoader *loader;
 	GaimBuddyIcon *icon;
 	const char *data;
 	size_t len;
 
-	if (!gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"))
-		return NULL;
+	// * this function should always return the icon, other functions should determine if it should be displayed
+	//if (!gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"))
+	//	return NULL;
 
 	if (!(icon = gaim_buddy_get_icon(b)))
 		if (!(icon = gaim_buddy_icons_find(b->account, b->name))) /* Not sure I like this...*/
@@ -2799,14 +2870,13 @@ static GdkPixbuf *gaim_gtk_blist_get_bud
 	g_object_unref(G_OBJECT(loader));
 
 	if (buf) {
-		if (!GAIM_BUDDY_IS_ONLINE(b))
-			gdk_pixbuf_saturate_and_pixelate(buf, buf, 0.0, FALSE);
-		if (b->idle && gaim_prefs_get_bool("/gaim/gtk/blist/grey_idle_buddies"))
-			gdk_pixbuf_saturate_and_pixelate(buf, buf, 0.25, FALSE);
+		// * what's this? display the images as they are, no reason to mod the image too
+		//if (!GAIM_BUDDY_IS_ONLINE(b))
+		//	gdk_pixbuf_saturate_and_pixelate(buf, buf, 0.0, FALSE);
+		//if (b->idle && gaim_prefs_get_bool("/gaim/gtk/blist/grey_idle_buddies"))
+		//	gdk_pixbuf_saturate_and_pixelate(buf, buf, 0.25, FALSE);
 
-		ret = gdk_pixbuf_scale_simple(buf,30,30, GDK_INTERP_BILINEAR);
-		g_object_unref(G_OBJECT(buf));
-		return ret;
+		return buf;
 	}
 	return NULL;
 }
@@ -3709,7 +3779,7 @@ static void gaim_gtk_blist_update_group(
 
 static void buddy_node(GaimBuddy *buddy, GtkTreeIter *iter, GaimBlistNode *node)
 {
-	GdkPixbuf *status, *avatar;
+	GdkPixbuf *status, *avatar, *orgAvatar;
 	char *mark;
 	char *warning = NULL, *idle = NULL;
 
@@ -3719,7 +3789,14 @@ static void buddy_node(GaimBuddy *buddy,
 			(gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")
 			 ? GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL));
 
-	avatar = gaim_gtk_blist_get_buddy_icon(buddy);
+	if (!gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons"))
+		orgAvatar = NULL;
+	else
+		orgAvatar = gaim_gtk_blist_get_buddy_icon(buddy);
+	avatar = gdk_pixbuf_scale_simple(orgAvatar, 30, 30, GDK_INTERP_BILINEAR);
+	if(orgAvatar)
+		g_object_unref(orgAvatar);
+
 	mark = gaim_gtk_blist_get_name_markup(buddy, selected);
 
 	if (buddy->idle > 0) {
diff -udp gaim-1.5.0/src/gtkblist.h gaim-1.5.0_patched/src/gtkblist.h
--- gaim-1.5.0/src/gtkblist.h	2004-08-20 07:11:29.000000000 +0200
+++ gaim-1.5.0_patched/src/gtkblist.h	2005-08-16 19:39:26.000000000 +0200
@@ -168,6 +168,10 @@ void gaim_gtk_blist_update_refresh_timeo
 GdkPixbuf *gaim_gtk_blist_get_status_icon(GaimBlistNode *node,
 		GaimStatusIconSize size);
 
+// * {{{ patched
+GdkPixbuf *gaim_gtk_blist_get_buddy_icon(GaimBuddy *b);
+// * }}{ patched
+
 /**************************************************************************
  * @name GTK+ Buddy List sorting functions
  **************************************************************************/
diff -udp gaim-1.5.0/src/gtkconv.c gaim-1.5.0_patched/src/gtkconv.c
--- gaim-1.5.0/src/gtkconv.c	2005-07-22 09:12:01.000000000 +0200
+++ gaim-1.5.0_patched/src/gtkconv.c	2005-08-21 16:11:23.000000000 +0200
@@ -1016,6 +1016,45 @@ static void do_search_cb(GtkWidget *widg
 }
 
 static void
+remove_icon(GaimConversation *conv)
+{
+	if (!conv)
+		return;
+
+	GaimGtkConversation *gtkconv;
+	GaimGtkWindow *gtkwin;
+
+	gtkconv = GAIM_GTK_CONVERSATION(conv);
+
+	g_return_if_fail(gtkconv != NULL);
+
+	gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(conv));
+	
+	if (gtkconv->u.im->icon_container != NULL) {
+		gtk_widget_hide(gtkconv->u.im->icon_container);
+		gtk_check_menu_item_set_active(gtkwin->menu.show_buddy_icon, FALSE);
+	}
+}
+
+static void
+show_icon(GaimConversation *conv)
+{
+	GaimGtkConversation *gtkconv;
+	GaimGtkWindow *gtkwin;
+	
+	gtkconv = GAIM_GTK_CONVERSATION(conv);
+
+	g_return_if_fail(gtkconv != NULL);
+
+	gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(conv));
+
+	if (gtkconv->u.im->icon_container != NULL) {
+		gtk_widget_show(gtkconv->u.im->icon_container);
+		gtk_check_menu_item_set_active(gtkwin->menu.show_buddy_icon, TRUE);
+	}
+}
+
+static void
 menu_find_cb(gpointer data, guint action, GtkWidget *widget)
 {
 	GaimConvWindow *win = (GaimConvWindow *)data;
@@ -1300,6 +1339,29 @@ menu_timestamps_cb(gpointer data, guint 
 }
 
 static void
+menu_buddy_icon_cb(gpointer data, guint action, GtkWidget *widget)
+{
+	GaimConvWindow *win = (GaimConvWindow *)data;
+	GaimConversation *conv;
+	GaimGtkConversation *gtkconv;
+
+	conv = gaim_conv_window_get_active_conversation(win);
+
+	if (!conv)
+		return;
+
+	gtkconv = GAIM_GTK_CONVERSATION(conv);
+
+	if (gtkconv->u.im->icon_container != NULL) {
+		if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) {
+			show_icon(conv);
+		} else {
+			remove_icon(conv);
+		}
+	}
+}
+
+static void
 chat_do_im(GaimConversation *conv, const char *who)
 {
 	GaimPluginProtocolInfo *prpl_info = NULL;
@@ -2624,30 +2686,6 @@ toggle_icon_animate_cb(GtkWidget *w, Gai
 }
 
 static void
-remove_icon(GaimGtkConversation *gtkconv)
-{
-	g_return_if_fail(gtkconv != NULL);
-
-	if (gtkconv->u.im->icon_container != NULL)
-		gtk_widget_destroy(gtkconv->u.im->icon_container);
-
-	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)
 {
 	GaimConversation *conv = (GaimConversation *)user_data;
@@ -2724,7 +2762,7 @@ icon_menu(GtkObject *obj, GdkEventButton
 
 	button = gtk_menu_item_new_with_label(_("Hide Icon"));
 	g_signal_connect_swapped(G_OBJECT(button), "activate",
-							 G_CALLBACK(remove_icon), gtkconv);
+							 G_CALLBACK(remove_icon), conv);
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), button);
 	gtk_widget_show(button);
 
@@ -2809,6 +2847,9 @@ gray_stuff_out(GaimConversation *conv)
 			gtk_widget_hide(gtkconv->add);
 			gtk_widget_show(gtkconv->remove);
 		}
+		
+		// * The menu item should not be sensitive if there is no icon
+		gtk_widget_set_sensitive(gtkwin->menu.show_buddy_icon, (gtkconv->u.im->icon_container != NULL));
 
 		gtk_widget_show(gtkwin->menu.insert_link);
 		gtk_widget_show(gtkwin->menu.insert_image);
@@ -3035,6 +3076,12 @@ switch_conv_cb(GtkNotebook *notebook, Gt
 	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.show_timestamps),
 				       gtkconv->show_timestamps);
 
+	if (gtkconv->u.im->icon_container != NULL) {
+		gtkconv->show_buddy_icon = TRUE;
+	}
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.show_buddy_icon),
+				       gtkconv->show_buddy_icon);
+
 	/*
 	 * We pause icons when they are not visible.  If this icon should
 	 * be animated then start it back up again.
@@ -3725,6 +3772,7 @@ static GtkItemFactoryEntry menu_items[] 
 	{ N_("/Options/Enable _Sounds"), NULL, menu_sounds_cb, 0, "<CheckItem>" },
 	{ N_("/Options/Show Formatting _Toolbar"), NULL, menu_toolbar_cb, 0, "<CheckItem>" },
 	{ N_("/Options/Show Ti_mestamps"), "F2", menu_timestamps_cb, 0, "<CheckItem>" },
+	{ N_("/Options/Show Buddy Icon"), NULL, menu_buddy_icon_cb, 0, "<CheckItem>" },
 };
 
 static const int menu_item_count =
@@ -3833,6 +3881,9 @@ setup_menubar(GaimConvWindow *win)
 	gtkwin->menu.show_timestamps =
 		gtk_item_factory_get_widget(gtkwin->menu.item_factory,
 									N_("/Options/Show Timestamps"));
+	gtkwin->menu.show_buddy_icon =
+		gtk_item_factory_get_widget(gtkwin->menu.item_factory,
+									N_("/Options/Show Buddy Icon"));
 
 	generate_send_as_items(win, NULL);
 
Only in gaim-1.5.0_patched/src/: .gtkconv.c.marks
diff -udp gaim-1.5.0/src/gtkconv.h gaim-1.5.0_patched/src/gtkconv.h
--- gaim-1.5.0/src/gtkconv.h	2004-08-26 15:32:50.000000000 +0200
+++ gaim-1.5.0_patched/src/gtkconv.h	2005-08-17 00:08:12.000000000 +0200
@@ -79,6 +79,7 @@ struct _GaimGtkWindow
 		GtkWidget *sounds;
 		GtkWidget *show_formatting_toolbar;
 		GtkWidget *show_timestamps;
+		GtkWidget *show_buddy_icon;
 
 		GtkWidget *send_as;
 
@@ -143,6 +144,7 @@ struct _GaimGtkConversation
 	gboolean make_sound;
 	gboolean show_formatting_toolbar;
 	gboolean show_timestamps;
+	gboolean show_buddy_icon;
 
 	GtkTooltips *tooltips;
 
diff -udp gaim-1.5.0/src/gtkprefs.c gaim-1.5.0_patched/src/gtkprefs.c
--- gaim-1.5.0/src/gtkprefs.c	2005-05-19 02:20:22.000000000 +0200
+++ gaim-1.5.0_patched/src/gtkprefs.c	2005-08-16 19:39:26.000000000 +0200
@@ -967,6 +967,8 @@ GtkWidget *list_page() {
 	vbox = gaim_gtk_make_frame (ret, _("Buddy Display"));
 	gaim_gtk_prefs_checkbox(_("Show buddy _icons"),
 			"/gaim/gtk/blist/show_buddy_icons", vbox);
+	gaim_gtk_prefs_checkbox(_("Show buddy icons in tooltip"),
+			"/gaim/gtk/blist/show_buddy_icons_in_tooltip", vbox);
 	gaim_gtk_prefs_checkbox(_("Show _warning levels"),
 			"/gaim/gtk/blist/show_warning_level", vbox);
 	gaim_gtk_prefs_checkbox(_("Show idle _times"),
@@ -1027,6 +1029,8 @@ GtkWidget *conv_page() {
 				  "/gaim/gtk/conversations/show_formatting_toolbar", vbox);
 	gaim_gtk_prefs_checkbox(_("Show _aliases in tabs/titles"),
 			"/core/conversations/use_alias_for_title", vbox);
+	gaim_gtk_prefs_checkbox(_("Add screen name to tabs/titles in parentheses"),
+			"/core/conversations/add_screen_name_in_title", vbox);
 	gaim_gtk_prefs_checkbox(_("Show buddy _icons"),
 			"/gaim/gtk/conversations/im/show_buddy_icons", vbox);
 	gaim_gtk_prefs_checkbox(_("Enable buddy ic_on animation"),
Only in gaim-1.5.0_patched/src/: Makefile
Common subdirectories: gaim-1.5.0/src/protocols and gaim-1.5.0_patched/src/protocols
Common subdirectories: gaim-1.5.0/src/win32 and gaim-1.5.0_patched/src/win32
