changeset 16600:9f6d974045e0

merge of '1acd995dc3e2344ce39284792a212a2e4175f961' and '9babd54703e39c2b110b3103749d44a43979607e'
author Mark Doliner <mark@kingant.net>
date Sat, 28 Apr 2007 18:32:47 +0000
parents 976a9b4c336a (diff) 79c5daa011a2 (current diff)
children 1ba0560cbff9 3c1c77f441c6
files PROGRAMMING_NOTES libpurple/version.h pidgin/pixmaps/status/16/available_i.png pidgin/pixmaps/status/16/away_i.png pidgin/pixmaps/status/16/busy_i.png pidgin/pixmaps/status/16/extended-away_i.png pidgin/pixmaps/status/16/rtl/chat.png pidgin/pixmaps/status/16/rtl/extended-away_i.png pidgin/pixmaps/status/22/rtl/chat.png pidgin/pixmaps/status/32/rtl/chat.png pidgin/pixmaps/status/48/rtl/chat.png pidgin/pixmaps/toolbar/16/accounts.png pidgin/pixmaps/toolbar/16/scalable/accounts.svg pidgin/pixmaps/toolbar/16/scalable/connect.svg pidgin/pixmaps/toolbar/16/scalable/disconnect.svg pidgin/pixmaps/toolbar/16/scalable/insert-image.svg pidgin/pixmaps/toolbar/16/scalable/message-new.svg pidgin/pixmaps/toolbar/16/scalable/plugins.svg pidgin/pixmaps/toolbar/16/scalable/typing.svg pidgin/pixmaps/toolbar/16/scalable/user-info.svg pidgin/pixmaps/toolbar/16/scalable/window-icon.svg pidgin/pixmaps/toolbar/16/typing.png pidgin/pixmaps/toolbar/16/user-info.png pidgin/pixmaps/toolbar/16/window-icon.png pidgin/plugins/perl/common/GtkUI.pm pidgin/plugins/perl/common/GtkUI.xs
diffstat 305 files changed, 6195 insertions(+), 5924 deletions(-) [+]
line wrap: on
line diff
--- a/COPYRIGHT	Wed Apr 25 06:11:35 2007 +0000
+++ b/COPYRIGHT	Sat Apr 28 18:32:47 2007 +0000
@@ -39,6 +39,7 @@
 Herman Bloggs
 David Blue
 Jason Boerner
+Hylke Bons
 Graham Booker
 Paolo Borelli
 Julien Bossart
@@ -227,6 +228,7 @@
 Paul Miller
 Arkadiusz Miskiewicz
 Andrew Molloy
+Michael Monreal
 Benjamin Moody
 Tim Mooney
 Sergio Moretto
@@ -234,6 +236,7 @@
 Richard Nelson
 Dennis Nezic
 Matthew A. Nicholson
+Andreas Nilsson
 Henning Norén
 Szilard Novaki
 Novell
--- a/ChangeLog	Wed Apr 25 06:11:35 2007 +0000
+++ b/ChangeLog	Sat Apr 28 18:32:47 2007 +0000
@@ -172,6 +172,7 @@
 	* Added /nickserv, /memoserv, /chanserv and /operserv
 	  commands (Joao Luís Marques Pinto)
 	* Added CTCP VERSION via /version (Andrej Krivulčík)
+	* Added /whowas command (achris)
 
 	Jabber Features:
 	* Support for SRV lookups
--- a/ChangeLog.API	Wed Apr 25 06:11:35 2007 +0000
+++ b/ChangeLog.API	Sat Apr 28 18:32:47 2007 +0000
@@ -164,6 +164,14 @@
 	* gaim_gtk_buddy_icon_get_scale_size() was changed to accept an
 	  additional parameter which is used to determine what kind of
 	  scaling should be done, if any.
+    * purple_request_input(), purple_request_choice(),
+      purple_request_choice_varg(), purple_request_action(),
+      purple_request_action_varg(), purple_request_fields(),
+      purple_request_yes_no(), purple_request_ok_cancel(),
+      purple_request_accept_cancel(), purple_request_file(), and
+      purple_request_folder() was changed to accept account, who, and
+      conversation parameters for associating the request with an account, a
+      buddy, or a conversation.
 
 	Removed:
 	* gaim_gtk_sound_{get,set}_mute() (replaced by the /gaim/gtk/sound/mute
--- a/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -6,7 +6,6 @@
 		HACKING \
 		Makefile.mingw \
 		PLUGIN_HOWTO \
-		PROGRAMMING_NOTES \
 		README.MTN \
 		README.mingw \
 		config.h.mingw \
--- a/PROGRAMMING_NOTES	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-Notes on keeping Pidgin, Finch, and libpurple OS independant
-------------------------------------------------------------
-
-General
--------
-- Use G_DIR_SEPARATOR_S and G_DIR_SEPARATOR for paths
-
-- Use g_getenv, g_snprintf, g_vsnprintf
-
-- Use purple_home_dir instead of g_get_home_dir or g_getenv("HOME")
-
-- Make sure when including win32dep.h that it is the last header to
-  be included.
-
-- Open binary files when reading or writing with 'b' mode.
-
-  e.g: fopen("somefile", "wb");
-
-  Not doing so will open files in windows using default translation mode. 
-  i.e. newline -> <CR><LF>
-
-Paths
------
-
-- DATADIR, LOCALEDIR & LIBDIR are defined as functions in the win32 build
-  Doing the following will therefore break the windows build:
-
-  printf("File in DATADIR is: %s\n", DATADIR G_DIR_SEPARATOR_S "pic.png");
-
-  it should be:
-
-  printf("File in DATADIR is: %s%s%s\n", DATADIR, G_DIR_SEPARATOR_S, "pic.png");
-
-PLUGINS & PROTOS
-----------------
-
-- G_MODULE_EXPORT all functions which are to be accessed from outside the
-  scope of its "dll" or "so". (E.G. purple_plugin_init)
-
-- G_MODULE_IMPORT all global variables which are located outside your
-  dynamic library. (E.G. connections)
-
-  (Not doing this will cause "Memory Access Violations" in win32)
--- a/config.h.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/config.h.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -325,7 +325,7 @@
 /* #define HAVE_SIGNAL_H 1 */
 
 /* Define if we have silcmime.h */
-/* #undef HAVE_SILCMIME_H */
+#define HAVE_SILCMIME_H 1
 
 /* Define to 1 if you have the <smime.h> header file. */
 /* #undef HAVE_SMIME_H */
--- a/configure.ac	Wed Apr 25 06:11:35 2007 +0000
+++ b/configure.ac	Sat Apr 28 18:32:47 2007 +0000
@@ -1,11 +1,46 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([pidgin], [2.0.0beta7devel], [devel@pidgin.im])
+AC_PREREQ([2.50])
+
+# Making releases:
+#   purple_micro_version += 1
+# if any functions have been added:
+#   purple_micro_version = 0
+#   purple_minor_version += 1
+# if backwards compatibility has been broken
+#   purple_minor_version = 0
+#   purple_micro_version = 0
+#   purple_major_version += 1;
+#
+m4_define([purple_major_version], [2])
+m4_define([purple_minor_version], [0])
+m4_define([purple_micro_version], [0])
+m4_define([purple_version_suffix], [devel])
+m4_define([purple_version],
+          [purple_major_version.purple_minor_version.purple_micro_version])
+m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix]))
+
+AC_INIT([pidgin], [purple_display_version], [devel@pidgin.im])
+
 AC_CANONICAL_SYSTEM
 AM_CONFIG_HEADER(config.h)
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
 #AM_INIT_AUTOMAKE([foreign dist-bzip2])
 
-AC_PREREQ([2.50])
+PURPLE_MAJOR_VERSION=purple_major_version
+PURPLE_MINOR_VERSION=purple_minor_version
+PURPLE_MICRO_VERSION=purple_micro_version
+PURPLE_VERSION=[purple_display_version]
+AC_SUBST(PURPLE_MAJOR_VERSION)
+AC_SUBST(PURPLE_MINOR_VERSION)
+AC_SUBST(PURPLE_MICRO_VERSION)
+AC_SUBST(PURPLE_VERSION)
+
+m4_define([lt_current], [m4_eval(100 * purple_major_version + purple_minor_version)])
+m4_define([lt_age], [purple_minor_version])
+m4_define([lt_revision], [purple_micro_version])
+LT_VERSION_INFO="lt_current:lt_revision:lt_age"
+AC_SUBST(LT_VERSION_INFO)
+
 
 AC_DEFINE(PIDGIN_NAME, "Pidgin", [The user-visible application name])
 
@@ -807,7 +842,22 @@
 AC_CHECK_HEADER(sys/utsname.h)
 AC_CHECK_FUNC(uname)
 
-AC_ARG_ENABLE(fortify, [AC_HELP_STRING([--disable-fortify], [compile without FORTIFY_SOURCE support])], , enable_fortify=yes)
+AC_ARG_ENABLE(fortify, [AC_HELP_STRING([--disable-fortify], [compile without FORTIFY_SOURCE support])], enable_fortify="$enableval", enable_fortify=yes)
+
+AC_ARG_ENABLE(mcheck, [AC_HELP_STRING([--enable-mcheck], [compile with mcheck (malloc debugging) support])], enable_mcheck="$enableval", enable_mcheck="$enable_debug")
+if test "x$enable_mcheck" = "xyes" ; then
+	orig_LIBS="$LIBS"
+	LIBS="$LIBS -lmcheck"
+	AC_MSG_CHECKING(for mcheck support)
+	AC_TRY_COMPILE([], [
+		int main() {return 0;}
+	], [
+		AC_MSG_RESULT(yes)
+	], [
+		AC_MSG_RESULT(no)
+		LIBS="$orig_LIBS"
+	])
+fi
 
 if test "x$GCC" = "xyes"; then
 	dnl We enable -Wall later.
@@ -835,10 +885,12 @@
 			"-Waggregate-return" \
 			"-Wcast-align" \
 			"-Wdeclaration-after-statement" \
+			"-Wendif-labels" \
 			"-Werror-implicit-function-declaration" \
 			"-Wextra -Wno-sign-compare -Wno-unused-parameter" \
 			"-Winit-self" \
 			"-Wmissing-declarations" \
+			"-Wmissing-noreturn" \
 			"-Wmissing-prototypes" \
 			"-Wnested-externs" \
 			"-Wpointer-arith" \
@@ -875,7 +927,7 @@
 			}
 		], [
 			AC_MSG_RESULT(yes)
-			DEBUG_CFLAGS="$DEBUG_CFLAGS -D_FORTIFY_SOURCE=2"
+			DEBUG_CFLAGS="$DEBUG_CFLAGS -Wp,-D_FORTIFY_SOURCE=2"
 		], [
 			AC_MSG_RESULT(no)
 		])
@@ -1996,6 +2048,7 @@
 		   libpurple/protocols/yahoo/Makefile
 		   libpurple/protocols/zephyr/Makefile
 		   libpurple/tests/Makefile
+		   libpurple/version.h
 		   finch/Makefile
 		   finch/libgnt/Makefile
 		   finch/libgnt/gnt.pc
--- a/doc/funniest_home_convos.txt	Wed Apr 25 06:11:35 2007 +0000
+++ b/doc/funniest_home_convos.txt	Sat Apr 28 18:32:47 2007 +0000
@@ -451,3 +451,12 @@
 (07:54:03 PM) clueless21:  what's an im client?
 (07:54:25 PM) Nathan Walp: it lets you chat with other people, like we are chatting now
 (07:54:45 PM) clueless21:  oooooooooo... thanks
+
+23:58 -!- seanegan is now known as beta7
+23:58 <beta7> Hey, guys, remember me?
+23:59 <beta7> We were all supposed to be working on getting me out.
+23:59 <beta7> you guys remember that?
+23:59 -!- mode/#pidgin [+o elb] by ChanServ
+23:59 -!- beta7 was kicked from #pidgin by elb [getting feisty, are we?]
+23:59 -!- mode/#pidgin [-o elb] by ChanServ
+23:59 <marv> elb: good job getting beta7 out
--- a/doc/pidgin-arch.fig	Wed Apr 25 06:11:35 2007 +0000
+++ b/doc/pidgin-arch.fig	Sat Apr 28 18:32:47 2007 +0000
@@ -119,7 +119,7 @@
 	 5550 2400 5550 1800
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	 4200 1800 5100 2925
+	 5100 2925 4200 1800
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
 	 1050 2100 1050 2700
@@ -130,12 +130,12 @@
 	 6900 3600 2400 3600
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	 7200 1575 6300 1050
+	 6300 1050 7200 1575
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	 7200 1725 6300 3000
+	 6300 3000 7200 1725
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	 7200 3750 6300 3150
+	 6300 3150 7200 3750
 4 1 0 50 -1 0 12 0.0000 4 135 1110 1125 1275 User Interface\001
 4 0 0 50 -1 0 12 0.0000 4 135 390 3225 3375 Core\001
--- a/finch/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,5 +1,3 @@
-if ENABLE_GNT
-
 EXTRA_DIST = \
 		getopt.c \
 		getopt.h \
@@ -7,8 +5,12 @@
 
 SUBDIRS = libgnt plugins
 
+if ENABLE_GNT
+
 bin_PROGRAMS = finch
 
+endif
+
 finch_SOURCES = \
 	gntaccount.c \
 	gntblist.c \
@@ -74,4 +76,3 @@
 	$(DBUS_CFLAGS) \
 	$(LIBXML_CFLAGS) \
 	$(GNT_CFLAGS)
-endif
--- a/finch/finch.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/finch.c	Sat Apr 28 18:32:47 2007 +0000
@@ -202,6 +202,11 @@
 		{0, 0, 0, 0}
 	};
 
+#ifdef PURPLE_FATAL_ASSERTS
+	/* Make g_return_... functions fatal. */
+	g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL);
+#endif
+
 #ifdef ENABLE_NLS
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	bind_textdomain_codeset(PACKAGE, "UTF-8");
@@ -272,9 +277,32 @@
 	 * Fire up this baby.
 	 */
 
-	/* Because we don't want debug-messages to show up and corrup the display */
+	/* We don't want debug-messages to show up and corrupt the display */
 	purple_debug_set_enabled(debug_enabled);
 
+	/* If we're using a custom configuration directory, we
+	 * do NOT want to migrate, or weird things will happen. */
+	if (opt_config_dir_arg == NULL)
+	{
+		if (!purple_core_migrate())
+		{
+			char *old = g_strconcat(purple_home_dir(),
+			                        G_DIR_SEPARATOR_S ".gaim", NULL);
+			char *text = g_strdup_printf(_(
+				"%s encountered errors migrating your settings "
+				"from %s to %s. Please investigate and complete the "
+				"migration by hand."), _("Finch"),
+				old, purple_user_dir());
+
+			g_free(old);
+
+			purple_print_utf8_to_console(stderr, text);
+			g_free(text);
+
+			return 0;
+		}
+	}
+
 	purple_core_set_ui_ops(gnt_core_get_ui_ops());
 	purple_eventloop_set_ui_ops(gnt_eventloop_get_ui_ops());
 	purple_idle_set_ui_ops(finch_idle_get_ui_ops());
@@ -300,9 +328,10 @@
 	/* TODO: Move prefs loading into purple_prefs_init() */
 	purple_prefs_load();
 	purple_prefs_update_old();
+	finch_prefs_update_old();
 
 	/* load plugins we had when we quit */
-	purple_plugins_load_saved("/purple/gnt/plugins/loaded");
+	purple_plugins_load_saved("/finch/plugins/loaded");
 
 	/* TODO: Move pounces loading into purple_pounces_init() */
 	purple_pounces_load();
@@ -326,7 +355,7 @@
 	else
 	{
 		/* Everything is good to go--sign on already */
-		if (!purple_prefs_get_bool("/core/savedstatus/startup_current_status"))
+		if (!purple_prefs_get_bool("/purple/savedstatus/startup_current_status"))
 			purple_savedstatus_activate(purple_savedstatus_get_startup());
 		purple_accounts_restore_current_statuses();
 	}
--- a/finch/gntaccount.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntaccount.c	Sat Apr 28 18:32:47 2007 +0000
@@ -611,8 +611,10 @@
 	prompt = g_strdup_printf(_("Are you sure you want to delete %s?"),
 			purple_account_get_username(account));
 
-	purple_request_action(account, _("Delete Account"), prompt, NULL, 0, account, 2,
-			_("Delete"), really_delete_account, _("Cancel"), NULL);
+	purple_request_action(account, _("Delete Account"), prompt, NULL, 0,
+						  account, NULL, NULL, account, 2,
+						  _("Delete"), really_delete_account,
+						  _("Cancel"), NULL);
 	g_free(prompt);
 }
 
@@ -829,7 +831,9 @@
 
 	buffer = make_info(account, gc, remote_user, id, alias, msg);
 	purple_request_action(NULL, NULL, _("Add buddy to your list?"),
-	                    buffer, PURPLE_DEFAULT_ACTION_NONE, data, 2,
+	                    buffer, PURPLE_DEFAULT_ACTION_NONE,
+						account, remote_user, NULL,
+						data, 2,
 	                    _("Add"),    G_CALLBACK(add_user_cb),
 	                    _("Cancel"), G_CALLBACK(free_add_user_data));
 	g_free(buffer);
@@ -901,12 +905,16 @@
 		aa->alias = g_strdup(alias);
 		aa->account = account;
 		uihandle = purple_request_action(NULL, _("Authorize buddy?"), buffer, NULL,
-			PURPLE_DEFAULT_ACTION_NONE, aa, 2,
+			PURPLE_DEFAULT_ACTION_NONE,
+			account, remote_user, NULL,
+			aa, 2,
 			_("Authorize"), authorize_and_add_cb,
 			_("Deny"), deny_no_add_cb);
 	} else {
 		uihandle = purple_request_action(NULL, _("Authorize buddy?"), buffer, NULL,
-			PURPLE_DEFAULT_ACTION_NONE, user_data, 2,
+			PURPLE_DEFAULT_ACTION_NONE,
+			account, remote_user, NULL,
+			user_data, 2,
 			_("Authorize"), auth_cb,
 			_("Deny"), deny_cb);
 	}
--- a/finch/gntblist.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntblist.c	Sat Apr 28 18:32:47 2007 +0000
@@ -53,7 +53,7 @@
 #include "gntstatus.h"
 #include <string.h>
 
-#define PREF_ROOT "/purple/gnt/blist"
+#define PREF_ROOT "/finch/blist"
 #define TYPING_TIMEOUT 4000
 
 typedef struct
@@ -110,10 +110,12 @@
 static const char * get_display_name(PurpleBlistNode *node);
 static void savedstatus_changed(PurpleSavedStatus *now, PurpleSavedStatus *old);
 static void blist_show(PurpleBuddyList *list);
+static void update_node_display(PurpleBlistNode *buddy, FinchBlist *ggblist);
 static void update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist);
 static void account_signed_on_cb(void);
 
 /* Sort functions */
+static int blist_node_compare_position(PurpleBlistNode *n1, PurpleBlistNode *n2);
 static int blist_node_compare_text(PurpleBlistNode *n1, PurpleBlistNode *n2);
 static int blist_node_compare_status(PurpleBlistNode *n1, PurpleBlistNode *n2);
 static int blist_node_compare_log(PurpleBlistNode *n1, PurpleBlistNode *n2);
@@ -186,13 +188,16 @@
 		if ((!purple_prefs_get_bool(PREF_ROOT "/showoffline") && !is_contact_online(contact)) ||
 				contact->currentsize < 1)
 			node_remove(list, (PurpleBlistNode*)contact);
-	} else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
+	} else if (!PURPLE_BLIST_NODE_IS_GROUP(node)) {
 		PurpleGroup *group = (PurpleGroup*)node->parent;
 		if ((!purple_prefs_get_bool(PREF_ROOT "/showoffline") && !is_group_online(group)) ||
 				group->currentsize < 1)
 			node_remove(list, node->parent);
 		for (node = node->child; node; node = node->next)
 			node->ui_data = NULL;
+	} else {
+		for (node = node->child; node; node = node->next)
+			node_remove(list, node);
 	}
 
 	draw_tooltip(ggblist);
@@ -231,13 +236,20 @@
 		if ((!purple_prefs_get_bool(PREF_ROOT "/showoffline") && !is_contact_online(contact)) ||
 				contact->currentsize < 1)
 			node_remove(purple_get_blist(), node);
-		else
-			add_node(node, list->ui_data);
+		else {
+			if (node->ui_data == NULL) {
+				/* The core seems to expect the UI to add the buddies. */
+				for (node = node->child; node; node = node->next)
+					add_node(node, list->ui_data);
+			}
+		}
 	} else if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
 		PurpleGroup *group = (PurpleGroup*)node;
 		if ((!purple_prefs_get_bool(PREF_ROOT "/showoffline") && !is_group_online(group)) ||
 				group->currentsize < 1)
 			node_remove(list, node);
+		else
+			add_node(node, list->ui_data);
 	}
 }
 
@@ -313,7 +325,11 @@
 	purple_request_field_group_add_field(group, field);
 
 	purple_request_fields(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."),
-			fields, _("Add"), G_CALLBACK(add_buddy_cb), _("Cancel"), NULL, NULL);
+			fields,
+			_("Add"), G_CALLBACK(add_buddy_cb),
+			_("Cancel"), NULL,
+			account, NULL, NULL,
+			NULL);
 }
 
 static void
@@ -380,7 +396,9 @@
 
 	purple_request_fields(NULL, _("Add Chat"), NULL,
 			_("You can edit more information from the context menu later."),
-			fields, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL, NULL);
+			fields, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL,
+			NULL, NULL, NULL,
+			NULL);
 }
 
 static void
@@ -413,7 +431,9 @@
 {
 	purple_request_input(NULL, _("Add Group"), NULL, _("Enter the name of the group"),
 			NULL, FALSE, FALSE, NULL,
-			_("Add"), G_CALLBACK(add_group_cb), _("Cancel"), NULL, NULL);
+			_("Add"), G_CALLBACK(add_group_cb), _("Cancel"), NULL,
+			NULL, NULL, NULL,
+			NULL);
 }
 
 static PurpleBlistUiOps blist_ui_ops =
@@ -739,7 +759,9 @@
 	g_list_free(parts);
 
 	purple_request_fields(NULL, _("Edit Chat"), NULL, _("Please Update the necessary fields."),
-			fields, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL, chat);
+			fields, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL,
+			NULL, NULL, NULL,
+			chat);
 }
 
 static void
@@ -927,7 +949,9 @@
 	text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Alias");
 	purple_request_input(node, text, prompt, _("Enter empty string to reset the name."),
 			name, FALSE, FALSE, NULL, text, G_CALLBACK(rename_blist_node),
-			_("Cancel"), NULL, node);
+			_("Cancel"), NULL,
+			NULL, NULL, NULL,
+			node);
 
 	g_free(prompt);
 }
@@ -990,6 +1014,7 @@
 static void
 finch_blist_remove_node_cb(PurpleBlistNode *node, PurpleBlistNode *selected)
 {
+	PurpleAccount *account = NULL;
 	char *primary;
 	const char *name, *sec = NULL;
 
@@ -999,12 +1024,12 @@
 		name = purple_contact_get_alias(c);
 		if (c->totalsize > 1)
 			sec = _("Removing this contact will also remove all the buddies in the contact");
-	} else if (PURPLE_BLIST_NODE_IS_BUDDY(node))
+	} else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) {
 		name = purple_buddy_get_name((PurpleBuddy*)node);
-	else if (PURPLE_BLIST_NODE_IS_CHAT(node))
+		account = purple_buddy_get_account((PurpleBuddy*)node);
+	} else if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
 		name = purple_chat_get_name((PurpleChat*)node);
-	else if (PURPLE_BLIST_NODE_IS_GROUP(node))
-	{
+	} else if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
 		name = ((PurpleGroup*)node)->name;
 		sec = _("Removing this group will also remove all the buddies in the group");
 	}
@@ -1016,7 +1041,9 @@
 	/* XXX: anything to do with the returned ui-handle? */
 	purple_request_action(node, _("Confirm Remove"),
 			primary, sec,
-			1, node, 2,
+			1,
+			account, name, NULL,
+			node, 2,
 			_("Remove"), finch_blist_remove_node,
 			_("Cancel"), NULL);
 	g_free(primary);
@@ -1028,8 +1055,6 @@
 	GList *iter;
 	if (node == NULL)
 		return;
-	if (PURPLE_BLIST_NODE_IS_CHAT(node) || PURPLE_BLIST_NODE_IS_GROUP(node))
-		return;
 	if (ggblist->tagged && (iter = g_list_find(ggblist->tagged, node)) != NULL) {
 		ggblist->tagged = g_list_delete_link(ggblist->tagged, iter);
 	} else {
@@ -1037,7 +1062,10 @@
 	}
 	if (PURPLE_BLIST_NODE_IS_CONTACT(node))
 		node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node);
-	update_buddy_display((PurpleBuddy*)node, ggblist);
+	if (PURPLE_BLIST_NODE_IS_BUDDY(node))
+		update_buddy_display((PurpleBuddy*)node, ggblist);
+	else
+		update_node_display(node, ggblist);
 }
 
 static void
@@ -1049,37 +1077,61 @@
 	if (target == NULL)
 		return;
 
-	/* This target resolution probably needs more clarification; for
-	 * example, if I tag a buddy in a contact, then place on
-	 * another buddy in the same contact, I probably intend to
-	 * place the tagged buddy immediately after (before?) the
-	 * target buddy -- this will simply move the tagged buddy
-	 * within the same contact without reference to position. */
 	if (PURPLE_BLIST_NODE_IS_GROUP(target))
 		tg = (PurpleGroup*)target;
-	else if (PURPLE_BLIST_NODE_IS_CONTACT(target))
-		tc = (PurpleContact*)target;
-	else /* Buddy or Chat */
+	else if (PURPLE_BLIST_NODE_IS_BUDDY(target)) {
 		tc = (PurpleContact*)target->parent;
+		tg = (PurpleGroup*)target->parent->parent;
+	} else {
+		if (PURPLE_BLIST_NODE_IS_CONTACT(target))
+			tc = (PurpleContact*)target;
+		tg = (PurpleGroup*)target->parent;
+	}
 
 	if (ggblist->tagged) {
 		GList *list = ggblist->tagged;
 		ggblist->tagged = NULL;
-
 		while (list) {
 			PurpleBlistNode *node = list->data;
 			list = g_list_delete_link(list, list);
-			if (tg) {
-				if (PURPLE_BLIST_NODE_IS_CONTACT(node))
+
+			if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
+				update_node_display(node, ggblist);
+				/* Add the group after the current group */
+				purple_blist_add_group((PurpleGroup*)node, (PurpleBlistNode*)tg);
+			} else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
+				update_buddy_display(purple_contact_get_priority_buddy((PurpleContact*)node), ggblist);
+				if ((PurpleBlistNode*)tg == target) {
+					/* The target is a group, just add the contact to the group. */
 					purple_blist_add_contact((PurpleContact*)node, tg, NULL);
-				else
+				} else if (tc) {
+					/* The target is either a buddy, or a contact. Merge with that contact. */
+					purple_blist_merge_contact((PurpleContact*)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);
+				}
+			} else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) {
+				update_buddy_display((PurpleBuddy*)node, ggblist);
+				if ((PurpleBlistNode*)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_BLIST_NODE_IS_BUDDY(node))
-					purple_blist_add_buddy((PurpleBuddy*)node, tc,
-						purple_buddy_get_group(purple_contact_get_priority_buddy(tc)), NULL);
-				else if (PURPLE_BLIST_NODE_IS_CONTACT(node))
-					purple_blist_merge_contact((PurpleContact*)node, target);
+				} else if (PURPLE_BLIST_NODE_IS_CONTACT(target)) {
+					/* Add to the contact. */
+					purple_blist_add_buddy((PurpleBuddy*)node, tc, NULL, NULL);
+				} else if (PURPLE_BLIST_NODE_IS_BUDDY(target)) {
+					/* Add to the contact after the selected buddy. */
+					purple_blist_add_buddy((PurpleBuddy*)node, NULL, NULL, target);
+				} else if (PURPLE_BLIST_NODE_IS_CHAT(target)) {
+					/* Add to the selected chat's group. */
+					purple_blist_add_buddy((PurpleBuddy*)node, NULL, tg, NULL);
+				}
+			} else if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
+				update_node_display(node, ggblist);
+				if ((PurpleBlistNode*)tg == target)
+					purple_blist_add_chat((PurpleChat*)node, tg, NULL);
+				else
+					purple_blist_add_chat((PurpleChat*)node, NULL, target);
 			}
 		}
 	}
@@ -1197,7 +1249,7 @@
 		prpl_info->tooltip_text(buddy, user_info, TRUE);
 	}
 
-	if (purple_prefs_get_bool("/purple/gnt/blist/idletime")) {
+	if (purple_prefs_get_bool("/finch/blist/idletime")) {
 		PurplePresence *pre = purple_buddy_get_presence(buddy);
 		if (purple_presence_is_idle(pre)) {
 			time_t idle = purple_presence_get_idle_time(pre);
@@ -1403,6 +1455,15 @@
 }
 
 static void
+update_node_display(PurpleBlistNode *node, FinchBlist *ggblist)
+{
+	GntTextFormatFlags flag = 0;
+	if (ggblist->tagged && g_list_find(ggblist->tagged, node))
+		flag |= GNT_TEXT_FLAG_BOLD;
+	gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), node, flag);
+}
+
+static void
 update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist)
 {
 	PurpleContact *contact;
@@ -1423,10 +1484,16 @@
 
 	if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) {
 		gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, bflag | GNT_TEXT_FLAG_DIM);
-		gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag | GNT_TEXT_FLAG_DIM);
+		if (buddy == purple_contact_get_priority_buddy(contact))
+			gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag | GNT_TEXT_FLAG_DIM);
+		else
+			update_buddy_display(purple_contact_get_priority_buddy(contact), ggblist);
 	} else {
 		gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, bflag);
-		gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag);
+		if (buddy == purple_contact_get_priority_buddy(contact))
+			gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag);
+		else
+			update_buddy_display(purple_contact_get_priority_buddy(contact), ggblist);
 	}
 }
 
@@ -1763,6 +1830,15 @@
 }
 
 static int
+blist_node_compare_position(PurpleBlistNode *n1, PurpleBlistNode *n2)
+{
+	while ((n1 = n1->prev) != NULL)
+		if (n1 == n2)
+			return 1;
+	return -1;
+}
+
+static int
 blist_node_compare_text(PurpleBlistNode *n1, PurpleBlistNode *n2)
 {
 	const char *s1, *s2;
@@ -1773,10 +1849,6 @@
 	
 	switch (n1->type)
 	{
-		case PURPLE_BLIST_GROUP_NODE:
-			s1 = ((PurpleGroup*)n1)->name;
-			s2 = ((PurpleGroup*)n2)->name;
-			break;
 		case PURPLE_BLIST_CHAT_NODE:
 			s1 = purple_chat_get_name((PurpleChat*)n1);
 			s2 = purple_chat_get_name((PurpleChat*)n2);
@@ -1790,7 +1862,7 @@
 			s2 = purple_contact_get_alias((PurpleContact*)n2);
 			break;
 		default:
-			return -1;
+			return blist_node_compare_position(n1, n2);
 	}
 
 	us1 = g_utf8_strup(s1, -1);
@@ -1821,6 +1893,7 @@
 				return ret;
 			break;
 		default:
+			return blist_node_compare_position(n1, n2);
 			break;
 	}
 
@@ -1867,7 +1940,7 @@
 				return ret;
 			break;
 		default:
-			break;
+			return blist_node_compare_position(n1, n2);
 	}
 	ret = blist_node_compare_text(n1, n2);
 	return ret;
@@ -2052,6 +2125,7 @@
 						fields,
 						_("OK"), G_CALLBACK(send_im_select_cb),
 						_("Cancel"), NULL,
+						NULL, NULL, NULL,
 						NULL);
 }
 
--- a/finch/gntconn.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntconn.c	Sat Apr 28 18:32:47 2007 +0000
@@ -43,6 +43,7 @@
 			act, text);
 
 	purple_request_action(account, _("Connection Error"), primary, secondary, 1,
+						account, NULL, NULL,
 						account, 2,
 						_("OK"), NULL,
 						_("Connect"),
--- a/finch/gntconv.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntconv.c	Sat Apr 28 18:32:47 2007 +0000
@@ -43,7 +43,7 @@
 #include "gntentry.h"
 #include "gnttextview.h"
 
-#define PREF_ROOT	"/purple/gnt/conversations"
+#define PREF_ROOT	"/finch/conversations"
 
 #include "config.h"
 
@@ -52,7 +52,7 @@
 {
 	const char *text = gnt_entry_get_text(GNT_ENTRY(ggconv->entry));
 	gboolean empty = (!text || !*text);
-	if (purple_prefs_get_bool("/purple/gnt/conversations/notify_typing")) {
+	if (purple_prefs_get_bool("/finch/conversations/notify_typing")) {
 		PurpleConversation *conv = ggconv->active_conv;
 		PurpleConvIm *im = PURPLE_CONV_IM(conv);
 		if (!empty) {
@@ -381,7 +381,7 @@
 
 	/* Unnecessary to print the timestamp for delayed message */
 	if (!(flags & PURPLE_MESSAGE_DELAYED) &&
-			purple_prefs_get_bool("/purple/gnt/conversations/timestamps"))
+			purple_prefs_get_bool("/finch/conversations/timestamps"))
 		gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv),
 					purple_utf8_strftime("(%H:%M:%S) ", localtime(&mtime)), GNT_TEXT_FLAG_DIM);
 
--- a/finch/gntdebug.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntdebug.c	Sat Apr 28 18:32:47 2007 +0000
@@ -36,7 +36,7 @@
 #include <stdio.h>
 #include <string.h>
 
-#define PREF_ROOT "/purple/gnt/debug"
+#define PREF_ROOT "/finch/debug"
 
 static struct
 {
@@ -135,7 +135,7 @@
 toggle_timestamps(GntWidget *w, gpointer n)
 {
 	debug.timestamps = !debug.timestamps;
-	purple_prefs_set_bool("/core/debug/timestamps", debug.timestamps);
+	purple_prefs_set_bool("/purple/debug/timestamps", debug.timestamps);
 }
 
 /* Xerox */
@@ -196,7 +196,7 @@
 void finch_debug_window_show()
 {
 	debug.paused = FALSE;
-	debug.timestamps = purple_prefs_get_bool("/core/debug/timestamps");
+	debug.timestamps = purple_prefs_get_bool("/purple/debug/timestamps");
 	if (debug.window == NULL)
 	{
 		GntWidget *wid, *box;
--- a/finch/gntft.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntft.c	Sat Apr 28 18:32:47 2007 +0000
@@ -131,7 +131,7 @@
 toggle_keep_open_cb(GntWidget *w)
 {
 	xfer_dialog->keep_open = !xfer_dialog->keep_open;
-	purple_prefs_set_bool("/purple/gnt/filetransfer/keep_open",
+	purple_prefs_set_bool("/finch/filetransfer/keep_open",
 						xfer_dialog->keep_open);
 }
 
@@ -139,7 +139,7 @@
 toggle_clear_finished_cb(GntWidget *w)
 {
 	xfer_dialog->auto_clear = !xfer_dialog->auto_clear;
-	purple_prefs_set_bool("/purple/gnt/filetransfer/clear_finished",
+	purple_prefs_set_bool("/finch/filetransfer/clear_finished",
 						xfer_dialog->auto_clear);
 }
 
@@ -183,9 +183,9 @@
 		xfer_dialog = g_new0(PurpleGntXferDialog, 1);
 
 	xfer_dialog->keep_open =
-		purple_prefs_get_bool("/purple/gnt/filetransfer/keep_open");
+		purple_prefs_get_bool("/finch/filetransfer/keep_open");
 	xfer_dialog->auto_clear =
-		purple_prefs_get_bool("/purple/gnt/filetransfer/clear_finished");
+		purple_prefs_get_bool("/finch/filetransfer/clear_finished");
 
 	/* Create the window. */
 	xfer_dialog->window = window = gnt_vbox_new(FALSE);
@@ -507,9 +507,9 @@
 void
 finch_xfers_init(void)
 {
-	purple_prefs_add_none("/purple/gnt/filetransfer");
-	purple_prefs_add_bool("/purple/gnt/filetransfer/clear_finished", TRUE);
-	purple_prefs_add_bool("/purple/gnt/filetransfer/keep_open", FALSE);
+	purple_prefs_add_none("/finch/filetransfer");
+	purple_prefs_add_bool("/finch/filetransfer/clear_finished", TRUE);
+	purple_prefs_add_bool("/finch/filetransfer/keep_open", FALSE);
 }
 
 void
--- a/finch/gntplugin.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntplugin.c	Sat Apr 28 18:32:47 2007 +0000
@@ -97,7 +97,7 @@
 void
 finch_plugins_save_loaded(void)
 {
-	purple_plugins_save_loaded("/purple/gnt/plugins/loaded");
+	purple_plugins_save_loaded("/finch/plugins/loaded");
 }
 
 static void
@@ -333,6 +333,8 @@
 	}
 
 	purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
-			_("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL, NULL);
+			_("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL,
+			NULL, NULL, NULL,
+			NULL);
 }
 
--- a/finch/gntpounce.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntpounce.c	Sat Apr 28 18:32:47 2007 +0000
@@ -255,15 +255,15 @@
 									 "reason", reason);
 
 	/* Set the defaults for next time. */
-	purple_prefs_set_bool("/purple/gnt/pounces/default_actions/open-window",
+	purple_prefs_set_bool("/finch/pounces/default_actions/open-window",
 		gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->open_win)));
-	purple_prefs_set_bool("/purple/gnt/pounces/default_actions/popup-notify",
+	purple_prefs_set_bool("/finch/pounces/default_actions/popup-notify",
 		gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->popup)));
-	purple_prefs_set_bool("/purple/gnt/pounces/default_actions/send-message",
+	purple_prefs_set_bool("/finch/pounces/default_actions/send-message",
 		gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->send_msg)));
-	purple_prefs_set_bool("/purple/gnt/pounces/default_actions/execute-command",
+	purple_prefs_set_bool("/finch/pounces/default_actions/execute-command",
 		gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->exec_cmd)));
-	purple_prefs_set_bool("/purple/gnt/pounces/default_actions/play-beep",
+	purple_prefs_set_bool("/finch/pounces/default_actions/play-beep",
 		gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->play_sound)));
 
 	purple_pounce_set_save(dialog->pounce,
@@ -580,15 +580,15 @@
 		}
 
 		gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win),
-			purple_prefs_get_bool("/purple/gnt/pounces/default_actions/open-window"));
+			purple_prefs_get_bool("/finch/pounces/default_actions/open-window"));
 		gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup),
-			purple_prefs_get_bool("/purple/gnt/pounces/default_actions/popup-notify"));
+			purple_prefs_get_bool("/finch/pounces/default_actions/popup-notify"));
 		gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg),
-			purple_prefs_get_bool("/purple/gnt/pounces/default_actions/send-message"));
+			purple_prefs_get_bool("/finch/pounces/default_actions/send-message"));
 		gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd),
-			purple_prefs_get_bool("/purple/gnt/pounces/default_actions/execute-command"));
+			purple_prefs_get_bool("/finch/pounces/default_actions/execute-command"));
 		gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound),
-			purple_prefs_get_bool("/purple/gnt/pounces/default_actions/play-beep"));
+			purple_prefs_get_bool("/finch/pounces/default_actions/play-beep"));
 	}
 
 	gnt_widget_show(window);
@@ -647,7 +647,9 @@
 	pouncer = purple_account_get_username(account);
 	pouncee = purple_pounce_get_pouncee(pounce);
 	buf = g_strdup_printf(_("Are you sure you want to delete the pounce on %s for %s?"), pouncee, pouncer);
-	purple_request_action(pounce, NULL, buf, NULL, 0, pounce, 2,
+	purple_request_action(pounce, NULL, buf, NULL, 0,
+						account, pouncee, NULL,
+						pounce, 2,
 						_("Delete"), pounces_manager_delete_confirm_cb,
 						_("Cancel"), NULL);
 	g_free(buf);
@@ -924,19 +926,19 @@
 	purple_pounces_register_handler(FINCH_UI, pounce_cb, new_pounce,
 								  free_pounce);
 
-	purple_prefs_add_none("/purple/gnt/pounces");
-	purple_prefs_add_none("/purple/gnt/pounces/default_actions");
-	purple_prefs_add_bool("/purple/gnt/pounces/default_actions/open-window",
+	purple_prefs_add_none("/finch/pounces");
+	purple_prefs_add_none("/finch/pounces/default_actions");
+	purple_prefs_add_bool("/finch/pounces/default_actions/open-window",
 						FALSE);
-	purple_prefs_add_bool("/purple/gnt/pounces/default_actions/popup-notify",
+	purple_prefs_add_bool("/finch/pounces/default_actions/popup-notify",
 						TRUE);
-	purple_prefs_add_bool("/purple/gnt/pounces/default_actions/send-message",
+	purple_prefs_add_bool("/finch/pounces/default_actions/send-message",
 						FALSE);
-	purple_prefs_add_bool("/purple/gnt/pounces/default_actions/execute-command",
+	purple_prefs_add_bool("/finch/pounces/default_actions/execute-command",
 						FALSE);
-	purple_prefs_add_bool("/purple/gnt/pounces/default_actions/play-beep",
+	purple_prefs_add_bool("/finch/pounces/default_actions/play-beep",
 						FALSE);
-	purple_prefs_add_none("/purple/gnt/pounces/dialog");
+	purple_prefs_add_none("/finch/pounces/dialog");
 
 	purple_signal_connect(purple_connections_get_handle(), "signed-on",
 						finch_pounces_get_handle(),
--- a/finch/gntprefs.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntprefs.c	Sat Apr 28 18:32:47 2007 +0000
@@ -35,15 +35,26 @@
 
 void finch_prefs_init()
 {
-	purple_prefs_add_none("/purple");
-	purple_prefs_add_none("/purple/gnt");
+	purple_prefs_add_none("/finch");
+
+	purple_prefs_add_none("/finch/plugins");
+	purple_prefs_add_path_list("/finch/plugins/loaded", NULL);
+
+	purple_prefs_add_none("/finch/conversations");
+	purple_prefs_add_bool("/finch/conversations/timestamps", TRUE);
+	purple_prefs_add_bool("/finch/conversations/notify_typing", FALSE);
+}
 
-	purple_prefs_add_none("/purple/gnt/plugins");
-	purple_prefs_add_path_list("/purple/gnt/plugins/loaded", NULL);
+void finch_prefs_update_old()
+{
+	const char *str = NULL;
 
-	purple_prefs_add_none("/purple/gnt/conversations");
-	purple_prefs_add_bool("/purple/gnt/conversations/timestamps", TRUE);
-	purple_prefs_add_bool("/purple/gnt/conversations/notify_typing", FALSE); /* XXX: Not functional yet */
+	purple_prefs_rename("/gaim/gnt", "/finch");
+	purple_prefs_rename("/purple/gnt", "/finch");
+
+	if ((str = purple_prefs_get_string("/purple/away/idle_reporting")) &&
+			strcmp(str, "gaim") == 0)
+		purple_prefs_set_string("/purple/away/idle_reporting", "purple");
 }
 
 typedef struct
@@ -156,34 +167,34 @@
 
 static Prefs blist[] = 
 {
-	{PURPLE_PREF_BOOLEAN, "/purple/gnt/blist/idletime", N_("Show Idle Time"), NULL},
-	{PURPLE_PREF_BOOLEAN, "/purple/gnt/blist/showoffline", N_("Show Offline Buddies"), NULL},
+	{PURPLE_PREF_BOOLEAN, "/finch/blist/idletime", N_("Show Idle Time"), NULL},
+	{PURPLE_PREF_BOOLEAN, "/finch/blist/showoffline", N_("Show Offline Buddies"), NULL},
 	{PURPLE_PREF_NONE, NULL, NULL, NULL}
 };
 
 static Prefs convs[] = 
 {
-	{PURPLE_PREF_BOOLEAN, "/purple/gnt/conversations/timestamps", N_("Show Timestamps"), NULL},
-	{PURPLE_PREF_BOOLEAN, "/purple/gnt/conversations/notify_typing", N_("Notify buddies when you are typing"), NULL},
+	{PURPLE_PREF_BOOLEAN, "/finch/conversations/timestamps", N_("Show Timestamps"), NULL},
+	{PURPLE_PREF_BOOLEAN, "/finch/conversations/notify_typing", N_("Notify buddies when you are typing"), NULL},
 	{PURPLE_PREF_NONE, NULL, NULL, NULL}
 };
 
 static Prefs logging[] = 
 {
-	{PURPLE_PREF_STRING, "/core/logging/format", N_("Log format"), get_log_options},
-	{PURPLE_PREF_BOOLEAN, "/core/logging/log_ims", N_("Log IMs"), NULL},
-	{PURPLE_PREF_BOOLEAN, "/core/logging/log_chats", N_("Log chats"), NULL},
-	{PURPLE_PREF_BOOLEAN, "/core/logging/log_system", N_("Log status change events"), NULL},
+	{PURPLE_PREF_STRING, "/purple/logging/format", N_("Log format"), get_log_options},
+	{PURPLE_PREF_BOOLEAN, "/purple/logging/log_ims", N_("Log IMs"), NULL},
+	{PURPLE_PREF_BOOLEAN, "/purple/logging/log_chats", N_("Log chats"), NULL},
+	{PURPLE_PREF_BOOLEAN, "/purple/logging/log_system", N_("Log status change events"), NULL},
 	{PURPLE_PREF_NONE, NULL, NULL, NULL},
 };
 
 /* XXX: Translate after the freeze */
 static Prefs idle[] =
 {
-	{PURPLE_PREF_STRING, "/core/away/idle_reporting", "Report Idle time", get_idle_options},
-	{PURPLE_PREF_BOOLEAN, "/core/away/away_when_idle", "Change status when idle", NULL},
-	{PURPLE_PREF_INT, "/core/away/mins_before_away", "Minutes before changing status", NULL},
-	{PURPLE_PREF_INT, "/core/savedstatus/idleaway", "Change status to", get_status_titles},
+	{PURPLE_PREF_STRING, "/purple/away/idle_reporting", "Report Idle time", get_idle_options},
+	{PURPLE_PREF_BOOLEAN, "/purple/away/away_when_idle", "Change status when idle", NULL},
+	{PURPLE_PREF_INT, "/purple/away/mins_before_away", "Minutes before changing status", NULL},
+	{PURPLE_PREF_INT, "/purple/savedstatus/idleaway", "Change status to", get_status_titles},
 	{PURPLE_PREF_NONE, NULL, NULL, NULL},
 };
 
@@ -231,6 +242,8 @@
 	add_pref_group(fields, _("Idle"), idle);
 
 	purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
-			_("Save"), G_CALLBACK(save_cb), _("Cancel"), free_strings, NULL);
+			_("Save"), G_CALLBACK(save_cb), _("Cancel"), free_strings,
+			NULL, NULL, NULL,
+			NULL);
 }
 
--- a/finch/gntprefs.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntprefs.h	Sat Apr 28 18:32:47 2007 +0000
@@ -40,6 +40,10 @@
  */
 void finch_prefs_show_all(void);
 
+/**
+ * You don't need to know about this.
+ */
+void finch_prefs_update_old(void);
 /*@}*/
 
 #endif
--- a/finch/gntrequest.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntrequest.c	Sat Apr 28 18:32:47 2007 +0000
@@ -115,6 +115,7 @@
 		gboolean multiline, gboolean masked, gchar *hint,
 		const char *ok_text, GCallback ok_cb,
 		const char *cancel_text, GCallback cancel_cb,
+		PurpleAccount *account, const char *who, PurpleConversation *conv,
 		void *user_data)
 {
 	GntWidget *window, *box, *entry;
@@ -170,6 +171,7 @@
 		const char *secondary, unsigned int default_value,
 		const char *ok_text, GCallback ok_cb,
 		const char *cancel_text, GCallback cancel_cb,
+		PurpleAccount *account, const char *who, PurpleConversation *conv,
 		void *user_data, va_list choices)
 {
 	GntWidget *window, *combo, *box;
@@ -212,6 +214,7 @@
 static void*
 finch_request_action(const char *title, const char *primary,
 		const char *secondary, unsigned int default_value,
+		PurpleAccount *account, const char *who, PurpleConversation *conv,
 		void *user_data, size_t actioncount,
 		va_list actions)
 {
@@ -339,6 +342,7 @@
 		const char *secondary, PurpleRequestFields *allfields,
 		const char *ok, GCallback ok_cb,
 		const char *cancel, GCallback cancel_cb,
+		PurpleAccount *account, const char *who, PurpleConversation *conv,
 		void *userdata)
 {
 	GntWidget *window, *box;
@@ -576,6 +580,7 @@
 finch_request_file(const char *title, const char *filename,
 				gboolean savedialog,
 				GCallback ok_cb, GCallback cancel_cb,
+				PurpleAccount *account, const char *who, PurpleConversation *conv,
 				void *user_data)
 {
 	GntWidget *window = gnt_file_sel_new();
--- a/finch/gntstatus.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/gntstatus.c	Sat Apr 28 18:32:47 2007 +0000
@@ -135,8 +135,11 @@
 	ask = g_strdup_printf(_("Are you sure you want to delete \"%s\""),
 			purple_savedstatus_get_title(saved));
 
-	purple_request_action(saved, _("Delete Status"), ask, NULL, 0, saved, 2,
-			_("Delete"), really_delete_status, _("Cancel"), NULL);
+	purple_request_action(saved, _("Delete Status"), ask, NULL, 0,
+			NULL, NULL, NULL,
+			saved, 2,
+			_("Delete"), really_delete_status,
+			_("Cancel"), NULL);
 	g_free(ask);
 }
 
--- a/finch/libgnt/gnttree.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/libgnt/gnttree.c	Sat Apr 28 18:32:47 2007 +0000
@@ -152,9 +152,7 @@
 
 	while(row->next)
 		row = row->next;
-	if (!row->collapsed && row->child)
-		row = get_last_child(row->child);
-	return row;
+	return get_last_child(row);
 }
 
 static GntTreeRow *
--- a/finch/libgnt/gntwm.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/libgnt/gntwm.c	Sat Apr 28 18:32:47 2007 +0000
@@ -905,6 +905,32 @@
 	return FALSE;
 }
 
+static gboolean
+toggle_clipboard(GntBindable *bindable, GList *n)
+{
+	static GntWidget *clip;
+	gchar *text;
+	int maxx, maxy;
+	if (clip) {
+		gnt_widget_destroy(clip);
+		clip = NULL;
+		return TRUE;
+	}
+	getmaxyx(stdscr, maxy, maxx);
+	text = gnt_get_clipboard_string();
+	clip = gnt_hwindow_new(FALSE);
+	GNT_WIDGET_SET_FLAGS(clip, GNT_WIDGET_TRANSIENT);
+	GNT_WIDGET_SET_FLAGS(clip, GNT_WIDGET_NO_BORDER);
+	gnt_box_set_pad(GNT_BOX(clip), 0);
+	gnt_box_add_widget(GNT_BOX(clip), gnt_label_new(" "));
+	gnt_box_add_widget(GNT_BOX(clip), gnt_label_new(text));
+	gnt_box_add_widget(GNT_BOX(clip), gnt_label_new(" "));
+	gnt_widget_set_position(clip, 0, 0);
+	gnt_widget_draw(clip);
+	g_free(text);
+	return TRUE;
+}
+
 static void
 gnt_wm_class_init(GntWMClass *klass)
 {
@@ -1039,6 +1065,8 @@
 				"\033" GNT_KEY_CTRL_K, NULL);
 	gnt_bindable_class_register_action(GNT_BINDABLE_CLASS(klass), "help-for-widget", help_for_widget,
 				"\033" "/", NULL);
+	gnt_bindable_class_register_action(GNT_BINDABLE_CLASS(klass), "toggle-clipboard",
+				toggle_clipboard, "\033" "C", NULL);
 
 	gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
 
--- a/finch/libgnt/wms/s.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/libgnt/wms/s.c	Sat Apr 28 18:32:47 2007 +0000
@@ -168,32 +168,6 @@
 	return TRUE;
 }
 
-static gboolean
-toggle_clipboard(GntBindable *bindable, GList *n)
-{
-	static GntWidget *clip;
-	gchar *text;
-	int maxx, maxy;
-	if (clip) {
-		gnt_widget_destroy(clip);
-		clip = NULL;
-		return TRUE;
-	}
-	getmaxyx(stdscr, maxy, maxx);
-	text = gnt_get_clipboard_string();
-	clip = gnt_hwindow_new(FALSE);
-	GNT_WIDGET_SET_FLAGS(clip, GNT_WIDGET_TRANSIENT);
-	GNT_WIDGET_SET_FLAGS(clip, GNT_WIDGET_NO_BORDER);
-	gnt_box_set_pad(GNT_BOX(clip), 0);
-	gnt_box_add_widget(GNT_BOX(clip), gnt_label_new(" "));
-	gnt_box_add_widget(GNT_BOX(clip), gnt_label_new(text));
-	gnt_box_add_widget(GNT_BOX(clip), gnt_label_new(" "));
-	gnt_widget_set_position(clip, 0, 0);
-	gnt_widget_draw(clip);
-	g_free(text);
-	return TRUE;
-}
-
 static void
 s_class_init(SClass *klass)
 {
@@ -208,8 +182,6 @@
 
 	gnt_bindable_class_register_action(GNT_BINDABLE_CLASS(klass), "toggle-buddylist",
 				toggle_buddylist, "\033" "b", NULL);
-	gnt_bindable_class_register_action(GNT_BINDABLE_CLASS(klass), "toggle-clipboard",
-				toggle_clipboard, "\033" "C", NULL);
 	gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
 	GNTDEBUG;
 }
--- a/finch/plugins/gnthistory.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/finch/plugins/gnthistory.c	Sat Apr 28 18:32:47 2007 +0000
@@ -57,7 +57,7 @@
 
 		/* If we're not logging, don't show anything.
 		 * Otherwise, we might show a very old log. */
-		if (!purple_prefs_get_bool("/core/logging/log_ims"))
+		if (!purple_prefs_get_bool("/purple/logging/log_ims"))
 			return;
 
 		/* Find buddies for this conversation. */
@@ -101,7 +101,7 @@
 	{
 		/* If we're not logging, don't show anything.
 		 * Otherwise, we might show a very old log. */
-		if (!purple_prefs_get_bool("/core/logging/log_chats"))
+		if (!purple_prefs_get_bool("/purple/logging/log_chats"))
 			return;
 
 		logs = purple_log_get_logs(PURPLE_LOG_CHAT, name, account);
@@ -132,8 +132,8 @@
 static void
 history_prefs_check(PurplePlugin *plugin)
 {
-	if (!purple_prefs_get_bool("/core/logging/log_ims") &&
-	    !purple_prefs_get_bool("/core/logging/log_chats"))
+	if (!purple_prefs_get_bool("/purple/logging/log_ims") &&
+	    !purple_prefs_get_bool("/purple/logging/log_chats"))
 	{
 		purple_notify_warning(plugin, NULL, _("History Plugin Requires Logging"),
 							_("Logging can be enabled from Tools -> Preferences -> Logging.\n\n"
@@ -155,9 +155,9 @@
 						"conversation-created",
 						plugin, PURPLE_CALLBACK(historize), NULL);
 
-	purple_prefs_connect_callback(plugin, "/core/logging/log_ims",
+	purple_prefs_connect_callback(plugin, "/purple/logging/log_ims",
 								history_prefs_cb, plugin);
-	purple_prefs_connect_callback(plugin, "/core/logging/log_chats",
+	purple_prefs_connect_callback(plugin, "/purple/logging/log_chats",
 								history_prefs_cb, plugin);
 
 	history_prefs_check(plugin);
--- a/libpurple/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -8,6 +8,7 @@
 		purple-url-handler \
 		purple.pc.in \
 		purple-uninstalled.pc.in \
+		version.h.in \
 		Makefile.mingw \
 		win32/global.mak \
 		win32/libc_interface.c \
@@ -75,6 +76,7 @@
 	upnp.c \
 	util.c \
 	value.c \
+	version.c \
 	xmlnode.c \
 	whiteboard.c
 
@@ -219,7 +221,7 @@
 	$(dbus_headers)
 
 libpurple_la_DEPENDENCIES = $(STATIC_LINK_LIBS)
-libpurple_la_LDFLAGS = -export-dynamic
+libpurple_la_LDFLAGS = -export-dynamic -version-info $(LT_VERSION_INFO) -no-undefined
 libpurple_la_LIBADD = \
 	$(DBUS_LIBS) \
 	$(GLIB_LIBS) \
@@ -232,7 +234,7 @@
 AM_CPPFLAGS = \
 	-DBR_PTHREADS=0 \
 	-DDATADIR=\"$(datadir)\" \
-	-DLIBDIR=\"$(libdir)/purple/\" \
+	-DLIBDIR=\"$(libdir)/purple-$(PURPLE_MAJOR_VERSION)/\" \
 	-DLOCALEDIR=\"$(datadir)/locale\" \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	$(GLIB_CFLAGS) \
--- a/libpurple/account.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/account.c	Sat Apr 28 18:32:47 2007 +0000
@@ -347,12 +347,6 @@
 		xmlnode_insert_data(child, tmp, -1);
 	}
 
-	if ((tmp = purple_account_get_buddy_icon(account)) != NULL)
-	{
-		child = xmlnode_new_child(node, "buddyicon");
-		xmlnode_insert_data(child, tmp, -1);
-	}
-
 	if (g_hash_table_size(account->settings) > 0)
 	{
 		child = xmlnode_new_child(node, "settings");
@@ -742,11 +736,30 @@
 		g_free(data);
 	}
 
-	/* Read the buddyicon */
+	/* Read an old buddyicon */
 	child = xmlnode_get_child(node, "buddyicon");
 	if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL))
 	{
-		purple_account_set_buddy_icon(ret, data);
+		const char *dirname = purple_buddy_icons_get_cache_dir();
+		char *filename = g_build_filename(dirname, data, NULL);
+		gchar *contents;
+		gsize len;
+
+		if (g_file_get_contents(filename, &contents, &len, NULL))
+		{
+			purple_buddy_icons_set_account_icon(ret, (guchar *)contents, len);
+		}
+		else
+		{
+			/* Try to see if the icon got left behind in the old cache. */
+			g_free(filename);
+			filename = g_build_filename(g_get_home_dir(), ".gaim", "icons", data, NULL);
+			if (g_file_get_contents(filename, &contents, &len, NULL)) {
+				purple_buddy_icons_set_account_icon(ret, (guchar*)contents, len);
+			}
+		}
+
+		g_free(filename);
 		g_free(data);
 	}
 
@@ -788,6 +801,8 @@
 	}
 
 	xmlnode_free(node);
+
+	purple_buddy_icons_account_loaded_cb();
 }
 
 
@@ -880,7 +895,6 @@
 	g_free(account->alias);
 	g_free(account->password);
 	g_free(account->user_info);
-	g_free(account->buddy_icon);
 	g_free(account->buddy_icon_path);
 	g_free(account->protocol_id);
 
@@ -968,6 +982,7 @@
                         fields,
                         _("OK"), ok_cb,
                         _("Cancel"), cancel_cb,
+						account, NULL, NULL,
                         user_data);
 	g_free(primary);
 }
@@ -1217,6 +1232,7 @@
 						fields,
 						_("OK"), G_CALLBACK(change_password_cb),
 						_("Cancel"), NULL,
+						account, NULL, NULL,
 						account);
 }
 
@@ -1250,7 +1266,9 @@
 					   TRUE, FALSE, ((gc != NULL) &&
 					   (gc->flags & PURPLE_CONNECTION_HTML) ? "html" : NULL),
 					   _("Save"), G_CALLBACK(set_user_info_cb),
-					   _("Cancel"), NULL, account);
+					   _("Cancel"), NULL,
+					   account, NULL, NULL,
+					   account);
 }
 
 void
@@ -1316,56 +1334,6 @@
 	schedule_accounts_save();
 }
 
-void
-purple_account_set_buddy_icon(PurpleAccount *account, const char *icon)
-{
-	g_return_if_fail(account != NULL);
-
-	/* Delete an existing icon from the cache. */
-	if (account->buddy_icon != NULL && (icon == NULL || strcmp(account->buddy_icon, icon)))
-	{
-		const char *dirname = purple_buddy_icons_get_cache_dir();
-
-		if (g_file_test(account->buddy_icon, G_FILE_TEST_IS_REGULAR))
-		{
-			/* The file exists. This is a full path. */
-
-			/* XXX: This is a hack so we only delete the file if it's
-			 * in the cache dir. Otherwise, people who upgrade (who
-			 * may have buddy icon filenames set outside of the cache
-			 * dir) could lose files. */
-			if (!strncmp(dirname, account->buddy_icon, strlen(dirname)))
-				g_unlink(account->buddy_icon);
-		}
-		else
-		{
-			char *filename = g_build_filename(dirname, account->buddy_icon, NULL);
-			g_unlink(filename);
-			g_free(filename);
-		}
-	}
-
-	g_free(account->buddy_icon);
-	account->buddy_icon = g_strdup(icon);
-	if (purple_account_is_connected(account))
-	{
-		PurpleConnection *gc;
-		PurplePluginProtocolInfo *prpl_info;
-
-		gc = purple_account_get_connection(account);
-		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
-
-		if (prpl_info && prpl_info->set_buddy_icon)
-		{
-			char *cached_path = purple_buddy_icons_get_full_path(icon);
-			prpl_info->set_buddy_icon(gc, cached_path);
-			g_free(cached_path);
-		}
-	}
-
-	schedule_accounts_save();
-}
-
 void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path)
 {
 	g_return_if_fail(account != NULL);
@@ -1741,14 +1709,6 @@
 }
 
 const char *
-purple_account_get_buddy_icon(const PurpleAccount *account)
-{
-	g_return_val_if_fail(account != NULL, NULL);
-
-	return account->buddy_icon;
-}
-
-const char *
 purple_account_get_buddy_icon_path(const PurpleAccount *account)
 {
 	g_return_val_if_fail(account != NULL, NULL);
@@ -2275,7 +2235,7 @@
 	purple_pounce_destroy_all_by_account(account);
 
 	/* This will cause the deletion of an old buddy icon. */
-	purple_account_set_buddy_icon(account, NULL);
+	purple_buddy_icons_set_account_icon(account, NULL, 0);
 
 	purple_account_destroy(account);
 }
--- a/libpurple/account.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/account.h	Sat Apr 28 18:32:47 2007 +0000
@@ -75,7 +75,6 @@
 	char *password;             /**< The account password.                  */
 	char *user_info;            /**< User information.                      */
 
-	char *buddy_icon;           /**< The buddy icon's cached path.          */
 	char *buddy_icon_path;      /**< The buddy icon's non-cached path.      */
 
 	gboolean remember_pass;     /**< Remember the password.                 */
@@ -284,14 +283,6 @@
 void purple_account_set_user_info(PurpleAccount *account, const char *user_info);
 
 /**
- * Sets the account's buddy icon.
- *
- * @param account The account.
- * @param icon    The buddy icon file.
- */
-void purple_account_set_buddy_icon(PurpleAccount *account, const char *icon);
-
-/**
  * Sets the account's buddy icon path.
  *
  * @param account The account.
@@ -525,15 +516,6 @@
 const char *purple_account_get_user_info(const PurpleAccount *account);
 
 /**
- * Returns the account's buddy icon filename.
- *
- * @param account The account.
- *
- * @return The buddy icon filename.
- */
-const char *purple_account_get_buddy_icon(const PurpleAccount *account);
-
-/**
  * Gets the account's buddy icon path.
  *
  * @param account The account.
--- a/libpurple/blist.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/blist.c	Sat Apr 28 18:32:47 2007 +0000
@@ -605,6 +605,9 @@
 	}
 
 	xmlnode_free(purple);
+
+	/* This tells the buddy icon code to do its thing. */
+	purple_buddy_icons_blist_loaded_cb();
 }
 
 
@@ -644,7 +647,7 @@
 			                            purple_buddy_get_presence(buddy));
 
 			if (cmp > 0 || (cmp == 0 &&
-			                purple_prefs_get_bool("/core/contact/last_match")))
+			                purple_prefs_get_bool("/purple/contact/last_match")))
 			{
 				new_priority = buddy;
 			}
@@ -1141,20 +1144,12 @@
 {
 	g_return_if_fail(buddy != NULL);
 
-	if (buddy->icon != icon) {
-		if (buddy->icon != NULL)
-			purple_buddy_icon_unref(buddy->icon);
-		
+	if (buddy->icon != icon)
+	{
+		purple_buddy_icon_unref(buddy->icon);
 		buddy->icon = (icon != NULL ? purple_buddy_icon_ref(icon) : NULL);
 	}
 
-	if (buddy->icon)
-		purple_buddy_icon_cache(icon, buddy);
-	else
-		purple_buddy_icon_uncache(buddy);
-
-	purple_blist_schedule_save();
-
 	purple_signal_emit(purple_blist_get_handle(), "buddy-icon-changed", buddy);
 
 	purple_blist_update_buddy_icon(buddy);
@@ -1783,9 +1778,6 @@
 	contact = (PurpleContact *)cnode;
 	group = (PurpleGroup *)gnode;
 
-	/* Delete any buddy icon. */
-	purple_buddy_icon_uncache(buddy);
-
 	/* Remove the node from its parent */
 	if (node->prev)
 		node->prev->next = node->next;
@@ -1831,8 +1823,7 @@
 	purple_signal_emit(purple_blist_get_handle(), "buddy-removed", buddy);
 
 	/* Delete the node */
-	if (buddy->icon != NULL)
-		purple_buddy_icon_unref(buddy->icon);
+	purple_buddy_icon_unref(buddy->icon);
 	g_hash_table_destroy(buddy->node.settings);
 	purple_presence_remove_buddy(buddy->presence, buddy);
 	purple_presence_destroy(buddy->presence);
@@ -2343,7 +2334,6 @@
 					buddy = (PurpleBuddy *)bnode;
 					if (account == buddy->account) {
 						PurplePresence *presence;
-						recompute = TRUE;
 
 						presence = purple_buddy_get_presence(buddy);
 
@@ -2363,8 +2353,14 @@
 						if (!g_list_find(list, presence))
 							list = g_list_prepend(list, presence);
 
-						if (ops && ops->remove)
+						if (contact->priority == buddy)
+							purple_contact_invalidate_priority_buddy(contact);
+						else
+							recompute = TRUE;
+
+						if (ops && ops->remove) {
 							ops->remove(purplebuddylist, bnode);
+						}
 					}
 				}
 				if (recompute) {
--- a/libpurple/buddyicon.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/buddyicon.c	Sat Apr 28 18:32:47 2007 +0000
@@ -24,26 +24,257 @@
  */
 #include "internal.h"
 #include "buddyicon.h"
+#include "cipher.h"
 #include "conversation.h"
 #include "dbus-maybe.h"
 #include "debug.h"
+#include "imgstore.h"
 #include "util.h"
 
+typedef struct _PurpleBuddyIconData PurpleBuddyIconData;
+
+/* NOTE: Instances of this struct are allocated without zeroing the memory, so
+ * NOTE: be sure to update purple_buddy_icon_new() if you add members. */
+struct _PurpleBuddyIcon
+{
+	PurpleAccount *account;    /**< The account the user is on.          */
+	PurpleStoredImage *img;    /**< The id of the stored image with the
+	                                the icon data.                       */
+	char *username;            /**< The username the icon belongs to.    */
+	char *checksum;            /**< The protocol checksum.               */
+	int ref_count;             /**< The buddy icon reference count.      */
+};
+
 static GHashTable *account_cache = NULL;
+static GHashTable *icon_data_cache = NULL;
+static GHashTable *icon_file_cache = NULL;
+
+/* This one is used for both custom buddy icons
+ * on PurpleContacts and account icons. */
+static GHashTable *pointer_icon_cache = NULL;
+
 static char       *cache_dir     = NULL;
 static gboolean    icon_caching  = TRUE;
 
+/* For ~/.gaim to ~/.purple migration. */
+static char *old_icons_dir = NULL;
+
+static void
+ref_filename(const char *filename)
+{
+	int refs;
+
+	g_return_if_fail(filename != NULL);
+
+	refs = GPOINTER_TO_INT(g_hash_table_lookup(icon_file_cache, filename));
+
+	g_hash_table_insert(icon_file_cache, g_strdup(filename),
+	                    GINT_TO_POINTER(refs + 1));
+}
+
+static void
+unref_filename(const char *filename)
+{
+	int refs;
+
+	if (filename == NULL)
+		return;
+
+	refs = GPOINTER_TO_INT(g_hash_table_lookup(icon_file_cache, filename));
+
+	if (refs == 1)
+	{
+		g_hash_table_remove(icon_file_cache, filename);
+	}
+	else
+	{
+		g_hash_table_insert(icon_file_cache, g_strdup(filename),
+		                    GINT_TO_POINTER(refs - 1));
+	}
+}
+
+static char *
+purple_buddy_icon_data_calculate_filename(guchar *icon_data, size_t icon_len)
+{
+	PurpleCipherContext *context;
+	gchar digest[41];
+
+	context = purple_cipher_context_new_by_name("sha1", NULL);
+	if (context == NULL)
+	{
+		purple_debug_error("buddyicon", "Could not find sha1 cipher\n");
+		g_return_val_if_reached(NULL);
+	}
+
+	/* Hash the icon data */
+	purple_cipher_context_append(context, icon_data, icon_len);
+	if (!purple_cipher_context_digest_to_str(context, sizeof(digest), digest, NULL))
+	{
+		purple_debug_error("buddyicon", "Failed to get SHA-1 digest.\n");
+		g_return_val_if_reached(NULL);
+	}
+	purple_cipher_context_destroy(context);
+
+	/* Return the filename */
+	return g_strdup_printf("%s.%s", digest,
+	                       purple_util_get_image_extension(icon_data, icon_len));
+}
+
+static void
+purple_buddy_icon_data_cache(PurpleStoredImage *img)
+{
+	const char *dirname;
+	char *path;
+	FILE *file = NULL;
+
+	g_return_if_fail(img != NULL);
+
+	if (!purple_buddy_icons_is_caching())
+		return;
+
+	dirname  = purple_buddy_icons_get_cache_dir();
+	path = g_build_filename(dirname, purple_imgstore_get_filename(img), NULL);
+
+	if (!g_file_test(dirname, G_FILE_TEST_IS_DIR))
+	{
+		purple_debug_info("buddyicon", "Creating icon cache directory.\n");
+
+		if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0)
+		{
+			purple_debug_error("buddyicon",
+			                   "Unable to create directory %s: %s\n",
+			                   dirname, strerror(errno));
+		}
+	}
+
+	if ((file = g_fopen(path, "wb")) != NULL)
+	{
+		if (!fwrite(purple_imgstore_get_data(img), purple_imgstore_get_size(img), 1, file))
+		{
+			purple_debug_error("buddyicon", "Error writing %s: %s\n",
+			                   path, strerror(errno));
+		}
+		else
+			purple_debug_info("buddyicon", "Wrote cache file: %s\n", path);
+
+		fclose(file);
+	}
+	else
+	{
+		purple_debug_error("buddyicon", "Unable to create file %s: %s\n",
+		                   path, strerror(errno));
+		g_free(path);
+		return;
+	}
+	g_free(path);
+}
+
+static void
+purple_buddy_icon_data_uncache_file(const char *filename)
+{
+	const char *dirname;
+	char *path;
+
+	g_return_if_fail(filename != NULL);
+
+	/* It's possible that there are other references to this icon
+	 * cache file that are not currently loaded into memory. */
+	if (GPOINTER_TO_INT(g_hash_table_lookup(icon_file_cache, filename)))
+		return;
+
+	dirname  = purple_buddy_icons_get_cache_dir();
+	path = g_build_filename(dirname, filename, NULL);
+
+	if (g_file_test(path, G_FILE_TEST_EXISTS))
+	{
+		if (g_unlink(path))
+		{
+			purple_debug_error("buddyicon", "Failed to delete %s: %s\n",
+			                   path, strerror(errno));
+		}
+		else
+		{
+			purple_debug_info("buddyicon", "Deleted cache file: %s\n", path);
+		}
+	}
+
+	g_free(path);
+}
+
+static gboolean
+value_equals(gpointer key, gpointer value, gpointer user_data)
+{
+	return (value == user_data);
+}
+
+static void
+image_deleting_cb(PurpleStoredImage *img, gpointer data)
+{
+	const char *filename = purple_imgstore_get_filename(img);
+
+	if (img == g_hash_table_lookup(icon_data_cache, filename))
+	{
+		purple_buddy_icon_data_uncache_file(filename);
+		g_hash_table_remove(icon_data_cache, filename);
+
+		/* We could make this O(1) by using another hash table, but
+		 * this is probably good enough. */
+		g_hash_table_foreach_remove(pointer_icon_cache, value_equals, img);
+	}
+}
+
+static PurpleStoredImage *
+purple_buddy_icon_data_new(guchar *icon_data, size_t icon_len, const char *filename)
+{
+	char *file;
+	PurpleStoredImage *img;
+
+	g_return_val_if_fail(icon_data != NULL, NULL);
+	g_return_val_if_fail(icon_len  > 0,     NULL);
+
+	if (filename == NULL)
+	{
+		file = purple_buddy_icon_data_calculate_filename(icon_data, icon_len);
+		if (file == NULL)
+		{
+			g_free(icon_data);
+			return NULL;
+		}
+	}
+	else
+		file = g_strdup(filename);
+
+	if ((img = g_hash_table_lookup(icon_data_cache, file)))
+	{
+		g_free(file);
+		g_free(icon_data);
+		return purple_imgstore_ref(img);
+	}
+
+	img = purple_imgstore_add(icon_data, icon_len, file);
+
+	/* This will take ownership of file and g_free it either now or later. */
+	g_hash_table_insert(icon_data_cache, file, img);
+
+	purple_buddy_icon_data_cache(img);
+
+	return img;
+}
+
 static PurpleBuddyIcon *
 purple_buddy_icon_create(PurpleAccount *account, const char *username)
 {
 	PurpleBuddyIcon *icon;
 	GHashTable *icon_cache;
 
-	icon = g_new0(PurpleBuddyIcon, 1);
+	/* This does not zero.  See purple_buddy_icon_new() for
+	 * information on which function allocates which member. */
+	icon = g_slice_new(PurpleBuddyIcon);
 	PURPLE_DBUS_REGISTER_POINTER(icon, PurpleBuddyIcon);
 
-	purple_buddy_icon_set_account(icon,  account);
-	purple_buddy_icon_set_username(icon, username);
+	icon->account = account;
+	icon->username = g_strdup(username);
+	icon->checksum = NULL;
 
 	icon_cache = g_hash_table_lookup(account_cache, account);
 
@@ -55,13 +286,14 @@
 	}
 
 	g_hash_table_insert(icon_cache,
-	                   (char *)purple_buddy_icon_get_username(icon), icon);
+	                    (char *)purple_buddy_icon_get_username(icon), icon);
 	return icon;
 }
 
 PurpleBuddyIcon *
 purple_buddy_icon_new(PurpleAccount *account, const char *username,
-					void *icon_data, size_t icon_len)
+                      void *icon_data, size_t icon_len,
+                      const char *checksum)
 {
 	PurpleBuddyIcon *icon;
 
@@ -70,76 +302,25 @@
 	g_return_val_if_fail(icon_data != NULL, NULL);
 	g_return_val_if_fail(icon_len  > 0,    NULL);
 
+	/* purple_buddy_icons_find() does allocation, so be
+	 * sure to update it as well when members are added. */
 	icon = purple_buddy_icons_find(account, username);
 
+	/* purple_buddy_icon_create() sets account & username */
 	if (icon == NULL)
 		icon = purple_buddy_icon_create(account, username);
 
-	purple_buddy_icon_ref(icon);
-	purple_buddy_icon_set_data(icon, icon_data, icon_len);
-	purple_buddy_icon_set_path(icon, NULL);
+	/* Take a reference for the caller of this function. */
+	icon->ref_count = 1;
 
-	/* purple_buddy_icon_set_data() makes blist.c or
-	 * conversation.c, or both, take a reference.
-	 *
-	 * Plus, we leave one for the caller of this function.
-	 */
+	/* purple_buddy_icon_set_data() sets img, but it
+	 * references img first, so we need to initialize it */
+	icon->img = NULL;
+	purple_buddy_icon_set_data(icon, icon_data, icon_len, checksum);
 
 	return icon;
 }
 
-void
-purple_buddy_icon_destroy(PurpleBuddyIcon *icon)
-{
-	PurpleConversation *conv;
-	PurpleAccount *account;
-	GHashTable *icon_cache;
-	const char *username;
-	GSList *sl, *list;
-
-	g_return_if_fail(icon != NULL);
-
-	if (icon->ref_count > 0)
-	{
-		/* If the ref count is greater than 0, then we weren't called from
-		 * purple_buddy_icon_unref(). So we go through and ask everyone to
-		 * unref us. Then we return, since we know somewhere along the
-		 * line we got called recursively by one of the unrefs, and the
-		 * icon is already destroyed.
-		 */
-		account  = purple_buddy_icon_get_account(icon);
-		username = purple_buddy_icon_get_username(icon);
-
-		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, username, account);
-		if (conv != NULL)
-			purple_conv_im_set_icon(PURPLE_CONV_IM(conv), NULL);
-
-		for (list = sl = purple_find_buddies(account, username); sl != NULL;
-			 sl = sl->next)
-		{
-			PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
-
-			purple_buddy_set_icon(buddy, NULL);
-		}
-
-		g_slist_free(list);
-
-		return;
-	}
-
-	icon_cache = g_hash_table_lookup(account_cache,
-									 purple_buddy_icon_get_account(icon));
-
-	if (icon_cache != NULL)
-		g_hash_table_remove(icon_cache, purple_buddy_icon_get_username(icon));
-
-	g_free(icon->username);
-	g_free(icon->data);
-	g_free(icon->path);
-	PURPLE_DBUS_UNREGISTER_POINTER(icon);
-	g_free(icon);
-}
-
 PurpleBuddyIcon *
 purple_buddy_icon_ref(PurpleBuddyIcon *icon)
 {
@@ -153,14 +334,26 @@
 PurpleBuddyIcon *
 purple_buddy_icon_unref(PurpleBuddyIcon *icon)
 {
-	g_return_val_if_fail(icon != NULL, NULL);
+	if (icon == NULL)
+		return NULL;
+
 	g_return_val_if_fail(icon->ref_count > 0, NULL);
 
 	icon->ref_count--;
 
 	if (icon->ref_count == 0)
 	{
-		purple_buddy_icon_destroy(icon);
+		GHashTable *icon_cache = g_hash_table_lookup(account_cache, purple_buddy_icon_get_account(icon));
+
+		if (icon_cache != NULL)
+			g_hash_table_remove(icon_cache, purple_buddy_icon_get_username(icon));
+
+		g_free(icon->username);
+		g_free(icon->checksum);
+		purple_imgstore_unref(icon->img);
+
+		PURPLE_DBUS_UNREGISTER_POINTER(icon);
+		g_slice_free(PurpleBuddyIcon, icon);
 
 		return NULL;
 	}
@@ -174,6 +367,7 @@
 	PurpleConversation *conv;
 	PurpleAccount *account;
 	const char *username;
+	PurpleBuddyIcon *icon_to_set;
 	GSList *sl, *list;
 
 	g_return_if_fail(icon != NULL);
@@ -181,12 +375,52 @@
 	account  = purple_buddy_icon_get_account(icon);
 	username = purple_buddy_icon_get_username(icon);
 
-	for (list = sl = purple_find_buddies(account, username); sl != NULL;
-		 sl = sl->next)
+	/* If no data exists, then call the functions below with NULL to
+	 * unset the icon.  They will then unref the icon and it should be
+	 * destroyed.  The only way it wouldn't be destroyed is if someone
+	 * else is holding a reference to it, in which case they can kill
+	 * the icon when they realize it has no data. */
+	icon_to_set = icon->img ? icon : NULL;
+
+	for (list = sl = purple_find_buddies(account, username);
+	     sl != NULL;
+	     sl = sl->next)
 	{
 		PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
+		char *old_icon;
 
-		purple_buddy_set_icon(buddy, icon);
+		purple_buddy_set_icon(buddy, icon_to_set);
+
+
+		old_icon = g_strdup(purple_blist_node_get_string((PurpleBlistNode *)buddy,
+		                                                 "buddy_icon"));
+		if (icon->img && purple_buddy_icons_is_caching())
+		{
+			const char *filename = purple_imgstore_get_filename(icon->img);
+			purple_blist_node_set_string((PurpleBlistNode *)buddy,
+			                             "buddy_icon",
+			                             filename);
+
+			if (icon->checksum && *icon->checksum)
+			{
+				purple_blist_node_set_string((PurpleBlistNode *)buddy,
+				                             "icon_checksum",
+				                             icon->checksum);
+			}
+			else
+			{
+				purple_blist_node_remove_setting((PurpleBlistNode *)buddy,
+				                                 "icon_checksum");
+			}
+			ref_filename(filename);
+		}
+		else
+		{
+			purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon");
+			purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "icon_checksum");
+		}
+		unref_filename(old_icon);
+		g_free(old_icon);
 	}
 
 	g_slist_free(list);
@@ -194,160 +428,33 @@
 	conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, username, account);
 
 	if (conv != NULL)
-		purple_conv_im_set_icon(PURPLE_CONV_IM(conv), icon);
-}
-
-static void
-delete_icon_cache_file(const char *dirname, const char *old_icon)
-{
-	struct stat st;
-
-	g_return_if_fail(dirname != NULL);
-	g_return_if_fail(old_icon != NULL);
-
-	if (g_stat(old_icon, &st) == 0)
-		g_unlink(old_icon);
-	else
-	{
-		char *filename = g_build_filename(dirname, old_icon, NULL);
-		if (g_stat(filename, &st) == 0)
-			g_unlink(filename);
-		g_free(filename);
-	}
-	purple_debug_info("buddyicon", "Uncached file %s\n", old_icon);
+		purple_conv_im_set_icon(PURPLE_CONV_IM(conv), icon_to_set);
 }
 
 void
-purple_buddy_icon_cache(PurpleBuddyIcon *icon, PurpleBuddy *buddy)
+purple_buddy_icon_set_data(PurpleBuddyIcon *icon, guchar *data,
+                           size_t len, const char *checksum)
 {
-	const guchar *data;
-	const char *dirname;
-	char *random;
-	char *filename;
-	const char *old_icon;
-	size_t len = 0;
-	FILE *file = NULL;
+	PurpleStoredImage *old_img;
 
-	g_return_if_fail(icon  != NULL);
-	g_return_if_fail(buddy != NULL);
-
-	if (!purple_buddy_icons_is_caching())
-		return;
-
-	data = purple_buddy_icon_get_data(icon, &len);
-
-	random   = g_strdup_printf("%x", g_random_int());
-	dirname  = purple_buddy_icons_get_cache_dir();
-	filename = g_build_filename(dirname, random, NULL);
-	old_icon = purple_blist_node_get_string((PurpleBlistNode*)buddy, "buddy_icon");
+	g_return_if_fail(icon != NULL);
 
-	if (!g_file_test(dirname, G_FILE_TEST_IS_DIR))
-	{
-		purple_debug_info("buddyicon", "Creating icon cache directory.\n");
-
-		if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0)
-		{
-			purple_debug_error("buddyicon",
-							 "Unable to create directory %s: %s\n",
-							 dirname, strerror(errno));
-		}
-	}
+	old_img = icon->img;
+	icon->img = NULL;
 
-	if ((file = g_fopen(filename, "wb")) != NULL)
+	if (data != NULL)
 	{
-		fwrite(data, 1, len, file);
-		fclose(file);
-		purple_debug_info("buddyicon", "Wrote file %s\n", filename);
-	}
-	else
-	{
-		purple_debug_error("buddyicon", "Unable to create file %s: %s\n",
-						 filename, strerror(errno));
-		g_free(filename);
-		g_free(random);
-		return;
+		if (len > 0)
+			icon->img = purple_buddy_icon_data_new(data, len, NULL);
+		else
+			g_free(data);
 	}
 
-	g_free(filename);
-
-	if (old_icon != NULL)
-		delete_icon_cache_file(dirname, old_icon);
-
-	purple_blist_node_set_string((PurpleBlistNode *)buddy, "buddy_icon", random);
-
-	g_free(random);
-}
-
-void
-purple_buddy_icon_uncache(PurpleBuddy *buddy)
-{
-	const char *old_icon;
-
-	g_return_if_fail(buddy != NULL);
-
-	old_icon = purple_blist_node_get_string((PurpleBlistNode *)buddy, "buddy_icon");
-
-	if (old_icon != NULL)
-		delete_icon_cache_file(purple_buddy_icons_get_cache_dir(), old_icon);
-
-	purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon");
-
-	/* Unset the icon in case this function is called from
-	 * something other than purple_buddy_set_icon(). */
-	if (buddy->icon != NULL)
-	{
-		purple_buddy_icon_unref(buddy->icon);
-		buddy->icon = NULL;
-	}
-}
-
-void
-purple_buddy_icon_set_account(PurpleBuddyIcon *icon, PurpleAccount *account)
-{
-	g_return_if_fail(icon    != NULL);
-	g_return_if_fail(account != NULL);
-
-	icon->account = account;
-}
-
-void
-purple_buddy_icon_set_username(PurpleBuddyIcon *icon, const char *username)
-{
-	g_return_if_fail(icon     != NULL);
-	g_return_if_fail(username != NULL);
-
-	g_free(icon->username);
-	icon->username = g_strdup(username);
-}
-
-void
-purple_buddy_icon_set_data(PurpleBuddyIcon *icon, void *data, size_t len)
-{
-	g_return_if_fail(icon != NULL);
-
-	g_free(icon->data);
-
-	if (data != NULL && len > 0)
-	{
-		icon->data = g_memdup(data, len);
-		icon->len  = len;
-	}
-	else
-	{
-		icon->data = NULL;
-		icon->len  = 0;
-	}
+	icon->checksum = g_strdup(checksum);
 
 	purple_buddy_icon_update(icon);
-}
 
-void 
-purple_buddy_icon_set_path(PurpleBuddyIcon *icon, const gchar *path)
-{
-	g_return_if_fail(icon != NULL);
-	
-	g_free(icon->path);
-	icon->path = g_strdup(path);
+	purple_imgstore_unref(old_img);
 }
 
 PurpleAccount *
@@ -366,121 +473,613 @@
 	return icon->username;
 }
 
-const guchar *
+const char *
+purple_buddy_icon_get_checksum(const PurpleBuddyIcon *icon)
+{
+	g_return_val_if_fail(icon != NULL, NULL);
+
+	return icon->checksum;
+}
+
+gconstpointer
 purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len)
 {
 	g_return_val_if_fail(icon != NULL, NULL);
 
-	if (len != NULL)
-		*len = icon->len;
-
-	return icon->data;
-}
+	if (icon->img)
+	{
+		if (len != NULL)
+			*len = purple_imgstore_get_size(icon->img);
 
-const char *
-purple_buddy_icon_get_path(PurpleBuddyIcon *icon)
-{
-	g_return_val_if_fail(icon != NULL, NULL);
+		return purple_imgstore_get_data(icon->img);
+	}
 
-	return icon->path;
+	return NULL;
 }
 
 const char *
-purple_buddy_icon_get_type(const PurpleBuddyIcon *icon)
+purple_buddy_icon_get_extension(const PurpleBuddyIcon *icon)
 {
-	const void *data;
-	size_t len;
-
-	g_return_val_if_fail(icon != NULL, NULL);
-
-	data = purple_buddy_icon_get_data(icon, &len);
-
-	/* TODO: Find a way to do this with GDK */
-	if (len >= 4)
-	{
-		if (!strncmp(data, "BM", 2))
-			return "bmp";
-		else if (!strncmp(data, "GIF8", 4))
-			return "gif";
-		else if (!strncmp(data, "\xff\xd8\xff\xe0", 4))
-			return "jpg";
-		else if (!strncmp(data, "\x89PNG", 4))
-			return "png";
-	}
+	if (icon->img != NULL)
+		return purple_imgstore_get_extension(icon->img);
 
 	return NULL;
 }
 
 void
 purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username,
-							void *icon_data, size_t icon_len)
+                                void *icon_data, size_t icon_len,
+                                const char *checksum)
 {
+	PurpleBuddyIcon *icon;
+
 	g_return_if_fail(account  != NULL);
 	g_return_if_fail(username != NULL);
 
-	if (icon_data == NULL || icon_len == 0)
-	{
-		PurpleBuddyIcon *buddy_icon;
+	icon = purple_buddy_icons_find(account, username);
 
-		buddy_icon = purple_buddy_icons_find(account, username);
-
-		if (buddy_icon != NULL)
-			purple_buddy_icon_destroy(buddy_icon);
-	}
+	if (icon != NULL)
+		purple_buddy_icon_set_data(icon, icon_data, icon_len, checksum);
 	else
 	{
-		PurpleBuddyIcon *icon = purple_buddy_icon_new(account, username, icon_data, icon_len);
+		PurpleBuddyIcon *icon = purple_buddy_icon_new(account, username, icon_data, icon_len, checksum);
 		purple_buddy_icon_unref(icon);
 	}
 }
 
+char *purple_buddy_icon_get_full_path(PurpleBuddyIcon *icon)
+{
+	char *path;
+
+	g_return_val_if_fail(icon != NULL, NULL);
+
+	if (icon->img == NULL)
+		return NULL;
+
+	path = g_build_filename(purple_buddy_icons_get_cache_dir(),
+	                        purple_imgstore_get_filename(icon->img), NULL);
+	if (!g_file_test(path, G_FILE_TEST_EXISTS))
+	{
+		g_free(path);
+		return NULL;
+	}
+	return path;
+}
+
+const char *
+purple_buddy_icons_get_checksum_for_user(PurpleBuddy *buddy)
+{
+	return purple_blist_node_get_string((PurpleBlistNode*)buddy,
+	                                    "icon_checksum");
+}
+
+static gboolean
+read_icon_file(const char *path, guchar **data, size_t *len)
+{
+	GError *err = NULL;
+
+	if (!g_file_get_contents(path, (gchar **)data, len, &err))
+	{
+		purple_debug_error("buddyicon", "Error reading %s: %s\n",
+		                   path, err->message);
+		g_error_free(err);
+
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
 PurpleBuddyIcon *
 purple_buddy_icons_find(PurpleAccount *account, const char *username)
 {
 	GHashTable *icon_cache;
-	PurpleBuddyIcon *ret = NULL;
-	char *filename = NULL;
+	PurpleBuddyIcon *icon = NULL;
 
 	g_return_val_if_fail(account  != NULL, NULL);
 	g_return_val_if_fail(username != NULL, NULL);
 
 	icon_cache = g_hash_table_lookup(account_cache, account);
 
-	if ((icon_cache == NULL) || ((ret = g_hash_table_lookup(icon_cache, username)) == NULL)) {
-		const char *file;
-		struct stat st;
+	if ((icon_cache == NULL) || ((icon = g_hash_table_lookup(icon_cache, username)) == NULL))
+	{
 		PurpleBuddy *b = purple_find_buddy(account, username);
+		const char *protocol_icon_file;
+		const char *dirname;
+		gboolean caching;
+		guchar *data;
+		size_t len;
 
 		if (!b)
 			return NULL;
 
-		if ((file = purple_blist_node_get_string((PurpleBlistNode*)b, "buddy_icon")) == NULL)
+		protocol_icon_file = purple_blist_node_get_string((PurpleBlistNode*)b, "buddy_icon");
+
+		if (protocol_icon_file == NULL)
 			return NULL;
 
-		if (!g_stat(file, &st))
-			filename = g_strdup(file);
-		else
-			filename = g_build_filename(purple_buddy_icons_get_cache_dir(), file, NULL);
+		dirname = purple_buddy_icons_get_cache_dir();
+
+		caching = purple_buddy_icons_is_caching();
+		/* By disabling caching temporarily, we avoid a loop
+		 * and don't have to add special code through several
+		 * functions. */
+		purple_buddy_icons_set_caching(FALSE);
+
+		if (protocol_icon_file != NULL)
+		{
+			char *path = g_build_filename(dirname, protocol_icon_file, NULL);
+			if (read_icon_file(path, &data, &len))
+			{
+				const char *checksum;
+
+				if (icon == NULL)
+					icon = purple_buddy_icon_create(account, username);
+				icon->ref_count = 0;
+				icon->img = NULL;
+				checksum = g_strdup(purple_blist_node_get_string((PurpleBlistNode*)b, "icon_checksum"));
+				purple_buddy_icon_set_data(icon, data, len, checksum);
+			}
+			g_free(path);
+		}
+
+		purple_buddy_icons_set_caching(caching);
+	}
+
+	return icon;
+}
+
+gboolean
+purple_buddy_icons_has_custom_icon(PurpleContact *contact)
+{
+	g_return_val_if_fail(contact != NULL, FALSE);
+
+	return (purple_blist_node_get_string((PurpleBlistNode*)contact, "custom_buddy_icon") != NULL);
+}
+
+PurpleStoredImage *
+purple_buddy_icons_find_account_icon(PurpleAccount *account)
+{
+	PurpleStoredImage *img;
+	const char *account_icon_file;
+	const char *dirname;
+	char *path;
+	guchar *data;
+	size_t len;
+
+	g_return_val_if_fail(account != NULL, NULL);
+
+	if ((img = g_hash_table_lookup(pointer_icon_cache, account)))
+	{
+		return purple_imgstore_ref(img);
+	}
+
+	account_icon_file = purple_account_get_string(account, "buddy_icon", NULL);
+
+	if (account_icon_file == NULL)
+		return NULL;
+
+	dirname = purple_buddy_icons_get_cache_dir();
+	path = g_build_filename(dirname, account_icon_file, NULL);
+
+	if (read_icon_file(path, &data, &len))
+	{
+		g_free(path);
+		img = purple_buddy_icon_data_new(data, len, account_icon_file);
+		g_hash_table_insert(pointer_icon_cache, account, img);
+		return img;
+	}
+	g_free(path);
+
+	return NULL;
+}
+
+PurpleStoredImage *
+purple_buddy_icons_set_account_icon(PurpleAccount *account,
+                                    guchar *icon_data, size_t icon_len)
+{
+	PurpleStoredImage *old_img;
+	PurpleStoredImage *img = NULL;
+	char *old_icon;
+
+	old_img = g_hash_table_lookup(pointer_icon_cache, account);
+
+	if (icon_data != NULL && icon_len > 0)
+	{
+		img = purple_buddy_icon_data_new(icon_data, icon_len, NULL);
+	}
+
+	old_icon = g_strdup(purple_account_get_string(account, "buddy_icon", NULL));
+	if (img && purple_buddy_icons_is_caching())
+	{
+		const char *filename = purple_imgstore_get_filename(img);
+		purple_account_set_string(account, "buddy_icon", filename);
+		ref_filename(filename);
+	}
+	else
+	{
+		purple_account_set_string(account, "buddy_icon", NULL);
+	}
+	unref_filename(old_icon);
+
+	if (img)
+		g_hash_table_insert(pointer_icon_cache, account, img);
+	else
+		g_hash_table_remove(pointer_icon_cache, account);
+
+	if (purple_account_is_connected(account))
+	{
+		PurpleConnection *gc;
+		PurplePluginProtocolInfo *prpl_info;
+
+		gc = purple_account_get_connection(account);
+		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
+
+		if (prpl_info && prpl_info->set_buddy_icon)
+			prpl_info->set_buddy_icon(gc, img);
+	}
+
+	if (old_img)
+		purple_imgstore_unref(old_img);
+	else
+	{
+		/* The old icon may not have been loaded into memory.  In that
+		 * case, we'll need to uncache the filename.  The filenames
+		 * are ref-counted, so this is safe. */
+		purple_buddy_icon_data_uncache_file(old_icon);
+	}
+	g_free(old_icon);
+
+	return img;
+}
+
+PurpleStoredImage *
+purple_buddy_icons_find_custom_icon(PurpleContact *contact)
+{
+	PurpleStoredImage *img;
+	const char *custom_icon_file;
+	const char *dirname;
+	char *path;
+	guchar *data;
+	size_t len;
+
+	g_return_val_if_fail(contact != NULL, NULL);
+
+	if ((img = g_hash_table_lookup(pointer_icon_cache, contact)))
+	{
+		return purple_imgstore_ref(img);
+	}
+
+	custom_icon_file = purple_blist_node_get_string((PurpleBlistNode*)contact, "custom_buddy_icon");
+
+	if (custom_icon_file == NULL)
+		return NULL;
+
+	dirname = purple_buddy_icons_get_cache_dir();
+	path = g_build_filename(dirname, custom_icon_file, NULL);
+
+	if (read_icon_file(path, &data, &len))
+	{
+		g_free(path);
+		img = purple_buddy_icon_data_new(data, len, custom_icon_file);
+		g_hash_table_insert(pointer_icon_cache, contact, img);
+		return img;
+	}
+	g_free(path);
+
+	return NULL;
+}
+
+PurpleStoredImage *
+purple_buddy_icons_set_custom_icon(PurpleContact *contact,
+                                   guchar *icon_data, size_t icon_len)
+{
+	PurpleStoredImage *old_img;
+	PurpleStoredImage *img = NULL;
+	char *old_icon;
+	PurpleBlistNode *child;
 
-		if (!g_stat(filename, &st)) {
-			FILE *f = g_fopen(filename, "rb");
-			if (f) {
-				char *data = g_malloc(st.st_size);
-				fread(data, 1, st.st_size, f);
-				fclose(f);
-				ret = purple_buddy_icon_create(account, username);
-				purple_buddy_icon_ref(ret);
-				purple_buddy_icon_set_data(ret, data, st.st_size);
-				purple_buddy_icon_unref(ret);
-				g_free(data);
-				g_free(filename);
-				return ret;
+	old_img = g_hash_table_lookup(pointer_icon_cache, contact);
+
+	if (icon_data != NULL && icon_len > 0)
+	{
+		img = purple_buddy_icon_data_new(icon_data, icon_len, NULL);
+	}
+
+	old_icon = g_strdup(purple_blist_node_get_string((PurpleBlistNode *)contact,
+	                                                 "custom_buddy_icon"));
+	if (img && purple_buddy_icons_is_caching())
+	{
+		const char *filename = purple_imgstore_get_filename(img);
+		purple_blist_node_set_string((PurpleBlistNode *)contact,
+		                             "custom_buddy_icon",
+		                             filename);
+		ref_filename(filename);
+	}
+	else
+	{
+		purple_blist_node_remove_setting((PurpleBlistNode *)contact,
+		                                 "custom_buddy_icon");
+	}
+	unref_filename(old_icon);
+
+	if (img)
+		g_hash_table_insert(pointer_icon_cache, contact, img);
+	else
+		g_hash_table_remove(pointer_icon_cache, contact);
+
+	for (child = contact->node.child ; child ; child = child->next)
+	{
+		PurpleBuddy *buddy;
+		PurpleConversation *conv;
+
+		if (!PURPLE_BLIST_NODE_IS_BUDDY(child))
+			continue;
+
+		buddy = (PurpleBuddy *)child;
+
+		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
+		                                             purple_buddy_get_name(buddy),
+		                                             purple_buddy_get_account(buddy));
+		if (conv)
+			purple_conversation_update(conv, PURPLE_CONV_UPDATE_ICON);
+
+		purple_blist_update_buddy_icon(buddy);
+	}
+
+	if (old_img)
+		purple_imgstore_unref(old_img);
+	else
+	{
+		/* The old icon may not have been loaded into memory.  In that
+		 * case, we'll need to uncache the filename.  The filenames
+		 * are ref-counted, so this is safe. */
+		purple_buddy_icon_data_uncache_file(old_icon);
+	}
+	g_free(old_icon);
+
+	return img;
+}
+
+void
+purple_buddy_icon_set_old_icons_dir(const char *dirname)
+{
+	old_icons_dir = g_strdup(dirname);
+}
+
+static void
+delete_buddy_icon_settings(PurpleBlistNode *node, const char *setting_name)
+{
+	purple_blist_node_remove_setting(node, setting_name);
+
+	if (!strcmp(setting_name, "buddy_icon"))
+	{
+		purple_blist_node_remove_setting(node, "avatar_hash");
+		purple_blist_node_remove_setting(node, "icon_checksum");
+	}
+}
+
+static void
+migrate_buddy_icon(PurpleBlistNode *node, const char *setting_name,
+                   const char *dirname, const char *filename)
+{
+	char *path;
+
+	if (filename[0] != '/')
+	{
+		path = g_build_filename(dirname, filename, NULL);
+		if (g_file_test(path, G_FILE_TEST_EXISTS))
+		{
+			g_free(path);
+			return;
+		}
+		g_free(path);
+
+		path = g_build_filename(old_icons_dir, filename, NULL);
+	}
+	else
+		path = g_strdup(filename);
+
+	if (g_file_test(path, G_FILE_TEST_EXISTS))
+	{
+		guchar *icon_data;
+		size_t icon_len;
+		FILE *file;
+		char *new_filename;
+
+		if (!read_icon_file(path, &icon_data, &icon_len) ||
+		    icon_data == NULL || icon_len > 0)
+		{
+			delete_buddy_icon_settings(node, setting_name);
+			g_free(path);
+			return;
+		}
+
+		g_free(path);
+
+		new_filename = purple_buddy_icon_data_calculate_filename(icon_data, icon_len);
+		if (new_filename == NULL)
+		{
+			delete_buddy_icon_settings(node, setting_name);
+			return;
+		}
+
+		path = g_build_filename(dirname, new_filename, NULL);
+		if ((file = g_fopen(path, "wb")) != NULL)
+		{
+			if (!fwrite(icon_data, icon_len, 1, file))
+			{
+				purple_debug_error("buddyicon", "Error writing %s: %s\n",
+				                   path, strerror(errno));
+			}
+			else
+				purple_debug_info("buddyicon", "Wrote migrated cache file: %s\n", path);
+
+			fclose(file);
+		}
+		else
+		{
+			purple_debug_error("buddyicon", "Unable to create file %s: %s\n",
+			                   path, strerror(errno));
+			g_free(new_filename);
+			g_free(path);
+
+			delete_buddy_icon_settings(node, setting_name);
+			return;
+		}
+		g_free(path);
+
+		purple_blist_node_set_string(node,
+		                             setting_name,
+		                             new_filename);
+		ref_filename(new_filename);
+
+		g_free(new_filename);
+
+		if (!strcmp(setting_name, "buddy_icon"))
+		{
+			const char *hash;
+
+			hash = purple_blist_node_get_string(node, "avatar_hash");
+			if (hash != NULL)
+			{
+				purple_blist_node_set_string(node, "icon_checksum", hash);
+				purple_blist_node_remove_setting(node, "avatar_hash");
+			}
+			else
+			{
+				PurpleAccount *account = purple_buddy_get_account((PurpleBuddy *)node);
+				const char *prpl_id = purple_account_get_protocol_id(account);
+
+				if (!strcmp(prpl_id, "prpl-yahoo"))
+				{
+					int checksum = purple_blist_node_get_int(node, "icon_checksum");
+					if (checksum != 0)
+					{
+						char *checksum_str = g_strdup_printf("%i", checksum);
+						purple_blist_node_remove_setting(node, "icon_checksum");
+						purple_blist_node_set_string(node, "icon_checksum", checksum_str);
+						g_free(checksum_str);
+					}
+				}
 			}
 		}
-		g_free(filename);
+	}
+	else
+	{
+		/* If the icon is gone, drop the setting... */
+		delete_buddy_icon_settings(node, setting_name);
+		g_free(path);
+	}
+}
+
+void
+purple_buddy_icons_account_loaded_cb()
+{
+	const char *dirname = purple_buddy_icons_get_cache_dir();
+	GList *cur;
+
+	for (cur = purple_accounts_get_all(); cur != NULL; cur = cur->next)
+	{
+		PurpleAccount *account = cur->data;
+		const char *account_icon_file = purple_account_get_string(account, "buddy_icon", NULL);
+
+		if (account_icon_file != NULL)
+		{
+			char *path = g_build_filename(dirname, account_icon_file, NULL);
+			if (!g_file_test(path, G_FILE_TEST_EXISTS))
+			{
+				purple_account_set_string(account, "buddy_icon", NULL);
+			} else {
+				ref_filename(account_icon_file);
+			}
+			g_free(path);
+		}
+	}
+}
+
+void
+purple_buddy_icons_blist_loaded_cb()
+{
+	PurpleBlistNode *node = purple_blist_get_root();
+	const char *dirname = purple_buddy_icons_get_cache_dir();
+
+	/* Doing this once here saves having to check it inside a loop. */
+	if (old_icons_dir != NULL)
+	{
+		if (!g_file_test(dirname, G_FILE_TEST_IS_DIR))
+		{
+			purple_debug_info("buddyicon", "Creating icon cache directory.\n");
+
+			if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0)
+			{
+				purple_debug_error("buddyicon",
+				                   "Unable to create directory %s: %s\n",
+				                   dirname, strerror(errno));
+			}
+		}
 	}
 
-	return ret;
+	while (node != NULL)
+	{
+		if (PURPLE_BLIST_NODE_IS_BUDDY(node))
+		{
+			const char *filename;
+
+			filename = purple_blist_node_get_string(node, "buddy_icon");
+			if (filename != NULL)
+			{
+				if (old_icons_dir != NULL)
+				{
+					migrate_buddy_icon(node,
+					                   "buddy_icon",
+					                   dirname, filename);
+				}
+				else
+				{
+					char *path = g_build_filename(dirname, filename, NULL);
+					if (!g_file_test(path, G_FILE_TEST_EXISTS))
+					{
+						purple_blist_node_remove_setting(node,
+						                                 "buddy_icon");
+						purple_blist_node_remove_setting(node,
+						                                 "icon_checksum");
+					}
+					else
+						ref_filename(filename);
+					g_free(path);
+				}
+			}
+		}
+		else if (PURPLE_BLIST_NODE_IS_CONTACT(node))
+		{
+			const char *filename;
+
+			filename = purple_blist_node_get_string(node, "custom_buddy_icon");
+			if (filename != NULL)
+			{
+				if (old_icons_dir != NULL)
+				{
+					migrate_buddy_icon(node,
+					                   "custom_buddy_icon",
+					                   dirname, filename);
+				}
+				else
+				{
+					char *path = g_build_filename(dirname, filename, NULL);
+					if (!g_file_test(path, G_FILE_TEST_EXISTS))
+					{
+						purple_blist_node_remove_setting(node,
+						                                 "custom_buddy_icon");
+					}
+					else
+						ref_filename(filename);
+					g_free(path);
+				}
+			}
+		}
+		node = purple_blist_node_next(node, TRUE);
+	}
 }
 
 void
@@ -510,16 +1109,6 @@
 	return cache_dir;
 }
 
-char *purple_buddy_icons_get_full_path(const char *icon) {
-	if (icon == NULL)
-		return NULL;
-
-	if (g_file_test(icon, G_FILE_TEST_IS_REGULAR))
-		return g_strdup(icon);
-	else
-		return g_build_filename(purple_buddy_icons_get_cache_dir(), icon, NULL);
-}
-
 void *
 purple_buddy_icons_get_handle()
 {
@@ -535,13 +1124,28 @@
 		g_direct_hash, g_direct_equal,
 		NULL, (GFreeFunc)g_hash_table_destroy);
 
+	icon_data_cache = g_hash_table_new(g_str_hash, g_str_equal);
+	icon_file_cache = g_hash_table_new_full(g_str_hash, g_str_equal,
+	                                        g_free, NULL);
+	pointer_icon_cache = g_hash_table_new(g_direct_hash, g_direct_equal);
+
 	cache_dir = g_build_filename(purple_user_dir(), "icons", NULL);
+
+	purple_signal_connect(purple_imgstore_get_handle(), "image-deleting",
+	                      purple_buddy_icons_get_handle(),
+	                      G_CALLBACK(image_deleting_cb), NULL);
 }
 
 void
 purple_buddy_icons_uninit()
 {
+	purple_signals_disconnect_by_handle(purple_buddy_icons_get_handle());
+
 	g_hash_table_destroy(account_cache);
+	g_hash_table_destroy(icon_data_cache);
+	g_hash_table_destroy(icon_file_cache);
+	g_hash_table_destroy(pointer_icon_cache);
+	g_free(old_icons_dir);
 }
 
 void purple_buddy_icon_get_scale_size(PurpleBuddyIconSpec *spec, int *width, int *height)
@@ -572,4 +1176,3 @@
 	*width = new_width;
 	*height = new_height;
 }
-
--- a/libpurple/buddyicon.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/buddyicon.h	Sat Apr 28 18:32:47 2007 +0000
@@ -29,51 +29,36 @@
 
 #include "account.h"
 #include "blist.h"
+#include "imgstore.h"
 #include "prpl.h"
 
-struct _PurpleBuddyIcon
-{
-	PurpleAccount *account;  /**< The account the user is on.        */
-	char *username;        /**< The username the icon belongs to.  */
-
-	void  *data;           /**< The buddy icon data.               */
-	size_t len;            /**< The length of the buddy icon data. */
-	char *path;	       /**< The buddy icon's non-cached path.  */
-
-	int ref_count;         /**< The buddy icon reference count.    */
-};
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+
 /**************************************************************************/
 /** @name Buddy Icon API                                                  */
 /**************************************************************************/
 /*@{*/
 
 /**
- * Creates a new buddy icon structure.
+ * Creates a new buddy icon structure and populate it.
+ *
+ * If the buddy icon already exists, you'll get a reference to that structure,
+ * which will have been updated with the data supplied.
  *
  * @param account   The account the user is on.
  * @param username  The username the icon belongs to.
  * @param icon_data The buddy icon data.
  * @param icon_len  The buddy icon length.
+ * @param checksum  A protocol checksum from the prpl or @c NULL.
  *
  * @return The buddy icon structure.
  */
 PurpleBuddyIcon *purple_buddy_icon_new(PurpleAccount *account, const char *username,
-								void *icon_data, size_t icon_len);
-
-/**
- * Destroys a buddy icon structure.
- *
- * If the buddy icon's reference count is greater than 1, this will
- * just decrease the reference count and return.
- *
- * @param icon The buddy icon structure to destroy.
- */
-void purple_buddy_icon_destroy(PurpleBuddyIcon *icon);
+                                       void *icon_data, size_t icon_len,
+                                       const char *checksum);
 
 /**
  * Increments the reference count on a buddy icon.
@@ -103,52 +88,17 @@
 void purple_buddy_icon_update(PurpleBuddyIcon *icon);
 
 /**
- * Caches a buddy icon associated with a specific buddy to disk.
- *
- * @param icon  The buddy icon.
- * @param buddy The buddy that this icon belongs to.
- */
-void purple_buddy_icon_cache(PurpleBuddyIcon *icon, PurpleBuddy *buddy);
-
-/**
- * Removes cached buddy icon for a specific buddy.
- *
- * @param buddy The buddy for which to remove the cached icon.
- */
-void purple_buddy_icon_uncache(PurpleBuddy *buddy);
-
-/**
- * Sets the buddy icon's account.
- *
- * @param icon    The buddy icon.
- * @param account The account.
- */
-void purple_buddy_icon_set_account(PurpleBuddyIcon *icon, PurpleAccount *account);
-
-/**
- * Sets the buddy icon's username.
- *
- * @param icon     The buddy icon.
- * @param username The username.
- */
-void purple_buddy_icon_set_username(PurpleBuddyIcon *icon, const char *username);
-
-/**
- * Sets the buddy icon's icon data.
+ * Sets the buddy icon's data.
  *
  * @param icon The buddy icon.
- * @param data The buddy icon data.
- * @param len  The length of the icon data.
+ * @param data The buddy icon data, which the buddy icon code
+ *             takes ownership of and will free.
+ * @param len  The length of the data in @a data.
+ * @param checksum  A protocol checksum from the prpl or @c NULL.
  */
-void purple_buddy_icon_set_data(PurpleBuddyIcon *icon, void *data, size_t len);
-
-/**
- * Sets the buddy icon's path.
- *
- * @param icon The buddy icon.
- * @param path The buddy icon's non-cached path.
- */
-void purple_buddy_icon_set_path(PurpleBuddyIcon *icon, const gchar *path);
+void
+purple_buddy_icon_set_data(PurpleBuddyIcon *icon, guchar *data,
+                           size_t len, const char *checksum);
 
 /**
  * Returns the buddy icon's account.
@@ -169,32 +119,52 @@
 const char *purple_buddy_icon_get_username(const PurpleBuddyIcon *icon);
 
 /**
+ * Returns the buddy icon's checksum.
+ *
+ * This function is really only for prpl use.
+ *
+ * @param icon The buddy icon.
+ *
+ * @return The checksum.
+ */
+const char *purple_buddy_icon_get_checksum(const PurpleBuddyIcon *icon);
+
+/**
  * Returns the buddy icon's data.
  *
  * @param icon The buddy icon.
- * @param len  The returned icon length.
+ * @param len  If not @c NULL, the length of the icon data returned will be
+ *             set in the location pointed to by this.
  *
- * @return The icon data.
+ * @return A pointer to the icon data.
  */
-const guchar *purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len);
-
-/**
- * Returns the buddy icon's path.
- *
- * @param icon The buddy icon.
- *
- * @return The buddy icon's non-cached path.
- */
-const gchar *purple_buddy_icon_get_path(PurpleBuddyIcon *icon);
+gconstpointer purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len);
 
 /**
  * Returns an extension corresponding to the buddy icon's file type.
  *
  * @param icon The buddy icon.
  *
- * @return The icon's extension.
+ * @return The icon's extension, "icon" if unknown, or @c NULL if
+ *         the image data has disappeared.
  */
-const char *purple_buddy_icon_get_type(const PurpleBuddyIcon *icon);
+const char *purple_buddy_icon_get_extension(const PurpleBuddyIcon *icon);
+
+/**
+ * Returns a full path to an icon.
+ *
+ * If the icon has data and the file exists in the cache, this will return
+ * a full path to the cache file.
+ *
+ * In general, it is not appropriate to be poking in the icon cache
+ * directly.  If you find yourself wanting to use this function, think
+ * very long and hard about it, and then don't.
+ *
+ * @param icon The buddy icon
+ *
+ * @return A full path to the file, or @c NULL under various conditions.
+ */
+char *purple_buddy_icon_get_full_path(PurpleBuddyIcon *icon);
 
 /*@}*/
 
@@ -208,13 +178,30 @@
  *
  * @param account   The account the user is on.
  * @param username  The username of the user.
- * @param icon_data The icon data.
+ * @param icon_data The buddy icon data, which the buddy icon code
+ *                  takes ownership of and will free.
  * @param icon_len  The length of the icon data.
+ * @param checksum  A protocol checksum from the prpl or @c NULL.
  *
  * @return The buddy icon set, or NULL if no icon was set.
  */
-void purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username,
-									void *icon_data, size_t icon_len);
+void
+purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username,
+                                void *icon_data, size_t icon_len,
+                                const char *checksum);
+
+/**
+ * Returns the checksum for the buddy icon of a specified buddy.
+ *
+ * This avoids loading the icon image data from the cache if it's
+ * not already loaded for some other reason.
+ *
+ * @param buddy The buddy
+ *
+ * @return The checksum.
+ */
+const char *
+purple_buddy_icons_get_checksum_for_user(PurpleBuddy *buddy);
 
 /**
  * Returns the buddy icon information for a user.
@@ -224,8 +211,90 @@
  *
  * @return The icon data if found, or @c NULL if not found.
  */
-PurpleBuddyIcon *purple_buddy_icons_find(PurpleAccount *account,
-									 const char *username);
+PurpleBuddyIcon *
+purple_buddy_icons_find(PurpleAccount *account, const char *username);
+
+/**
+ * Returns a boolean indicating if a given contact has a custom buddy icon.
+ *
+ * @param contact The contact
+ *
+ * @return A boolean indicating if @a contact has a custom buddy icon.
+ */
+gboolean
+purple_buddy_icons_has_custom_icon(PurpleContact *contact);
+
+/**
+ * Returns the buddy icon image for an account.
+ *
+ * The caller owns a reference to the image in the store, and must dereference
+ * the image with purple_imgstore_unref() for it to be freed.
+ *
+ * This function deals with loading the icon from the cache, if
+ * needed, so it should be called in any case where you want the
+ * appropriate icon.
+ *
+ * @param account The account
+ *
+ * @return The account's buddy icon image.
+ */
+PurpleStoredImage *
+purple_buddy_icons_find_account_icon(PurpleAccount *account);
+
+/**
+ * Sets a buddy icon for an account.
+ *
+ * This function will deal with saving a record of the icon,
+ * caching the data, etc.
+ *
+ * @param account   The account for which to set a custom icon.
+ * @param icon_data The image data of the icon, which the
+ *                  buddy icon code will free.
+ * @param icon_len  The length of the data in @a icon_data.
+ *
+ * @return The icon that was set.  The caller does NOT own
+ *         a reference to this, and must call purple_imgstore_ref()
+ *         if it wants one.
+ */
+PurpleStoredImage *
+purple_buddy_icons_set_account_icon(PurpleAccount *account,
+                                    guchar *icon_data, size_t icon_len);
+
+/**
+ * Returns the custom buddy icon image for a contact.
+ *
+ * The caller owns a reference to the image in the store, and must dereference
+ * the image with purple_imgstore_unref() for it to be freed.
+ *
+ * This function deals with loading the icon from the cache, if
+ * needed, so it should be called in any case where you want the
+ * appropriate icon.
+ *
+ * @param contact The contact
+ *
+ * @return The custom buddy icon image.
+ */
+PurpleStoredImage *
+purple_buddy_icons_find_custom_icon(PurpleContact *contact);
+
+/**
+ * Sets a custom buddy icon for a user.
+ *
+ * This function will deal with saving a record of the icon,
+ * caching the data, etc.
+ *
+ * @param contact   The contact for which to set a custom icon.
+ * @param icon_data The image data of the icon, which the
+ *                  buddy icon code will free.
+ * @param icon_len  The length of the data in @a icon_data.
+ *
+ * @return The icon that was set.  The caller does NOT own
+ *         a reference to this, and must call purple_imgstore_ref()
+ *         if it wants one.
+ */
+PurpleStoredImage *
+purple_buddy_icons_set_custom_icon(PurpleContact *contact,
+                                   guchar *icon_data, size_t icon_len);
 
 /**
  * Sets whether or not buddy icon caching is enabled.
@@ -263,18 +332,6 @@
 const char *purple_buddy_icons_get_cache_dir(void);
 
 /**
- * Takes a buddy icon and returns a full path.
- *
- * If @a icon is a full path to an existing file, a copy of
- * @a icon is returned. Otherwise, a newly allocated string
- * consiting of purple_buddy_icons_get_cache_dir() + @a icon is
- * returned.
- *
- * @return The full path for an icon.
- */
-char *purple_buddy_icons_get_full_path(const char *icon);
-
-/**
  * Returns the buddy icon subsystem handle.
  *
  * @return The subsystem handle.
--- a/libpurple/connection.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/connection.c	Sat Apr 28 18:32:47 2007 +0000
@@ -284,7 +284,7 @@
 		/* Set the time the account came online */
 		purple_presence_set_login_time(presence, time(NULL));
 
-		if (purple_prefs_get_bool("/core/logging/log_system"))
+		if (purple_prefs_get_bool("/purple/logging/log_system"))
 		{
 			PurpleLog *log = purple_account_get_log(account, TRUE);
 
@@ -314,7 +314,7 @@
 	else if (gc->state == PURPLE_DISCONNECTED) {
 		PurpleAccount *account = purple_connection_get_account(gc);
 
-		if (purple_prefs_get_bool("/core/logging/log_system"))
+		if (purple_prefs_get_bool("/purple/logging/log_system"))
 		{
 			PurpleLog *log = purple_account_get_log(account, FALSE);
 
--- a/libpurple/conversation.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/conversation.c	Sat Apr 28 18:32:47 2007 +0000
@@ -281,7 +281,7 @@
 		if ((icon = purple_buddy_icons_find(account, name)))
 			purple_conv_im_set_icon(conv->u.im, icon);
 
-		if (purple_prefs_get_bool("/core/logging/log_ims"))
+		if (purple_prefs_get_bool("/purple/logging/log_ims"))
 		{
 			purple_conversation_set_logging(conv, TRUE);
 			open_log(conv);
@@ -303,7 +303,7 @@
 			purple_conv_chat_set_nick(conv->u.chat,
 									purple_account_get_username(account));
 
-		if (purple_prefs_get_bool("/core/logging/log_chats"))
+		if (purple_prefs_get_bool("/purple/logging/log_chats"))
 		{
 			purple_conversation_set_logging(conv, TRUE);
 			open_log(conv);
@@ -352,7 +352,7 @@
 
 		if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
 		{
-			if (purple_prefs_get_bool("/core/conversations/im/send_typing"))
+			if (purple_prefs_get_bool("/purple/conversations/im/send_typing"))
 				serv_send_typing(gc, name, PURPLE_NOT_TYPING);
 
 			if (gc && prpl_info->convo_closed != NULL)
@@ -425,8 +425,7 @@
 		purple_conv_im_stop_typing_timeout(conv->u.im);
 		purple_conv_im_stop_send_typed_timeout(conv->u.im);
 
-		if (conv->u.im->icon != NULL)
-			purple_buddy_icon_unref(conv->u.im->icon);
+		purple_buddy_icon_unref(conv->u.im->icon);
 		conv->u.im->icon = NULL;
 
 		PURPLE_DBUS_UNREGISTER_POINTER(conv->u.im);
@@ -941,8 +940,7 @@
 
 	if (im->icon != icon)
 	{
-		if (im->icon != NULL)
-			purple_buddy_icon_unref(im->icon);
+		purple_buddy_icon_unref(im->icon);
 
 		im->icon = (icon == NULL ? NULL : purple_buddy_icon_ref(icon));
 	}
@@ -1159,9 +1157,11 @@
 	data[0] = conv;
 	data[1] = (gpointer)message;
 
-	purple_request_action(conv, NULL, _("Send Message"), text, 0, data, 2,
-	                    _("_Send Message"), G_CALLBACK(purple_conv_send_confirm_cb),
-	                    _("Cancel"), NULL);
+	purple_request_action(conv, NULL, _("Send Message"), text, 0,
+						  purple_conversation_get_account(conv), NULL, conv,
+						  data, 2,
+						  _("_Send Message"), G_CALLBACK(purple_conv_send_confirm_cb),
+						  _("Cancel"), NULL);
 }
 
 void
@@ -1665,7 +1665,7 @@
 	if (is_me)
 		purple_conv_chat_set_nick(chat, new_user);
 
-	if (purple_prefs_get_bool("/core/conversations/chat/show_nick_change") &&
+	if (purple_prefs_get_bool("/purple/conversations/chat/show_nick_change") &&
 	    !purple_conv_chat_is_user_ignored(chat, new_user)) {
 
 		if (is_me) {
@@ -2003,15 +2003,15 @@
 	 **********************************************************************/
 
 	/* Conversations */
-	purple_prefs_add_none("/core/conversations");
+	purple_prefs_add_none("/purple/conversations");
 
 	/* Conversations -> Chat */
-	purple_prefs_add_none("/core/conversations/chat");
-	purple_prefs_add_bool("/core/conversations/chat/show_nick_change", TRUE);
+	purple_prefs_add_none("/purple/conversations/chat");
+	purple_prefs_add_bool("/purple/conversations/chat/show_nick_change", TRUE);
 
 	/* Conversations -> IM */
-	purple_prefs_add_none("/core/conversations/im");
-	purple_prefs_add_bool("/core/conversations/im/send_typing", TRUE);
+	purple_prefs_add_none("/purple/conversations/im");
+	purple_prefs_add_bool("/purple/conversations/im/send_typing", TRUE);
 
 
 	/**********************************************************************
--- a/libpurple/core.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/core.c	Sat Apr 28 18:32:47 2007 +0000
@@ -31,6 +31,7 @@
 #include "dnsquery.h"
 #include "ft.h"
 #include "idle.h"
+#include "imgstore.h"
 #include "network.h"
 #include "notify.h"
 #include "plugin.h"
@@ -44,6 +45,7 @@
 #include "sslconn.h"
 #include "status.h"
 #include "stun.h"
+#include "util.h"
 
 #ifdef HAVE_DBUS
 #  include "dbus-server.h"
@@ -114,6 +116,8 @@
 	purple_dbus_init();
 #endif
 
+	purple_ciphers_init();
+
 	/* Initialize all static protocols. */
 	static_proto_init();
 
@@ -123,13 +127,15 @@
 	purple_plugins_init();
 	purple_plugins_probe(G_MODULE_SUFFIX);
 
+	/* The buddy icon code uses the imgstore, so init it early. */
+	purple_imgstore_init();
+
 	/* Accounts use status and buddy icons, so initialize these before accounts */
 	purple_status_init();
 	purple_buddy_icons_init();
 
 	purple_accounts_init();
 	purple_savedstatuses_init();
-	purple_ciphers_init();
 	purple_notify_init();
 	purple_connections_init();
 	purple_conversations_init();
@@ -189,6 +195,7 @@
 	purple_xfers_uninit();
 	purple_proxy_uninit();
 	purple_dnsquery_uninit();
+	purple_imgstore_uninit();
 
 	purple_debug_info("main", "Unloading all plugins\n");
 	purple_plugins_destroy_all();
@@ -268,3 +275,376 @@
 {
 	return _ops;
 }
+
+static gboolean
+move_and_symlink_dir(const char *path, const char *basename, const char *old_base, const char *new_base, const char *relative)
+{
+	char *new_name = g_build_filename(new_base, basename, NULL);
+#ifndef _WIN32
+	char *old_name;
+#endif
+	if (g_rename(path, new_name))
+	{
+		purple_debug_error("core", "Error renaming %s to %s: %s\n",
+		                   path, new_name, strerror(errno));
+		g_free(new_name);
+		return FALSE;
+	}
+	g_free(new_name);
+
+#ifndef _WIN32
+	/* NOTE: This new_name is relative. */
+	new_name = g_build_filename(relative, basename, NULL);
+	old_name = g_build_filename(old_base, basename, NULL);
+	if (symlink(new_name, old_name))
+	{
+		purple_debug_warning("core", "Error symlinking %s to %s: %s\n",
+		                     old_name, new_name, strerror(errno));
+	}
+	g_free(old_name);
+	g_free(new_name);
+#endif
+
+	return TRUE;
+}
+
+gboolean
+purple_core_migrate(void)
+{
+	const char *user_dir = purple_user_dir();
+	char *old_user_dir = g_strconcat(purple_home_dir(),
+	                                 G_DIR_SEPARATOR_S ".gaim", NULL);
+	char *status_file;
+	FILE *fp;
+	GDir *dir;
+	GError *err;
+	const char *entry;
+#ifndef _WIN32
+	char *logs_dir;
+#endif
+	char *old_icons_dir;
+
+	if (!g_file_test(old_user_dir, G_FILE_TEST_EXISTS))
+	{
+		/* ~/.gaim doesn't exist, so there's nothing to migrate. */
+		g_free(old_user_dir);
+		return TRUE;
+	}
+
+	status_file = g_strconcat(user_dir, G_DIR_SEPARATOR_S "migrating", NULL);
+
+	if (g_file_test(user_dir, G_FILE_TEST_EXISTS))
+	{
+		/* If we're here, we have both ~/.gaim and .purple. */
+
+		if (!g_file_test(status_file, G_FILE_TEST_EXISTS))
+		{
+			/* There's no "migrating" status file,
+			 * so ~/.purple is all up to date. */
+			g_free(status_file);
+			g_free(old_user_dir);
+			return TRUE;
+		}
+	}
+
+	/* If we're here, it's time to migrate from ~/.gaim to ~/.purple. */
+
+        /* Ensure the user directory exists */
+	if (!g_file_test(user_dir, G_FILE_TEST_IS_DIR))
+	{
+		if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1)
+		{
+			purple_debug_error("core", "Error creating directory %s: %s\n",
+			                   user_dir, strerror(errno));
+			g_free(status_file);
+			g_free(old_user_dir);
+			return FALSE;
+		}
+	}
+
+	/* This writes ~/.purple/migrating, which allows us to detect
+	 * incomplete migrations and properly retry. */
+	if (!(fp = g_fopen(status_file, "w")))
+	{
+		purple_debug_error("core", "Error opening file %s for writing: %s\n",
+		                   status_file, strerror(errno));
+		g_free(status_file);
+		g_free(old_user_dir);
+		return FALSE;
+	}
+	fclose(fp);
+
+	/* Open ~/.gaim so we can loop over its contents. */
+	err = NULL;
+	if (!(dir = g_dir_open(old_user_dir, 0, &err)))
+	{
+		purple_debug_error("core", "Error opening directory %s: %s\n",
+		                   status_file,
+		                   (err ? err->message : "Unknown error"));
+		if (err)
+			g_error_free(err);
+		g_free(status_file);
+		g_free(old_user_dir);
+		return FALSE;
+	}
+
+	/* Loop over the contents of ~/.gaim */
+	while ((entry = g_dir_read_name(dir)))
+	{
+		char *name = g_build_filename(old_user_dir, entry, NULL);
+
+#ifndef _WIN32
+		/* Deal with symlinks... */
+		if (g_file_test(name, G_FILE_TEST_IS_SYMLINK))
+		{
+			/* We're only going to duplicate a logs symlink. */
+			if (!strcmp(entry, "logs"))
+			{
+				char buf[MAXPATHLEN];
+
+				if (readlink(name, buf, sizeof(buf) - 1) == -1)
+				{
+					purple_debug_error("core", "Error reading symlink %s: %s\n",
+					                   name, strerror(errno));
+					g_free(name);
+					g_dir_close(dir);
+					g_free(status_file);
+					g_free(old_user_dir);
+					return FALSE;
+				}
+				buf[sizeof(buf) - 1] = '\0';
+
+				logs_dir = g_strconcat(user_dir, G_DIR_SEPARATOR_S "logs", NULL);
+
+				if (!strcmp(buf, "../.purple/logs") || !strcmp(buf, logs_dir))
+				{
+					/* If the symlink points to the new directory, we're
+					 * likely just trying again after a failed migration,
+					 * so there's no need to fail here. */
+					g_free(logs_dir);
+					continue;
+				}
+
+				/* In case we are trying again after a failed migration, we need
+				 * to unlink any existing symlink.  If it's a directory, this
+				 * will fail, and so will the symlink below, which is good
+				 * because the user should sort things out. */
+				g_unlink(logs_dir);
+
+				/* Relative links will most likely still be
+				 * valid from ~/.purple, though not it's not
+				 * guaranteed.  Oh well. */
+				if (symlink(buf, logs_dir))
+				{
+					purple_debug_error("core", "Error symlinking %s to %s: %s\n",
+					                   logs_dir, buf, strerror(errno));
+					g_free(name);
+					g_free(logs_dir);
+					g_dir_close(dir);
+					g_free(status_file);
+					g_free(old_user_dir);
+					return FALSE;
+				}
+
+				g_free(logs_dir);
+				continue;
+			}
+
+			/* Ignore all other symlinks. */
+			continue;
+		}
+#endif
+
+		/* Deal with directories... */
+		if (g_file_test(name, G_FILE_TEST_IS_DIR))
+		{
+			if (!strcmp(entry, "icons"))
+			{
+				/* This is a special case for the Album plugin, which
+				 * stores data in the icons folder.  We're not copying
+				 * the icons directory over because previous bugs
+				 * meant that it filled up with junk for many users.
+				 * This is a great time to purge it. */
+
+				GDir *icons_dir;
+				char *new_icons_dir;
+				const char *icons_entry;
+
+				err = NULL;
+				if (!(icons_dir = g_dir_open(name, 0, &err)))
+				{
+					purple_debug_error("core", "Error opening directory %s: %s\n",
+					                   name,
+					                   (err ? err->message : "Unknown error"));
+					if (err)
+						g_error_free(err);
+					g_free(name);
+					g_dir_close(dir);
+					g_free(status_file);
+					g_free(old_user_dir);
+					return FALSE;
+				}
+
+				new_icons_dir = g_build_filename(user_dir, "icons", NULL);
+			        /* Ensure the new icon directory exists */
+				if (!g_file_test(new_icons_dir, G_FILE_TEST_IS_DIR))
+				{
+					if (g_mkdir(new_icons_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1)
+					{
+						purple_debug_error("core", "Error creating directory %s: %s\n",
+						                   new_icons_dir, strerror(errno));
+						g_free(new_icons_dir);
+						g_dir_close(icons_dir);
+						g_free(name);
+						g_dir_close(dir);
+						g_free(status_file);
+						g_free(old_user_dir);
+						return FALSE;
+					}
+				}
+
+				while ((icons_entry = g_dir_read_name(icons_dir)))
+				{
+					char *icons_name = g_build_filename(name, icons_entry, NULL);
+
+					if (g_file_test(icons_name, G_FILE_TEST_IS_DIR))
+					{
+						if (!move_and_symlink_dir(icons_name, icons_entry,
+						                          name, new_icons_dir, "../../.purple/icons"))
+						{
+							g_free(icons_name);
+							g_free(new_icons_dir);
+							g_dir_close(icons_dir);
+							g_free(name);
+							g_dir_close(dir);
+							g_free(status_file);
+							g_free(old_user_dir);
+							return FALSE;
+						}
+					}
+					g_free(icons_name);
+				}
+
+				g_dir_close(icons_dir);
+			}
+			else if (!strcmp(entry, "plugins"))
+			{
+				/* Do nothing, because we broke plugin compatibility.
+				 * This means that the plugins directory gets left behind. */
+			}
+			else
+			{
+				/* All other directories are moved and symlinked. */
+				if (!move_and_symlink_dir(name, entry, old_user_dir, user_dir, "../.purple"))
+				{
+					g_free(name);
+					g_dir_close(dir);
+					g_free(status_file);
+					g_free(old_user_dir);
+					return FALSE;
+				}
+			}
+		}
+		else if (g_file_test(name, G_FILE_TEST_IS_REGULAR))
+		{
+			/* Regular files are copied. */
+
+			char *new_name;
+			FILE *new_file;
+
+			if (!(fp = g_fopen(name, "rb")))
+			{
+				purple_debug_error("core", "Error opening file %s for reading: %s\n",
+				                   name, strerror(errno));
+				g_free(name);
+				g_dir_close(dir);
+				g_free(status_file);
+				g_free(old_user_dir);
+				return FALSE;
+			}
+
+			new_name = g_build_filename(user_dir, entry, NULL);
+			if (!(new_file = g_fopen(new_name, "wb")))
+			{
+				purple_debug_error("core", "Error opening file %s for writing: %s\n",
+				                   new_name, strerror(errno));
+				fclose(fp);
+				g_free(new_name);
+				g_free(name);
+				g_dir_close(dir);
+				g_free(status_file);
+				g_free(old_user_dir);
+				return FALSE;
+			}
+
+			while (!feof(fp))
+			{
+				unsigned char buf[256];
+				size_t size;
+
+				size = fread(buf, 1, sizeof(buf), fp);
+				if (size != sizeof(buf) && !feof(fp))
+				{
+					purple_debug_error("core", "Error reading %s: %s\n",
+					                   name, strerror(errno));
+					fclose(new_file);
+					fclose(fp);
+					g_free(new_name);
+					g_free(name);
+					g_dir_close(dir);
+					g_free(status_file);
+					g_free(old_user_dir);
+					return FALSE;
+				}
+
+				if (!fwrite(buf, size, 1, new_file) && ferror(new_file) != 0)
+				{
+					purple_debug_error("core", "Error writing %s: %s\n",
+					                   new_name, strerror(errno));
+					fclose(new_file);
+					fclose(fp);
+					g_free(new_name);
+					g_free(name);
+					g_dir_close(dir);
+					g_free(status_file);
+					g_free(old_user_dir);
+					return FALSE;
+				}
+			}
+
+			if (fclose(new_file))
+			{
+				purple_debug_error("core", "Error writing: %s: %s\n",
+				                   new_name, strerror(errno));
+			}
+			if (fclose(fp))
+			{
+				purple_debug_warning("core", "Error closing %s: %s\n",
+				                     name, strerror(errno));
+			}
+			g_free(new_name);
+		}
+		else
+			purple_debug_warning("core", "Not a regular file or directory: %s\n", name);
+
+		g_free(name);
+	}
+
+	/* The migration was successful, so delete the status file. */
+	if (g_unlink(status_file))
+	{
+		purple_debug_error("core", "Error unlinking file %s: %s\n",
+		                   status_file, strerror(errno));
+		g_free(status_file);
+		return FALSE;
+	}
+
+	old_icons_dir = g_build_filename(old_user_dir, "icons", NULL);
+	purple_buddy_icon_set_old_icons_dir(old_icons_dir);
+	g_free(old_icons_dir);
+
+	g_free(old_user_dir);
+
+	g_free(status_file);
+	return TRUE;
+}
--- a/libpurple/core.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/core.h	Sat Apr 28 18:32:47 2007 +0000
@@ -106,6 +106,17 @@
  */
 PurpleCoreUiOps *purple_core_get_ui_ops(void);
 
+/**
+ * Migrates from .gaim to .purple.
+ *
+ * UIs MUST NOT call this if they have been told to use a custom
+ * user directory.
+ *
+ * @return A boolean indicating success or migration failure. On failure,
+ *         the application must display an error to the user and then exit.
+ */
+gboolean purple_core_migrate(void);
+
 #ifdef __cplusplus
 }
 #endif
--- a/libpurple/debug.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/debug.c	Sat Apr 28 18:32:47 2007 +0000
@@ -63,8 +63,8 @@
 		gchar *ts_s;
 
 		if ((category != NULL) &&
-			(purple_prefs_exists("/core/debug/timestamps")) &&
-			(purple_prefs_get_bool("/core/debug/timestamps"))) {
+			(purple_prefs_exists("/purple/debug/timestamps")) &&
+			(purple_prefs_get_bool("/purple/debug/timestamps"))) {
 			const char *mdate;
 
 			time_t mtime = time(NULL);
@@ -189,11 +189,11 @@
 void
 purple_debug_init(void)
 {
-	purple_prefs_add_none("/core/debug");
+	purple_prefs_add_none("/purple/debug");
 
 	/*
 	 * This pref is currently used by both the console
 	 * output and the debug window output.
 	 */
-	purple_prefs_add_bool("/core/debug/timestamps", FALSE);
+	purple_prefs_add_bool("/purple/debug/timestamps", FALSE);
 }
--- a/libpurple/example/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/example/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -14,7 +14,7 @@
 	-DSTANDALONE \
 	-DBR_PTHREADS=0 \
 	-DDATADIR=\"$(datadir)\" \
-	-DLIBDIR=\"$(libdir)/libpurple/\" \
+	-DLIBDIR=\"$(libdir)/purple-$(PURPLE_MAJOR_VERSION)/\" \
 	-DLOCALEDIR=\"$(datadir)/locale\" \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	-I$(top_srcdir)/libpurple/ \
--- a/libpurple/ft.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/ft.c	Sat Apr 28 18:32:47 2007 +0000
@@ -307,7 +307,9 @@
 	purple_request_file(xfer, NULL, purple_xfer_get_filename(xfer),
 					  (purple_xfer_get_type(xfer) == PURPLE_XFER_RECEIVE),
 					  G_CALLBACK(purple_xfer_choose_file_ok_cb),
-					  G_CALLBACK(purple_xfer_choose_file_cancel_cb), xfer);
+					  G_CALLBACK(purple_xfer_choose_file_cancel_cb),
+					  purple_xfer_get_account(xfer), xfer->who, NULL,
+					  xfer);
 
 	return 0;
 }
@@ -353,7 +355,9 @@
 								 xfer->who, xfer->message, 0, time(NULL));
 
 		purple_request_accept_cancel(xfer, NULL, buf, NULL,
-								  PURPLE_DEFAULT_ACTION_NONE, xfer,
+								  PURPLE_DEFAULT_ACTION_NONE,
+								  xfer->account, xfer->who, NULL,
+								  xfer,
 								  G_CALLBACK(purple_xfer_choose_file),
 								  G_CALLBACK(cancel_recv_cb));
 
@@ -394,7 +398,9 @@
 					   purple_xfer_get_remote_ip(xfer),
 					   purple_xfer_get_remote_port(xfer));
 	purple_request_accept_cancel(xfer, NULL, buf, buf2,
-							   PURPLE_DEFAULT_ACTION_NONE, xfer,
+							   PURPLE_DEFAULT_ACTION_NONE,
+							   xfer->account, xfer->who, NULL,
+							   xfer,
 							   G_CALLBACK(ask_accept_ok),
 							   G_CALLBACK(ask_accept_cancel));
 	g_free(buf);
--- a/libpurple/gaim-compat.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/gaim-compat.h	Sat Apr 28 18:32:47 2007 +0000
@@ -27,6 +27,8 @@
 #ifndef _GAIM_COMPAT_H_
 #define _GAIM_COMPAT_H_
 
+#include <glib.h>
+
 /* from account.h */
 #define GaimAccountUiOps PurpleAccountUiOps
 #define GaimAccount PurpleAccount
@@ -51,7 +53,6 @@
 #define gaim_account_set_password            purple_account_set_password
 #define gaim_account_set_alias               purple_account_set_alias
 #define gaim_account_set_user_info           purple_account_set_user_info
-#define gaim_account_set_buddy_icon          purple_account_set_buddy_icon
 #define gaim_account_set_buddy_icon_path     purple_account_set_buddy_icon_path
 #define gaim_account_set_protocol_id         purple_account_set_protocol_id
 #define gaim_account_set_connection          purple_account_set_connection
@@ -81,7 +82,6 @@
 #define gaim_account_get_password           purple_account_get_password
 #define gaim_account_get_alias              purple_account_get_alias
 #define gaim_account_get_user_info          purple_account_get_user_info
-#define gaim_account_get_buddy_icon         purple_account_get_buddy_icon
 #define gaim_account_get_buddy_icon_path    purple_account_get_buddy_icon_path
 #define gaim_account_get_protocol_id        purple_account_get_protocol_id
 #define gaim_account_get_protocol_name      purple_account_get_protocol_name
@@ -338,32 +338,27 @@
 
 #define GaimBuddyIcon  PurpleBuddyIcon
 
-#define gaim_buddy_icon_new      purple_buddy_icon_new
-#define gaim_buddy_icon_destroy  purple_buddy_icon_destroy
+#define gaim_buddy_icon_new(account, username, icon_data, icon_len)\
+        purple_buddy_icon_new(account, username, g_memdup(icon_data, icon_len), icon_len)
 #define gaim_buddy_icon_ref      purple_buddy_icon_ref
 #define gaim_buddy_icon_unref    purple_buddy_icon_unref
 #define gaim_buddy_icon_update   purple_buddy_icon_update
-#define gaim_buddy_icon_cache    purple_buddy_icon_cache
-#define gaim_buddy_icon_uncache  purple_buddy_icon_uncache
-
-#define gaim_buddy_icon_set_account   purple_buddy_icon_set_account
-#define gaim_buddy_icon_set_username  purple_buddy_icon_set_username
-#define gaim_buddy_icon_set_data      purple_buddy_icon_set_data
-#define gaim_buddy_icon_set_path      purple_buddy_icon_set_path
+
+#define gaim_buddy_icon_set_data(icon, data, len) \
+        purple_buddy_icon_set_protocol_data(icon, g_memdup(data, len), len, NULL);
 
 #define gaim_buddy_icon_get_account   purple_buddy_icon_get_account
 #define gaim_buddy_icon_get_username  purple_buddy_icon_get_username
 #define gaim_buddy_icon_get_data      purple_buddy_icon_get_data
-#define gaim_buddy_icon_get_path      purple_buddy_icon_get_path
-#define gaim_buddy_icon_get_type      purple_buddy_icon_get_type
-
-#define gaim_buddy_icons_set_for_user   purple_buddy_icons_set_for_user
+#define gaim_buddy_icon_get_type      purple_buddy_icon_get_extension
+
+#define gaim_buddy_icons_set_for_user(icon, data, len) \
+        purple_buddy_icons_set_for_user(icon, g_memdup(data, len), len)
 #define gaim_buddy_icons_find           purple_buddy_icons_find
 #define gaim_buddy_icons_set_caching    purple_buddy_icons_set_caching
 #define gaim_buddy_icons_is_caching     purple_buddy_icons_is_caching
 #define gaim_buddy_icons_set_cache_dir  purple_buddy_icons_set_cache_dir
 #define gaim_buddy_icons_get_cache_dir  purple_buddy_icons_get_cache_dir
-#define gaim_buddy_icons_get_full_path  purple_buddy_icons_get_full_path
 #define gaim_buddy_icons_get_handle     purple_buddy_icons_get_handle
 
 #define gaim_buddy_icons_init    purple_buddy_icons_init
@@ -949,7 +944,6 @@
 
 /* from gaim-client.h */
 
-/* XXX: should this be purple_init, or pidgin_init */
 #define gaim_init  purple_init
 
 /* from idle.h */
@@ -967,13 +961,13 @@
 
 #define GaimStoredImage  PurpleStoredImage
 
-#define gaim_imgstore_add           purple_imgstore_add
-#define gaim_imgstore_get           purple_imgstore_get
+#define gaim_imgstore_add(data, size, filename) purple_imgstore_add_with_id(g_memdup(data, size), size, filename)
+#define gaim_imgstore_get           purple_imgstore_find_by_id
 #define gaim_imgstore_get_data      purple_imgstore_get_data
 #define gaim_imgstore_get_size      purple_imgstore_get_size
 #define gaim_imgstore_get_filename  purple_imgstore_get_filename
-#define gaim_imgstore_ref           purple_imgstore_ref
-#define gaim_imgstore_unref         purple_imgstore_unref
+#define gaim_imgstore_ref           purple_imgstore_ref_by_id
+#define gaim_imgstore_unref         purple_imgstore_unref_by_id
 
 
 /* from log.h */
@@ -2237,7 +2231,7 @@
 #define gaim_value_new_outgoing       purple_value_new_outgoing
 #define gaim_value_destroy            purple_value_destroy
 #define gaim_value_dup                purple_value_dup
-#define gaim_value_get_type           purple_value_get_type
+#define gaim_value_purple_buddy_icon_get_extensionget_type           purple_value_get_type
 #define gaim_value_get_subtype        purple_value_get_subtype
 #define gaim_value_get_specific_type  purple_value_get_specific_type
 #define gaim_value_is_outgoing        purple_value_is_outgoing
--- a/libpurple/idle.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/idle.c	Sat Apr 28 18:32:47 2007 +0000
@@ -121,7 +121,7 @@
 
 	purple_signal_emit(purple_blist_get_handle(), "update-idle");
 
-	idle_reporting = purple_prefs_get_string("/core/away/idle_reporting");
+	idle_reporting = purple_prefs_get_string("/purple/away/idle_reporting");
 	report_idle = TRUE;
 	if (!strcmp(idle_reporting, "system") &&
 		(idle_ui_ops != NULL) && (idle_ui_ops->get_time_idle != NULL))
@@ -142,7 +142,7 @@
 	}
 
 	/* Auto-away stuff */
-	auto_away = purple_prefs_get_bool("/core/away/away_when_idle");
+	auto_away = purple_prefs_get_bool("/purple/away/away_when_idle");
 
 	/* If we're not reporting idle, we can still do auto-away.
 	 * First try "system" and if that isn't possible, use "purple" */
@@ -154,11 +154,11 @@
 	}
 
 	if (auto_away &&
-		(time_idle > (60 * purple_prefs_get_int("/core/away/mins_before_away"))))
+		(time_idle > (60 * purple_prefs_get_int("/purple/away/mins_before_away"))))
 	{
 		purple_savedstatus_set_idleaway(TRUE);
 	}
-	else if (time_idle < 60 * purple_prefs_get_int("/core/away/mins_before_away"))
+	else if (time_idle < 60 * purple_prefs_get_int("/purple/away/mins_before_away"))
 	{
 		purple_savedstatus_set_idleaway(FALSE);
 	}
--- a/libpurple/imgstore.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/imgstore.c	Sat Apr 28 18:32:47 2007 +0000
@@ -27,140 +27,171 @@
 #include <glib.h>
 #include "debug.h"
 #include "imgstore.h"
+#include "util.h"
 
-static GSList *imgstore = NULL;
+static GHashTable *imgstore;
 static int nextid = 0;
 
 /**
  * Stored image
  *
- * Represents a single IM image awaiting display and/or transmission.
- * Now that this type is basicly private too, these two structs could
- * probably be combined.
+ * NOTE: purple_imgstore_add() creates these without zeroing the memory, so
+ * NOTE: make sure to update that function when adding members.
  */
 struct _PurpleStoredImage
 {
-	char *data;		/**< The image data.		*/
+	int id;
+	guint8 refcount;
 	size_t size;		/**< The image data's size.	*/
 	char *filename;		/**< The filename (for the UI)	*/
+	gpointer data;		/**< The image data.		*/
 };
 
-typedef struct
+PurpleStoredImage *
+purple_imgstore_add(gpointer data, size_t size, const char *filename)
 {
-	int id;
-	int refcount;
-	PurpleStoredImage *img;
-} PurpleStoredImagePriv;
-
-/* private functions */
-
-static PurpleStoredImagePriv *purple_imgstore_get_priv(int id) {
-	GSList *tmp = imgstore;
-	PurpleStoredImagePriv *priv = NULL;
-
-	g_return_val_if_fail(id > 0, NULL);
-
-	while (tmp && !priv) {
-		PurpleStoredImagePriv *tmp_priv = tmp->data;
-
-		if (tmp_priv->id == id)
-			priv = tmp_priv;
-
-		tmp = tmp->next;
-	}
-
-	if (!priv)
-		purple_debug(PURPLE_DEBUG_ERROR, "imgstore", "failed to find image id %d\n", id);
-
-	return priv;
-}
-
-static void purple_imgstore_free_priv(PurpleStoredImagePriv *priv) {
-	PurpleStoredImage *img = NULL;
-
-	g_return_if_fail(priv != NULL);
-
-	img = priv->img;
-	if (img) {
-		g_free(img->data);
-		g_free(img->filename);
-		g_free(img);
-	}
-
-	purple_debug(PURPLE_DEBUG_INFO, "imgstore", "freed image id %d\n", priv->id);
-
-	g_free(priv);
-
-	imgstore = g_slist_remove(imgstore, priv);
-}
-
-/* public functions */
-
-int purple_imgstore_add(const void *data, size_t size, const char *filename) {
-	PurpleStoredImagePriv *priv;
 	PurpleStoredImage *img;
 
 	g_return_val_if_fail(data != NULL, 0);
 	g_return_val_if_fail(size > 0, 0);
 
-	img = g_new0(PurpleStoredImage, 1);
-	img->data = g_memdup(data, size);
+	img = g_new(PurpleStoredImage, 1);
+	img->data = data;
 	img->size = size;
 	img->filename = g_strdup(filename);
+	img->refcount = 1;
+	img->id = 0;
 
-	priv = g_new0(PurpleStoredImagePriv, 1);
-	priv->id = ++nextid;
-	priv->refcount = 1;
-	priv->img = img;
+	return img;
+}
+
+int
+purple_imgstore_add_with_id(gpointer data, size_t size, const char *filename)
+{
+	PurpleStoredImage *img = purple_imgstore_add(data, size, filename);
+	img->id = ++nextid;
+
+	g_hash_table_insert(imgstore, &(img->id), img);
 
-	imgstore = g_slist_append(imgstore, priv);
-	purple_debug(PURPLE_DEBUG_INFO, "imgstore", "added image id %d\n", priv->id);
+	return img->id;
+}
 
-	return priv->id;
+PurpleStoredImage *purple_imgstore_find_by_id(int id) {
+	PurpleStoredImage *img = g_hash_table_lookup(imgstore, &id);
+
+	if (img != NULL)
+		purple_debug_misc("imgstore", "retrieved image id %d\n", img->id);
+
+	return img;
 }
 
-PurpleStoredImage *purple_imgstore_get(int id) {
-	PurpleStoredImagePriv *priv = purple_imgstore_get_priv(id);
+gconstpointer purple_imgstore_get_data(PurpleStoredImage *img) {
+	g_return_val_if_fail(img != NULL, NULL);
+
+	return img->data;
+}
 
-	g_return_val_if_fail(priv != NULL, NULL);
+size_t purple_imgstore_get_size(PurpleStoredImage *img)
+{
+	g_return_val_if_fail(img != NULL, 0);
 
-	purple_debug(PURPLE_DEBUG_INFO, "imgstore", "retrieved image id %d\n", priv->id);
-
-	return priv->img;
+	return img->size;
 }
 
-gpointer purple_imgstore_get_data(PurpleStoredImage *i) {
-	return i->data;
+const char *purple_imgstore_get_filename(PurpleStoredImage *img)
+{
+	g_return_val_if_fail(img != NULL, NULL);
+
+	return img->filename;
+}
+
+const char *purple_imgstore_get_extension(PurpleStoredImage *img)
+{
+	g_return_val_if_fail(img != NULL, NULL);
+
+	return purple_util_get_image_extension(img->data, img->size);
+}
+
+void purple_imgstore_ref_by_id(int id)
+{
+	PurpleStoredImage *img = purple_imgstore_find_by_id(id);
+
+	g_return_if_fail(img != NULL);
+
+	purple_imgstore_ref(img);
 }
 
-size_t purple_imgstore_get_size(PurpleStoredImage *i) {
-	return i->size;
+void purple_imgstore_unref_by_id(int id)
+{
+	PurpleStoredImage *img = purple_imgstore_find_by_id(id);
+
+	g_return_if_fail(img != NULL);
+
+	purple_imgstore_unref(img);
 }
 
-const char *purple_imgstore_get_filename(PurpleStoredImage *i) {
-	return i->filename;
+PurpleStoredImage *
+purple_imgstore_ref(PurpleStoredImage *img)
+{
+	g_return_val_if_fail(img != NULL, NULL);
+
+	img->refcount++;
+
+	return img;
 }
 
-void purple_imgstore_ref(int id) {
-	PurpleStoredImagePriv *priv = purple_imgstore_get_priv(id);
+PurpleStoredImage *
+purple_imgstore_unref(PurpleStoredImage *img)
+{
+	if (img == NULL)
+		return NULL;
+
+	g_return_val_if_fail(img->refcount > 0, NULL);
+
+	img->refcount--;
 
-	g_return_if_fail(priv != NULL);
+	if (img->refcount == 0)
+	{
+		purple_signal_emit(purple_imgstore_get_handle(),
+		                   "image-deleting", img);
+		if (img->id)
+			g_hash_table_remove(imgstore, &img->id);
 
-	(priv->refcount)++;
+		g_free(img->data);
+		g_free(img->filename);
+		g_free(img);
+		img = NULL;
+	}
 
-	purple_debug(PURPLE_DEBUG_INFO, "imgstore", "referenced image id %d (count now %d)\n", priv->id, priv->refcount);
+	return img;
 }
 
-void purple_imgstore_unref(int id) {
-	PurpleStoredImagePriv *priv = purple_imgstore_get_priv(id);
+void *
+purple_imgstore_get_handle()
+{
+	static int handle;
 
-	g_return_if_fail(priv != NULL);
-	g_return_if_fail(priv->refcount > 0);
+	return &handle;
+}
+
+void
+purple_imgstore_init()
+{
+	void *handle = purple_imgstore_get_handle();
 
-	(priv->refcount)--;
-
-	purple_debug(PURPLE_DEBUG_INFO, "imgstore", "unreferenced image id %d (count now %d)\n", priv->id, priv->refcount);
+	purple_signal_register(handle, "image-deleting",
+	                       purple_marshal_VOID__POINTER, NULL,
+	                       1,
+	                       purple_value_new(PURPLE_TYPE_SUBTYPE,
+	                                        PURPLE_SUBTYPE_STORED_IMAGE));
 
-	if (priv->refcount == 0)
-		purple_imgstore_free_priv(priv);
+	imgstore = g_hash_table_new(g_int_hash, g_int_equal);
 }
+
+void
+purple_imgstore_uninit()
+{
+	g_hash_table_destroy(imgstore);
+
+	purple_signals_unregister_by_instance(purple_imgstore_get_handle());
+}
--- a/libpurple/imgstore.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/imgstore.h	Sat Apr 28 18:32:47 2007 +0000
@@ -26,6 +26,8 @@
 #ifndef _PURPLE_IMGSTORE_H_
 #define _PURPLE_IMGSTORE_H_
 
+#include <glib.h>
+
 struct _PurpleStoredImage;
 typedef struct _PurpleStoredImage PurpleStoredImage;
 
@@ -34,17 +36,41 @@
 #endif
 
 /**
- * Add an image to the store. The caller owns a reference
- * to the image in the store, and must dereference the image
- * with purple_imgstore_unref for it to be freed.
+ * Add an image to the store.
+ *
+ * The caller owns a reference to the image in the store, and must dereference
+ * the image with purple_imgstore_unref() for it to be freed.
+ *
+ * No ID is allocated when using this function.  If you need to reference the
+ * image by an ID, use purple_imgstore_add_with_id() instead.
+ *
+ * @param data		Pointer to the image data, which the imgstore will take
+ *                      ownership of and free as appropriate.  If you want a
+ *                      copy of the data, make it before calling this function.
+ * @param size		Image data's size.
+ * @param filename	Filename associated with image.
  *
- * @param data		Pointer to the image data.
+ * @return The stored image.
+ */
+PurpleStoredImage *
+purple_imgstore_add(gpointer data, size_t size, const char *filename);
+
+/**
+ * Add an image to the store, allocating an ID.
+ *
+ * The caller owns a reference to the image in the store, and must dereference
+ * the image with purple_imgstore_unref_by_id() or purple_imgstore_unref()
+ * for it to be freed.
+ *
+ * @param data		Pointer to the image data, which the imgstore will take
+ *                      ownership of and free as appropriate.  If you want a
+ *                      copy of the data, make it before calling this function.
  * @param size		Image data's size.
  * @param filename	Filename associated with image.
 
  * @return ID for the image.
  */
-int purple_imgstore_add(const void *data, size_t size, const char *filename);
+int purple_imgstore_add_with_id(gpointer data, size_t size, const char *filename);
 
 /**
  * Retrieve an image from the store. The caller does not own a
@@ -54,55 +80,107 @@
  *
  * @return A pointer to the requested image, or NULL if it was not found.
  */
-PurpleStoredImage *purple_imgstore_get(int id);
+PurpleStoredImage *purple_imgstore_find_by_id(int id);
 
 /**
  * Retrieves a pointer to the image's data.
  *
- * @param i	The Image
+ * @param img	The Image
  *
  * @return A pointer to the data, which must not
  *         be freed or modified.
  */
-gpointer purple_imgstore_get_data(PurpleStoredImage *i);
+gconstpointer purple_imgstore_get_data(PurpleStoredImage *img);
 
 /**
  * Retrieves the length of the image's data.
  *
- * @param i	The Image
+ * @param img	The Image
  *
  * @return The size of the data that the pointer returned by
  *         purple_imgstore_get_data points to.
  */
-size_t purple_imgstore_get_size(PurpleStoredImage *i);
+size_t purple_imgstore_get_size(PurpleStoredImage *img);
 
 /**
  * Retrieves a pointer to the image's filename.
  *
- * @param i	The Image
+ * @param img	The image
  *
  * @return A pointer to the filename, which must not
  *         be freed or modified.
  */
-const char *purple_imgstore_get_filename(PurpleStoredImage *i);
+const char *purple_imgstore_get_filename(PurpleStoredImage *img);
+
+/**
+ * Returns an extension corresponding to the image's file type.
+ *
+ * @param img  The image.
+ *
+ * @return The icon's extension or "icon" if unknown.
+ */
+const char *purple_imgstore_get_extension(PurpleStoredImage *img);
 
 /**
- * Increment the reference count for an image in the store. The
- * image will be removed from the store when the reference count
- * is zero.
+ * Increment the reference count.
+ *
+ * @param img The image.
+ *
+ * @return @a img
+ */
+PurpleStoredImage *
+purple_imgstore_ref(PurpleStoredImage *img);
+
+/**
+ * Decrement the reference count.
+ *
+ * If the reference count reaches zero, the image will be freed.
+ *
+ * @param img The image.
+ *
+ * @return @a img or @c NULL if the reference count reached zero.
+ */
+PurpleStoredImage *
+purple_imgstore_unref(PurpleStoredImage *img);
+
+/**
+ * Increment the reference count using an ID.
+ *
+ * This is a convience wrapper for purple_imgstore_find_by_id() and
+ * purple_imgstore_ref(), so if you have a PurpleStoredImage, it'll
+ * be more efficient to call purple_imgstore_ref() directly.
  *
  * @param id		The ID for the image.
  */
-void purple_imgstore_ref(int id);
+void purple_imgstore_ref_by_id(int id);
 
 /**
- * Decrement the reference count for an image in the store. The
- * image will be removed from the store when the reference count
- * is zero.
+ * Decrement the reference count using an ID.
+ *
+ * This is a convience wrapper for purple_imgstore_find_by_id() and
+ * purple_imgstore_unref(), so if you have a PurpleStoredImage, it'll
+ * be more efficient to call purple_imgstore_unref() directly.
  *
  * @param id		The ID for the image.
  */
-void purple_imgstore_unref(int id);
+void purple_imgstore_unref_by_id(int id);
+
+/**
+ * Returns the image store subsystem handle.
+ *
+ * @return The subsystem handle.
+ */
+void *purple_imgstore_get_handle(void);
+
+/**
+ * Initializes the image store subsystem.
+ */
+void purple_imgstore_init(void);
+
+/**
+ * Uninitializes the image store subsystem.
+ */
+void purple_imgstore_uninit(void);
 
 #ifdef __cplusplus
 }
--- a/libpurple/internal.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/internal.h	Sat Apr 28 18:32:47 2007 +0000
@@ -184,4 +184,20 @@
 
 #define PURPLE_WEBSITE "http://pidgin.im/"
 
+/* This is for the accounts code to notify the buddy icon code that
+ * it's done loading.  We may want to replace this with a signal. */
+void
+purple_buddy_icons_account_loaded_cb(void);
+
+/* This is for the buddy list to notify the buddy icon code that
+ * it's done loading.  We may want to replace this with a signal. */
+void
+purple_buddy_icons_blist_loaded_cb(void);
+
+/* This is for the purple_core_migrate() code to tell the buddy
+ * icon subsystem about the old icons directory so it can
+ * migrate any icons in use. */
+void
+purple_buddy_icon_set_old_icons_dir(const char *dirname);
+
 #endif /* _PURPLE_INTERNAL_H_ */
--- a/libpurple/log.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/log.c	Sat Apr 28 18:32:47 2007 +0000
@@ -583,12 +583,12 @@
 {
 	void *handle = purple_log_get_handle();
 
-	purple_prefs_add_none("/core/logging");
-	purple_prefs_add_bool("/core/logging/log_ims", FALSE);
-	purple_prefs_add_bool("/core/logging/log_chats", FALSE);
-	purple_prefs_add_bool("/core/logging/log_system", FALSE);
+	purple_prefs_add_none("/purple/logging");
+	purple_prefs_add_bool("/purple/logging/log_ims", FALSE);
+	purple_prefs_add_bool("/purple/logging/log_chats", FALSE);
+	purple_prefs_add_bool("/purple/logging/log_system", FALSE);
 
-	purple_prefs_add_string("/core/logging/format", "txt");
+	purple_prefs_add_string("/purple/logging/format", "txt");
 
 	html_logger = purple_log_logger_new("html", _("HTML"), 11,
 									  NULL,
@@ -650,9 +650,9 @@
 #endif
 	                     purple_value_new(PURPLE_TYPE_BOOLEAN));
 
-	purple_prefs_connect_callback(NULL, "/core/logging/format",
+	purple_prefs_connect_callback(NULL, "/purple/logging/format",
 							    logger_pref_cb, NULL);
-	purple_prefs_trigger_callback("/core/logging/format");
+	purple_prefs_trigger_callback("/purple/logging/format");
 
 	logsize_users = g_hash_table_new_full((GHashFunc)_purple_logsize_user_hash,
 			(GEqualFunc)_purple_logsize_user_equal,
--- a/libpurple/network.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/network.c	Sat Apr 28 18:32:47 2007 +0000
@@ -111,13 +111,13 @@
 
 	/* XXX - Ensure the IP address is valid */
 
-	purple_prefs_set_string("/core/network/public_ip", ip);
+	purple_prefs_set_string("/purple/network/public_ip", ip);
 }
 
 const char *
 purple_network_get_public_ip(void)
 {
-	return purple_prefs_get_string("/core/network/public_ip");
+	return purple_prefs_get_string("/purple/network/public_ip");
 }
 
 const char *
@@ -176,7 +176,7 @@
 	PurpleStunNatDiscovery *stun;
 
 	/* Check if the user specified an IP manually */
-	if (!purple_prefs_get_bool("/core/network/auto_ip")) {
+	if (!purple_prefs_get_bool("/purple/network/auto_ip")) {
 		ip = purple_network_get_public_ip();
 		/* Make sure the IP address entered by the user is valid */
 		if ((ip != NULL) && (purple_network_ip_atoi(ip) != NULL))
@@ -387,9 +387,9 @@
 {
 	PurpleNetworkListenData *ret = NULL;
 
-	if (purple_prefs_get_bool("/core/network/ports_range_use")) {
-		start = purple_prefs_get_int("/core/network/ports_range_start");
-		end = purple_prefs_get_int("/core/network/ports_range_end");
+	if (purple_prefs_get_bool("/purple/network/ports_range_use")) {
+		start = purple_prefs_get_int("/purple/network/ports_range_start");
+		end = purple_prefs_get_int("/purple/network/ports_range_end");
 	} else {
 		if (end < start)
 			end = start;
@@ -660,12 +660,12 @@
 	}
 #endif
 
-	purple_prefs_add_none  ("/core/network");
-	purple_prefs_add_bool  ("/core/network/auto_ip", TRUE);
-	purple_prefs_add_string("/core/network/public_ip", "");
-	purple_prefs_add_bool  ("/core/network/ports_range_use", FALSE);
-	purple_prefs_add_int   ("/core/network/ports_range_start", 1024);
-	purple_prefs_add_int   ("/core/network/ports_range_end", 2048);
+	purple_prefs_add_none  ("/purple/network");
+	purple_prefs_add_bool  ("/purple/network/auto_ip", TRUE);
+	purple_prefs_add_string("/purple/network/public_ip", "");
+	purple_prefs_add_bool  ("/purple/network/ports_range_use", FALSE);
+	purple_prefs_add_int   ("/purple/network/ports_range_start", 1024);
+	purple_prefs_add_int   ("/purple/network/ports_range_end", 2048);
 
 	purple_upnp_discover(NULL, NULL);
 
--- a/libpurple/plugins/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -22,7 +22,7 @@
 	ssl \
 	$(TCL_DIR)
 
-plugindir = $(libdir)/purple
+plugindir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 autoaccept_la_LDFLAGS       = -module -avoid-version
 buddynote_la_LDFLAGS        = -module -avoid-version
--- a/libpurple/plugins/autoaccept.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/autoaccept.c	Sat Apr 28 18:32:47 2007 +0000
@@ -162,10 +162,13 @@
 	purple_request_choice(plugin, _("Set Autoaccept Setting"), message,
 						NULL, purple_blist_node_get_int(node, "autoaccept"),
 						_("_Save"), G_CALLBACK(save_cb),
-						_("_Cancel"), NULL, node,
+						_("_Cancel"), NULL,
+						NULL, NULL, NULL,
+						node,
 						_("Ask"), FT_ASK,
 						_("Auto Accept"), FT_ACCEPT,
 						_("Auto Reject"), FT_REJECT,
+						NULL, purple_contact_get_alias((PurpleContact *)node), NULL,
 						NULL);
 	g_free(message);
 }
--- a/libpurple/plugins/buddynote.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/buddynote.c	Sat Apr 28 18:32:47 2007 +0000
@@ -49,6 +49,7 @@
 					   note, TRUE, FALSE, "html",
 					   _("Save"), G_CALLBACK(do_it_cb),
 					   _("Cancel"), G_CALLBACK(dont_do_it_cb),
+					   NULL, NULL, NULL,
 					   node);
 }
 
--- a/libpurple/plugins/idle.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/idle.c	Sat Apr 28 18:32:47 2007 +0000
@@ -168,6 +168,7 @@
 			request,
 			_("_Set"), G_CALLBACK(idle_action_ok),
 			_("_Cancel"), NULL,
+			NULL, NULL, NULL,
 			NULL);
 }
 
@@ -201,6 +202,7 @@
 			request,
 			_("_Unset"), G_CALLBACK(unidle_action_ok),
 			_("_Cancel"), NULL,
+			NULL, NULL, NULL,
 			NULL);
 }
 
@@ -226,6 +228,7 @@
 			request,
 			_("_Set"), G_CALLBACK(idle_all_action_ok),
 			_("_Cancel"), NULL,
+			NULL, NULL, NULL,
 			NULL);
 }
 
--- a/libpurple/plugins/mono/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/mono/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -5,7 +5,7 @@
 
 EXTRA_DIST = $(mono_sources)
 
-monodir = $(libdir)/purple
+monodir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 mono_SCRIPTS = MPlugin.dll GetBuddyBack.dll
 mono_build_sources = $(addprefix $(srcdir)/, $(mono_sources))
 
--- a/libpurple/plugins/mono/api/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/mono/api/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-monodir=$(libdir)/purple
+monodir=$(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 mono_sources = \
 	BlistNode.cs \
--- a/libpurple/plugins/mono/loader/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/mono/loader/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-plugindir = $(libdir)/purple
+plugindir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 plugin_LTLIBRARIES = mono.la
 
--- a/libpurple/plugins/offlinemsg.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/offlinemsg.c	Sat Apr 28 18:32:47 2007 +0000
@@ -155,7 +155,9 @@
 	
 		purple_request_action(handle, _("Offline Message"), ask,
 					_("You can edit/delete the pounce from the `Buddy Pounces' dialog"),
-					1, offline, 2,
+					1,
+					offline->account, offline->who, offline->conv,
+					offline, 2,
 					_("Yes"), record_pounce,
 					_("No"), cancel_poune);
 		g_free(ask);
--- a/libpurple/plugins/perl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,13 +1,11 @@
-plugindir = $(libdir)/purple
-hackdir = $(plugindir)/private
+plugindir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 perl_dirs = common
 
 plugin_LTLIBRARIES = perl.la
-hack_LTLIBRARIES = libpurpleperl.la
 
 perl_la_LDFLAGS = -module -avoid-version
-perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS) libpurpleperl.la
+perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS)
 perl_la_SOURCES = \
 	perl.c \
 	perl-common.c \
@@ -17,12 +15,7 @@
 
 perl_la_DEPENDENCIES = \
 	.libs/libperl_orig.a \
-	.libs/DynaLoader.a \
-	libpurpleperl.la
-
-libpurpleperl_la_LDFLAGS = -module -avoid-version
-libpurpleperl_la_LIBADD = $(GLIB_LIBS)
-libpurpleperl_la_SOURCES = libpurpleperl.c
+	.libs/DynaLoader.a
 
 .libs/libperl_orig.a:
 	@mkdir -p .libs
@@ -42,55 +35,52 @@
 		$(LN_S) $(DYNALOADER_A) .libs/DynaLoader.a; \
 	fi
 
-
 common_sources = \
-        common/Account.xs \
-        common/AccountOpts.xs \
-        common/BuddyIcon.xs \
-        common/BuddyList.xs \
-        common/Cipher.xs \
-        common/Cmds.xs \
-        common/Core.xs \
-        common/Connection.xs \
-        common/Conversation.xs \
-        common/Debug.xs \
-        common/FT.xs \
-        common/ImgStore.xs \
-        common/Log.xs \
-        common/Makefile.PL.in \
-        common/Network.xs \
-        common/Notify.xs \
-        common/Plugin.xs \
-        common/PluginPref.xs \
-        common/Pounce.xs \
-        common/Prefs.xs \
-        common/Privacy.xs \
-        common/Proxy.xs \
-        common/Prpl.xs \
-        common/Purple.pm \
-        common/Purple.xs \
-        common/Request.xs \
-        common/Roomlist.xs \
-        common/SSLConn.xs \
-        common/SavedStatuses.xs \
-        common/Server.xs \
-        common/Signal.xs \
-        common/Sound.xs \
-        common/Status.xs \
-        common/Stringref.xs \
-        common/Util.xs \
-        common/XMLNode.xs \
-        common/fallback/const-c.inc \
-        common/fallback/const-xs.inc \
-        common/module.h \
-        common/typemap
-
+	common/Account.xs \
+	common/AccountOpts.xs \
+	common/BuddyIcon.xs \
+	common/BuddyList.xs \
+	common/Cipher.xs \
+	common/Cmds.xs \
+	common/Core.xs \
+	common/Connection.xs \
+	common/Conversation.xs \
+	common/Debug.xs \
+	common/FT.xs \
+	common/ImgStore.xs \
+	common/Log.xs \
+	common/Makefile.PL.in \
+	common/Network.xs \
+	common/Notify.xs \
+	common/Plugin.xs \
+	common/PluginPref.xs \
+	common/Pounce.xs \
+	common/Prefs.xs \
+	common/Privacy.xs \
+	common/Proxy.xs \
+	common/Prpl.xs \
+	common/Purple.pm \
+	common/Purple.xs \
+	common/Request.xs \
+	common/Roomlist.xs \
+	common/SSLConn.xs \
+	common/SavedStatuses.xs \
+	common/Server.xs \
+	common/Signal.xs \
+	common/Sound.xs \
+	common/Status.xs \
+	common/Stringref.xs \
+	common/Util.xs \
+	common/XMLNode.xs \
+	common/module.h \
+	common/typemap \
+	common/fallback/const-c.inc \
+	common/fallback/const-xs.inc
 
 EXTRA_DIST = \
 	Makefile.mingw \
 	common/Makefile.mingw \
-	$(common_sources) \
-	libpurpleperl.c
+	$(common_sources)
 
 common/Makefile: common/Makefile.PL
 	@if test "x${top_srcdir}" != "x${top_builddir}"; then \
@@ -157,7 +147,6 @@
 		done; \
 	fi
 
-
 AM_CPPFLAGS = \
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
--- a/libpurple/plugins/perl/common/Account.xs	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/common/Account.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -59,7 +59,7 @@
     const char *user_info
 
 void
-purple_account_set_buddy_icon(account, icon)
+purple_account_set_buddy_icon_path(account, icon)
     Purple::Account account
     const char *icon
 
@@ -144,7 +144,7 @@
     Purple::Account account
 
 const char *
-purple_account_get_buddy_icon(account)
+purple_account_get_buddy_icon_path(account)
     Purple::Account account
 
 const char *
--- a/libpurple/plugins/perl/common/BuddyIcon.xs	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/common/BuddyIcon.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -3,10 +3,6 @@
 MODULE = Purple::Buddy::Icon PACKAGE = Purple::Buddy::Icon   PREFIX = purple_buddy_icon_
 PROTOTYPES: ENABLE
 
-void
-purple_buddy_icon_destroy(icon)
-	Purple::Buddy::Icon icon
-
 Purple::Buddy::Icon
 purple_buddy_icon_ref(icon)
 	Purple::Buddy::Icon icon
@@ -20,25 +16,11 @@
 	Purple::Buddy::Icon icon
 
 void
-purple_buddy_icon_cache(icon, buddy)
-	Purple::Buddy::Icon icon
-	Purple::BuddyList::Buddy buddy
-
-void
-purple_buddy_icon_set_account(icon, account)
-	Purple::Buddy::Icon icon
-	Purple::Account account
-
-void
-purple_buddy_icon_set_username(icon, username)
-	Purple::Buddy::Icon icon
-	const char * username
-
-void
-purple_buddy_icon_set_data(icon, data, len)
+purple_buddy_icon_set_data(icon, data, len, checksum)
 	Purple::Buddy::Icon icon
 	void * data
 	size_t len
+	char *checksum
 
 Purple::Account
 purple_buddy_icon_get_account(icon)
@@ -54,7 +36,7 @@
 	size_t &len
 
 const char *
-purple_buddy_icon_get_type(icon)
+purple_buddy_icon_get_extension(icon)
 	Purple::Buddy::Icon icon
 
 void
--- a/libpurple/plugins/perl/common/ImgStore.xs	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/common/ImgStore.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -3,17 +3,23 @@
 MODULE = Purple::ImgStore  PACKAGE = Purple::ImgStore  PREFIX = purple_imgstore_
 PROTOTYPES: ENABLE
 
-int 
+Purple::StoredImage
 purple_imgstore_add(data, size, filename)
 	void *data
 	size_t size
 	const char *filename
 
+int
+purple_imgstore_add_with_id(data, size, filename)
+	void *data
+	size_t size
+	const char *filename
+
 Purple::StoredImage
-purple_imgstore_get(id)
+purple_imgstore_find_by_id(id)
 	int id
 
-gpointer 
+gconstpointer 
 purple_imgstore_get_data(i)
 	Purple::StoredImage i
 
@@ -25,11 +31,23 @@
 purple_imgstore_get_size(i)
 	Purple::StoredImage i
 
-void 
+const char *
+purple_imgstore_get_extension(i)
+	Purple::StoredImage i
+
+Purple::StoredImage
 purple_imgstore_ref(id)
+	Purple::StoredImage id
+
+Purple::StoredImage
+purple_imgstore_unref(id)
+	Purple::StoredImage id
+
+void
+purple_imgstore_ref_by_id(id)
 	int id
 
-void 
-purple_imgstore_unref(id)
+void
+purple_imgstore_unref_by_id(id)
 	int id
 
--- a/libpurple/plugins/perl/common/Makefile.PL.in	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/common/Makefile.PL.in	Sat Apr 28 18:32:47 2007 +0000
@@ -1,18 +1,18 @@
 use 5.006;
 use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence the contents
+# of the Makefile that is written.
 WriteMakefile(
-    'NAME'		=> 'Purple',
-    'VERSION_FROM'	=> '@srcdir@/Purple.pm', # finds $VERSION
-    'PREREQ_PM'		=> {}, # e.g., Module::Name => 1.1
-    ($] >= 5.005 ?    ## Add these new keywords supported since 5.005
-      (ABSTRACT_FROM => '@srcdir@/Purple.pm', # retrieve abstract from module
-       AUTHOR     => 'Purple <http://pidgin.im/>') : ()),
-    'LIBS'		=> [''], # e.g., '-lm'
-    'DEFINE'		=> '@DEBUG_CFLAGS@', # e.g., '-DHAVE_SOMETHING'
-    'INC'		=> '-I. -I@srcdir@ -I@top_srcdir@ -I@top_srcdir@/libpurple @GLIB_CFLAGS@', # e.g., '-I. -I/usr/include/other'
-    'OBJECT'		=> '$(O_FILES)', # link all the C files too
+    'NAME'              => 'Purple',
+    'VERSION_FROM'      => '@srcdir@/Purple.pm', # finds $VERSION
+    'PREREQ_PM'         => {}, # e.g., Module::Name => 1.1
+    ($] >= 5.005 ? ## Add these new keywords supported since 5.005
+      (ABSTRACT_FROM    => '@srcdir@/Purple.pm', # finds $ABSTRACT
+       AUTHOR           => 'Purple <http://pidgin.im/>') : ()),
+    'DEFINE'            => '@DEBUG_CFLAGS@',
+    'INC'               => '-I. -I@srcdir@ -I@top_srcdir@ -I@top_srcdir@/libpurple @GLIB_CFLAGS@',
+    'OBJECT'            => '$(O_FILES)', # link all the C files too
+#    'OPTIMIZE'          => '-g', # For debugging
 );
 
 if (eval {require ExtUtils::Constant; 1}) {
--- a/libpurple/plugins/perl/common/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/common/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -66,7 +66,7 @@
 				Status.xs \
 				Stringref.xs \
 				Util.xs \
-				XMLNode.xs \
+				XMLNode.xs
 
 FALLBACKS =	const-c.inc const-xs.inc
 C_FILES = $(XS_FILES:%.xs=%.c)
--- a/libpurple/plugins/perl/common/Purple.pm	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/common/Purple.pm	Sat Apr 28 18:32:47 2007 +0000
@@ -58,7 +58,7 @@
 
 =head1 NAME
 
-libpurple - Perl extension to the libpurple instant messenger library.
+Purple - Perl extension to the libpurple instant messenger library.
 
 =head1 SYNOPSIS
 
--- a/libpurple/plugins/perl/common/Request.xs	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/common/Request.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -106,7 +106,7 @@
 	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
 	g_free(basename);
 
-	RETVAL = purple_request_input(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), gpr);
+	RETVAL = purple_request_input(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr);
 OUTPUT:
 	RETVAL
 
@@ -130,7 +130,7 @@
 	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
 	g_free(basename);
 
-	RETVAL = purple_request_file(handle, title, filename, savedialog, G_CALLBACK(purple_perl_request_ok_cb), G_CALLBACK(purple_perl_request_cancel_cb), gpr);
+	RETVAL = purple_request_file(handle, title, filename, savedialog, G_CALLBACK(purple_perl_request_ok_cb), G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr);
 OUTPUT:
 	RETVAL
 
@@ -157,7 +157,7 @@
 	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
 	g_free(basename);
 
-	RETVAL = purple_request_fields(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), gpr);
+	RETVAL = purple_request_fields(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr);
 OUTPUT:
 	RETVAL
 
--- a/libpurple/plugins/perl/perl.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/perl/perl.c	Sat Apr 28 18:32:47 2007 +0000
@@ -93,6 +93,8 @@
 #include "perl-common.h"
 #include "perl-handlers.h"
 
+#include <gmodule.h>
+
 #define PERL_PLUGIN_ID "core-perl"
 
 PerlInterpreter *my_perl = NULL;
@@ -578,11 +580,11 @@
 	PURPLE_PLUGIN_MAGIC,
 	PURPLE_MAJOR_VERSION,
 	PURPLE_MINOR_VERSION,
-	PURPLE_PLUGIN_LOADER,                               /**< type           */
+	PURPLE_PLUGIN_LOADER,                             /**< type           */
 	NULL,                                             /**< ui_requirement */
 	0,                                                /**< flags          */
 	NULL,                                             /**< dependencies   */
-	PURPLE_PRIORITY_DEFAULT,                            /**< priority       */
+	PURPLE_PRIORITY_DEFAULT,                          /**< priority       */
 
 	PERL_PLUGIN_ID,                                   /**< id             */
 	N_("Perl Plugin Loader"),                         /**< name           */
@@ -590,7 +592,7 @@
 	N_("Provides support for loading perl plugins."), /**< summary        */
 	N_("Provides support for loading perl plugins."), /**< description    */
 	"Christian Hammond <chipx86@gnupdate.org>",       /**< author         */
-	PURPLE_WEBSITE,                                     /**< homepage       */
+	PURPLE_WEBSITE,                                   /**< homepage       */
 
 	plugin_load,                                      /**< load           */
 	plugin_unload,                                    /**< unload         */
@@ -608,4 +610,23 @@
 	loader_info.exts = g_list_append(loader_info.exts, "pl");
 }
 
+#ifdef __SUNPRO_C
+#pragma init (my_init)
+#else
+void __attribute__ ((constructor)) my_init(void);
+#endif
+
+void
+my_init(void)
+{
+	/* Mostly evil hack... puts perl.so's symbols in the global table but
+	 * does not create a circular dependency because g_module_open will
+	 * only open the library once. */
+	/* Do we need to keep track of the returned GModule here so that we
+	 * can g_module_close it when this plugin gets unloaded?
+	 * At the moment I don't think this plugin can ever get unloaded but
+	 * in case that becomes possible this wants to get noted. */
+	g_module_open("perl.so", 0);
+}
+
 PURPLE_INIT_PLUGIN(perl, init_plugin, info)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/plugins/perl/scripts/function_list.pl	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,69 @@
+$MODULE_NAME = "List all Purple:: (and Pidgin::) functions";
+use Purple;
+# Uncomment this to print the Pidgin:: functions as well.
+#use Pidgin;
+
+# All the information Purple gets about our nifty plugin
+%PLUGIN_INFO = (
+	perl_api_version => 2,
+	name             => "Perl: $MODULE_NAME",
+	version          => "0.1",
+	summary          => "Print to standard output all the functions under the Purple:: (and Pidgin::) packages",
+	description      => "Print to standard output all the functions under the Purple:: (and Pidgin::) packages",
+	author           => "Etan Reisner <deryni\@gmail.com>",
+	url              => "http://sourceforge.net/users/deryni9/",
+	id               => "functionlist",
+
+	load             => "plugin_load",
+	unload           => "plugin_unload"
+);
+
+sub plugin_init {
+	return %PLUGIN_INFO;
+}
+
+sub print_array {
+	my $array = shift;
+
+	my @arr = sort @$array;
+	foreach $mod (@arr) {
+		my @sub;
+
+		foreach $key (sort keys %{$mod}) {
+			if ($key =~ /::$/) {
+				push @sub, "$mod$key";
+			} else {
+				print "$mod$key\n";
+			}
+		}
+		print_array(\@sub);
+	}
+}
+
+sub plugin_load {
+	my $plugin = shift;
+	my @purplearray;
+	my @pidginarray;
+
+	foreach $key (sort keys %Purple::) {
+		if ($key =~ /::$/) {
+			push @purplearray, "Purple::$key";
+		} else {
+			print "Purple::$key\n";
+		}
+	}
+	print_array(\@purplearray);
+
+	foreach $key (sort keys %Pidgin::) {
+		if ($key =~ /::$/) {
+			push @pidginarray, "Pidgin::$key";
+		} else {
+			print "Pidgin::$key\n";
+		}
+	}
+	print_array(\@pidginarray);
+}
+
+sub plugin_unload {
+	my $plugin = shift;
+}
--- a/libpurple/plugins/ssl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/ssl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,7 @@
 EXTRA_DIST = \
 		Makefile.mingw
 
-plugindir = $(libdir)/purple
+plugindir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 ssl_la_LDFLAGS        = -module -avoid-version
 ssl_gnutls_la_LDFLAGS = -module -avoid-version
--- a/libpurple/plugins/tcl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/tcl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-plugindir = $(libdir)/purple
+plugindir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 tcl_la_LDFLAGS = -module -avoid-version
 
--- a/libpurple/plugins/tcl/tcl_ref.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/plugins/tcl/tcl_ref.c	Sat Apr 28 18:32:47 2007 +0000
@@ -114,17 +114,18 @@
 	char *ptr;
 	PurpleStringref *type;
 	void *value;
-	int magicnumber = strlen("purple-");
+	static const char const *prefix = "purple-";
+	static const int prefixlen = sizeof(prefix) - 1;
 
-	if (strlen(bytes) < magicnumber
-	    || strncmp(bytes, "purple-", magicnumber)
+	if (strlen(bytes) < prefixlen
+	    || strncmp(bytes, prefix, prefixlen)
 	    || (ptr = strchr(bytes, ':')) == NULL
-	    || (ptr - bytes) == magicnumber)
+	    || (ptr - bytes) == prefixlen)
 		goto badobject;
 
 	/* Bad Ethan */
 	*ptr = '\0';
-	type = purple_stringref_new(bytes + magicnumber);
+	type = purple_stringref_new(bytes + prefixlen);
 	*ptr = ':';
 	ptr++;
 
--- a/libpurple/prefs.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/prefs.c	Sat Apr 28 18:32:47 2007 +0000
@@ -438,14 +438,14 @@
 	/* I introduced a bug in 2.0.0beta2.  This fixes the broken
 	 * scores on upgrade.  This can be removed sometime shortly
 	 * after 2.0.0 final is released. -- rlaager */
-	if (purple_prefs_get_int("/core/status/scores/offline") == -500 &&
-	    purple_prefs_get_int("/core/status/scores/available") == 100 &&
-	    purple_prefs_get_int("/core/status/scores/invisible") == -50 &&
-	    purple_prefs_get_int("/core/status/scores/away") == -100 &&
-	    purple_prefs_get_int("/core/status/scores/extended_away") == -200 &&
-	    purple_prefs_get_int("/core/status/scores/idle") == -400)
+	if (purple_prefs_get_int("/purple/status/scores/offline") == -500 &&
+	    purple_prefs_get_int("/purple/status/scores/available") == 100 &&
+	    purple_prefs_get_int("/purple/status/scores/invisible") == -50 &&
+	    purple_prefs_get_int("/purple/status/scores/away") == -100 &&
+	    purple_prefs_get_int("/purple/status/scores/extended_away") == -200 &&
+	    purple_prefs_get_int("/purple/status/scores/idle") == -400)
 	{
-		purple_prefs_set_int("/core/status/scores/idle", -10);
+		purple_prefs_set_int("/purple/status/scores/idle", -10);
 	}
 
 	return TRUE;
@@ -1102,13 +1102,14 @@
 static void
 purple_prefs_rename_node(struct purple_pref *oldpref, struct purple_pref *newpref)
 {
-	struct purple_pref *child;
+	struct purple_pref *child, *next;
 	char *oldname, *newname;
 
 	/* if we're a parent, rename the kids first */
-	for(child = oldpref->first_child; child != NULL; child = child->sibling)
+	for(child = oldpref->first_child; child != NULL; child = next)
 	{
 		struct purple_pref *newchild;
+		next = child->sibling;
 		for(newchild = newpref->first_child; newchild != NULL; newchild = newchild->sibling)
 		{
 			if(!strcmp(child->name, newchild->name))
@@ -1120,7 +1121,7 @@
 		if(newchild == NULL) {
 			/* no rename happened, we weren't able to find the new pref */
 			char *tmpname = pref_full_name(child);
-			purple_debug_error("prefs", "Unable to find rename pref for %s", tmpname);
+			purple_debug_error("prefs", "Unable to find rename pref for %s\n", tmpname);
 			g_free(tmpname);
 		}
 	}
@@ -1327,26 +1328,28 @@
 void
 purple_prefs_update_old()
 {
+	purple_prefs_rename("/core", "/purple");
+
 	/* Remove some no-longer-used prefs */
-	purple_prefs_remove("/core/away/auto_response/enabled");
-	purple_prefs_remove("/core/away/auto_response/idle_only");
-	purple_prefs_remove("/core/away/auto_response/in_active_conv");
-	purple_prefs_remove("/core/away/auto_response/sec_before_resend");
-	purple_prefs_remove("/core/away/auto_response");
-	purple_prefs_remove("/core/away/default_message");
-	purple_prefs_remove("/core/buddies/use_server_alias");
-	purple_prefs_remove("/core/conversations/away_back_on_send");
-	purple_prefs_remove("/core/conversations/send_urls_as_links");
-	purple_prefs_remove("/core/conversations/im/show_login");
-	purple_prefs_remove("/core/conversations/chat/show_join");
-	purple_prefs_remove("/core/conversations/chat/show_leave");
-	purple_prefs_remove("/core/conversations/combine_chat_im");
-	purple_prefs_remove("/core/conversations/use_alias_for_title");
-	purple_prefs_remove("/core/logging/log_signon_signoff");
-	purple_prefs_remove("/core/logging/log_idle_state");
-	purple_prefs_remove("/core/logging/log_away_state");
-	purple_prefs_remove("/core/logging/log_own_states");
-	purple_prefs_remove("/core/status/scores/hidden");
+	purple_prefs_remove("/purple/away/auto_response/enabled");
+	purple_prefs_remove("/purple/away/auto_response/idle_only");
+	purple_prefs_remove("/purple/away/auto_response/in_active_conv");
+	purple_prefs_remove("/purple/away/auto_response/sec_before_resend");
+	purple_prefs_remove("/purple/away/auto_response");
+	purple_prefs_remove("/purple/away/default_message");
+	purple_prefs_remove("/purple/buddies/use_server_alias");
+	purple_prefs_remove("/purple/conversations/away_back_on_send");
+	purple_prefs_remove("/purple/conversations/send_urls_as_links");
+	purple_prefs_remove("/purple/conversations/im/show_login");
+	purple_prefs_remove("/purple/conversations/chat/show_join");
+	purple_prefs_remove("/purple/conversations/chat/show_leave");
+	purple_prefs_remove("/purple/conversations/combine_chat_im");
+	purple_prefs_remove("/purple/conversations/use_alias_for_title");
+	purple_prefs_remove("/purple/logging/log_signon_signoff");
+	purple_prefs_remove("/purple/logging/log_idle_state");
+	purple_prefs_remove("/purple/logging/log_away_state");
+	purple_prefs_remove("/purple/logging/log_own_states");
+	purple_prefs_remove("/purple/status/scores/hidden");
 	purple_prefs_remove("/plugins/core/autorecon/hide_connected_error");
 	purple_prefs_remove("/plugins/core/autorecon/hide_connecting_error");
 	purple_prefs_remove("/plugins/core/autorecon/hide_reconnecting_dialog");
@@ -1354,12 +1357,12 @@
 	purple_prefs_remove("/plugins/core/autorecon");
 
 	/* Convert old sounds while_away pref to new 3-way pref. */
-	if (purple_prefs_exists("/core/sound/while_away") &&
-	    purple_prefs_get_bool("/core/sound/while_away"))
+	if (purple_prefs_exists("/purple/sound/while_away") &&
+	    purple_prefs_get_bool("/purple/sound/while_away"))
 	{
-		purple_prefs_set_int("/core/sound/while_status", 3);
+		purple_prefs_set_int("/purple/sound/while_status", 3);
 	}
-	purple_prefs_remove("/core/sound/while_away");
+	purple_prefs_remove("/purple/sound/while_away");
 }
 
 void *
@@ -1379,52 +1382,52 @@
 
 	purple_prefs_connect_callback(handle, "/", prefs_save_cb, NULL);
 
-	purple_prefs_add_none("/core");
+	purple_prefs_add_none("/purple");
 	purple_prefs_add_none("/plugins");
 	purple_prefs_add_none("/plugins/core");
 	purple_prefs_add_none("/plugins/lopl");
 	purple_prefs_add_none("/plugins/prpl");
 
 	/* Away */
-	purple_prefs_add_none("/core/away");
-	purple_prefs_add_string("/core/away/idle_reporting", "system");
-	purple_prefs_add_bool("/core/away/away_when_idle", TRUE);
-	purple_prefs_add_int("/core/away/mins_before_away", 5);
+	purple_prefs_add_none("/purple/away");
+	purple_prefs_add_string("/purple/away/idle_reporting", "system");
+	purple_prefs_add_bool("/purple/away/away_when_idle", TRUE);
+	purple_prefs_add_int("/purple/away/mins_before_away", 5);
 
 	/* Away -> Auto-Reply */
-	if (!purple_prefs_exists("/core/away/auto_response/enabled") ||
-	    !purple_prefs_exists("/core/away/auto_response/idle_only"))
+	if (!purple_prefs_exists("/purple/away/auto_response/enabled") ||
+	    !purple_prefs_exists("/purple/away/auto_response/idle_only"))
 	{
-		purple_prefs_add_string("/core/away/auto_reply", "awayidle");
+		purple_prefs_add_string("/purple/away/auto_reply", "awayidle");
 	}
 	else
 	{
-		if (!purple_prefs_get_bool("/core/away/auto_response/enabled"))
+		if (!purple_prefs_get_bool("/purple/away/auto_response/enabled"))
 		{
-			purple_prefs_add_string("/core/away/auto_reply", "never");
+			purple_prefs_add_string("/purple/away/auto_reply", "never");
 		}
 		else
 		{
-			if (purple_prefs_get_bool("/core/away/auto_response/idle_only"))
+			if (purple_prefs_get_bool("/purple/away/auto_response/idle_only"))
 			{
-				purple_prefs_add_string("/core/away/auto_reply", "awayidle");
+				purple_prefs_add_string("/purple/away/auto_reply", "awayidle");
 			}
 			else
 			{
-				purple_prefs_add_string("/core/away/auto_reply", "away");
+				purple_prefs_add_string("/purple/away/auto_reply", "away");
 			}
 		}
 	}
 
 	/* Buddies */
-	purple_prefs_add_none("/core/buddies");
+	purple_prefs_add_none("/purple/buddies");
 
 	/* Contact Priority Settings */
-	purple_prefs_add_none("/core/contact");
-	purple_prefs_add_bool("/core/contact/last_match", FALSE);
-	purple_prefs_remove("/core/contact/offline_score");
-	purple_prefs_remove("/core/contact/away_score");
-	purple_prefs_remove("/core/contact/idle_score");
+	purple_prefs_add_none("/purple/contact");
+	purple_prefs_add_bool("/purple/contact/last_match", FALSE);
+	purple_prefs_remove("/purple/contact/offline_score");
+	purple_prefs_remove("/purple/contact/away_score");
+	purple_prefs_remove("/purple/contact/idle_score");
 }
 
 void
--- a/libpurple/protocols/bonjour/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/bonjour/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,7 @@
 EXTRA_DIST = \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 BONJOURSOURCES = \
 	bonjour.c \
--- a/libpurple/protocols/gg/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/gg/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -13,7 +13,7 @@
 	lib/pubdir50.c \
 	lib/pubdir.c
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 if USE_INTERNAL_LIBGADU
 INTGGSOURCES = \
--- a/libpurple/protocols/gg/gg.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/gg/gg.c	Sat Apr 28 18:32:47 2007 +0000
@@ -334,7 +334,9 @@
 	PurpleConnection *gc = (PurpleConnection *)action->context;
 
 	purple_request_file(action, _("Save buddylist..."), NULL, TRUE,
-			G_CALLBACK(ggp_callback_buddylist_save_ok), NULL, gc);
+			G_CALLBACK(ggp_callback_buddylist_save_ok), NULL,
+			purple_connection_get_account(gc), NULL, NULL,
+			gc);
 }
 /* }}} */
 
@@ -346,7 +348,9 @@
 	PurpleConnection *gc = (PurpleConnection *)action->context;
 
 	purple_request_file(action, "Load buddylist from file...", NULL, FALSE,
-			G_CALLBACK(ggp_callback_buddylist_load_ok), NULL, gc);
+			G_CALLBACK(ggp_callback_buddylist_load_ok), NULL,
+			purple_connection_get_account(gc), NULL, NULL,
+			gc);
 }
 /* }}} */
 
@@ -496,6 +500,7 @@
 		fields,
 		_("OK"), G_CALLBACK(ggp_callback_register_account_ok),
 		_("Cancel"), G_CALLBACK(ggp_callback_register_account_cancel),
+		purple_connection_get_account(gc), NULL, NULL,
 		gc);
 }
 /* }}} */
@@ -654,6 +659,7 @@
 		fields,
 		_("OK"), G_CALLBACK(ggp_callback_find_buddies),
 		_("Cancel"), NULL,
+		purple_connection_get_account(gc), NULL, NULL,
 		gc);
 }
 /* }}} */
@@ -789,7 +795,9 @@
 		_("Change Gadu-Gadu Password"),
 		msg,
 		fields, _("OK"), G_CALLBACK(ggp_callback_change_passwd_ok),
-		_("Cancel"), NULL, gc);
+		_("Cancel"), NULL,
+		purple_connection_get_account(gc), NULL, NULL,
+		gc);
 
 	g_free(msg);
 }
@@ -868,7 +876,9 @@
 			msg,
 			fields,
 			_("Add"), G_CALLBACK(ggp_callback_add_to_chat_ok),
-			_("Cancel"), NULL, gc);
+			_("Cancel"), NULL,
+			purple_connection_get_account(gc), NULL, NULL,			  
+			gc);
 	g_free(msg);
 }
 /* }}} */
--- a/libpurple/protocols/irc/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/irc/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,6 +1,6 @@
 EXTRA_DIST = PROTOCOL Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 IRCSOURCES = irc.c parse.c cmds.c msgs.c irc.h dcc_send.c
 
--- a/libpurple/protocols/irc/cmds.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/irc/cmds.c	Sat Apr 28 18:32:47 2007 +0000
@@ -559,6 +559,22 @@
 	return 0;
 }
 
+int irc_cmd_whowas(struct irc_conn *irc, const char *cmd, const char *target, const char **args)
+{
+	char *buf;
+
+	if (!args || !args[0])
+		return 0;
+
+	buf = irc_format(irc, "vn", "WHOWAS", args[0]);
+	
+	irc->whois.nick = g_strdup(args[0]);
+	irc_send(irc, buf);
+	g_free(buf);
+
+	return 0;
+}
+
 static void irc_do_mode(struct irc_conn *irc, const char *target, const char *sign, char **ops)
 {
 	char *buf, mode[5];
--- a/libpurple/protocols/irc/irc.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/irc/irc.h	Sat Apr 28 18:32:47 2007 +0000
@@ -179,6 +179,7 @@
 int irc_cmd_topic(struct irc_conn *irc, const char *cmd, const char *target, const char **args);
 int irc_cmd_wallops(struct irc_conn *irc, const char *cmd, const char *target, const char **args);
 int irc_cmd_whois(struct irc_conn *irc, const char *cmd, const char *target, const char **args);
+int irc_cmd_whowas(struct irc_conn *irc, const char *cmd, const char *target, const char **args);
 
 PurpleXfer *irc_dccsend_new_xfer(PurpleConnection *gc, const char *who);
 void irc_dccsend_send_file(PurpleConnection *gc, const char *who, const char *file);
--- a/libpurple/protocols/irc/msgs.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/irc/msgs.c	Sat Apr 28 18:32:47 2007 +0000
@@ -236,18 +236,20 @@
 void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args)
 {
 	if (!irc->whois.nick) {
-		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected WHOIS reply for %s\n", args[1]);
+		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected %s reply for %s\n", !strcmp(name, "314") ? "WHOWAS" : "WHOIS"
+											   , args[1]);
 		return;
 	}
 
 	if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) {
-		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Got WHOIS reply for %s while waiting for %s\n", args[1], irc->whois.nick);
+		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Got %s reply for %s while waiting for %s\n", !strcmp(name, "314") ? "WHOWAS" : "WHOIS"
+												      , args[1], irc->whois.nick);
 		return;
 	}
 
 	if (!strcmp(name, "301")) {
 		irc->whois.away = g_strdup(args[2]);
-	} else if (!strcmp(name, "311")) {
+	} else if (!strcmp(name, "311") || !strcmp(name, "314")) {
 		irc->whois.userhost = g_strdup_printf("%s@%s", args[2], args[3]);
 		irc->whois.name = g_strdup(args[5]);
 	} else if (!strcmp(name, "312")) {
@@ -273,11 +275,13 @@
 	PurpleNotifyUserInfo *user_info;
 
 	if (!irc->whois.nick) {
-		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected End of WHOIS for %s\n", args[1]);
+		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected End of %s for %s\n", !strcmp(name, "369") ? "WHOWAS" : "WHOIS" 
+											     , args[1]);
 		return;
 	}
 	if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) {
-		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Received end of WHOIS for %s, expecting %s\n", args[1], irc->whois.nick);
+		purple_debug(PURPLE_DEBUG_WARNING, "irc", "Received end of %s for %s, expecting %s\n", !strcmp(name, "369") ? "WHOWAS" : "WHOIS" 
+													 , args[1], irc->whois.nick);
 		return;
 	}
 
--- a/libpurple/protocols/irc/parse.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/irc/parse.c	Sat Apr 28 18:32:47 2007 +0000
@@ -64,6 +64,8 @@
 	{ "318", "nt:", irc_msg_endwhois },	/* End of WHOIS			*/
 	{ "319", "nn:", irc_msg_whois },	/* Whois channels		*/
 	{ "320", "nn:", irc_msg_whois },	/* Whois (fn ident)		*/
+	{ "314", "nnvvv:", irc_msg_whois },	/* Whowas user			*/
+	{ "369", "nt:", irc_msg_endwhois },	/* End of WHOWAS		*/
 	{ "321", "*", irc_msg_list },		/* Start of list		*/
 	{ "322", "ncv:", irc_msg_list },	/* List.			*/
 	{ "323", ":", irc_msg_list },		/* End of list.			*/
@@ -78,6 +80,7 @@
 	{ "376", "n:", irc_msg_motd },		/* End of MOTD			*/
 	{ "391", "nv:", irc_msg_time },		/* Time reply			*/
 	{ "401", "nt:", irc_msg_nonick },	/* No such nick/chan		*/
+	{ "406", "nt:", irc_msg_nonick },	/* No such nick for WHOWAS	*/
 	{ "403", "nc:", irc_msg_nochan },	/* No such channel		*/
 	{ "404", "nt:", irc_msg_nosend },	/* Cannot send to chan		*/
 	{ "421", "nv:", irc_msg_unknown },	/* Unknown command		*/
@@ -148,6 +151,7 @@
 	{ "voice", ":", irc_cmd_op, N_("voice &lt;nick1&gt; [nick2] ...:  Grant channel voice status to someone. You must be a channel operator to do this.") },
 	{ "wallops", ":", irc_cmd_wallops, N_("wallops &lt;message&gt;:  If you don't know what this is, you probably can't use it.") },
 	{ "whois", "tt", irc_cmd_whois, N_("whois [server] &lt;nick&gt;:  Get information on a user.") },
+	{ "whowas", "t", irc_cmd_whowas, N_("whowas &lt;nick&gt;: Get information on a user that has logged off.") },
 	{ NULL, NULL, NULL, NULL }
 };
 
--- a/libpurple/protocols/jabber/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -3,7 +3,7 @@
 		win32/posix.uname.c \
 		win32/utsname.h
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 JABBERSOURCES = auth.c \
 			  auth.h \
--- a/libpurple/protocols/jabber/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -89,7 +89,7 @@
 
 $(OBJECTS): $(PURPLE_CONFIG_H)
 
-$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
+$(TARGET).dll $(TARGET).dll.a: $(PURPLE_DLL).a $(OBJECTS)
 	$(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).dll.a -o $(TARGET).dll
 
 $(XMPP_TARGET).dll: $(TARGET).dll.a $(XMPP_OBJECTS)
--- a/libpurple/protocols/jabber/auth.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Sat Apr 28 18:32:47 2007 +0000
@@ -294,7 +294,7 @@
 					purple_request_yes_no(js->gc, _("Plaintext Authentication"),
 							_("Plaintext Authentication"),
 							_("This server requires plaintext authentication over an unencrypted connection.  Allow this and continue authentication?"),
-							2, js->gc->account,
+							2, js->gc->account, NULL, NULL, NULL,
 							allow_cyrus_plaintext_auth,
 							disallow_plaintext_auth);
 					return;
@@ -480,7 +480,9 @@
 			purple_request_yes_no(js->gc, _("Plaintext Authentication"),
 					_("Plaintext Authentication"),
 					_("This server requires plaintext authentication over an unencrypted connection.  Allow this and continue authentication?"),
-					2, js->gc->account, allow_plaintext_auth,
+					2,
+					purple_connection_get_account(js->gc), NULL, NULL,
+					purple_connection_get_account(js->gc), allow_plaintext_auth,
 					disallow_plaintext_auth);
 			return;
 		}
@@ -562,7 +564,9 @@
 				purple_request_yes_no(js->gc, _("Plaintext Authentication"),
 						_("Plaintext Authentication"),
 						_("This server requires plaintext authentication over an unencrypted connection.  Allow this and continue authentication?"),
-						2, js->gc->account, allow_plaintext_auth,
+						2,
+						purple_connection_get_account(js->gc), NULL, NULL,
+						purple_connection_get_account(js->gc), allow_plaintext_auth,
 						disallow_plaintext_auth);
 				return;
 			}
--- a/libpurple/protocols/jabber/buddy.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sat Apr 28 18:32:47 2007 +0000
@@ -383,7 +383,6 @@
 	JabberIq *iq;
 	JabberStream *js = gc->proto_data;
 	xmlnode *vc_node;
-	char *avatar_file = NULL;
 	struct tag_attr *tag_attr;
 
 	g_free(js->avatar_hash);
@@ -393,7 +392,6 @@
 	 * Send only if there's actually any *information* to send
 	 */
 	vc_node = info ? xmlnode_from_str(info, -1) : NULL;
-	avatar_file = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(gc->account));
 
 	if(!vc_node) {
 		vc_node = xmlnode_new("vCard");
@@ -403,27 +401,29 @@
 
 	if (vc_node->name &&
 			!g_ascii_strncasecmp(vc_node->name, "vCard", 5)) {
-		GError *error = NULL;
-		gchar *avatar_data_tmp;
-		guchar *avatar_data;
-		gsize avatar_len;
+		PurpleStoredImage *img;
 
-		if(avatar_file && g_file_get_contents(avatar_file, &avatar_data_tmp, &avatar_len, &error)) {
+		if ((img = purple_buddy_icons_find_account_icon(gc->account))) {
+			gconstpointer avatar_data;
+			gsize avatar_len;
 			xmlnode *photo, *binval;
 			gchar *enc;
 			int i;
 			unsigned char hashval[20];
 			char *p, hash[41];
 
-			avatar_data = (guchar *) avatar_data_tmp;
+			avatar_data = purple_imgstore_get_data(img);
+			avatar_len = purple_imgstore_get_size(img);
 			photo = xmlnode_new_child(vc_node, "PHOTO");
 			binval = xmlnode_new_child(photo, "BINVAL");
 			enc = purple_base64_encode(avatar_data, avatar_len);
 
-			purple_cipher_digest_region("sha1", (guchar *)avatar_data,
+			purple_cipher_digest_region("sha1", avatar_data,
 									  avatar_len, sizeof(hashval),
 									  hashval, NULL);
 
+			purple_imgstore_unref(img);
+
 			p = hash;
 			for(i=0; i<20; i++, p+=2)
 				snprintf(p, 3, "%02x", hashval[i]);
@@ -431,11 +431,7 @@
 
 			xmlnode_insert_data(binval, enc, -1);
 			g_free(enc);
-			g_free(avatar_data);
-		} else if (error != NULL) {
-			g_error_free(error);
 		}
-		g_free(avatar_file);
 
 		iq = jabber_iq_new(js, JABBER_IQ_SET);
 		xmlnode_insert_child(iq->node, vc_node);
@@ -445,7 +441,7 @@
 	}
 }
 
-void jabber_set_buddy_icon(PurpleConnection *gc, const char *iconfile)
+void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
 {
 	PurplePresence *gpresence;
 	PurpleStatus *status;
@@ -586,6 +582,7 @@
 						fields,
 						_("Save"), G_CALLBACK(jabber_format_info),
 						_("Cancel"), NULL,
+						purple_connection_get_account(gc), NULL, NULL,
 						gc);
 }
 
@@ -714,7 +711,7 @@
 	purple_notify_user_info_destroy(user_info);
 
 	while(jbi->vcard_imgids) {
-		purple_imgstore_unref(GPOINTER_TO_INT(jbi->vcard_imgids->data));
+		purple_imgstore_unref_by_id(GPOINTER_TO_INT(jbi->vcard_imgids->data));
 		jbi->vcard_imgids = g_slist_delete_link(jbi->vcard_imgids, jbi->vcard_imgids);
 	}
 
@@ -958,25 +955,23 @@
 					gboolean photo = (strcmp(child->name, "PHOTO") == 0);
 
 					data = purple_base64_decode(bintext, &size);
-
-					jbi->vcard_imgids = g_slist_prepend(jbi->vcard_imgids, GINT_TO_POINTER(purple_imgstore_add(data, size, "logo.png")));
-					g_string_append_printf(info_text,
-							"<b>%s:</b> <img id='%d'><br/>",
-							photo ? _("Photo") : _("Logo"),
-							GPOINTER_TO_INT(jbi->vcard_imgids->data));
-
-					purple_buddy_icons_set_for_user(js->gc->account, bare_jid,
-							data, size);
+					if (data) {
+						jbi->vcard_imgids = g_slist_prepend(jbi->vcard_imgids, GINT_TO_POINTER(purple_imgstore_add_with_id(g_memdup(data, size), size, "logo.png")));
+						g_string_append_printf(info_text,
+								"<b>%s:</b> <img id='%d'><br/>",
+								photo ? _("Photo") : _("Logo"),
+								GPOINTER_TO_INT(jbi->vcard_imgids->data));
+	
+						purple_cipher_digest_region("sha1", (guchar *)data, size,
+								sizeof(hashval), hashval, NULL);
+						p = hash;
+						for(i=0; i<20; i++, p+=2)
+							snprintf(p, 3, "%02x", hashval[i]);
 
-					purple_cipher_digest_region("sha1", (guchar *)data, size,
-							sizeof(hashval), hashval, NULL);
-					p = hash;
-					for(i=0; i<20; i++, p+=2)
-						snprintf(p, 3, "%02x", hashval[i]);
-					purple_blist_node_set_string((PurpleBlistNode*)b, "avatar_hash", hash);
-
-					g_free(data);
-					g_free(bintext);
+						purple_buddy_icons_set_for_user(js->gc->account, bare_jid,
+								data, size, hash);
+						g_free(bintext);
+					}
 				}
 			}
 			g_free(text);
@@ -1765,7 +1760,9 @@
 		purple_request_fields(js->gc, _("Search for Jabber users"),
 				_("Search for Jabber users"), instructions, fields,
 				_("Search"), G_CALLBACK(user_search_cb),
-				_("Cancel"), G_CALLBACK(user_search_cancel_cb), usi);
+				_("Cancel"), G_CALLBACK(user_search_cancel_cb),
+				NULL, NULL, NULL,
+				usi);
 
 		g_free(instructions);
 	}
@@ -1799,7 +1796,9 @@
 			js->user_directories ? js->user_directories->data : "users.jabber.org",
 			FALSE, FALSE, NULL,
 			_("Search Directory"), PURPLE_CALLBACK(jabber_user_search_ok),
-			_("Cancel"), NULL, js);
+			_("Cancel"), NULL,
+			NULL, NULL, NULL,
+			js);
 }
 
 
--- a/libpurple/protocols/jabber/buddy.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/buddy.h	Sat Apr 28 18:32:47 2007 +0000
@@ -91,7 +91,7 @@
 
 void jabber_set_info(PurpleConnection *gc, const char *info);
 void jabber_setup_set_info(PurplePluginAction *action);
-void jabber_set_buddy_icon(PurpleConnection *gc, const char *iconfile);
+void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img);
 
 const char *jabber_buddy_state_get_name(JabberBuddyState state);
 const char *jabber_buddy_state_get_status_id(JabberBuddyState state);
--- a/libpurple/protocols/jabber/chat.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/chat.c	Sat Apr 28 18:32:47 2007 +0000
@@ -785,7 +785,9 @@
 			js->chat_servers ? js->chat_servers->data : "conference.jabber.org",
 			FALSE, FALSE, NULL,
 			_("Find Rooms"), PURPLE_CALLBACK(roomlist_ok_cb),
-			_("Cancel"), PURPLE_CALLBACK(roomlist_cancel_cb), js);
+			_("Cancel"), PURPLE_CALLBACK(roomlist_cancel_cb),
+			purple_connection_get_account(gc), NULL, NULL,			 
+			js);
 
 	return js->roomlist;
 }
--- a/libpurple/protocols/jabber/jabber.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat Apr 28 18:32:47 2007 +0000
@@ -871,7 +871,9 @@
 		purple_request_fields(js->gc, _("Register New Jabber Account"),
 				_("Register New Jabber Account"), instructions, fields,
 				_("Register"), G_CALLBACK(jabber_register_cb),
-				_("Cancel"), G_CALLBACK(jabber_register_cancel_cb), js);
+				_("Cancel"), G_CALLBACK(jabber_register_cancel_cb),
+				purple_connection_get_account(js->gc), NULL, NULL,
+				js);
 
 		g_free(instructions);
 	}
@@ -1366,7 +1368,9 @@
 	purple_request_fields(js->gc, _("Change Jabber Password"),
 			_("Change Jabber Password"), _("Please enter your new password"),
 			fields, _("OK"), G_CALLBACK(jabber_password_change_cb),
-			_("Cancel"), NULL, js);
+			_("Cancel"), NULL,
+			purple_connection_get_account(gc), NULL, NULL,			  
+			js);
 }
 
 GList *jabber_actions(PurplePlugin *plugin, gpointer context)
--- a/libpurple/protocols/jabber/presence.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sat Apr 28 18:32:47 2007 +0000
@@ -201,7 +201,6 @@
 static void jabber_vcard_parse_avatar(JabberStream *js, xmlnode *packet, gpointer blah)
 {
 	JabberBuddy *jb = NULL;
-	PurpleBuddy *b = NULL;
 	xmlnode *vcard, *photo, *binval;
 	char *text;
 	guchar *data;
@@ -221,22 +220,19 @@
 				(( (binval = xmlnode_get_child(photo, "BINVAL")) &&
 				(text = xmlnode_get_data(binval))) ||
 				(text = xmlnode_get_data(photo)))) {
+			unsigned char hashval[20];
+			char hash[41], *p;
+			int i;
+
 			data = purple_base64_decode(text, &size);
 
-			purple_buddy_icons_set_for_user(js->gc->account, from, data, size);
-			if((b = purple_find_buddy(js->gc->account, from))) {
-				unsigned char hashval[20];
-				char hash[41], *p;
-				int i;
+			purple_cipher_digest_region("sha1", data, size,
+					sizeof(hashval), hashval, NULL);
+			p = hash;
+			for(i=0; i<20; i++, p+=2)
+				snprintf(p, 3, "%02x", hashval[i]);
 
-				purple_cipher_digest_region("sha1", data, size,
-						sizeof(hashval), hashval, NULL);
-				p = hash;
-				for(i=0; i<20; i++, p+=2)
-					snprintf(p, 3, "%02x", hashval[i]);
-				purple_blist_node_set_string((PurpleBlistNode*)b, "avatar_hash", hash);
-			}
-			g_free(data);
+			purple_buddy_icons_set_for_user(js->gc->account, from, data, size, hash);
 			g_free(text);
 		}
 	}
@@ -358,10 +354,11 @@
 										_("You are creating a new room.  Would"
 											" you like to configure it, or"
 											" accept the default settings?"),
-										1, chat, 2, _("_Configure Room"),
-										G_CALLBACK(jabber_chat_request_room_configure),
-										_("_Accept Defaults"),
-										G_CALLBACK(jabber_chat_create_instant_room));
+										/* Default Action */ 1,
+										purple_connection_get_account(js->gc), NULL, chat->conv,
+										chat, 2,
+										_("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure),
+										_("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room));
 						}
 					}
 				}
@@ -520,7 +517,7 @@
 		}
 
 		if(avatar_hash) {
-			const char *avatar_hash2 = purple_blist_node_get_string((PurpleBlistNode*)b, "avatar_hash");
+			const char *avatar_hash2 = purple_buddy_icons_get_checksum_for_user(b);
 			if(!avatar_hash2 || strcmp(avatar_hash, avatar_hash2)) {
 				JabberIq *iq;
 				xmlnode *vcard;
--- a/libpurple/protocols/jabber/xdata.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/jabber/xdata.c	Sat Apr 28 18:32:47 2007 +0000
@@ -334,7 +334,9 @@
 
 	handle = purple_request_fields(js->gc, title, title, instructions, fields,
 			_("OK"), G_CALLBACK(jabber_x_data_ok_cb),
-			_("Cancel"), G_CALLBACK(jabber_x_data_cancel_cb), data);
+			_("Cancel"), G_CALLBACK(jabber_x_data_cancel_cb),
+			purple_connection_get_account(js->gc), /* XXX Do we have a who here? */ NULL, NULL,
+			data);
 
 	g_free(title);
 	g_free(instructions);
--- a/libpurple/protocols/msn/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,7 @@
 EXTRA_DIST = \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 MSNSOURCES = \
 	cmdproc.c \
--- a/libpurple/protocols/msn/dialog.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/dialog.c	Sat Apr 28 18:32:47 2007 +0000
@@ -128,6 +128,7 @@
 	}
 
 	purple_request_action(gc, NULL, msg, reason, PURPLE_DEFAULT_ACTION_NONE, 
+						purple_connection_get_account(gc), data->who, NULL,
 						data, 2,
 						_("Yes"), G_CALLBACK(msn_add_cb),
 						_("No"), G_CALLBACK(msn_rem_cb));
--- a/libpurple/protocols/msn/msn.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Sat Apr 28 18:32:47 2007 +0000
@@ -247,7 +247,9 @@
 						 "see you as."),
 					   purple_connection_get_display_name(gc), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_act_id),
-					   _("Cancel"), NULL, gc);
+					   _("Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
+					   gc);
 }
 
 static void
@@ -262,7 +264,9 @@
 	purple_request_input(gc, NULL, _("Set your home phone number."), NULL,
 					   msn_user_get_home_phone(session->user), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_set_home_phone_cb),
-					   _("Cancel"), NULL, gc);
+					   _("Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
+					   gc);
 }
 
 static void
@@ -277,7 +281,9 @@
 	purple_request_input(gc, NULL, _("Set your work phone number."), NULL,
 					   msn_user_get_work_phone(session->user), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_set_work_phone_cb),
-					   _("Cancel"), NULL, gc);
+					   _("Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
+					   gc);
 }
 
 static void
@@ -292,7 +298,9 @@
 	purple_request_input(gc, NULL, _("Set your mobile phone number."), NULL,
 					   msn_user_get_mobile_phone(session->user), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_set_mobile_phone_cb),
-					   _("Cancel"), NULL, gc);
+					   _("Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
+					   gc);
 }
 
 static void
@@ -306,7 +314,9 @@
 						_("Do you want to allow or disallow people on "
 						  "your buddy list to send you MSN Mobile pages "
 						  "to your cell phone or other mobile device?"),
-						-1, gc, 3,
+						-1, 
+						purple_connection_get_account(gc), NULL, NULL,
+						gc, 3,
 						_("Allow"), G_CALLBACK(enable_msn_pages_cb),
 						_("Disallow"), G_CALLBACK(disable_msn_pages_cb),
 						_("Cancel"), NULL);
@@ -354,6 +364,7 @@
 					   NULL, TRUE, FALSE, NULL,
 					   _("Page"), G_CALLBACK(send_to_mobile_cb),
 					   _("Close"), G_CALLBACK(close_mobile_page_cb),
+					   purple_connection_get_account(gc), purple_buddy_get_name(buddy), NULL,
 					   data);
 }
 
@@ -1290,7 +1301,7 @@
 }
 
 static void
-msn_set_buddy_icon(PurpleConnection *gc, const char *filename)
+msn_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
 {
 	MsnSession *session;
 	MsnUser *user;
@@ -1298,7 +1309,7 @@
 	session = gc->proto_data;
 	user = session->user;
 
-	msn_user_set_buddy_icon(user, filename);
+	msn_user_set_buddy_icon(user, img);
 
 	msn_change_status(session);
 }
@@ -1869,7 +1880,7 @@
 		{
 			char buf[1024];
 			purple_debug_info("msn", "%s is %d bytes\n", photo_url_text, len);
-			id = purple_imgstore_add(url_text, len, NULL);
+			id = purple_imgstore_add_with_id(g_memdup(url_text, len), len, NULL);
 			g_snprintf(buf, sizeof(buf), "<img id=\"%d\"><br>", id);
 			purple_notify_user_info_prepend_pair(user_info, NULL, buf);
 		}
@@ -1888,7 +1899,7 @@
 	g_free(photo_url_text);
 	g_free(info2_data);
 	if (id != -1)
-		purple_imgstore_unref(id);
+		purple_imgstore_unref_by_id(id);
 #endif
 }
 
--- a/libpurple/protocols/msn/object.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/object.c	Sat Apr 28 18:32:47 2007 +0000
@@ -111,11 +111,12 @@
 
 	g_free(obj->creator);
 	g_free(obj->location);
-	g_free(obj->real_location);
 	g_free(obj->friendly);
 	g_free(obj->sha1d);
 	g_free(obj->sha1c);
 
+	purple_imgstore_unref(obj->img);
+
 	if (obj->local)
 		local_objs = g_list_remove(local_objs, obj);
 
@@ -317,21 +318,19 @@
 }
 
 void
-msn_object_set_real_location(MsnObject *obj, const char *real_location)
+msn_object_set_image(MsnObject *obj, PurpleStoredImage *img)
 {
 	g_return_if_fail(obj != NULL);
+	g_return_if_fail(img != NULL);
 
 	/* obj->local = TRUE; */
 
-	if (obj->real_location != NULL)
-		g_free(obj->real_location);
-
-	obj->real_location =
-		(real_location == NULL ? NULL : g_strdup(real_location));
+	purple_imgstore_unref(obj->img);
+	obj->img = purple_imgstore_ref(img);
 }
 
-const char *
-msn_object_get_real_location(const MsnObject *obj)
+PurpleStoredImage *
+msn_object_get_image(const MsnObject *obj)
 {
 	MsnObject *local_obj;
 
@@ -340,7 +339,7 @@
 	local_obj = msn_object_find_local(msn_object_get_sha1(obj));
 
 	if (local_obj != NULL)
-		return local_obj->real_location;
+		return local_obj->img;
 
 	return NULL;
 }
--- a/libpurple/protocols/msn/object.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/object.h	Sat Apr 28 18:32:47 2007 +0000
@@ -24,6 +24,8 @@
 #ifndef _MSN_OBJECT_H_
 #define _MSN_OBJECT_H_
 
+#include "imgstore.h"
+
 #include "internal.h"
 
 typedef enum
@@ -44,7 +46,7 @@
 	char *creator;
 	int size;
 	MsnObjectType type;
-	char *real_location;
+	PurpleStoredImage *img;
 	char *location;
 	char *friendly;
 	char *sha1d;
@@ -134,6 +136,14 @@
 void msn_object_set_sha1c(MsnObject *obj, const char *sha1c);
 
 /**
+ * Associates an image with a MsnObject.
+ *
+ * @param obj The object.
+ * @param img The image to associate.
+ */
+void msn_object_set_image(MsnObject *obj, PurpleStoredImage *img);
+
+/**
  * Returns a MsnObject's creator value.
  *
  * @param obj The object.
@@ -205,9 +215,15 @@
  */
 const char *msn_object_get_sha1(const MsnObject *obj);
 
+/**
+ * Returns the image associated with the MsnObject.
+ *
+ * @param obj The object.
+ *
+ * @return The associated image.
+ */
+PurpleStoredImage *msn_object_get_image(const MsnObject *obj);
+
 void msn_object_set_local(MsnObject *obj);
-const char *msn_object_get_real_location(const MsnObject *obj);
-void msn_object_set_real_location(MsnObject *obj,
-								  const char *real_location);
 
 #endif /* _MSN_OBJECT_H_ */
--- a/libpurple/protocols/msn/session.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/session.c	Sat Apr 28 18:32:47 2007 +0000
@@ -384,7 +384,7 @@
 {
 	PurpleAccount *account;
 	PurpleConnection *gc;
-	char *icon;
+	PurpleStoredImage *img;
 
 	if (session->logged_in)
 		return;
@@ -392,9 +392,9 @@
 	account = session->account;
 	gc = purple_account_get_connection(account);
 
-	icon = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(session->account));
-	msn_user_set_buddy_icon(session->user, icon);
-	g_free(icon);
+	img = purple_buddy_icons_find_account_icon(session->account);
+	msn_user_set_buddy_icon(session->user, img);
+	purple_imgstore_unref(img);
 
 	session->logged_in = TRUE;
 
--- a/libpurple/protocols/msn/slp.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/slp.c	Sat Apr 28 18:32:47 2007 +0000
@@ -248,14 +248,14 @@
 	if (!strcmp(euf_guid, "A4268EEC-FEC5-49E5-95C3-F126696BDBF6"))
 	{
 		/* Emoticon or UserDisplay */
+		char *content;
+		gsize len;
 		MsnSlpSession *slpsession;
 		MsnSlpLink *slplink;
 		MsnSlpMessage *slpmsg;
 		MsnObject *obj;
 		char *msnobj_data;
-		const char *file_name;
-		char *content;
-		gsize len;
+		PurpleStoredImage *img;
 		int type;
 
 		/* Send Ok */
@@ -281,9 +281,8 @@
 			g_return_if_reached();
 		}
 
-		file_name = msn_object_get_real_location(obj);
-
-		if (file_name == NULL)
+		img = msn_object_get_image(obj);
+		if (img == NULL)
 		{
 			purple_debug_error("msn", "Wrong object.\n");
 			msn_object_destroy(obj);
@@ -314,7 +313,7 @@
 #ifdef MSN_DEBUG_SLP
 		slpmsg->info = "SLP DATA";
 #endif
-		msn_slpmsg_open_file(slpmsg, file_name);
+		msn_slpmsg_set_image(slpmsg, img);
 		msn_slplink_queue_slpmsg(slplink, slpmsg);
 	}
 	else if (!strcmp(euf_guid, "5D3E02AB-6190-11D3-BBBB-00C04F795683"))
@@ -445,7 +444,7 @@
 			char *ip_port;
 			int port;
 
-			/* ip_addr = purple_prefs_get_string("/core/ft/public_ip"); */
+			/* ip_addr = purple_prefs_get_string("/purple/ft/public_ip"); */
 			ip_port = "5190";
 			listening = "true";
 			nonce = rand_guid();
@@ -870,7 +869,7 @@
 	if (buddy == NULL)
 		return FALSE;
 
-	old = purple_blist_node_get_string((PurpleBlistNode *)buddy, "icon_checksum");
+	old = purple_buddy_icons_get_checksum_for_user(buddy);
 	new = msn_object_get_sha1(obj);
 
 	if (new == NULL)
@@ -878,7 +877,7 @@
 
 	/* If the old and new checksums are the same, and the file actually exists,
 	 * then return TRUE */
-	if (old != NULL && !strcmp(old, new) && (purple_buddy_icons_find(account, purple_buddy_get_name(buddy)) != NULL))
+	if (old != NULL && !strcmp(old, new))
 		return TRUE;
 
 	return FALSE;
@@ -956,22 +955,7 @@
 
 	if (obj == NULL)
 	{
-		/* It seems the user has not set a msnobject */
-		GSList *sl, *list;
-
-		list = purple_find_buddies(account, user->passport);
-
-		for (sl = list; sl != NULL; sl = sl->next)
-		{
-			PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
-			if (buddy->icon)
-				purple_blist_node_remove_setting((PurpleBlistNode*)buddy, "icon_checksum");
-		}
-		g_slist_free(list);
-
-		/* TODO: I think we need better buddy icon core functions. */
-		purple_buddy_icons_set_for_user(account, user->passport, NULL, 0);
-
+/*		purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); */
 		return;
 	}
 
@@ -1001,7 +985,6 @@
 	MsnUserList *userlist;
 	const char *info;
 	PurpleAccount *account;
-	GSList *sl, *list;
 
 	g_return_if_fail(slpcall != NULL);
 
@@ -1013,18 +996,8 @@
 	userlist = slpcall->slplink->session->userlist;
 	account = slpcall->slplink->session->account;
 
-	/* TODO: I think we need better buddy icon core functions. */
 	purple_buddy_icons_set_for_user(account, slpcall->slplink->remote_user,
-								  (void *)data, size);
-
-	list = purple_find_buddies(account, slpcall->slplink->remote_user);
-
-	for (sl = list; sl != NULL; sl = sl->next)
-	{
-		PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
-		purple_blist_node_set_string((PurpleBlistNode*)buddy, "icon_checksum", info);
-	}
-	g_slist_free(list);
+								  g_memdup(data, size), size, info);
 
 #if 0
 	/* Free one window slot */
@@ -1101,9 +1074,8 @@
 	else
 	{
 		MsnObject *my_obj = NULL;
-		gchar *data = NULL;
-		gsize len = 0;
-		GSList *sl, *list;
+		gconstpointer data = NULL;
+		size_t len = 0;
 
 #ifdef MSN_DEBUG_UD
 		purple_debug_info("msn", "Requesting our own user display\n");
@@ -1113,24 +1085,12 @@
 
 		if (my_obj != NULL)
 		{
-			const char *filename = msn_object_get_real_location(my_obj);
-
-			if (filename != NULL)
-				g_file_get_contents(filename, &data, &len, NULL);
+			PurpleStoredImage *img = msn_object_get_image(my_obj);
+			data = purple_imgstore_get_data(img);
+			len = purple_imgstore_get_size(img);
 		}
 
-		/* TODO: I think we need better buddy icon core functions. */
-		purple_buddy_icons_set_for_user(account, user->passport, (void *)data, len);
-		g_free(data);
-
-		list = purple_find_buddies(account, user->passport);
-
-		for (sl = list; sl != NULL; sl = sl->next)
-		{
-			PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
-			purple_blist_node_set_string((PurpleBlistNode*)buddy, "icon_checksum", info);
-		}
-		g_slist_free(list);
+		purple_buddy_icons_set_for_user(account, user->passport, g_memdup(data, len), len, info);
 
 		/* Free one window slot */
 		session->userlist->buddy_icon_window++;
--- a/libpurple/protocols/msn/slpmsg.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/slpmsg.c	Sat Apr 28 18:32:47 2007 +0000
@@ -65,7 +65,11 @@
 	if (slpmsg->fp != NULL)
 		fclose(slpmsg->fp);
 
-	if (slpmsg->buffer != NULL)
+	purple_imgstore_unref(slpmsg->img);
+
+	/* We don't want to free the data of the PurpleStoredImage,
+	 * but to avoid code duplication, it's sharing buffer. */
+	if (slpmsg->img == NULL)
 		g_free(slpmsg->buffer);
 
 #ifdef MSN_DEBUG_SLP
@@ -101,6 +105,11 @@
 msn_slpmsg_set_body(MsnSlpMessage *slpmsg, const char *body,
 						 long long size)
 {
+	/* We can only have one data source at a time. */
+	g_return_if_fail(slpmsg->buffer == NULL);
+	g_return_if_fail(slpmsg->img == NULL);
+	g_return_if_fail(slpmsg->fp == NULL);
+
 	if (body != NULL)
 		slpmsg->buffer = g_memdup(body, size);
 	else
@@ -110,10 +119,28 @@
 }
 
 void
+msn_slpmsg_set_image(MsnSlpMessage *slpmsg, PurpleStoredImage *img)
+{
+	/* We can only have one data source at a time. */
+	g_return_if_fail(slpmsg->buffer == NULL);
+	g_return_if_fail(slpmsg->img == NULL);
+	g_return_if_fail(slpmsg->fp == NULL);
+
+	slpmsg->img = purple_imgstore_ref(img);
+	slpmsg->buffer = (guchar *)purple_imgstore_get_data(img);
+	slpmsg->size = purple_imgstore_get_size(img);
+}
+
+void
 msn_slpmsg_open_file(MsnSlpMessage *slpmsg, const char *file_name)
 {
 	struct stat st;
 
+	/* We can only have one data source at a time. */
+	g_return_if_fail(slpmsg->buffer == NULL);
+	g_return_if_fail(slpmsg->img == NULL);
+	g_return_if_fail(slpmsg->fp == NULL);
+
 	slpmsg->fp = g_fopen(file_name, "rb");
 
 	if (g_stat(file_name, &st) == 0)
--- a/libpurple/protocols/msn/slpmsg.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/slpmsg.h	Sat Apr 28 18:32:47 2007 +0000
@@ -26,6 +26,8 @@
 
 typedef struct _MsnSlpMessage MsnSlpMessage;
 
+#include "imgstore.h"
+
 #include "slpsession.h"
 #include "slpcall.h"
 #include "slplink.h"
@@ -57,6 +59,7 @@
 	long flags;
 
 	FILE *fp;
+	PurpleStoredImage *img;
 	guchar *buffer;
 	long long offset;
 	long long size;
@@ -90,6 +93,7 @@
 
 void msn_slpmsg_set_body(MsnSlpMessage *slpmsg, const char *body,
 						 long long size);
+void msn_slpmsg_set_image(MsnSlpMessage *slpmsg, PurpleStoredImage *img);
 void msn_slpmsg_open_file(MsnSlpMessage *slpmsg,
 						  const char *file_name);
 MsnSlpMessage * msn_slpmsg_sip_new(MsnSlpCall *slpcall, int cseq,
--- a/libpurple/protocols/msn/user.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/user.c	Sat Apr 28 18:32:47 2007 +0000
@@ -151,23 +151,20 @@
 }
 
 void
-msn_user_set_buddy_icon(MsnUser *user, const char *filename)
+msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img)
 {
-	struct stat st;
-	FILE *fp;
 	MsnObject *msnobj = msn_user_get_object(user);
 
 	g_return_if_fail(user != NULL);
 
-	if (filename == NULL || g_stat(filename, &st) == -1)
-	{
+	if (img == NULL)
 		msn_user_set_object(user, NULL);
-	}
-	else if ((fp = g_fopen(filename, "rb")) != NULL)
+	else
 	{
 		PurpleCipherContext *ctx;
 		char *buf;
-		gsize len;
+		gconstpointer data = purple_imgstore_get_data(img);
+		size_t size = purple_imgstore_get_size(img);
 		char *base64;
 		unsigned char digest[20];
 
@@ -182,26 +179,20 @@
 			msn_user_set_object(user, msnobj);
 		}
 
-		msn_object_set_real_location(msnobj, filename);
-
-		buf = g_malloc(st.st_size);
-		len = fread(buf, 1, st.st_size, fp);
-
-		fclose(fp);
+		msn_object_set_image(msnobj, img);
 
 		/* Compute the SHA1D field. */
 		memset(digest, 0, sizeof(digest));
 
 		ctx = purple_cipher_context_new_by_name("sha1", NULL);
-		purple_cipher_context_append(ctx, (const guchar *)buf, st.st_size);
+		purple_cipher_context_append(ctx, data, size);
 		purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL);
-		g_free(buf);
 
 		base64 = purple_base64_encode(digest, sizeof(digest));
 		msn_object_set_sha1d(msnobj, base64);
 		g_free(base64);
 
-		msn_object_set_size(msnobj, st.st_size);
+		msn_object_set_size(msnobj, size);
 
 		/* Compute the SHA1C field. */
 		buf = g_strdup_printf(
@@ -216,7 +207,7 @@
 		memset(digest, 0, sizeof(digest));
 
 		purple_cipher_context_reset(ctx, NULL);
-		purple_cipher_context_append(ctx, (const guchar *)buf, strlen(buf));
+		purple_cipher_context_append(ctx, data, strlen((char *)data));
 		purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL);
 		purple_cipher_context_destroy(ctx);
 		g_free(buf);
@@ -225,11 +216,6 @@
 		msn_object_set_sha1c(msnobj, base64);
 		g_free(base64);
 	}
-	else
-	{
-		purple_debug_error("msn", "Unable to open buddy icon %s!\n", filename);
-		msn_user_set_object(user, NULL);
-	}
 }
 
 void
--- a/libpurple/protocols/msn/user.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/msn/user.h	Sat Apr 28 18:32:47 2007 +0000
@@ -138,9 +138,9 @@
  * Sets the buddy icon for a local user.
  *
  * @param user     The user.
- * @param filename The path to the buddy icon.
+ * @param img      The buddy icon image
  */
-void msn_user_set_buddy_icon(MsnUser *user, const char *filename);
+void msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img);
 
 /**
  * Sets the group ID list for a user.
--- a/libpurple/protocols/novell/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/novell/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,7 @@
 EXTRA_DIST = \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 NOVELLSOURCES = \
 		nmfield.h \
--- a/libpurple/protocols/novell/novell.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/novell/novell.c	Sat Apr 28 18:32:47 2007 +0000
@@ -1911,7 +1911,9 @@
 	/* Prompt the user */
 	gc = purple_account_get_connection(user->client_data);
 	purple_request_action(gc, title, primary, secondary,
-						PURPLE_DEFAULT_ACTION_NONE, parms, 2,
+						PURPLE_DEFAULT_ACTION_NONE,
+						purple_connection_get_account(gc), name, NULL,
+						parms, 2,
 						_("Yes"), G_CALLBACK(_join_conference_cb),
 						_("No"), G_CALLBACK(_reject_conference_cb));
 
--- a/libpurple/protocols/oscar/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/oscar/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -3,7 +3,7 @@
 		AUTHORS \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 OSCARSOURCES = \
 	bstream.c           \
--- a/libpurple/protocols/oscar/odc.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/oscar/odc.c	Sat Apr 28 18:32:47 2007 +0000
@@ -353,7 +353,7 @@
 
 			if ((embedded_data != NULL) && (embedded_data->size == size))
 			{
-				imgid = purple_imgstore_add(embedded_data->data, size, src);
+				imgid = purple_imgstore_add_with_id(g_memdup(embedded_data->data, size), size, src);
 
 				/* Record the image number */
 				images = g_slist_append(images, GINT_TO_POINTER(imgid));
@@ -406,7 +406,7 @@
 	{
 		GSList *l;
 		for (l = images; l != NULL; l = l->next)
-			purple_imgstore_unref(GPOINTER_TO_INT(l->data));
+			purple_imgstore_unref_by_id(GPOINTER_TO_INT(l->data));
 		g_slist_free(images);
 	}
 
--- a/libpurple/protocols/oscar/oscar.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sat Apr 28 18:32:47 2007 +0000
@@ -1432,6 +1432,7 @@
 					   FALSE, FALSE, NULL,
 					   _("_OK"), G_CALLBACK(purple_parse_auth_securid_request_yes_cb),
 					   _("_Cancel"), G_CALLBACK(purple_parse_auth_securid_request_no_cb),
+					   account, NULL, NULL,
 					   gc);
 	g_free(primary);
 
@@ -1841,34 +1842,14 @@
 	bi->ipaddr = info->icqinfo.ipaddr;
 
 	if (info->iconcsumlen) {
-		const char *filename, *saved_b16 = NULL;
-		char *b16 = NULL, *filepath = NULL;
+		const char *saved_b16 = NULL;
+		char *b16 = NULL;
 		PurpleBuddy *b = NULL;
 
 		b16 = purple_base16_encode(info->iconcsum, info->iconcsumlen);
 		b = purple_find_buddy(account, info->sn);
-		/*
-		 * If for some reason the checksum is valid, but cached file is not..
-		 * we want to know.
-		 */
 		if (b != NULL)
-			filename = purple_blist_node_get_string((PurpleBlistNode*)b, "buddy_icon");
-		else
-			filename = NULL;
-		if (filename != NULL) {
-			if (g_file_test(filename, G_FILE_TEST_EXISTS))
-				saved_b16 = purple_blist_node_get_string((PurpleBlistNode*)b,
-						"icon_checksum");
-			else {
-				filepath = g_build_filename(purple_buddy_icons_get_cache_dir(),
-											filename, NULL);
-				if (g_file_test(filepath, G_FILE_TEST_EXISTS))
-					saved_b16 = purple_blist_node_get_string((PurpleBlistNode*)b,
-															"icon_checksum");
-				g_free(filepath);
-			}
-		} else
-			saved_b16 = NULL;
+			saved_b16 = purple_buddy_icons_get_checksum_for_user(b);
 
 		if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) {
 			GSList *cur = od->requesticon;
@@ -1915,7 +1896,7 @@
 	PurpleAccount *account = purple_connection_get_account(gc);
 	PurpleMessageFlags flags = 0;
 	struct buddyinfo *bi;
-	char *iconfile;
+	PurpleStoredImage *img;
 	GString *message;
 	gchar *tmp;
 	aim_mpmsg_section_t *curpart;
@@ -1952,33 +1933,19 @@
 		}
 	}
 
-	iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account));
-	if ((iconfile != NULL) &&
+	img = purple_buddy_icons_find_account_icon(account);
+	if ((img != NULL) &&
 	    (args->icbmflags & AIM_IMFLAGS_BUDDYREQ) && !bi->ico_sent && bi->ico_informed) {
-		FILE *file;
-		struct stat st;
-
-		if (!g_stat(iconfile, &st)) {
-			guchar *buf = g_malloc(st.st_size);
-			file = g_fopen(iconfile, "rb");
-			if (file) {
-				/* XXX - Use g_file_get_contents() */
-				/* g_file_get_contents(iconfile, &data, &len, NULL); */
-				int len = fread(buf, 1, st.st_size, file);
-				purple_debug_info("oscar",
-						   "Sending buddy icon to %s (%d bytes, "
-						   "%lu reported)\n",
-						   userinfo->sn, len, st.st_size);
-				aim_im_sendch2_icon(od, userinfo->sn, buf, st.st_size,
-					st.st_mtime, aimutil_iconsum(buf, st.st_size));
-				fclose(file);
-			} else
-				purple_debug_error("oscar", "Can't open buddy icon file!\n");
-			g_free(buf);
-		} else
-			purple_debug_error("oscar", "Can't stat buddy icon file!\n");
-	}
-	g_free(iconfile);
+		gconstpointer data = purple_imgstore_get_data(img);
+		size_t len = purple_imgstore_get_size(img);
+		purple_debug_info("oscar",
+				   "Sending buddy icon to %s (%d bytes)\n",
+				   userinfo->sn, len);
+		/* TODO: XXX: FIXME: Does this actually need the mtime of the file? */
+		aim_im_sendch2_icon(od, userinfo->sn, data, len,
+			time(NULL), aimutil_iconsum(data, len));
+	}
+	purple_imgstore_unref(img);
 
 	message = g_string_new("");
 	curpart = args->mpmsg.parts;
@@ -2176,8 +2143,9 @@
 	else if (args->type & OSCAR_CAPABILITY_BUDDYICON)
 	{
 		purple_buddy_icons_set_for_user(account, userinfo->sn,
-									  args->info.icon.icon,
-									  args->info.icon.length);
+									  g_memdup(args->info.icon.icon, args->info.icon.length),
+									  args->info.icon.length,
+									  NULL);
 	}
 
 	else if (args->type & OSCAR_CAPABILITY_ICQSERVERRELAY)
@@ -2255,6 +2223,7 @@
 					   NULL, _("Please authorize me!"), TRUE, FALSE, NULL,
 					   _("_OK"), G_CALLBACK(purple_auth_request),
 					   _("_Cancel"), G_CALLBACK(purple_auth_dontrequest),
+					   purple_connection_get_account(gc), name, NULL,
 					   data);
 }
 
@@ -2301,6 +2270,7 @@
 					   NULL, _("No reason given."), TRUE, FALSE, NULL,
 					   _("_OK"), G_CALLBACK(purple_auth_dontgrant),
 					   _("_Cancel"), G_CALLBACK(oscar_free_name_data),
+					   purple_connection_get_account(data->gc), data->name, NULL,
 					   data);
 }
 
@@ -2485,7 +2455,9 @@
 					purple_request_action(gc, NULL, message,
 										_("Do you want to add this buddy "
 										  "to your buddy list?"),
-										PURPLE_DEFAULT_ACTION_NONE, data, 2,
+										PURPLE_DEFAULT_ACTION_NONE,
+										purple_connection_get_account(gc), data->name, NULL,
+										data, 2,
 										_("_Add"), G_CALLBACK(purple_icq_buddyadd),
 										_("_Decline"), G_CALLBACK(oscar_free_name_data));
 					g_free(message);
@@ -3273,16 +3245,10 @@
 	 * no icon is set.  Ignore these.
 	 */
 	if ((iconlen > 0) && (iconlen != 90)) {
-		char *b16;
-		PurpleBuddy *b;
+		char *b16 = purple_base16_encode(iconcsum, iconcsumlen);
 		purple_buddy_icons_set_for_user(purple_connection_get_account(gc),
-									  sn, icon, iconlen);
-		b16 = purple_base16_encode(iconcsum, iconcsumlen);
-		b = purple_find_buddy(gc->account, sn);
-		if ((b16 != NULL) && (b != NULL)) {
-			purple_blist_node_set_string((PurpleBlistNode*)b, "icon_checksum", b16);
-			g_free(b16);
-		}
+									  sn, g_memdup(icon, iconlen), iconlen, b16);
+		g_free(b16);
 	}
 
 	cur = od->requesticon;
@@ -3320,29 +3286,17 @@
 	}
 
 	if (od->set_icon) {
-		struct stat st;
-		char *iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(purple_connection_get_account(gc)));
-		if (iconfile == NULL) {
+		PurpleAccount *account = purple_connection_get_account(gc);
+		PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
+		if (img == NULL) {
 			aim_ssi_delicon(od);
-		} else if (!g_stat(iconfile, &st)) {
-			guchar *buf = g_malloc(st.st_size);
-			FILE *file = g_fopen(iconfile, "rb");
-			if (file) {
-				/* XXX - Use g_file_get_contents()? */
-				fread(buf, 1, st.st_size, file);
-				fclose(file);
-				purple_debug_info("oscar",
-					   "Uploading icon to icon server\n");
-				aim_bart_upload(od, buf, st.st_size);
-			} else
-				purple_debug_error("oscar",
-					   "Can't open buddy icon file!\n");
-			g_free(buf);
 		} else {
-			purple_debug_error("oscar",
-				   "Can't stat buddy icon file!\n");
+			purple_debug_info("oscar",
+				   "Uploading icon to icon server\n");
+			aim_bart_upload(od, purple_imgstore_get_data(img), 
+			                purple_imgstore_get_size(img));
+			purple_imgstore_unref(img);
 		}
-		g_free(iconfile);
 		od->set_icon = FALSE;
 	}
 
@@ -4140,11 +4094,11 @@
 		id = g_datalist_get_data(&attribs, "id");
 
 		/* ... if it refers to a valid purple image ... */
-		if (id && (image = purple_imgstore_get(atoi(id)))) {
+		if (id && (image = purple_imgstore_find_by_id(atoi(id)))) {
 			/* ... append the message from start to the tag ... */
 			unsigned long size = purple_imgstore_get_size(image);
 			const char *filename = purple_imgstore_get_filename(image);
-			gpointer imgdata = purple_imgstore_get_data(image);
+			gconstpointer imgdata = purple_imgstore_get_data(image);
 
 			oscar_id++;
 
@@ -4203,13 +4157,11 @@
 	PurpleAccount *account;
 	PeerConnection *conn;
 	int ret;
-	char *iconfile;
 	char *tmp1, *tmp2;
 
 	od = (OscarData *)gc->proto_data;
 	account = purple_connection_get_account(gc);
 	ret = 0;
-	iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account));
 
 	if (imflags & PURPLE_MESSAGE_AUTO_RESP)
 		tmp1 = purple_str_sub_away_formatters(message, name);
@@ -4224,9 +4176,9 @@
 	} else {
 		struct buddyinfo *bi;
 		struct aim_sendimext_args args;
-		struct stat st;
 		gsize len;
 		PurpleConversation *conv;
+		PurpleStoredImage *img;
 
 		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, name, account);
 
@@ -4275,44 +4227,38 @@
 			bi->ico_need = FALSE;
 		}
 
-		if (iconfile && !g_stat(iconfile, &st)) {
-			FILE *file = g_fopen(iconfile, "rb");
-			if (file) {
-				guchar *buf = g_malloc(st.st_size);
-				/* TODO: Use g_file_get_contents()? */
-				fread(buf, 1, st.st_size, file);
-				fclose(file);
-
-				args.iconlen   = st.st_size;
-				args.iconsum   = aimutil_iconsum(buf, st.st_size);
-				args.iconstamp = st.st_mtime;
-
-				if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) {
-					bi->ico_informed = FALSE;
-					bi->ico_sent     = FALSE;
-				}
-
-				/*
-				 * TODO:
-				 * For some reason sending our icon to people only works
-				 * when we're the ones who initiated the conversation.  If
-				 * the other person sends the first IM then they never get
-				 * the icon.  We should fix that.
-				 */
-				if (!bi->ico_informed) {
-					purple_debug_info("oscar",
-							   "Claiming to have a buddy icon\n");
-					args.flags |= AIM_IMFLAGS_HASICON;
-					bi->ico_me_len = args.iconlen;
-					bi->ico_me_csum = args.iconsum;
-					bi->ico_me_time = args.iconstamp;
-					bi->ico_informed = TRUE;
-				}
-
-				g_free(buf);
+		img = purple_buddy_icons_find_account_icon(account);
+		if (img) {
+			gconstpointer data = purple_imgstore_get_data(img);
+			args.iconlen   = purple_imgstore_get_size(img);
+			args.iconsum   = aimutil_iconsum(data, args.iconlen);
+			/* TODO: XXX: FIXME: Deal with the timestamp issue. */
+			args.iconstamp = time(NULL);
+
+			if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) {
+				bi->ico_informed = FALSE;
+				bi->ico_sent     = FALSE;
 			}
+
+			/*
+			 * TODO:
+			 * For some reason sending our icon to people only works
+			 * when we're the ones who initiated the conversation.  If
+			 * the other person sends the first IM then they never get
+			 * the icon.  We should fix that.
+			 */
+			if (!bi->ico_informed) {
+				purple_debug_info("oscar",
+						   "Claiming to have a buddy icon\n");
+				args.flags |= AIM_IMFLAGS_HASICON;
+				bi->ico_me_len = args.iconlen;
+				bi->ico_me_csum = args.iconsum;
+				bi->ico_me_time = args.iconstamp;
+				bi->ico_informed = TRUE;
+			}
+
+			purple_imgstore_unref(img);
 		}
-		g_free(iconfile);
 
 		args.destsn = name;
 
@@ -4786,8 +4732,7 @@
 	PurpleBuddy *b;
 	struct aim_ssi_item *curitem;
 	guint32 tmp;
-	const char *icon_path;
-	char *cached_icon_path;
+	PurpleStoredImage *img;
 	va_list ap;
 	guint16 fmtver, numitems;
 	guint32 timestamp;
@@ -5020,10 +4965,9 @@
 	 * the event that the local user set a new icon while this
 	 * account was offline.
 	 */
-	icon_path = purple_account_get_buddy_icon(account);
-	cached_icon_path = purple_buddy_icons_get_full_path(icon_path);
-	oscar_set_icon(gc, cached_icon_path);
-	g_free(cached_icon_path);
+	img = purple_buddy_icons_find_account_icon(account);
+	oscar_set_icon(gc, img);
+	purple_imgstore_unref(img);
 
 	return 1;
 }
@@ -5149,6 +5093,7 @@
 	purple_debug_info("oscar",
 			   "ssi: %s has given you permission to add him to your buddy list\n", sn);
 
+	/* XXX Should data->nick store the alias and nombre just have the sn? -evands */
 	buddy = purple_find_buddy(gc->account, sn);
 	if (buddy && (purple_buddy_get_alias_only(buddy)))
 		nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy));
@@ -5162,7 +5107,9 @@
 	data->nick = NULL;
 
 	purple_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg,
-						PURPLE_DEFAULT_ACTION_NONE, data,
+						PURPLE_DEFAULT_ACTION_NONE,
+						purple_connection_get_account(gc), sn, NULL,
+						data,
 						G_CALLBACK(purple_icq_buddyadd),
 						G_CALLBACK(oscar_free_name_data));
 
@@ -5625,37 +5572,27 @@
 					od->set_icon = TRUE;
 					aim_srv_requestnew(od, SNAC_FAMILY_BART);
 				} else {
-					struct stat st;
-					char *iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(purple_connection_get_account(gc)));
-					if (iconfile == NULL) {
+					PurpleAccount *account = purple_connection_get_account(gc);
+					PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
+					if (img == NULL) {
 						aim_ssi_delicon(od);
-					} else if (!g_stat(iconfile, &st)) {
-						guchar *buf = g_malloc(st.st_size);
-						FILE *file = g_fopen(iconfile, "rb");
-						if (file) {
-							/* XXX - Use g_file_get_contents()? */
-							fread(buf, 1, st.st_size, file);
-							fclose(file);
-							purple_debug_info("oscar",
-											"Uploading icon to icon server\n");
-							aim_bart_upload(od, buf, st.st_size);
-						} else
-							purple_debug_error("oscar",
-											 "Can't open buddy icon file!\n");
-						g_free(buf);
 					} else {
-						purple_debug_error("oscar",
-										 "Can't stat buddy icon file!\n");
+
+						purple_debug_info("oscar",
+										"Uploading icon to icon server\n");
+						aim_bart_upload(od, purple_imgstore_get_data(img),
+						                purple_imgstore_get_size(img));
+						purple_imgstore_unref(img);
 					}
-					g_free(iconfile);
 				}
 			} else if (flags == 0x81) {
-				char *iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(purple_connection_get_account(gc)));
-				if (iconfile == NULL)
+				PurpleAccount *account = purple_connection_get_account(gc);
+				PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
+				if (img == NULL)
 					aim_ssi_delicon(od);
 				else {
 					aim_ssi_seticon(od, md5, length);
-					g_free(iconfile);
+					purple_imgstore_unref(img);
 				}
 			}
 		} break;
@@ -5857,6 +5794,7 @@
 					   comment_utf8, TRUE, FALSE, NULL,
 					   _("_OK"), G_CALLBACK(oscar_ssi_editcomment),
 					   _("_Cancel"), G_CALLBACK(oscar_free_name_data),
+					   purple_connection_get_account(gc), data->name, NULL,
 					   data);
 	g_free(title);
 
@@ -5906,7 +5844,9 @@
 			_("Because this reveals your IP address, it "
 			  "may be considered a security risk.  Do you "
 			  "wish to continue?"),
-			0, data, 2,
+			0,
+			purple_connection_get_account(gc), data->who, NULL,
+			data, 2,
 			_("C_onnect"), G_CALLBACK(oscar_ask_directim_yes_cb),
 			_("_Cancel"), G_CALLBACK(oscar_ask_directim_no_cb));
 	g_free(buf);
@@ -6061,7 +6001,9 @@
 	purple_request_fields(gc, _("ICQ Privacy Options"), _("ICQ Privacy Options"),
 						NULL, fields,
 						_("OK"), G_CALLBACK(oscar_icq_privacy_opts),
-						_("Cancel"), NULL, gc);
+						_("Cancel"), NULL,
+						purple_connection_get_account(gc), NULL, NULL,
+						gc);
 }
 
 static void oscar_format_screenname(PurpleConnection *gc, const char *nick) {
@@ -6133,6 +6075,7 @@
 					   FALSE, FALSE, NULL,
 					   _("_OK"), G_CALLBACK(oscar_change_email),
 					   _("_Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
 					   gc);
 }
 
@@ -6201,7 +6144,9 @@
 						 "searching for."),
 					   NULL, FALSE, FALSE, NULL,
 					   _("_Search"), G_CALLBACK(search_by_email_cb),
-					   _("_Cancel"), NULL, gc);
+					   _("_Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
+					   gc);
 }
 
 static void oscar_show_set_info(PurplePluginAction *action)
@@ -6237,41 +6182,28 @@
 	purple_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1");
 }
 
-void oscar_set_icon(PurpleConnection *gc, const char *iconfile)
+void oscar_set_icon(PurpleConnection *gc, PurpleStoredImage *img)
 {
 	OscarData *od = gc->proto_data;
-	FILE *file;
-	struct stat st;
-
-	if (iconfile == NULL) {
+
+	if (img == NULL) {
 		aim_ssi_delicon(od);
-	} else if (!g_stat(iconfile, &st)) {
-		guchar *buf = g_malloc(st.st_size);
-		file = g_fopen(iconfile, "rb");
-		if (file)
-		{
-			PurpleCipher *cipher;
-			PurpleCipherContext *context;
-			guchar md5[16];
-			int len;
-
-			/* XXX - Use g_file_get_contents()? */
-			len = fread(buf, 1, st.st_size, file);
-			fclose(file);
-
-			cipher = purple_ciphers_find_cipher("md5");
-			context = purple_cipher_context_new(cipher, NULL);
-			purple_cipher_context_append(context, buf, len);
-			purple_cipher_context_digest(context, 16, md5, NULL);
-			purple_cipher_context_destroy(context);
-
-			aim_ssi_seticon(od, md5, 16);
-		} else
-			purple_debug_error("oscar",
-				   "Can't open buddy icon file!\n");
-		g_free(buf);
-	} else
-		purple_debug_error("oscar", "Can't stat buddy icon file!\n");
+	} else {
+		PurpleCipher *cipher;
+		PurpleCipherContext *context;
+		guchar md5[16];
+		gconstpointer data = purple_imgstore_get_data(img);
+		size_t len = purple_imgstore_get_size(img);
+
+
+		cipher = purple_ciphers_find_cipher("md5");
+		context = purple_cipher_context_new(cipher, NULL);
+		purple_cipher_context_append(context, data, len);
+		purple_cipher_context_digest(context, 16, md5, NULL);
+		purple_cipher_context_destroy(context);
+
+		aim_ssi_seticon(od, md5, 16);
+	}
 }
 
 /**
--- a/libpurple/protocols/oscar/oscarcommon.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/oscar/oscarcommon.h	Sat Apr 28 18:32:47 2007 +0000
@@ -81,7 +81,7 @@
 void oscar_rename_group(PurpleConnection *gc, const char *old_name, PurpleGroup *group, GList *moved_buddies);
 void oscar_convo_closed(PurpleConnection *gc, const char *who);
 const char *oscar_normalize(const PurpleAccount *account, const char *str);
-void oscar_set_icon(PurpleConnection *gc, const char *iconfile);
+void oscar_set_icon(PurpleConnection *gc, PurpleStoredImage *img);
 gboolean oscar_can_receive_file(PurpleConnection *gc, const char *who);
 void oscar_send_file(PurpleConnection *gc, const char *who, const char *file);
 PurpleXfer *oscar_new_xfer(PurpleConnection *gc, const char *who);
--- a/libpurple/protocols/oscar/peer.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/oscar/peer.c	Sat Apr 28 18:32:47 2007 +0000
@@ -1016,7 +1016,9 @@
 						  "Images.  Because your IP address will be "
 						  "revealed, this may be considered a privacy "
 						  "risk."),
-						PURPLE_DEFAULT_ACTION_NONE, conn, 2,
+						PURPLE_DEFAULT_ACTION_NONE,
+						account, sn, NULL,
+						conn, 2,
 						_("_Connect"), G_CALLBACK(peer_connection_got_proposition_yes_cb),
 						_("Cancel"), G_CALLBACK(peer_connection_got_proposition_no_cb));
 	}
--- a/libpurple/protocols/qq/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,7 @@
 EXTRA_DIST = \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 QQSOURCES = \
 	buddy_info.c \
--- a/libpurple/protocols/qq/buddy_info.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/buddy_info.c	Sat Apr 28 18:32:47 2007 +0000
@@ -482,6 +482,7 @@
 			_("Modify my information"), NULL, fields,
 			_("Update my information"), G_CALLBACK(modify_info_ok_cb),
 			_("Cancel"), G_CALLBACK(modify_info_cancel_cb),
+			purple_connection_get_account(gc), NULL, NULL,
 			mid);
 	}
 }
@@ -531,27 +532,21 @@
 	qq_send_packet_get_info(gc, qd->uid, FALSE);
 }
 
-void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *iconfile)
+void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *icon_num, const gchar *iconfile)
 {
-	FILE *file;
-	struct stat st;
+	gchar *data;
+	gsize len;
 
-	g_return_if_fail(g_stat(iconfile, &st) == 0);
-	file = g_fopen(iconfile, "rb");
-	if (file) {
-		PurpleBuddyIcon *icon;
-		size_t data_len;
-		gchar *data = g_new(gchar, st.st_size + 1);
-		data_len = fread(data, 1, st.st_size, file);
-		fclose(file);
-		purple_buddy_icons_set_for_user(account, who, data, data_len);
-		icon = purple_buddy_icons_find(account, who);
-		purple_buddy_icon_set_path(icon, iconfile);
+	if (!g_file_get_contents(iconfile, &data, &len, NULL))
+		g_return_if_reached();
+	else
+	{
+		purple_buddy_icons_set_for_user(account, who, data, len, icon_num);
 	}
 }
 
 /* TODO: custom faces for QQ members and users with level >= 16 */
-void qq_set_my_buddy_icon(PurpleConnection *gc, const gchar *iconfile)
+void qq_set_my_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
 {
 	gchar *icon;
 	gint icon_num;
@@ -600,25 +595,29 @@
 	/* tell server my icon changed */
 	_qq_send_packet_modify_face(gc, icon_num);
 	/* display in blist */
-	qq_set_buddy_icon_for_user(account, account->username, icon_path);
+	qq_set_buddy_icon_for_user(account, account->username, icon, icon_path);
 }
 
 
 static void _qq_update_buddy_icon(PurpleAccount *account, const gchar *name, gint face)
 {
-	gchar *icon_path;
 	PurpleBuddyIcon *icon = purple_buddy_icons_find(account, name);
 	gchar *icon_num_str = face_to_icon_str(face);
-	const gchar *old_path = purple_buddy_icon_get_path(icon);
-	const gchar *buddy_icon_dir = qq_buddy_icon_dir();
+	const gchar *old_icon_num = purple_buddy_icon_get_checksum(icon);
+
+	if (icon == NULL || old_icon_num == NULL ||
+	    strcmp(icon_num_str, old_icon_num))
+	{
+		gchar *icon_path;
 
-	icon_path = g_strconcat(buddy_icon_dir, G_DIR_SEPARATOR_S, QQ_ICON_PREFIX, 
-			icon_num_str, QQ_ICON_SUFFIX, NULL);
-	if (icon == NULL || old_path == NULL 
-		|| g_ascii_strcasecmp(icon_path, old_path) != 0)
-		qq_set_buddy_icon_for_user(account, name, icon_path);
+		icon_path = g_strconcat(qq_buddy_icon_dir(), G_DIR_SEPARATOR_S,
+		                        QQ_ICON_PREFIX, icon_num_str,
+		                        QQ_ICON_SUFFIX, NULL);
+
+		qq_set_buddy_icon_for_user(account, name, icon_num_str, icon_path);
+		g_free(icon_path);
+	}
 	g_free(icon_num_str);
-	g_free(icon_path);
 }
 
 /* after getting info or modify myself, refresh the buddy list accordingly */
--- a/libpurple/protocols/qq/buddy_info.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/buddy_info.h	Sat Apr 28 18:32:47 2007 +0000
@@ -86,8 +86,8 @@
 
 void qq_refresh_buddy_and_myself(contact_info *info, PurpleConnection *gc);
 void qq_send_packet_get_info(PurpleConnection *gc, guint32 uid, gboolean show_window);
-void qq_set_my_buddy_icon(PurpleConnection *gc, const gchar *iconfile);
-void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *iconfile);
+void qq_set_my_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img);
+void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *icon_num, const gchar *iconfile);
 void qq_prepare_modify_info(PurpleConnection *gc);
 void qq_process_modify_info_reply(guint8 *buf, gint buf_len, PurpleConnection *gc);
 void qq_process_get_info_reply(guint8 *buf, gint buf_len, PurpleConnection *gc);
--- a/libpurple/protocols/qq/buddy_opt.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/buddy_opt.c	Sat Apr 28 18:32:47 2007 +0000
@@ -191,6 +191,7 @@
 	gchar *msg1, *msg2;
 	PurpleConnection *gc;
 	gc_and_uid *g2;
+	gchar *nombre;
 
 	g_return_if_fail(g != NULL);
 
@@ -207,9 +208,13 @@
 	msg1 = g_strdup_printf(_("You rejected %d's request"), uid);
 	msg2 = g_strdup(_("Input your reason:"));
 
+	nombre = uid_to_purple_name(uid);
 	purple_request_input(gc, _("Reject request"), msg1, msg2,
 			   _("Sorry, you are not my type..."), TRUE, FALSE,
-			   NULL, _("Reject"), G_CALLBACK(_qq_reject_add_request_real), _("Cancel"), NULL, g2);
+			   NULL, _("Reject"), G_CALLBACK(_qq_reject_add_request_real), _("Cancel"), NULL,
+			   purple_connection_get_account(gc), nombre, NULL,
+			   g2);
+	g_free(nombre);
 }
 
 void qq_add_buddy_with_gc_and_uid(gc_and_uid *g)
@@ -345,6 +350,7 @@
 	PurpleBuddy *b;
 	gc_and_uid *g;
 	qq_add_buddy_request *req;
+	gchar *nombre;
 
 	g_return_if_fail(buf != NULL && buf_len != 0);
 
@@ -386,7 +392,8 @@
 
 		if (strtol(reply, NULL, 10) > 0) {	/* need auth */
 			purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Add buddy attempt fails, need authentication\n");
-			b = purple_find_buddy(gc->account, uid_to_purple_name(for_uid));
+			nombre = uid_to_purple_name(for_uid);
+			b = purple_find_buddy(gc->account, nombre);
 			if (b != NULL)
 				purple_blist_remove_buddy(b);
 			g = g_new0(gc_and_uid, 1);
@@ -394,13 +401,16 @@
 			g->uid = for_uid;
 			msg = g_strdup_printf(_("User %d needs authentication"), for_uid);
 			purple_request_input(gc, NULL, msg,
-					   _("Input request here"),
+					   _("Input request here"), /* TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands */
 					   _("Would you be my friend?"),
 					   TRUE, FALSE, NULL, _("Send"),
 					   G_CALLBACK
 					   (_qq_send_packet_add_buddy_auth_with_gc_and_uid),
-					   _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid), g);
+					   _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid),
+					   purple_connection_get_account(gc), nombre, NULL,
+					   g);
 			g_free(msg);
+			g_free(nombre);
 		} else {	/* add OK */
 			qq_add_buddy_by_recv_packet(gc, for_uid, TRUE, TRUE);
 			msg = g_strdup_printf(_("You have added %d in buddy list"), for_uid);
--- a/libpurple/protocols/qq/group.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/group.c	Sat Apr 28 18:32:47 2007 +0000
@@ -122,6 +122,7 @@
 			   NULL, FALSE, FALSE, NULL, 
 			   _("Search"), G_CALLBACK(_qq_group_search_callback), 
 			   _("Cancel"), G_CALLBACK(_qq_group_search_cancel_callback), 
+			   purple_connection_get_account(gc), NULL, NULL,
 			   gc);
 
 	return qd->roomlist;
--- a/libpurple/protocols/qq/group_im.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/group_im.c	Sat Apr 28 18:32:47 2007 +0000
@@ -104,6 +104,7 @@
 	guint8 group_type;
 	gchar *reason_utf8, *msg, *reason;
 	group_member_opt *g;
+	gchar *nombre;
 
 	g_return_if_fail(internal_group_id > 0 && data != NULL && len > 0);
 
@@ -128,9 +129,13 @@
 	g->internal_group_id = internal_group_id;
 	g->member = user_uid;
 
+	nombre = uid_to_purple_name(user_uid);
+
 	purple_request_action(gc, _("QQ Qun Operation"),
 			    msg, reason,
-			    2, g, 3,
+			    2,
+				purple_connection_get_account(gc), nombre, NULL,
+				g, 3,
 			    _("Approve"),
 			    G_CALLBACK
 			    (qq_group_approve_application_with_struct),
@@ -139,6 +144,7 @@
 			    (qq_group_reject_application_with_struct),
 			    _("Search"), G_CALLBACK(qq_group_search_application_with_struct));
 
+	g_free(nombre);
 	g_free(reason);
 	g_free(msg);
 	g_free(reason_utf8);
--- a/libpurple/protocols/qq/group_join.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/group_join.c	Sat Apr 28 18:32:47 2007 +0000
@@ -135,7 +135,9 @@
 			   _("Would you be my friend?"), TRUE, FALSE, NULL,
 			   _("Send"),
 			   G_CALLBACK(_qq_group_join_auth_with_gc_and_id),
-			   _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid), g);
+			   _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid),
+			   purple_connection_get_account(gc), group->group_name_utf8, NULL,
+			   g);
 	g_free(msg);
 }
 
@@ -356,7 +358,9 @@
 			    _("Are you sure to exit this Qun?"),
 			    _
 			    ("Note, if you are the creator, \nthis operation will eventually remove this Qun."),
-			    1, g, 2, _("Cancel"),
+			    1,
+				purple_connection_get_account(gc), NULL, NULL,
+			    g, 2, _("Cancel"),
 			    G_CALLBACK(qq_do_nothing_with_gc_and_uid),
 			    _("Go ahead"), G_CALLBACK(_qq_group_exit_with_gc_and_id));
 }
--- a/libpurple/protocols/qq/group_opt.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/group_opt.c	Sat Apr 28 18:32:47 2007 +0000
@@ -120,29 +120,33 @@
 	g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0);
 
 	qq_send_packet_get_info(g->gc, g->member, TRUE);	/* we wanna see window */
-	purple_request_action
-	    (g->gc, NULL, _("Do you wanna approve the request?"), "", 2, g,
-	     2, _("Reject"),
-	     G_CALLBACK(qq_group_reject_application_with_struct),
-	     _("Approve"), G_CALLBACK(qq_group_approve_application_with_struct));
+	purple_request_action(g->gc, NULL, _("Do you wanna approve the request?"), "", 2,
+					purple_connection_get_account(g->gc), NULL, NULL,
+					g, 2,
+					_("Reject"), G_CALLBACK(qq_group_reject_application_with_struct),
+					_("Approve"), G_CALLBACK(qq_group_approve_application_with_struct));
 }
 
 void qq_group_reject_application_with_struct(group_member_opt *g)
 {
-	gchar *msg1, *msg2;
+	gchar *msg1, *msg2, *nombre;
 	g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0);
 
 	msg1 = g_strdup_printf(_("You rejected %d's request"), g->member);
 	msg2 = g_strdup(_("Input your reason:"));
 
-	purple_request_input(g->gc, NULL, msg1, msg2,
-			   _("Sorry, you are not my type..."), TRUE, FALSE,
-			   NULL, _("Send"),
-			   G_CALLBACK(_qq_group_reject_application_real),
-			   _("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct), g);
+	nombre = uid_to_purple_name(g->member);
+	purple_request_input(g->gc, /* title */ NULL, msg1, msg2,
+			   _("Sorry, you are not my type..."), /* multiline */ TRUE, /* masked */ FALSE,
+			   /* hint */ NULL,
+			   _("Send"), G_CALLBACK(_qq_group_reject_application_real),
+			   _("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct),
+			   purple_connection_get_account(g->gc), nombre, NULL,
+			   g);
 
 	g_free(msg1);
 	g_free(msg2);
+	g_free(nombre);
 }
 
 void qq_group_approve_application_with_struct(group_member_opt *g)
@@ -387,8 +391,10 @@
 			    _("You have successfully created a Qun"),
 			    _
 			    ("Would you like to set up the Qun details now?"),
-			    1, g, 2, _("Setup"),
-			    G_CALLBACK(qq_group_setup_with_gc_and_uid),
+			    1,
+				purple_connection_get_account(gc), NULL, NULL,
+				g, 2,
+				_("Setup"), G_CALLBACK(qq_group_setup_with_gc_and_uid),
 			    _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid));
 }
 
--- a/libpurple/protocols/qq/sys_msg.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/qq/sys_msg.c	Sat Apr 28 18:32:47 2007 +0000
@@ -72,6 +72,7 @@
 {
 	PurpleConnection *gc;
 	guint32 uid;
+	gchar *nombre;
 
 	g_return_if_fail(g != NULL);
 
@@ -80,17 +81,23 @@
 	g_return_if_fail(gc != 0 && uid != 0);
 
 	qq_send_packet_get_info(gc, uid, TRUE);	/* we wanna see window */
+
+	nombre = uid_to_purple_name(uid);
+	/* TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze. */
 	purple_request_action
-	    (gc, NULL, _("Do you wanna approve the request?"), "", 2, g, 2,
-	     _("Reject"),
-	     G_CALLBACK(qq_reject_add_request_with_gc_and_uid),
+	    (gc, NULL, _("Do you wanna approve the request?"), "", 2,
+		 purple_connection_get_account(gc), nombre, NULL,
+		 g, 2,
+	     _("Reject"), G_CALLBACK(qq_reject_add_request_with_gc_and_uid),
 	     _("Approve"), G_CALLBACK(qq_approve_add_request_with_gc_and_uid));
+	g_free(nombre);
 }
 
 static void _qq_search_before_add_with_gc_and_uid(gc_and_uid *g)
 {
 	PurpleConnection *gc;
 	guint32 uid;
+	gchar *nombre;
 
 	g_return_if_fail(g != NULL);
 
@@ -99,9 +106,15 @@
 	g_return_if_fail(gc != 0 && uid != 0);
 
 	qq_send_packet_get_info(gc, uid, TRUE);	/* we wanna see window */
+	/* TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze. */
+	nombre = uid_to_purple_name(uid);
 	purple_request_action
-	    (gc, NULL, _("Do you wanna add this buddy?"), "", 2, g, 2,
-	     _("Cancel"), NULL, _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid));
+	    (gc, NULL, _("Do you wanna add this buddy?"), "", 2,
+		 purple_connection_get_account(gc), nombre, NULL,
+		 g, 2,
+	     _("Cancel"), NULL,
+		 _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid));
+	g_free(nombre);
 }
 
 /* Send ACK if the sys message needs an ACK */
@@ -147,7 +160,7 @@
 	uid = strtol(from, NULL, 10);
 	name = uid_to_purple_name(uid);
 	b = purple_find_buddy(gc->account, name);
-	g_free(name);
+
 	if (b == NULL) {	/* the person is not in my list */
 		g = g_new0(gc_and_uid, 1);
 		g->gc = gc;
@@ -155,10 +168,11 @@
 		message = g_strdup_printf(_("You have been added by %s"), from);
 		_qq_sys_msg_log_write(gc, message, from);
 		purple_request_action(gc, NULL, message,
-				    _("Would like to add him?"), 2, g, 3,
-				    _("Cancel"), NULL, _("Add"),
-				    G_CALLBACK
-				    (qq_add_buddy_with_gc_and_uid),
+				    _("Would like to add him?"), 2,
+					purple_connection_get_account(gc), name, NULL,
+					g, 3,
+				    _("Cancel"), NULL,
+					_("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid),
 				    _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid));
 	} else {
 		message = g_strdup_printf(_("%s has added you [%s]"), from, to);
@@ -166,6 +180,7 @@
 		purple_notify_info(gc, NULL, message, NULL);
 	}
 
+	g_free(name);
 	g_free(message);
 }
 
@@ -219,12 +234,18 @@
 	g->gc = gc;
 	g->uid = uid;
 
+	name = uid_to_purple_name(uid);
+
+	/* TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze */
+	/* TODO: this should go through purple_account_request_authorization() */
 	message = g_strdup_printf(_("%s wanna add you [%s] as friends"), from, to);
 	reason = g_strdup_printf(_("Message: %s"), msg_utf8);
 	_qq_sys_msg_log_write(gc, message, from);
 
 	purple_request_action
-	    (gc, NULL, message, reason, 2, g, 3,
+	    (gc, NULL, message, reason, 2,
+		purple_connection_get_account(gc), name, NULL,
+		 g, 3,
 	     _("Reject"),
 	     G_CALLBACK(qq_reject_add_request_with_gc_and_uid),
 	     _("Approve"),
@@ -234,22 +255,24 @@
 	g_free(message);
 	g_free(reason);
 
-	name = uid_to_purple_name(uid);
+	/* XXX: Is this needed once the above goes through purple_account_request_authorization()? */
 	b = purple_find_buddy(gc->account, name);
-	g_free(name);
 	if (b == NULL) {	/* the person is not in my list  */
 		g2 = g_new0(gc_and_uid, 1);
 		g2->gc = gc;
 		g2->uid = strtol(from, NULL, 10);
 		message = g_strdup_printf(_("%s is not in your buddy list"), from);
 		purple_request_action(gc, NULL, message,
-				    _("Would you like to add him?"), 2, g2,
-				    3, _("Cancel"), NULL, _("Add"),
-				    G_CALLBACK
-				    (qq_add_buddy_with_gc_and_uid),
+				    _("Would you like to add him?"), 2,
+					purple_connection_get_account(gc), name, NULL,
+					g2, 3,
+					_("Cancel"), NULL,
+					_("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid),
 				    _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid));
 		g_free(message);
 	}
+
+	g_free(name);
 }
 
 void qq_process_msg_sys(guint8 *buf, gint buf_len, guint16 seq, PurpleConnection *gc)
--- a/libpurple/protocols/sametime/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/sametime/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -2,7 +2,7 @@
 EXTRA_DIST = Makefile.mingw
 
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 
 noinst_HEADERS = sametime.h
--- a/libpurple/protocols/sametime/sametime.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/sametime/sametime.c	Sat Apr 28 18:32:47 2007 +0000
@@ -2698,8 +2698,7 @@
       cid = make_cid(cid);
 
       /* add image to the purple image store */
-      img = purple_imgstore_add(d_dat, d_len, cid);
-      g_free(d_dat);
+      img = purple_imgstore_add_with_id(d_dat, d_len, cid);
 
       /* map the cid to the image store identifier */
       g_hash_table_insert(img_by_cid, cid, GINT_TO_POINTER(img));
@@ -2772,7 +2771,7 @@
 
   /* dereference all the imgages */
   while(images) {
-    purple_imgstore_unref(GPOINTER_TO_INT(images->data));
+    purple_imgstore_unref_by_id(GPOINTER_TO_INT(images->data));
     images = g_list_delete_link(images, images);
   }
 }
@@ -3387,6 +3386,7 @@
 		      msgA, msg1, fields,
 		      _("Create"), G_CALLBACK(conf_create_prompt_join),
 		      _("Cancel"), G_CALLBACK(conf_create_prompt_cancel),
+			  acct, purple_buddy_get_name(buddy), NULL,
 		      buddy);
   g_free(msg1);
 }
@@ -3472,6 +3472,7 @@
 		      msgA, msg, fields,
 		      _("Invite"), G_CALLBACK(conf_select_prompt_invite),
 		      _("Cancel"), G_CALLBACK(conf_select_prompt_cancel),
+			  acct, purple_buddy_get_name(buddy), NULL,
 		      buddy);
   g_free(msg);
 }
@@ -3642,6 +3643,7 @@
 		     MW_PLUGIN_DEFAULT_HOST, FALSE, FALSE, NULL,
 		     _("Connect"), G_CALLBACK(prompt_host_ok_cb),
 		     _("Cancel"), G_CALLBACK(prompt_host_cancel_cb),
+			 acct, NULL, NULL,
 		     gc);
 
   g_free(msg);
@@ -3856,7 +3858,7 @@
     /* find the imgstore data by the id tag */
     id = g_datalist_get_data(&attr, "id");
     if(id && *id)
-      img = purple_imgstore_get(atoi(id));
+      img = purple_imgstore_find_by_id(atoi(id));
 
     if(img) {
       char *cid;
@@ -3882,9 +3884,8 @@
 
       /* obtain and base64 encode the image data, and put it in the
 	 mime part */
-      data = purple_imgstore_get_data(img);
       size = purple_imgstore_get_size(img);
-      data = purple_base64_encode(data, (gsize) size);
+      data = purple_base64_encode(purple_imgstore_get_data(img), (gsize) size);
       purple_mime_part_set_data(part, data);
       g_free(data);
 
@@ -5210,6 +5211,7 @@
 
   purple_request_file(gc, title, NULL, FALSE,
 		    G_CALLBACK(st_import_action_cb), NULL,
+		    account, NULL, NULL,
 		    gc);
 
   g_free(title);
@@ -5249,6 +5251,7 @@
 
   purple_request_file(gc, title, NULL, TRUE,
 		    G_CALLBACK(st_export_action_cb), NULL,
+			account, NULL, NULL,
 		    gc);
 
   g_free(title);
@@ -5386,6 +5389,7 @@
 		      msgA, msg, fields,
 		      _("Add Group"), G_CALLBACK(remote_group_multi_cb),
 		      _("Cancel"), G_CALLBACK(remote_group_multi_cleanup),
+			  purple_connection_get_account(gc), result->name, NULL,
 		      pd);
 
   g_free(msg);
@@ -5475,6 +5479,7 @@
 		     FALSE, FALSE, NULL,
 		     _("Add"), G_CALLBACK(remote_group_action_cb),
 		     _("Cancel"), NULL,
+			 purple_connection_get_account(gc), NULL, NULL,
 		     gc);
 }
 
@@ -5599,7 +5604,8 @@
 		     FALSE, FALSE, NULL,
 		     _("Search"), G_CALLBACK(search_action_cb),
 		     _("Cancel"), NULL,
-		     gc);
+			 purple_connection_get_account(gc), NULL, NULL,
+			 gc);
 }
 
 
--- a/libpurple/protocols/silc/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,6 +1,6 @@
 EXTRA_DIST = README TODO Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 SILCSOURCES = silc.c silcpurple.h buddy.c chat.c ft.c ops.c pk.c util.c wb.c wb.h
 
--- a/libpurple/protocols/silc/buddy.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/buddy.c	Sat Apr 28 18:32:47 2007 +0000
@@ -289,6 +289,7 @@
 {
 	char tmp[128], tmp2[128];
 	SilcPurpleKeyAgrAsk a;
+	PurpleConnection *gc = client->application;
 
 	g_snprintf(tmp, sizeof(tmp),
 		   _("Key agreement request received from %s. Would you like to "
@@ -309,8 +310,8 @@
 	a->port = port;
 
 	purple_request_action(client->application, _("Key Agreement Request"), tmp,
-			    hostname ? tmp2 : NULL, 1, a, 2,
-			    _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb),
+			    hostname ? tmp2 : NULL, 1, gc->account, client_entry->nickname,
+				NULL, a, 2, _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb),
 			    _("No"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb));
 }
 
@@ -432,7 +433,7 @@
 static void
 silcpurple_buddy_privkey(PurpleConnection *gc, const char *name)
 {
-        SilcPurple sg = gc->proto_data;
+	SilcPurple sg = gc->proto_data;
 	char *nickname;
 	SilcPurplePrivkey p;
 	SilcClientEntry *clients;
@@ -461,11 +462,11 @@
 	p->client = sg->client;
 	p->conn = sg->conn;
 	p->client_id = *clients[0]->id;
-        purple_request_input(gc, _("IM With Password"), NULL,
-                           _("Set IM Password"), NULL, FALSE, TRUE, NULL,
-                           _("OK"), G_CALLBACK(silcpurple_buddy_privkey_cb),
-                           _("Cancel"), G_CALLBACK(silcpurple_buddy_privkey_cb),
-			   p);
+	purple_request_input(gc, _("IM With Password"), NULL,
+	                     _("Set IM Password"), NULL, FALSE, TRUE, NULL,
+	                     _("OK"), G_CALLBACK(silcpurple_buddy_privkey_cb),
+	                     _("Cancel"), G_CALLBACK(silcpurple_buddy_privkey_cb),
+	                     gc->account, NULL, NULL, p);
 
 	silc_free(clients);
 	silc_free(nickname);
@@ -986,8 +987,10 @@
 					const unsigned char *data;
 					SilcUInt32 data_len;
 					data = silc_mime_get_data(m, &data_len);
-					if (data)
-						purple_buddy_icons_set_for_user(purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), (void *)data, data_len);
+					if (data) {
+						/* TODO: Check if SILC gives us something to use as the checksum instead */
+						purple_buddy_icons_set_for_user(purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), g_memdup(data, data_len), data_len, NULL);
+					}
 				}
 				silc_mime_free(m);
 			}
@@ -1063,7 +1066,9 @@
 	/* Open file selector to select the public key. */
 	purple_request_file(r->client->application, _("Open..."), NULL, FALSE,
 			  G_CALLBACK(silcpurple_add_buddy_ask_import),
-			  G_CALLBACK(silcpurple_add_buddy_ask_pk_cancel), r);
+			  G_CALLBACK(silcpurple_add_buddy_ask_pk_cancel),
+			  purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r);
+
 }
 
 static void
@@ -1074,7 +1079,8 @@
 		   r->b->name);
 	purple_request_action(r->client->application, _("Add Buddy"), tmp,
 			    _("To add the buddy you must import his/her public key. "
-			      "Press Import to import a public key."), 0, r, 2,
+			      "Press Import to import a public key."), 0,
+				  purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r, 2,
 			    _("Cancel"), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb),
 			    _("_Import..."), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb));
 }
@@ -1180,7 +1186,8 @@
 						"the correct user from the list to add to the buddy list."),
 				fields,
 				_("OK"), G_CALLBACK(silcpurple_add_buddy_select_cb),
-				_("Cancel"), G_CALLBACK(silcpurple_add_buddy_select_cancel), r);
+				_("Cancel"), G_CALLBACK(silcpurple_add_buddy_select_cancel),
+				purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r);
 }
 
 static void
@@ -1676,48 +1683,31 @@
 }
 
 #ifdef SILC_ATTRIBUTE_USER_ICON
-void silcpurple_buddy_set_icon(PurpleConnection *gc, const char *iconfile)
+void silcpurple_buddy_set_icon(PurpleConnection *gc, PurpleStoredImage *img)
 {
 	SilcPurple sg = gc->proto_data;
 	SilcClient client = sg->client;
 	SilcClientConnection conn = sg->conn;
 	SilcMime mime;
-	PurpleBuddyIcon ic;
 	char type[32];
 	unsigned char *icon;
 	const char *t;
-	struct stat st;
-	FILE *fp;
 	SilcAttributeObjMime obj;
 
 	/* Remove */
-	if (!iconfile) {
+	if (!img) {
 		silc_client_attribute_del(client, conn,
 					  SILC_ATTRIBUTE_USER_ICON, NULL);
 		return;
 	}
 
 	/* Add */
-	if (g_stat(iconfile, &st) < 0)
-		return;
-	fp = g_fopen(iconfile, "rb");
-	if (!fp)
-		return;
-	ic.data = g_malloc(st.st_size);
-	if (!ic.data)
+	mime = silc_mime_alloc();
+	if (!mime)
 		return;
-	ic.len = fread(ic.data, 1, st.st_size, fp);
-	fclose(fp);
 
-	mime = silc_mime_alloc();
-	if (!mime) {
-		g_free(ic.data);
-		return;
-	}
-
-	t = purple_buddy_icon_get_type((const PurpleBuddyIcon *)&ic);
-	if (!t) {
-		g_free(ic.data);
+	t = purple_util_get_image_extension(purple_imgstore_get_data(img), purple_imgstore_get_size(img));
+	if (!t || !strcmp(t, "icon")) {
 		silc_mime_free(mime);
 		return;
 	}
@@ -1725,7 +1715,7 @@
 		t = "jpeg";
 	g_snprintf(type, sizeof(type), "image/%s", t);
 	silc_mime_add_field(mime, "Content-Type", type);
-	silc_mime_add_data(mime, ic.data, ic.len);
+	silc_mime_add_data(mime, purple_imgstore_get_data(img), purple_imgstore_get_size(img));
 
 	obj.mime = icon = silc_mime_encode(mime, &obj.mime_len);
 	if (obj.mime)
@@ -1733,7 +1723,6 @@
 					  SILC_ATTRIBUTE_USER_ICON, &obj, sizeof(obj));
 
 	silc_free(icon);
-	g_free(ic.data);
 	silc_mime_free(mime);
 }
 #endif
--- a/libpurple/protocols/silc/chat.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/chat.c	Sat Apr 28 18:32:47 2007 +0000
@@ -290,7 +290,8 @@
 		/* Add new public key */
 		purple_request_file(sg->gc, _("Open Public Key..."), NULL, FALSE,
 				  G_CALLBACK(silcpurple_chat_chpk_add),
-				  G_CALLBACK(silcpurple_chat_chpk_cancel), sgc);
+				  G_CALLBACK(silcpurple_chat_chpk_cancel),
+				  purple_connection_get_account(sg->gc), NULL, NULL, sgc);
 		return;
 	}
 
@@ -421,7 +422,8 @@
 		purple_request_fields(sg->gc, _("Channel Authentication"),
 				    _("Channel Authentication"), t, fields,
 				    _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb),
-				    _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok), sgc);
+				    _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok),
+					purple_connection_get_account(sg->gc), NULL, NULL, sgc);
 		return;
 	}
 	sgc->pubkeys = silc_buffer_copy(channel_pubkeys);
@@ -459,7 +461,8 @@
 	purple_request_fields(sg->gc, _("Channel Authentication"),
 			    _("Channel Authentication"), t, fields,
 			    _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb),
-			    _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok), sgc);
+			    _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok),
+				purple_connection_get_account(sg->gc), NULL, NULL, sgc);
 
 	silc_argument_payload_free(chpks);
 }
@@ -594,7 +597,8 @@
 		   p->channel);
 	purple_request_fields(gc, _("Add Channel Private Group"), NULL, tmp, fields,
 			    _("Add"), G_CALLBACK(silcpurple_chat_prv_add),
-			    _("Cancel"), G_CALLBACK(silcpurple_chat_prv_cancel), p);
+			    _("Cancel"), G_CALLBACK(silcpurple_chat_prv_cancel),
+				purple_connection_get_account(gc), NULL, NULL, p);
 }
 
 
@@ -723,7 +727,8 @@
 			   _("Set user limit on channel. Set to zero to reset user limit."),
 			   tmp, FALSE, FALSE, NULL,
 			   _("OK"), G_CALLBACK(silcpurple_chat_ulimit_cb),
-			   _("Cancel"), G_CALLBACK(silcpurple_chat_ulimit_cb), s);
+			   _("Cancel"), G_CALLBACK(silcpurple_chat_ulimit_cb),
+			   purple_connection_get_account(gc), NULL, NULL, s);
 }
 
 static void
--- a/libpurple/protocols/silc/ops.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/ops.c	Sat Apr 28 18:32:47 2007 +0000
@@ -161,7 +161,7 @@
 		if (channel && !convo)
 			goto out;
 
-		imgid = purple_imgstore_add(data, data_len, "");
+		imgid = purple_imgstore_add_with_id(g_memdup(data, data_len), data_len, "");
 		if (imgid) {
 			cflags |= PURPLE_MESSAGE_IMAGES | PURPLE_MESSAGE_RECV;
 			g_snprintf(tmp, sizeof(tmp), "<IMG ID=\"%d\">", imgid);
@@ -177,7 +177,7 @@
 					    sender->nickname : "<unknown>",
 					    tmp, cflags, time(NULL));
 
-			purple_imgstore_unref(imgid);
+			purple_imgstore_unref_by_id(imgid);
 			cflags = 0;
 		}
 		goto out;
@@ -1295,7 +1295,7 @@
 						_("User Information"),
 						buf, 1, client_entry, 2,
 						_("OK"), G_CALLBACK(silcpurple_whois_more),
-						_("_More..."), G_CALLBACK(silcpurple_whois_more));
+						_("_More..."), G_CALLBACK(silcpurple_whois_more), gc->account, NULL, NULL);
 			else
 #endif
 			purple_notify_userinfo(gc, client_entry->nickname, user_info, NULL, NULL);
@@ -1900,17 +1900,18 @@
 silc_ask_passphrase(SilcClient client, SilcClientConnection conn,
 		    SilcAskPassphrase completion, void *context)
 {
+	PurpleConnection *gc = client->application;
 	SilcPurpleAskPassphrase internal = silc_calloc(1, sizeof(*internal));
 
 	if (!internal)
 		return;
 	internal->completion = completion;
 	internal->context = context;
-	purple_request_input(client->application, _("Passphrase"), NULL,
+	purple_request_input(gc, _("Passphrase"), NULL,
 			   _("Passphrase required"), NULL, FALSE, TRUE, NULL,
 			   _("OK"), G_CALLBACK(silc_ask_passphrase_cb),
 			   _("Cancel"), G_CALLBACK(silc_ask_passphrase_cb),
-			   internal);
+			   purple_connection_get_account(gc), NULL, NULL, internal);
 }
 
 
--- a/libpurple/protocols/silc/pk.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/pk.c	Sat Apr 28 18:32:47 2007 +0000
@@ -96,6 +96,7 @@
 				const char *babbleprint,
 				PublicKeyVerify verify)
 {
+	PurpleConnection *gc = verify->client->application;
 	char tmp[256], tmp2[256];
 
 	if (verify->changed) {
@@ -112,8 +113,9 @@
 		   _("Fingerprint and babbleprint for the %s key are:\n\n"
 		     "%s\n%s\n"), entity, fingerprint, babbleprint);
 
-	purple_request_action(verify->client->application, _("Verify Public Key"), tmp, tmp2,
-						PURPLE_DEFAULT_ACTION_NONE, verify, 3,
+	purple_request_action(gc, _("Verify Public Key"), tmp, tmp2,
+						PURPLE_DEFAULT_ACTION_NONE,
+						purple_connection_get_account(gc), entity, NULL, verify, 3,
 			    _("Yes"), G_CALLBACK(silcpurple_verify_cb),
 			    _("No"), G_CALLBACK(silcpurple_verify_cb),
 			    _("_View..."), G_CALLBACK(silcpurple_verify_details));
--- a/libpurple/protocols/silc/silc.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/silc.c	Sat Apr 28 18:32:47 2007 +0000
@@ -194,7 +194,7 @@
 		SilcUInt32 mask;
 		const char *tmp;
 #ifdef SILC_ATTRIBUTE_USER_ICON
-		char *icon;
+		PurpleStoredImage *img;
 #endif
 #ifdef HAVE_SYS_UTSNAME_H
 		struct utsname u;
@@ -233,9 +233,9 @@
 
 #ifdef SILC_ATTRIBUTE_USER_ICON
 		/* Set our buddy icon */
-		icon = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account));
-		silcpurple_buddy_set_icon(gc, icon);
-		g_free(icon);
+		img = purple_buddy_icons_find_account_icon(account);
+		silcpurple_buddy_set_icon(gc, img);
+		purple_imgstore_unref(img);
 #endif
 	}
 
@@ -741,7 +741,8 @@
 			      "you would like other users to see about yourself."),
 			    fields,
 			    _("OK"), G_CALLBACK(silcpurple_attrs_cb),
-			    _("Cancel"), G_CALLBACK(silcpurple_attrs_cancel), gc);
+			    _("Cancel"), G_CALLBACK(silcpurple_attrs_cancel),
+				gc->account, NULL, NULL, gc);
 }
 
 static void
@@ -946,7 +947,8 @@
 	purple_request_fields(gc, _("Create New SILC Key Pair"),
 			    _("Create New SILC Key Pair"), NULL, fields,
 			    _("Generate Key Pair"), G_CALLBACK(silcpurple_create_keypair_cb),
-			    _("Cancel"), G_CALLBACK(silcpurple_create_keypair_cancel), gc);
+			    _("Cancel"), G_CALLBACK(silcpurple_create_keypair_cancel),
+				gc->account, NULL, NULL, gc);
 
 	g_strfreev(u);
 	silc_free(hostname);
--- a/libpurple/protocols/silc/silcpurple.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/silcpurple.h	Sat Apr 28 18:32:47 2007 +0000
@@ -145,7 +145,7 @@
 					 char **contactstr, char **langstr, char **devicestr,
 					 char **tzstr, char **geostr);
 #ifdef SILC_ATTRIBUTE_USER_ICON
-void silcpurple_buddy_set_icon(PurpleConnection *gc, const char *iconfile);
+void silcpurple_buddy_set_icon(PurpleConnection *gc, PurpleStoredImage *img);
 #endif
 #ifdef HAVE_SILCMIME_H
 char *silcpurple_file2mime(const char *filename);
--- a/libpurple/protocols/silc/util.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/util.c	Sat Apr 28 18:32:47 2007 +0000
@@ -373,8 +373,8 @@
 
 	purple_request_action(sg->gc, _("Public Key Information"),
 			    _("Public Key Information"),
-			    buf, 0, context, 1,
-			    _("Close"), callback);
+			    buf, 0, purple_connection_get_account(sg->gc),
+				NULL, NULL, context, 1, _("Close"), callback);
 
 	g_free(buf);
 	silc_free(fingerprint);
@@ -676,9 +676,9 @@
 		}
 
 		id = g_datalist_get_data(&attribs, "id");
-		if (id && (image = purple_imgstore_get(atoi(id)))) {
+		if (id && (image = purple_imgstore_find_by_id(atoi(id)))) {
 			unsigned long imglen = purple_imgstore_get_size(image);
-			gpointer img = purple_imgstore_get_data(image);
+			gconstpointer img = purple_imgstore_get_data(image);
 
 			p = silc_mime_alloc();
 
--- a/libpurple/protocols/silc/wb.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/silc/wb.c	Sat Apr 28 18:32:47 2007 +0000
@@ -263,7 +263,7 @@
 	SilcPurple sg;
 
 	gc = client->application;
-        sg = gc->proto_data;
+	sg = gc->proto_data;
 
 	/* Open whiteboard automatically if requested */
 	if (purple_account_get_bool(sg->account, "open-wb", FALSE)) {
@@ -299,7 +299,8 @@
 	req->channel = channel;
 	req->sg = sg;
 
-	purple_request_action(gc, _("Whiteboard"), tmp, NULL, 1, req, 2,
+	purple_request_action(gc, _("Whiteboard"), tmp, NULL, 1,
+				sg->account, sender->nickname, NULL, req, 2,
 			    _("Yes"), G_CALLBACK(silcpurple_wb_request_cb),
 			    _("No"), G_CALLBACK(silcpurple_wb_request_cb));
 }
--- a/libpurple/protocols/simple/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/simple/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,7 @@
 EXTRA_DIST = \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 SIMPLESOURCES = \
 	simple.c \
--- a/libpurple/protocols/toc/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/toc/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -2,7 +2,7 @@
 		PROTOCOL \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 TOCSOURCES = toc.c
 
--- a/libpurple/protocols/yahoo/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/yahoo/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,7 @@
 EXTRA_DIST = \
 		Makefile.mingw
 
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 YAHOOSOURCES = \
 	util.c \
--- a/libpurple/protocols/yahoo/yahoo.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Sat Apr 28 18:32:47 2007 +0000
@@ -342,7 +342,10 @@
 		}
 		case 192: /* Pictures, aka Buddy Icons, checksum */
 		{
+			/* FIXME: Please, if you know this protocol,
+			 * FIXME: fix up the strtol() stuff if possible. */
 			int cksum = strtol(pair->value, NULL, 10);
+			const char *locksum = NULL;
 			PurpleBuddy *b;
 
 			if (!name)
@@ -353,9 +356,7 @@
 			if (!cksum || (cksum == -1)) {
 				if (f)
 					yahoo_friend_set_buddy_icon_need_request(f, TRUE);
-				purple_buddy_icons_set_for_user(gc->account, name, NULL, 0);
-				if (b)
-					purple_blist_node_remove_setting((PurpleBlistNode *)b, YAHOO_ICON_CHECKSUM_KEY);
+				purple_buddy_icons_set_for_user(gc->account, name, NULL, 0, NULL);
 				break;
 			}
 
@@ -363,7 +364,8 @@
 				break;
 
 			yahoo_friend_set_buddy_icon_need_request(f, FALSE);
-			if (b && cksum != purple_blist_node_get_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY))
+			if (b && (locksum = purple_buddy_icons_get_checksum_for_user(b)) != NULL &&
+					cksum != strtol(locksum, NULL, 10))
 				yahoo_send_picture_request(gc, name);
 
 			break;
@@ -985,7 +987,9 @@
 	purple_request_input(add_req->gc, NULL, _("Authorization denied message:"),
 			NULL, _("No reason given."), TRUE, FALSE, NULL, 
 			_("OK"), G_CALLBACK(yahoo_buddy_add_deny_cb),
-			_("Cancel"), G_CALLBACK(yahoo_buddy_add_deny_noreason_cb), add_req);
+			_("Cancel"), G_CALLBACK(yahoo_buddy_add_deny_noreason_cb),
+			purple_connection_get_account(add_req->gc), add_req->who, NULL,
+			add_req);
 }
 
 static void yahoo_buddy_added_us(PurpleConnection *gc, struct yahoo_packet *pkt) {
@@ -1890,7 +1894,9 @@
 		g_snprintf(buf, sizeof(buf), _("You have tried to ignore %s, but the "
 					"user is on your buddy list.  Clicking \"Yes\" "
 					"will remove and ignore the buddy."), who);
-		purple_request_yes_no(gc, NULL, _("Ignore buddy?"), buf, 0, b,
+		purple_request_yes_no(gc, NULL, _("Ignore buddy?"), buf, 0,
+						gc->account, who, NULL,
+						b,
 						G_CALLBACK(ignore_buddy),
 						G_CALLBACK(keep_buddy));
 		break;
@@ -2682,11 +2688,10 @@
 static void yahoo_picture_check(PurpleAccount *account)
 {
 	PurpleConnection *gc = purple_account_get_connection(account);
-	char *buddyicon;
-
-	buddyicon = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account));
-	yahoo_set_buddy_icon(gc, buddyicon);
-	g_free(buddyicon);
+	PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
+
+	yahoo_set_buddy_icon(gc, img);
+	purple_imgstore_unref(img);
 }
 
 static int get_yahoo_status_from_purple_status(PurpleStatus *status)
@@ -3222,10 +3227,13 @@
 static void yahoo_show_act_id(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *) action->context;
+	/* XXX Typo: This should be _("Activate which ID?") - fix after string freeze is over */
 	purple_request_input(gc, NULL, _("Active which ID?"), NULL,
 					   purple_connection_get_display_name(gc), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(yahoo_act_id),
-					   _("Cancel"), NULL, gc);
+					   _("Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
+					   gc);
 }
 
 static void yahoo_show_chat_goto(PurplePluginAction *action)
@@ -3234,7 +3242,9 @@
 	purple_request_input(gc, NULL, _("Join who in chat?"), NULL,
 					   "", FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(yahoo_chat_goto),
-					   _("Cancel"), NULL, gc);
+					   _("Cancel"), NULL,
+					   purple_connection_get_account(gc), NULL, NULL,
+					   gc);
 }
 
 static GList *yahoo_actions(PurplePlugin *plugin, gpointer context) {
--- a/libpurple/protocols/yahoo/yahoo.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.h	Sat Apr 28 18:32:47 2007 +0000
@@ -48,7 +48,6 @@
 
 #define WEBMESSENGER_URL "http://login.yahoo.com/config/login?.src=pg"
 
-#define YAHOO_ICON_CHECKSUM_KEY "icon_checksum"
 #define YAHOO_PICURL_SETTING "picture_url"
 #define YAHOO_PICCKSUM_SETTING "picture_checksum"
 #define YAHOO_PICEXPIRE_SETTING "picture_expire"
--- a/libpurple/protocols/yahoo/yahoo_picture.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_picture.c	Sat Apr 28 18:32:47 2007 +0000
@@ -49,7 +49,6 @@
 {
 	struct yahoo_fetch_picture_data *d;
 	struct yahoo_data *yd;
-	PurpleBuddy *b;
 
 	d = user_data;
 	yd = d->gc->proto_data;
@@ -60,10 +59,9 @@
 	} else if (len == 0) {
 		purple_debug_error("yahoo", "Fetched an icon with length 0.  Strange.\n");
 	} else {
-		purple_buddy_icons_set_for_user(purple_connection_get_account(d->gc), d->who, (void *)pic_data, len);
-		b = purple_find_buddy(purple_connection_get_account(d->gc), d->who);
-		if (b)
-			purple_blist_node_set_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY, d->checksum);
+		char *checksum = g_strdup_printf("%i", d->checksum);
+		purple_buddy_icons_set_for_user(purple_connection_get_account(d->gc), d->who, g_memdup(pic_data, len), len, checksum);
+		g_free(checksum);
 	}
 
 	g_free(d->who);
@@ -117,7 +115,11 @@
 		PurpleUtilFetchUrlData *url_data;
 		struct yahoo_fetch_picture_data *data;
 		PurpleBuddy *b = purple_find_buddy(gc->account, who);
-		if (b && (checksum == purple_blist_node_get_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY)))
+		const char *locksum = NULL;
+
+		/* FIXME: Cleanup this strtol() stuff if possible. */
+		if (b && (locksum = purple_buddy_icons_get_checksum_for_user(b)) != NULL && 
+				(checksum == strtol(locksum, NULL, 10)))
 			return;
 
 		data = g_new0(struct yahoo_fetch_picture_data, 1);
@@ -166,11 +168,8 @@
 		if (icon == 2)
 			yahoo_send_picture_request(gc, who);
 		else if ((icon == 0) || (icon == 1)) {
-			PurpleBuddy *b = purple_find_buddy(gc->account, who);
 			YahooFriend *f;
-			purple_buddy_icons_set_for_user(gc->account, who, NULL, 0);
-			if (b)
-				purple_blist_node_remove_setting((PurpleBlistNode *)b, YAHOO_ICON_CHECKSUM_KEY);
+			purple_buddy_icons_set_for_user(gc->account, who, NULL, 0, NULL);
 			if ((f = yahoo_friend_find(gc, who)))
 				yahoo_friend_set_buddy_icon_need_request(f, TRUE);
 			purple_debug_misc("yahoo", "Setting user %s's icon to NULL.\n", who);
@@ -203,7 +202,11 @@
 
 	if (who) {
 		PurpleBuddy *b = purple_find_buddy(gc->account, who);
-		if (b && (checksum != purple_blist_node_get_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY)))
+		const char *locksum = NULL;
+
+		/* FIXME: Cleanup this strtol() stuff if possible. */
+		if (b && (locksum = purple_buddy_icons_get_checksum_for_user(b)) != NULL && 
+				(checksum != strtol(locksum, NULL, 10)))
 			yahoo_send_picture_request(gc, who);
 	}
 }
@@ -276,11 +279,8 @@
 		if (avatar == 2)
 			yahoo_send_picture_request(gc, who);
 		else if ((avatar == 0) || (avatar == 1)) {
-			PurpleBuddy *b = purple_find_buddy(gc->account, who);
 			YahooFriend *f;
-			purple_buddy_icons_set_for_user(gc->account, who, NULL, 0);
-			if (b)
-				purple_blist_node_remove_setting((PurpleBlistNode *)b, YAHOO_ICON_CHECKSUM_KEY);
+			purple_buddy_icons_set_for_user(gc->account, who, NULL, 0, NULL);
 			if ((f = yahoo_friend_find(gc, who)))
 				yahoo_friend_set_buddy_icon_need_request(f, TRUE);
 			purple_debug_misc("yahoo", "Setting user %s's icon to NULL.\n", who);
@@ -518,15 +518,12 @@
 	}
 }
 
-void yahoo_set_buddy_icon(PurpleConnection *gc, const char *iconfile)
+void yahoo_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
 {
 	struct yahoo_data *yd = gc->proto_data;
 	PurpleAccount *account = gc->account;
-	gchar *icondata;
-	gsize len;
-	GError *error = NULL;
 
-	if (iconfile == NULL) {
+	if (img == NULL) {
 		g_free(yd->picture_url);
 		yd->picture_url = NULL;
 
@@ -537,14 +534,19 @@
 			/* Tell everyone we ain't got one no more */
 			yahoo_send_picture_update(gc, 0);
 
-	} else if (g_file_get_contents(iconfile, &icondata, &len, &error)) {
-		GString *s = g_string_new_len(icondata, len);
+	} else {
+		gconstpointer data = purple_imgstore_get_data(img);
+		size_t len = purple_imgstore_get_size(img);
+		GString *s = g_string_new_len(data, len);
 		struct yahoo_buddy_icon_upload_data *d;
 		int oldcksum = purple_account_get_int(account, YAHOO_PICCKSUM_SETTING, 0);
 		int expire = purple_account_get_int(account, YAHOO_PICEXPIRE_SETTING, 0);
 		const char *oldurl = purple_account_get_string(account, YAHOO_PICURL_SETTING, NULL);
+		char *iconfile;
 
-		g_free(icondata);
+		/* TODO: At some point, it'd be nice to fix this for real, or
+		 * TODO: at least change it to be something like:
+		 * TODO: purple_imgstore_get_filename(img); */
 		yd->picture_checksum = g_string_hash(s);
 
 		if ((yd->picture_checksum == oldcksum) &&
@@ -557,11 +559,15 @@
 			return;
 		}
 
+		/* TODO: FIXME: This is completely wrong.  The upload code needs to
+		 * TODO: be modified to work with a PurpleStoredImage. */
+		iconfile = g_build_filename(purple_buddy_icons_get_cache_dir(),
+		                            purple_imgstore_get_filename(img), NULL);
 		d = g_new0(struct yahoo_buddy_icon_upload_data, 1);
 		d->gc = gc;
 		d->str = s;
 		d->fd = -1;
-		d->filename = g_strdup(iconfile);
+		d->filename = iconfile;
 
 		if (!yd->logged_in) {
 			yd->picture_upload_todo = d;
@@ -570,10 +576,5 @@
 
 		yahoo_buddy_icon_upload(gc, d);
 
-	} else {
-		purple_debug_error("yahoo",
-				"Could not read buddy icon file '%s': %s\n",
-				iconfile, error->message);
-		g_error_free(error);
 	}
 }
--- a/libpurple/protocols/yahoo/yahoo_picture.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_picture.h	Sat Apr 28 18:32:47 2007 +0000
@@ -37,7 +37,7 @@
 
 void yahoo_process_avatar_update(PurpleConnection *gc, struct yahoo_packet *pkt);
 
-void yahoo_set_buddy_icon(PurpleConnection *gc, const char *iconfile);
+void yahoo_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img);
 void yahoo_buddy_icon_upload(PurpleConnection *gc, struct yahoo_buddy_icon_upload_data *d);
 void yahoo_buddy_icon_upload_data_free(struct yahoo_buddy_icon_upload_data *d);
 
--- a/libpurple/protocols/yahoo/yahoo_profile.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_profile.c	Sat Apr 28 18:32:47 2007 +0000
@@ -1022,7 +1022,7 @@
 					photo_url_text, url_text);
 		} else {
 			purple_debug_info("yahoo", "%s is %d bytes\n", photo_url_text, len);
-			id = purple_imgstore_add(url_text, len, NULL);
+			id = purple_imgstore_add_with_id(g_memdup(url_text, len), len, NULL);
 			
 			tmp = g_strdup_printf("<img id=\"%d\"><br>", id);
 			purple_notify_user_info_add_pair(user_info, NULL, tmp);
@@ -1234,7 +1234,7 @@
 	g_free(photo_url_text);
 	g_free(info2_data);
 	if (id != -1)
-		purple_imgstore_unref(id);
+		purple_imgstore_unref_by_id(id);
 #endif
 }
 
--- a/libpurple/protocols/zephyr/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/protocols/zephyr/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-pkgdir = $(libdir)/purple
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
 ZEPHYRSOURCES = \
 	ZAsyncLocate.c \
--- a/libpurple/proxy.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/proxy.c	Sat Apr 28 18:32:47 2007 +0000
@@ -1900,7 +1900,7 @@
 {
 	PurpleProxyInfo *info = purple_global_proxy_get_info();
 
-	if (!strcmp(name, "/core/proxy/type")) {
+	if (!strcmp(name, "/purple/proxy/type")) {
 		int proxytype;
 		const char *type = value;
 
@@ -1918,13 +1918,13 @@
 			proxytype = -1;
 
 		purple_proxy_info_set_type(info, proxytype);
-	} else if (!strcmp(name, "/core/proxy/host"))
+	} else if (!strcmp(name, "/purple/proxy/host"))
 		purple_proxy_info_set_host(info, value);
-	else if (!strcmp(name, "/core/proxy/port"))
+	else if (!strcmp(name, "/purple/proxy/port"))
 		purple_proxy_info_set_port(info, GPOINTER_TO_INT(value));
-	else if (!strcmp(name, "/core/proxy/username"))
+	else if (!strcmp(name, "/purple/proxy/username"))
 		purple_proxy_info_set_username(info, value);
-	else if (!strcmp(name, "/core/proxy/password"))
+	else if (!strcmp(name, "/purple/proxy/password"))
 		purple_proxy_info_set_password(info, value);
 }
 
@@ -1945,24 +1945,24 @@
 	global_proxy_info = purple_proxy_info_new();
 
 	/* Proxy */
-	purple_prefs_add_none("/core/proxy");
-	purple_prefs_add_string("/core/proxy/type", "none");
-	purple_prefs_add_string("/core/proxy/host", "");
-	purple_prefs_add_int("/core/proxy/port", 0);
-	purple_prefs_add_string("/core/proxy/username", "");
-	purple_prefs_add_string("/core/proxy/password", "");
+	purple_prefs_add_none("/purple/proxy");
+	purple_prefs_add_string("/purple/proxy/type", "none");
+	purple_prefs_add_string("/purple/proxy/host", "");
+	purple_prefs_add_int("/purple/proxy/port", 0);
+	purple_prefs_add_string("/purple/proxy/username", "");
+	purple_prefs_add_string("/purple/proxy/password", "");
 
 	/* Setup callbacks for the preferences. */
 	handle = purple_proxy_get_handle();
-	purple_prefs_connect_callback(handle, "/core/proxy/type", proxy_pref_cb,
+	purple_prefs_connect_callback(handle, "/purple/proxy/type", proxy_pref_cb,
 		NULL);
-	purple_prefs_connect_callback(handle, "/core/proxy/host", proxy_pref_cb,
+	purple_prefs_connect_callback(handle, "/purple/proxy/host", proxy_pref_cb,
 		NULL);
-	purple_prefs_connect_callback(handle, "/core/proxy/port", proxy_pref_cb,
+	purple_prefs_connect_callback(handle, "/purple/proxy/port", proxy_pref_cb,
 		NULL);
-	purple_prefs_connect_callback(handle, "/core/proxy/username",
+	purple_prefs_connect_callback(handle, "/purple/proxy/username",
 		proxy_pref_cb, NULL);
-	purple_prefs_connect_callback(handle, "/core/proxy/password",
+	purple_prefs_connect_callback(handle, "/purple/proxy/password",
 		proxy_pref_cb, NULL);
 }
 
--- a/libpurple/prpl.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/prpl.h	Sat Apr 28 18:32:47 2007 +0000
@@ -59,6 +59,7 @@
 #include "blist.h"
 #include "conversation.h"
 #include "ft.h"
+#include "imgstore.h"
 #include "notify.h"
 #include "proxy.h"
 #include "plugin.h"
@@ -284,7 +285,9 @@
 
 	const char *(*normalize)(const PurpleAccount *, const char *);
 
-	void (*set_buddy_icon)(PurpleConnection *, const char *cached_path);
+	/* The prpl does NOT own a reference to img.  If it needs one, it
+	 * must purple_imgstore_ref(img) itself. */
+	void (*set_buddy_icon)(PurpleConnection *, PurpleStoredImage *img);
 
 	void (*remove_group)(PurpleConnection *gc, PurpleGroup *group);
 
--- a/libpurple/purple-url-handler	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/purple-url-handler	Sat Apr 28 18:32:47 2007 +0000
@@ -92,13 +92,13 @@
 
 def aim(uri):
     protocol = "prpl-aim"
-    match = re.match(r"^(aim):([^?]*)(\?(.*))", uri)
+    match = re.match(r"^aim:([^?]*)(\?(.*))", uri)
     if not match:
         print "Invalid aim URI: %s" % uri
         return
 
-    command = urllib.unquote_plus(match.group(2))
-    paramstring = match.group(4)
+    command = urllib.unquote_plus(match.group(1))
+    paramstring = match.group(3)
     params = {}
     if paramstring:
         for param in paramstring.split("&"):
@@ -129,13 +129,13 @@
 
 def icq(uri):
     protocol = "prpl-icq"
-    match = re.match(r"^(icq):([^?]*)(\?(.*))", uri)
+    match = re.match(r"^icq:([^?]*)(\?(.*))", uri)
     if not match:
-        print "Invalid aim URI: %s" % uri
+        print "Invalid icq URI: %s" % uri
         return
 
-    command = urllib.unquote_plus(match.group(2))
-    paramstring = match.group(4)
+    command = urllib.unquote_plus(match.group(1))
+    paramstring = match.group(3)
     params = {}
     if paramstring:
         for param in paramstring.split("&"):
@@ -225,26 +225,26 @@
 
 def xmpp(uri):
     protocol = "prpl-jabber"
-    match = re.match(r"^xmpp:((//)?([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri)
+    match = re.match(r"^xmpp:(//([^/?#]*)/?)?([^?#]*)(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri)
     if not match:
         print "Invalid xmpp URI: %s" % uri
         return
 
-    tmp = match.group(3)
+    tmp = match.group(2)
     if (tmp):
         accountname = urllib.unquote_plus(tmp)
     else:
         accountname = ""
 
-    screenname = urllib.unquote_plus(match.group(5))
+    screenname = urllib.unquote_plus(match.group(3))
 
-    tmp = match.group(7)
+    tmp = match.group(5)
     if (tmp):
         command = urllib.unquote_plus(tmp)
     else:
         command = ""
 
-    paramstring = match.group(9)
+    paramstring = match.group(7)
     params = {}
     if paramstring:
         for param in paramstring.split(";"):
--- a/libpurple/purple.pc.in	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/purple.pc.in	Sat Apr 28 18:32:47 2007 +0000
@@ -11,4 +11,3 @@
 Requires: glib-2.0
 Cflags: -I${includedir}/libpurple
 Libs: -L${libdir} -lpurple
-
--- a/libpurple/request.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/request.c	Sat Apr 28 18:32:47 2007 +0000
@@ -1135,6 +1135,7 @@
 				   gboolean multiline, gboolean masked, gchar *hint,
 				   const char *ok_text, GCallback ok_cb,
 				   const char *cancel_text, GCallback cancel_cb,
+				   PurpleAccount *account, const char *who, PurpleConversation *conv,
 				   void *user_data)
 {
 	PurpleRequestUiOps *ops;
@@ -1155,6 +1156,7 @@
 											 multiline, masked, hint,
 											 ok_text, ok_cb,
 											 cancel_text, cancel_cb,
+											 account, who, conv,
 											 user_data);
 
 		handles = g_list_append(handles, info);
@@ -1170,6 +1172,7 @@
 					const char *secondary, unsigned int default_value,
 					const char *ok_text, GCallback ok_cb,
 					const char *cancel_text, GCallback cancel_cb,
+					PurpleAccount *account, const char *who, PurpleConversation *conv,
 					void *user_data, ...)
 {
 	void *ui_handle;
@@ -1181,7 +1184,8 @@
 	va_start(args, user_data);
 	ui_handle = purple_request_choice_varg(handle, title, primary, secondary,
 					     default_value, ok_text, ok_cb,
-					     cancel_text, cancel_cb, user_data, args);
+					     cancel_text, cancel_cb,
+					     account, who, conv, user_data, args);
 	va_end(args);
 
 	return ui_handle;
@@ -1193,6 +1197,7 @@
 			 unsigned int default_value,
 			 const char *ok_text, GCallback ok_cb,
 			 const char *cancel_text, GCallback cancel_cb,
+			 PurpleAccount *account, const char *who, PurpleConversation *conv,
 			 void *user_data, va_list choices)
 {
 	PurpleRequestUiOps *ops;
@@ -1212,6 +1217,7 @@
 						      default_value,
 						      ok_text, ok_cb,
 						      cancel_text, cancel_cb,
+							  account, who, conv,
 						      user_data, choices);
 
 		handles = g_list_append(handles, info);
@@ -1225,6 +1231,7 @@
 void *
 purple_request_action(void *handle, const char *title, const char *primary,
 					const char *secondary, unsigned int default_action,
+					PurpleAccount *account, const char *who, PurpleConversation *conv,
 					void *user_data, size_t action_count, ...)
 {
 	void *ui_handle;
@@ -1234,8 +1241,8 @@
 
 	va_start(args, action_count);
 	ui_handle = purple_request_action_varg(handle, title, primary, secondary,
-										 default_action, user_data,
-										 action_count, args);
+										 default_action, account, who, conv,
+										 user_data, action_count, args);
 	va_end(args);
 
 	return ui_handle;
@@ -1244,8 +1251,9 @@
 void *
 purple_request_action_varg(void *handle, const char *title,
 						 const char *primary, const char *secondary,
-						 unsigned int default_action, void *user_data,
-						 size_t action_count, va_list actions)
+						 unsigned int default_action,
+						 PurpleAccount *account, const char *who, PurpleConversation *conv,
+						  void *user_data, size_t action_count, va_list actions)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1260,8 +1268,8 @@
 		info->type      = PURPLE_REQUEST_ACTION;
 		info->handle    = handle;
 		info->ui_handle = ops->request_action(title, primary, secondary,
-											  default_action, user_data,
-											  action_count, actions);
+											  default_action, account, who, conv,
+											  user_data, action_count, actions);
 
 		handles = g_list_append(handles, info);
 
@@ -1276,6 +1284,7 @@
 					const char *secondary, PurpleRequestFields *fields,
 					const char *ok_text, GCallback ok_cb,
 					const char *cancel_text, GCallback cancel_cb,
+					PurpleAccount *account, const char *who, PurpleConversation *conv,
 					void *user_data)
 {
 	PurpleRequestUiOps *ops;
@@ -1295,6 +1304,7 @@
 		info->ui_handle = ops->request_fields(title, primary, secondary,
 											  fields, ok_text, ok_cb,
 											  cancel_text, cancel_cb,
+											  account, who, conv,
 											  user_data);
 
 		handles = g_list_append(handles, info);
@@ -1308,7 +1318,9 @@
 void *
 purple_request_file(void *handle, const char *title, const char *filename,
 				  gboolean savedialog,
-				  GCallback ok_cb, GCallback cancel_cb, void *user_data)
+				  GCallback ok_cb, GCallback cancel_cb,
+				  PurpleAccount *account, const char *who, PurpleConversation *conv,
+				  void *user_data)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1321,7 +1333,8 @@
 		info->type      = PURPLE_REQUEST_FILE;
 		info->handle    = handle;
 		info->ui_handle = ops->request_file(title, filename, savedialog,
-											ok_cb, cancel_cb, user_data);
+											ok_cb, cancel_cb,
+											account, who, conv, user_data);
 		handles = g_list_append(handles, info);
 		return info->ui_handle;
 	}
@@ -1331,7 +1344,9 @@
 
 void *
 purple_request_folder(void *handle, const char *title, const char *dirname,
-				  GCallback ok_cb, GCallback cancel_cb, void *user_data)
+				  GCallback ok_cb, GCallback cancel_cb,
+				  PurpleAccount *account, const char *who, PurpleConversation *conv,
+				  void *user_data)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1344,7 +1359,9 @@
 		info->type      = PURPLE_REQUEST_FOLDER;
 		info->handle    = handle;
 		info->ui_handle = ops->request_folder(title, dirname,
-											ok_cb, cancel_cb, user_data);
+											ok_cb, cancel_cb,
+											account, who, conv,
+											user_data);
 		handles = g_list_append(handles, info);
 		return info->ui_handle;
 	}
--- a/libpurple/request.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/request.h	Sat Apr 28 18:32:47 2007 +0000
@@ -187,28 +187,34 @@
 						   gboolean multiline, gboolean masked, gchar *hint,
 						   const char *ok_text, GCallback ok_cb,
 						   const char *cancel_text, GCallback cancel_cb,
+						   PurpleAccount *account, const char *who, PurpleConversation *conv,
 						   void *user_data);
 	void *(*request_choice)(const char *title, const char *primary,
 							const char *secondary, unsigned int default_value,
 							const char *ok_text, GCallback ok_cb,
 							const char *cancel_text, GCallback cancel_cb,
+							PurpleAccount *account, const char *who, PurpleConversation *conv,
 							void *user_data, va_list choices);
 	void *(*request_action)(const char *title, const char *primary,
 							const char *secondary, unsigned int default_action,
+							PurpleAccount *account, const char *who, PurpleConversation *conv,
 							void *user_data, size_t action_count,
 							va_list actions);
 	void *(*request_fields)(const char *title, const char *primary,
 							const char *secondary, PurpleRequestFields *fields,
 							const char *ok_text, GCallback ok_cb,
 							const char *cancel_text, GCallback cancel_cb,
+							PurpleAccount *account, const char *who, PurpleConversation *conv,
 							void *user_data);
 	void *(*request_file)(const char *title, const char *filename,
-						  gboolean savedialog, GCallback ok_cb,
-						  GCallback cancel_cb, void *user_data);
+						  gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
+						  PurpleAccount *account, const char *who, PurpleConversation *conv,
+						  void *user_data);
 	void (*close_request)(PurpleRequestType type, void *ui_handle);
 	void *(*request_folder)(const char *title, const char *dirname,
-						  GCallback ok_cb, GCallback cancel_cb,
-						  void *user_data);
+							GCallback ok_cb, GCallback cancel_cb,
+							PurpleAccount *account, const char *who, PurpleConversation *conv,
+							void *user_data);
 } PurpleRequestUiOps;
 
 typedef void (*PurpleRequestInputCb)(void *, const char *);
@@ -1172,6 +1178,9 @@
  * @param ok_cb         The callback for the @c OK button.
  * @param cancel_text   The text for the @c Cancel button.
  * @param cancel_cb     The callback for the @c Cancel button.
+ * @param account		The PurpleAccount associated with this request, or NULL if none is
+ * @param who			The username of the buddy assocaited with this request, or NULL if none is
+ * @param conv			The PurpleConversation associated with this request, or NULL if none is
  * @param user_data     The data to pass to the callback.
  *
  * @return A UI-specific handle.
@@ -1182,6 +1191,7 @@
 						 gboolean multiline, gboolean masked, gchar *hint,
 						 const char *ok_text, GCallback ok_cb,
 						 const char *cancel_text, GCallback cancel_cb,
+						 PurpleAccount *account, const char *who, PurpleConversation *conv,
 						 void *user_data);
 
 /**
@@ -1198,6 +1208,9 @@
  * @param ok_cb         The callback for the @c OK button.
  * @param cancel_text   The text for the @c Cancel button.
  * @param cancel_cb     The callback for the @c Cancel button.
+ * @param account		The PurpleAccount associated with this request, or NULL if none is
+ * @param who			The username of the buddy assocaited with this request, or NULL if none is
+ * @param conv			The PurpleConversation associated with this request, or NULL if none is 
  * @param user_data     The data to pass to the callback.
  * @param ...           The choices.  This argument list should be
  *                      terminated with a NULL parameter.
@@ -1209,6 +1222,7 @@
 						  unsigned int default_value,
 						  const char *ok_text, GCallback ok_cb,
 						  const char *cancel_text, GCallback cancel_cb,
+						  PurpleAccount *account, const char *who, PurpleConversation *conv,
 						  void *user_data, ...);
 
 /**
@@ -1225,6 +1239,9 @@
  * @param ok_cb         The callback for the @c OK button.
  * @param cancel_text   The text for the @c Cancel button.
  * @param cancel_cb     The callback for the @c Cancel button.
+ * @param account		The PurpleAccount associated with this request, or NULL if none is
+ * @param who			The username of the buddy assocaited with this request, or NULL if none is
+ * @param conv			The PurpleConversation associated with this request, or NULL if none is 
  * @param user_data     The data to pass to the callback.
  * @param choices       The choices.  This argument list should be
  *                      terminated with a @c NULL parameter.
@@ -1236,6 +1253,7 @@
 							   unsigned int default_value,
 							   const char *ok_text, GCallback ok_cb,
 							   const char *cancel_text, GCallback cancel_cb,
+							   PurpleAccount *account, const char *who, PurpleConversation *conv,
 							   void *user_data, va_list choices);
 
 /**
@@ -1250,6 +1268,9 @@
  * @param primary        The main point of the message.
  * @param secondary      The secondary information.
  * @param default_action The default value.
+ * @param account		 The PurpleAccount associated with this request, or NULL if none is
+ * @param who			 The username of the buddy assocaited with this request, or NULL if none is
+ * @param conv			 The PurpleConversation associated with this request, or NULL if none is 
  * @param user_data      The data to pass to the callback.
  * @param action_count   The number of actions.
  * @param ...            A list of actions.  These are pairs of
@@ -1265,6 +1286,7 @@
 void *purple_request_action(void *handle, const char *title,
 						  const char *primary, const char *secondary,
 						  unsigned int default_action,
+						  PurpleAccount *account, const char *who, PurpleConversation *conv,
 						  void *user_data, size_t action_count, ...);
 
 /**
@@ -1279,6 +1301,9 @@
  * @param primary        The main point of the message.
  * @param secondary      The secondary information.
  * @param default_action The default value.
+ * @param account		 The PurpleAccount associated with this request, or NULL if none is
+ * @param who			 The username of the buddy assocaited with this request, or NULL if none is
+ * @param conv			 The PurpleConversation associated with this request, or NULL if none is 
  * @param user_data      The data to pass to the callback.
  * @param action_count   The number of actions.
  * @param actions        A list of actions and callbacks.
@@ -1288,6 +1313,7 @@
 void *purple_request_action_varg(void *handle, const char *title,
 							   const char *primary, const char *secondary,
 							   unsigned int default_action,
+							   PurpleAccount *account, const char *who, PurpleConversation *conv,
 							   void *user_data, size_t action_count,
 							   va_list actions);
 
@@ -1305,6 +1331,9 @@
  * @param ok_cb       The callback for the @c OK button.
  * @param cancel_text The text for the @c Cancel button.
  * @param cancel_cb   The callback for the @c Cancel button.
+ * @param account	  The PurpleAccount associated with this request, or NULL if none is
+ * @param who		  The username of the buddy associated with this request, or NULL if none is
+ * @param conv		  The PurpleConversation associated with this request, or NULL if none is 
  * @param user_data   The data to pass to the callback.
  *
  * @return A UI-specific handle.
@@ -1314,6 +1343,7 @@
 						  PurpleRequestFields *fields,
 						  const char *ok_text, GCallback ok_cb,
 						  const char *cancel_text, GCallback cancel_cb,
+						  PurpleAccount *account, const char *who, PurpleConversation *conv,
 						  void *user_data);
 
 /**
@@ -1335,28 +1365,30 @@
  * A wrapper for purple_request_action() that uses @c Yes and @c No buttons.
  */
 #define purple_request_yes_no(handle, title, primary, secondary, \
-							default_action, user_data, yes_cb, no_cb) \
+							default_action, account, who, conv, \
+							user_data, yes_cb, no_cb) \
 	purple_request_action((handle), (title), (primary), (secondary), \
-						(default_action), (user_data), 2, \
+						(default_action), account, who, conv, (user_data), 2, \
 						_("_Yes"), (yes_cb), _("_No"), (no_cb))
 
 /**
  * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
  */
 #define purple_request_ok_cancel(handle, title, primary, secondary, \
-							default_action, user_data, ok_cb, cancel_cb) \
+							default_action, account, who, conv, \
+						    user_data, ok_cb, cancel_cb) \
 	purple_request_action((handle), (title), (primary), (secondary), \
-						(default_action), (user_data), 2, \
+						(default_action), account, who, conv, (user_data), 2, \
 						_("_OK"), (ok_cb), _("_Cancel"), (cancel_cb))
 
 /**
  * A wrapper for purple_request_action() that uses Accept and Cancel buttons.
  */
 #define purple_request_accept_cancel(handle, title, primary, secondary, \
-								   default_action, user_data, accept_cb, \
-								   cancel_cb) \
+								   default_action, account, who, conv, \
+								   user_data, accept_cb, cancel_cb) \
 	purple_request_action((handle), (title), (primary), (secondary), \
-						(default_action), (user_data), 2, \
+						(default_action), account, who, conv, (user_data), 2, \
 						_("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb))
 
 /**
@@ -1372,6 +1404,9 @@
  *                    False if it is being used to open a file.
  * @param ok_cb       The callback for the @c OK button.
  * @param cancel_cb   The callback for the @c Cancel button.
+ * @param account	  The PurpleAccount associated with this request, or NULL if none is
+ * @param who		  The username of the buddy assocaited with this request, or NULL if none is
+ * @param conv		  The PurpleConversation associated with this request, or NULL if none is 
  * @param user_data   The data to pass to the callback.
  *
  * @return A UI-specific handle.
@@ -1379,6 +1414,7 @@
 void *purple_request_file(void *handle, const char *title, const char *filename,
 						gboolean savedialog,
 						GCallback ok_cb, GCallback cancel_cb,
+						PurpleAccount *account, const char *who, PurpleConversation *conv,
 						void *user_data);
 
 /**
@@ -1392,12 +1428,16 @@
  * @param dirname     The default directory name (may be @c NULL)
  * @param ok_cb       The callback for the @c OK button.
  * @param cancel_cb   The callback for the @c Cancel button.
+ * @param account	  The PurpleAccount associated with this request, or NULL if none is
+ * @param who		  The username of the buddy assocaited with this request, or NULL if none is
+ * @param conv		  The PurpleConversation associated with this request, or NULL if none is 
  * @param user_data   The data to pass to the callback.
  *
  * @return A UI-specific handle.
  */
 void *purple_request_folder(void *handle, const char *title, const char *dirname,
 						GCallback ok_cb, GCallback cancel_cb,
+						PurpleAccount *account, const char *who, PurpleConversation *conv,
 						void *user_data);
 
 /*@}*/
--- a/libpurple/savedstatuses.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/savedstatuses.c	Sat Apr 28 18:32:47 2007 +0000
@@ -705,13 +705,13 @@
 	 * If we just deleted our current status or our idleaway status,
 	 * then set the appropriate pref back to 0.
 	 */
-	current = purple_prefs_get_int("/core/savedstatus/default");
+	current = purple_prefs_get_int("/purple/savedstatus/default");
 	if (current == creation_time)
-		purple_prefs_set_int("/core/savedstatus/default", 0);
+		purple_prefs_set_int("/purple/savedstatus/default", 0);
 
-	idleaway = purple_prefs_get_int("/core/savedstatus/idleaway");
+	idleaway = purple_prefs_get_int("/purple/savedstatus/idleaway");
 	if (idleaway == creation_time)
-		purple_prefs_set_int("/core/savedstatus/idleaway", 0);
+		purple_prefs_set_int("/purple/savedstatus/idleaway", 0);
 
 	return TRUE;
 }
@@ -765,7 +765,7 @@
 	int creation_time;
 	PurpleSavedStatus *saved_status = NULL;
 
-	creation_time = purple_prefs_get_int("/core/savedstatus/default");
+	creation_time = purple_prefs_get_int("/purple/savedstatus/default");
 
 	if (creation_time != 0)
 		saved_status = g_hash_table_lookup(creation_times, &creation_time);
@@ -779,7 +779,7 @@
 		 * using?  In any case, add a default status.
 		 */
 		saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_AVAILABLE);
-		purple_prefs_set_int("/core/savedstatus/default",
+		purple_prefs_set_int("/purple/savedstatus/default",
 						   purple_savedstatus_get_creation_time(saved_status));
 	}
 
@@ -792,7 +792,7 @@
 	int creation_time;
 	PurpleSavedStatus *saved_status = NULL;
 
-	creation_time = purple_prefs_get_int("/core/savedstatus/idleaway");
+	creation_time = purple_prefs_get_int("/purple/savedstatus/idleaway");
 
 	if (creation_time != 0)
 		saved_status = g_hash_table_lookup(creation_times, &creation_time);
@@ -807,7 +807,7 @@
 		{
 			saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_AWAY);
 			purple_savedstatus_set_message(saved_status, DEFAULT_AUTOAWAY_MESSAGE);
-			purple_prefs_set_int("/core/savedstatus/idleaway",
+			purple_prefs_set_int("/purple/savedstatus/idleaway",
 							   purple_savedstatus_get_creation_time(saved_status));
 		}
 	}
@@ -818,7 +818,7 @@
 gboolean
 purple_savedstatus_is_idleaway()
 {
-	return purple_prefs_get_bool("/core/savedstatus/isidleaway");
+	return purple_prefs_get_bool("/purple/savedstatus/isidleaway");
 }
 
 void
@@ -836,7 +836,7 @@
 		purple_idle_touch();
 
 	old = purple_savedstatus_get_current();
-	purple_prefs_set_bool("/core/savedstatus/isidleaway", idleaway);
+	purple_prefs_set_bool("/purple/savedstatus/isidleaway", idleaway);
 	saved_status = idleaway ? purple_savedstatus_get_idleaway()
 			: purple_savedstatus_get_default();
 
@@ -871,7 +871,7 @@
 	int creation_time;
 	PurpleSavedStatus *saved_status = NULL;
 
-	creation_time = purple_prefs_get_int("/core/savedstatus/startup");
+	creation_time = purple_prefs_get_int("/purple/savedstatus/startup");
 
 	if (creation_time != 0)
 		saved_status = g_hash_table_lookup(creation_times, &creation_time);
@@ -1074,7 +1074,7 @@
 	saved_status->usage_count++;
 	saved_statuses = g_list_remove(saved_statuses, saved_status);
 	saved_statuses = g_list_insert_sorted(saved_statuses, saved_status, saved_statuses_sort_func);
-	purple_prefs_set_int("/core/savedstatus/default",
+	purple_prefs_set_int("/purple/savedstatus/default",
 					   purple_savedstatus_get_creation_time(saved_status));
 
 	accounts = purple_accounts_get_all_active();
@@ -1155,12 +1155,12 @@
 	 * sees a creation_time of 0, then it will create a default
 	 * saved status and return that to the user.
 	 */
-	purple_prefs_add_none("/core/savedstatus");
-	purple_prefs_add_int("/core/savedstatus/default", 0);
-	purple_prefs_add_int("/core/savedstatus/startup", 0);
-	purple_prefs_add_bool("/core/savedstatus/startup_current_status", TRUE);
-	purple_prefs_add_int("/core/savedstatus/idleaway", 0);
-	purple_prefs_add_bool("/core/savedstatus/isidleaway", FALSE);
+	purple_prefs_add_none("/purple/savedstatus");
+	purple_prefs_add_int("/purple/savedstatus/default", 0);
+	purple_prefs_add_int("/purple/savedstatus/startup", 0);
+	purple_prefs_add_bool("/purple/savedstatus/startup_current_status", TRUE);
+	purple_prefs_add_int("/purple/savedstatus/idleaway", 0);
+	purple_prefs_add_bool("/purple/savedstatus/isidleaway", FALSE);
 
 	load_statuses();
 
--- a/libpurple/server.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/server.c	Sat Apr 28 18:32:47 2007 +0000
@@ -138,7 +138,7 @@
 	 * XXX - If "only auto-reply when away & idle" is set, then shouldn't
 	 * this only reset lar->sent if we're away AND idle?
 	 */
-	auto_reply_pref = purple_prefs_get_string("/core/away/auto_reply");
+	auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply");
 	if ((gc->flags & PURPLE_CONNECTION_AUTO_RESP) &&
 			!purple_presence_is_available(presence) &&
 			strcmp(auto_reply_pref, "never")) {
@@ -503,7 +503,7 @@
 		const gchar *auto_reply_pref;
 		const char *away_msg = NULL;
 
-		auto_reply_pref = purple_prefs_get_string("/core/away/auto_reply");
+		auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply");
 
 		presence = purple_account_get_presence(account);
 		status = purple_presence_get_active_status(presence);
@@ -677,8 +677,8 @@
 
 
 		purple_request_accept_cancel(gc, NULL, _("Accept chat invitation?"), buf2,
-							   PURPLE_DEFAULT_ACTION_NONE, cid,
-							   G_CALLBACK(chat_invite_accept),
+							   PURPLE_DEFAULT_ACTION_NONE, account, who, NULL,
+							   cid, G_CALLBACK(chat_invite_accept),
 							   G_CALLBACK(chat_invite_reject));
 	}
 	else if (plugin_return > 0)
--- a/libpurple/sound.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/sound.c	Sat Apr 28 18:32:47 2007 +0000
@@ -34,7 +34,7 @@
 static gboolean
 purple_sound_play_required(const PurpleAccount *account)
 {
-	gint pref_status = purple_prefs_get_int("/core/sound/while_status");
+	gint pref_status = purple_prefs_get_int("/purple/sound/while_status");
 
 	if (pref_status == 3)
 	{
@@ -125,8 +125,8 @@
 	                     purple_value_new(PURPLE_TYPE_SUBTYPE,
 	                                    PURPLE_SUBTYPE_ACCOUNT));
 
-	purple_prefs_add_none("/core/sound");
-	purple_prefs_add_int("/core/sound/while_status", STATUS_AVAILABLE);
+	purple_prefs_add_none("/purple/sound");
+	purple_prefs_add_int("/purple/sound/while_status", STATUS_AVAILABLE);
 }
 
 void
--- a/libpurple/status.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/status.c	Sat Apr 28 18:32:47 2007 +0000
@@ -597,9 +597,7 @@
 notify_buddy_status_update(PurpleBuddy *buddy, PurplePresence *presence,
 		PurpleStatus *old_status, PurpleStatus *new_status)
 {
-	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
-
-	if (purple_prefs_get_bool("/core/logging/log_system"))
+	if (purple_prefs_get_bool("/purple/logging/log_system"))
 	{
 		time_t current_time = time(NULL);
 		const char *buddy_alias = purple_buddy_get_alias(buddy);
@@ -637,9 +635,6 @@
 
 		g_free(tmp);
 	}
-
-	if (ops != NULL && ops->update != NULL)
-		ops->update(purple_get_blist(), (PurpleBlistNode*)buddy);
 }
 
 static void
@@ -1284,7 +1279,7 @@
 
 	if (!old_idle && idle)
 	{
-		if (purple_prefs_get_bool("/core/logging/log_system"))
+		if (purple_prefs_get_bool("/purple/logging/log_system"))
 		{
 			PurpleLog *log = purple_account_get_log(buddy->account, FALSE);
 
@@ -1301,7 +1296,7 @@
 	}
 	else if (old_idle && !idle)
 	{
-		if (purple_prefs_get_bool("/core/logging/log_system"))
+		if (purple_prefs_get_bool("/purple/logging/log_system"))
 		{
 			PurpleLog *log = purple_account_get_log(buddy->account, FALSE);
 
@@ -1364,7 +1359,7 @@
 
 		account = purple_presence_get_account(presence);
 
-		if (purple_prefs_get_bool("/core/logging/log_system"))
+		if (purple_prefs_get_bool("/purple/logging/log_system"))
 		{
 			PurpleLog *log = purple_account_get_log(account, FALSE);
 
@@ -1713,38 +1708,38 @@
 {
 	void *handle = purple_status_get_handle;
 
-	purple_prefs_add_none("/core/status");
-	purple_prefs_add_none("/core/status/scores");
+	purple_prefs_add_none("/purple/status");
+	purple_prefs_add_none("/purple/status/scores");
 
-	purple_prefs_add_int("/core/status/scores/offline",
+	purple_prefs_add_int("/purple/status/scores/offline",
 			primitive_scores[PURPLE_STATUS_OFFLINE]);
-	purple_prefs_add_int("/core/status/scores/available",
+	purple_prefs_add_int("/purple/status/scores/available",
 			primitive_scores[PURPLE_STATUS_AVAILABLE]);
-	purple_prefs_add_int("/core/status/scores/invisible",
+	purple_prefs_add_int("/purple/status/scores/invisible",
 			primitive_scores[PURPLE_STATUS_INVISIBLE]);
-	purple_prefs_add_int("/core/status/scores/away",
+	purple_prefs_add_int("/purple/status/scores/away",
 			primitive_scores[PURPLE_STATUS_AWAY]);
-	purple_prefs_add_int("/core/status/scores/extended_away",
+	purple_prefs_add_int("/purple/status/scores/extended_away",
 			primitive_scores[PURPLE_STATUS_EXTENDED_AWAY]);
-	purple_prefs_add_int("/core/status/scores/idle",
+	purple_prefs_add_int("/purple/status/scores/idle",
 			primitive_scores[SCORE_IDLE]);
 
-	purple_prefs_connect_callback(handle, "/core/status/scores/offline",
+	purple_prefs_connect_callback(handle, "/purple/status/scores/offline",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(PURPLE_STATUS_OFFLINE));
-	purple_prefs_connect_callback(handle, "/core/status/scores/available",
+	purple_prefs_connect_callback(handle, "/purple/status/scores/available",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(PURPLE_STATUS_AVAILABLE));
-	purple_prefs_connect_callback(handle, "/core/status/scores/invisible",
+	purple_prefs_connect_callback(handle, "/purple/status/scores/invisible",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(PURPLE_STATUS_INVISIBLE));
-	purple_prefs_connect_callback(handle, "/core/status/scores/away",
+	purple_prefs_connect_callback(handle, "/purple/status/scores/away",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(PURPLE_STATUS_AWAY));
-	purple_prefs_connect_callback(handle, "/core/status/scores/extended_away",
+	purple_prefs_connect_callback(handle, "/purple/status/scores/extended_away",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(PURPLE_STATUS_EXTENDED_AWAY));
-	purple_prefs_connect_callback(handle, "/core/status/scores/idle",
+	purple_prefs_connect_callback(handle, "/purple/status/scores/idle",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(SCORE_IDLE));
 
--- a/libpurple/stun.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/stun.c	Sat Apr 28 18:32:47 2007 +0000
@@ -371,7 +371,7 @@
 }
 
 PurpleStunNatDiscovery *purple_stun_discover(StunCallback cb) {
-	const char *servername = purple_prefs_get_string("/core/network/stun_server");
+	const char *servername = purple_prefs_get_string("/purple/network/stun_server");
 
 	purple_debug_info("stun", "using server %s\n", servername);
 
@@ -428,6 +428,6 @@
 }
 
 void purple_stun_init() {
-	purple_prefs_add_string("/core/network/stun_server", "");
+	purple_prefs_add_string("/purple/network/stun_server", "");
 	purple_stun_discover(NULL);
 }
--- a/libpurple/tests/check_libpurple.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/tests/check_libpurple.c	Sat Apr 28 18:32:47 2007 +0000
@@ -54,7 +54,14 @@
 int main(void)
 {
 	int number_failed;
-	SRunner *sr = srunner_create (master_suite());
+	SRunner *sr;
+
+	/* Make g_return_... functions fatal, ALWAYS.
+	 * As this is the test code, this is NOT controlled
+	 * by PURPLE_FATAL_ASSERTS. */
+	g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL);
+
+	sr = srunner_create (master_suite());
 
 	srunner_add_suite(sr, cipher_suite());
 	srunner_add_suite(sr, jabber_jutil_suite());
--- a/libpurple/util.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/util.c	Sat Apr 28 18:32:47 2007 +0000
@@ -65,7 +65,7 @@
 };
 
 static char custom_home_dir[MAXPATHLEN];
-static char home_dir[MAXPATHLEN];
+static char home_dir[MAXPATHLEN] = "";
 
 PurpleMenuAction *
 purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data,
@@ -2245,25 +2245,17 @@
 #endif
 }
 
-/* Returns the argument passed to -c IFF it was present, or ~/.gaim IFF it
- * exists, else ~/.purple. */
+/* Returns the argument passed to -c IFF it was present, or ~/.purple. */
 const char *
 purple_user_dir(void)
 {
-	if (custom_home_dir != NULL && strlen(custom_home_dir) > 0) {
+	if (custom_home_dir != NULL && *custom_home_dir) {
 		strcpy ((char*) &home_dir, (char*) &custom_home_dir);
-	} else {
+	} else if (!*home_dir) {
 		const gchar *hd = purple_home_dir();
 
 		if (hd) {
 			g_strlcpy((char*) &home_dir, hd, sizeof(home_dir));
-			g_strlcat((char*) &home_dir, G_DIR_SEPARATOR_S ".gaim",
-					sizeof(home_dir));
-
-			if (g_file_test(home_dir, G_FILE_TEST_EXISTS))
-				return home_dir;
-
-			g_strlcpy((char*) &home_dir, hd, sizeof(home_dir));
 			g_strlcat((char*) &home_dir, G_DIR_SEPARATOR_S ".purple",
 					sizeof(home_dir));
 		}
@@ -2577,6 +2569,27 @@
 	return fp;
 }
 
+const char *
+purple_util_get_image_extension(gconstpointer data, size_t len)
+{
+	g_return_val_if_fail(data != NULL, NULL);
+	g_return_val_if_fail(len   > 0,    NULL);
+
+	if (len >= 4)
+	{
+		if (!strncmp((char *)data, "BM", 2))
+			return "bmp";
+		else if (!strncmp((char *)data, "GIF8", 4))
+			return "gif";
+		else if (!strncmp((char *)data, "\xff\xd8\xff\xe0", 4))
+			return "jpg";
+		else if (!strncmp((char *)data, "\x89PNG", 4))
+			return "png";
+	}
+
+	return "icon";
+}
+
 gboolean
 purple_program_is_valid(const char *program)
 {
@@ -2654,7 +2667,7 @@
 gboolean
 purple_running_osx(void)
 {
-#if defined(__APPLE__)	
+#if defined(__APPLE__)
 	return TRUE;
 #else
 	return FALSE;
@@ -2683,6 +2696,7 @@
 purple_normalize(const PurpleAccount *account, const char *str)
 {
 	const char *ret = NULL;
+	static char buf[BUF_LEN];
 
 	if (account != NULL)
 	{
@@ -2699,7 +2713,6 @@
 
 	if (ret == NULL)
 	{
-		static char buf[BUF_LEN];
 		char *tmp;
 
 		tmp = g_utf8_normalize(str, -1, G_NORMALIZE_DEFAULT);
@@ -3072,7 +3085,6 @@
 	char *cmd;
 	GHashTable *params = NULL;
 	int len;
-printf("got handler uri \n");
 	if (!(tmp = strchr(uri, ':')) || tmp == uri) {
 		purple_debug_error("util", "Malformed protocol handler message - missing protocol.\n");
 		return;
@@ -4195,7 +4207,7 @@
 	signal(SIGABRT, SIG_DFL);	/* 6:  abort program */
 
 #ifdef SIGPOLL
-	signal(SIGPOLL,  SIG_DFL);	/* 7:  pollable event (POSIX) */	
+	signal(SIGPOLL,  SIG_DFL);	/* 7:  pollable event (POSIX) */
 #endif /* SIGPOLL */
 
 #ifdef SIGEMT
@@ -4211,7 +4223,7 @@
 	signal(SIGTERM, SIG_DFL);	/* 15: software termination signal */
 	signal(SIGCHLD, SIG_DFL);	/* 20: child status has changed */
 	signal(SIGXCPU, SIG_DFL);	/* 24: exceeded CPU time limit */
-	signal(SIGXFSZ, SIG_DFL);	/* 25: exceeded file size limit */	
+	signal(SIGXFSZ, SIG_DFL);	/* 25: exceeded file size limit */
 #endif /* HAVE_SIGNAL_H */
 #endif /* !_WIN32 */
 }
--- a/libpurple/util.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/util.h	Sat Apr 28 18:32:47 2007 +0000
@@ -469,7 +469,7 @@
  * the first character of the entity. If given an unrecognized entity, the function
  * returns @c NULL.
  *
- * Note that this function, unlike purple_unescape_html(), does not search 
+ * Note that this function, unlike purple_unescape_html(), does not search
  * the string for the entity, does not replace the entity, and does not
  * return a newly allocated string.
  *
@@ -598,6 +598,25 @@
 FILE *purple_mkstemp(char **path, gboolean binary);
 
 /**
+ * Returns an extension corresponding to the image data's file type.
+ *
+ * @param data A pointer to the image data
+ * @param len  The length of the image data
+ *
+ * @return The appropriate extension, or "icon" if unknown.
+ */
+const char *
+purple_util_get_image_extension(gconstpointer data, size_t len);
+
+/*@}*/
+
+
+/**************************************************************************/
+/** @name Environment Detection Functions                                 */
+/**************************************************************************/
+/*@{*/
+
+/**
  * Checks if the given program name is valid and executable.
  *
  * @param program The file name of the application.
@@ -1118,6 +1137,7 @@
  * inherit the handlers of the parent.
  */
 void purple_restore_default_signal_handlers(void);
+
 #ifdef __cplusplus
 }
 #endif
--- a/libpurple/value.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/value.h	Sat Apr 28 18:32:47 2007 +0000
@@ -76,7 +76,8 @@
 	PURPLE_SUBTYPE_XFER,
 	PURPLE_SUBTYPE_SAVEDSTATUS,
 	PURPLE_SUBTYPE_XMLNODE,
-	PURPLE_SUBTYPE_USERINFO
+	PURPLE_SUBTYPE_USERINFO,
+	PURPLE_SUBTYPE_STORED_IMAGE
 } PurpleSubType;
 
 /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/version.c	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,43 @@
+/*
+ * @file version.c Version Functions
+ * @ingroup core
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "internal.h"
+
+#include "version.h"
+
+const guint purple_major_version = PURPLE_MAJOR_VERSION;
+const guint purple_minor_version = PURPLE_MINOR_VERSION;
+const guint purple_micro_version = PURPLE_MICRO_VERSION;
+
+const char *purple_version_check(guint required_major, guint required_minor, guint required_micro)
+{
+	if (required_major > PURPLE_MAJOR_VERSION)
+		return "libpurple version too old (major mismatch)";
+	if (required_major < PURPLE_MAJOR_VERSION)
+		return "libpurple version too new (major mismatch)";
+	if (required_minor > PURPLE_MINOR_VERSION)
+		return "libpurple version too old (minor mismatch)";
+	if ((required_minor == PURPLE_MINOR_VERSION) && (required_micro > PURPLE_MICRO_VERSION))
+		return "libpurple version too old (micro mismatch)";
+	return NULL;
+}
--- a/libpurple/version.h	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/**
- * @file version.h Purple Versioning
- *
- * purple
- *
- * Purple is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef _PURPLE_VERSION_H_
-#define _PURPLE_VERSION_H_
-
-#define PURPLE_MAJOR_VERSION 2
-#define PURPLE_MINOR_VERSION 0
-#define PURPLE_MICRO_VERSION 0
-
-#define PURPLE_VERSION_CHECK(x,y,z) ((x) == PURPLE_MAJOR_VERSION && ((y) < PURPLE_MINOR_VERSION || ((y) == PURPLE_MINOR_VERSION && (z) <= PURPLE_MICRO_VERSION)))
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _PURPLE_VERSION_H_ */
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/version.h.in	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,61 @@
+/**
+ * @file version.h Purple Versioning
+ *
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef _PURPLE_VERSION_H_
+#define _PURPLE_VERSION_H_
+
+#define PURPLE_MAJOR_VERSION (@PURPLE_MAJOR_VERSION@)
+#define PURPLE_MINOR_VERSION (@PURPLE_MINOR_VERSION@)
+#define PURPLE_MICRO_VERSION (@PURPLE_MICRO_VERSION@)
+
+#define PURPLE_VERSION_CHECK(x,y,z) ((x) == PURPLE_MAJOR_VERSION && \
+									 ((y) < PURPLE_MINOR_VERSION || \
+									  ((y) == PURPLE_MINOR_VERSION && (z) <= PURPLE_MICRO_VERSION)))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const guint purple_major_version;
+const guint purple_minor_version;
+const guint purple_micro_version;
+
+/**
+ * Checks that the libpurple version is compatible with the requested
+ * version
+ *
+ * @param required_major: the required major version.
+ * @param required_minor: the required minor version.
+ * @param required_micro: the required micro version.
+ *
+ * @return NULL if the versions are compatible, or a string describing
+ *         the version mismatch if not compatible.
+ */
+const char *purple_version_check(guint required_major, guint required_minor, guint required_micro);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PURPLE_VERSION_H_ */
+
--- a/libpurple/win32/global.mak	Wed Apr 25 06:11:35 2007 +0000
+++ b/libpurple/win32/global.mak	Sat Apr 28 18:32:47 2007 +0000
@@ -57,10 +57,13 @@
 GCCWARNINGS := -Waggregate-return -Wcast-align -Wdeclaration-after-statement -Werror-implicit-function-declaration -Wextra -Wno-sign-compare -Wno-unused-parameter -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wundef
 
 # parse the version number from the configure.ac file if it is newer
-#AC_INIT([pidgin], [2.0.0dev], [devel@pidgin.im])
+#m4_define([purple_major_version], [2])
+#m4_define([purple_minor_version], [0])
+#m4_define([purple_micro_version], [0])
+#m4_define([purple_version_suffix], [devel])
 PIDGIN_VERSION := $(shell \
   if [ ! $(PIDGIN_TREE_TOP)/VERSION -nt $(PIDGIN_TREE_TOP)/configure.ac ]; then \
-    awk 'BEGIN {FS="\\] *, *\\["} /^AC_INIT\(.+\)/ {printf("%s",$$2); exit}' \
+    awk 'BEGIN {FS="[\\(\\)\\[\\]]"} /^m4_define..purple_(major|minor)_version/ {printf("%s.",$$5);} /^m4_define..purple_micro_version/ {printf("%s",$$5);} /^m4_define..purple_version_suffix/ {printf("%s",$$5); exit}' \
       $(PIDGIN_TREE_TOP)/configure.ac > $(PIDGIN_TREE_TOP)/VERSION; \
   fi; \
   cat $(PIDGIN_TREE_TOP)/VERSION \
--- a/pidgin.desktop.in	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin.desktop.in	Sat Apr 28 18:32:47 2007 +0000
@@ -4,7 +4,7 @@
 _GenericName=Internet Messenger
 _Comment=Send instant messages over multiple protocols
 Exec=pidgin
-Icon=pidgin.png
+Icon=pidgin
 StartupNotify=true
 Terminal=false
 Type=Application
--- a/pidgin.spec.in	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin.spec.in	Sat Apr 28 18:32:47 2007 +0000
@@ -227,8 +227,10 @@
 # Delete files that we don't want to put in any of the RPMs
 rm -f $RPM_BUILD_ROOT%{_libdir}/finch/*.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/pidgin/*.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/*.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/private/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple/liboscar.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple/libjabber.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple/private/*.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
 rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod
 find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
@@ -337,6 +339,7 @@
 
 %{_bindir}/pidgin
 %{_datadir}/pixmaps/pidgin
+%{_datadir}/icons/hicolor/*/apps/pidgin.png
 %dir %{_datadir}/sounds/pidgin
 %{_datadir}/sounds/pidgin/*
 %{_datadir}/applications/*
@@ -347,7 +350,7 @@
 %defattr(-, root, root)
 
 %{_libdir}/libpurple.so.*
-%dir %{_libdir}/libpurple
+%dir %{_libdir}/purple-2
 %attr(755, root, root) %{perl_vendorarch}/Purple.pm
 %dir %{perl_vendorarch}/auto/Purple
 %attr(755, root, root) %{perl_vendorarch}/auto/Purple/Purple.so
@@ -433,6 +436,9 @@
 %endif
 
 %changelog
+* Wed Apr 25 2007 Stu Tomlinson <stu@nosnilmot.com>
+- Update libpurple to pick up plugins in %%{_libdir}/purple
+
 * Sun Apr 22 2007 Stu Tomlinson <stu@nosnilmot.com>
 - Remove Epoch because it's gone in Fedora now
 - Add virtual provides for gaim & gaim-devel
--- a/pidgin/gtkaccount.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkaccount.c	Sat Apr 28 18:32:47 2007 +0000
@@ -122,8 +122,7 @@
 	GtkWidget *icon_filesel;
 	GtkWidget *icon_preview;
 	GtkWidget *icon_text;
-	char *cached_icon_path;
-	char *icon_path;
+	PurpleStoredImage *icon_img;
 
 	/* Protocol Options */
 	GtkWidget *protocol_frame;
@@ -195,20 +194,25 @@
 }
 
 static void
-set_dialog_icon(AccountPrefsDialog *dialog, gchar *new_cached_icon_path, gchar *new_icon_path)
+set_dialog_icon(AccountPrefsDialog *dialog, gpointer data, size_t len, gchar *new_icon_path)
 {
-	char *filename;
 	GdkPixbuf *pixbuf = NULL;
 
-	g_free(dialog->cached_icon_path);
-	g_free(dialog->icon_path);
-	dialog->cached_icon_path = new_cached_icon_path;
-	dialog->icon_path = new_icon_path;
-
-	filename = purple_buddy_icons_get_full_path(dialog->cached_icon_path);
-	if (filename != NULL) {
-		pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
-		g_free(filename);
+	dialog->icon_img = purple_imgstore_unref(dialog->icon_img);
+	if (data != NULL)
+	{
+		if (len > 0)
+			dialog->icon_img = purple_imgstore_add(data, len, new_icon_path);
+		else
+			g_free(data);
+	}
+
+	if (dialog->icon_img != NULL) {
+		GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
+		gdk_pixbuf_loader_write(loader, purple_imgstore_get_data(dialog->icon_img),
+		                        purple_imgstore_get_size(dialog->icon_img), NULL);
+		gdk_pixbuf_loader_close(loader, NULL);
+		pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
 	}
 
 	if (pixbuf && dialog->prpl_info &&
@@ -298,12 +302,14 @@
 static void
 icon_filesel_choose_cb(const char *filename, gpointer data)
 {
-	AccountPrefsDialog *dialog;
-
-	dialog = data;
+	AccountPrefsDialog *dialog = data;
 
 	if (filename != NULL)
-		set_dialog_icon(dialog, pidgin_convert_buddy_icon(dialog->plugin, filename), g_strdup(filename));
+	{
+		size_t len;
+		gpointer data = pidgin_convert_buddy_icon(dialog->plugin, filename, &len);
+		set_dialog_icon(dialog, data, len, g_strdup(filename));
+	}
 
 	dialog->icon_filesel = NULL;
 }
@@ -318,7 +324,7 @@
 static void
 icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog)
 {
-	set_dialog_icon(dialog, NULL, NULL);
+	set_dialog_icon(dialog, NULL, 0, NULL);
 }
 
 static void
@@ -333,6 +339,9 @@
 		if (!g_ascii_strncasecmp(name, "file://", 7)) {
 			GError *converr = NULL;
 			gchar *tmp, *rtmp;
+			gpointer data;
+			size_t len;
+
 			/* It looks like we're dealing with a local file. */
 			if(!(tmp = g_filename_from_uri(name, NULL, &converr))) {
 				purple_debug(PURPLE_DEBUG_ERROR, "buddyicon", "%s\n",
@@ -342,8 +351,10 @@
 			}
 			if ((rtmp = strchr(tmp, '\r')) || (rtmp = strchr(tmp, '\n')))
 				*rtmp = '\0';
-			set_dialog_icon(dialog, pidgin_convert_buddy_icon(dialog->plugin, tmp), g_strdup(tmp));
-			g_free(tmp);
+
+			data = pidgin_convert_buddy_icon(dialog->plugin, tmp, &len);
+			/* This takes ownership of tmp */
+			set_dialog_icon(dialog, data, len, tmp);
 		}
 		gtk_drag_finish(dc, TRUE, FALSE, t);
 	}
@@ -591,8 +602,8 @@
 	gtk_widget_show(dialog->icon_entry);
 	/* TODO: Uh, isn't this next line pretty useless? */
 	pidgin_set_accessible_label (dialog->icon_entry, label);
-	dialog->cached_icon_path = NULL;
-	dialog->icon_path = NULL;
+	purple_imgstore_unref(dialog->icon_img);
+	dialog->icon_img = NULL;
 
 	vbox2 = gtk_vbox_new(FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
@@ -617,19 +628,27 @@
 	}
 
 	if (dialog->account != NULL) {
+		PurpleStoredImage *img;
+		gpointer data = NULL;
+		size_t len = 0;
+
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->new_mail_check),
 					     purple_account_get_check_mail(dialog->account));
 
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->icon_check),
 					     !purple_account_get_bool(dialog->account, "use-global-buddyicon",
 								       TRUE));
-		set_dialog_icon(dialog,
-				g_strdup(purple_account_get_ui_string(dialog->account,
-						PIDGIN_UI, "non-global-buddyicon-cached-path", NULL)),
-				g_strdup(purple_account_get_ui_string(dialog->account,
-						PIDGIN_UI, "non-global-buddyicon-path", NULL)));
+
+		img = purple_buddy_icons_find_account_icon(dialog->account);
+		if (img)
+		{
+			len = purple_imgstore_get_size(img);
+			data = g_memdup(purple_imgstore_get_data(img), len);
+		}
+		set_dialog_icon(dialog, data, len,
+		                g_strdup(purple_account_get_buddy_icon_path(dialog->account)));
 	} else {
-		set_dialog_icon(dialog, NULL, NULL);
+		set_dialog_icon(dialog, NULL, 0, NULL);
 	}
 
 	if (!dialog->prpl_info ||
@@ -1072,22 +1091,7 @@
 	g_list_free(dialog->protocol_opt_entries);
 	g_free(dialog->protocol_id);
 
-	if (dialog->cached_icon_path != NULL)
-	{
-		const char *icon = purple_account_get_ui_string(dialog->account, PIDGIN_UI, "non-global-buddyicon-cached-path", NULL);
-		if (dialog->cached_icon_path != NULL && (icon == NULL || strcmp(dialog->cached_icon_path, icon)))
-		{
-			/* The user set an icon, which would've been cached by convert_buddy_icon,
-			 * but didn't save the changes. Delete the cache file. */
-			char *filename = g_build_filename(purple_buddy_icons_get_cache_dir(), dialog->cached_icon_path, NULL);
-			g_unlink(filename);
-			g_free(filename);
-		}
-
-		g_free(dialog->cached_icon_path);
-	}
-
-	g_free(dialog->icon_path);
+	purple_imgstore_unref(dialog->icon_img);
 
 	if (dialog->icon_filesel)
 		gtk_widget_destroy(dialog->icon_filesel);
@@ -1143,26 +1147,37 @@
 	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(dialog->plugin);
 	if (prpl_info != NULL && prpl_info->icon_spec.format != NULL)
 	{
+		const char *filename;
+
 		if (new || purple_account_get_bool(account, "use-global-buddyicon", TRUE) ==
 			gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->icon_check)))
 		{
 			icon_change = TRUE;
 		}
 		purple_account_set_bool(account, "use-global-buddyicon", !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->icon_check)));
-		purple_account_set_ui_string(account, PIDGIN_UI, "non-global-buddyicon-cached-path", dialog->cached_icon_path);
-		purple_account_set_ui_string(account, PIDGIN_UI, "non-global-buddyicon-path", dialog->icon_path);
+
 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->icon_check)))
 		{
-			purple_account_set_buddy_icon_path(account, dialog->icon_path);
-			purple_account_set_buddy_icon(account, dialog->cached_icon_path);
+			if (dialog->icon_img)
+			{
+				size_t len = purple_imgstore_get_size(dialog->icon_img);
+				purple_buddy_icons_set_account_icon(account,
+				                                    g_memdup(purple_imgstore_get_data(dialog->icon_img), len),
+				                                    len);
+				purple_account_set_buddy_icon_path(account, purple_imgstore_get_filename(dialog->icon_img));
+			}
+			else
+			{
+				purple_buddy_icons_set_account_icon(account, NULL, 0);
+				purple_account_set_buddy_icon_path(account, NULL);
+			}
 		}
-		else if (purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon") && icon_change)
+		else if ((filename = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon")) && icon_change)
 		{
-			const char *filename = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon");
-			char *icon = pidgin_convert_buddy_icon(dialog->plugin, filename);
+			size_t len;
+			gpointer data = pidgin_convert_buddy_icon(dialog->plugin, filename, &len);
 			purple_account_set_buddy_icon_path(account, filename);
-			purple_account_set_buddy_icon(account, icon);
-			g_free(icon);
+			purple_buddy_icons_set_account_icon(account, data, len);
 		}
 	}
 
@@ -1858,7 +1873,9 @@
 							  purple_account_get_username(account));
 
 		purple_request_close_with_handle(account);
-		purple_request_action(account, NULL, buf, NULL, 0, account, 2,
+		purple_request_action(account, NULL, buf, NULL, 0,
+							account, NULL, NULL,
+							account, 2,
 							_("Delete"), delete_account_cb,
 							_("Cancel"), NULL);
 		g_free(buf);
@@ -1975,7 +1992,7 @@
 set_account(GtkListStore *store, GtkTreeIter *iter, PurpleAccount *account, GdkPixbuf *global_buddyicon)
 {
 	GdkPixbuf *pixbuf, *buddyicon = NULL;
-	const char *path = NULL;
+	PurpleStoredImage *img = NULL;
 
 	pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM);
 	if ((pixbuf != NULL) && purple_account_is_disconnected(account))
@@ -1986,12 +2003,22 @@
 			buddyicon = g_object_ref(G_OBJECT(global_buddyicon));
 		/* This is for when set_account() is called for a single account */
 		else
-			path = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon");
-	} else
-		path = purple_account_get_ui_string(account, PIDGIN_UI, "non-global-buddyicon-path", NULL);
-
-	if (path != NULL) {
-		GdkPixbuf *buddyicon_pixbuf = gdk_pixbuf_new_from_file(path, NULL);
+			img = purple_buddy_icons_find_account_icon(account);
+	} else {
+		img = purple_buddy_icons_find_account_icon(account);
+	}
+
+	if (img != NULL) {
+		GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
+		GdkPixbuf *buddyicon_pixbuf;
+
+		gdk_pixbuf_loader_write(loader, purple_imgstore_get_data(img),
+		                        purple_imgstore_get_size(img), NULL);
+		gdk_pixbuf_loader_close(loader, NULL);
+		buddyicon_pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
+
+		purple_imgstore_unref(img);
+
 		if (buddyicon_pixbuf != NULL) {
 			buddyicon = gdk_pixbuf_scale_simple(buddyicon_pixbuf, 22, 22, GDK_INTERP_HYPER);
 			g_object_unref(G_OBJECT(buddyicon_pixbuf));
--- a/pidgin/gtkblist.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkblist.c	Sat Apr 28 18:32:47 2007 +0000
@@ -2155,7 +2155,7 @@
 
 
 static GdkPixbuf *pidgin_blist_get_buddy_icon(PurpleBlistNode *node,
-		gboolean scaled, gboolean greyed, gboolean custom)
+		gboolean scaled, gboolean greyed)
 {
 	GdkPixbuf *buf, *ret = NULL;
 	GdkPixbufLoader *loader;
@@ -2163,24 +2163,22 @@
 	const guchar *data = NULL;
 	gsize len;
 	PurpleBuddy *buddy = NULL;
-	PurpleChat *chat = NULL;
 	PurpleAccount *account = NULL;
 	PurplePluginProtocolInfo *prpl_info = NULL;
+	PurpleStoredImage *custom_img;
 
 	if(PURPLE_BLIST_NODE_IS_CONTACT(node)) {
 		buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
 	} else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) {
 		buddy = (PurpleBuddy*)node;
-	} else if(PURPLE_BLIST_NODE_IS_CHAT(node)) {
-		chat = (PurpleChat*)node;
 	} else {
 		return NULL;
 	}
 
-	if(buddy != NULL)
-		account = purple_buddy_get_account(buddy);
-	else if(chat != NULL)
-		account = chat->account;
+	if(buddy == NULL)
+		return NULL;
+
+	account = purple_buddy_get_account(buddy);
 
 	if(account && account->gc)
 		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl);
@@ -2190,44 +2188,34 @@
 		return NULL;
 #endif
 
-	if (custom) {
-		const char *file = purple_blist_node_get_string((PurpleBlistNode*)purple_buddy_get_contact(buddy),
-							"custom_buddy_icon");
-		if (file && *file) {
-			char *contents;
-			GError *err  = NULL;
-			if (!g_file_get_contents(file, &contents, &len, &err)) {
-				purple_debug_info("custom -icon", "Could not open custom-icon %s for %s\n",
-							file, purple_buddy_get_name(buddy), err->message);
-				g_error_free(err);
-			} else
-				data = (const guchar*)contents;
-		}
+	custom_img = purple_buddy_icons_find_custom_icon(purple_buddy_get_contact(buddy));
+	if (custom_img)
+	{
+		data = purple_imgstore_get_data(custom_img);
+		len = purple_imgstore_get_size(custom_img);
 	}
 
 	if (data == NULL) {
-		if(buddy != NULL) {
-			if (!(icon = purple_buddy_get_icon(buddy)))
-				if (!(icon = purple_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/
-					return NULL;
-			data = purple_buddy_icon_get_data(icon, &len);
-		}
-		custom = FALSE;  /* We are not using the custom icon */
-	}
-
-	if(data == NULL)
-		return NULL;
+		if (!(icon = purple_buddy_get_icon(buddy)))
+			if (!(icon = purple_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/
+				return NULL;
+		data = purple_buddy_icon_get_data(icon, &len);
+
+		if(data == NULL)
+			return NULL;
+	}
 
 	loader = gdk_pixbuf_loader_new();
 	gdk_pixbuf_loader_write(loader, data, len, NULL);
 	gdk_pixbuf_loader_close(loader, NULL);
+
+	purple_imgstore_unref(custom_img);
+
 	buf = gdk_pixbuf_loader_get_pixbuf(loader);
 	if (buf)
 		g_object_ref(G_OBJECT(buf));
 	g_object_unref(G_OBJECT(loader));
 
-	if (custom)
-		g_free((void*)data);
 	if (buf) {
 		int orig_width, orig_height;
 		int scale_width, scale_height;
@@ -2335,7 +2323,7 @@
 	}
 
 	td->status_icon = pidgin_blist_get_status_icon(node, PIDGIN_STATUS_ICON_LARGE);
-	td->avatar = pidgin_blist_get_buddy_icon(node, !full, FALSE, TRUE);
+	td->avatar = pidgin_blist_get_buddy_icon(node, !full, FALSE);
 	td->prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL);
 	tooltip_text = pidgin_get_tooltip_text(node, full);
 	td->layout = gtk_widget_create_pango_layout(gtkblist->tipwindow, NULL);
@@ -3954,6 +3942,7 @@
 
 	enabled = purple_account_get_enabled(account, purple_core_get_ui());
 	purple_request_action(account, _("Connection Error"), primary, text, 2,
+						account, NULL, NULL,
 						account, 3,
 						_("OK"), NULL,
 						_("Modify Account"), PURPLE_CALLBACK(ce_modify_account_cb),
@@ -4893,7 +4882,7 @@
 	status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy,
 						PIDGIN_STATUS_ICON_SMALL);
 
-	avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE, TRUE);
+	avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE);
 	if (!avatar) {
 		g_object_ref(G_OBJECT(gtkblist->empty_avatar));
 		avatar = gtkblist->empty_avatar;
@@ -5078,7 +5067,7 @@
 		status = pidgin_blist_get_status_icon(node,
 				 PIDGIN_STATUS_ICON_SMALL);
 		emblem = pidgin_blist_get_emblem(node);
-		avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE, TRUE);
+		avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE);
 
 		mark = g_markup_escape_text(purple_chat_get_name(chat), -1);
 
@@ -5805,7 +5794,9 @@
 					   _("Please enter the name of the group to be added."),
 					   NULL, FALSE, FALSE, NULL,
 					   _("Add"), G_CALLBACK(add_group_cb),
-					   _("Cancel"), NULL, NULL);
+					   _("Cancel"), NULL,
+					   NULL, NULL, NULL,
+					   NULL);
 }
 
 void
--- a/pidgin/gtkconv.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkconv.c	Sat Apr 28 18:32:47 2007 +0000
@@ -1012,7 +1012,9 @@
 
 	purple_request_file(PIDGIN_CONVERSATION(conv), _("Save Conversation"),
 					  purple_escape_filename(buf),
-					  TRUE, G_CALLBACK(savelog_writefile_cb), NULL, conv);
+					  TRUE, G_CALLBACK(savelog_writefile_cb), NULL,
+					  NULL, NULL, conv,
+					  conv);
 
 	g_free(buf);
 }
@@ -2153,7 +2155,7 @@
 
 	conv = gtkconv->active_conv;
 
-	if (!purple_prefs_get_bool("/core/conversations/im/send_typing"))
+	if (!purple_prefs_get_bool("/purple/conversations/im/send_typing"))
 		return;
 
 	got_typing_keypress(gtkconv, (gtk_text_iter_is_start(position) &&
@@ -2172,7 +2174,7 @@
 
 	conv = gtkconv->active_conv;
 
-	if (!purple_prefs_get_bool("/core/conversations/im/send_typing"))
+	if (!purple_prefs_get_bool("/purple/conversations/im/send_typing"))
 		return;
 
 	im = PURPLE_CONV_IM(conv);
@@ -2482,23 +2484,6 @@
 	fclose(fp);
 }
 
-static const char *
-custom_icon_pref_name(PidginConversation *gtkconv)
-{
-	PurpleConversation *conv;
-	PurpleAccount *account;
-	PurpleBuddy *buddy;
-
-	conv = gtkconv->active_conv;
-	account = purple_conversation_get_account(conv);
-	buddy = purple_find_buddy(account, purple_conversation_get_name(conv));
-	if (buddy) {
-		PurpleContact *contact = purple_buddy_get_contact(buddy);
-		return purple_blist_node_get_string((PurpleBlistNode*)contact, "custom_buddy_icon");
-	}
-	return NULL;
-}
-
 static void
 custom_icon_sel_cb(const char *filename, gpointer data)
 {
@@ -2538,14 +2523,14 @@
 
 	g_return_if_fail(conv != NULL);
 
-	ext = purple_buddy_icon_get_type(purple_conv_im_get_icon(PURPLE_CONV_IM(conv)));
-	if (ext == NULL)
-		ext = "icon";
+	ext = purple_buddy_icon_get_extension(purple_conv_im_get_icon(PURPLE_CONV_IM(conv)));
 
 	buf = g_strdup_printf("%s.%s", purple_normalize(conv->account, conv->name), ext);
 
 	purple_request_file(gtkconv, _("Save Icon"), buf, TRUE,
-					 G_CALLBACK(saveicon_writefile_cb), NULL, gtkconv);
+					 G_CALLBACK(saveicon_writefile_cb), NULL,
+					conv->account, NULL, conv,
+					gtkconv);
 
 	g_free(buf);
 }
@@ -2576,7 +2561,8 @@
 icon_menu(GtkObject *obj, GdkEventButton *e, PidginConversation *gtkconv)
 {
 	static GtkWidget *menu = NULL;
-	const char *pref;
+	PurpleConversation *conv;
+	PurpleBuddy *buddy;
 
 	if (e->button != 3 || e->type != GDK_BUTTON_PRESS)
 		return FALSE;
@@ -2610,11 +2596,18 @@
 							 0, 0, NULL);
 
 	/* Is there a custom icon for this person? */
-	pref = custom_icon_pref_name(gtkconv);
-	if (pref && *pref) {
-		pidgin_new_item_from_stock(menu, _("Remove Custom Icon"), NULL,
-							G_CALLBACK(remove_custom_icon_cb), gtkconv,
-							0, 0, NULL);
+	conv = gtkconv->active_conv;
+	buddy = purple_find_buddy(purple_conversation_get_account(conv),
+	                          purple_conversation_get_name(conv));
+	if (buddy)
+	{
+		PurpleContact *contact = purple_buddy_get_contact(buddy);
+		if (contact && purple_buddy_icons_has_custom_icon(contact))
+		{
+			pidgin_new_item_from_stock(menu, _("Remove Custom Icon"), NULL,
+			                           G_CALLBACK(remove_custom_icon_cb), gtkconv,
+			                           0, 0, NULL);
+		}
 	}
 
 	gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time);
@@ -3141,7 +3134,10 @@
 		gtk_widget_hide(gtkwin->menu.typing_icon);
 	}
 
-	if (!im || (purple_conv_im_get_typing_state(im) == PURPLE_NOT_TYPING)) {
+	if (im == NULL)
+		return;
+
+	if (purple_conv_im_get_typing_state(im) == PURPLE_NOT_TYPING) {
 		if (gtkconv->u.im->typing_timer != 0)
 			g_source_remove(gtkconv->u.im->typing_timer);
 		return;
@@ -6061,7 +6057,7 @@
 		else if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT)
 		{
 			atk_object_set_description(accessibility_obj, _("Unread Messages"));
-			strncpy(style, "color=\"#a40000\" weight=\"bold\"", sizeof(style));
+			strncpy(style, "color=\"#cc0000\" weight=\"bold\"", sizeof(style));
 		}
 		else if (gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT)
 		{
@@ -6177,12 +6173,14 @@
 	PidginConversation *gtkconv;
 	PidginWindow *win;
 
+	PurpleBuddy *buddy;
+
 	GdkPixbufLoader *loader;
 	GdkPixbufAnimation *anim;
 	GError *err = NULL;
 
-	const char *custom = NULL;
-	const void *data = NULL;
+	PurpleStoredImage *custom_img = NULL;
+	gconstpointer data = NULL;
 	size_t len;
 
 	GdkPixbuf *buf;
@@ -6239,17 +6237,18 @@
 	if (purple_conversation_get_gc(conv) == NULL)
 		return;
 
-	custom = custom_icon_pref_name(gtkconv);
-	if (custom) {
-		/* There is a custom icon for this user */
-		char *contents = NULL;
-		if (!g_file_get_contents(custom, &contents, &len, &err)) {
-			purple_debug_warning("custom icon", "could not load custom icon %s for %s\n",
-						custom, purple_conversation_get_name(conv));
-			g_error_free(err);
-			err = NULL;
-		} else
-			data = contents;
+	buddy = purple_find_buddy(account, purple_conversation_get_name(conv));
+	if (buddy)
+	{
+		PurpleContact *contact = purple_buddy_get_contact(buddy);
+		if (contact) {
+			custom_img = purple_buddy_icons_find_custom_icon(contact);
+			if (custom_img) {
+				/* There is a custom icon for this user */
+				data = purple_imgstore_get_data(custom_img);
+				len = purple_imgstore_get_size(custom_img);
+			}
+		}
 	}
 
 	if (data == NULL) {
@@ -6259,20 +6258,22 @@
 			return;
 
 		data = purple_buddy_icon_get_data(icon, &len);
-		custom = NULL;
+
+		if (data == NULL)
+			return;
 	}
 
 	loader = gdk_pixbuf_loader_new();
 	gdk_pixbuf_loader_write(loader, data, len, NULL);
 	gdk_pixbuf_loader_close(loader, &err);
+
+	purple_imgstore_unref(custom_img);
+
 	anim = gdk_pixbuf_loader_get_animation(loader);
 	if (anim)
 		g_object_ref(G_OBJECT(anim));
 	g_object_unref(loader);
 
-	if (custom)
-		g_free((void*)data);
-
 	if (!anim)
 		return;
 	gtkconv->u.im->anim = anim;
@@ -6283,9 +6284,6 @@
 		g_error_free(err);
 	}
 
-	if (!gtkconv->u.im->anim)
-		return;
-
 	if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) {
 		gtkconv->u.im->iter = NULL;
 		buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim);
--- a/pidgin/gtkdebug.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkdebug.c	Sat Apr 28 18:32:47 2007 +0000
@@ -231,7 +231,9 @@
 save_cb(GtkWidget *w, DebugWindow *win)
 {
 	purple_request_file(win, _("Save Debug Log"), "purple-debug.log", TRUE,
-					  G_CALLBACK(save_writefile_cb), NULL, win);
+					  G_CALLBACK(save_writefile_cb), NULL,
+					  NULL, NULL, NULL,
+					  win);
 }
 
 static void
@@ -264,7 +266,7 @@
 {
 	win->timestamps = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
 
-	purple_prefs_set_bool("/core/debug/timestamps", win->timestamps);
+	purple_prefs_set_bool("/purple/debug/timestamps", win->timestamps);
 }
 
 static void
@@ -786,9 +788,9 @@
 		                                    win);
 
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
-		                             purple_prefs_get_bool("/core/debug/timestamps"));
+		                             purple_prefs_get_bool("/purple/debug/timestamps"));
 
-		purple_prefs_connect_callback(handle, "/core/debug/timestamps",
+		purple_prefs_connect_callback(handle, "/purple/debug/timestamps",
 		                            timestamps_pref_cb, button);
 
 #ifdef HAVE_REGEX_H
@@ -1052,7 +1054,7 @@
 		return;
 	}
 
-	timestamps = purple_prefs_get_bool("/core/debug/timestamps");
+	timestamps = purple_prefs_get_bool("/purple/debug/timestamps");
 
 	/*
 	 * For some reason we only print the timestamp if category is
--- a/pidgin/gtkdialogs.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkdialogs.c	Sat Apr 28 18:32:47 2007 +0000
@@ -107,7 +107,7 @@
 static struct developer retired_developers[] = {
 	{"Herman Bloggs",		N_("win32 port"), "herman@bluedigits.com"},
 	{"Jim Duchek",			N_("maintainer"), "jim@linuxpimps.com"},
-	{"Rob Flynn",			N_("maintainer"), "purple@robflynn.com"},
+	{"Rob Flynn",			N_("maintainer"), NULL},
 	{"Adam Fritzler",		N_("libfaim maintainer"), NULL},
 	/* If "lazy bum" translates literally into a serious insult, use something else or omit it. */
 	{"Syd Logan",			N_("hacker and designated driver [lazy bum]"), NULL},
@@ -264,7 +264,7 @@
 }
 
 /* This function puts the version number onto the pixmap we use in the 'about' 
- * screen in Purple. */
+ * screen in Pidgin. */
 static void
 pidgin_logo_versionize(GdkPixbuf **original, GtkWidget *widget) {
 	GdkPixmap *pixmap;
@@ -719,6 +719,7 @@
 						fields,
 						_("OK"), G_CALLBACK(pidgin_dialogs_im_cb),
 						_("Cancel"), NULL,
+						NULL, NULL, NULL,
 						NULL);
 }
 
@@ -856,6 +857,7 @@
 						fields,
 						_("OK"), G_CALLBACK(pidgin_dialogs_info_cb),
 						_("Cancel"), NULL,
+						NULL, NULL, NULL,
 						NULL);
 }
 
@@ -947,6 +949,7 @@
 						fields,
 						_("OK"), G_CALLBACK(pidgin_dialogs_log_cb),
 						_("Cancel"), NULL,
+						NULL, NULL, NULL,
 						NULL);
 }
 
@@ -965,7 +968,9 @@
 					   _("Enter an alias for this contact."),
 					   contact->alias, FALSE, FALSE, NULL,
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_contact_cb),
-					   _("Cancel"), NULL, contact);
+					   _("Cancel"), NULL,
+					   NULL, purple_contact_get_alias(contact), NULL,
+					   contact);
 }
 
 static void
@@ -987,7 +992,9 @@
 	purple_request_input(NULL, _("Alias Buddy"), NULL,
 					   secondary, buddy->alias, FALSE, FALSE, NULL,
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_buddy_cb),
-					   _("Cancel"), NULL, buddy);
+					   _("Cancel"), NULL,
+					   purple_buddy_get_account(buddy), purple_buddy_get_name(buddy), NULL,
+					   buddy);
 
 	g_free(secondary);
 }
@@ -1007,7 +1014,9 @@
 					   _("Enter an alias for this chat."),
 					   chat->alias, FALSE, FALSE, NULL,
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_chat_cb),
-					   _("Cancel"), NULL, chat);
+					   _("Cancel"), NULL,
+					   chat->account, NULL, NULL,
+					   chat);
 }
 
 static void
@@ -1049,9 +1058,12 @@
 						"want to continue?", contact->totalsize - 1),
 					buddy->name, contact->totalsize - 1);
 
-		purple_request_action(contact, NULL, _("Remove Contact"), text, 0, contact, 2,
+		purple_request_action(contact, NULL, _("Remove Contact"), text, 0,
+				NULL, purple_contact_get_alias(contact), NULL,
+				contact, 2,
 				_("_Remove Contact"), G_CALLBACK(pidgin_dialogs_remove_contact_cb),
-				_("Cancel"), NULL);
+				_("Cancel"),
+				NULL);
 
 		g_free(text);
 	}
@@ -1087,7 +1099,9 @@
 	ggp->parent = source;
 	ggp->new_name = g_strdup(new_name);
 	
-	purple_request_action(source, NULL, _("Merge Groups"), text, 0, ggp, 2,
+	purple_request_action(source, NULL, _("Merge Groups"), text, 0,
+			NULL, NULL, NULL,
+			ggp, 2,
 			_("_Merge Groups"), G_CALLBACK(pidgin_dialogs_merge_groups_cb),
 			_("Cancel"), G_CALLBACK(free_ggmo));
 
@@ -1141,7 +1155,9 @@
 	text = g_strdup_printf(_("You are about to remove the group %s and all its members from your buddy list.  Do you want to continue?"),
 						   group->name);
 
-	purple_request_action(group, NULL, _("Remove Group"), text, 0, group, 2,
+	purple_request_action(group, NULL, _("Remove Group"), text, 0,
+						NULL, NULL, NULL,
+						group, 2,
 						_("_Remove Group"), G_CALLBACK(pidgin_dialogs_remove_group_cb),
 						_("Cancel"), NULL);
 
@@ -1178,7 +1194,9 @@
 	text = g_strdup_printf(_("You are about to remove %s from your buddy list.  Do you want to continue?"),
 						   buddy->name);
 
-	purple_request_action(buddy, NULL, _("Remove Buddy"), text, 0, buddy, 2,
+	purple_request_action(buddy, NULL, _("Remove Buddy"), text, 0,
+						purple_buddy_get_account(buddy), purple_buddy_get_name(buddy), NULL,
+						buddy, 2,
 						_("_Remove Buddy"), G_CALLBACK(pidgin_dialogs_remove_buddy_cb),
 						_("Cancel"), NULL);
 
@@ -1203,7 +1221,9 @@
 	text = g_strdup_printf(_("You are about to remove the chat %s from your buddy list.  Do you want to continue?"),
 			name ? name : "");
 
-	purple_request_action(chat, NULL, _("Remove Chat"), text, 0, chat, 2,
+	purple_request_action(chat, NULL, _("Remove Chat"), text, 0,
+						chat->account, NULL, NULL,
+						chat, 2,
 						_("_Remove Chat"), G_CALLBACK(pidgin_dialogs_remove_chat_cb),
 						_("Cancel"), NULL);
 
--- a/pidgin/gtkdocklet-x11.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkdocklet-x11.c	Sat Apr 28 18:32:47 2007 +0000
@@ -25,6 +25,7 @@
 #include "internal.h"
 #include "pidgin.h"
 #include "debug.h"
+#include "prefs.h"
 #include "pidginstock.h"
 
 #include "gtkdialogs.h"
@@ -32,7 +33,8 @@
 #include "eggtrayicon.h"
 #include "gtkdocklet.h"
 
-#define EMBED_TIMEOUT 5000
+#define SHORT_EMBED_TIMEOUT 5000
+#define LONG_EMBED_TIMEOUT 15000
 
 /* globals */
 static EggTrayIcon *docklet = NULL;
@@ -44,12 +46,12 @@
 static int docklet_height = 0;
 
 /* protos */
-static void docklet_x11_create(void);
+static void docklet_x11_create(gboolean);
 
 static gboolean
-docklet_x11_create_cb()
+docklet_x11_recreate_cb()
 {
-	docklet_x11_create();
+	docklet_x11_create(TRUE);
 
 	return FALSE; /* for when we're called by the glib idle handler */
 }
@@ -62,6 +64,7 @@
 	g_source_remove(embed_timeout);
 	embed_timeout = 0;
 	pidgin_docklet_embedded();
+	purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded", FALSE);
 }
 
 static void
@@ -74,7 +77,7 @@
 	g_object_unref(G_OBJECT(docklet));
 	docklet = NULL;
 
-	g_idle_add(docklet_x11_create_cb, NULL);
+	g_idle_add(docklet_x11_recreate_cb, NULL);
 }
 
 static void
@@ -236,7 +239,7 @@
 }
 
 static void
-docklet_x11_create()
+docklet_x11_create(gboolean recreate)
 {
 	GtkWidget *box;
 
@@ -272,17 +275,35 @@
 	 * previous visibility state.  If the docklet does not get embedded within
 	 * the timeout, it will be removed as a visibility manager until it does
 	 * get embedded.  Ideally, we would only call docklet_embedded() when the
-	 * icon was actually embedded.
+	 * icon was actually embedded. This only happens when the docklet is first
+	 * created, not when being recreated.
+	 *
+	 * The x11 docklet tracks whether it successfully embedded in a pref and
+	 * allows for a longer timeout period if it successfully embedded the last
+	 * time it was run. This should hopefully solve problems with the buddy
+	 * list not properly starting hidden when gaim is started on login.
 	 */
-	pidgin_docklet_embedded();
-	embed_timeout = g_timeout_add(EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL);
+	if(!recreate) {
+		pidgin_docklet_embedded();
+		if(purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded")) {
+			embed_timeout = g_timeout_add(LONG_EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL);
+		} else {
+			embed_timeout = g_timeout_add(SHORT_EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL);
+		}
+	}
 
 	purple_debug(PURPLE_DEBUG_INFO, "docklet", "created\n");
 }
 
+static void
+docklet_x11_create_ui_op()
+{
+	docklet_x11_create(FALSE);
+}
+
 static struct docklet_ui_ops ui_ops =
 {
-	docklet_x11_create,
+	docklet_x11_create_ui_op,
 	docklet_x11_destroy,
 	docklet_x11_update_icon,
 	docklet_x11_blank_icon,
@@ -298,4 +319,6 @@
 docklet_ui_init()
 {
 	pidgin_docklet_set_ui_ops(&ui_ops);
+	purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet/x11");
+	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded", FALSE);
 }
--- a/pidgin/gtkimhtmltoolbar.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Sat Apr 28 18:32:47 2007 +0000
@@ -417,6 +417,7 @@
 					    fields,
 					    _("_Insert"), G_CALLBACK(do_insert_link_cb),
 					    _("Cancel"), G_CALLBACK(cancel_link_cb),
+						NULL, NULL, NULL,
 					    toolbar);
 		g_free(msg);
 		g_free(desc);
@@ -480,8 +481,7 @@
 
 	name = strrchr(filename, G_DIR_SEPARATOR) + 1;
 
-	id = purple_imgstore_add(filedata, size, name);
-	g_free(filedata);
+	id = purple_imgstore_add_with_id(filedata, size, name);
 
 	if (id == 0) {
 		buf = g_strdup_printf(_("Failed to store image: %s\n"), filename);
@@ -499,7 +499,7 @@
 	gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)),
 									 &iter, ins);
 	gtk_imhtml_insert_image_at_iter(GTK_IMHTML(toolbar->imhtml), id, &iter);
-	purple_imgstore_unref(id);
+	purple_imgstore_unref_by_id(id);
 }
 
 
--- a/pidgin/gtklog.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtklog.c	Sat Apr 28 18:32:47 2007 +0000
@@ -295,8 +295,11 @@
 	data2[0] = lv->treestore;
 	data2[1] = data[3]; /* iter */
 	data2[2] = log;
-	purple_request_action(lv, NULL, "Delete Log?", tmp,
-	                    0, data2, 2, _("Delete"), delete_log_cb, _("Cancel"), delete_log_cleanup_cb);
+	purple_request_action(lv, NULL, "Delete Log?", tmp, 0, 
+						NULL, NULL, NULL,
+						data2, 2,
+						_("Delete"), delete_log_cb,
+						_("Cancel"), delete_log_cleanup_cb);
 	g_free(tmp);
 }
 
@@ -517,14 +520,14 @@
 		const char *log_preferences = NULL;
 
 		if (ht == NULL) {
-			if (!purple_prefs_get_bool("/core/logging/log_system"))
+			if (!purple_prefs_get_bool("/purple/logging/log_system"))
 				log_preferences = _("System events will only be logged if the \"Log all status changes to system log\" preference is enabled.");
 		} else {
 			if (ht->type == PURPLE_LOG_IM) {
-				if (!purple_prefs_get_bool("/core/logging/log_ims"))
+				if (!purple_prefs_get_bool("/purple/logging/log_ims"))
 					log_preferences = _("Instant messages will only be logged if the \"Log all instant messages\" preference is enabled.");
 			} else if (ht->type == PURPLE_LOG_CHAT) {
-				if (!purple_prefs_get_bool("/core/logging/log_chats"))
+				if (!purple_prefs_get_bool("/purple/logging/log_chats"))
 					log_preferences = _("Chats will only be logged if the \"Log all chats\" preference is enabled.");
 			}
 		}
--- a/pidgin/gtkmain.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkmain.c	Sat Apr 28 18:32:47 2007 +0000
@@ -145,7 +145,7 @@
 static void sighandler(int sig);
 
 /**
- * Reap all our dead children.  Sometimes Purple forks off a separate
+ * Reap all our dead children.  Sometimes libpurple forks off a separate
  * process to do some stuff.  When that process exits we are
  * informed about it so that we can call waitpid() and let it
  * stop being a zombie.
@@ -160,7 +160,7 @@
  * it continues with the initialization process.  This means that
  * we have a race condition where GStreamer is waitpid()ing for its
  * child to die and we're catching the SIGCHLD signal.  If GStreamer
- * is awarded the zombied process then everything is ok.  But if Purple
+ * is awarded the zombied process then everything is ok.  But if libpurple
  * reaps the zombie process then the GStreamer initialization sequence
  * fails.
  *
@@ -240,11 +240,15 @@
 	GdkPixbuf *icon = NULL;
 	char *icon_path;
 	int i;
-	const char *icon_sizes[] = {
-		"16",
-		"24",
-		"32",
-		"48"
+	struct {
+		const char *dir;
+		const char *filename;
+	} icon_sizes[] = {
+		{"16x16", "pidgin.png"},
+		{"24x24", "pidgin.png"},
+		{"32x32", "pidgin.png"},
+		{"48x48", "pidgin.png"},
+		{"scalable", "pidgin.svg"}
 	};
 
 #endif
@@ -256,7 +260,7 @@
 #ifndef _WIN32
 	/* use the nice PNG icon for all the windows */
 	for(i=0; i<G_N_ELEMENTS(icon_sizes); i++) {
-		icon_path = g_build_filename(DATADIR, "pixmaps", "pidgin", "icons", icon_sizes[i], "pidgin.png", NULL);
+		icon_path = g_build_filename(DATADIR, "icons", "hicolor", icon_sizes[i].dir, "apps", icon_sizes[i].filename, NULL);
 		icon = gdk_pixbuf_new_from_file(icon_path, NULL);
 		g_free(icon_path);
 		if (icon) {
@@ -446,6 +450,7 @@
 	int opt;
 	gboolean gui_check;
 	gboolean debug_enabled;
+	gboolean migration_failed = FALSE;
 
 	struct option long_options[] = {
 		{"config",   required_argument, NULL, 'c'},
@@ -639,6 +644,15 @@
 
 	purple_debug_set_enabled(debug_enabled);
 
+	/* If we're using a custom configuration directory, we
+	 * do NOT want to migrate, or weird things will happen. */
+	if (opt_config_dir_arg == NULL)
+	{
+		if (!purple_core_migrate())
+		{
+			migration_failed = TRUE;
+		}
+	}
 
 	search_path = g_build_filename(purple_user_dir(), "gtkrc-2.0", NULL);
 	gtk_rc_add_default_file(search_path);
@@ -663,6 +677,37 @@
 	winpidgin_init(hint);
 #endif
 
+	if (migration_failed)
+	{
+		char *old = g_strconcat(purple_home_dir(),
+		                        G_DIR_SEPARATOR_S ".gaim", NULL);
+		const char *text = _(
+			"%s encountered errors migrating your settings "
+			"from %s to %s. Please investigate and complete the "
+			"migration by hand.");
+		GtkWidget *dialog;
+
+		dialog = gtk_message_dialog_new(NULL,
+		                                0,
+		                                GTK_MESSAGE_ERROR,
+		                                GTK_BUTTONS_CLOSE,
+		                                text, PIDGIN_NAME,
+		                                old, purple_user_dir());
+		g_free(old);
+
+		g_signal_connect_swapped(dialog, "response",
+		                         G_CALLBACK(gtk_main_quit), NULL);
+
+		gtk_widget_show_all(dialog);
+
+		gtk_main();
+
+#ifdef HAVE_SIGNAL_H
+		g_free(segfault_message);
+#endif
+		return 0;
+	}
+
 	purple_core_set_ui_ops(pidgin_core_get_ui_ops());
 	purple_eventloop_set_ui_ops(pidgin_eventloop_get_ui_ops());
 
@@ -767,7 +812,7 @@
 	else
 	{
 		/* Everything is good to go--sign on already */
-		if (!purple_prefs_get_bool("/core/savedstatus/startup_current_status"))
+		if (!purple_prefs_get_bool("/purple/savedstatus/startup_current_status"))
 			purple_savedstatus_activate(purple_savedstatus_get_startup());
 		purple_accounts_restore_current_statuses();
 	}
--- a/pidgin/gtkplugin.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkplugin.c	Sat Apr 28 18:32:47 2007 +0000
@@ -281,7 +281,9 @@
 
 			purple_request_action(plugin_dialog, NULL,
 			                    _("Multiple plugins will be unloaded."),
-			                    tmp->str, 0, cb_data, 2,
+			                    tmp->str, 0,
+								NULL, NULL, NULL,
+								cb_data, 2,
 			                    _("Unload Plugins"), G_CALLBACK(plugin_unload_confirm_cb),
 			                    _("Cancel"), g_free);
 			g_string_free(tmp, TRUE);
--- a/pidgin/gtkpounce.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkpounce.c	Sat Apr 28 18:32:47 2007 +0000
@@ -153,7 +153,9 @@
 	name = gtk_entry_get_text(GTK_ENTRY(entry));
 
 	purple_request_file(entry, _("Select a file"), name, FALSE,
-					  G_CALLBACK(pounce_update_entry_fields), NULL, entry);
+					  G_CALLBACK(pounce_update_entry_fields), NULL,
+					  NULL, NULL, NULL,
+					  entry);
 	g_signal_connect_swapped(G_OBJECT(entry), "destroy",
 			G_CALLBACK(purple_request_close_with_handle), entry);
 }
@@ -1093,7 +1095,9 @@
 	pouncee = purple_pounce_get_pouncee(pounce);
 
 	buf = g_strdup_printf(_("Are you sure you want to delete the pounce on %s for %s?"), pouncee, pouncer);
-	purple_request_action(pounce, NULL, buf, NULL, 0, pounce, 2,
+	purple_request_action(pounce, NULL, buf, NULL, 0,
+						account, pouncee, NULL,
+						pounce, 2,
 						_("Delete"), pounces_manager_delete_confirm_cb,
 						_("Cancel"), NULL);
 	g_free(buf);
--- a/pidgin/gtkprefs.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkprefs.c	Sat Apr 28 18:32:47 2007 +0000
@@ -910,7 +910,7 @@
 					 G_CALLBACK(pidgin_toggle_sensitive), iconpref2);
 
 	pidgin_prefs_checkbox(_("_Notify buddies that you are typing to them"),
-			"/core/conversations/im/send_typing", vbox);
+			"/purple/conversations/im/send_typing", vbox);
 #ifdef USE_GTKSPELL
 	pidgin_prefs_checkbox(_("Highlight _misspelled words"),
 			PIDGIN_PREFS_ROOT "/conversations/spellcheck", vbox);
@@ -991,13 +991,13 @@
 static void proxy_print_option(GtkEntry *entry, int entrynum)
 {
 	if (entrynum == PROXYHOST)
-		purple_prefs_set_string("/core/proxy/host", gtk_entry_get_text(entry));
+		purple_prefs_set_string("/purple/proxy/host", gtk_entry_get_text(entry));
 	else if (entrynum == PROXYPORT)
-		purple_prefs_set_int("/core/proxy/port", atoi(gtk_entry_get_text(entry)));
+		purple_prefs_set_int("/purple/proxy/port", atoi(gtk_entry_get_text(entry)));
 	else if (entrynum == PROXYUSER)
-		purple_prefs_set_string("/core/proxy/username", gtk_entry_get_text(entry));
+		purple_prefs_set_string("/purple/proxy/username", gtk_entry_get_text(entry));
 	else if (entrynum == PROXYPASS)
-		purple_prefs_set_string("/core/proxy/password", gtk_entry_get_text(entry));
+		purple_prefs_set_string("/purple/proxy/password", gtk_entry_get_text(entry));
 }
 
 static GtkWidget *
@@ -1015,7 +1015,7 @@
 	vbox = pidgin_make_frame (ret, _("IP Address"));
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 	pidgin_prefs_labeled_entry(vbox,_("ST_UN server:"),
-			"/core/network/stun_server", sg);
+			"/purple/network/stun_server", sg);
 
 	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_add(GTK_CONTAINER(vbox), hbox);
@@ -1031,7 +1031,7 @@
 	gtk_container_add(GTK_CONTAINER(hbox), label);
 
 	auto_ip_checkbox = pidgin_prefs_checkbox(_("_Autodetect IP address"),
-			"/core/network/auto_ip", vbox);
+			"/purple/network/auto_ip", vbox);
 
 	table = gtk_table_new(2, 2, FALSE);
 	gtk_container_set_border_width(GTK_CONTAINER(table), 0);
@@ -1061,7 +1061,7 @@
 	pidgin_set_accessible_label (entry, label);
 
 
-	if (purple_prefs_get_bool("/core/network/auto_ip")) {
+	if (purple_prefs_get_bool("/purple/network/auto_ip")) {
 		gtk_widget_set_sensitive(GTK_WIDGET(table), FALSE);
 	}
 
@@ -1072,18 +1072,18 @@
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
 	ports_checkbox = pidgin_prefs_checkbox(_("_Manually specify range of ports to listen on"),
-			"/core/network/ports_range_use", vbox);
+			"/purple/network/ports_range_use", vbox);
 
 	spin_button = pidgin_prefs_labeled_spin_button(vbox, _("_Start port:"),
-			"/core/network/ports_range_start", 0, 65535, sg);
-	if (!purple_prefs_get_bool("/core/network/ports_range_use"))
+			"/purple/network/ports_range_start", 0, 65535, sg);
+	if (!purple_prefs_get_bool("/purple/network/ports_range_use"))
 		gtk_widget_set_sensitive(GTK_WIDGET(spin_button), FALSE);
 	g_signal_connect(G_OBJECT(ports_checkbox), "clicked",
 					 G_CALLBACK(pidgin_toggle_sensitive), spin_button);
 
 	spin_button = pidgin_prefs_labeled_spin_button(vbox, _("_End port:"),
-			"/core/network/ports_range_end", 0, 65535, sg);
-	if (!purple_prefs_get_bool("/core/network/ports_range_use"))
+			"/purple/network/ports_range_end", 0, 65535, sg);
+	if (!purple_prefs_get_bool("/purple/network/ports_range_use"))
 		gtk_widget_set_sensitive(GTK_WIDGET(spin_button), FALSE);
 	g_signal_connect(G_OBJECT(ports_checkbox), "clicked",
 					 G_CALLBACK(pidgin_toggle_sensitive), spin_button);
@@ -1092,7 +1092,7 @@
 		vbox = pidgin_make_frame(ret, _("Proxy Server"));
 		prefs_proxy_frame = gtk_vbox_new(FALSE, 0);
 		pidgin_prefs_dropdown(vbox, _("Proxy _type:"), PURPLE_PREF_STRING,
-					"/core/proxy/type",
+					"/purple/proxy/type",
 					_("No proxy"), "none",
 					"SOCKS 4", "socks4",
 					"SOCKS 5", "socks5",
@@ -1102,7 +1102,7 @@
 		gtk_box_pack_start(GTK_BOX(vbox), prefs_proxy_frame, 0, 0, 0);
 		proxy_info = purple_global_proxy_get_info();
 
-		purple_prefs_connect_callback(prefs, "/core/proxy/type",
+		purple_prefs_connect_callback(prefs, "/purple/proxy/type",
 					    proxy_changed_cb, prefs_proxy_frame);
 
 		table = gtk_table_new(4, 2, FALSE);
@@ -1356,16 +1356,16 @@
 	names = purple_log_logger_get_options();
 
 	pidgin_prefs_dropdown_from_list(vbox, _("Log _format:"), PURPLE_PREF_STRING,
-				 "/core/logging/format", names);
+				 "/purple/logging/format", names);
 
 	g_list_free(names);
 
 	pidgin_prefs_checkbox(_("Log all _instant messages"),
-				  "/core/logging/log_ims", vbox);
+				  "/purple/logging/log_ims", vbox);
 	pidgin_prefs_checkbox(_("Log all c_hats"),
-				  "/core/logging/log_chats", vbox);
+				  "/purple/logging/log_chats", vbox);
 	pidgin_prefs_checkbox(_("Log all _status changes to system log"),
-				  "/core/logging/log_system", vbox);
+				  "/purple/logging/log_system", vbox);
 
 	gtk_widget_show_all(ret);
 
@@ -1511,7 +1511,9 @@
 		filename = NULL;
 
 	purple_request_file(prefs, _("Sound Selection"), filename, FALSE,
-					  G_CALLBACK(sound_chosen_cb), NULL, GINT_TO_POINTER(sound_row_sel));
+					  G_CALLBACK(sound_chosen_cb), NULL, 
+					  NULL, NULL, NULL,
+					  GINT_TO_POINTER(sound_row_sel));
 }
 
 #ifdef USE_GSTREAMER
@@ -1640,7 +1642,7 @@
 	pidgin_prefs_checkbox(_("Sounds when conversation has _focus"),
 				   PIDGIN_PREFS_ROOT "/sound/conv_focus", vbox);
 	pidgin_prefs_dropdown(vbox, _("Enable sounds:"),
-				 PURPLE_PREF_INT, "/core/sound/while_status",
+				 PURPLE_PREF_INT, "/purple/sound/while_status",
 				_("Only when available"), 1,
 				_("Only when not available"), 2,
 				_("Always"), 3,
@@ -1776,13 +1778,13 @@
 static void
 set_idle_away(PurpleSavedStatus *status)
 {
-	purple_prefs_set_int("/core/savedstatus/idleaway", purple_savedstatus_get_creation_time(status));
+	purple_prefs_set_int("/purple/savedstatus/idleaway", purple_savedstatus_get_creation_time(status));
 }
 
 static void
 set_startupstatus(PurpleSavedStatus *status)
 {
-	purple_prefs_set_int("/core/savedstatus/startup", purple_savedstatus_get_creation_time(status));
+	purple_prefs_set_int("/purple/savedstatus/startup", purple_savedstatus_get_creation_time(status));
 }
 
 static GtkWidget *
@@ -1807,7 +1809,7 @@
 	vbox = pidgin_make_frame(ret, _("Idle"));
 
 	dd = pidgin_prefs_dropdown(vbox, _("_Report idle time:"),
-		PURPLE_PREF_STRING, "/core/away/idle_reporting",
+		PURPLE_PREF_STRING, "/purple/away/idle_reporting",
 		_("Never"), "none",
 		_("From last sent message"), "purple",
 #if defined(USE_SCREENSAVER) || defined(HAVE_IOKIT)
@@ -1821,7 +1823,7 @@
 	vbox = pidgin_make_frame(ret, _("Away"));
 
 	dd = pidgin_prefs_dropdown(vbox, _("_Auto-reply:"),
-		PURPLE_PREF_STRING, "/core/away/auto_reply",
+		PURPLE_PREF_STRING, "/purple/away/auto_reply",
 		_("Never"), "never",
 		_("When away"), "away",
 		_("When both away and idle"), "awayidle",
@@ -1833,10 +1835,10 @@
 	vbox = pidgin_make_frame(ret, _("Auto-away"));
 
 	button = pidgin_prefs_checkbox(_("Change status when _idle"),
-						   "/core/away/away_when_idle", vbox);
+						   "/purple/away/away_when_idle", vbox);
 
 	select = pidgin_prefs_labeled_spin_button(vbox,
-			_("_Minutes before changing status:"), "/core/away/mins_before_away",
+			_("_Minutes before changing status:"), "/purple/away/mins_before_away",
 			1, 24 * 60, sg);
 	g_signal_connect(G_OBJECT(button), "clicked",
 					 G_CALLBACK(pidgin_toggle_sensitive), select);
@@ -1858,7 +1860,7 @@
 			 G_CALLBACK(pidgin_toggle_sensitive), menu);
 	gtk_label_set_mnemonic_widget(GTK_LABEL(label), menu);
 
-	if (!purple_prefs_get_bool("/core/away/away_when_idle")) {
+	if (!purple_prefs_get_bool("/purple/away/away_when_idle")) {
 		gtk_widget_set_sensitive(GTK_WIDGET(menu), FALSE);
 		gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE);
 		gtk_widget_set_sensitive(GTK_WIDGET(label), FALSE);
@@ -1868,7 +1870,7 @@
 	vbox = pidgin_make_frame(ret, _("Status at Startup"));
 
 	button = pidgin_prefs_checkbox(_("Use status from last _exit at startup"),
-		"/core/savedstatus/startup_current_status", vbox);
+		"/purple/savedstatus/startup_current_status", vbox);
 
 	hbox = gtk_hbox_new(FALSE, 0);
 	gtk_container_add(GTK_CONTAINER(vbox), hbox);
@@ -1887,7 +1889,7 @@
 			 G_CALLBACK(pidgin_toggle_sensitive), menu);
 	gtk_label_set_mnemonic_widget(GTK_LABEL(label), menu);
 
-	if (purple_prefs_get_bool("/core/savedstatus/startup_current_status")) {
+	if (purple_prefs_get_bool("/purple/savedstatus/startup_current_status")) {
 		gtk_widget_set_sensitive(GTK_WIDGET(menu), FALSE);
 		gtk_widget_set_sensitive(GTK_WIDGET(label), FALSE);
 	}
@@ -2027,8 +2029,6 @@
 void
 pidgin_prefs_init(void)
 {
-	/* only change this when we have a sane prefs migration path */
-	purple_prefs_add_none("/gaim");
 	purple_prefs_add_none(PIDGIN_PREFS_ROOT "");
 	purple_prefs_add_none("/plugins/gtk");
 
@@ -2059,21 +2059,29 @@
 								smiley_theme_pref_cb, NULL);
 }
 
-void pidgin_prefs_update_old() {
+void pidgin_prefs_update_old()
+{
+	const char *str;
+
+	purple_prefs_rename("/gaim/gtk", PIDGIN_PREFS_ROOT);
+
 	/* Rename some old prefs */
-	purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_ims", "/core/logging/log_ims");
-	purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_chats", "/core/logging/log_chats");
-	purple_prefs_rename("/core/conversations/placement",
+	purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_ims", "/purple/logging/log_ims");
+	purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_chats", "/purple/logging/log_chats");
+	purple_prefs_rename("/purple/conversations/placement",
 					  PIDGIN_PREFS_ROOT "/conversations/placement");
 
-	purple_prefs_rename(PIDGIN_PREFS_ROOT "/debug/timestamps", "/core/debug/timestamps");
+	purple_prefs_rename(PIDGIN_PREFS_ROOT "/debug/timestamps", "/purple/debug/timestamps");
 	purple_prefs_rename(PIDGIN_PREFS_ROOT "/conversations/im/raise_on_events", "/plugins/gtk/X11/notify/method_raise");
 
 	purple_prefs_rename_boolean_toggle(PIDGIN_PREFS_ROOT "/conversations/ignore_colors",
 									 PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting");
 
 	/* this string pref moved into the core, try to be friendly */
-	purple_prefs_rename(PIDGIN_PREFS_ROOT "/idle/reporting_method", "/core/away/idle_reporting");
+	purple_prefs_rename(PIDGIN_PREFS_ROOT "/idle/reporting_method", "/purple/away/idle_reporting");
+	if ((str = purple_prefs_get_string("/purple/away/idle_reporting")) &&
+			strcmp(str, "gaim") == 0)
+		purple_prefs_set_string("/purple/away/idle_reporting", "purple");
 
 	/* Remove some no-longer-used prefs */
 	purple_prefs_remove(PIDGIN_PREFS_ROOT "/blist/auto_expand_contacts");
--- a/pidgin/gtkprivacy.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkprivacy.c	Sat Apr 28 18:32:47 2007 +0000
@@ -564,6 +564,7 @@
 			NULL, FALSE, FALSE, NULL,
 			_("_Permit"), G_CALLBACK(add_permit_block_cb),
 			_("Cancel"), G_CALLBACK(destroy_request_data),
+			account, name, NULL,
 			data);
 	}
 	else {
@@ -574,7 +575,9 @@
 
 
 		purple_request_action(account, _("Permit User"), primary, secondary,
-							0, data, 2,
+							0,
+							account, name, NULL,
+							data, 2,
 							_("_Permit"), G_CALLBACK(confirm_permit_block_cb),
 							_("Cancel"), G_CALLBACK(destroy_request_data));
 
@@ -602,6 +605,7 @@
 			NULL, FALSE, FALSE, NULL,
 			_("_Block"), G_CALLBACK(add_permit_block_cb),
 			_("Cancel"), G_CALLBACK(destroy_request_data),
+			account, name, NULL,
 			data);
 	}
 	else {
@@ -610,7 +614,9 @@
 			g_strdup_printf(_("Are you sure you want to block %s?"), name);
 
 		purple_request_action(account, _("Block User"), primary, secondary,
-							0, data, 2,
+							0,
+							account, name, NULL,
+							data, 2,
 							_("_Block"), G_CALLBACK(confirm_permit_block_cb),
 							_("Cancel"), G_CALLBACK(destroy_request_data));
 
--- a/pidgin/gtkrequest.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkrequest.c	Sat Apr 28 18:32:47 2007 +0000
@@ -285,6 +285,7 @@
 					   gboolean multiline, gboolean masked, gchar *hint,
 					   const char *ok_text, GCallback ok_cb,
 					   const char *cancel_text, GCallback cancel_cb,
+					   PurpleAccount *account, const char *who, PurpleConversation *conv,
 					   void *user_data)
 {
 	PidginRequestData *data;
@@ -443,6 +444,7 @@
 			const char *secondary, unsigned int default_value,
 			const char *ok_text, GCallback ok_cb,
 			const char *cancel_text, GCallback cancel_cb,
+			PurpleAccount *account, const char *who, PurpleConversation *conv,
 			void *user_data, va_list args)
 {
 	PidginRequestData *data;
@@ -544,6 +546,7 @@
 static void *
 pidgin_request_action(const char *title, const char *primary,
 						const char *secondary, unsigned int default_action,
+					    PurpleAccount *account, const char *who, PurpleConversation *conv,
 						void *user_data, size_t action_count, va_list actions)
 {
 	PidginRequestData *data;
@@ -1025,6 +1028,7 @@
 						const char *secondary, PurpleRequestFields *fields,
 						const char *ok_text, GCallback ok_cb,
 						const char *cancel_text, GCallback cancel_cb,
+					    PurpleAccount *account, const char *who, PurpleConversation *conv,
 						void *user_data)
 {
 	PidginRequestData *data;
@@ -1467,7 +1471,9 @@
 	if ((data->u.file.savedialog == TRUE) &&
 		(g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) {
 		purple_request_action(data, NULL, _("That file already exists"),
-							_("Would you like to overwrite it?"), 0, data, 2,
+							_("Would you like to overwrite it?"), 0,
+							NULL, NULL, NULL,
+							data, 2,
 							_("Overwrite"), G_CALLBACK(file_yes_no_cb),
 							_("Choose New Name"), G_CALLBACK(file_yes_no_cb));
 	} else
@@ -1491,6 +1497,7 @@
 pidgin_request_file(const char *title, const char *filename,
 					  gboolean savedialog,
 					  GCallback ok_cb, GCallback cancel_cb,
+					  PurpleAccount *account, const char *who, PurpleConversation *conv,
 					  void *user_data)
 {
 	PidginRequestData *data;
@@ -1588,6 +1595,7 @@
 static void *
 pidgin_request_folder(const char *title, const char *dirname,
 					  GCallback ok_cb, GCallback cancel_cb,
+					  PurpleAccount *account, const char *who, PurpleConversation *conv,
 					  void *user_data)
 {
 	PidginRequestData *data;
--- a/pidgin/gtksavedstatuses.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtksavedstatuses.c	Sat Apr 28 18:32:47 2007 +0000
@@ -330,8 +330,9 @@
 	else
 		title = g_strdup(_("Are you sure you want to delete the selected saved statuses?"));
 
-	purple_request_action(dialog, NULL, title,
-		 NULL, 0, sel_titles, 2,
+	purple_request_action(dialog, NULL, title, NULL, 0,
+		 NULL, NULL, NULL,
+		 sel_titles, 2,
 		_("Delete"), status_window_delete_confirm_cb,
 		_("Cancel"), status_window_delete_cancel_cb);
 
@@ -1585,13 +1586,23 @@
 	/** The text displayed on the status box.  This column is visible. */
 	SS_MENU_TEXT_COLUMN,
 
-	/*
+	/**
 	 * This value depends on SS_MENU_TYPE_COLUMN.  For _SAVEDSTATUS types,
 	 * this is the creation time.  For _PRIMITIVE types,
 	 * this is the PurpleStatusPrimitive.
 	 */
 	SS_MENU_DATA_COLUMN,
 
+	/**
+	 * This is the emblem to use for this status
+	 */
+	SS_MENU_EMBLEM_COLUMN,
+
+	/**
+	 * And whether or not that emblem is visible
+	 */
+	SS_MENU_EMBLEM_VISIBLE_COLUMN,
+	
 	SS_MENU_NUM_COLUMNS
 };
 
@@ -1646,6 +1657,7 @@
 			   SS_MENU_ICON_COLUMN, pixbuf,
 			   SS_MENU_TEXT_COLUMN, purple_primitive_get_name_from_type(primitive),
 			   SS_MENU_DATA_COLUMN, GINT_TO_POINTER(primitive),
+			   SS_MENU_EMBLEM_VISIBLE_COLUMN, FALSE,
 			   -1);
 	if (pixbuf != NULL)
 		g_object_unref(pixbuf);
@@ -1669,8 +1681,10 @@
 	GtkTreeIter iter;
 	GtkCellRenderer *text_rend;
 	GtkCellRenderer *icon_rend;
+	GtkCellRenderer *emblem_rend;
 
-	model = gtk_list_store_new(SS_MENU_NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER);
+	model = gtk_list_store_new(SS_MENU_NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF,
+				   G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_BOOLEAN);
 
 	combobox = gtk_combo_box_new();
 
@@ -1697,35 +1711,16 @@
 		PurpleSavedStatus *status = (PurpleSavedStatus *) cur->data;
 		if (!purple_savedstatus_is_transient(status))
 		{
-			/* Get an appropriate status icon */
 			pixbuf = pidgin_create_status_icon(purple_savedstatus_get_type(status),
 							combobox, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL);
-
-			/* Overlay a disk in the bottom left corner */
-			emblem = gtk_widget_render_icon(GTK_WIDGET(combobox),
-						GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU, "PidginStatusMenu");
-			if (emblem != NULL)
-			{
-				/* copy the pixbuf so we're not modifying the stock image data when we overlay the disk */
-				GdkPixbuf *pixbuf2 = gdk_pixbuf_copy(pixbuf);
-				int width = gdk_pixbuf_get_width(pixbuf) / 2;
-				int height = gdk_pixbuf_get_height(pixbuf) / 2;
-
-				g_object_unref(G_OBJECT(pixbuf));
-				pixbuf = pixbuf2;
-
-				gdk_pixbuf_composite(emblem, pixbuf, 0, height,
-						     width, height, 0, height,
-						     0.5, 0.5, GDK_INTERP_BILINEAR, 255);
-				g_object_unref(G_OBJECT(emblem));
-			}
-
 			gtk_list_store_append(model, &iter);
 			gtk_list_store_set(model, &iter,
 				SS_MENU_TYPE_COLUMN, SS_MENU_ENTRY_TYPE_SAVEDSTATUS,
 				SS_MENU_ICON_COLUMN, pixbuf,
 				SS_MENU_TEXT_COLUMN, purple_savedstatus_get_title(status),
 				SS_MENU_DATA_COLUMN, GINT_TO_POINTER(purple_savedstatus_get_creation_time(status)),
+				SS_MENU_EMBLEM_COLUMN, GTK_STOCK_SAVE,
+				SS_MENU_EMBLEM_VISIBLE_COLUMN, TRUE,
 				-1);
 			g_object_unref(G_OBJECT(pixbuf));
 
@@ -1740,11 +1735,14 @@
 
 	text_rend = gtk_cell_renderer_text_new();
 	icon_rend = gtk_cell_renderer_pixbuf_new();
+	emblem_rend = gtk_cell_renderer_pixbuf_new();
 	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), icon_rend, FALSE);
 	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), text_rend, TRUE);
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), emblem_rend, FALSE);
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), icon_rend, "pixbuf", SS_MENU_ICON_COLUMN, NULL);
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), text_rend, "markup", SS_MENU_TEXT_COLUMN, NULL);
-
+	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), emblem_rend,
+					"stock-id", SS_MENU_EMBLEM_COLUMN, "visible", SS_MENU_EMBLEM_VISIBLE_COLUMN, NULL);
 
 	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), index);
 	g_signal_connect(G_OBJECT(combobox), "changed", G_CALLBACK(status_menu_cb), callback);
--- a/pidgin/gtkstatusbox.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Sat Apr 28 18:32:47 2007 +0000
@@ -42,8 +42,10 @@
 #include <gdk/gdkkeysyms.h>
 
 #include "account.h"
+#include "buddyicon.h"
 #include "core.h"
 #include "internal.h"
+#include "imgstore.h"
 #include "network.h"
 #include "savedstatuses.h"
 #include "status.h"
@@ -383,13 +385,26 @@
 	if (status_box->account &&
 		!purple_account_get_bool(status_box->account, "use-global-buddyicon", TRUE))
 	{
-		char *string = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(status_box->account));
-		pidgin_status_box_set_buddy_icon(status_box, string);
-		g_free(string);
+		PurpleStoredImage *img = purple_buddy_icons_find_account_icon(status_box->account);
+		pidgin_status_box_set_buddy_icon(status_box, img);
+		purple_imgstore_unref(img);
 	}
 	else
 	{
-		pidgin_status_box_set_buddy_icon(status_box, purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon"));
+		const char *filename = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon");
+		PurpleStoredImage *img = NULL;
+
+		if (filename != NULL)
+		{
+			gchar *contents;
+			gsize size;
+			if (g_file_get_contents(filename, &contents, &size, NULL))
+			{
+				img = purple_imgstore_add(contents, size, filename);
+			}
+		}
+
+		pidgin_status_box_set_buddy_icon(status_box, img);
 	}
 
 	status_box->hand_cursor = gdk_cursor_new (GDK_HAND2);
@@ -422,6 +437,8 @@
 	gdk_cursor_unref(statusbox->hand_cursor);
 	gdk_cursor_unref(statusbox->arrow_cursor);
 
+	purple_imgstore_unref(statusbox->buddy_icon_img);
+
 	g_object_unref(G_OBJECT(statusbox->buddy_icon));
 	g_object_unref(G_OBJECT(statusbox->buddy_icon_hover));
 
@@ -431,12 +448,10 @@
 	if (statusbox->icon_box_menu)
 		gtk_widget_destroy(statusbox->icon_box_menu);
 
-	g_free(statusbox->buddy_icon_path);
-
 	statusbox->icon = NULL;
 	statusbox->icon_box = NULL;
 	statusbox->icon_box_menu = NULL;
-	statusbox->buddy_icon_path = NULL;
+	statusbox->buddy_icon_img = NULL;
 	statusbox->buddy_icon = NULL;
 	statusbox->buddy_icon_hover = NULL;
 	statusbox->hand_cursor = NULL;
@@ -489,14 +504,13 @@
 	gdk_cursor_unref(statusbox->hand_cursor);
 	gdk_cursor_unref(statusbox->arrow_cursor);
 
+	purple_imgstore_unref(statusbox->buddy_icon_img);
 	g_object_unref(G_OBJECT(statusbox->buddy_icon));
 	g_object_unref(G_OBJECT(statusbox->buddy_icon_hover));
 
 	if (statusbox->buddy_icon_sel)
 		gtk_widget_destroy(statusbox->buddy_icon_sel);
 
-	g_free(statusbox->buddy_icon_path);
-
 	G_OBJECT_CLASS(parent_class)->finalize(obj);
 }
 
@@ -680,36 +694,6 @@
 	    }
 
 		pixbuf = pidgin_status_box_get_pixbuf(status_box, prim);
-#if 0
-		if (account_status)
-			pixbuf = pidgin_create_prpl_icon_with_status(acct,
-						purple_status_get_type(purple_account_get_active_status(acct)),
-						0.5);
-		else
-			pixbuf = pidgin_create_purple_icon_with_status(
-						purple_savedstatus_get_type(saved_status),
-						0.5);
-
-		if (!purple_savedstatus_is_transient(saved_status))
-		{
-			GdkPixbuf *emblem;
-
-			/* Overlay a disk in the bottom left corner */
-			emblem = gtk_widget_render_icon(GTK_WIDGET(status_box->vbox),
-						GTK_STOCK_SAVE, icon_size, "PidginStatusBox");
-			if (emblem != NULL)
-			{
-				int width, height;
-				width = gdk_pixbuf_get_width(pixbuf) / 2;
-				height = gdk_pixbuf_get_height(pixbuf) / 2;
-				gdk_pixbuf_composite(emblem, pixbuf, 0, height,
-							width, height, 0, height,
-							0.5, 0.5, GDK_INTERP_BILINEAR, 255);
-				g_object_unref(G_OBJECT(emblem));
-			}
-		}
-#endif
-
 	}
 
 	if (status_box->account != NULL) {
@@ -899,7 +883,6 @@
 {
 	GList *list, *cur;
 	GdkPixbuf *pixbuf;
-	PidginStatusBoxItemType type = PIDGIN_STATUS_BOX_TYPE_POPULAR;
 
 	list = purple_savedstatuses_get_popular(6);
 	if (list == NULL)
@@ -914,6 +897,7 @@
 		const gchar *message;
 		gchar *stripped = NULL;
 		PurpleStatusPrimitive prim;
+		PidginStatusBoxItemType type = PIDGIN_STATUS_BOX_TYPE_POPULAR;
 
 		/* Get an appropriate status icon */
 		prim = purple_savedstatus_get_type(saved);
@@ -1432,20 +1416,21 @@
 static void
 buddy_icon_set_cb(const char *filename, PidginStatusBox *box)
 {
+	PurpleStoredImage *img = NULL;
 
 	if (box->account) {
 		PurplePlugin *plug = purple_find_prpl(purple_account_get_protocol_id(box->account));
 		if (plug) {
 			PurplePluginProtocolInfo *prplinfo = PURPLE_PLUGIN_PROTOCOL_INFO(plug);
 			if (prplinfo && prplinfo->icon_spec.format) {
-				char *icon = NULL;
+				gpointer data = NULL;
+				size_t len = 0;
 				if (filename)
-					icon = pidgin_convert_buddy_icon(plug, filename);
+					data = pidgin_convert_buddy_icon(plug, filename, &len);
+				img = purple_buddy_icons_set_account_icon(box->account, data, len);
+				purple_account_set_buddy_icon_path(box->account, filename);
+
 				purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL));
-				purple_account_set_ui_string(box->account, PIDGIN_UI, "non-global-buddyicon-cached-path", icon);
-				purple_account_set_buddy_icon_path(box->account, filename);
-				purple_account_set_buddy_icon(box->account, icon);
-				g_free(icon);
 			}
 		}
 	} else {
@@ -1458,17 +1443,20 @@
 				if (prplinfo != NULL &&
 				    purple_account_get_bool(account, "use-global-buddyicon", TRUE) &&
 				    prplinfo->icon_spec.format) {
-					char *icon = NULL;
+					gpointer data = NULL;
+					size_t len = 0;
 					if (filename)
-						icon = pidgin_convert_buddy_icon(plug, filename);
-					purple_account_set_buddy_icon_path(account, filename);
-					purple_account_set_buddy_icon(account, icon);
-					g_free(icon);
+						data = pidgin_convert_buddy_icon(plug, filename, &len);
+					img = purple_buddy_icons_set_account_icon(box->account, data, len);
+					purple_account_set_buddy_icon_path(box->account, filename);
+
+					purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL));
 				}
 			}
 		}
 	}
-	pidgin_status_box_set_buddy_icon(box, filename);
+
+	pidgin_status_box_set_buddy_icon(box, img);
 }
 
 static void
@@ -2026,6 +2014,17 @@
 }
 
 static void
+pixbuf_size_prepared_cb(GdkPixbufLoader *loader, int width, int height, gpointer data)
+{
+#if GTK_CHECK_VERSION(2,2,0)
+	int w, h;
+	GtkIconSize icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MEDIUM);
+	gtk_icon_size_lookup(icon_size, &w, &h);
+	gdk_pixbuf_loader_set_size(loader, w, h);
+#endif
+}
+
+static void
 pidgin_status_box_redisplay_buddy_icon(PidginStatusBox *status_box)
 {
 
@@ -2040,10 +2039,15 @@
 	status_box->buddy_icon = NULL;
 	status_box->buddy_icon_hover = NULL;
 
-	if ((status_box->buddy_icon_path != NULL) &&
-			(*status_box->buddy_icon_path != '\0'))
-		status_box->buddy_icon = gdk_pixbuf_new_from_file_at_scale(status_box->buddy_icon_path,
-				status_box->icon_size, status_box->icon_size, FALSE, NULL);
+	if (status_box->buddy_icon_img != NULL)
+	{
+		GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
+		g_signal_connect(G_OBJECT(loader), "size-prepared", G_CALLBACK(pixbuf_size_prepared_cb), NULL);
+		gdk_pixbuf_loader_write(loader, purple_imgstore_get_data(status_box->buddy_icon_img),
+		                        purple_imgstore_get_size(status_box->buddy_icon_img), NULL);
+		gdk_pixbuf_loader_close(loader, NULL);
+		status_box->buddy_icon = gdk_pixbuf_loader_get_pixbuf(loader);
+	}
 
 	if (status_box->buddy_icon == NULL)
 	{
@@ -2055,7 +2059,7 @@
 	}
 
 	if (status_box->buddy_icon != NULL) {
-	        status_box->icon_opaque = pidgin_gdk_pixbuf_is_opaque(status_box->buddy_icon);
+		status_box->icon_opaque = pidgin_gdk_pixbuf_is_opaque(status_box->buddy_icon);
 		gtk_image_set_from_pixbuf(GTK_IMAGE(status_box->icon), status_box->buddy_icon);
 		status_box->buddy_icon_hover = gdk_pixbuf_copy(status_box->buddy_icon);
 		do_colorshift(status_box->buddy_icon_hover, status_box->buddy_icon_hover, 32);
@@ -2064,20 +2068,14 @@
 }
 
 void
-pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, const char *filename)
+pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, PurpleStoredImage *img)
 {
-	g_free(status_box->buddy_icon_path);
-	status_box->buddy_icon_path = g_strdup(filename);
+	purple_imgstore_unref(status_box->buddy_icon_img);
+	status_box->buddy_icon_img = purple_imgstore_ref(img);
 
 	pidgin_status_box_redisplay_buddy_icon(status_box);
 }
 
-const char*
-pidgin_status_box_get_buddy_icon(PidginStatusBox *box)
-{
-	return box->buddy_icon_path;
-}
-
 void
 pidgin_status_box_pulse_connecting(PidginStatusBox *status_box)
 {
--- a/pidgin/gtkstatusbox.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkstatusbox.h	Sat Apr 28 18:32:47 2007 +0000
@@ -30,6 +30,7 @@
 #include <gtk/gtk.h>
 #include "gtkimhtml.h"
 #include "account.h"
+#include "imgstore.h"
 #include "savedstatuses.h"
 #include "status.h"
 #include <gtk/gtktreemodel.h>
@@ -89,7 +90,7 @@
 	GtkWidget *vbox, *sw;
 	GtkWidget *imhtml;
 
-	char      *buddy_icon_path;
+	PurpleStoredImage *buddy_icon_img;
 	GdkPixbuf *buddy_icon;
 	GdkPixbuf *buddy_icon_hover;
 	GtkWidget *buddy_icon_sel;
@@ -176,10 +177,7 @@
 pidgin_status_box_pulse_connecting(PidginStatusBox *status_box);
 
 void
-pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, const char *filename);
-
-const char *
-pidgin_status_box_get_buddy_icon(PidginStatusBox *status_box);
+pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, PurpleStoredImage *img);
 
 char *pidgin_status_box_get_message(PidginStatusBox *status_box);
 
--- a/pidgin/gtkutils.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkutils.c	Sat Apr 28 18:32:47 2007 +0000
@@ -78,12 +78,12 @@
 }
 
 static GtkIMHtmlFuncs gtkimhtml_cbs = {
-	(GtkIMHtmlGetImageFunc)purple_imgstore_get,
+	(GtkIMHtmlGetImageFunc)purple_imgstore_find_by_id,
 	(GtkIMHtmlGetImageDataFunc)purple_imgstore_get_data,
 	(GtkIMHtmlGetImageSizeFunc)purple_imgstore_get_size,
 	(GtkIMHtmlGetImageFilenameFunc)purple_imgstore_get_filename,
-	purple_imgstore_ref,
-	purple_imgstore_unref,
+	purple_imgstore_ref_by_id,
+	purple_imgstore_unref_by_id,
 };
 
 void
@@ -1350,13 +1350,12 @@
 
 			return;
 		}
-		id = purple_imgstore_add(filedata, size, data->filename);
-		g_free(filedata);
+		id = purple_imgstore_add_with_id(filedata, size, data->filename);
 
 		gtk_text_buffer_get_iter_at_mark(GTK_IMHTML(gtkconv->entry)->text_buffer, &iter,
 						 gtk_text_buffer_get_insert(GTK_IMHTML(gtkconv->entry)->text_buffer));
 		gtk_imhtml_insert_image_at_iter(GTK_IMHTML(gtkconv->entry), id, &iter);
-		purple_imgstore_unref(id);
+		purple_imgstore_unref_by_id(id);
 
 		break;
 	}
@@ -1454,24 +1453,33 @@
 						    _("You can send this image as a file transfer, "
 						      "embed it into this message, or use it as the buddy icon for this user."),
 						    DND_FILE_TRANSFER, "OK", (GCallback)dnd_image_ok_callback,
-						    "Cancel", (GCallback)dnd_image_cancel_callback, data,
-						    _("Set as buddy icon"), DND_BUDDY_ICON,
+						    "Cancel", (GCallback)dnd_image_cancel_callback,
+							account, who, NULL,
+							data,
+							_("Set as buddy icon"), DND_BUDDY_ICON,
 						    _("Send image file"), DND_FILE_TRANSFER,
-						    _("Insert in message"), DND_IM_IMAGE, NULL);
+						    _("Insert in message"), DND_IM_IMAGE,
+							NULL);
 			else if (!(im || ft))
 				purple_request_yes_no(NULL, NULL, _("You have dragged an image"),
-						       _("Would you like to set it as the buddy icon for this user?"),
-						    0, data, (GCallback)dnd_set_icon_ok_cb, (GCallback)dnd_set_icon_cancel_cb);
+							_("Would you like to set it as the buddy icon for this user?"),
+							0,
+							account, who, NULL,
+							data, (GCallback)dnd_set_icon_ok_cb, (GCallback)dnd_set_icon_cancel_cb);
 			else
 				purple_request_choice(NULL, NULL,
 						    _("You have dragged an image"),
-						    ft ? _("You can send this image as a file transfer or "
+						    (ft ? _("You can send this image as a file transfer or "
 							   "embed it into this message, or use it as the buddy icon for this user.") :
-						    _("You can insert this image into this message, or use it as the buddy icon for this user"),
-						    ft ? DND_FILE_TRANSFER : DND_IM_IMAGE, "OK", (GCallback)dnd_image_ok_callback,
-						    "Cancel", (GCallback)dnd_image_cancel_callback, data,
+						    _("You can insert this image into this message, or use it as the buddy icon for this user")),
+						    (ft ? DND_FILE_TRANSFER : DND_IM_IMAGE),
+							"OK", (GCallback)dnd_image_ok_callback,
+						    "Cancel", (GCallback)dnd_image_cancel_callback,
+							account, who, NULL,
+							data,
 						    _("Set as buddy icon"), DND_BUDDY_ICON,
-						    ft ? _("Send image file") : _("Insert in message"), ft ? DND_FILE_TRANSFER : DND_IM_IMAGE, NULL);
+						    (ft ? _("Send image file") : _("Insert in message")), (ft ? DND_FILE_TRANSFER : DND_IM_IMAGE),
+							NULL);
 			return;
 		}
 
@@ -2409,15 +2417,14 @@
 }
 #endif
 
-char *
-pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path)
+gpointer
+pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path, size_t *len)
 {
 	PurplePluginProtocolInfo *prpl_info;
 #if GTK_CHECK_VERSION(2,2,0)
 	char **prpl_formats;
 	int width, height;
 	char **pixbuf_formats = NULL;
-	struct stat st;
 	GdkPixbufFormat *format;
 	GdkPixbuf *pixbuf;
 #if !GTK_CHECK_VERSION(2,4,0)
@@ -2426,28 +2433,11 @@
 #endif
 	gchar *contents;
 	gsize length;
-	const char *dirname;
-	char *random;
-	char *filename;
 
 	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
 
 	g_return_val_if_fail(prpl_info->icon_spec.format != NULL, NULL);
 
-	dirname = purple_buddy_icons_get_cache_dir();
-	if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) {
-		purple_debug_info("buddyicon", "Creating icon cache directory.\n");
-
-		if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) {
-			purple_debug_error("buddyicon",
-							 "Unable to create directory %s: %s\n",
-							 dirname, strerror(errno));
-			return NULL;
-		}
-	}
-
-	random = g_strdup_printf("%x", g_random_int());
-	filename = g_build_filename(dirname, random, NULL);
 
 #if GTK_CHECK_VERSION(2,2,0)
 #if GTK_CHECK_VERSION(2,4,0)
@@ -2478,47 +2468,21 @@
 		   prpl_info->icon_spec.max_height >= height)))                   /* The icon is the correct size */
 #endif
 	{
-		FILE *image;
-
 #if GTK_CHECK_VERSION(2,2,0)
 		g_strfreev(prpl_formats);
 		g_strfreev(pixbuf_formats);
 #endif
-
-		/* We don't need to scale the image, so copy it to the cache folder verbatim */
+		/* We don't need to scale the image. */
 
 		contents = NULL;
-		if (!g_file_get_contents(path, &contents, &length, NULL) ||
-		    (image = g_fopen(filename, "wb")) == NULL)
+		if (!g_file_get_contents(path, &contents, &length, NULL))
 		{
-			g_free(random);
-			g_free(filename);
 			g_free(contents);
 #if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
-			g_object_unref(G_OBJECT(pixbuf));
+		g_object_unref(G_OBJECT(pixbuf));
 #endif
 			return NULL;
 		}
-
-		if (fwrite(contents, 1, length, image) != length)
-		{
-			fclose(image);
-			g_unlink(filename);
-
-			g_free(random);
-			g_free(filename);
-			g_free(contents);
-#if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
-			g_object_unref(G_OBJECT(pixbuf));
-#endif
-			return NULL;
-		}
-		fclose(image);
-		g_free(contents);
-
-#if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
-		g_object_unref(G_OBJECT(pixbuf));
-#endif
 	}
 #if GTK_CHECK_VERSION(2,2,0)
 	else
@@ -2527,6 +2491,7 @@
 		GError *error = NULL;
 		GdkPixbuf *scale;
 		gboolean success = FALSE;
+		char *filename = NULL;
 
 		g_strfreev(pixbuf_formats);
 
@@ -2534,8 +2499,6 @@
 		if (error) {
 			purple_debug_error("buddyicon", "Could not open icon for conversion: %s\n", error->message);
 			g_error_free(error);
-			g_free(random);
-			g_free(filename);
 			g_strfreev(prpl_formats);
 			return NULL;
 		}
@@ -2558,6 +2521,17 @@
 		}
 
 		for (i = 0; prpl_formats[i]; i++) {
+			FILE *fp;
+
+			g_free(filename);
+			fp = purple_mkstemp(&filename, TRUE);
+			if (!fp)
+			{
+				g_free(filename);
+				return NULL;
+			}
+			fclose(fp);
+
 			purple_debug_info("buddyicon", "Converting buddy icon to %s as %s\n", prpl_formats[i], filename);
 			/* The "compression" param wasn't supported until gdk-pixbuf 2.8.
 			 * Using it in previous versions causes the save to fail (and an assert message).  */
@@ -2586,29 +2560,33 @@
 		g_object_unref(G_OBJECT(pixbuf));
 		if (!success) {
 			purple_debug_error("buddyicon", "Could not convert icon to usable format.\n");
-			g_free(random);
+			return NULL;
+		}
+
+		contents = NULL;
+		if (!g_file_get_contents(filename, &contents, &length, NULL))
+		{
+			purple_debug_error("buddyicon",
+					"Could not read '%s', which we just wrote to disk.\n",
+					filename);
+
+			g_free(contents);
 			g_free(filename);
 			return NULL;
 		}
+
+		g_unlink(filename);
+		g_free(filename);
 	}
 
-	if (g_stat(filename, &st) != 0) {
-		purple_debug_error("buddyicon",
-				"Could not stat '%s', which we just wrote to disk: %s\n",
-				filename, strerror(errno));
-		g_free(random);
-		g_free(filename);
-		return NULL;
-	}
-
-	/* Check the file size */
+	/* Check the image size */
 	/*
 	 * TODO: If the file is too big, it would be cool if we checked if
 	 *       the prpl supported jpeg, and then we could convert to that
 	 *       and use a lower quality setting.
 	 */
 	if ((prpl_info->icon_spec.max_filesize != 0) &&
-		(st.st_size > prpl_info->icon_spec.max_filesize))
+	    (length > prpl_info->icon_spec.max_filesize))
 	{
 		gchar *tmp;
 		tmp = g_strdup_printf(_("The file '%s' is too large for %s.  Please try a smaller image.\n"),
@@ -2618,16 +2596,15 @@
 		purple_debug_info("buddyicon",
 				"'%s' was converted to an image which is %" G_GSIZE_FORMAT
 				" bytes, but the maximum icon size for %s is %" G_GSIZE_FORMAT
-				" bytes\n", path, st.st_size, plugin->info->name,
+				" bytes\n", path, length, plugin->info->name,
 				prpl_info->icon_spec.max_filesize);
 		g_free(tmp);
-		g_free(random);
-		g_free(filename);
 		return NULL;
 	}
 
-	g_free(filename);
-	return random;
+	if (len)
+		*len = length;
+	return contents;
 #else
 	/*
 	 * The chosen icon wasn't the right size, and we're using
@@ -2780,10 +2757,10 @@
 
 void pidgin_set_custom_buddy_icon(PurpleAccount *account, const char *who, const char *filename)
 {
-	PurpleConversation *conv;
 	PurpleBuddy *buddy;
-	PurpleBlistNode *node;
-	char *path = NULL;
+	PurpleContact *contact;
+	gpointer data = NULL;
+	size_t len = 0;
 
 	buddy = purple_find_buddy(account, who);
 	if (!buddy) {
@@ -2791,35 +2768,20 @@
 		return;
 	}
 
-	node = (PurpleBlistNode*)purple_buddy_get_contact(buddy);
-	path = (char*)purple_blist_node_get_string(node, "custom_buddy_icon");
-	if (path) {
-		struct stat st;
-		if (g_stat(path, &st) == 0)
-			g_unlink(path);
-		path = NULL;
-	}
+	contact = purple_buddy_get_contact(buddy);
 
 	if (filename) {
-		char *newfile;
-
-		newfile = pidgin_convert_buddy_icon(purple_find_prpl(purple_account_get_protocol_id(account)),
-						filename);
-		path = purple_buddy_icons_get_full_path(newfile);
-		g_free(newfile);
+		const char *prpl_id = purple_account_get_protocol_id(account);
+		PurplePlugin *prpl = purple_find_prpl(prpl_id);
+
+		data = pidgin_convert_buddy_icon(prpl, filename, &len);
+
+		/* We don't want to delete the old icon if the new one didn't load. */
+		if (data == NULL)
+			return;
 	}
 
-	purple_blist_node_set_string(node, "custom_buddy_icon", path);
-	g_free(path);
-
-	/* Update the conversation */
-	conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, account);
-	if (conv)
-		purple_conversation_update(conv, PURPLE_CONV_UPDATE_ICON);
-
-	/* Update the buddylist */
-	if (buddy)
-		purple_blist_update_buddy_icon(buddy);
+	purple_buddy_icons_set_custom_icon(contact, data, len);
 }
 
 char *pidgin_make_pretty_arrows(const char *str)
@@ -2898,16 +2860,16 @@
 				void *user_data,  ...)
 {
 	GtkWidget *vbox;
-        GtkWidget *hbox;
-        GtkWidget *hbox2;
-        GtkWidget *label;
-        GtkWidget *button;
-        GtkWidget *img = NULL;
+	GtkWidget *hbox;
+	GtkWidget *hbox2;
+	GtkWidget *label;
+	GtkWidget *button;
+	GtkWidget *img = NULL;
 	GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
 	char label_text[2048];
 	const char *button_text;
 	GCallback callback;
-	char *primary_esc, *secondary_esc;
+	char *primary_esc, *secondary_esc = NULL;
 	va_list args;
 	static gboolean first_call = TRUE;
 
@@ -2915,7 +2877,7 @@
 	gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
 
 	vbox = gtk_vbox_new(FALSE,0);
-        gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BOX_SPACE);
+	gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BOX_SPACE);
 
 	g_object_set_data(G_OBJECT(vbox), "gc" ,gc);
 	minidialogs = g_slist_prepend(minidialogs, vbox);
@@ -2928,10 +2890,10 @@
 				    PURPLE_CALLBACK(connection_signed_off_cb), NULL);
 	}
 
-      	hbox = gtk_hbox_new(FALSE, 0);
-        gtk_container_add(GTK_CONTAINER(vbox), hbox);
-
-        if (img != NULL)
+	hbox = gtk_hbox_new(FALSE, 0);
+	gtk_container_add(GTK_CONTAINER(vbox), hbox);
+
+	if (img != NULL)
 		gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
 
 	primary_esc = g_markup_escape_text(primary, -1);
@@ -2940,14 +2902,15 @@
 		secondary_esc = g_markup_escape_text(secondary, -1);
 	g_snprintf(label_text, sizeof(label_text),
 		   "<span weight=\"bold\" size=\"smaller\">%s</span>%s<span size=\"smaller\">%s</span>",
-		   primary_esc, secondary ? "\n" : "", secondary?secondary_esc:"");
+		   primary_esc, secondary ? "\n" : "", secondary_esc ? secondary_esc : "");
 	g_free(primary_esc);
+	g_free(secondary_esc);
 	label = gtk_label_new(NULL);
 	gtk_widget_set_size_request(label, purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/width")-25,-1);
 	gtk_label_set_markup(GTK_LABEL(label), label_text);
-        gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
-        gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-        gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
+	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
+	gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
 
 	hbox2 = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
--- a/pidgin/gtkutils.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/gtkutils.h	Sat Apr 28 18:32:47 2007 +0000
@@ -445,11 +445,13 @@
 /**
  * Converts a buddy icon to the required size and format
  * 
- * @param plugin     The prpl to conver the icon
- * @param path       The path of a buddy icon to convert
- * @return           The name of a new buddy icon
+ * @param plugin     The prpl to convert the icon
+ * @param path       The path of a file to convert
+ * @param len        If not @c NULL, the length of the returned data will be set here.
+ *
+ * @return           The converted image data, or @c NULL if an error occurred.
  */
-char* pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path);
+gpointer pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path, size_t *len);
 
 #if !GTK_CHECK_VERSION(2,6,0)
 /**
--- a/pidgin/pidgin.h	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pidgin.h	Sat Apr 28 18:32:47 2007 +0000
@@ -43,7 +43,7 @@
 #define PIDGIN_UI "gtk-gaim"
 
 /* change this only when we have a sane upgrade path for old prefs */
-#define PIDGIN_PREFS_ROOT "/gaim/gtk"
+#define PIDGIN_PREFS_ROOT "/pidgin"
 
 #ifndef _WIN32
 # define PIDGIN_ALERT_TITLE ""
--- a/pidgin/pidginstock.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pidginstock.c	Sat Apr 28 18:32:47 2007 +0000
@@ -101,76 +101,73 @@
   gboolean large;
   gboolean huge;
   gboolean rtl;
+  const char *translucent_name;
 } const sized_stock_icons [] = {
-	{ PIDGIN_STOCK_STATUS_AVAILABLE,   "status", "available.png", 	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_AVAILABLE_I, "status", "available_i.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_AWAY, 	   "status", "away.png",	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_AWAY_I, 	"status", "away_i.png",		TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_BUSY, 	"status", "busy.png", 		TRUE, TRUE, TRUE, TRUE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_BUSY_I, 	"status", "busy_i.png", 	TRUE, FALSE, FALSE, FALSE, FALSE,FALSE },
-	{ PIDGIN_STOCK_STATUS_CHAT, 	"status", "chat.png",		TRUE, TRUE, TRUE, TRUE, FALSE, TRUE },
-	{ PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_XA, 	"status", "extended-away.png",	TRUE, TRUE, TRUE, TRUE, FALSE, TRUE },
-	{ PIDGIN_STOCK_STATUS_XA_I, 	"status", "extended-away_i.png",TRUE, FALSE, FALSE, FALSE, FALSE, TRUE },
-	{ PIDGIN_STOCK_STATUS_LOGIN, 	"status", "log-in.png",		TRUE, TRUE, TRUE, TRUE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_LOGOUT, 	"status", "log-out.png",	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_OFFLINE, 	"status", "offline.png",	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_PERSON, 	"status", "person.png",		TRUE, TRUE, TRUE, TRUE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_MESSAGE, 	"status", "message-pending.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
+	{ PIDGIN_STOCK_STATUS_AVAILABLE,   "status", "available.png", 	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I },
+	{ PIDGIN_STOCK_STATUS_AWAY, 	   "status", "away.png",	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I },
+	{ PIDGIN_STOCK_STATUS_BUSY, 	"status", "busy.png", 		TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I },
+	{ PIDGIN_STOCK_STATUS_CHAT, 	"status", "chat.png",		TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+	{ PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+	{ PIDGIN_STOCK_STATUS_XA, 	"status", "extended-away.png",	TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I },
+	{ PIDGIN_STOCK_STATUS_LOGIN, 	"status", "log-in.png",		TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
+	{ PIDGIN_STOCK_STATUS_LOGOUT, 	"status", "log-out.png",	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE , NULL },
+	{ PIDGIN_STOCK_STATUS_OFFLINE, 	"status", "offline.png",	TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_STATUS_PERSON, 	"status", "person.png",		TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_STATUS_MESSAGE, 	"status", "message-pending.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
 	
-	{ PIDGIN_STOCK_STATUS_IGNORED,	"emblems", "blocked.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_FOUNDER,	"emblems", "founder.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_OPERATOR,	"emblems", "operator.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_HALFOP, 	"emblems", "half-operator.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_STATUS_VOICE, 	"emblems", "voice.png",		TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
+	{ PIDGIN_STOCK_STATUS_IGNORED,	"emblems", "blocked.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_STATUS_FOUNDER,	"emblems", "founder.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_STATUS_OPERATOR,	"emblems", "operator.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_STATUS_HALFOP, 	"emblems", "half-operator.png",	TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_STATUS_VOICE, 	"emblems", "voice.png",		TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
 
-	{ PIDGIN_STOCK_DIALOG_AUTH,	"dialogs", "auth.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE },
-	{ PIDGIN_STOCK_DIALOG_COOL,	"dialogs", "cool.png", 		FALSE, FALSE, FALSE, FALSE, TRUE, FALSE },
-	{ PIDGIN_STOCK_DIALOG_ERROR,	"dialogs", "error.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE },
-	{ PIDGIN_STOCK_DIALOG_INFO,	"dialogs", "info.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE },
-	{ PIDGIN_STOCK_DIALOG_MAIL,	"dialogs", "mail.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE },
-	{ PIDGIN_STOCK_DIALOG_QUESTION,	"dialogs", "question.png",	TRUE, FALSE, FALSE, FALSE, TRUE, FALSE },
-	{ PIDGIN_STOCK_DIALOG_WARNING,	"dialogs", "warning.png",	FALSE, FALSE, FALSE, FALSE, TRUE, FALSE },
+	{ PIDGIN_STOCK_DIALOG_AUTH,	"dialogs", "auth.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL  },
+	{ PIDGIN_STOCK_DIALOG_COOL,	"dialogs", "cool.png", 		FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL  },
+	{ PIDGIN_STOCK_DIALOG_ERROR,	"dialogs", "error.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL  },
+	{ PIDGIN_STOCK_DIALOG_INFO,	"dialogs", "info.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL  },
+	{ PIDGIN_STOCK_DIALOG_MAIL,	"dialogs", "mail.png",		TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL  },
+	{ PIDGIN_STOCK_DIALOG_QUESTION,	"dialogs", "question.png",	TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL  },
+	{ PIDGIN_STOCK_DIALOG_WARNING,	"dialogs", "warning.png",	FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL  },
 
-	{ PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "connect0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "connect1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "connect2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "connect3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "connect4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "connect5.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "connect6.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "connect7.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "connect8.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_TYPING0,  "animations", "typing0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_TYPING1,  "animations", "typing1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_TYPING2,  "animations", "typing2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_TYPING3,  "animations", "typing3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_ANIMATION_TYPING4,  "animations", "typing4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "connect0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "connect1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "connect2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "connect3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "connect4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "connect5.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "connect6.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "connect7.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "connect8.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_TYPING0,  "animations", "typing0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_TYPING1,  "animations", "typing1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_TYPING2,  "animations", "typing2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_TYPING3,  "animations", "typing3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_ANIMATION_TYPING4,  "animations", "typing4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
 
-	{ PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_PENDING, "status", "message-pending.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE },
+	{ PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_PENDING, "status", "message-pending.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  },
 
-	{ PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
-	{ PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-message.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE }
+	{ PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  },
+	{ PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-message.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL  }
 };
 
 static gchar *
@@ -238,6 +235,100 @@
 
 }
 
+/* Altered from do_colorshift in gnome-panel */
+static void
+do_alphashift (GdkPixbuf *dest, GdkPixbuf *src)
+{
+        gint i, j;
+        gint width, height, has_alpha, srcrowstride, destrowstride;
+        guchar *target_pixels;
+        guchar *original_pixels;
+        guchar *pixsrc;
+        guchar *pixdest;
+        guchar a;
+
+        has_alpha = gdk_pixbuf_get_has_alpha (src);
+        if (!has_alpha)
+          return;
+
+        width = gdk_pixbuf_get_width (src);
+        height = gdk_pixbuf_get_height (src);
+        srcrowstride = gdk_pixbuf_get_rowstride (src);
+        destrowstride = gdk_pixbuf_get_rowstride (dest);
+        target_pixels = gdk_pixbuf_get_pixels (dest);
+        original_pixels = gdk_pixbuf_get_pixels (src);
+
+        for (i = 0; i < height; i++) {
+                pixdest = target_pixels + i*destrowstride;
+                pixsrc = original_pixels + i*srcrowstride;
+                for (j = 0; j < width; j++) {
+                        *(pixdest++) = *(pixsrc++);
+                        *(pixdest++) = *(pixsrc++);
+                        *(pixdest++) = *(pixsrc++);
+                        a = *(pixsrc++);
+                        *(pixdest++) = a / 2;
+                }
+        }
+}
+
+/* TODO: This is almost certainly not the best way to do this, but it's late, I'm tired,
+ * we're a few hours from getting this thing out, and copy/paste is EASY.
+ */
+static void
+add_translucent_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir,
+	       gboolean rtl, const char *size, const char *file)
+{
+	char *filename;
+	GtkIconSource *source;	
+	GdkPixbuf *pixbuf;
+
+	filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, file, NULL);
+	pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+	do_alphashift(pixbuf, pixbuf);
+
+	source = gtk_icon_source_new();
+        gtk_icon_source_set_pixbuf(source, pixbuf);
+	gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR);
+        gtk_icon_source_set_direction_wildcarded(source, !rtl);
+	gtk_icon_source_set_size(source, sizeid);
+        gtk_icon_source_set_size_wildcarded(source, FALSE);
+        gtk_icon_source_set_state_wildcarded(source, TRUE);
+        gtk_icon_set_add_source(iconset, source);
+	gtk_icon_source_free(source);
+
+	if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) {
+		source = gtk_icon_source_new();
+	        gtk_icon_source_set_pixbuf(source, pixbuf);
+        	gtk_icon_source_set_direction_wildcarded(source, TRUE);
+	        gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU);
+	        gtk_icon_source_set_size_wildcarded(source, FALSE);
+        	gtk_icon_source_set_state_wildcarded(source, TRUE);
+	        gtk_icon_set_add_source(iconset, source);
+	        gtk_icon_source_free(source);
+	}
+        g_free(filename);
+	g_object_unref(pixbuf);
+
+       if (rtl) {
+		filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, "rtl", file, NULL);
+ 		pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+		do_alphashift(pixbuf, pixbuf);
+		source = gtk_icon_source_new();
+                gtk_icon_source_set_pixbuf(source, pixbuf);
+                gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL);
+                gtk_icon_source_set_size(source, sizeid);
+                gtk_icon_source_set_size_wildcarded(source, FALSE);
+                gtk_icon_source_set_state_wildcarded(source, TRUE);
+                gtk_icon_set_add_source(iconset, source);
+		g_free(filename);
+		g_object_unref(pixbuf);
+		gtk_icon_source_free(source);
+        }
+
+
+}
+
+
 void
 pidgin_stock_init(void)
 {
@@ -334,6 +425,33 @@
 
 		gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset);
 		gtk_icon_set_unref(iconset);
+
+		if (sized_stock_icons[i].translucent_name) {
+			iconset = gtk_icon_set_new();
+			if (sized_stock_icons[i].extra_small)
+				add_translucent_sized_icon(iconset, extra_small,
+					       sized_stock_icons[i].dir, sized_stock_icons[i].rtl,
+					       "16", sized_stock_icons[i].filename);
+	               if (sized_stock_icons[i].small)
+        	                add_translucent_sized_icon(iconset, small,
+					       sized_stock_icons[i].dir,  sized_stock_icons[i].rtl,
+	                                       "22", sized_stock_icons[i].filename);
+	               if (sized_stock_icons[i].medium)
+	                        add_translucent_sized_icon(iconset, medium,
+				               sized_stock_icons[i].dir,  sized_stock_icons[i].rtl,
+	                                       "32", sized_stock_icons[i].filename);
+		       if (sized_stock_icons[i].large)
+			       add_translucent_sized_icon(iconset, large,
+	                                      sized_stock_icons[i].dir, sized_stock_icons[i].rtl,
+	                                      "48", sized_stock_icons[i].filename);
+	               if (sized_stock_icons[i].huge)
+	                        add_translucent_sized_icon(iconset, huge,
+		                               sized_stock_icons[i].dir,  sized_stock_icons[i].rtl,
+	                                       "64", sized_stock_icons[i].filename);
+	
+			gtk_icon_factory_add(icon_factory, sized_stock_icons[i].translucent_name, iconset);
+			gtk_icon_set_unref(iconset);
+		}
 	}
 
 	gtk_widget_destroy(win);
Binary file pidgin/pixmaps/animations/16/connect0.png has changed
Binary file pidgin/pixmaps/animations/16/connect1.png has changed
Binary file pidgin/pixmaps/animations/16/connect2.png has changed
Binary file pidgin/pixmaps/animations/16/connect3.png has changed
Binary file pidgin/pixmaps/animations/16/connect4.png has changed
Binary file pidgin/pixmaps/animations/16/connect5.png has changed
Binary file pidgin/pixmaps/animations/16/connect6.png has changed
Binary file pidgin/pixmaps/animations/16/connect7.png has changed
Binary file pidgin/pixmaps/animations/16/connect8.png has changed
Binary file pidgin/pixmaps/animations/16/connect9.png has changed
--- a/pidgin/pixmaps/emblems/16/scalable/secure.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/emblems/16/scalable/secure.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -7,96 +7,81 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg2"
+   width="16px"
+   height="16px"
+   id="svg4220"
    sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/emblems/scalable"
+   inkscape:version="0.44.1"
+   sodipodi:docbase="/home/hbons/code/pidgin-mtn/pidgin/pixmaps/emblems/16/scalable"
    sodipodi:docname="secure.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/emblems/secure.png"
+   inkscape:export-filename="/home/hbons/code/pidgin-mtn/pidgin/pixmaps/emblems/16/secure.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90">
   <defs
-     id="defs4">
+     id="defs4222">
     <linearGradient
        inkscape:collect="always"
-       id="linearGradient2193">
-      <stop
-         style="stop-color:#555753;stop-opacity:1;"
-         offset="0"
-         id="stop2195" />
-      <stop
-         style="stop-color:#555753;stop-opacity:0;"
-         offset="1"
-         id="stop2197" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2351">
+       id="linearGradient5170">
       <stop
          style="stop-color:#eeeeec;stop-opacity:1;"
          offset="0"
-         id="stop2353" />
+         id="stop5172" />
       <stop
          style="stop-color:#eeeeec;stop-opacity:0;"
          offset="1"
-         id="stop2355" />
+         id="stop5174" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5160">
+      <stop
+         style="stop-color:#c4a000;stop-opacity:1;"
+         offset="0"
+         id="stop5162" />
+      <stop
+         style="stop-color:#c4a000;stop-opacity:0;"
+         offset="1"
+         id="stop5164" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       id="linearGradient2343">
+       id="linearGradient5127">
       <stop
-         style="stop-color:#babdb6;stop-opacity:1;"
+         style="stop-color:white;stop-opacity:1;"
          offset="0"
-         id="stop2345" />
+         id="stop5129" />
       <stop
-         style="stop-color:#babdb6;stop-opacity:0;"
+         style="stop-color:white;stop-opacity:0;"
          offset="1"
-         id="stop2347" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2276">
-      <stop
-         style="stop-color:#f57900;stop-opacity:1;"
-         offset="0"
-         id="stop2278" />
-      <stop
-         style="stop-color:#fcaf3e;stop-opacity:1;"
-         offset="1"
-         id="stop2280" />
+         id="stop5131" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2343"
-       id="linearGradient2349"
-       x1="12.515625"
-       y1="8.7261219"
-       x2="12.515625"
-       y2="0.68458056"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.661626,0,0,0.669831,0.220067,-0.15079)" />
+       xlink:href="#linearGradient5127"
+       id="linearGradient5133"
+       x1="-8.5730524"
+       y1="8.1949167"
+       x2="-8.5730524"
+       y2="14.091002"
+       gradientUnits="userSpaceOnUse" />
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2351"
-       id="linearGradient2357"
-       x1="12.488563"
-       y1="5.8544211"
-       x2="12.488563"
-       y2="19.066195"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.571617,0,0,0.664095,1.361509,-0.130758)" />
+       xlink:href="#linearGradient5160"
+       id="linearGradient5166"
+       x1="-5.2575259"
+       y1="14.311456"
+       x2="-10.187596"
+       y2="11.560035"
+       gradientUnits="userSpaceOnUse" />
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2193"
-       id="linearGradient2199"
-       x1="8.5"
-       y1="11.038469"
-       x2="8.5"
-       y2="13"
+       xlink:href="#linearGradient5170"
+       id="linearGradient5176"
+       x1="-7.5400991"
+       y1="0.79740471"
+       x2="-7.5400991"
+       y2="4.7783289"
        gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
@@ -106,20 +91,21 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="39.000666"
-     inkscape:cx="12.56383"
-     inkscape:cy="9.2861054"
-     inkscape:document-units="px"
+     inkscape:zoom="22.197802"
+     inkscape:cx="8.5405941"
+     inkscape:cy="8.0965274"
      inkscape:current-layer="layer1"
      showgrid="true"
-     fill="#eeeeec"
-     inkscape:window-width="1268"
-     inkscape:window-height="972"
-     inkscape:window-x="6"
-     inkscape:window-y="21"
-     inkscape:grid-points="true" />
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="872"
+     inkscape:window-height="625"
+     inkscape:window-x="47"
+     inkscape:window-y="150" />
   <metadata
-     id="metadata7">
+     id="metadata4225">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -130,47 +116,46 @@
     </rdf:RDF>
   </metadata>
   <g
+     id="layer1"
      inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       style="fill:url(#linearGradient2349);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999934;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 6.1333463,1.5028569 C 5.2074147,1.597488 4.4999578,2.402644 4.4999578,3.3658261 L 4.4999578,7.656935 C 4.4999578,8.6843293 5.3046208,9.4989715 6.3194286,9.4989715 L 10.661348,9.4989715 C 11.676156,9.4989715 12.501495,8.6843293 12.501495,7.656935 L 12.501495,3.3658261 C 12.501495,2.3384316 11.676156,1.5028569 10.661348,1.5028569 L 6.3194286,1.5028569 C 6.256003,1.5028569 6.1950751,1.496548 6.1333463,1.5028569 z M 7.2911913,3.5332839 C 7.3292999,3.5284078 7.3757891,3.5332839 7.4152465,3.5332839 L 9.5862055,3.5332839 C 9.8150574,3.5332839 10.026054,3.623525 10.185805,3.7635385 C 10.201979,3.7784151 10.232757,3.8103245 10.247831,3.8263353 C 10.272321,3.8536261 10.309391,3.9008527 10.330534,3.9309964 C 10.428638,4.0782548 10.49594,4.2625583 10.49594,4.4543024 L 10.49594,6.5893908 C 10.49594,7.1007088 10.091261,7.5104093 9.5862055,7.5104093 L 7.4152465,7.5104093 C 7.1232614,7.5104093 6.8582226,7.3694453 6.691593,7.1545613 C 6.5780448,7.000656 6.5055108,6.7971136 6.5055108,6.5893908 L 6.5055108,4.4543024 C 6.5055108,4.2625583 6.5728119,4.0782548 6.6709171,3.9309964 C 6.7301189,3.8465936 6.8149822,3.7606775 6.8983509,3.7007419 C 7.0135024,3.6221117 7.1463786,3.5518132 7.2911913,3.5332839 z "
-       id="rect1437" />
+     inkscape:groupmode="layer">
     <rect
-       style="fill:#edd400;fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.97247171;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect1435"
-       width="10.030794"
-       height="8.0158854"
-       x="3.4845238"
-       y="6.4937477"
-       ry="2.1756756"
-       rx="2.1756771" />
+       style="opacity:1;fill:#fce94f;fill-opacity:1;stroke:#c4a000;stroke-width:0.52907252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4238"
+       width="5.7297029"
+       height="6.3509903"
+       x="-6"
+       y="6"
+       transform="matrix(2.268879,0,0,1.574557,15.11327,-3.947338)"
+       rx="0.44198585"
+       ry="0.60082906" />
     <rect
-       style="opacity:0.4;fill:url(#linearGradient2357);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2312"
-       width="8.0056992"
-       height="5.982585"
-       x="4.4973445"
-       y="7.5063467"
-       ry="1.1603612"
-       rx="1.1603615" />
+       style="opacity:1;fill:url(#linearGradient5166);fill-opacity:1.0;stroke:url(#linearGradient5133);stroke-width:0.50402278;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5125"
+       width="5.6391087"
+       height="2.9732673"
+       x="-11"
+       y="10.458911"
+       transform="matrix(1.950662,0,0,2.017983,23.95729,-12.6059)" />
+    <rect
+       style="opacity:0.56331877;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5156"
+       width="5.1252475"
+       height="2.6569307"
+       x="-14"
+       y="6"
+       transform="matrix(2.34135,0,0,0.752748,34.7789,1.48351)" />
     <path
-       sodipodi:type="arc"
-       style="fill:#555753;fill-opacity:1;stroke:none;stroke-width:0.86272454;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2325"
-       sodipodi:cx="12.265541"
-       sodipodi:cy="14"
-       sodipodi:rx="0.73445857"
-       sodipodi:ry="1"
-       d="M 13 14 A 0.73445857 1 0 1 1  11.531083,14 A 0.73445857 1 0 1 1  13 14 z"
-       transform="matrix(2.042319,0,0,1.5,-16.55015,-11.5)" />
-    <rect
-       style="fill:url(#linearGradient2199);fill-opacity:1.0;stroke:none;stroke-width:0.99999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2333"
-       width="1"
-       height="3"
-       x="8"
-       y="10" />
+       transform="translate(15,0)"
+       style="fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -9.4188119,0.5 C -10.500938,0.5 -11.5,1.4812151 -11.5,2.4460396 L -11.5,7.5 L -9.5,7.5 L -9.4549505,4.0089109 C -9.4549505,2.4726571 -9.4588865,2.5 -8.1034653,2.5 L -5.9866337,2.5 C -4.4993176,2.5 -4.5,2.5177763 -4.5,4.0539604 L -4.5,7.5 L -2.5,7.5 L -2.5,2.4910891 C -2.5,1.6080661 -3.5388679,0.54504951 -4.4460396,0.54504951 L -9.4188119,0.5 z "
+       id="path5168"
+       sodipodi:nodetypes="ccccccccccccc" />
+    <path
+       transform="translate(15,0)"
+       style="fill:url(#linearGradient5176);fill-opacity:1.0;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -9.4188119,0.5 C -10.500938,0.5 -11.5,1.4812151 -11.5,2.4460396 L -11.5,6.4638614 C -11.5,7.8729886 -9.5,7.6557806 -9.5,6.5089109 L -9.4549505,4.0089109 C -9.4549505,2.4726571 -9.4588865,2.5 -8.1034653,2.5 L -5.9866337,2.5 C -4.4993176,2.5 -4.5,2.5177763 -4.5,4.0539604 L -4.5,6.5539604 C -4.5450495,7.8163699 -2.5,7.594009 -2.5,6.5539604 L -2.5,2.4910891 C -2.5,1.6080661 -3.5388679,0.54504951 -4.4460396,0.54504951 L -9.4188119,0.5 z "
+       id="rect5149"
+       sodipodi:nodetypes="ccccccccccccc" />
   </g>
 </svg>
Binary file pidgin/pixmaps/emblems/16/secure.png has changed
--- a/pidgin/pixmaps/emotes/default/22/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -62,6 +62,7 @@
 		foot-in-mouth.png \
 		freaked-out.png \
 		ghost.png \
+		giggle.png \
 		girl.png \
 		glasses-cool.png \
 		glasses-nerdy.png \
@@ -87,6 +88,7 @@
 		love-over.png \
 		love.png \
 		lying.png \
+		mad-tongue.png \
 		mail.png \
 		mean.png \
 		meeting.png \
@@ -99,6 +101,7 @@
 		msn_online.png \
 		msn.png \
 		musical-note.png \
+		nailbiting.png \
 		neutral.png \
 		party.png \
 		peace.png \
@@ -158,10 +161,12 @@
 		umbrella.png \
 		vampire.png \
 		victory.png \
+		waiting.png \
 		watermelon.png \
 		weep.png \
 		wilt.png \
 		wink.png \
+		worship.png \
 		yawn.png \
 		yin-yang.png
 
--- a/pidgin/pixmaps/emotes/default/22/theme	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/theme	Sat Apr 28 18:32:47 2007 +0000
@@ -273,7 +273,7 @@
 bye.png             =;
 arrogant.png        [-(
 thinking.png        :-?
-waiting.png         :-w :-W               
+waiting.png         :-w :-W
 #at_wits_end        ~x( ~X(         MISSING: "Why.Does.This.Not.Work.AAAAARGH!!"    => angry smily shouting and pulling hair off
 smile-big.png       :D :-D :d :-d
 tongue.png          :-P :P :-p :p
@@ -322,8 +322,8 @@
 clover.png		      %%-
 musical-note.png	  :-"
 nailbiting.png      :-SS :-ss
-giggle.png	        ;))            
-worship.png	        ^:)^          
+giggle.png	        ;))
+worship.png	        ^:)^
 star.png		            (*)
 mad-tongue.png      >:p
 #yahoo_waving.gif	        >:/                     TODO
--- a/pidgin/pixmaps/icons/16/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/16/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -2,7 +2,7 @@
 
 EXTRA_DIST = pidgin.png 
 
-pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/16
+pidginiconspixdir = $(datadir)/icons/hicolor/16x16/apps
 
 pidginiconspix_DATA = $(EXTRA_DIST)
 
Binary file pidgin/pixmaps/icons/16/pidgin.png has changed
--- a/pidgin/pixmaps/icons/16/scalable/pidgin.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/16/scalable/pidgin.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -14,15 +14,87 @@
    id="svg4345"
    sodipodi:version="0.32"
    inkscape:version="0.44.1"
-   sodipodi:docbase="/home/hbons/Desktop"
-   sodipodi:docname="pidgin-16.svg"
-   inkscape:export-filename="/home/hbons/Desktop/pidgin.png"
+   sodipodi:docbase="/home/hbons/Desktop/icons/16/scalable"
+   sodipodi:docname="pidgin.svg"
+   inkscape:export-filename="/home/hbons/Desktop/pidgin16.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
    version="1.0">
   <defs
      id="defs4347">
     <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5438">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop5440" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop5442" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6817">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6819" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6821" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6537">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6539" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6541" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6506">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop6508" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop6510" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5304">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop5306" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop5308" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5280">
+      <stop
+         style="stop-color:#82508e;stop-opacity:1;"
+         offset="0"
+         id="stop5282" />
+      <stop
+         style="stop-color:#82508e;stop-opacity:0;"
+         offset="1"
+         id="stop5284" />
+    </linearGradient>
+    <linearGradient
        id="linearGradient2804">
       <stop
          style="stop-color:black;stop-opacity:0;"
@@ -37,61 +109,6 @@
          offset="1"
          id="stop2808" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2804"
-       id="linearGradient1516"
-       gradientUnits="userSpaceOnUse"
-       x1="21.875"
-       y1="48.000977"
-       x2="21.875"
-       y2="40" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1514"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,36,8.8)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2781">
-      <stop
-         style="stop-color:black;stop-opacity:1;"
-         offset="0"
-         id="stop2783" />
-      <stop
-         style="stop-color:black;stop-opacity:0;"
-         offset="1"
-         id="stop2785" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1512"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,-13,-79.2)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient5235">
-      <stop
-         style="stop-color:#2e3436;stop-opacity:1;"
-         offset="0"
-         id="stop5237" />
-      <stop
-         style="stop-color:#2e3436;stop-opacity:0;"
-         offset="1"
-         id="stop5239" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
        xlink:href="#linearGradient25546"
@@ -148,38 +165,61 @@
          offset="1.0000000"
          id="stop3804" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3816">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3818" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3820" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3816"
-       id="radialGradient4179"
-       gradientUnits="userSpaceOnUse"
-       cx="31.112698"
-       cy="19.008621"
-       fx="31.112698"
-       fy="19.008621"
-       r="8.6620579" />
-    <radialGradient
+       xlink:href="#linearGradient5280"
+       id="radialGradient5286"
+       cx="15.004828"
+       cy="39.80859"
+       fx="15.004828"
+       fy="39.80859"
+       r="9.7225161"
+       gradientTransform="matrix(1,0,0,0.732283,0,10.65742)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5304"
+       id="linearGradient5310"
+       x1="12.606371"
+       y1="15.069461"
+       x2="12.606371"
+       y2="21.152372"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient5235"
-       id="radialGradient5241"
-       cx="23.234518"
-       cy="40.688972"
-       fx="23.234518"
-       fy="40.688972"
-       r="16.956987"
-       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
+       xlink:href="#linearGradient6506"
+       id="linearGradient6512"
+       x1="15.645709"
+       y1="39.743458"
+       x2="15.645709"
+       y2="53.502155"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6537"
+       id="linearGradient6543"
+       x1="30.5"
+       y1="0.033532728"
+       x2="30.5"
+       y2="23.559282"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6817"
+       id="linearGradient6823"
+       x1="0.23931108"
+       y1="38.950283"
+       x2="5.7089725"
+       y2="42.982571"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5438"
+       id="linearGradient5444"
+       x1="30.152058"
+       y1="-0.86487341"
+       x2="30.152058"
+       y2="23.011967"
        gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
@@ -190,8 +230,8 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="42.440064"
-     inkscape:cx="12.433319"
-     inkscape:cy="6.6578459"
+     inkscape:cx="13.087113"
+     inkscape:cy="8.5298663"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
@@ -200,8 +240,12 @@
      inkscape:window-height="966"
      inkscape:window-x="3"
      inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:grid-points="false"
      width="16px"
-     height="16px" />
+     height="16px"
+     inkscape:object-bbox="true" />
   <metadata
      id="metadata4350">
     <rdf:RDF>
@@ -218,48 +262,110 @@
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="path5540"
-       transform="matrix(-0.454545,0,0,0.390748,16.18182,-2.43061)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       style="opacity:1;fill:#75507b;fill-opacity:1"
+       d="M 36.0625,8 C 33.978257,8 33.334928,10.523086 34.78125,12.9375 C 35.250389,13.720651 36.674297,15.15311 36.86722,15.15311 L 36.878267,14.508325 C 36.288194,13.580567 35.517363,12.502064 35.686987,12.281543 C 37.835781,12.281543 38,11.491782 38,10.027674 C 38,8.7542399 37.228501,8 36.0625,8 z "
+       id="path6521"
+       transform="matrix(1.148904,0,0,0.920169,-34.28919,-3.241212)"
+       sodipodi:nodetypes="csccccc" />
     <path
-       transform="matrix(-0.397516,0,0,0.329862,15.46895,-1.283212)"
-       style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       id="path5542"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:2.30209565;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 3,31.153143 2.9750563,38.402618 2.9750563,45.572826 C 4.1625449,45.572826 27.946366,45.600605 30.637365,45.600605 C 32.751492,45.600605 32.586331,43.541005 32.586331,43.541005 C 32.586331,40.875594 27.597902,38.639057 25.813453,36.682531 C 23.985035,34.68151 26,30.884078 26,30.884078 C 26.641306,29.354278 28.01889,26.891006 28.01889,25.115922 C 28.01889,18.215923 21.624002,13 15,13 z "
+       id="path5176"
+       sodipodi:nodetypes="ccccszcsc"
+       transform="matrix(0.43939,0,0,0.42944,-0.819445,-4.082726)" />
+    <rect
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect6331"
+       width="2.6154532"
+       height="1.1545694"
+       x="5.513658"
+       y="6.4806929"
+       rx="0.48532724"
+       ry="0.32910046"
+       transform="matrix(1.147027,0,0,0.866113,-0.324314,2.386999)" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4340"
-       sodipodi:cx="23.234518"
-       sodipodi:cy="40.688972"
-       sodipodi:rx="16.956987"
-       sodipodi:ry="2.2583797"
-       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
-       transform="matrix(1.208941,0,0,1.980928,-1.589159,5.924394)" />
+       style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5273"
+       sodipodi:cx="15.004828"
+       sodipodi:cy="39.80859"
+       sodipodi:rx="9.7225161"
+       sodipodi:ry="7.119638"
+       d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1  5.2823124,39.80859 A 9.7225161 7.119638 0 1 1  24.727345 39.80859 z"
+       transform="matrix(0.434788,0,0,0.500648,-1.130366,-6.547801)" />
+    <path
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -42.833794,49.038847 C -42.833794,49.038847 -42.815855,44.709724 -42.815855,37.951005 C -42.815855,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -41.348464,49.038847 -42.833794,49.038847 z "
+       id="rect5312"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(0.446908,0,0,0.358425,20.14277,-2.602607)" />
     <path
-       transform="matrix(2.539812,0,0,0.410815,-57.0204,65.80212)"
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -49.441852,47.4154 C -47.112614,42.001764 -42.19329,43.469796 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z "
+       id="path5317"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(-0.376289,0,0,0.381853,-5.604413,-3.491724)" />
+    <path
+       transform="matrix(0.399589,0,0,0.393554,-5.973603e-2,-3.038964)"
+       style="opacity:0.31004363;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:2.5216887;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0617033,25.489349 4.0625,25.5 C 4.0625,32.787473 3.9033639,38.26012 3.9033639,44.499878 C 5.8399452,44.499878 24.86993,44.470084 30.695903,44.470084 C 29.746978,42.549359 26.273076,40.711023 23.972608,38.78763 C 23.362603,37.973536 23.023697,35.459892 22.969233,34.418473 C 23.611113,31.359155 25.129532,28.401757 26.527172,25.440129 C 26.527172,19.094533 21.022436,14.0625 15,14.0625 z "
+       id="path5241"
+       sodipodi:nodetypes="csccccccc" />
+    <path
+       transform="matrix(0.626764,0,0,0.689441,-3.309086,-9.833164)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5157"
+       sodipodi:nodetypes="csssc" />
+    <path
        sodipodi:type="arc"
-       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path4306"
-       sodipodi:cx="31.112698"
-       sodipodi:cy="19.008621"
-       sodipodi:rx="8.6620579"
-       sodipodi:ry="8.6620579"
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5162"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.805756,0,0,0.772414,-5.19425,-11.77932)" />
+    <path
+       transform="matrix(0.29055,-0.412361,-0.273947,-0.388798,13.58792,20.45445)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5169"
+       sodipodi:nodetypes="csssc" />
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="path5534"
-       transform="matrix(0.454545,0,0,0.390748,-0.181807,2.56939)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       sodipodi:type="arc"
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5171"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.805755,0,0,0.772417,0.805755,-11.77938)" />
+    <path
+       transform="matrix(0.63556,0,0,0.371992,4.635114,-6.489142)"
+       style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="rect5187"
+       sodipodi:nodetypes="ccczc" />
     <path
-       transform="matrix(0.397516,0,0,0.329862,0.531062,3.716788)"
-       style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       id="path5536"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       transform="matrix(0.743268,0,0,0.267357,-7.659906,-1.671861)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.651119,11.193815 C 13.577759,8.2509126 16.249277,11.481501 17.614226,12.804399 L 14.761306,13.747613 L 11.651119,11.193815 z "
+       id="path5192"
+       sodipodi:nodetypes="cccc" />
+    <path
+       transform="matrix(0.686065,0,0,0.46633,-5.019573,-4.365629)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.174576,11.994261 17.519594,13.650486 L 14.543472,12.891665 L 11.689238,9.8218679 z "
+       id="rect5189"
+       sodipodi:nodetypes="cccc" />
+    <path
+       transform="matrix(0.63556,0,0,0.371995,4.635112,-6.489295)"
+       style="fill:url(#linearGradient6823);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="path6815"
+       sodipodi:nodetypes="ccczc" />
   </g>
 </svg>
--- a/pidgin/pixmaps/icons/24/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/24/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -2,7 +2,7 @@
 
 EXTRA_DIST = pidgin.png 
 
-pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/24
+pidginiconspixdir = $(datadir)/icons/hicolor/24x24/apps
 
 pidginiconspix_DATA = $(EXTRA_DIST)
 
Binary file pidgin/pixmaps/icons/24/pidgin.png has changed
--- a/pidgin/pixmaps/icons/24/scalable/pidgin.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/24/scalable/pidgin.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -14,15 +14,87 @@
    id="svg4345"
    sodipodi:version="0.32"
    inkscape:version="0.44.1"
-   sodipodi:docbase="/home/hbons/Desktop"
-   sodipodi:docname="pidgin-24.svg"
-   inkscape:export-filename="/home/hbons/Desktop/pidgin.png"
+   sodipodi:docbase="/home/hbons/Desktop/icons/24/scalable"
+   sodipodi:docname="pidgin.svg"
+   inkscape:export-filename="/home/hbons/Desktop/pidgin24-2.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
    version="1.0">
   <defs
      id="defs4347">
     <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5438">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop5440" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop5442" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6817">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6819" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6821" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6537">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6539" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6541" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6506">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop6508" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop6510" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5304">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop5306" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop5308" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5280">
+      <stop
+         style="stop-color:#82508e;stop-opacity:1;"
+         offset="0"
+         id="stop5282" />
+      <stop
+         style="stop-color:#82508e;stop-opacity:0;"
+         offset="1"
+         id="stop5284" />
+    </linearGradient>
+    <linearGradient
        id="linearGradient2804">
       <stop
          style="stop-color:black;stop-opacity:0;"
@@ -37,61 +109,6 @@
          offset="1"
          id="stop2808" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2804"
-       id="linearGradient1516"
-       gradientUnits="userSpaceOnUse"
-       x1="21.875"
-       y1="48.000977"
-       x2="21.875"
-       y2="40" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1514"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,36,8.8)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2781">
-      <stop
-         style="stop-color:black;stop-opacity:1;"
-         offset="0"
-         id="stop2783" />
-      <stop
-         style="stop-color:black;stop-opacity:0;"
-         offset="1"
-         id="stop2785" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1512"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,-13,-79.2)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient5235">
-      <stop
-         style="stop-color:#2e3436;stop-opacity:1;"
-         offset="0"
-         id="stop5237" />
-      <stop
-         style="stop-color:#2e3436;stop-opacity:0;"
-         offset="1"
-         id="stop5239" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
        xlink:href="#linearGradient25546"
@@ -148,38 +165,61 @@
          offset="1.0000000"
          id="stop3804" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3816">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3818" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3820" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3816"
-       id="radialGradient4179"
-       gradientUnits="userSpaceOnUse"
-       cx="31.112698"
-       cy="19.008621"
-       fx="31.112698"
-       fy="19.008621"
-       r="8.6620579" />
-    <radialGradient
+       xlink:href="#linearGradient5280"
+       id="radialGradient5286"
+       cx="15.004828"
+       cy="39.80859"
+       fx="15.004828"
+       fy="39.80859"
+       r="9.7225161"
+       gradientTransform="matrix(1,0,0,0.732283,0,10.65742)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5304"
+       id="linearGradient5310"
+       x1="12.606371"
+       y1="15.069461"
+       x2="12.606371"
+       y2="21.152372"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient5235"
-       id="radialGradient5241"
-       cx="23.234518"
-       cy="40.688972"
-       fx="23.234518"
-       fy="40.688972"
-       r="16.956987"
-       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
+       xlink:href="#linearGradient6506"
+       id="linearGradient6512"
+       x1="15.645709"
+       y1="39.743458"
+       x2="15.645709"
+       y2="53.502155"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6537"
+       id="linearGradient6543"
+       x1="30.5"
+       y1="0.033532728"
+       x2="30.5"
+       y2="23.559282"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6817"
+       id="linearGradient6823"
+       x1="0.23931108"
+       y1="38.950283"
+       x2="5.7089725"
+       y2="42.982571"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5438"
+       id="linearGradient5444"
+       x1="30.152058"
+       y1="-0.86487341"
+       x2="30.152058"
+       y2="23.011967"
        gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
@@ -189,9 +229,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="28"
-     inkscape:cx="17.768242"
-     inkscape:cy="11.945133"
+     inkscape:zoom="26.124924"
+     inkscape:cx="19.621039"
+     inkscape:cy="12.735051"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
@@ -200,8 +240,12 @@
      inkscape:window-height="966"
      inkscape:window-x="3"
      inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:grid-points="false"
      width="24px"
-     height="24px" />
+     height="24px"
+     inkscape:object-bbox="true" />
   <metadata
      id="metadata4350">
     <rdf:RDF>
@@ -217,76 +261,137 @@
      id="layer1"
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
-    <g
-       id="g1504"
-       style="opacity:0.12663754"
-       transform="matrix(0.496192,0,0,0.581846,-0.128303,-4.772994)">
-      <rect
-         transform="scale(-1,-1)"
-         y="-48"
-         x="-11"
-         height="8"
-         width="10"
-         id="rect1506"
-         style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-      <rect
-         y="40"
-         x="38"
-         height="8"
-         width="10"
-         id="rect1508"
-         style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-      <rect
-         y="40"
-         x="11"
-         height="8"
-         width="27"
-         id="rect1510"
-         style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-    </g>
+    <path
+       style="fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.68207097;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 17.892492,1.5 C 14.553935,1.5 11.861242,4.611235 11.861242,8.46875 L 11.861242,20.53125 C 11.861242,24.388765 14.790157,28.553306 18.128714,28.553306 L 33.206307,28.454853 L 33.212431,35.359517 L 40.550287,28.59293 C 46.237519,28.59293 46.5,25.478162 46.5,20.728157 L 46.5,8.46875 C 46.5,4.6112353 43.807307,1.5 40.46875,1.5 L 17.892492,1.5 z "
+       id="path4547"
+       sodipodi:nodetypes="ccccccccccc"
+       transform="matrix(0.375302,0,0,0.370406,6.048447,-5.560909e-2)" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-2.6972473"
+       inkscape:original="M 17.90625 1.5 C 14.567693 1.5 11.875 4.611235 11.875 8.46875 L 11.875 20.53125 C 11.875 24.388765 14.786443 28.5625 18.125 28.5625 L 33.21875 28.46875 L 33.21875 35.375 L 40.5625 28.59375 C 46.249734 28.59375 46.5 25.468755 46.5 20.71875 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 17.90625 1.5 z "
+       style="fill:url(#linearGradient5444);fill-opacity:1.0;stroke:white;stroke-width:2.68207097;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5436"
+       d="M 17.90625,4.1875 C 16.243421,4.1875 14.5625,5.8664228 14.5625,8.46875 L 14.5625,20.53125 C 14.5625,21.781429 15.113741,23.319209 15.90625,24.375 C 16.698759,25.430791 17.57972,25.875 18.125,25.875 L 33.1875,25.78125 C 33.904865,25.775598 34.594934,26.055928 35.105127,26.560257 C 35.61532,27.064586 35.903608,27.751368 35.90625,28.46875 L 35.90625,29.21875 L 38.71875,26.625 C 39.22009,26.160499 39.879056,25.903614 40.5625,25.90625 C 42.912093,25.90625 43.047945,25.595299 43.3125,25.125 C 43.577055,24.654701 43.8125,23.046382 43.8125,20.71875 L 43.8125,8.46875 C 43.8125,5.8664232 42.131579,4.1875 40.46875,4.1875 L 17.90625,4.1875 z "
+       transform="matrix(0.375302,0,0,0.370406,6.048447,-5.560909e-2)" />
+    <path
+       style="opacity:1;fill:#75507b;fill-opacity:1"
+       d="M 36.0625,8 C 33.978257,8 33.334928,10.523086 34.78125,12.9375 C 35.250389,13.720651 36.674297,15.15311 36.86722,15.15311 L 36.878267,14.508325 C 36.288194,13.580567 35.517363,12.502064 35.686987,12.281543 C 37.835781,12.281543 38,11.491782 38,10.027674 C 38,8.7542399 37.228501,8 36.0625,8 z "
+       id="path6521"
+       transform="matrix(1.747787,0,0,1.397993,-52.41719,-5.183942)"
+       sodipodi:nodetypes="csccccc" />
+    <path
+       style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:1.51128328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 3,31.153143 2.9750563,38.402618 2.9750563,45.572826 C 4.1625449,45.572826 27.946366,45.600605 30.637365,45.600605 C 32.751492,45.600605 32.586331,43.541005 32.586331,43.541005 C 32.586331,40.875594 27.597902,38.639057 25.813453,36.682531 C 23.985035,34.68151 26,30.5 26,30.5 C 26.641306,28.9702 27,27.275084 27,25.5 C 27,18.600001 21.624002,13 15,13 z "
+       id="path5176"
+       sodipodi:nodetypes="ccccszcsc"
+       transform="matrix(0.67692,0,0,0.646801,-1.52611,-5.949693)" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4340"
-       sodipodi:cx="23.234518"
-       sodipodi:cy="40.688972"
-       sodipodi:rx="16.956987"
-       sodipodi:ry="2.2583797"
-       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
-       transform="matrix(1.208941,0,0,1.980928,-0.589159,7.924396)" />
+       style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5273"
+       sodipodi:cx="15.004828"
+       sodipodi:cy="39.80859"
+       sodipodi:rx="9.7225161"
+       sodipodi:ry="7.119638"
+       d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1  5.2823124,39.80859 A 9.7225161 7.119638 0 1 1  24.727345 39.80859 z"
+       transform="matrix(0.661428,0,0,0.760624,-1.973841,-10.20757)" />
+    <path
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -42.833794,49.038847 C -42.833794,49.038847 -42.815855,44.709724 -42.815855,37.951005 C -42.815855,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -41.348464,49.038847 -42.833794,49.038847 z "
+       id="rect5312"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(0.799568,0,0,0.627241,35.24855,-7.804428)" />
+    <path
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -49.441852,47.4154 C -48.364983,40.273995 -40.690447,44.765623 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z "
+       id="path5317"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(-0.602064,0,0,0.572779,-9.767144,-4.737575)" />
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="path4334"
-       transform="matrix(-0.590909,0,0,0.588279,23.38636,-1.912091)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       transform="matrix(0.660903,0,0,0.627207,-1.258953,-5.361383)"
+       style="opacity:0.31004363;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:1.55319395;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0617033,25.489349 4.0625,25.5 C 4.0625,32.787473 3.9033639,38.26012 3.9033639,44.499878 C 5.8399452,44.499878 22.452275,44.470084 28.278248,44.470084 C 29.445455,44.470084 31.431654,44.974157 31.431654,43.509594 C 31.431654,43.287851 31.231903,42.870917 30.681654,42.353344 C 30.131405,41.835771 29.308414,41.280003 28.400404,40.728344 C 26.665321,39.858723 25.411769,39.090553 24.621247,37.290844 C 24.011242,36.47675 23.731303,35.519763 23.676839,34.478344 C 23.622375,33.436925 24.107721,32.319635 24.224561,31.259594 C 24.458241,29.139511 24.96875,30.28125 24.96875,30.28125 C 24.98374,30.216952 25.004663,30.154183 25.03125,30.09375 C 25.618731,28.692346 25.9375,27.131297 25.9375,25.5 C 25.9375,19.154404 21.022436,14.0625 15,14.0625 z "
+       id="path5241"
+       sodipodi:nodetypes="cscccssccsscssc" />
+    <path
+       transform="matrix(-0.861857,-0.809791,0.812609,-0.76352,-5.667036,37.33378)"
+       style="opacity:1;fill:#a46bb0;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5160"
+       sodipodi:nodetypes="csssc" />
     <path
-       transform="matrix(-0.546584,0,0,0.546584,22.8323,-1.111803)"
-       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       id="path4336"
-       sodipodi:nodetypes="ccccccccccccccccccc" />
+       transform="matrix(1.010846,0,0,1.029732,-5.552971,-15.17001)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5157"
+       sodipodi:nodetypes="csssc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5162"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.805757,0,0,0.772415,-3.184731,-8.820615)" />
     <path
-       transform="matrix(2.539812,0,0,0.410815,-56.0204,67.80212)"
-       sodipodi:type="arc"
-       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path4306"
-       sodipodi:cx="31.112698"
-       sodipodi:cy="19.008621"
-       sodipodi:rx="8.6620579"
-       sodipodi:ry="8.6620579"
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+       transform="matrix(0.596326,-0.813274,-0.562251,-0.766804,22.42583,37.43862)"
+       style="opacity:1;fill:#975fa3;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5167"
+       sodipodi:nodetypes="csssc" />
+    <path
+       transform="matrix(0.447398,-0.672135,-0.421833,-0.633728,21.07418,32.19024)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5169"
+       sodipodi:nodetypes="csssc" />
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="path5534"
-       transform="matrix(0.590909,0,0,0.588279,0.613639,3.087907)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       sodipodi:type="arc"
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5171"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.805756,0,0,0.784291,6.815275,-9.124735)" />
+    <rect
+       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5215"
+       width="5.6071429"
+       height="2.1785715"
+       x="16"
+       y="27"
+       transform="matrix(0.724348,0,0,0.459012,-2.641559,0.565398)"
+       rx="0.87366539"
+       ry="1.0892857" />
     <path
-       transform="matrix(0.546584,0,0,0.546584,1.167699,3.888195)"
-       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       id="path5536"
-       sodipodi:nodetypes="ccccccccccccccccccc" />
+       transform="matrix(0.798987,0,0,0.495994,7.007995,-6.360384)"
+       style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="rect5187"
+       sodipodi:nodetypes="ccczc" />
+    <path
+       transform="matrix(0.670792,0,0,0.486348,-3.805943,-3.90166)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.651119,11.193815 C 13.577759,8.2509126 16.249277,11.481501 17.614226,12.804399 L 14.761306,13.747613 L 11.651119,11.193815 z "
+       id="path5192"
+       sodipodi:nodetypes="cccc" />
+    <path
+       transform="matrix(0.851014,0,0,0.554879,-3.938174,-5.194599)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.174576,11.994261 17.519594,13.650486 L 14.543472,12.891665 L 11.689238,9.8218679 z "
+       id="rect5189"
+       sodipodi:nodetypes="cccc" />
+    <path
+       transform="matrix(0.798987,0,0,0.495994,7.007995,-6.360384)"
+       style="fill:url(#linearGradient6823);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="path6815"
+       sodipodi:nodetypes="ccczc" />
   </g>
 </svg>
--- a/pidgin/pixmaps/icons/32/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/32/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -2,7 +2,7 @@
 
 EXTRA_DIST = pidgin.png 
 
-pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/32
+pidginiconspixdir = $(datadir)/icons/hicolor/32x32/apps
 
 pidginiconspix_DATA = $(EXTRA_DIST)
 
Binary file pidgin/pixmaps/icons/32/pidgin.png has changed
--- a/pidgin/pixmaps/icons/32/scalable/pidgin.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/32/scalable/pidgin.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -14,15 +14,87 @@
    id="svg4345"
    sodipodi:version="0.32"
    inkscape:version="0.44.1"
-   sodipodi:docbase="/home/hbons/Desktop"
-   sodipodi:docname="pidgin-321.svg"
-   inkscape:export-filename="/home/hbons/Desktop/pidgin.png"
+   sodipodi:docbase="/home/hbons/code/pidgin-mtn/pidgin/pixmaps/icons/32/scalable"
+   sodipodi:docname="pidgin.svg"
+   inkscape:export-filename="/home/hbons/code/pidgin-mtn/pidgin/pixmaps/icons/32/pidgin.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
    version="1.0">
   <defs
      id="defs4347">
     <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6817">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6819" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6821" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6563">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6565" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6567" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6537">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6539" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6541" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6506">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop6508" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop6510" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5304">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop5306" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop5308" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5280">
+      <stop
+         style="stop-color:#82508e;stop-opacity:1;"
+         offset="0"
+         id="stop5282" />
+      <stop
+         style="stop-color:#82508e;stop-opacity:0;"
+         offset="1"
+         id="stop5284" />
+    </linearGradient>
+    <linearGradient
        id="linearGradient2804">
       <stop
          style="stop-color:black;stop-opacity:0;"
@@ -37,61 +109,6 @@
          offset="1"
          id="stop2808" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2804"
-       id="linearGradient1516"
-       gradientUnits="userSpaceOnUse"
-       x1="21.875"
-       y1="48.000977"
-       x2="21.875"
-       y2="40" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1514"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,36,8.8)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2781">
-      <stop
-         style="stop-color:black;stop-opacity:1;"
-         offset="0"
-         id="stop2783" />
-      <stop
-         style="stop-color:black;stop-opacity:0;"
-         offset="1"
-         id="stop2785" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1512"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,-13,-79.2)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient5235">
-      <stop
-         style="stop-color:#2e3436;stop-opacity:1;"
-         offset="0"
-         id="stop5237" />
-      <stop
-         style="stop-color:#2e3436;stop-opacity:0;"
-         offset="1"
-         id="stop5239" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
        xlink:href="#linearGradient25546"
@@ -148,38 +165,61 @@
          offset="1.0000000"
          id="stop3804" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3816">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3818" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3820" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3816"
-       id="radialGradient4179"
-       gradientUnits="userSpaceOnUse"
-       cx="31.112698"
-       cy="19.008621"
-       fx="31.112698"
-       fy="19.008621"
-       r="8.6620579" />
-    <radialGradient
+       xlink:href="#linearGradient5280"
+       id="radialGradient5286"
+       cx="15.004828"
+       cy="39.80859"
+       fx="15.004828"
+       fy="39.80859"
+       r="9.7225161"
+       gradientTransform="matrix(1,0,0,0.732283,0,10.65742)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5304"
+       id="linearGradient5310"
+       x1="12.606371"
+       y1="15.069461"
+       x2="12.606371"
+       y2="21.152372"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient5235"
-       id="radialGradient5241"
-       cx="23.234518"
-       cy="40.688972"
-       fx="23.234518"
-       fy="40.688972"
-       r="16.956987"
-       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
+       xlink:href="#linearGradient6506"
+       id="linearGradient6512"
+       x1="15.645709"
+       y1="39.743458"
+       x2="15.645709"
+       y2="53.502155"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6537"
+       id="linearGradient6543"
+       x1="30.5"
+       y1="0.033532728"
+       x2="30.5"
+       y2="23.559282"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6563"
+       id="linearGradient6569"
+       x1="-1.6841649"
+       y1="39.902092"
+       x2="5.5366187"
+       y2="44.272076"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6817"
+       id="linearGradient6823"
+       x1="0.23931108"
+       y1="38.950283"
+       x2="5.7089725"
+       y2="42.982571"
        gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
@@ -189,9 +229,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="17.236022"
-     inkscape:cx="24.250455"
-     inkscape:cy="19.077116"
+     inkscape:zoom="21.220032"
+     inkscape:cx="25.558911"
+     inkscape:cy="16.91503"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
@@ -200,8 +240,12 @@
      inkscape:window-height="966"
      inkscape:window-x="3"
      inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:grid-points="false"
      width="32px"
-     height="32px" />
+     height="32px"
+     inkscape:object-bbox="true" />
   <metadata
      id="metadata4350">
     <rdf:RDF>
@@ -217,76 +261,147 @@
      id="layer1"
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
-    <g
-       id="g1504"
-       style="opacity:0.12663754"
-       transform="matrix(0.697369,0,0,0.818888,-1.473712,-7.73599)">
-      <rect
-         transform="scale(-1,-1)"
-         y="-48"
-         x="-11"
-         height="8"
-         width="10"
-         id="rect1506"
-         style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-      <rect
-         y="40"
-         x="38"
-         height="8"
-         width="10"
-         id="rect1508"
-         style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-      <rect
-         y="40"
-         x="11"
-         height="8"
-         width="27"
-         id="rect1510"
-         style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-    </g>
+    <rect
+       style="opacity:0.23144106;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect6514"
+       width="5.0217423"
+       height="5.2252574"
+       x="42.978256"
+       y="44"
+       rx="0.28473777"
+       ry="2.6126287"
+       transform="matrix(4.779203,0,0,0.382753,-205.4017,13.15888)" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-1.0057179"
+       inkscape:original="M 20.53125 1.5 C 17.192693 1.5 14.5 4.611235 14.5 8.46875 L 14.5 20.53125 C 14.5 24.388765 17.192693 27.5 20.53125 27.5 L 34.53125 27.5 L 34.53125 31.09375 L 39.34375 27.5 L 41.5 27.5 C 45.512737 27.5 46.5 24.38319 46.5 20.53125 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 20.53125 1.5 z "
+       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.47727883;stroke-miterlimit:4;stroke-opacity:1"
+       id="path6504"
+       d="M 20.53125,2.5 C 17.817519,2.5 15.5,5.0792547 15.5,8.46875 L 15.5,20.53125 C 15.5,23.920745 17.817519,26.5 20.53125,26.5 L 34.53125,26.5 C 35.082213,26.503178 35.528072,26.949037 35.53125,27.5 L 35.53125,29.09375 L 38.75,26.6875 C 38.923102,26.563771 39.130983,26.498125 39.34375,26.5 L 41.5,26.5 C 43.245978,26.5 44.034662,25.931926 44.625,24.9375 C 45.215338,23.943074 45.5,22.371297 45.5,20.53125 L 45.5,8.46875 C 45.5,5.079255 43.182481,2.5 40.46875,2.5 L 20.53125,2.5 z "
+       transform="matrix(0.67692,0,0,0.67692,0.161535,-0.515354)" />
+    <path
+       style="fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.46586692;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 20.53125,1.5 C 17.192693,1.5 14.5,4.611235 14.5,8.46875 L 14.5,20.53125 C 14.5,24.388765 17.428915,28.139948 20.767472,28.139948 L 33.409288,28.041495 L 33.415412,31.845969 L 38.723454,28.076231 L 42.130099,28.139948 C 46.142836,28.139948 46.5,24.580097 46.5,20.728157 L 46.5,8.46875 C 46.5,4.6112353 43.807307,1.5 40.46875,1.5 L 20.53125,1.5 z "
+       id="rect5498"
+       sodipodi:nodetypes="cccccccccccc"
+       transform="matrix(0.687501,0,0,0.67692,-0.468758,-0.515381)" />
+    <path
+       transform="matrix(0.668893,0,0,0.668627,8.626692e-2,-0.192463)"
+       style="fill:url(#linearGradient6543);fill-opacity:1;stroke:white;stroke-width:1.49530375;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 20.53125,2.53125 C 17.841732,2.53125 15.53125,5.0973912 15.53125,8.46875 L 15.53125,20.53125 C 15.53125,23.902609 17.841732,26.46875 20.53125,26.46875 L 33.967629,26.46875 C 34.534122,26.476048 34.991581,26.933507 34.998879,27.5 L 34.998879,29 L 38.71875,26.65625 C 38.901723,26.528628 39.120742,26.462922 39.34375,26.46875 L 42.415884,26.46875 C 45.139435,26.46875 45.46875,24.282574 45.46875,20.53125 L 45.46875,8.46875 C 45.46875,5.0973915 43.158268,2.53125 40.46875,2.53125 L 20.53125,2.53125 z "
+       id="path6535"
+       sodipodi:nodetypes="cccccccccccccc" />
+    <path
+       style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:1.51128328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 4.8460021,40.483064 0.49299658,38.484005 0.052646307,45.33795 C 0.052646307,47.422072 1.0380664,48.413461 3.1446965,48.413461 C 4.3321851,48.413461 29.360035,48.5596 32.051034,48.5596 C 34.165161,48.5596 34,46.5 34,46.5 C 34,43.834589 27.597902,41.598052 25.813453,39.641526 C 23.985035,37.640505 26,30.5 26,30.5 C 26.641306,28.9702 27,27.275084 27,25.5 C 27,18.600001 21.624002,13 15,13 z "
+       id="path5176"
+       sodipodi:nodetypes="cccccszcsc"
+       transform="matrix(0.67692,0,0,0.646801,0.464358,-0.908413)" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4340"
-       sodipodi:cx="23.234518"
-       sodipodi:cy="40.688972"
-       sodipodi:rx="16.956987"
-       sodipodi:ry="2.2583797"
-       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
-       transform="matrix(1.208941,0,0,1.980928,-1.589151,7.924388)" />
+       style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5273"
+       sodipodi:cx="15.004828"
+       sodipodi:cy="39.80859"
+       sodipodi:rx="9.7225161"
+       sodipodi:ry="7.119638"
+       d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1  5.2823124,39.80859 A 9.7225161 7.119638 0 1 1  24.727345 39.80859 z"
+       transform="matrix(0.661428,0,0,0.760624,1.662895e-2,-5.166292)" />
+    <path
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -42.833794,47.629347 C -42.833794,47.629347 -43.26687,44.687985 -40.223294,37.951005 C -40.223294,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -42.597127,49.864236 -42.833794,47.629347 z "
+       id="rect5312"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(0.797045,0,0,0.733236,35.01127,-5.421684)" />
+    <path
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -49.441852,47.4154 C -48.364983,40.273995 -40.690447,44.765623 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z "
+       id="path5317"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(-0.724368,0,0,0.660383,-12.52413,-1.979892)" />
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.16880918;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 4.9145119,27.595281 L 4.9145119,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="path4334"
-       transform="matrix(-0.863636,0,0,0.847582,31.79545,-3.856871)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       transform="matrix(0.660903,0,0,0.627207,0.731515,-0.320103)"
+       style="opacity:0.31004363;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:1.55319357;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0625,25.489316 4.0625,25.5 C 4.9744187,33.020507 4.3062656,37.469969 2.59375,40.59375 C -0.19778709,46.24536 1.5610206,47.490284 3.9033639,47.490284 C 5.8399452,47.490284 23.958121,47.46049 29.784094,47.46049 C 30.951301,47.46049 32.9375,47.964563 32.9375,46.5 C 32.9375,46.278257 32.737749,45.861323 32.1875,45.34375 C 31.637251,44.826177 30.81426,44.270409 29.90625,43.71875 C 28.99824,43.167091 28.02821,42.609033 27.15625,42.0625 C 26.28429,41.515967 25.511654,41.005793 24.96875,40.28125 C 24.358745,39.467156 24.078806,38.510169 24.024342,37.46875 C 23.969878,36.427331 24.107721,35.310041 24.224561,34.25 C 24.458241,32.129917 24.96875,30.28125 24.96875,30.28125 C 24.98374,30.216952 25.004663,30.154183 25.03125,30.09375 C 25.618731,28.692346 25.9375,27.131297 25.9375,25.5 C 25.9375,19.154404 21.022436,14.0625 15,14.0625 z "
+       id="path5241"
+       sodipodi:nodetypes="csscccssssssscssc" />
+    <path
+       transform="matrix(-0.861857,-0.809791,0.812609,-0.76352,-3.676568,42.37505)"
+       style="opacity:1;fill:#a46bb0;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5160"
+       sodipodi:nodetypes="csssc" />
     <path
-       transform="matrix(-0.84472,0,0,0.822913,31.55901,-3.443332)"
-       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.19940674;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 5.9950572,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       id="path4336"
-       sodipodi:nodetypes="cccccccccccccccccccc" />
+       transform="matrix(1.010846,0,0,1.029732,-3.562503,-10.12874)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5157"
+       sodipodi:nodetypes="csssc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5162"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.805757,0,0,0.772415,-1.194263,-3.779337)" />
     <path
-       transform="matrix(2.539812,0,0,0.410815,-57.02039,67.80211)"
-       sodipodi:type="arc"
-       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path4306"
-       sodipodi:cx="31.112698"
-       sodipodi:cy="19.008621"
-       sodipodi:rx="8.6620579"
-       sodipodi:ry="8.6620579"
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+       transform="matrix(0.596326,-0.813274,-0.562251,-0.766804,24.4163,42.47989)"
+       style="opacity:1;fill:#975fa3;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5167"
+       sodipodi:nodetypes="csssc" />
+    <path
+       transform="matrix(0.447398,-0.542185,-0.421833,-0.511203,23.06465,33.31996)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5169"
+       sodipodi:nodetypes="csssc" />
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.16880918;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 4.9145119,27.595281 L 4.9145119,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="path5528"
-       transform="matrix(0.863636,0,0,0.847582,-0.795446,3.143135)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       sodipodi:type="arc"
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5171"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.805756,0,0,0.784291,8.805745,-4.083452)" />
+    <rect
+       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5215"
+       width="5.6071429"
+       height="2.1785715"
+       x="16"
+       y="27"
+       transform="matrix(0.724348,0,0,0.459012,-0.651091,5.606678)"
+       rx="0.87366539"
+       ry="1.0892857" />
     <path
-       transform="matrix(0.84472,0,0,0.822913,-0.559006,3.556674)"
-       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.19940674;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 5.9950572,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       id="path5530"
-       sodipodi:nodetypes="cccccccccccccccccccc" />
+       transform="matrix(0.798987,0,0,0.495994,8.99846,-1.319104)"
+       style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="rect5187"
+       sodipodi:nodetypes="ccczc" />
+    <path
+       transform="matrix(0.670792,0,0,0.486348,-1.815475,1.13962)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.651119,11.193815 C 13.577759,8.2509126 16.249277,11.481501 17.614226,12.804399 L 14.761306,13.747613 L 11.651119,11.193815 z "
+       id="path5192"
+       sodipodi:nodetypes="cccc" />
+    <path
+       transform="matrix(0.851014,0,0,0.554879,-1.947706,-0.153319)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.174576,11.994261 17.519594,13.650486 L 14.543472,12.891665 L 11.689238,9.8218679 z "
+       id="rect5189"
+       sodipodi:nodetypes="cccc" />
+    <path
+       transform="matrix(0.798987,0,0,0.495994,8.99846,-1.319104)"
+       style="fill:url(#linearGradient6823);fill-opacity:1.0;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="path6815"
+       sodipodi:nodetypes="ccczc" />
   </g>
 </svg>
--- a/pidgin/pixmaps/icons/48/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/48/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -2,7 +2,7 @@
 
 EXTRA_DIST = pidgin.png 
 
-pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/48
+pidginiconspixdir = $(datadir)/icons/hicolor/48x48/apps
 
 pidginiconspix_DATA = $(EXTRA_DIST)
 
Binary file pidgin/pixmaps/icons/48/pidgin.png has changed
--- a/pidgin/pixmaps/icons/48/scalable/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/48/scalable/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,1 +1,6 @@
-EXTRA_DIST = 	pidgin.svg
+EXTRA_DIST = pidgin.svg 
+
+pidginiconspixdir = $(datadir)/icons/hicolor/scalable/apps
+
+pidginiconspix_DATA = $(EXTRA_DIST)
+
--- a/pidgin/pixmaps/icons/48/scalable/pidgin.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/48/scalable/pidgin.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -14,14 +14,86 @@
    id="svg4345"
    sodipodi:version="0.32"
    inkscape:version="0.44.1"
-   sodipodi:docbase="/home/hbons/Desktop"
-   sodipodi:docname="pidgin-32.svg"
+   sodipodi:docbase="/home/hbons/Desktop/icons/48/scalable"
+   sodipodi:docname="pidgin.svg"
    inkscape:export-filename="/home/hbons/Desktop/pidgin.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90">
   <defs
      id="defs4347">
     <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6563">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6565" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6567" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6537">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6539" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6541" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6506">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop6508" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop6510" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6493">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop6495" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop6497" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5304">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop5306" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop5308" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5280">
+      <stop
+         style="stop-color:#82508e;stop-opacity:1;"
+         offset="0"
+         id="stop5282" />
+      <stop
+         style="stop-color:#82508e;stop-opacity:0;"
+         offset="1"
+         id="stop5284" />
+    </linearGradient>
+    <linearGradient
        id="linearGradient2804">
       <stop
          style="stop-color:black;stop-opacity:0;"
@@ -36,61 +108,6 @@
          offset="1"
          id="stop2808" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2804"
-       id="linearGradient1516"
-       gradientUnits="userSpaceOnUse"
-       x1="21.875"
-       y1="48.000977"
-       x2="21.875"
-       y2="40" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1514"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,36,8.8)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2781">
-      <stop
-         style="stop-color:black;stop-opacity:1;"
-         offset="0"
-         id="stop2783" />
-      <stop
-         style="stop-color:black;stop-opacity:0;"
-         offset="1"
-         id="stop2785" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2781"
-       id="radialGradient1512"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2,0,0,0.8,-13,-79.2)"
-       cx="1"
-       cy="44"
-       fx="1"
-       fy="44"
-       r="5" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient5235">
-      <stop
-         style="stop-color:#2e3436;stop-opacity:1;"
-         offset="0"
-         id="stop5237" />
-      <stop
-         style="stop-color:#2e3436;stop-opacity:0;"
-         offset="1"
-         id="stop5239" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
        xlink:href="#linearGradient25546"
@@ -147,39 +164,71 @@
          offset="1.0000000"
          id="stop3804" />
     </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3816">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3818" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3820" />
-    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3816"
-       id="radialGradient4179"
-       gradientUnits="userSpaceOnUse"
-       cx="31.112698"
-       cy="19.008621"
-       fx="31.112698"
-       fy="19.008621"
-       r="8.6620579" />
-    <radialGradient
+       xlink:href="#linearGradient5280"
+       id="radialGradient5286"
+       cx="15.004828"
+       cy="39.80859"
+       fx="15.004828"
+       fy="39.80859"
+       r="9.7225161"
+       gradientTransform="matrix(1,0,0,0.732283,0,10.65742)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5304"
+       id="linearGradient5310"
+       x1="12.606371"
+       y1="15.069461"
+       x2="12.606371"
+       y2="23.043955"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6493"
+       id="linearGradient6499"
+       x1="3.3105288"
+       y1="43.5"
+       x2="5.6917014"
+       y2="43.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient5235"
-       id="radialGradient5241"
-       cx="23.234518"
-       cy="40.688972"
-       fx="23.234518"
-       fy="40.688972"
-       r="16.956987"
-       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
+       xlink:href="#linearGradient6506"
+       id="linearGradient6512"
+       x1="15.645709"
+       y1="39.743458"
+       x2="15.645709"
+       y2="53.502155"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6537"
+       id="linearGradient6543"
+       x1="30.5"
+       y1="0.033532728"
+       x2="30.5"
+       y2="23.559282"
        gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6563"
+       id="linearGradient6569"
+       x1="-1.6841649"
+       y1="39.902092"
+       x2="5.5366187"
+       y2="44.272076"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6563"
+       id="linearGradient6573"
+       gradientUnits="userSpaceOnUse"
+       x1="12.01321"
+       y1="38.950283"
+       x2="5.5366187"
+       y2="44.272076" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -188,9 +237,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="13.062462"
-     inkscape:cx="40.814762"
-     inkscape:cy="25.717712"
+     inkscape:zoom="1.1545694"
+     inkscape:cx="31.681369"
+     inkscape:cy="18.601404"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
@@ -198,7 +247,10 @@
      inkscape:window-width="1274"
      inkscape:window-height="966"
      inkscape:window-x="3"
-     inkscape:window-y="25" />
+     inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:grid-points="true" />
   <metadata
      id="metadata4350">
     <rdf:RDF>
@@ -214,80 +266,166 @@
      id="layer1"
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
-    <g
-       id="g1504"
-       style="opacity:0.12663754"
-       transform="matrix(0.851064,0,0,0.999995,3.148928,-3.9998)">
-      <rect
-         transform="scale(-1,-1)"
-         y="-48"
-         x="-11"
-         height="8"
-         width="10"
-         id="rect1506"
-         style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-      <rect
-         y="40"
-         x="38"
-         height="8"
-         width="10"
-         id="rect1508"
-         style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-      <rect
-         y="40"
-         x="11"
-         height="8"
-         width="27"
-         id="rect1510"
-         style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
-    </g>
+    <rect
+       style="opacity:0.23144105;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect6514"
+       width="5.0217423"
+       height="5.2252574"
+       x="42.978256"
+       y="44"
+       rx="0.28473777"
+       ry="2.6126287"
+       transform="matrix(7.168827,0,0,0.574134,-308.1037,19.73808)" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-1.0057179"
+       inkscape:original="M 20.53125 1.5 C 17.192693 1.5 14.5 4.611235 14.5 8.46875 L 14.5 20.53125 C 14.5 24.388765 17.192693 27.5 20.53125 27.5 L 34.53125 27.5 L 34.53125 31.09375 L 39.34375 27.5 L 41.5 27.5 C 45.512737 27.5 46.5 24.38319 46.5 20.53125 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 20.53125 1.5 z "
+       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       id="path6504"
+       d="M 20.53125,2.5 C 17.817519,2.5 15.5,5.0792547 15.5,8.46875 L 15.5,20.53125 C 15.5,23.920745 17.817519,26.5 20.53125,26.5 L 34.53125,26.5 C 35.082213,26.503178 35.528072,26.949037 35.53125,27.5 L 35.53125,29.09375 L 38.75,26.6875 C 38.923102,26.563771 39.130983,26.498125 39.34375,26.5 L 41.5,26.5 C 43.245978,26.5 44.034662,25.931926 44.625,24.9375 C 45.215338,23.943074 45.5,22.371297 45.5,20.53125 L 45.5,8.46875 C 45.5,5.079255 43.182481,2.5 40.46875,2.5 L 20.53125,2.5 z " />
+    <path
+       style="fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 20.53125,1.5 C 17.192693,1.5 14.5,4.611235 14.5,8.46875 L 14.5,20.53125 C 14.5,24.388765 17.192693,27.5 20.53125,27.5 L 34.530203,27.5 L 34.530203,31.107567 L 39.353553,27.485509 L 41.5,27.5 C 45.512737,27.5 46.5,24.38319 46.5,20.53125 L 46.5,8.46875 C 46.5,4.6112353 43.807307,1.5 40.46875,1.5 L 20.53125,1.5 z "
+       id="rect5498"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-1.044691"
+       inkscape:original="M 20.53125 1.5 C 17.192693 1.5 14.5 4.611235 14.5 8.46875 L 14.5 20.53125 C 14.5 24.388765 17.192693 27.5 20.53125 27.5 L 34.53125 27.5 L 34.53125 31.09375 L 39.34375 27.5 L 41.5 27.5 C 45.512737 27.5 46.5 24.38319 46.5 20.53125 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 20.53125 1.5 z "
+       style="fill:url(#linearGradient6543);fill-opacity:1.0;stroke:white;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       id="path6535"
+       d="M 20.53125,2.53125 C 17.841732,2.53125 15.53125,5.0973912 15.53125,8.46875 L 15.53125,20.53125 C 15.53125,23.902609 17.841732,26.46875 20.53125,26.46875 L 34.53125,26.46875 C 35.097743,26.476048 35.555202,26.933507 35.5625,27.5 L 35.5625,29 L 38.71875,26.65625 C 38.901723,26.528628 39.120742,26.462922 39.34375,26.46875 L 41.5,26.46875 C 43.235888,26.46875 44.009537,25.921608 44.59375,24.9375 C 45.177963,23.953392 45.46875,22.367968 45.46875,20.53125 L 45.46875,8.46875 C 45.46875,5.0973915 43.158268,2.53125 40.46875,2.53125 L 20.53125,2.53125 z " />
+    <path
+       style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:1.00595677;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 4.8460021,40.483064 0.49299658,38.484005 0.052646307,45.33795 C 0.052646307,47.422072 1.0380664,48.413461 3.1446965,48.413461 C 4.3321851,48.413461 29.360035,48.5596 32.051034,48.5596 C 34.165161,48.5596 34,46.5 34,46.5 C 34,43.834589 27.597902,41.598052 25.813453,39.641526 C 23.985035,37.640505 26,30.5 26,30.5 C 26.641306,28.9702 27,27.275084 27,25.5 C 27,18.600001 21.624002,13 15,13 z "
+       id="path5176"
+       sodipodi:nodetypes="cccccszcsc"
+       transform="matrix(1,0,0,0.988192,0.447354,-1.486208)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5273"
+       sodipodi:cx="15.004828"
+       sodipodi:cy="39.80859"
+       sodipodi:rx="9.7225161"
+       sodipodi:ry="7.119638"
+       d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1  5.2823124,39.80859 A 9.7225161 7.119638 0 1 1  24.727345 39.80859 z"
+       transform="matrix(0.977113,0,0,1.123653,-0.214066,-6.870732)" />
+    <path
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -42.833794,47.629347 C -42.833794,47.629347 -43.26687,44.687985 -40.223294,37.951005 C -40.223294,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -42.597127,49.864236 -42.833794,47.629347 z "
+       id="rect5312"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(1.177457,0,0,1.083194,51.48278,-7.248017)" />
+    <path
+       style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -49.441852,47.4154 C -48.364983,40.273995 -40.690447,44.765623 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z "
+       id="path5317"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(-1.070093,0,0,1.114946,-18.74027,-7.453016)" />
+    <path
+       transform="matrix(1,0,0,0.988192,0.40625,-1.486208)"
+       style="opacity:0.31004367;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:1.00595677;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0625,25.489316 4.0625,25.5 C 4.9744187,33.020507 4.3062656,37.469969 2.59375,40.59375 C -0.19778709,46.24536 1.5610206,47.490284 3.9033639,47.490284 C 5.8399452,47.490284 23.958121,47.46049 29.784094,47.46049 C 30.951301,47.46049 32.9375,47.964563 32.9375,46.5 C 32.9375,46.278257 32.737749,45.861323 32.1875,45.34375 C 31.637251,44.826177 30.81426,44.270409 29.90625,43.71875 C 28.99824,43.167091 28.02821,42.609033 27.15625,42.0625 C 26.28429,41.515967 25.511654,41.005793 24.96875,40.28125 C 24.358745,39.467156 24.078806,38.510169 24.024342,37.46875 C 23.969878,36.427331 24.107721,35.310041 24.224561,34.25 C 24.458241,32.129917 24.96875,30.28125 24.96875,30.28125 C 24.98374,30.216952 25.004663,30.154183 25.03125,30.09375 C 25.618731,28.692346 25.9375,27.131297 25.9375,25.5 C 25.9375,19.154404 21.022436,14.0625 15,14.0625 z "
+       id="path5241"
+       sodipodi:nodetypes="csscccssssssscssc" />
+    <path
+       transform="matrix(-1.162197,-1.219912,1.095788,-1.150206,-4.404363,64.58016)"
+       style="opacity:1;fill:#a46bb0;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5160"
+       sodipodi:nodetypes="csssc" />
+    <path
+       transform="matrix(1.46245,0,0,1.378883,-5.440518,-10.80605)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5157"
+       sodipodi:nodetypes="csssc" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4340"
-       sodipodi:cx="23.234518"
-       sodipodi:cy="40.688972"
-       sodipodi:rx="16.956987"
-       sodipodi:ry="2.2583797"
-       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
-       transform="matrix(1.208941,0,0,1.980928,3.410841,15.87176)" />
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5162"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(1.208632,0,0,1.158617,-1.844007,-4.808565)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:black;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5164"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.402878,0,0,0.386209,6.350228,13.9706)" />
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="path4334"
-       transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       transform="matrix(0.871648,-1.084366,-0.821841,-1.022405,36.71113,59.50016)"
+       style="opacity:1;fill:#975fa3;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5167"
+       sodipodi:nodetypes="csssc" />
     <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-0.94924349"
-       inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z "
-       style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4336"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)" />
+       transform="matrix(0.726374,-0.813272,-0.684868,-0.766801,34.41717,50.34012)"
+       style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z "
+       id="path5169"
+       sodipodi:nodetypes="csssc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5171"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(1.208632,0,0,1.158617,13.15599,-4.808572)" />
     <path
-       transform="matrix(2.539812,0,0,0.410815,-52.0204,75.74948)"
        sodipodi:type="arc"
-       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path4306"
-       sodipodi:cx="31.112698"
-       sodipodi:cy="19.008621"
-       sodipodi:rx="8.6620579"
-       sodipodi:ry="8.6620579"
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+       style="opacity:1;fill:black;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5173"
+       sodipodi:cx="10.169642"
+       sodipodi:cy="24.3125"
+       sodipodi:rx="1.2410715"
+       sodipodi:ry="1.2946428"
+       d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1  8.928571,24.3125 A 1.2410715 1.2946428 0 1 1  11.410714 24.3125 z"
+       transform="matrix(0.402878,0,0,0.386209,21.35023,13.9706)" />
+    <rect
+       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5215"
+       width="5.6071429"
+       height="2.1785715"
+       x="16"
+       y="27"
+       transform="matrix(1.070064,0,0,0.918028,-1.173674,3.073548)"
+       rx="1.0892857"
+       ry="1.0892857" />
     <path
-       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
-       id="rect1326"
-       transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)"
-       sodipodi:nodetypes="cccccccccccccccccc" />
+       transform="matrix(1.180326,0,0,0.867993,13.1795,-6.80859)"
+       style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 3.5188333,45.348102 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 6.1724645,45.375511 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="rect5187"
+       sodipodi:nodetypes="czczc" />
+    <path
+       transform="matrix(1.236264,0,0,0.549587,-6.482886,4.775206)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.651119,11.193815 C 12.963532,7.814583 16.999999,10.43431 16.999999,12.891665 L 13.737594,13.834879 L 11.651119,11.193815 z "
+       id="path5192"
+       sodipodi:nodetypes="cccc" />
     <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-0.94924349"
-       inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z "
-       style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path5034"
-       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
-       transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)" />
+       transform="matrix(1.50247,0,0,1,-7.59464,-1.139701)"
+       style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.219555,11.23544 17.564573,12.891665 L 14.543472,12.891665 L 11.689238,9.8218679 z "
+       id="rect5189"
+       sodipodi:nodetypes="cccc" />
+    <path
+       transform="matrix(1.180326,0,0,0.867993,13.1795,-6.80859)"
+       style="fill:url(#linearGradient6569);fill-opacity:1.0;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
+       d="M -0.99929609,42.004237 C 3.5188333,45.348102 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 6.1724645,45.375511 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z "
+       id="path6561"
+       sodipodi:nodetypes="czczc" />
   </g>
 </svg>
--- a/pidgin/pixmaps/icons/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/icons/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -7,8 +7,11 @@
 include ./Makefile.am
 
 install:
+
+install_real:
 	if test '$(SUBDIRS)'; then \
 	  list='$(SUBDIRS)'; for subdir in $$list; do \
 	    $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \
 	  done; \
 	fi;
+
Binary file pidgin/pixmaps/logo.png has changed
Binary file pidgin/pixmaps/pidgin.ico has changed
Binary file pidgin/pixmaps/protocols/16/irc.png has changed
--- a/pidgin/pixmaps/protocols/16/scalable/irc.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/protocols/16/scalable/irc.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -7,87 +7,179 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    width="16"
    height="16"
-   id="svg13306"
+   id="svg4345"
    sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/16/irc16.png"
+   inkscape:version="0.44.1"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="pidgin-16.svg"
+   inkscape:export-filename="/home/hbons/Desktop/pidgin.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/status/16/scalable"
-   sodipodi:docname="irc16.svg">
+   version="1.0">
   <defs
-     id="defs13308">
+     id="defs4347">
     <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2280">
+       id="linearGradient2804">
       <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
+         style="stop-color:black;stop-opacity:0;"
          offset="0"
-         id="stop2282" />
+         id="stop2806" />
       <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
+         id="stop2812"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
          offset="1"
-         id="stop2284" />
+         id="stop2808" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       id="linearGradient3150">
+       xlink:href="#linearGradient2804"
+       id="linearGradient1516"
+       gradientUnits="userSpaceOnUse"
+       x1="21.875"
+       y1="48.000977"
+       x2="21.875"
+       y2="40" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2781"
+       id="radialGradient1514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2,0,0,0.8,36,8.8)"
+       cx="1"
+       cy="44"
+       fx="1"
+       fy="44"
+       r="5" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2781">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop2783" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop2785" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2781"
+       id="radialGradient1512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2,0,0,0.8,-13,-79.2)"
+       cx="1"
+       cy="44"
+       fx="1"
+       fy="44"
+       r="5" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5235">
       <stop
          style="stop-color:#2e3436;stop-opacity:1;"
          offset="0"
-         id="stop3152" />
+         id="stop5237" />
       <stop
          style="stop-color:#2e3436;stop-opacity:0;"
          offset="1"
-         id="stop3154" />
+         id="stop5239" />
     </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3150"
-       id="radialGradient3156"
-       cx="10.748654"
-       cy="10.457643"
-       fx="10.748654"
-       fy="10.457643"
-       r="6.6449099"
-       gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)"
+       xlink:href="#linearGradient25546"
+       id="radialGradient25572"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)"
+       cx="7.8836637"
+       cy="1.5104795"
+       fx="7.8836637"
+       fy="1.5104795"
+       r="8.4883642" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient25546"
+       id="radialGradient25568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)"
+       cx="7.8836741"
+       cy="0.14505707"
+       fx="7.8836741"
+       fy="0.14505707"
+       r="8.4883642" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient25546">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop25548" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop25550" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient25546"
+       id="radialGradient25554"
+       cx="7.8836637"
+       cy="2.6242435"
+       fx="7.8836637"
+       fy="2.6242435"
+       r="8.4883642"
+       gradientTransform="matrix(1.131317,0,0,1.125313,-1.035262,-0.301139)"
        gradientUnits="userSpaceOnUse" />
     <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3131">
+       id="linearGradient3800">
       <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop3133" />
+         style="stop-color:#f4d9b1;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop3802" />
       <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop3135" />
+         style="stop-color:#df9725;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3804" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3131"
-       id="linearGradient3137"
-       x1="18.206755"
-       y1="4.8468447"
-       x2="18.150391"
-       y2="13.775416"
-       gradientUnits="userSpaceOnUse" />
+       id="linearGradient3816">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3818" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3820" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2286"
-       cx="10.332581"
-       cy="6.9103003"
-       fx="10.332581"
-       fy="6.9103003"
-       r="9.5"
-       gradientTransform="matrix(1.895669,2.346468e-16,-3.526656e-16,2.238626,-11.89066,-12.56638)"
+       xlink:href="#linearGradient3816"
+       id="radialGradient4179"
+       gradientUnits="userSpaceOnUse"
+       cx="31.112698"
+       cy="19.008621"
+       fx="31.112698"
+       fy="19.008621"
+       r="8.6620579" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5235"
+       id="radialGradient5241"
+       cx="23.234518"
+       cy="40.688972"
+       fx="23.234518"
+       fy="40.688972"
+       r="16.956987"
+       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
        gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
@@ -97,20 +189,21 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="39.59798"
-     inkscape:cx="14.115129"
-     inkscape:cy="9.9583634"
+     inkscape:zoom="42.440064"
+     inkscape:cx="12.433319"
+     inkscape:cy="6.6578459"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
      inkscape:document-units="px"
-     fill="#eeeeec"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
+     inkscape:window-width="1274"
+     inkscape:window-height="966"
+     inkscape:window-x="3"
+     inkscape:window-y="25"
+     width="16px"
+     height="16px" />
   <metadata
-     id="metadata13311">
+     id="metadata4350">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -125,91 +218,48 @@
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
     <path
-       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.00000095;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 0.49919572,3.436028 L 0.49919572,8.024108 C 0.49919572,10.030365 0.43094041,12.50277 3.4779698,12.50277 L 3.5190997,14.938304 L 6.2391563,12.547388 L 10.144168,12.531827 C 13.477975,12.531827 15.5,11.518177 15.5,9.379431 L 15.484468,3.556577 C 15.484468,1.4311219 14.423292,0.51556128 12.453894,0.51556128 L 3.4753207,0.50000048 C 1.4741104,0.50000048 0.49919572,1.561826 0.49919572,3.436028 z "
-       id="path2199"
-       sodipodi:nodetypes="ccccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path2288"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-1,0,0,1,23.99247,-3.990738)" />
+       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
+       id="path5540"
+       transform="matrix(-0.454545,0,0,0.390748,16.18182,-2.43061)"
+       sodipodi:nodetypes="cccccccccccccccccc" />
     <path
-       style="opacity:1;fill:url(#radialGradient2286);fill-opacity:1;stroke:#555753;stroke-width:1.00000095;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 0.49919572,3.436028 L 0.49919572,8.024108 C 0.49919572,10.030365 0.43094041,12.50277 3.4779698,12.50277 L 3.5190997,14.938304 L 6.2391563,12.547388 L 10.144168,12.531827 C 13.477975,12.531827 15.5,11.518177 15.5,9.379431 L 15.484468,3.556577 C 15.484468,1.4311219 14.423292,0.51556128 12.453894,0.51556128 L 3.4753207,0.50000048 C 1.4741104,0.50000048 0.49919572,1.561826 0.49919572,3.436028 z "
-       id="rect1326"
-       sodipodi:nodetypes="ccccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-0.99553573"
-       inkscape:original="M 3.46875 0.5 C 1.4675396 0.5 0.5 1.563298 0.5 3.4375 L 0.5 8.03125 C 0.5 10.037507 0.42172061 12.5 3.46875 12.5 L 3.53125 14.9375 L 6.25 12.5625 L 10.15625 12.53125 C 13.490057 12.53125 15.5 11.513746 15.5 9.375 L 15.5 3.5625 C 15.5 1.4370449 14.438148 0.5 12.46875 0.5 L 3.46875 0.5 z "
-       xlink:href="#rect1326"
-       style="opacity:1;fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.03363752;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2248"
-       inkscape:href="#rect1326"
-       d="M 3.96875,9.0625 C 3.1444632,9.0625002 2.7022172,9.2621947 2.4375,9.53125 C 2.1727828,9.8003053 2,10.234211 2,11 L 2,15.59375 C 2,16.609826 2.0106197,17.613475 2.25,18.1875 C 2.4893803,18.761525 2.71342,19.0625 3.96875,19.0625 C 4.5099878,19.05993 4.9541408,19.490203 4.96875,20.03125 L 4.96875,20.34375 L 6.09375,19.34375 C 6.2748748,19.183476 6.5081463,19.094611 6.75,19.09375 L 10.65625,19.09375 C 12.221872,19.09375 13.413842,18.823397 14.09375,18.4375 C 14.773658,18.051603 15,17.695013 15,16.9375 L 15,11.125 C 15,10.228058 14.802621,9.7651678 14.53125,9.5 C 14.259879,9.2348322 13.795556,9.0625 12.96875,9.0625 L 3.96875,9.0625 z "
-       transform="matrix(0.997403,0,0,0.938411,3.636372e-2,0.123235)" />
+       transform="matrix(-0.397516,0,0,0.329862,15.46895,-1.283212)"
+       style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
+       id="path5542"
+       sodipodi:nodetypes="cccccccccccccccccc" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.2;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3140"
-       sodipodi:cx="10.748654"
-       sodipodi:cy="10.457643"
-       sodipodi:rx="6.6449099"
-       sodipodi:ry="2.3675451"
-       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
-       transform="matrix(1.655402,0,0,1.267134,-5.793347,6.748769)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path13434"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-1,0,0,1,32,-8.84375)" />
+       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4340"
+       sodipodi:cx="23.234518"
+       sodipodi:cy="40.688972"
+       sodipodi:rx="16.956987"
+       sodipodi:ry="2.2583797"
+       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
+       transform="matrix(1.208941,0,0,1.980928,-1.589159,5.924394)" />
     <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path13323"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(0.750603,0,0,0.750603,0.123492,-2.625632)" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2207"
-       width="9"
-       height="1"
-       x="3"
-       y="4"
-       rx="0.5"
-       ry="0.5" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect1343"
-       width="8"
-       height="1"
-       x="3"
-       y="8"
-       rx="0.5"
-       ry="0.5" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect1345"
-       width="7"
-       height="1"
-       x="3"
-       y="6"
-       rx="0.5"
-       ry="0.5" />
+       transform="matrix(2.539812,0,0,0.410815,-57.0204,65.80212)"
+       sodipodi:type="arc"
+       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4306"
+       sodipodi:cx="31.112698"
+       sodipodi:cy="19.008621"
+       sodipodi:rx="8.6620579"
+       sodipodi:ry="8.6620579"
+       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+    <path
+       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
+       id="path5534"
+       transform="matrix(0.454545,0,0,0.390748,-0.181807,2.56939)"
+       sodipodi:nodetypes="cccccccccccccccccc" />
+    <path
+       transform="matrix(0.397516,0,0,0.329862,0.531062,3.716788)"
+       style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
+       id="path5536"
+       sodipodi:nodetypes="cccccccccccccccccc" />
   </g>
 </svg>
Binary file pidgin/pixmaps/protocols/22/irc.png has changed
--- a/pidgin/pixmaps/protocols/22/scalable/irc.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/protocols/22/scalable/irc.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -7,173 +7,180 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    width="24"
    height="24"
-   id="svg13306"
+   id="svg4345"
    sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/32/irc32.png"
+   inkscape:version="0.44.1"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="pidgin-24.svg"
+   inkscape:export-filename="/home/hbons/Desktop/pidgin.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/22/scalable"
-   sodipodi:docname="irc.svg">
+   version="1.0">
   <defs
-     id="defs13308">
+     id="defs4347">
     <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2280">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2282" />
+       id="linearGradient2804">
       <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop2284" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3150">
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop2806" />
       <stop
-         style="stop-color:#2e3436;stop-opacity:1;"
-         offset="0"
-         id="stop3152" />
+         id="stop2812"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
       <stop
-         style="stop-color:#2e3436;stop-opacity:0;"
+         style="stop-color:black;stop-opacity:0;"
          offset="1"
-         id="stop3154" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3150"
-       id="radialGradient3156"
-       cx="10.748654"
-       cy="10.457643"
-       fx="10.748654"
-       fy="10.457643"
-       r="6.6449099"
-       gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3131">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop3133" />
-      <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop3135" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3121">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop3123" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop3125" />
+         id="stop2808" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3121"
-       id="linearGradient3127"
-       x1="13"
-       y1="26.785713"
-       x2="13"
-       y2="18.078569"
-       gradientUnits="userSpaceOnUse" />
+       xlink:href="#linearGradient2804"
+       id="linearGradient1516"
+       gradientUnits="userSpaceOnUse"
+       x1="21.875"
+       y1="48.000977"
+       x2="21.875"
+       y2="40" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2781"
+       id="radialGradient1514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2,0,0,0.8,36,8.8)"
+       cx="1"
+       cy="44"
+       fx="1"
+       fy="44"
+       r="5" />
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3131"
-       id="linearGradient3137"
-       x1="18.206755"
-       y1="4.8468447"
-       x2="18.150391"
-       y2="13.775416"
-       gradientUnits="userSpaceOnUse" />
+       id="linearGradient2781">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop2783" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop2785" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2286"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5"
-       gradientTransform="matrix(2.369002,1.711096e-16,-1.716974e-16,2.389565,-14.87449,-9.225873)"
-       gradientUnits="userSpaceOnUse" />
+       xlink:href="#linearGradient2781"
+       id="radialGradient1512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2,0,0,0.8,-13,-79.2)"
+       cx="1"
+       cy="44"
+       fx="1"
+       fy="44"
+       r="5" />
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3121"
-       id="linearGradient2314"
+       id="linearGradient5235">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop5237" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop5239" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient25546"
+       id="radialGradient25572"
        gradientUnits="userSpaceOnUse"
-       x1="13"
-       y1="26.785713"
-       x2="13"
-       y2="18.078569" />
+       gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)"
+       cx="7.8836637"
+       cy="1.5104795"
+       fx="7.8836637"
+       fy="1.5104795"
+       r="8.4883642" />
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2316"
+       xlink:href="#linearGradient25546"
+       id="radialGradient25568"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.276682,0,0,1.19816,31.40394,-2.987018)"
-       cx="10.5"
-       cy="12.373168"
-       fx="10.5"
-       fy="12.373168"
-       r="9.5" />
-    <radialGradient
+       gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)"
+       cx="7.8836741"
+       cy="0.14505707"
+       fx="7.8836741"
+       fy="0.14505707"
+       r="8.4883642" />
+    <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3150"
-       id="radialGradient2259"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)"
-       cx="10.748654"
-       cy="10.457643"
-       fx="10.748654"
-       fy="10.457643"
-       r="6.6449099" />
+       id="linearGradient25546">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop25548" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop25550" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2288"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5" />
+       xlink:href="#linearGradient25546"
+       id="radialGradient25554"
+       cx="7.8836637"
+       cy="2.6242435"
+       fx="7.8836637"
+       fy="2.6242435"
+       r="8.4883642"
+       gradientTransform="matrix(1.131317,0,0,1.125313,-1.035262,-0.301139)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3800">
+      <stop
+         style="stop-color:#f4d9b1;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop3802" />
+      <stop
+         style="stop-color:#df9725;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3804" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3816">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3818" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3820" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2303"
+       xlink:href="#linearGradient3816"
+       id="radialGradient4179"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5" />
+       cx="31.112698"
+       cy="19.008621"
+       fx="31.112698"
+       fy="19.008621"
+       r="8.6620579" />
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2311"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.369597,1.712163e-16,1.717406e-16,2.391056,38.88682,-13.24031)"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5" />
+       xlink:href="#linearGradient5235"
+       id="radialGradient5241"
+       cx="23.234518"
+       cy="40.688972"
+       fx="23.234518"
+       fy="40.688972"
+       r="16.956987"
+       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
+       gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -182,20 +189,21 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="11.371534"
-     inkscape:cx="20.85698"
-     inkscape:cy="14.844022"
+     inkscape:zoom="28"
+     inkscape:cx="17.768242"
+     inkscape:cy="11.945133"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
      inkscape:document-units="px"
-     fill="#ff0033"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
+     inkscape:window-width="1274"
+     inkscape:window-height="966"
+     inkscape:window-x="3"
+     inkscape:window-y="25"
+     width="24px"
+     height="24px" />
   <metadata
-     id="metadata13311">
+     id="metadata4350">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -209,174 +217,76 @@
      id="layer1"
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2266"
-       width="5.9860415"
-       height="1.0008848"
-       x="6.054316"
-       y="7.5486698" />
+    <g
+       id="g1504"
+       style="opacity:0.12663754"
+       transform="matrix(0.496192,0,0,0.581846,-0.128303,-4.772994)">
+      <rect
+         transform="scale(-1,-1)"
+         y="-48"
+         x="-11"
+         height="8"
+         width="10"
+         id="rect1506"
+         style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="40"
+         x="38"
+         height="8"
+         width="10"
+         id="rect1508"
+         style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="40"
+         x="11"
+         height="8"
+         width="27"
+         id="rect1510"
+         style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
     <path
        sodipodi:type="arc"
-       style="opacity:0.5;fill:url(#radialGradient2259);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2257"
-       sodipodi:cx="10.748654"
-       sodipodi:cy="10.457643"
-       sodipodi:rx="6.6449099"
-       sodipodi:ry="2.3675451"
-       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
-       transform="matrix(1.48539,0,0,1.13303,-1.306933,4.968885)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path2268"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-0.997673,0,0,1.000884,24.00493,-3.47033)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2270"
-       width="5.9860415"
-       height="1.0008848"
-       x="-18.018883"
-       y="7.5393991"
-       transform="scale(-1,1)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2272"
-       width="8.9790611"
-       height="1.0008843"
-       x="-18.018883"
-       y="9.5411692"
-       transform="scale(-1,1)" />
-    <path
-       style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 17.462848,2.0345351 C 20.28167,2.2326326 22.508414,4.8428606 22.508414,8.0398417 L 22.508414,10.041609 C 22.508414,12.276899 21.432831,14.230867 19.817446,15.264975 L 19.817446,18.11124 L 16.930261,16.046916 L 11.74454,16.046916 C 8.7629471,16.046916 6.3626031,13.36855 6.3626031,10.041609 L 6.3626031,8.0398417 C 6.3626031,4.7129016 8.7629471,2.0345351 11.74454,2.0345351 L 17.126478,2.0345351 C 17.242945,2.0345351 17.348262,2.0264824 17.462848,2.0345351 z "
-       id="path2274" />
+       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4340"
+       sodipodi:cx="23.234518"
+       sodipodi:cy="40.688972"
+       sodipodi:rx="16.956987"
+       sodipodi:ry="2.2583797"
+       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
+       transform="matrix(1.208941,0,0,1.980928,-0.589159,7.924396)" />
     <path
-       style="fill:url(#radialGradient2311);fill-opacity:1;stroke:#555753;stroke-width:0.99999911;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 17.191187,1.5081301 C 20.156942,1.7179684 22.499759,4.4829039 22.499759,7.8693698 L 22.499759,9.9897819 C 22.499759,12.357556 22.260496,14.385421 20.560908,15.480822 L 20.560908,18.495784 L 16.630838,16.351022 L 11.174805,16.351022 C 8.0377925,16.351022 5.5123276,13.513909 5.5123276,9.9897819 L 5.5123276,7.8693698 C 5.5123276,4.3452417 8.0377925,1.5081301 11.174805,1.5081301 L 16.837282,1.5081301 C 16.959821,1.5081301 17.070627,1.4995998 17.191187,1.5081301 z "
-       id="path2276"
-       sodipodi:nodetypes="cccccccccccc" />
-    <path
-       style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:0.99999958;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 17.135857,2.4916226 C 19.561138,2.6615394 21.50422,4.8998576 21.50422,7.7452031 L 21.50422,9.8466356 C 21.50422,11.837212 21.538584,13.553581 20.144119,14.443518 C 19.853317,14.634376 19.473329,15.130753 19.472969,15.491409 L 19.472969,16.50929 L 17.198264,15.297225 C 17.034405,15.173056 16.838501,15.104339 16.636617,15.100218 L 11.176166,15.100218 C 8.6004294,15.100218 6.4957772,12.805706 6.4957772,9.8466356 L 6.4957772,7.7452031 C 6.4957772,4.7861327 8.6004294,2.4916226 11.176166,2.4916226 L 16.823833,2.4916226 C 16.989883,2.4916226 17.106652,2.4895765 17.135857,2.4916226 z "
-       id="path2280"
-       sodipodi:nodetypes="cccccccccccccc" />
+       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
+       id="path4334"
+       transform="matrix(-0.590909,0,0,0.588279,23.38636,-1.912091)"
+       sodipodi:nodetypes="cccccccccccccccccc" />
     <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path2288"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-1.000884,0,0,1.000884,24.01062,-3.667893)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2300"
-       width="6.0053062"
-       height="1.0008848"
-       x="-18.005306"
-       y="11.345372"
-       transform="scale(-1,1)" />
+       transform="matrix(-0.546584,0,0,0.546584,22.8323,-1.111803)"
+       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
+       id="path4336"
+       sodipodi:nodetypes="ccccccccccccccccccc" />
     <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path13434"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-1.318248,0,0,1.318248,41.87276,-10.91182)" />
-    <path
+       transform="matrix(2.539812,0,0,0.410815,-56.0204,67.80212)"
        sodipodi:type="arc"
-       style="opacity:0.5;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3140"
-       sodipodi:cx="10.748654"
-       sodipodi:cy="10.457643"
-       sodipodi:rx="6.6449099"
-       sodipodi:ry="2.3675451"
-       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
-       transform="matrix(1.48539,0,0,1.13303,-5.862459,8.056126)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path13323"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(1.000884,0,0,1.000884,-3.072507e-3,0.326374)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect13438"
-       width="6.0053062"
-       height="1.0008848"
-       x="6.002233"
-       y="11.336102" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect13440"
-       width="9.0079584"
-       height="1.0008843"
-       x="6.002233"
-       y="13.337872" />
-    <path
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 6.560058,5.8312381 C 3.7321648,6.0293356 1.4982534,8.6395636 1.4982534,11.836545 L 1.4982534,13.838313 C 1.4982534,16.073601 2.5772989,18.02757 4.1978826,19.061679 L 4.1978826,21.907943 L 7.0943597,19.84362 L 12.296769,19.84362 C 15.287958,19.84362 17.696027,17.165252 17.696027,13.838313 L 17.696027,11.836545 C 17.696027,8.5096045 15.287958,5.8312381 12.296769,5.8312381 L 6.8975116,5.8312381 C 6.7806683,5.8312381 6.675013,5.8231853 6.560058,5.8312381 z "
-       id="path2262" />
+       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4306"
+       sodipodi:cx="31.112698"
+       sodipodi:cy="19.008621"
+       sodipodi:rx="8.6620579"
+       sodipodi:ry="8.6620579"
+       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
     <path
-       style="opacity:1;fill:url(#radialGradient2286);fill-opacity:1;stroke:#555753;stroke-width:0.99999976;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 6.8156547,5.5133605 C 3.8506456,5.7230681 1.5084186,8.4862805 1.5084186,11.870636 L 1.5084186,13.989727 C 1.5084186,16.356026 2.8905386,18.382627 4.5896996,19.477345 L 4.5896996,22.490429 L 7.3758631,20.347004 L 12.830522,20.347004 C 15.966746,20.347004 18.491575,17.511659 18.491575,13.989727 L 18.491575,11.870636 C 18.491575,8.3487041 15.966746,5.5133605 12.830522,5.5133605 L 7.1694706,5.5133605 C 7.0469618,5.5133605 6.9361836,5.5048355 6.8156547,5.5133605 z "
-       id="rect1326"
-       sodipodi:nodetypes="cccccccccccc" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2207"
-       width="10"
-       height="1"
-       x="5"
-       y="9"
-       rx="0"
-       ry="2" />
+       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
+       id="path5534"
+       transform="matrix(0.590909,0,0,0.588279,0.613639,3.087907)"
+       sodipodi:nodetypes="cccccccccccccccccc" />
     <path
-       style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 6.8635186,6.4916243 C 4.4377546,6.6615411 2.4942864,8.8998594 2.4942864,11.745205 L 2.4942864,13.846637 C 2.4942866,15.837213 3.4714142,17.553583 4.8661553,18.44352 C 5.1570178,18.634378 5.5370806,19.130756 5.5374411,19.491411 L 5.5374411,20.509293 L 6.8011009,19.297227 C 6.9649913,19.173058 7.1609349,19.104341 7.3628594,19.10022 L 12.824398,19.10022 C 15.400648,19.10022 17.505719,16.805708 17.505719,13.846637 L 17.505719,11.745205 C 17.505719,8.7861344 15.400648,6.4916243 12.824398,6.4916243 L 7.1756064,6.4916243 C 7.0095223,6.4916243 6.8927299,6.4895782 6.8635186,6.4916243 z "
-       id="path2248"
-       sodipodi:nodetypes="cccccccccccccc" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2209"
-       width="7"
-       height="1"
-       x="5"
-       y="11"
-       rx="0"
-       ry="1.9999999" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect1358"
-       width="10"
-       height="1"
-       x="5"
-       y="13"
-       rx="0"
-       ry="2" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect1360"
-       width="7"
-       height="1"
-       x="5"
-       y="15"
-       rx="0"
-       ry="1.9999999" />
+       transform="matrix(0.546584,0,0,0.546584,1.167699,3.888195)"
+       style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
+       id="path5536"
+       sodipodi:nodetypes="ccccccccccccccccccc" />
   </g>
 </svg>
Binary file pidgin/pixmaps/protocols/48/irc.png has changed
--- a/pidgin/pixmaps/protocols/48/scalable/irc.svg	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/protocols/48/scalable/irc.svg	Sat Apr 28 18:32:47 2007 +0000
@@ -7,218 +7,178 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="48"
-   height="48"
-   id="svg13306"
+   width="48px"
+   height="48px"
+   id="svg4345"
    sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/protocols/48/irc.png"
+   inkscape:version="0.44.1"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="pidgin-32.svg"
+   inkscape:export-filename="/home/hbons/Desktop/pidgin.png"
    inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/48/scalable"
-   sodipodi:docname="irc.svg">
+   inkscape:export-ydpi="90">
   <defs
-     id="defs13308">
+     id="defs4347">
     <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2253">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop2255" />
+       id="linearGradient2804">
       <stop
-         style="stop-color:#eeeeec;stop-opacity:0;"
-         offset="1"
-         id="stop2257" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2233">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
+         style="stop-color:black;stop-opacity:0;"
          offset="0"
-         id="stop2235" />
+         id="stop2806" />
       <stop
-         style="stop-color:#eeeeec;stop-opacity:0;"
-         offset="1"
-         id="stop2237" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2280">
+         id="stop2812"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
       <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2282" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
+         style="stop-color:black;stop-opacity:0;"
          offset="1"
-         id="stop2284" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3150">
-      <stop
-         style="stop-color:#2e3436;stop-opacity:1;"
-         offset="0"
-         id="stop3152" />
-      <stop
-         style="stop-color:#2e3436;stop-opacity:0;"
-         offset="1"
-         id="stop3154" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3150"
-       id="radialGradient3156"
-       cx="10.748654"
-       cy="10.457643"
-       fx="10.748654"
-       fy="10.457643"
-       r="6.6449099"
-       gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3131">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop3133" />
-      <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop3135" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3121">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop3123" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop3125" />
+         id="stop2808" />
     </linearGradient>
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3121"
-       id="linearGradient3127"
-       x1="13"
-       y1="26.785713"
-       x2="13"
-       y2="18.078569"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
+       xlink:href="#linearGradient2804"
+       id="linearGradient1516"
+       gradientUnits="userSpaceOnUse"
+       x1="21.875"
+       y1="48.000977"
+       x2="21.875"
+       y2="40" />
+    <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3131"
-       id="linearGradient3137"
-       x1="18.206755"
-       y1="4.8468447"
-       x2="18.150391"
-       y2="13.775416"
-       gradientUnits="userSpaceOnUse" />
+       xlink:href="#linearGradient2781"
+       id="radialGradient1514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2,0,0,0.8,36,8.8)"
+       cx="1"
+       cy="44"
+       fx="1"
+       fy="44"
+       r="5" />
     <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3121"
-       id="linearGradient2314"
-       gradientUnits="userSpaceOnUse"
-       x1="13"
-       y1="26.785713"
-       x2="13"
-       y2="18.078569" />
+       id="linearGradient2781">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop2783" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop2785" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2316"
+       xlink:href="#linearGradient2781"
+       id="radialGradient1512"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.276682,0,0,1.19816,31.40394,-2.987018)"
-       cx="10.5"
-       cy="12.373168"
-       fx="10.5"
-       fy="12.373168"
-       r="9.5" />
+       gradientTransform="matrix(2,0,0,0.8,-13,-79.2)"
+       cx="1"
+       cy="44"
+       fx="1"
+       fy="44"
+       r="5" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5235">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop5237" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop5239" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient3150"
-       id="radialGradient2259"
+       xlink:href="#linearGradient25546"
+       id="radialGradient25572"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)"
-       cx="10.748654"
-       cy="10.457643"
-       fx="10.748654"
-       fy="10.457643"
-       r="6.6449099" />
+       gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)"
+       cx="7.8836637"
+       cy="1.5104795"
+       fx="7.8836637"
+       fy="1.5104795"
+       r="8.4883642" />
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2288"
+       xlink:href="#linearGradient25546"
+       id="radialGradient25568"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5" />
-    <radialGradient
+       gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)"
+       cx="7.8836741"
+       cy="0.14505707"
+       fx="7.8836741"
+       fy="0.14505707"
+       r="8.4883642" />
+    <linearGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2303"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5" />
+       id="linearGradient25546">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop25548" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop25550" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2223"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(4.465386,3.226064e-16,-3.236364e-16,4.505235,-27.38626,-17.2868)"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5" />
+       xlink:href="#linearGradient25546"
+       id="radialGradient25554"
+       cx="7.8836637"
+       cy="2.6242435"
+       fx="7.8836637"
+       fy="2.6242435"
+       r="8.4883642"
+       gradientTransform="matrix(1.131317,0,0,1.125313,-1.035262,-0.301139)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3800">
+      <stop
+         style="stop-color:#f4d9b1;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop3802" />
+      <stop
+         style="stop-color:#df9725;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3804" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3816">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3818" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3820" />
+    </linearGradient>
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2233"
-       id="radialGradient2239"
-       cx="19.5"
-       cy="17.711315"
-       fx="19.5"
-       fy="17.711315"
-       r="15.53125"
-       gradientTransform="matrix(1,0,0,0.966945,0,0.858834)"
-       gradientUnits="userSpaceOnUse" />
+       xlink:href="#linearGradient3816"
+       id="radialGradient4179"
+       gradientUnits="userSpaceOnUse"
+       cx="31.112698"
+       cy="19.008621"
+       fx="31.112698"
+       fy="19.008621"
+       r="8.6620579" />
     <radialGradient
        inkscape:collect="always"
-       xlink:href="#linearGradient2280"
-       id="radialGradient2243"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-4.464356,3.225741e-16,3.235617e-16,4.504784,75.37169,-24.28519)"
-       cx="10.288303"
-       cy="6.7567434"
-       fx="10.288303"
-       fy="6.7567434"
-       r="9.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2253"
-       id="radialGradient2260"
-       cx="28.5"
-       cy="10.432241"
-       fx="28.5"
-       fy="10.432241"
-       r="15.5"
-       gradientTransform="matrix(1,0,0,0.965867,0,0.647388)"
+       xlink:href="#linearGradient5235"
+       id="radialGradient5241"
+       cx="23.234518"
+       cy="40.688972"
+       fx="23.234518"
+       fy="40.688972"
+       r="16.956987"
+       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
        gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
@@ -228,20 +188,19 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="15.004829"
-     inkscape:cx="39.756047"
-     inkscape:cy="25.827154"
+     inkscape:zoom="13.062462"
+     inkscape:cx="40.814762"
+     inkscape:cy="25.717712"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
      inkscape:document-units="px"
-     fill="#eeeeec"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
+     inkscape:window-width="1274"
+     inkscape:window-height="966"
+     inkscape:window-x="3"
+     inkscape:window-y="25" />
   <metadata
-     id="metadata13311">
+     id="metadata4350">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -255,182 +214,80 @@
      id="layer1"
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2266"
-       width="11.6187"
-       height="1.942683"
-       x="12.205235"
-       y="14.932331" />
+    <g
+       id="g1504"
+       style="opacity:0.12663754"
+       transform="matrix(0.851064,0,0,0.999995,3.148928,-3.9998)">
+      <rect
+         transform="scale(-1,-1)"
+         y="-48"
+         x="-11"
+         height="8"
+         width="10"
+         id="rect1506"
+         style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="40"
+         x="38"
+         height="8"
+         width="10"
+         id="rect1508"
+         style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="40"
+         x="11"
+         height="8"
+         width="27"
+         id="rect1510"
+         style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
     <path
        sodipodi:type="arc"
-       style="opacity:0.5;fill:url(#radialGradient2259);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2257"
-       sodipodi:cx="10.748654"
-       sodipodi:cy="10.457643"
-       sodipodi:rx="6.6449099"
-       sodipodi:ry="2.3675451"
-       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
-       transform="matrix(2.883092,0,0,2.199173,-2.082694,9.925056)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path2268"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-1.936449,0,0,1.942681,47.04675,-6.455167)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2270"
-       width="11.6187"
-       height="1.942683"
-       x="-35.428047"
-       y="14.914336"
-       transform="scale(-1,1)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2272"
-       width="17.428049"
-       height="1.9426821"
-       x="-35.428047"
-       y="18.799704"
-       transform="scale(-1,1)" />
+       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4340"
+       sodipodi:cx="23.234518"
+       sodipodi:cy="40.688972"
+       sodipodi:rx="16.956987"
+       sodipodi:ry="2.2583797"
+       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
+       transform="matrix(1.208941,0,0,1.980928,3.410841,15.87176)" />
     <path
-       style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 34.348803,4.2295857 C 39.82004,4.6140861 44.142074,9.6804488 44.142074,15.885678 L 44.142074,19.771041 C 44.142074,24.10966 42.054403,27.902245 38.918997,29.909414 L 38.918997,35.433916 L 33.31507,31.427134 L 23.249765,31.427134 C 17.462594,31.427134 12.803609,26.228517 12.803609,19.771041 L 12.803609,15.885678 C 12.803609,9.4282028 17.462594,4.2295857 23.249765,4.2295857 L 33.69592,4.2295857 C 33.92198,4.2295857 34.126396,4.2139557 34.348803,4.2295857 z "
-       id="path2274" />
-    <path
-       style="fill:url(#radialGradient2243);fill-opacity:1;stroke:#555753;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 34.496821,3.5010743 C 40.084348,3.8964132 44.498251,9.1055933 44.498251,15.485746 L 44.498251,19.480634 C 44.498251,23.941557 41.693725,27.762085 38.491674,29.825839 L 38.491674,35.506073 L 33.441114,31.465307 L 23.161869,31.465307 C 17.251689,31.465307 12.493676,26.120146 12.493676,19.480634 L 12.493676,15.485746 C 12.493676,8.8462358 17.251689,3.5010743 23.161869,3.5010743 L 33.830062,3.5010743 C 34.060926,3.5010743 34.269686,3.4850033 34.496821,3.5010743 z "
-       id="path2276"
-       sodipodi:nodetypes="cccccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0041453"
-       inkscape:original="M 23.15625 3.5 C 17.24607 3.5 12.5 8.8604894 12.5 15.5 L 12.5 19.46875 C 12.5 26.108262 17.24607 31.46875 23.15625 31.46875 L 33.4375 31.46875 L 38.5 35.5 L 38.5 29.8125 C 41.702051 27.748746 44.499998 23.929672 44.5 19.46875 L 44.5 15.5 C 44.5 9.1198473 40.087526 3.8953389 34.5 3.5 C 34.272865 3.483929 34.074613 3.5 33.84375 3.5 L 23.15625 3.5 z "
-       xlink:href="#path2276"
-       style="fill:url(#radialGradient2260);fill-opacity:1.0;stroke:#eeeeec;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2241"
-       inkscape:href="#path2276"
-       d="M 23.15625,4.5 C 17.853238,4.5 13.5,9.339013 13.5,15.5 L 13.5,19.46875 C 13.5,25.629739 17.853238,30.46875 23.15625,30.46875 L 33.4375,30.46875 C 33.664573,30.468909 33.884889,30.54602 34.0625,30.6875 L 37.5,33.4375 L 37.5,29.8125 C 37.501987,29.469676 37.678723,29.151552 37.96875,28.96875 C 40.920535,27.066295 43.499998,23.509797 43.5,19.46875 L 43.5,15.5 C 43.5,9.5828211 39.440884,4.8540086 34.4375,4.5 C 34.298411,4.4901587 34.121214,4.5 33.84375,4.5 L 23.15625,4.5 z " />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path2288"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-1.942681,0,0,1.942681,47.0578,-6.838631)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect2300"
-       width="11.656093"
-       height="1.942683"
-       x="-35.401695"
-       y="22.301601"
-       transform="scale(-1,1)" />
+       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
+       id="path4334"
+       transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)"
+       sodipodi:nodetypes="cccccccccccccccccc" />
     <path
        sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path13434"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(-1.318248,0,0,1.318248,41.87276,-10.91182)" />
+       inkscape:radius="-0.94924349"
+       inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z "
+       style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4336"
+       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
+       transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)" />
     <path
+       transform="matrix(2.539812,0,0,0.410815,-52.0204,75.74948)"
        sodipodi:type="arc"
-       style="opacity:0.5;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3140"
-       sodipodi:cx="10.748654"
-       sodipodi:cy="10.457643"
-       sodipodi:rx="6.6449099"
-       sodipodi:ry="2.3675451"
-       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
-       transform="matrix(2.883092,0,0,2.111891,-11.14725,15.91459)" />
+       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4306"
+       sodipodi:cx="31.112698"
+       sodipodi:cy="19.008621"
+       sodipodi:rx="8.6620579"
+       sodipodi:ry="8.6620579"
+       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+    <path
+       style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z "
+       id="rect1326"
+       transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)"
+       sodipodi:nodetypes="cccccccccccccccccc" />
     <path
        sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0020103"
-       inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z "
-       xlink:href="#path13316"
-       style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path13323"
-       inkscape:href="#path13316"
-       d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z "
-       transform="matrix(1.942681,0,0,1.942681,0.448052,0.914103)" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect13438"
-       width="11.656093"
-       height="1.942683"
-       x="12.104144"
-       y="22.283606" />
-    <rect
-       style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       id="rect13440"
-       width="17.484138"
-       height="1.9426821"
-       x="12.104144"
-       y="26.168972" />
-    <path
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 13.6875,11.006947 C 8.2753561,11.391447 4,16.45781 4,22.663041 L 4,26.548402 C 4,30.887021 6.065124,34.679607 9.166667,36.686777 L 9.166667,42.211278 L 14.71007,38.204496 L 24.666667,38.204496 C 30.391333,38.204496 35,33.005879 35,26.548402 L 35,22.663041 C 35,16.205564 30.391333,11.006947 24.666667,11.006947 L 14.333333,11.006947 C 14.109714,11.006947 13.907506,10.991317 13.6875,11.006947 z "
-       id="path2262" />
-    <path
-       style="opacity:1;fill:url(#radialGradient2223);fill-opacity:1;stroke:#555753;stroke-width:0.99999958;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 13.498045,10.502236 C 7.9092287,10.897615 3.4943089,16.107317 3.4943089,22.488107 L 3.4943089,26.483398 C 3.4943089,30.944764 6.366081,34.765675 9.5688701,36.829634 L 9.5688701,42.510438 L 14.553995,38.469269 L 24.835613,38.469269 C 30.747154,38.469269 35.506266,33.12357 35.506266,26.483398 L 35.506266,22.488107 C 35.506266,15.847933 30.747154,10.502236 24.835613,10.502236 L 14.164961,10.502236 C 13.934042,10.502236 13.725234,10.486164 13.498045,10.502236 z "
-       id="rect1326"
-       sodipodi:nodetypes="cccccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-0.96460479"
-       inkscape:original="M 13.5 10.5 C 7.9111837 10.895379 3.5 16.11921 3.5 22.5 L 3.5 26.46875 C 3.5 30.930116 6.3597109 34.779791 9.5625 36.84375 L 9.5625 42.5 L 14.5625 38.46875 L 24.84375 38.46875 C 30.755291 38.46875 35.5 33.108922 35.5 26.46875 L 35.5 22.5 C 35.499998 15.859825 30.755291 10.5 24.84375 10.5 L 14.15625 10.5 C 13.925331 10.5 13.727189 10.483928 13.5 10.5 z "
-       xlink:href="#rect1326"
-       style="opacity:1;fill:url(#radialGradient2239);fill-opacity:1.0;stroke:#eeeeec;stroke-width:0.99999958;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2221"
-       inkscape:href="#rect1326"
-       d="M 13.5625,11.46875 C 8.5346329,11.824445 4.46875,16.563779 4.46875,22.5 L 4.46875,26.46875 C 4.46875,30.517912 7.1302756,34.121511 10.09375,36.03125 C 10.368062,36.210248 10.532808,36.516206 10.53125,36.84375 L 10.53125,40.5 L 13.96875,37.71875 C 14.136444,37.581153 14.345618,37.504088 14.5625,37.5 L 24.84375,37.5 C 30.172238,37.5 34.53125,32.649419 34.53125,26.46875 L 34.53125,22.5 C 34.531248,16.319328 30.172238,11.46875 24.84375,11.46875 L 14.15625,11.46875 C 13.880573,11.46875 13.705156,11.458658 13.5625,11.46875 z " />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2207"
-       width="19"
-       height="1"
-       x="10"
-       y="19"
-       rx="0"
-       ry="2" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2209"
-       width="13"
-       height="1"
-       x="10"
-       y="22"
-       rx="0"
-       ry="2" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2211"
-       width="19"
-       height="1"
-       x="10"
-       y="25"
-       rx="0"
-       ry="2" />
-    <rect
-       style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2213"
-       width="12.596705"
-       height="1"
-       x="10"
-       y="28"
-       rx="0"
-       ry="2" />
+       inkscape:radius="-0.94924349"
+       inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z "
+       style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5034"
+       d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z "
+       transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)" />
   </g>
 </svg>
--- a/pidgin/pixmaps/status/16/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/16/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,14 +1,10 @@
 SUBDIRS = rtl scalable
 
 EXTRA_DIST = 	available.png \
-		available_i.png \
 		away.png \
-		away_i.png \
 		busy.png \
-		busy_i.png \
 		chat.png \
 		extended-away.png \
-		extended-away_i.png \
 		invisible.png \
 		log-in.png \
 		log-out.png \
--- a/pidgin/pixmaps/status/16/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/16/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -18,3 +18,5 @@
 	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
 	fi;
 
+	$(MAKE) -C rtl -f Makefile.mingw install || exit 1; \
+
Binary file pidgin/pixmaps/status/16/available_i.png has changed
Binary file pidgin/pixmaps/status/16/away_i.png has changed
Binary file pidgin/pixmaps/status/16/busy_i.png has changed
Binary file pidgin/pixmaps/status/16/extended-away_i.png has changed
--- a/pidgin/pixmaps/status/16/rtl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/16/rtl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-EXTRA_DIST = 	chat.png extended-away.png extended-away_i.png
+EXTRA_DIST = 	extended-away.png 
 
 pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/16/rtl
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/status/16/rtl/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,20 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
+#
+
+PIDGIN_TREE_TOP := ../../../../..
+include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
+
+datadir = $(PIDGIN_INSTALL_DIR)
+include ./Makefile.am
+
+.PHONY: install
+
+install:
+	if test '$(pidginstatuspix_DATA)'; then \
+	  mkdir -p $(pidginstatuspixdir); \
+	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
+	fi;
+
Binary file pidgin/pixmaps/status/16/rtl/chat.png has changed
Binary file pidgin/pixmaps/status/16/rtl/extended-away.png has changed
Binary file pidgin/pixmaps/status/16/rtl/extended-away_i.png has changed
--- a/pidgin/pixmaps/status/22/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/22/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -18,3 +18,5 @@
 	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
 	fi;
 
+	$(MAKE) -C rtl -f Makefile.mingw install || exit 1; \
+
--- a/pidgin/pixmaps/status/22/rtl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/22/rtl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-EXTRA_DIST = 	chat.png extended-away.png
+EXTRA_DIST = 	extended-away.png
 
 pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/22/rtl
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/status/22/rtl/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,20 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
+#
+
+PIDGIN_TREE_TOP := ../../../../..
+include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
+
+datadir = $(PIDGIN_INSTALL_DIR)
+include ./Makefile.am
+
+.PHONY: install
+
+install:
+	if test '$(pidginstatuspix_DATA)'; then \
+	  mkdir -p $(pidginstatuspixdir); \
+	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
+	fi;
+
Binary file pidgin/pixmaps/status/22/rtl/chat.png has changed
--- a/pidgin/pixmaps/status/32/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/32/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -18,3 +18,5 @@
 	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
 	fi;
 
+	$(MAKE) -C rtl -f Makefile.mingw install || exit 1; \
+
--- a/pidgin/pixmaps/status/32/rtl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/32/rtl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-EXTRA_DIST = 	chat.png extended-away.png
+EXTRA_DIST = 	extended-away.png
 
 pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/32/rtl
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/status/32/rtl/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,20 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
+#
+
+PIDGIN_TREE_TOP := ../../../../..
+include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
+
+datadir = $(PIDGIN_INSTALL_DIR)
+include ./Makefile.am
+
+.PHONY: install
+
+install:
+	if test '$(pidginstatuspix_DATA)'; then \
+	  mkdir -p $(pidginstatuspixdir); \
+	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
+	fi;
+
Binary file pidgin/pixmaps/status/32/rtl/chat.png has changed
--- a/pidgin/pixmaps/status/48/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/48/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -18,3 +18,5 @@
 	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
 	fi;
 
+	$(MAKE) -C rtl -f Makefile.mingw install || exit 1; \
+
--- a/pidgin/pixmaps/status/48/rtl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/48/rtl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,4 +1,4 @@
-EXTRA_DIST = 	chat.png extended-away.png
+EXTRA_DIST = 	extended-away.png
 
 pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/48/rtl
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/status/48/rtl/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,20 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
+#
+
+PIDGIN_TREE_TOP := ../../../../..
+include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
+
+datadir = $(PIDGIN_INSTALL_DIR)
+include ./Makefile.am
+
+.PHONY: install
+
+install:
+	if test '$(pidginstatuspix_DATA)'; then \
+	  mkdir -p $(pidginstatuspixdir); \
+	  cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \
+	fi;
+
Binary file pidgin/pixmaps/status/48/rtl/chat.png has changed
--- a/pidgin/pixmaps/status/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/status/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -3,7 +3,11 @@
 EXTRA_DIST = \
 	Makefile.mingw \
 	16/Makefile.mingw \
+	16/rtl/Makefile.mingw \
 	22/Makefile.mingw \
+	22/rtl/Makefile.mingw \
 	32/Makefile.mingw \
-	48/Makefile.mingw
+	32/rtl/Makefile.mingw \
+	48/Makefile.mingw \
+	48/rtl/Makefile.mingw
 
--- a/pidgin/pixmaps/toolbar/16/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/toolbar/16/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,7 +1,6 @@
 SUBDIRS = scalable
 
-EXTRA_DIST = 	accounts.png \
-		change-bgcolor.png \
+EXTRA_DIST = change-bgcolor.png \
 		change-fgcolor.png \
 		emote-select.png \
 		font-face.png \
@@ -11,10 +10,7 @@
 		insert-link.png \
 		message-new.png \
 		plugins.png \
-		typing.png \
-		unblock.png \
-		user-info.png \
-		window-icon.png
+		unblock.png
 
 pidgintoolbarpixdir = $(datadir)/pixmaps/pidgin/toolbar/16
 pidgintoolbarpix_DATA = $(EXTRA_DIST)
Binary file pidgin/pixmaps/toolbar/16/accounts.png has changed
Binary file pidgin/pixmaps/toolbar/16/plugins.png has changed
--- a/pidgin/pixmaps/toolbar/16/scalable/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/pixmaps/toolbar/16/scalable/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -1,14 +1,5 @@
-EXTRA_DIST =	accounts.svg \
-		change-bgcolor.svg \
+EXTRA_DIST = change-bgcolor.svg \
 		change-fgcolor.svg \
-		connect.svg \
-		disconnect.svg \
 		emote-select.svg \
 		font-size-down.svg \
-		font-size-up.svg \
-		insert-image.svg \
-		message-new.svg \
-		plugins.svg \
-		typing.svg \
-		user-info.svg \
-		window-icon.svg
+		font-size-up.svg
--- a/pidgin/pixmaps/toolbar/16/scalable/accounts.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg2199"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable"
-   sodipodi:docname="accounts.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/accounts.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs2201" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="38.648618"
-     inkscape:cx="14.066025"
-     inkscape:cy="7.486937"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     fill="#d3d7cf"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
-  <metadata
-     id="metadata2204">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       style="opacity:0.75;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 10.281751,1.5284516 C 8.7335853,1.6463733 7.5005015,2.9502205 7.5005014,4.5284516 C 7.5005014,6.1843013 8.8446817,7.5284513 10.500501,7.5284513 C 12.156321,7.5284513 13.500501,6.1843013 13.500501,4.5284516 C 13.500501,2.8726024 12.15632,1.5284515 10.500501,1.5284516 C 10.422884,1.5284516 10.35789,1.5226522 10.281751,1.5284516 z M 8.7505014,7.5193603 C 7.4849597,7.6468123 6.5005014,8.7221143 6.5005014,10.01936 C 6.5005014,11.403089 7.6134857,12.51936 9.0005014,12.51936 L 12.000501,12.51936 C 13.387517,12.51936 14.500501,11.403089 14.5005,10.01936 C 14.5005,8.6356313 13.387517,7.5193603 12.000501,7.5193603 L 9.0005014,7.5193603 C 8.9138129,7.5193603 8.8348708,7.5108633 8.7505014,7.5193603 z "
-       id="path2187"
-       sodipodi:nodetypes="cssssccsccsccc" />
-    <path
-       style="opacity:0.75;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 10.281751,1.5025775 C 8.7335853,1.6204992 7.5005015,2.9243464 7.5005014,4.5025775 C 7.5005014,6.1584263 8.8446817,7.5025773 10.500501,7.5025773 C 12.156321,7.5025773 13.500501,6.1584273 13.500501,4.5025775 C 13.500501,2.8467283 12.15632,1.5025774 10.500501,1.5025775 C 10.422884,1.5025775 10.35789,1.4967781 10.281751,1.5025775 z M 8.7505014,7.5193603 C 7.4849597,7.6468123 6.5005014,8.7221143 6.5005014,10.01936 C 6.5005014,11.403089 7.6134857,12.51936 9.0005014,12.51936 L 12.000501,12.51936 C 13.387517,12.51936 14.500501,11.403089 14.5005,10.01936 C 14.5005,8.6356313 13.387517,7.5193603 12.000501,7.5193603 L 9.0005014,7.5193603 C 8.9138129,7.5193603 8.8348708,7.5108633 8.7505014,7.5193603 z "
-       id="path2189"
-       sodipodi:nodetypes="cssssccsccsccc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.75;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:0.95726573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2191"
-       sodipodi:cx="4.0769801"
-       sodipodi:cy="5.9314356"
-       sodipodi:rx="1.9146039"
-       sodipodi:ry="1.9146039"
-       d="M 5.9915841 5.9314356 A 1.9146039 1.9146039 0 1 1  2.1623762,5.9314356 A 1.9146039 1.9146039 0 1 1  5.9915841 5.9314356 z"
-       transform="matrix(1.044633,0,0,1.044651,6.24111,-1.679591)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0137123"
-       inkscape:original="M 4 9.5 C 2.6129841 9.5 1.5 10.616271 1.5 12 C 1.5 13.383729 2.6129843 14.5 4 14.5 L 7 14.5 C 8.3870159 14.5 9.5000001 13.383729 9.5 12 C 9.5 10.616271 8.387016 9.5 7 9.5 L 4 9.5 z "
-       xlink:href="#rect3093"
-       style="opacity:0.75;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:1.00000048;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2193"
-       d="M 4,10.5 C 3.1568748,10.5 2.5,11.159848 2.5,12 C 2.5,12.840152 3.1568751,13.5 4,13.5 L 7,13.5 C 7.8431252,13.5 8.5000001,12.840152 8.5,12 C 8.5,11.159848 7.8431253,10.5 7,10.5 L 4,10.5 z "
-       transform="translate(5.000501,-1.980639)"
-       inkscape:href="#rect3093" />
-    <path
-       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 5.281635,4.5116692 C 3.7334689,4.6295909 2.5003851,5.9334381 2.500385,7.5116692 C 2.500385,9.1675184 3.8445653,10.511669 5.500385,10.511669 C 7.1562046,10.511669 8.5003847,9.1675186 8.500385,7.5116692 C 8.500385,5.85582 7.1562045,4.5116691 5.500385,4.5116692 C 5.4227685,4.5116692 5.3577743,4.5058698 5.281635,4.5116692 z M 3.750385,10.502578 C 2.4848433,10.63003 1.500385,11.705332 1.500385,13.002578 C 1.500385,14.386307 2.6133693,15.502578 4.000385,15.502578 L 7.000385,15.502578 C 8.3874009,15.502578 9.5003855,14.386307 9.5003845,13.002578 C 9.5003845,11.618849 8.387401,10.502578 7.000385,10.502578 L 4.000385,10.502578 C 3.9136965,10.502578 3.8347544,10.494081 3.750385,10.502578 z "
-       id="path3120"
-       sodipodi:nodetypes="cssssccsccsccc" />
-    <path
-       style="opacity:1;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 5.281635,4.4857951 C 3.7334689,4.6037168 2.5003851,5.907564 2.500385,7.4857951 C 2.500385,9.1416443 3.8445653,10.485795 5.500385,10.485795 C 7.1562046,10.485795 8.5003847,9.1416445 8.500385,7.4857951 C 8.500385,5.8299459 7.1562045,4.485795 5.500385,4.4857951 C 5.4227685,4.4857951 5.3577743,4.4799957 5.281635,4.4857951 z M 3.750385,10.502578 C 2.4848433,10.63003 1.500385,11.705332 1.500385,13.002578 C 1.500385,14.386307 2.6133693,15.502578 4.000385,15.502578 L 7.000385,15.502578 C 8.3874009,15.502578 9.5003855,14.386307 9.5003845,13.002578 C 9.5003845,11.618849 8.387401,10.502578 7.000385,10.502578 L 4.000385,10.502578 C 3.9136965,10.502578 3.8347544,10.494081 3.750385,10.502578 z "
-       id="path2207"
-       sodipodi:nodetypes="cssssccsccsccc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:0.95726573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3082"
-       sodipodi:cx="4.0769801"
-       sodipodi:cy="5.9314356"
-       sodipodi:rx="1.9146039"
-       sodipodi:ry="1.9146039"
-       d="M 5.9915841 5.9314356 A 1.9146039 1.9146039 0 1 1  2.1623762,5.9314356 A 1.9146039 1.9146039 0 1 1  5.9915841 5.9314356 z"
-       transform="matrix(1.044633,0,0,1.044651,1.240994,1.303627)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0137123"
-       inkscape:original="M 4 9.5 C 2.6129841 9.5 1.5 10.616271 1.5 12 C 1.5 13.383729 2.6129843 14.5 4 14.5 L 7 14.5 C 8.3870159 14.5 9.5000001 13.383729 9.5 12 C 9.5 10.616271 8.387016 9.5 7 9.5 L 4 9.5 z "
-       xlink:href="#rect3093"
-       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:1.00000048;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3101"
-       d="M 4,10.5 C 3.1568748,10.5 2.5,11.159848 2.5,12 C 2.5,12.840152 3.1568751,13.5 4,13.5 L 7,13.5 C 7.8431252,13.5 8.5000001,12.840152 8.5,12 C 8.5,11.159848 7.8431253,10.5 7,10.5 L 4,10.5 z "
-       transform="translate(3.85495e-4,1.002579)" />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/connect.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg1307"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh"
-   sodipodi:docname="connect.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/connect.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs1309">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2307">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop2309" />
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:0;"
-         offset="1"
-         id="stop2311" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2287">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2289" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop2291" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2235">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2237" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop2239" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2235"
-       id="radialGradient2243"
-       cx="3.4638615"
-       cy="8.5"
-       fx="3.4638615"
-       fy="8.5"
-       r="1.5361387"
-       gradientTransform="matrix(1,0,0,2.929423,0,-16.4001)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2287"
-       id="radialGradient2293"
-       cx="3.4725401"
-       cy="8.4901399"
-       fx="3.4725401"
-       fy="8.4901399"
-       r="1.8475615"
-       gradientTransform="matrix(1,0,0,3.215392,0,-18.80899)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2307"
-       id="radialGradient2313"
-       cx="3.46875"
-       cy="8.46875"
-       fx="3.46875"
-       fy="8.46875"
-       r="1.5625002"
-       gradientTransform="matrix(1,0,0,3.54,0,-21.51062)"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.197802"
-     inkscape:cx="13.676238"
-     inkscape:cy="8.4504951"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     fill="#555753"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
-  <metadata
-     id="metadata1312">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <image
-       id="image2203"
-       height="16"
-       width="16"
-       sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_connect_16.png"
-       xlink:href="gaim/gtk/pixmaps/stock_connect_16.png"
-       x="-4.5762377"
-       y="17" />
-    <rect
-       style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:0.9999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2231"
-       width="3.7591434"
-       height="4.0898862"
-       x="3.5015876"
-       y="6.4687538"
-       ry="1.0811869"
-       rx="1.0811878" />
-    <image
-       id="image2213"
-       height="16"
-       width="16"
-       sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_disconnect_16.png"
-       xlink:href="gaim/gtk/pixmaps/stock_disconnect_16.png"
-       x="-17"
-       y="-9" />
-    <rect
-       style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999964;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2222"
-       width="5.9919014"
-       height="1.9889754"
-       x="8.4049187"
-       y="10.489324"
-       rx="1.0811872"
-       ry="1.0811882" />
-    <rect
-       style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999928;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2224"
-       width="5.9919014"
-       height="2.0106792"
-       x="8.4130182"
-       y="4.494658"
-       rx="1.0811872"
-       ry="1.0811875" />
-    <rect
-       style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2218"
-       width="4.5"
-       height="12"
-       x="12.5"
-       y="2.5"
-       ry="1.0811881"
-       rx="1.0811881" />
-    <path
-       style="fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 8.4861081,2.4676147 L 9.3875609,2.4676147 C 9.9865394,2.4676147 10.46875,2.9498245 10.46875,3.5488027 L 10.46875,13.386427 C 10.46875,13.985405 9.9865394,14.467615 9.3875609,14.467615 L 8.4861081,14.467615 C 7.8871296,14.467615 6.4138303,13.985405 6.4138303,13.386427 L 6.4138303,3.5488027 C 6.4138303,2.9498245 7.8871296,2.4676147 8.4861081,2.4676147 z "
-       id="rect2220"
-       sodipodi:nodetypes="ccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0487005"
-       inkscape:original="M 13.59375 2.5 C 12.994772 2.5 12.5 2.9947717 12.5 3.59375 L 12.5 13.40625 C 12.5 14.005228 12.994772 14.5 13.59375 14.5 L 15.90625 14.5 C 16.505228 14.5 17 14.005228 17 13.40625 L 17 3.59375 C 17 2.9947718 16.505228 2.5 15.90625 2.5 L 13.59375 2.5 z "
-       xlink:href="#rect2218"
-       style="opacity:0.14204545;fill:#3465a4;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2315"
-       inkscape:href="#rect2218"
-       d="M 13.59375,3.5625 C 13.572275,3.5625 13.5625,3.5722747 13.5625,3.59375 L 13.5625,13.40625 C 13.5625,13.427725 13.572275,13.4375 13.59375,13.4375 L 15.90625,13.4375 C 15.927725,13.4375 15.9375,13.427725 15.9375,13.40625 L 15.9375,3.59375 C 15.9375,3.5722749 15.927725,3.5625 15.90625,3.5625 L 13.59375,3.5625 z " />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-0.97353798"
-       inkscape:original="M 8.5 2.46875 C 7.9010215 2.46875 6.40625 2.9635219 6.40625 3.5625 L 6.40625 13.375 C 6.40625 13.973978 7.9010218 14.46875 8.5 14.46875 L 9.375 14.46875 C 9.9739785 14.46875 10.46875 13.973978 10.46875 13.375 L 10.46875 3.5625 C 10.46875 2.9635218 9.9739786 2.46875 9.375 2.46875 L 8.5 2.46875 z "
-       xlink:href="#rect2220"
-       style="opacity:0.14772728;fill:url(#radialGradient2313);fill-opacity:1;stroke:#ffffff;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1"
-       id="path2295"
-       inkscape:href="#rect2220"
-       d="M 3.53125,3.4375 C 3.4998166,3.4375 2.9853197,3.5418315 2.65625,3.6875 C 2.5388748,3.7394582 2.4675143,3.7716169 2.40625,3.8125 L 2.40625,13.125 C 2.4675143,13.165883 2.5388748,13.198042 2.65625,13.25 C 2.9853198,13.395668 3.4998167,13.5 3.53125,13.5 L 4.40625,13.5 C 4.4691165,13.5 4.53125,13.437866 4.53125,13.375 L 4.53125,3.5625 C 4.53125,3.4996337 4.4691163,3.4375 4.40625,3.4375 L 3.53125,3.4375 z " />
-    <rect
-       style="opacity:1;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect1351"
-       width="3"
-       height="1"
-       x="0"
-       y="8" />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/disconnect.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16px"
-   height="16px"
-   id="svg1307"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh"
-   sodipodi:docname="connect.svg">
-  <defs
-     id="defs1309">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2307">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop2309" />
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:0;"
-         offset="1"
-         id="stop2311" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2287">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2289" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop2291" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2235">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2237" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop2239" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2235"
-       id="radialGradient2243"
-       cx="3.4638615"
-       cy="8.5"
-       fx="3.4638615"
-       fy="8.5"
-       r="1.5361387"
-       gradientTransform="matrix(1,0,0,2.929423,0,-16.4001)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2287"
-       id="radialGradient2293"
-       cx="3.4725401"
-       cy="8.4901399"
-       fx="3.4725401"
-       fy="8.4901399"
-       r="1.8475615"
-       gradientTransform="matrix(1,0,0,3.215392,0,-18.80899)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2307"
-       id="radialGradient2313"
-       cx="3.46875"
-       cy="8.46875"
-       fx="3.46875"
-       fy="8.46875"
-       r="1.5625002"
-       gradientTransform="matrix(1,0,0,3.54,0,-21.51062)"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.197802"
-     inkscape:cx="8"
-     inkscape:cy="8"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     fill="#eeeeec"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
-  <metadata
-     id="metadata1312">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <image
-       id="image2203"
-       height="16"
-       width="16"
-       sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_connect_16.png"
-       xlink:href="gaim/gtk/pixmaps/stock_connect_16.png"
-       x="-4.5762377"
-       y="17" />
-    <image
-       id="image2213"
-       height="16"
-       width="16"
-       sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_disconnect_16.png"
-       xlink:href="gaim/gtk/pixmaps/stock_disconnect_16.png"
-       x="-17"
-       y="-9" />
-    <rect
-       style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2218"
-       width="4.5"
-       height="12"
-       x="12.5"
-       y="2.5"
-       ry="1.0811881"
-       rx="1.0811881" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0487005"
-       inkscape:original="M 13.59375 2.5 C 12.994772 2.5 12.5 2.9947717 12.5 3.59375 L 12.5 13.40625 C 12.5 14.005228 12.994772 14.5 13.59375 14.5 L 15.90625 14.5 C 16.505228 14.5 17 14.005228 17 13.40625 L 17 3.59375 C 17 2.9947718 16.505228 2.5 15.90625 2.5 L 13.59375 2.5 z "
-       xlink:href="#rect2218"
-       style="opacity:0.14204545;fill:#3465a4;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2315"
-       inkscape:href="#rect2218"
-       d="M 13.59375,3.5625 C 13.572275,3.5625 13.5625,3.5722747 13.5625,3.59375 L 13.5625,13.40625 C 13.5625,13.427725 13.572275,13.4375 13.59375,13.4375 L 15.90625,13.4375 C 15.927725,13.4375 15.9375,13.427725 15.9375,13.40625 L 15.9375,3.59375 C 15.9375,3.5722749 15.927725,3.5625 15.90625,3.5625 L 13.59375,3.5625 z " />
-    <rect
-       style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2222"
-       width="5.9919014"
-       height="2.0323851"
-       x="3.4361691"
-       y="10.43523"
-       rx="1.0811872"
-       ry="1.081188" />
-    <rect
-       style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2224"
-       width="5.9919014"
-       height="2.0323851"
-       x="3.4442682"
-       y="4.4676151"
-       rx="1.0811872"
-       ry="1.081188" />
-    <rect
-       style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:0.99999946;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2231"
-       width="4.5"
-       height="4.0898862"
-       x="-1.5"
-       y="6.4687538"
-       ry="1.0811869"
-       rx="1.0811881" />
-    <path
-       style="fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 3.5173583,2.4676149 L 4.4188111,2.4676149 C 5.0177896,2.4676149 5.4999998,2.9498247 5.4999998,3.5488029 L 5.4999998,13.386427 C 5.4999998,13.985405 5.0177896,14.467615 4.4188111,14.467615 L 3.5173583,14.467615 C 2.9183798,14.467615 1.4450805,13.985405 1.4450805,13.386427 L 1.4450805,3.5488029 C 1.4450805,2.9498247 2.9183798,2.4676149 3.5173583,2.4676149 z "
-       id="rect2220"
-       sodipodi:nodetypes="ccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-0.97353798"
-       inkscape:original="M 3.53125 2.46875 C 2.9322715 2.46875 1.4375 2.9635218 1.4375 3.5625 L 1.4375 13.375 C 1.4375 13.973978 2.9322715 14.46875 3.53125 14.46875 L 4.40625 14.46875 C 5.0052285 14.46875 5.4999998 13.973978 5.5 13.375 L 5.5 3.5625 C 5.5 2.9635218 5.0052283 2.46875 4.40625 2.46875 L 3.53125 2.46875 z "
-       xlink:href="#rect2220"
-       style="fill:url(#radialGradient2313);fill-opacity:1.0;stroke:#ffffff;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1;opacity:0.14772727"
-       id="path2295"
-       inkscape:href="#rect2220"
-       d="M 3.53125,3.4375 C 3.4998166,3.4375 2.9853197,3.5418315 2.65625,3.6875 C 2.5388748,3.7394582 2.4675143,3.7716169 2.40625,3.8125 L 2.40625,13.125 C 2.4675143,13.165883 2.5388748,13.198042 2.65625,13.25 C 2.9853198,13.395668 3.4998167,13.5 3.53125,13.5 L 4.40625,13.5 C 4.4691165,13.5 4.53125,13.437866 4.53125,13.375 L 4.53125,3.5625 C 4.53125,3.4996337 4.4691163,3.4375 4.40625,3.4375 L 3.53125,3.4375 z " />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/insert-image.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars"
-   sodipodi:docname="insert-image.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/insert-image.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs4">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3527">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop3529" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop3531" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8662">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop8664" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop8666" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8662"
-       id="radialGradient2494"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.536723,4.952005e-15,16.87306)"
-       cx="24.837126"
-       cy="36.421127"
-       fx="24.837126"
-       fy="36.421127"
-       r="15.644737" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2233">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop2235" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop2237" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2233"
-       id="linearGradient2481"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,-4)"
-       x1="25"
-       y1="27.5"
-       x2="26.673967"
-       y2="10" />
-    <linearGradient
-       id="linearGradient2834">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop2836" />
-      <stop
-         style="stop-color:#b3b3b3;stop-opacity:0.0000000;"
-         offset="1.0000000"
-         id="stop2838" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2834"
-       id="linearGradient2479"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1.861203e-16,-3)"
-       x1="19.891792"
-       y1="16.114628"
-       x2="31.856716"
-       y2="72.780548" />
-    <linearGradient
-       id="linearGradient2243">
-      <stop
-         id="stop2245"
-         offset="0"
-         style="stop-color:#2a5387;stop-opacity:1" />
-      <stop
-         id="stop2247"
-         offset="1"
-         style="stop-color:#3465a4;stop-opacity:1;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2243"
-       id="linearGradient2477"
-       gradientUnits="userSpaceOnUse"
-       x1="19.988434"
-       y1="34.98325"
-       x2="19.988434"
-       y2="6.4341555" />
-    <linearGradient
-       id="linearGradient3682">
-      <stop
-         style="stop-color:#497fc6;stop-opacity:1;"
-         offset="0"
-         id="stop3684" />
-      <stop
-         style="stop-color:#90b3d9;stop-opacity:1;"
-         offset="1"
-         id="stop3686" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3682"
-       id="linearGradient2475"
-       gradientUnits="userSpaceOnUse"
-       x1="29.122221"
-       y1="33.438889"
-       x2="14.296363"
-       y2="6.3463993" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2233"
-       id="linearGradient5652"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.186481,0,0,0.186481,1.980879,3.495724)"
-       x1="25"
-       y1="27.5"
-       x2="26.673967"
-       y2="10" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2834"
-       id="linearGradient5655"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.186481,0,0,0.186481,2.16736,3.682205)"
-       x1="19.891792"
-       y1="16.114628"
-       x2="31.856716"
-       y2="72.780548" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3682"
-       id="linearGradient5658"
-       gradientUnits="userSpaceOnUse"
-       x1="29.122221"
-       y1="33.438889"
-       x2="14.296363"
-       y2="6.3463993"
-       gradientTransform="matrix(0.186481,0,0,0.186481,2.16736,4.241648)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2243"
-       id="linearGradient5660"
-       gradientUnits="userSpaceOnUse"
-       x1="19.988434"
-       y1="34.98325"
-       x2="19.988434"
-       y2="6.4341555"
-       gradientTransform="matrix(0.186481,0,0,0.186481,2.16736,4.241648)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3527"
-       id="linearGradient1344"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.999997,0,4.205949e-5)"
-       x1="8.4662685"
-       y1="13.058619"
-       x2="8.4662685"
-       y2="-1.8813093" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="36.388907"
-     inkscape:cx="9.6715554"
-     inkscape:cy="8.3506222"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fill="#729fcf"
-     borderlayer="top"
-     inkscape:grid-points="false"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21"
-     inkscape:showpageshadow="false" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.4;color:#000000;fill:url(#radialGradient2494);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       id="path2492"
-       sodipodi:cx="24.837126"
-       sodipodi:cy="36.421127"
-       sodipodi:rx="15.644737"
-       sodipodi:ry="8.3968935"
-       d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1  9.1923885,36.421127 A 15.644737 8.3968935 0 1 1  40.481863 36.421127 z"
-       transform="matrix(0.511354,0,0,0.178638,-4.700565,7.993818)"
-       inkscape:r_cx="true"
-       inkscape:r_cy="true" />
-    <rect
-       style="opacity:0.25568183;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2237"
-       width="1"
-       height="1"
-       x="23"
-       y="12" />
-    <path
-       style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 3.311991,0.499958 L 11.793363,0.499958 C 12.813372,1.5198807 13.563469,2.2699146 14.5,3.2063672 L 14.5,14.689474 C 14.5,15.139279 14.137852,15.501396 13.688009,15.501396 L 3.311991,15.501396 C 2.862148,15.501396 2.5,15.139279 2.5,14.689474 L 2.5,1.3118807 C 2.5,0.8620755 2.862148,0.499958 3.311991,0.499958 z "
-       id="path3517"
-       sodipodi:nodetypes="ccccccccc" />
-    <rect
-       style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:0.9999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect3535"
-       width="12.001637"
-       height="9.0028343"
-       x="0.49989274"
-       y="3.497395" />
-    <path
-       style="fill:url(#linearGradient1344);fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 3.311991,0.49999856 L 11.793363,0.49999856 C 12.813372,1.5199182 13.563469,2.2699498 14.5,3.2063996 L 14.5,14.689472 C 14.5,15.139276 14.137852,15.501392 13.688009,15.501392 L 3.311991,15.501392 C 2.862148,15.501392 2.5,15.139276 2.5,14.689472 L 2.5,1.3119188 C 2.5,0.86211497 2.862148,0.49999856 3.311991,0.49999856 z "
-       id="rect3512"
-       sodipodi:nodetypes="ccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-0.98898512"
-       inkscape:original="M 3.3125 0.5 C 2.862657 0.5 2.5 0.86269612 2.5 1.3125 L 2.5 14.6875 C 2.5 15.137304 2.862657 15.5 3.3125 15.5 L 13.6875 15.5 C 14.137343 15.5 14.5 15.137304 14.5 14.6875 L 14.5 3.21875 C 13.563469 2.2823002 12.801259 1.5199196 11.78125 0.5 L 3.3125 0.5 z "
-       xlink:href="#rect3512"
-       style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path1342"
-       inkscape:href="#rect3512"
-       d="M 3.5,1.5 L 3.5,14.5 L 13.5,14.5 L 13.5,3.59375 C 12.805194,2.8989672 12.150498,2.2442197 11.40625,1.5 L 3.5,1.5 z " />
-    <rect
-       style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:#3465a4;stroke-width:0.9999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect3482"
-       width="12.001637"
-       height="9.0028343"
-       x="0.49989274"
-       y="3.497395"
-       rx="0.89386886"
-       ry="0.89386886" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.9375;fill:#edd400;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3480"
-       sodipodi:cx="7.5"
-       sodipodi:cy="5.5"
-       sodipodi:rx="1.5"
-       sodipodi:ry="1.5"
-       d="M 9 5.5 A 1.5 1.5 0 1 1  6,5.5 A 1.5 1.5 0 1 1  9 5.5 z"
-       transform="translate(0,1)" />
-    <path
-       style="opacity:1;fill:#4e9a06;fill-opacity:1;stroke:#3b7c00;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="M 3.0844788,6.7701117 L 1.4964645,9.1644496 L 1.4964645,11.491845 L 11.502499,11.491845 L 11.502499,9.1737298 L 9.9969429,7.6369148 L 7.0238894,9.7054172 L 3.0844788,6.7701117 z "
-       id="rect3484"
-       sodipodi:nodetypes="cccccccc" />
-    <image
-       id="image3495"
-       height="15.625"
-       width="8"
-       sodipodi:absref="/home/hbons/Desktop/Tango-Palette.png"
-       xlink:href="/home/hbons/Desktop/Tango-Palette.png"
-       x="-10"
-       y="-2"
-       style="fill:#8ae234;fill-opacity:1;stroke:#3465a4;stroke-opacity:1" />
-    <rect
-       style="opacity:0.2;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.9999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect3555"
-       width="10.005957"
-       height="7.0110626"
-       x="1.4970188"
-       y="4.4944715" />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/message-new.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable"
-   sodipodi:docname="message-new.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/message-new.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient12512">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1.0000000;"
-         offset="0.0000000"
-         id="stop12513" />
-      <stop
-         style="stop-color:#fff520;stop-opacity:0.89108908;"
-         offset="0.50000000"
-         id="stop12517" />
-      <stop
-         style="stop-color:#fff300;stop-opacity:0.0000000;"
-         offset="1.0000000"
-         id="stop12514" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient12512"
-       id="radialGradient278"
-       gradientUnits="userSpaceOnUse"
-       cx="55.000000"
-       cy="125.00000"
-       fx="55.000000"
-       fy="125.00000"
-       r="14.375000" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2200">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2202" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop2204" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2200"
-       id="radialGradient2206"
-       cx="9.9988937"
-       cy="8.963316"
-       fx="9.9988937"
-       fy="8.963316"
-       r="7.003407"
-       gradientTransform="matrix(2.522332,-1.518129e-16,1.517788e-16,2.521765,-17.1904,-22.80154)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2200"
-       id="radialGradient2216"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.83521)"
-       cx="9.9988937"
-       cy="8.963316"
-       fx="9.9988937"
-       fy="8.963316"
-       r="7.003407" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2200"
-       id="radialGradient2225"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.80154)"
-       cx="9.9988937"
-       cy="8.963316"
-       fx="9.9988937"
-       fy="8.963316"
-       r="7.003407" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.4"
-     inkscape:cx="20.932696"
-     inkscape:cy="7.5173717"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fill="#d3d7cf"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21"
-     showguides="true"
-     inkscape:guide-bbox="true">
-    <sodipodi:guide
-       orientation="vertical"
-       position="-1.9642857"
-       id="guide1415" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.4918287,12.646495 3.6945395,12.646495 L 4.1281,12.646495 L 4.1281,14.503658 L 6.43139,12.646495 L 12.365748,12.646495 C 13.568459,12.646495 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z "
-       id="path2208" />
-    <path
-       style="opacity:1;fill:url(#radialGradient2206);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.6187431,12.483319 3.8214539,12.483319 L 4.5298235,12.483319 L 4.5298235,14.924652 L 7.3107789,12.51023 L 12.365748,12.50145 C 13.568459,12.50145 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z "
-       id="rect1309"
-       sodipodi:nodetypes="ccccccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0358232"
-       inkscape:original="M 3.46875 1.5 C 2.371372 1.6186312 1.53125 2.6050398 1.53125 3.8125 L 1.53125 10.3125 C 1.53125 11.600458 2.6097892 12.46875 3.8125 12.46875 L 4.53125 12.46875 L 4.53125 14.9375 L 7.3125 12.5 L 12.375 12.5 C 13.577711 12.5 14.53125 11.600458 14.53125 10.3125 L 14.53125 3.8125 C 14.53125 2.5245424 13.577711 1.5 12.375 1.5 L 3.6875 1.5 C 3.6123307 1.5 3.5419085 1.4920913 3.46875 1.5 z "
-       xlink:href="#rect1309"
-       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2198"
-       inkscape:href="#rect1309"
-       d="M 4.59375,8.53125 C 4.0502029,8.5900098 3.5625,9.0855072 3.5625,9.8125 L 3.5625,16.3125 C 3.5625,17.022191 4.108328,17.4375 4.8125,17.4375 L 5.53125,17.4375 C 6.0997296,17.440061 6.5599393,17.90027 6.5625,18.46875 L 6.5625,18.65625 L 7.625,17.71875 C 7.8161378,17.554581 8.0605562,17.465702 8.3125,17.46875 L 13.375,17.46875 C 14.06123,17.46875 14.5,17.089211 14.5,16.3125 L 14.5,9.8125 C 14.5,9.0357897 13.98946,8.53125 13.375,8.53125 L 4.6875,8.53125 C 4.5396732,8.5312504 4.5229283,8.5389061 4.59375,8.53125 z " />
-    <path
-       sodipodi:type="arc"
-       style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
-       id="path12511"
-       sodipodi:cx="55"
-       sodipodi:cy="125"
-       sodipodi:rx="14.375"
-       sodipodi:ry="14.375"
-       d="M 69.375 125 A 14.375 14.375 0 1 1  40.625,125 A 14.375 14.375 0 1 1  69.375 125 z"
-       transform="matrix(0.278262,0,0,0.278263,-2.304426,-31.78284)"
-       inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
-       inkscape:export-xdpi="33.852203"
-       inkscape:export-ydpi="33.852203" />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/plugins.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars"
-   sodipodi:docname="plugins.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/plugins.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs4">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3162">
-      <stop
-         style="stop-color:#75507b;stop-opacity:1;"
-         offset="0"
-         id="stop3164" />
-      <stop
-         style="stop-color:#75507b;stop-opacity:0;"
-         offset="1"
-         id="stop3166" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3162"
-       id="linearGradient3168"
-       x1="8"
-       y1="10.085922"
-       x2="8"
-       y2="-4.356256"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="51.461686"
-     inkscape:cx="10.774973"
-     inkscape:cy="7.1305212"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     fill="#75507b"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 7.9910715,1.4766833 C 5.9906451,1.4766833 6.5989159,3.4804549 6.5989159,4.5580569 L 3.4999998,4.5242239 L 3.4999998,7.5494427 C 5.3502838,7.5494427 6.5,7.5050807 6.5,9.0464584 C 6.5,10.491956 5.0186253,10.512287 3.4999998,10.512287 L 3.5312498,14.499873 L 6.5,14.499873 C 6.5,13.789163 6.1591083,11.505842 8.0239235,11.505842 C 9.9126603,11.505842 9.53125,13.881548 9.53125,14.499873 L 12.5,14.499873 L 12.5,10.481098 C 11.766486,10.481098 9.5312502,10.737203 9.53125,8.9840828 C 9.53125,7.2071466 11.72913,7.518255 12.5,7.518255 L 12.5,4.5242239 L 9.5,4.5242239 C 9.5,3.4415299 10.013818,1.4766833 7.9910715,1.4766833 z "
-       id="path3152"
-       sodipodi:nodetypes="cccczccczccczcccz" />
-    <path
-       style="opacity:1;fill:url(#linearGradient3168);fill-opacity:1.0;fill-rule:evenodd;stroke:#5c3566;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 7.9910715,1.4766833 C 6.1690798,1.4766833 6.5989159,3.0325559 6.5989159,4.5580569 L 3.4999998,4.5242239 L 3.4999998,7.5494427 C 4.9931409,7.5494427 6.5,7.3994628 6.5,9.0464584 C 6.5,10.671141 5.0186253,10.512287 3.4999998,10.512287 L 3.5312498,14.499873 L 6.5,14.499873 C 6.5,13.789163 6.1591083,11.505842 8.0239235,11.505842 C 9.9126603,11.505842 9.53125,13.881548 9.53125,14.499873 L 12.5,14.499873 L 12.5,10.481098 C 11.007391,10.481098 9.5312502,10.737203 9.53125,8.9840828 C 9.53125,7.2071466 11.059314,7.518255 12.5,7.518255 L 12.5,4.5242239 L 9.5,4.5242239 C 9.5,2.9949384 9.8352479,1.4766833 7.9910715,1.4766833 z "
-       id="rect2209"
-       sodipodi:nodetypes="cccczccczccczcccz" />
-    <rect
-       style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect3132"
-       width="1"
-       height="1.0000001"
-       x="3"
-       y="4" />
-    <rect
-       style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect3134"
-       width="1"
-       height="1.0000001"
-       x="12"
-       y="4" />
-    <rect
-       style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect3148"
-       width="1"
-       height="1.0000001"
-       x="12"
-       y="14" />
-    <rect
-       style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect3150"
-       width="1"
-       height="1.0000001"
-       x="3"
-       y="14" />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/typing.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg1331"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/typing3.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable"
-   sodipodi:docname="typing.svg">
-  <defs
-     id="defs1333" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="27.857618"
-     inkscape:cx="15.486242"
-     inkscape:cy="10.647848"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     fill="#babdb6"
-     inkscape:window-width="1268"
-     inkscape:window-height="972"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
-  <metadata
-     id="metadata1336">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <rect
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.0000006;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2242"
-       width="15.99971"
-       height="3.0001566"
-       x="1.5002946"
-       y="1.4998456"
-       rx="1.3258367"
-       ry="1.3258374" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2244"
-       width="1"
-       height="2.0135684"
-       x="13.009719"
-       y="1.9864316" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2246"
-       width="1"
-       height="2.0135684"
-       x="10.009719"
-       y="1.9864316" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2248"
-       width="1"
-       height="2.0135684"
-       x="7.0097184"
-       y="1.9864316" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2250"
-       width="1"
-       height="2.0135684"
-       x="4.0097184"
-       y="1.9864316" />
-    <rect
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2252"
-       width="15.990281"
-       height="3.0001719"
-       x="3.5097189"
-       y="10.499027"
-       rx="1.3258373"
-       ry="1.3258358" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2258"
-       width="1"
-       height="2"
-       x="9.0097189"
-       y="10.986431" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2260"
-       width="1"
-       height="2"
-       x="6.0097184"
-       y="10.986431" />
-    <rect
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.00000048;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2262"
-       width="15.999428"
-       height="2.9989355"
-       x="1.5002862"
-       y="7.4998713"
-       rx="1.3258373"
-       ry="1.3258364" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2264"
-       width="1"
-       height="2.0390401"
-       x="13.00326"
-       y="7.9609599" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2266"
-       width="1"
-       height="2.0390401"
-       x="10.00326"
-       y="7.9609599" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2268"
-       width="1"
-       height="2.0390401"
-       x="7.0032597"
-       y="7.9609599" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2270"
-       width="1"
-       height="2.0390401"
-       x="4.0032597"
-       y="7.9609599" />
-    <rect
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.0000006;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2272"
-       width="15.9997"
-       height="2.9996767"
-       x="3.5002952"
-       y="4.5001583"
-       rx="1.3258375"
-       ry="1.3258364" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2274"
-       width="1"
-       height="2"
-       x="15.00326"
-       y="5" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2276"
-       width="1"
-       height="2"
-       x="12.00326"
-       y="5" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2278"
-       width="1"
-       height="2"
-       x="9.0032597"
-       y="5" />
-    <rect
-       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2280"
-       width="1"
-       height="2"
-       x="6.0032597"
-       y="5" />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/user-info.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable"
-   sodipodi:docname="user-info.svg"
-   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/user-info.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs4">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2192">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop2194" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop2196" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3150">
-      <stop
-         style="stop-color:#2e3436;stop-opacity:1;"
-         offset="0"
-         id="stop3152" />
-      <stop
-         style="stop-color:#2e3436;stop-opacity:0;"
-         offset="1"
-         id="stop3154" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3150"
-       id="radialGradient3156"
-       cx="10.748654"
-       cy="10.457643"
-       fx="10.748654"
-       fy="10.457643"
-       r="6.6449099"
-       gradientTransform="matrix(-0.910086,1.546191e-16,-4.930589e-9,-0.385748,20.53086,14.49165)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2192"
-       id="linearGradient2198"
-       x1="7.487052"
-       y1="1.1166894"
-       x2="7.487052"
-       y2="16.498425"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="39.000665"
-     inkscape:cx="15.428982"
-     inkscape:cy="6.2295886"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fill="#3465a4"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       sodipodi:type="arc"
-       style="opacity:1;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3140"
-       sodipodi:cx="10.748654"
-       sodipodi:cy="10.457643"
-       sodipodi:rx="6.6449099"
-       sodipodi:ry="2.3675451"
-       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
-       transform="matrix(1.203929,0,0,1.267135,-4.940617,-0.251247)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1.02945173;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path1307"
-       sodipodi:cx="7.487052"
-       sodipodi:cy="7.9488554"
-       sodipodi:rx="6.6921935"
-       sodipodi:ry="6.6921935"
-       d="M 14.179245 7.9488554 A 6.6921935 6.6921935 0 1 1  0.79485846,7.9488554 A 6.6921935 6.6921935 0 1 1  14.179245 7.9488554 z"
-       transform="matrix(0.97139,0,0,0.97139,0.727388,0.278321)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.3;fill:none;fill-opacity:1.0;stroke:url(#linearGradient2198);stroke-width:1.21670604;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2184"
-       sodipodi:cx="7.487052"
-       sodipodi:cy="7.9488554"
-       sodipodi:rx="6.6921935"
-       sodipodi:ry="6.6921935"
-       d="M 14.179245 7.9488554 A 6.6921935 6.6921935 0 1 1  0.79485846,7.9488554 A 6.6921935 6.6921935 0 1 1  14.179245 7.9488554 z"
-       transform="matrix(0.82189,0,0,0.82189,1.846698,1.466671)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2186"
-       sodipodi:cx="9.0895882"
-       sodipodi:cy="5.6283822"
-       sodipodi:rx="1.1153656"
-       sodipodi:ry="1.1666467"
-       d="M 10.204954 5.6283822 A 1.1153656 1.1666467 0 1 1  7.9742225,5.6283822 A 1.1153656 1.1666467 0 1 1  10.204954 5.6283822 z"
-       transform="matrix(0.896567,0,0,0.857158,-0.149426,0.175589)" />
-    <path
-       style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 6.5,7 L 8.5,7 C 8.777,7 9,7.2982947 9,7.5 C 9,10.525698 9.3517591,8 6.5,8 C 6.2230035,7.9985995 6,7.777 6,7.5 C 6,7.223 6.223,7 6.5,7 z "
-       id="rect2188"
-       sodipodi:nodetypes="ccscsc" />
-    <rect
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2190"
-       width="2"
-       height="3"
-       x="7"
-       y="8" />
-    <rect
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect2192"
-       width="4"
-       height="1"
-       x="6"
-       y="11"
-       ry="0.5" />
-  </g>
-</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/window-icon.svg	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.43"
-   version="1.0"
-   sodipodi:docbase="/home/hbons/Desktop"
-   sodipodi:docname="online16.svg"
-   inkscape:export-filename="/home/hbons/Desktop/online16.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs4">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2200">
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:1;"
-         offset="0"
-         id="stop2202" />
-      <stop
-         style="stop-color:#d3d7cf;stop-opacity:0;"
-         offset="1"
-         id="stop2204" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2200"
-       id="radialGradient2206"
-       cx="9.9988937"
-       cy="8.963316"
-       fx="9.9988937"
-       fy="8.963316"
-       r="7.003407"
-       gradientTransform="matrix(2.522332,-1.518129e-16,1.517788e-16,2.521765,-17.1904,-22.80154)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2200"
-       id="radialGradient2216"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.83521)"
-       cx="9.9988937"
-       cy="8.963316"
-       fx="9.9988937"
-       fy="8.963316"
-       r="7.003407" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2200"
-       id="radialGradient2225"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.80154)"
-       cx="9.9988937"
-       cy="8.963316"
-       fx="9.9988937"
-       fy="8.963316"
-       r="7.003407" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.4"
-     inkscape:cx="19.950553"
-     inkscape:cy="6.9370146"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     fill="#d3d7cf"
-     inkscape:window-width="1268"
-     inkscape:window-height="971"
-     inkscape:window-x="6"
-     inkscape:window-y="21" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.4918287,12.646495 3.6945395,12.646495 L 4.1281,12.646495 L 4.1281,14.503658 L 6.43139,12.646495 L 12.365748,12.646495 C 13.568459,12.646495 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z "
-       id="path2208" />
-    <path
-       style="opacity:1;fill:url(#radialGradient2206);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.6187431,12.483319 3.8214539,12.483319 L 4.5298235,12.483319 L 4.5298235,14.924652 L 7.3107789,12.51023 L 12.365748,12.50145 C 13.568459,12.50145 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z "
-       id="rect1309"
-       sodipodi:nodetypes="ccccccccccccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="-1.0358232"
-       inkscape:original="M 3.46875 1.5 C 2.371372 1.6186312 1.53125 2.6050398 1.53125 3.8125 L 1.53125 10.3125 C 1.53125 11.600458 2.6097892 12.46875 3.8125 12.46875 L 4.53125 12.46875 L 4.53125 14.9375 L 7.3125 12.5 L 12.375 12.5 C 13.577711 12.5 14.53125 11.600458 14.53125 10.3125 L 14.53125 3.8125 C 14.53125 2.5245424 13.577711 1.5 12.375 1.5 L 3.6875 1.5 C 3.6123307 1.5 3.5419085 1.4920913 3.46875 1.5 z "
-       xlink:href="#rect1309"
-       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path2198"
-       inkscape:href="#rect1309"
-       d="M 4.59375,8.53125 C 4.0502029,8.5900098 3.5625,9.0855072 3.5625,9.8125 L 3.5625,16.3125 C 3.5625,17.022191 4.108328,17.4375 4.8125,17.4375 L 5.53125,17.4375 C 6.0997296,17.440061 6.5599393,17.90027 6.5625,18.46875 L 6.5625,18.65625 L 7.625,17.71875 C 7.8161378,17.554581 8.0605562,17.465702 8.3125,17.46875 L 13.375,17.46875 C 14.06123,17.46875 14.5,17.089211 14.5,16.3125 L 14.5,9.8125 C 14.5,9.0357897 13.98946,8.53125 13.375,8.53125 L 4.6875,8.53125 C 4.5396732,8.5312504 4.5229283,8.5389061 4.59375,8.53125 z " />
-  </g>
-</svg>
Binary file pidgin/pixmaps/toolbar/16/typing.png has changed
Binary file pidgin/pixmaps/toolbar/16/user-info.png has changed
Binary file pidgin/pixmaps/toolbar/16/window-icon.png has changed
Binary file pidgin/pixmaps/tray/16/tray-extended-away.png has changed
Binary file pidgin/pixmaps/tray/22/tray-connecting.png has changed
--- a/pidgin/plugins/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -58,13 +58,13 @@
 .PHONY: all clean plugins install
 
 all: plugins
-#	$(MAKE) -C $(GTKPERL_PLUGIN) -f $(MINGW_MAKEFILE)
+	$(MAKE) -C $(GTKPERL_PLUGIN) -f $(MINGW_MAKEFILE)
 	$(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE)
 	$(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE)
 	$(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE)
 
 install: all $(PIDGIN_INSTALL_PLUGINS_DIR)
-#	$(MAKE) -C $(GTKPERL_PLUGIN) -f $(MINGW_MAKEFILE) install
+	$(MAKE) -C $(GTKPERL_PLUGIN) -f $(MINGW_MAKEFILE) install
 	$(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE) install
 	$(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE) install
 	$(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE) install
--- a/pidgin/plugins/contact_priority.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/contact_priority.c	Sat Apr 28 18:32:47 2007 +0000
@@ -80,7 +80,7 @@
 	PurpleAccount *account = NULL;
 	int i;
 
-	gboolean last_match = purple_prefs_get_bool("/core/contact/last_match");
+	gboolean last_match = purple_prefs_get_bool("/purple/contact/last_match");
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
@@ -95,7 +95,7 @@
 	/* Status Spinboxes */
 	for (i = 0 ; statuses[i].id != NULL && statuses[i].description != NULL ; i++)
 	{
-		char *pref = g_strconcat("/core/status/scores/", statuses[i].id, NULL);
+		char *pref = g_strconcat("/purple/status/scores/", statuses[i].id, NULL);
 
 		hbox = gtk_hbox_new(FALSE, 5);
 		gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
@@ -124,7 +124,7 @@
 
 	check = gtk_check_button_new_with_label(_("Use last buddy when scores are equal"));
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), last_match);
-	g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_update), "/core/contact/last_match");
+	g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_update), "/purple/contact/last_match");
 	gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);
 
 	frame = pidgin_make_frame(ret, _("Point values to use for account..."));
--- a/pidgin/plugins/history.c	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/history.c	Sat Apr 28 18:32:47 2007 +0000
@@ -52,7 +52,7 @@
 
 		/* If we're not logging, don't show anything.
 		 * Otherwise, we might show a very old log. */
-		if (!purple_prefs_get_bool("/core/logging/log_ims"))
+		if (!purple_prefs_get_bool("/purple/logging/log_ims"))
 			return;
 
 		/* Find buddies for this conversation. */
@@ -96,7 +96,7 @@
 	{
 		/* If we're not logging, don't show anything.
 		 * Otherwise, we might show a very old log. */
-		if (!purple_prefs_get_bool("/core/logging/log_chats"))
+		if (!purple_prefs_get_bool("/purple/logging/log_chats"))
 			return;
 
 		logs = purple_log_get_logs(PURPLE_LOG_CHAT, name, account);
@@ -141,8 +141,8 @@
 static void
 history_prefs_check(PurplePlugin *plugin)
 {
-	if (!purple_prefs_get_bool("/core/logging/log_ims") &&
-	    !purple_prefs_get_bool("/core/logging/log_chats"))
+	if (!purple_prefs_get_bool("/purple/logging/log_ims") &&
+	    !purple_prefs_get_bool("/purple/logging/log_chats"))
 	{
 		purple_notify_warning(plugin, NULL, _("History Plugin Requires Logging"),
 							_("Logging can be enabled from Tools -> Preferences -> Logging.\n\n"
@@ -164,9 +164,9 @@
 						"conversation-created",
 						plugin, PURPLE_CALLBACK(historize), NULL);
 
-	purple_prefs_connect_callback(plugin, "/core/logging/log_ims",
+	purple_prefs_connect_callback(plugin, "/purple/logging/log_ims",
 								history_prefs_cb, plugin);
-	purple_prefs_connect_callback(plugin, "/core/logging/log_chats",
+	purple_prefs_connect_callback(plugin, "/purple/logging/log_chats",
 								history_prefs_cb, plugin);
 
 	history_prefs_check(plugin);
--- a/pidgin/plugins/perl/Makefile.am	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/perl/Makefile.am	Sat Apr 28 18:32:47 2007 +0000
@@ -24,10 +24,10 @@
 	common/GtkSound.xs \
 	common/GtkStatusBox.xs \
 	common/GtkThemes.xs \
-	common/GtkUI.pm \
-	common/GtkUI.xs \
 	common/GtkUtils.xs \
 	common/Makefile.PL.in \
+	common/Pidgin.pm \
+	common/Pidgin.xs \
 	common/gtkmodule.h \
 	common/typemap
 
--- a/pidgin/plugins/perl/common/GtkSession.xs	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/perl/common/GtkSession.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -1,6 +1,6 @@
 #include "gtkmodule.h"
 
-MODULE = Purple::GtkUI::Session  PACKAGE = Purple::GtkUI::Session  PREFIX = gaim_gtk_session_
+MODULE = Pidgin::Session  PACKAGE = Pidgin::Session  PREFIX = pidgin_session_
 PROTOTYPES: ENABLE
 
 void
--- a/pidgin/plugins/perl/common/GtkStatusBox.xs	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/perl/common/GtkStatusBox.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -37,13 +37,9 @@
 	Pidgin::StatusBox status_box
 
 void
-pidgin_status_box_set_buddy_icon(status_box, filename)
+pidgin_status_box_set_buddy_icon(status_box, img)
 	Pidgin::StatusBox status_box
-	const char * filename
-
-const char *
-pidgin_status_box_get_buddy_icon(status_box)
-	Pidgin::StatusBox status_box
+	Purple::StoredImage img
 
 gchar_own *
 pidgin_status_box_get_message(status_box)
--- a/pidgin/plugins/perl/common/GtkUI.pm	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-package Purple::GtkUI;
-
-use 5.008;
-use strict;
-use warnings;
-use Carp;
-
-our $VERSION = '0.01';
-
-use Purple;
-
-require XSLoader;
-XSLoader::load('Purple::GtkUI', $VERSION);
-
-1;
-__END__
-
-=head1 NAME
-
-Purple::GtkUI - Perl extension for the Pidgin instant messenger.
-
-=head1 SYNOPSIS
-
-    use Purple::GtkUI;
-
-=head1 ABSTRACT
-
-    This module provides the interface for using perl scripts as plugins in
-    Pidgin, with access to the Pidgin Gtk interface functions.
-
-=head1 DESCRIPTION
-
-This module provides the interface for using perl scripts as plugins in Pidgin,
-with access to the Pidgin Gtk interface functions. With this, developers can
-write perl scripts that can be loaded in Pidgin as plugins. The script can
-interact with IMs, chats, accounts, the buddy list, pidgin signals, and more.
-
-The API for the perl interface is very similar to that of the Pidgin C API,
-which can be viewed at http://developer.pidgin.im/doxygen/ or in the header files
-in the Pidgin source tree.
-
-=head1 FUNCTIONS
-
-=over
-
-=back
-
-=head1 SEE ALSO
-Pidgin C API documentation - http://developer.pidgin.im/doxygen/
-
-The Pidgin perl module.
-
-Pidgin website - http://pidgin.im/
-
-=head1 AUTHOR
-
-Etan Reisner, E<lt>deryni@gmail.comE<gt>
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2006 by Etan Reisner
--- a/pidgin/plugins/perl/common/GtkUI.xs	Wed Apr 25 06:11:35 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#include "gtkmodule.h"
-
-/* Prototypes for the BOOT section below. */
-PURPLE_PERL_BOOT_PROTO(GtkUI__Account);
-PURPLE_PERL_BOOT_PROTO(GtkUI__BuddyList);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Connection);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Conversation);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Conversation__Window);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Debug);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Dialogs);
-PURPLE_PERL_BOOT_PROTO(GtkUI__IMHtml);
-PURPLE_PERL_BOOT_PROTO(GtkUI__IMHtmlToolbar);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Log);
-PURPLE_PERL_BOOT_PROTO(GtkUI__MenuTray);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Plugin);
-PURPLE_PERL_BOOT_PROTO(GtkUI__PluginPref);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Pounce);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Prefs);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Privacy);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Roomlist);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Status);
-#ifndef _WIN32
-PURPLE_PERL_BOOT_PROTO(GtkUI__Session);
-#endif
-PURPLE_PERL_BOOT_PROTO(GtkUI__Sound);
-PURPLE_PERL_BOOT_PROTO(GtkUI__StatusBox);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Themes);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Utils);
-PURPLE_PERL_BOOT_PROTO(GtkUI__Xfer);
-
-MODULE = Purple::GtkUI  PACKAGE = Purple::GtkUI  PREFIX = pidgin_
-PROTOTYPES: ENABLE
-
-BOOT:
-	PURPLE_PERL_BOOT(GtkUI__Account);
-	PURPLE_PERL_BOOT(GtkUI__BuddyList);
-	PURPLE_PERL_BOOT(GtkUI__Connection);
-	PURPLE_PERL_BOOT(GtkUI__Conversation);
-	PURPLE_PERL_BOOT(GtkUI__Conversation__Window);
-	PURPLE_PERL_BOOT(GtkUI__Debug);
-	PURPLE_PERL_BOOT(GtkUI__Dialogs);
-	PURPLE_PERL_BOOT(GtkUI__IMHtml);
-	PURPLE_PERL_BOOT(GtkUI__IMHtmlToolbar);
-	PURPLE_PERL_BOOT(GtkUI__Log);
-	PURPLE_PERL_BOOT(GtkUI__MenuTray);
-	PURPLE_PERL_BOOT(GtkUI__Plugin);
-	PURPLE_PERL_BOOT(GtkUI__PluginPref);
-	PURPLE_PERL_BOOT(GtkUI__Pounce);
-	PURPLE_PERL_BOOT(GtkUI__Prefs);
-	PURPLE_PERL_BOOT(GtkUI__Privacy);
-	PURPLE_PERL_BOOT(GtkUI__Roomlist);
-	PURPLE_PERL_BOOT(GtkUI__Status);
-#ifndef _WIN32
-	PURPLE_PERL_BOOT(GtkUI__Session);
-#endif
-	PURPLE_PERL_BOOT(GtkUI__Sound);
-	PURPLE_PERL_BOOT(GtkUI__StatusBox);
-	PURPLE_PERL_BOOT(GtkUI__Themes);
-	PURPLE_PERL_BOOT(GtkUI__Utils);
-	PURPLE_PERL_BOOT(GtkUI__Xfer);
--- a/pidgin/plugins/perl/common/GtkUtils.xs	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/perl/common/GtkUtils.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -11,6 +11,7 @@
 pidgin_load_accels()
 
 gchar_own *
-pidgin_convert_buddy_icon(plugin, path)
+pidgin_convert_buddy_icon(plugin, path, size)
 	Purple::Plugin plugin
 	const char * path
+	size_t *size
--- a/pidgin/plugins/perl/common/MANIFEST	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/perl/common/MANIFEST	Sat Apr 28 18:32:47 2007 +0000
@@ -21,8 +21,8 @@
 GtkSound.xs
 GtkStatusBox.xs
 GtkThemes.xs
-GtkUI.pm
-GtkUI.xs
 GtkUtils.xs
 MANIFEST
+Pidgin.pm
+Pidgin.xs
 typemap
--- a/pidgin/plugins/perl/common/Makefile.PL.in	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/perl/common/Makefile.PL.in	Sat Apr 28 18:32:47 2007 +0000
@@ -1,20 +1,16 @@
 use 5.006;
 use ExtUtils::MakeMaker;
-
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence the contents
+# of the Makefile that is written.
 WriteMakefile(
-    'NAME'          => 'Purple::GtkUI',
-    'VERSION_FROM'  => '@srcdir@/GtkUI.pm', # finds $VERSION
+    'NAME'             => 'Pidgin',
+    'VERSION_FROM'     => '@srcdir@/Pidgin.pm', # finds $VERSION
     ($] >= 5.005 ? ## Add these new keywords supported since 5.005
-	('ABSTRACT_FROM' => '@srcdir@/GtkUI.pm', # finds $ABSTRACT
-	'AUTHOR'        => 'Pidgin <http://pidgin.im/>') :  ()),
+      ('ABSTRACT_FROM' => '@srcdir@/Pidgin.pm', # finds $ABSTRACT
+       'AUTHOR'        => 'Pidgin <http://pidgin.im/>') :  ()),
     'DEFINE'        => '@DEBUG_CFLAGS@',
     'INC'           => '-I. -I@srcdir@ -I@top_srcdir@ -I@top_srcdir@/libpurple -I@top_srcdir@/pidgin @GTK_CFLAGS@',
-#    'PREREQ_PM'     => { 'Pidgin' => '@VERSION@'},
-    # Do this because the MakeMaker Makefile is dumb, and on clean it moves
-    # Makefile to the default setting for MAKEFILE_OLD which is Makefile.old
-    # but this breaks running make clean more than once in a row.
-    'MAKEFILE_OLD'  => "Makefile",
-    'OBJECT'        => '$(O_FILES)',
+    'OBJECT'        => '$(O_FILES)', # link all the C files too
     'TYPEMAPS'      => ["@top_srcdir@/libpurple/plugins/perl/common/typemap"],
 #    'OPTIMIZE'      => '-g', # For debugging.
 );
--- a/pidgin/plugins/perl/common/Makefile.mingw	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/plugins/perl/common/Makefile.mingw	Sat Apr 28 18:32:47 2007 +0000
@@ -39,7 +39,7 @@
 ##  SOURCES, OBJECTS
 ##
 XS_FILES = \
-	GtkUI.xs \
+	Pidgin.xs \
 	GtkAccount.xs \
 	GtkBlist.xs \
 	GtkConn.xs \
@@ -91,8 +91,8 @@
 
 install: all $(PURPLE_INSTALL_PERLMOD_DIR)/Purple.pm
 	rm -f $(PIDGIN_INSTALL_PERLMOD_DIR)/$(TARGET).dll $(PIDGIN_INSTALL_PERLMOD_DIR)/Pidgin/$(TARGET).pm
-	mkdir -p $(PIDGIN_INSTALL_PERLMOD_DIR)/Pidgin
-	cp $(TARGET).pm $(PIDGIN_INSTALL_PERLMOD_DIR)/Pidgin/
+	mkdir -p $(PIDGIN_INSTALL_PERLMOD_DIR)
+	cp $(TARGET).pm $(PIDGIN_INSTALL_PERLMOD_DIR)
 	cp $(TARGET).dll $(PIDGIN_INSTALL_PERLMOD_DIR)
 
 $(C_FILES): $(PIDGIN_CONFIG_H)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/plugins/perl/common/Pidgin.pm	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,61 @@
+package Pidgin;
+
+use 5.008;
+use strict;
+use warnings;
+use Carp;
+
+our $VERSION = '0.01';
+
+use Purple;
+
+require XSLoader;
+XSLoader::load('Pidgin', $VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+Pidgin - Perl extension for the Pidgin instant messenger.
+
+=head1 SYNOPSIS
+
+    use Pidgin;
+
+=head1 ABSTRACT
+
+    This module provides the interface for using perl scripts as plugins in
+    Pidgin, with access to the Pidgin Gtk interface functions.
+
+=head1 DESCRIPTION
+
+This module provides the interface for using perl scripts as plugins in Pidgin,
+with access to the Pidgin Gtk interface functions. With this, developers can
+write perl scripts that can be loaded in Pidgin as plugins. The script can
+interact with IMs, chats, accounts, the buddy list, pidgin signals, and more.
+
+The API for the perl interface is very similar to that of the Pidgin C API,
+which can be viewed at http://developer.pidgin.im/doxygen/ or in the header files
+in the Pidgin source tree.
+
+=head1 FUNCTIONS
+
+=over
+
+=back
+
+=head1 SEE ALSO
+Pidgin C API documentation - http://developer.pidgin.im/doxygen/
+
+The Pidgin perl module.
+
+Pidgin website - http://pidgin.im/
+
+=head1 AUTHOR
+
+Etan Reisner, E<lt>deryni@gmail.comE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2006 by Etan Reisner
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/plugins/perl/common/Pidgin.xs	Sat Apr 28 18:32:47 2007 +0000
@@ -0,0 +1,66 @@
+#define PIDGIN_PERL_BOOT_PROTO(x) \
+	void boot_Pidgin__##x(pTHX_ CV *cv)
+
+#define PIDGIN_PERL_BOOT(x) \
+	purple_perl_callXS(boot_Pidgin__##x, cv, mark)
+
+#include "gtkmodule.h"
+
+/* Prototypes for the BOOT section below. */
+PIDGIN_PERL_BOOT_PROTO(Account);
+PIDGIN_PERL_BOOT_PROTO(BuddyList);
+PIDGIN_PERL_BOOT_PROTO(Connection);
+PIDGIN_PERL_BOOT_PROTO(Conversation);
+PIDGIN_PERL_BOOT_PROTO(Conversation__Window);
+PIDGIN_PERL_BOOT_PROTO(Debug);
+PIDGIN_PERL_BOOT_PROTO(Dialogs);
+PIDGIN_PERL_BOOT_PROTO(IMHtml);
+PIDGIN_PERL_BOOT_PROTO(IMHtmlToolbar);
+PIDGIN_PERL_BOOT_PROTO(Log);
+PIDGIN_PERL_BOOT_PROTO(MenuTray);
+PIDGIN_PERL_BOOT_PROTO(Plugin);
+PIDGIN_PERL_BOOT_PROTO(PluginPref);
+PIDGIN_PERL_BOOT_PROTO(Pounce);
+PIDGIN_PERL_BOOT_PROTO(Prefs);
+PIDGIN_PERL_BOOT_PROTO(Privacy);
+PIDGIN_PERL_BOOT_PROTO(Roomlist);
+PIDGIN_PERL_BOOT_PROTO(Status);
+#ifndef _WIN32
+PIDGIN_PERL_BOOT_PROTO(Session);
+#endif
+PIDGIN_PERL_BOOT_PROTO(Sound);
+PIDGIN_PERL_BOOT_PROTO(StatusBox);
+PIDGIN_PERL_BOOT_PROTO(Themes);
+PIDGIN_PERL_BOOT_PROTO(Utils);
+PIDGIN_PERL_BOOT_PROTO(Xfer);
+
+MODULE = Pidgin  PACKAGE = Pidgin  PREFIX = pidgin_
+PROTOTYPES: ENABLE
+
+BOOT:
+	PIDGIN_PERL_BOOT(Account);
+	PIDGIN_PERL_BOOT(BuddyList);
+	PIDGIN_PERL_BOOT(Connection);
+	PIDGIN_PERL_BOOT(Conversation);
+	PIDGIN_PERL_BOOT(Conversation__Window);
+	PIDGIN_PERL_BOOT(Debug);
+	PIDGIN_PERL_BOOT(Dialogs);
+	PIDGIN_PERL_BOOT(IMHtml);
+	PIDGIN_PERL_BOOT(IMHtmlToolbar);
+	PIDGIN_PERL_BOOT(Log);
+	PIDGIN_PERL_BOOT(MenuTray);
+	PIDGIN_PERL_BOOT(Plugin);
+	PIDGIN_PERL_BOOT(PluginPref);
+	PIDGIN_PERL_BOOT(Pounce);
+	PIDGIN_PERL_BOOT(Prefs);
+	PIDGIN_PERL_BOOT(Privacy);
+	PIDGIN_PERL_BOOT(Roomlist);
+	PIDGIN_PERL_BOOT(Status);
+#ifndef _WIN32
+	PIDGIN_PERL_BOOT(Session);
+#endif
+	PIDGIN_PERL_BOOT(Sound);
+	PIDGIN_PERL_BOOT(StatusBox);
+	PIDGIN_PERL_BOOT(Themes);
+	PIDGIN_PERL_BOOT(Utils);
+	PIDGIN_PERL_BOOT(Xfer);
--- a/pidgin/win32/nsis/langmacros.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/langmacros.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -40,11 +40,6 @@
   ; Components Page
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SECTION_TITLE			${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_SECTION_TITLE			${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_THEMES_SECTION_TITLE		${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_NOTHEME_SECTION_TITLE		${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_WIMP_SECTION_TITLE		${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_BLUECURVE_SECTION_TITLE		${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_LIGHTHOUSEBLUE_SECTION_TITLE	${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SHORTCUTS_SECTION_TITLE	${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE ${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	${CUR_LANG}
@@ -69,9 +64,6 @@
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_INSTALL_ERROR			${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_BAD_INSTALL_PATH		${CUR_LANG}
 
-  ; GTK+ Themes section
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_NO_THEME_INSTALL_RIGHTS		${CUR_LANG}
-
   ; URI Handler section
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT URI_HANDLERS_SECTION_TITLE		${CUR_LANG}
 
--- a/pidgin/win32/nsis/pidgin-installer.nsi	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/pidgin-installer.nsi	Sat Apr 28 18:32:47 2007 +0000
@@ -326,7 +326,6 @@
 
 !ifdef WITH_GTK
 Section $(GTK_SECTION_TITLE) SecGtk
-  SectionIn 1 RO
 
   Call CheckUserInstallRights
   Pop $R1
@@ -1065,11 +1064,11 @@
       StrCmp $1 "HKCU" 0 +2   ; if HKLM can upgrade..
       StrCmp $2 "HKLM" no_gtk ; have hkcu rights.. if found hklm ver can't upgrade..
       Push $2
-    IntCmp $3 1 +3
-      Push "1" ; Optional Upgrade
-      Goto done
-      Push "2" ; Mandatory Upgrade
-      Goto done
+      IntCmp $3 1 +3
+        Push "1" ; Optional Upgrade
+        Goto done
+        Push "2" ; Mandatory Upgrade
+        Goto done
 
   good_version:
     StrCmp $2 "HKLM" have_hklm_gtk have_hkcu_gtk
@@ -1095,11 +1094,11 @@
   done:
   ; The top two items on the stack are what we want to return
   Exch 4
+  Pop $1
+  Exch 4
   Pop $0
-  Exch 4
   Pop $3
   Pop $2
-  Pop $1
 FunctionEnd
 
 
@@ -1199,6 +1198,7 @@
     StrCpy $INSTDIR "$R2\Pidgin"
 
   instdir_done:
+;LogSet on
   Pop $R0
 FunctionEnd
 
@@ -1275,7 +1275,7 @@
 ; Page enter and exit functions..
 
 Function preWelcomePage
-  Push R0
+  Push $R0
 
 !ifndef WITH_GTK
   ; If this installer dosn't have GTK, check whether we need it.
@@ -1292,7 +1292,16 @@
   done:
 
 !else
-  Push R1
+  Push $R1
+  Push $R2
+
+  ; Make the GTK+ Section RO if it is required.
+  Call DoWeNeedGtk
+  Pop $R0
+  Pop $R2
+  IntCmp $R0 1 gtk_not_mandatory gtk_not_mandatory
+    !insertmacro SetSectionFlag ${SecGtk} ${SF_RO}
+  gtk_not_mandatory:
 
   ; If on Win95/98/ME warn them that the GTK+ version wont work
   Call GetWindowsVersion
@@ -1304,22 +1313,13 @@
 
   win_ver_bad:
     !insertmacro UnselectSection ${SecGtk}
-    !insertmacro SetSectionFlag ${SecGtkNone} ${SF_RO}
-    !insertmacro UnselectSection ${SecGtkNone}
-    !insertmacro SetSectionFlag ${SecGtkWimp} ${SF_RO}
-    !insertmacro UnselectSection ${SecGtkWimp}
-    !insertmacro SetSectionFlag ${SecGtkBluecurve} ${SF_RO}
-    !insertmacro UnselectSection ${SecGtkBluecurve}
-    !insertmacro SetSectionFlag ${SecGtkLighthouseblue} ${SF_RO}
-    !insertmacro UnselectSection ${SecGtkLighthouseblue}
+    !insertmacro SetSectionFlag ${SecGtk} ${SF_RO}
     MessageBox MB_OK $(GTK_WINDOWS_INCOMPATIBLE) /SD IDOK
-    Call DoWeNeedGtk
-    Pop $R0
-    Pop $R1
     IntCmp $R0 1 done done ; Upgrade isn't optional - abort if we don't have a suitable version
     Quit
 
   done:
+  Pop $R2
   Pop $R1
 !endif
   Pop $R0
Binary file pidgin/win32/nsis/pixmaps/pidgin-header.bmp has changed
Binary file pidgin/win32/nsis/pixmaps/pidgin-install.ico has changed
Binary file pidgin/win32/nsis/pixmaps/pidgin-intro.bmp has changed
--- a/pidgin/win32/nsis/translations/albanian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/albanian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Klient Shkëmbimi Mesazhesh të Atypëratyshëm Pidgin (i nevojshëm)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Environment (i nevojshëm)"
-!define GTK_THEMES_SECTION_TITLE		"Tema GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Pa Tema"
-!define GTK_WIMP_SECTION_TITLE		"Temë Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Temë Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Temë Light House Blue"
 !define PIDGIN_SECTION_DESCRIPTION		"Kartela dhe dll bazë të Pidgin-it"
 !define GTK_SECTION_DESCRIPTION		"Një grup mjetesh shumëplatformësh për GUI, përdorur nga Pidgin-i"
 
@@ -40,9 +35,6 @@
 !define GTK_INSTALL_ERROR			"gabim gjatë instalimit të GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Shtegu që treguat nuk mund të arrihet ose krijohet."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Nuk keni leje të instaloni tema GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Çinstaluesi nuk gjeti dot zëra regjistri për Pidgin-in.$\rKa mundësi që këtë zbatim ta ketë instaluar një tjetër përdorues."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Nuk keni leje të çinstaloni këtë zbatim."
--- a/pidgin/win32/nsis/translations/bulgarian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/bulgarian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -14,11 +14,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin     ( )"
 !define GTK_SECTION_TITLE			"GTK+ Runtime  (required)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ "
-!define GTK_NOTHEME_SECTION_TITLE		" "
-!define GTK_WIMP_SECTION_TITLE			"Wimp "
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve "
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue "
 !define PIDGIN_SECTION_DESCRIPTION		"    Pidgin  "
 !define GTK_SECTION_DESCRIPTION			"    ,   Pidgin"
 
@@ -33,9 +28,6 @@
 !define GTK_INSTALL_ERROR			"    GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"        ."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"     GTK+ ."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"         Pidgin.$\r      ."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"     ."
--- a/pidgin/win32/nsis/translations/catalan.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/catalan.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -21,11 +21,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Client Pidgin de Missatgeria Instantnia (necessari)"
 !define GTK_SECTION_TITLE			"Entorn d'Execuci GTK+ (necessari)"
-!define GTK_THEMES_SECTION_TITLE		"Temes GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Sense tema"
-!define GTK_WIMP_SECTION_TITLE			"Tema Imwi"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema Corba Blava"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema Light House Blue"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"Enllaos directes"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Escriptori"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Menu Inici"
@@ -51,9 +46,6 @@
 !define GTK_INSTALL_ERROR			"Error installlant l'entorn d'execuci GTK+."
 !define GTK_BAD_INSTALL_PATH			"El directori que has introdut no pot sser accedit o creat."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"No tens permisos per instal.lar un tema GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"L'instal.lador podria no trobar les entrades del registre de Pidgin.$\rProbablement un altre usuari ha instal.lat aquesta aplicaci."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"No tens perms per desinstal.lar aquesta aplicaci."
--- a/pidgin/win32/nsis/translations/czech.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/czech.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (nutn)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Environment (nutn)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ tmata"
-!define GTK_NOTHEME_SECTION_TITLE		"Bez tmat"
-!define GTK_WIMP_SECTION_TITLE		"Wimp tma"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve tma"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue tma"
 !define PIDGIN_SECTION_DESCRIPTION		"Zkladn soubory a DLL pro Pidgin"
 !define GTK_SECTION_DESCRIPTION		"Multi-platform GUI toolkit pouvan Pidginem"
 
@@ -40,9 +35,6 @@
 !define GTK_INSTALL_ERROR			"Chyba pi instalaci GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Zadan cesta je nedostupn, nebo ji nelze vytvoit."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Nemte oprvnn k instalaci GTK+ tmatu."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Odinstaln proces neme najt zznamy pro Pidgin v registrech.$\rPravdpodobn instalaci tto aplikace provedl jin uivatel."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Nemte oprvnn k odinstalaci tto aplikace."
--- a/pidgin/win32/nsis/translations/danish.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/danish.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (obligatorisk)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Environment (obligatorisk)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ Temaer"
-!define GTK_NOTHEME_SECTION_TITLE		"Intet Tema"
-!define GTK_WIMP_SECTION_TITLE		"Wimp Tema"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve Tema"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue Tema"
 !define PIDGIN_SECTION_DESCRIPTION		"Basale Pidgin filer og biblioteker"
 !define GTK_SECTION_DESCRIPTION		"Et multi-platform grafisk interface udviklingsvrktj, bruges af Pidgin"
 
@@ -40,9 +35,6 @@
 !define GTK_INSTALL_ERROR			"Fejl under installeringen af GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Stien du har angivet kan ikke findes eller oprettes."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Du har ikke tilladelse til at installere et GTK+ tema."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Afinstallationen kunne ikke finde Pidgin i registreringsdatabasen.$\rMuligvis har en anden bruger installeret programmet."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Du har ikke tilladelse til at afinstallere dette program."
--- a/pidgin/win32/nsis/translations/dutch.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/dutch.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -21,11 +21,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (vereist)"
 !define GTK_SECTION_TITLE			"GTK+ runtime-omgeving (vereist)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ thema's"
-!define GTK_NOTHEME_SECTION_TITLE		"Geen thema"
-!define GTK_WIMP_SECTION_TITLE		"Wimp thema"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve thema"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue thema"
 !define PIDGIN_SECTION_DESCRIPTION		"Pidgin hoofdbestanden en dlls"
 !define GTK_SECTION_DESCRIPTION		"Een multi-platform gebruikersinterface, gebruikt door Pidgin"
 
@@ -43,9 +38,6 @@
 !define GTK_INSTALL_ERROR			"Fout bij installatie van GTK+ runtime omgeving."
 !define GTK_BAD_INSTALL_PATH			"Het door u gegeven pad kan niet benaderd worden."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"U heeft geen toestemming om een GTK+ thema te installeren."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Het verwijderingsprogramma voor Pidgin kon geen register-ingangen voor Pidgin vinden.$\rWaarschijnlijk heeft een andere gebruiker het programma genstalleerd."
 !define un.PIDGIN_UNINSTALL_ERROR_2         "U mag dit programma niet verwijderen."
--- a/pidgin/win32/nsis/translations/english.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/english.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -22,12 +22,7 @@
 
 ; Components Page
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (required)"
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_SECTION_TITLE			"GTK+ Runtime Environment (required)"
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_THEMES_SECTION_TITLE		"GTK+ Themes"
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_NOTHEME_SECTION_TITLE		"No Theme"
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_WIMP_SECTION_TITLE			"MS-Windows (WIMP) Theme"
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_BLUECURVE_SECTION_TITLE		"Bluecurve Theme"
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue Theme"
+!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_SECTION_TITLE			"GTK+ Runtime (required if not present)"
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_SHORTCUTS_SECTION_TITLE		"Shortcuts"
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Desktop"
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Start Menu"
@@ -53,9 +48,6 @@
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_INSTALL_ERROR			"Error installing GTK+ runtime."
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_BAD_INSTALL_PATH			"The path you entered can not be accessed or created."
 
-; GTK+ Themes section
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_NO_THEME_INSTALL_RIGHTS		"You do not have permission to install a GTK+ theme."
-
 ; URL Handler section
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING URI_HANDLERS_SECTION_TITLE		"URI Handlers"
 
--- a/pidgin/win32/nsis/translations/finnish.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/finnish.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Suoraviestintohjelma (required)"
 !define GTK_SECTION_TITLE			"GTK+ runtime ymprist (required)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ Teemat"
-!define GTK_NOTHEME_SECTION_TITLE		"Ei teemaa"
-!define GTK_WIMP_SECTION_TITLE		"Wimp Teema"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve Teema"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue Teema"
 !define PIDGIN_SECTION_DESCRIPTION		"Pidfinin ytimen tiedostot ja dll:t"
 !define GTK_SECTION_DESCRIPTION		"Monipohjainen GUI (kyttjulkoasu) tykalupakki, Pidginin kyttm"
 
@@ -39,9 +34,6 @@
 !define GTK_INSTALL_ERROR			"Virhe asennettaessa GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Antamasi polku ei toimi tai sit ei voi luoda."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Sinulla ei ole valtuuksia asentaa GTK+ teemaa."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Asennuksen poistaja ei lytnyt reksiterist tietoja Pidginista.$\rOn todennkist ett joku muu kyttj on asentanut ohjelman."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Sinulla ei ole valtuuksia poistaa ohjelmaa."
--- a/pidgin/win32/nsis/translations/french.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/french.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -24,11 +24,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin client de messagerie instantane (obligatoire)"
 !define GTK_SECTION_TITLE			"Bibliothques GTK+ (obligatoire)"
-!define GTK_THEMES_SECTION_TITLE		"Thmes GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Pas de thme"
-!define GTK_WIMP_SECTION_TITLE			"Thme Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Thme Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Thme Light House Blue"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"Raccourcis"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Bureau"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Menu Dmarrer"
@@ -52,9 +47,6 @@
 !define GTK_INSTALL_ERROR			"Erreur lors de l'installation des bibliothques GTK+"
 !define GTK_BAD_INSTALL_PATH			"Le dossier d'installation ne peut pas tre cr ou n'est pas accessible."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Vous n'avez pas les permissions pour installer un thme GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Le programme de dsinstallation n'a pas retrouv les entres de Pidgin dans la base de registres.$\rL'application a peut-tre t installe par un utilisateur diffrent."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Vous n'avez pas les permissions pour supprimer cette application."
--- a/pidgin/win32/nsis/translations/galician.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/galician.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Cliente de mensaxera instantnea de Pidgin (necesario)"
 !define GTK_SECTION_TITLE			"Entorno de execucin de GTK+ (necesario)"
-!define GTK_THEMES_SECTION_TITLE		"Temas GTK+" 
-!define GTK_NOTHEME_SECTION_TITLE		"Sen tema"
-!define GTK_WIMP_SECTION_TITLE		"Tema Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema Light House Blue"
 !define PIDGIN_SECTION_DESCRIPTION		"Ficheiros e dlls principais de Core"
 !define GTK_SECTION_DESCRIPTION		"Unha suite de ferramentas GUI multiplataforma, utilizada por Pidgin"
 
@@ -40,9 +35,6 @@
 !define GTK_INSTALL_ERROR			"Erro ao instalar o executable GTK+."
 !define GTK_BAD_INSTALL_PATH			"Non se puido acceder ou crear a ruta que vd. indicou."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Non ten permisos para instalar un tema GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "O desinstalador non puido atopar as entradas no rexistro de Pidgin.$\r probable que outro usuario instalara a aplicacin."
 !define un.PIDGIN_UNINSTALL_ERROR_2         "Non ten permisos para desinstalar esta aplicacin."
--- a/pidgin/win32/nsis/translations/german.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/german.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -21,11 +21,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (erforderlich)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Umgebung (erforderlich)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ Themen"
-!define GTK_NOTHEME_SECTION_TITLE		"Kein Thema"
-!define GTK_WIMP_SECTION_TITLE		"Wimp Thema"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve Thema"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue Thema"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE	"Verknpfungen"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Desktop"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Startmen"
@@ -48,9 +43,6 @@
 ; GTK+ Section Prompts
 !define GTK_INSTALL_ERROR			"Fehler beim Installieren der GTK+ Runtime."
 !define GTK_BAD_INSTALL_PATH			"Der Pfad, den Sie eingegeben haben, existiert nicht und kann nicht erstellt werden."
- 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Sie haben keine Berechtigung, ein GTK+ Thema zu installieren."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Der Deinstaller konnte keine Registrierungsschlssel fr Pidgin finden.$\rEs ist wahrscheinlich, da ein anderer Benutzer diese Anwendung installiert hat."
--- a/pidgin/win32/nsis/translations/hebrew.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/hebrew.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"() .Pidgin "
 !define GTK_SECTION_TITLE			"() .GTK+ "
-!define GTK_THEMES_SECTION_TITLE		"GTK+  "
-!define GTK_NOTHEME_SECTION_TITLE		" "
-!define GTK_WIMP_SECTION_TITLE		"Wimp "
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve "
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue "
 !define PIDGIN_SECTION_DESCRIPTION		". DLL- Pidgin "
 !define GTK_SECTION_DESCRIPTION		".- GUI "
 
@@ -39,9 +34,6 @@
 !define GTK_INSTALL_ERROR			".GTK+   "
 !define GTK_BAD_INSTALL_PATH			".    "
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		".GTK+      "
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		".GTK+      $\r.       "
 !define un.PIDGIN_UNINSTALL_ERROR_2		".     "
--- a/pidgin/win32/nsis/translations/hungarian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/hungarian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -20,11 +20,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin azonnali zen kliens (szksges)"
 !define GTK_SECTION_TITLE			"GTK+ futtat krnyezet (szksges)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ tmk"
-!define GTK_NOTHEME_SECTION_TITLE		"Nincs tma"
-!define GTK_WIMP_SECTION_TITLE			"Wimp tma"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve tma"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue tma"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"Parancsikonok"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Asztal"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Start Men"
@@ -51,9 +46,6 @@
 !define GTK_INSTALL_ERROR			"Hiba a GTK+ futtatkrnyezet teleptse kzben."
 !define GTK_BAD_INSTALL_PATH			"A megadott elrsi t nem rhet el, vagy nem hozhat ltre."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Nincs jogosultsga a GTK+ tmk teleptshez."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Az eltvolt nem tallta a Pidgin registry bejegyzseket.$\rValsznleg egy msik felhasznl teleptette az alkalmazst."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Nincs jogosultsga az alkalmazs eltvoltshoz."
--- a/pidgin/win32/nsis/translations/italian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/italian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin - Client per Messaggi Immediati (richiesto)"
 !define GTK_SECTION_TITLE			"Ambiente di Runtime GTK+ (richiesto)"
-!define GTK_THEMES_SECTION_TITLE		"Temi GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Nessun Tema"
-!define GTK_WIMP_SECTION_TITLE		"Tema Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema Light House Blue"
 !define PIDGIN_SECTION_DESCRIPTION		"File principali di Pidgin e dll"
 !define GTK_SECTION_DESCRIPTION		"Un toolkit multipiattaforma per interfacce grafiche, usato da Pidgin"
 
@@ -39,9 +34,6 @@
 !define GTK_INSTALL_ERROR			"Errore di installazione di GTK+."
 !define GTK_BAD_INSTALL_PATH			"Il percorso scelto non pu essere raggiunto o creato."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Non hai il permesso per installare un tema GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "Il programma di rimozione non  in grado di trovare le voci di registro per Pidgin.$\rProbabilmente un altro utente ha installato questa applicazione."
 !define un.PIDGIN_UNINSTALL_ERROR_2         "Non hai il permesso per rimuovere questa applicazione."
--- a/pidgin/win32/nsis/translations/japanese.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/japanese.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -21,11 +21,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"PidginCX^gbZW (K{)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Environment (K{)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+̃e[}"
-!define GTK_NOTHEME_SECTION_TITLE		"e[}Ȃ"
-!define GTK_WIMP_SECTION_TITLE			"Wimpe[}"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurvee[}"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Bluee[}"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"V[gJbg"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"fXNgbv"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"X^[gAbv"
@@ -50,9 +45,6 @@
 !define GTK_INSTALL_ERROR			"GTK+^C̃CXg[ŃG[܂B"
 !define GTK_BAD_INSTALL_PATH			"Ȃ̓͂pXɃANZX܂͍쐬ł܂B"
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"ȂGTK+̃e[}CXg[錠Ă܂B"
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"ACXg[PidgiñWXgGg𔭌ł܂łB$\r炭ʂ̃[UɃCXg[ꂽł傤B"
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Ȃ͂̃AvP[VACXg[錠Ă܂B"
--- a/pidgin/win32/nsis/translations/korean.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/korean.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -13,11 +13,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			" ޽ (ʼ)"
 !define GTK_SECTION_TITLE			"GTK+ Ÿ ȯ (ʼ)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ ׸"
-!define GTK_NOTHEME_SECTION_TITLE		"׸ "
-!define GTK_WIMP_SECTION_TITLE		" ׸"
-!define GTK_BLUECURVE_SECTION_TITLE		"Ŀ ׸"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue ׸"
 !define PIDGIN_SECTION_DESCRIPTION		" ھ ϰ dll"
 !define GTK_SECTION_DESCRIPTION		" ϴ Ƽ ÷ GUI Ŷ"
 
@@ -31,9 +26,6 @@
 !define GTK_INSTALL_ERROR			"GTK+ Ÿ ġ   ߻."
 !define GTK_BAD_INSTALL_PATH			"ԷϽ ο   ų   ϴ."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"GTK+ ׸ ġ  ϴ."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "ν緯  Ʈ Ʈ ã  ϴ.$\r α׷ ٸ   ġ  ϴ."
 !define un.PIDGIN_UNINSTALL_ERROR_2         " α׷   ִ  ϴ."
--- a/pidgin/win32/nsis/translations/kurdish.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/kurdish.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -21,11 +21,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (pwst)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Environment (pwst)"
-!define GTK_THEMES_SECTION_TITLE		"Dirbn GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Dirb tunebe"
-!define GTK_WIMP_SECTION_TITLE		"Dirb Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE	"Dirb Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Dirb Light House Blue"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE "Riyn kin"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE "Sermas"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "Menuya destpk"
@@ -49,9 +44,6 @@
 !define GTK_INSTALL_ERROR			"Di sazkirina GTK+ de ewt derket."
 !define GTK_BAD_INSTALL_PATH			"rya te nivsand nay gihitin an afirandin."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS	"Destra sazkirina dirbek GTK+ tune."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Raker tketiyn registry yn Pidgin nedt. $\rQey bikarhnereke din v bername saz kir."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Destra te ji bo rakirina v bernamey tune."
--- a/pidgin/win32/nsis/translations/lithuanian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/lithuanian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin pokalbi klientas (btinas)"
 !define GTK_SECTION_TITLE			"GTK+ vykdymo meto aplinka (btina)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ apipavidalinimai"
-!define GTK_NOTHEME_SECTION_TITLE		"Jokio apipavidalinimo"
-!define GTK_WIMP_SECTION_TITLE			"Wimp apipavidalinimas"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve apipavidalinimas"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue apipavidalinimas"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"Nuorodos"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Darbalaukyje"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Pradiniame meniu"
@@ -46,9 +41,6 @@
 !define GTK_INSTALL_ERROR			"GTK+ vykdymo meto aplinkos diegimo klaida."
 !define GTK_BAD_INSTALL_PATH			"Js nurodytas katalogas neprieinamas ar negali bti sukurtas."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Neturite teisi diegti GTK+ apipavidalinim."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"alinimo programa nerado Pidgin registro ra.$\rGalbt kitas vartotojas instaliavo i program."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Neturite teisi paalinti ios programos."
--- a/pidgin/win32/nsis/translations/norwegian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/norwegian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -20,11 +20,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Hurtigmeldingsklient (obligatorisk)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Environment (obligatorisk)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ Tema"
-!define GTK_NOTHEME_SECTION_TITLE		"Ingen tema"
-!define GTK_WIMP_SECTION_TITLE			"Wimp-tema"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve-tema"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue-tema"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"Snarveier"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Skrivebord"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Startmeny"
@@ -48,9 +43,6 @@
 !define GTK_INSTALL_ERROR			"En feil oppstod ved installering av GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Stien du oppga kan ikke aksesseres eller lages."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Du har ikke rettigheter til  installere et GTK+ tema."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Avinstalleringsprogrammet kunne ikke finne noen registeroppfring for Pidgin.$\rTrolig har en annen bruker avinstallert denne applikasjonen."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Du har ikke rettigheter til  avinstallere denne applikasjonen."
--- a/pidgin/win32/nsis/translations/polish.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/polish.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Wymagany jest Pidgin Instant Messaging Client"
 !define GTK_SECTION_TITLE			"Wymagany jest runtime rodowiska GTK+"
-!define GTK_THEMES_SECTION_TITLE		"Temat GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Brak tematw"
-!define GTK_WIMP_SECTION_TITLE		"Temat Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Temat Bluecurve "
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Temat Light House Blue"
 !define PIDGIN_SECTION_DESCRIPTION		"Zbiory Core Pidgin oraz dll"
 !define GTK_SECTION_DESCRIPTION		"Wieloplatformowe narzdzie GUI, uywane w Pidgin"
 
@@ -39,9 +34,6 @@
 !define GTK_INSTALL_ERROR			"Bd instalacji runtime-a GTK+."
 !define GTK_BAD_INSTALL_PATH			"Nie ma dostpu do wybranej cieki / aty."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Nie masz uprawnie do zainstalowania tematu GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Deinstalator nie moe znale rejestrw dla Pidgin.$\r Wskazuje to na to, e instalacj przeprowadzi inny uytkownik."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Nie masz uprawnie do deinstalacji tej aplikacji."
--- a/pidgin/win32/nsis/translations/portuguese-br.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/portuguese-br.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Cliente de mensagens instantneas Pidgin (requerido)"
 !define GTK_SECTION_TITLE			"Ambiente de tempo de execuo do GTK+ (requerido)"
-!define GTK_THEMES_SECTION_TITLE		"Temas do GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Nenhum tema"
-!define GTK_WIMP_SECTION_TITLE		"Tema 'Wimp'"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema 'Bluecurve'"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema 'Light House Blue'"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE "Atalhos"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE "rea de Trabalho"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "Menu Iniciar"
@@ -43,9 +38,6 @@
 !define GTK_INSTALL_ERROR			"Erro ao instalar o ambiente de tempo de execuo do GTK+."
 !define GTK_BAD_INSTALL_PATH			"O caminho que voc digitou no pde ser acessado ou criado."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Voc no tem permisso para instalar um tema do GTK+."
-
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visite a pgina da web do Pidgin para Windows"
 
--- a/pidgin/win32/nsis/translations/portuguese.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/portuguese.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -20,11 +20,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Cliente de Mensagens Instantneas Pidgin (obrigatrio)"
 !define GTK_SECTION_TITLE			"Ambiente de Execuo GTK+ (obrigatrio)"
-!define GTK_THEMES_SECTION_TITLE		"Temas do GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Nenhum tema"
-!define GTK_WIMP_SECTION_TITLE		"Tema Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema Light House Blue"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE "Atalhos"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE "Ambiente de Trabalho"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "Menu de Iniciar"
@@ -48,9 +43,6 @@
 !define GTK_INSTALL_ERROR			"Erro ao instalar o ambiente de execuo GTK+."
 !define GTK_BAD_INSTALL_PATH			"O caminho que digitou no pode ser acedido nem criado."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS	"No tem permisso para instalar um tema do GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"O desinstalador no encontrou entradas de registo do Pidgin.$\r provvel que outro utilizador tenha instalado este programa."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"No tem permisso para desinstalar este programa."
--- a/pidgin/win32/nsis/translations/romanian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/romanian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -19,11 +19,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Client de mesagerie instant (obligatoriu)"
 !define GTK_SECTION_TITLE			"Mediu GTK+ (obligatoriu)"
-!define GTK_THEMES_SECTION_TITLE		"Teme GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Fr teme"
-!define GTK_WIMP_SECTION_TITLE		"Tem Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tem Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tem Light House Blue"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE "Scurtturi"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE "Desktop"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "Meniu Start"
@@ -47,9 +42,6 @@
 !define GTK_INSTALL_ERROR			"Eroare la instalarea mediului GTK+."
 !define GTK_BAD_INSTALL_PATH			"Directorul specificat nu poate fi accesat sau creat."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Nu avei drepturile de acces necesare instalrii unei teme GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "Programul de dezinstalare nu a gsit intrri Pidgin n regitri.$\rProbabil un alt utilizator a instalat aceast aplicaie."
 !define un.PIDGIN_UNINSTALL_ERROR_2         "Nu avei drepturile de acces necesare dezinstalrii acestei aplicaii."
--- a/pidgin/win32/nsis/translations/russian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/russian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin -         ()."
 !define GTK_SECTION_TITLE			"GTK+    ()."
-!define GTK_THEMES_SECTION_TITLE		"  GTK+."
-!define GTK_NOTHEME_SECTION_TITLE		" ."
-!define GTK_WIMP_SECTION_TITLE		" 'Wimp Theme'"
-!define GTK_BLUECURVE_SECTION_TITLE		" 'Bluecurve'."
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	" 'Light House Blue'."
 !define PIDGIN_SECTION_DESCRIPTION		"  Pidgin  ."
 !define GTK_SECTION_DESCRIPTION		"  ,  Pidgin."
 
@@ -39,9 +34,6 @@
 !define GTK_INSTALL_ERROR			"    GTK+."
 !define GTK_BAD_INSTALL_PATH			"       ."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"        GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"      Pidgin  ..$\r     ."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"       ."
--- a/pidgin/win32/nsis/translations/serbian-latin.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/serbian-latin.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -13,11 +13,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin klijent za brze poruke (neophodno)"
 !define GTK_SECTION_TITLE			"GTK+ okolina za izvravanje (neophodno)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ teme"
-!define GTK_NOTHEME_SECTION_TITLE		"Bez teme"
-!define GTK_WIMP_SECTION_TITLE		"Wimp tema"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve tema"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue tema"
 !define PIDGIN_SECTION_DESCRIPTION		"Osnovne Pidgin datoteke i dinamike biblioteke"
 !define GTK_SECTION_DESCRIPTION		"Skup orua za grafiko okruenje, za vie platformi, koristi ga Pidgin "
 
@@ -31,9 +26,6 @@
 !define GTK_INSTALL_ERROR			"Greka prilikom instalacije GTK+ okoline za izvravanje."
 !define GTK_BAD_INSTALL_PATH			"Putanja koju ste naveli se ne moe ni napraviti niti joj se moe prii."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Nemate ovlaenja za instalaciju GTK+ teme."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "Program za uklanjanje instalacije ne moe da pronae stavke registra za Pidgin.$\rVerovatno je ovu aplikaciju instalirao drugi korisnik."
 !define un.PIDGIN_UNINSTALL_ERROR_2         "Nemate ovlaenja za deinstalaciju ove aplikacije."
--- a/pidgin/win32/nsis/translations/simp-chinese.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/simp-chinese.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -20,11 +20,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin ʱͨѶ()"
 !define GTK_SECTION_TITLE			"GTK+ ʱ̻()"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ "
-!define GTK_NOTHEME_SECTION_TITLE		""
-!define GTK_WIMP_SECTION_TITLE		"Wimp "
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve "
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue "
 !define PIDGIN_SHORTCUTS_SECTION_TITLE "ݷʽ"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE ""
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "ʼ˵"
@@ -48,9 +43,6 @@
 !define GTK_INSTALL_ERROR			"װ GTK+ ʱʧܡ"
 !define GTK_BAD_INSTALL_PATH			"޷ʻ򴴽·"
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"ûȨްװ GTK+ ⡣"
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "жسҲ Pidgin עĿ$\rûװ˴˳"
 !define un.PIDGIN_UNINSTALL_ERROR_2         "ûȨжش˳"
--- a/pidgin/win32/nsis/translations/slovak.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/slovak.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -20,11 +20,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Klient (nevyhnutn)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime prostredie (nevyhnutn)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ tmy"
-!define GTK_NOTHEME_SECTION_TITLE		"iadna grafick tma"
-!define GTK_WIMP_SECTION_TITLE			"Wimp grafick tma"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve grafick tma"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue grafick tma"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"Zstupcovia"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Plocha"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"tart Menu"
@@ -48,9 +43,6 @@
 !define GTK_INSTALL_ERROR			"Chyba pri intalcii GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Zadan cesta nie je prstupn alebo ju nie je mon vytvori."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Nemte oprvnenie na intalciu GTK+ grafickej tmy."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Intaltoru sa nepodarilo njs poloky v registri pre Pidgin.$\rJe mon, e tto aplikciu naintaloval in pouvate."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Nemte oprvnenie na odintalciu tejto aplikcie."
--- a/pidgin/win32/nsis/translations/slovenian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/slovenian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -20,11 +20,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin - odjemalec za klepet (zahtevano)"
 !define GTK_SECTION_TITLE			"GTK+ izvajalno okolje (zahtevano)"
-!define GTK_THEMES_SECTION_TITLE		"Teme GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Brez teme"
-!define GTK_WIMP_SECTION_TITLE			"Tema Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema Light House Blue"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"Blinjice"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Namizje"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Zaetni meni"
@@ -48,9 +43,6 @@
 !define GTK_INSTALL_ERROR			"Napaka pri namestitvi izvajalnega okolja GTK+."
 !define GTK_BAD_INSTALL_PATH			"Pot, ki ste jo vnesli, ni dosegljiva ali je ni mogoe ustvariti."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Za namestitev teme GTK+ nimate ustreznih pravic."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Vnosov za Pidgin v registru ni mogoe najti.$\rNajverjetneje je ta program namestil drug uporabnik."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Za odstranitev programa nimate ustreznih pravic."
--- a/pidgin/win32/nsis/translations/spanish.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/spanish.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -18,11 +18,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Cliente de mensajera instantnea de Pidgin (necesario)"
 !define GTK_SECTION_TITLE			"Entorno de ejecucin de GTK+ (necesario)"
-!define GTK_THEMES_SECTION_TITLE		"Temas GTK+" 
-!define GTK_NOTHEME_SECTION_TITLE		"Sin tema"
-!define GTK_WIMP_SECTION_TITLE		"Tema Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema Light House Blue"
 !define PIDGIN_SECTION_DESCRIPTION		"Ficheros y dlls principales de Core"
 !define GTK_SECTION_DESCRIPTION		"Una suite de herramientas GUI multiplataforma, utilizada por Pidgin"
 
@@ -39,9 +34,6 @@
 !define GTK_INSTALL_ERROR			"Error al instalar el ejecutable GTK+."
 !define GTK_BAD_INSTALL_PATH			"No se pudo acceder o crear la ruta que vd. indic."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"No tiene permisos para instalar un tema GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "El desinstalador no pudo encontrar las entradas en el registro de Pidgin.$\rEs probable que otro usuario instalara la aplicacin."
 !define un.PIDGIN_UNINSTALL_ERROR_2         "No tiene permisos para desinstalar esta aplicacin."
--- a/pidgin/win32/nsis/translations/swedish.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/swedish.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -23,11 +23,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin Snabbmeddelandeklient (obligatorisk)"
 !define GTK_SECTION_TITLE			"GTK+-krmilj (obligatorisk)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+-teman"
-!define GTK_NOTHEME_SECTION_TITLE		"Inget tema"
-!define GTK_WIMP_SECTION_TITLE		"Wimp-tema"
-!define GTK_BLUECURVE_SECTION_TITLE	"Bluecurve-tema"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue-tema"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE "Genvgar"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE "Skrivbord"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "Startmeny"
@@ -51,9 +46,6 @@
 !define GTK_INSTALL_ERROR			"Fel vid installation av GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Den skvg du angivit gr inte att komma t eller skapa."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Du har inte rttigheter att installera ett GTK+tema."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "Avinstalleraren kunde inte hitta registervrden fr Pidgin.$\rAntagligen har en annan anvndare installerat applikationen."
 !define un.PIDGIN_UNINSTALL_ERROR_2         "Du har inte rttigheter att avinstallera den hr applikationen."
--- a/pidgin/win32/nsis/translations/trad-chinese.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/trad-chinese.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -22,11 +22,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin D{ ()"
 !define GTK_SECTION_TITLE			"GTK+  ()"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ GDD"
-!define GTK_NOTHEME_SECTION_TITLE		"w˧GDD"
-!define GTK_WIMP_SECTION_TITLE			"Wimp GDD"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve GDD"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue GDD"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE		"|"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"ୱ|"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "}l\"
@@ -50,9 +45,6 @@
 !define GTK_INSTALL_ERROR			"w GTK+ ҮɵoͿ~C"
 !define GTK_BAD_INSTALL_PATH			"zҿJw˥ؿLksΫإߡC"
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"zثevLkw GTK+ GDDC"
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"{Lk Pidgin w˸TC$\roӬOLϥΪ̭swˤFoӵ{C"
 !define un.PIDGIN_UNINSTALL_ERROR_2		"zثevLk Pidgin C"
--- a/pidgin/win32/nsis/translations/valencian.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/valencian.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -23,11 +23,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Client Mensageria Instantanea Pidgin (necessari)"
 !define GTK_SECTION_TITLE			"Entorn d'Eixecucio GTK+ (necessari)"
-!define GTK_THEMES_SECTION_TITLE		"Temes GTK+"
-!define GTK_NOTHEME_SECTION_TITLE		"Sense Tema"
-!define GTK_WIMP_SECTION_TITLE			"Tema Wimp"
-!define GTK_BLUECURVE_SECTION_TITLE		"Tema Bluecurve"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Tema Light House Blue"
 !define PIDGIN_SHORTCUTS_SECTION_TITLE 		"Enllaos directes"
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE 	"Escritori"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE 	"Menu d'Inici"
@@ -51,9 +46,6 @@
 !define GTK_INSTALL_ERROR			"Erro instalant l'entorn GTK+."
 !define GTK_BAD_INSTALL_PATH			"La ruta introduida no pot ser accedida o creada."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"No tens permissos per a instalar un tema GTK+."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"El desinstalador podria no trobar les entrades del registre de Pidgin.$\rProbablement un atre usuari instal esta aplicacio."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"No tens permis per a desinstalar esta aplicacio."
--- a/pidgin/win32/nsis/translations/vietnamese.nsh	Wed Apr 25 06:11:35 2007 +0000
+++ b/pidgin/win32/nsis/translations/vietnamese.nsh	Sat Apr 28 18:32:47 2007 +0000
@@ -19,11 +19,6 @@
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Trình Khách Thông Điệp Tức Thời Pidgin (phải có)"
 !define GTK_SECTION_TITLE			"GTK+ Runtime Environment (phải có)"
-!define GTK_THEMES_SECTION_TITLE		"GTK+ Theme"
-!define GTK_NOTHEME_SECTION_TITLE		"Không có Theme"
-!define GTK_WIMP_SECTION_TITLE		"Wimp Theme"
-!define GTK_BLUECURVE_SECTION_TITLE		"Bluecurve Theme"
-!define GTK_LIGHTHOUSEBLUE_SECTION_TITLE	"Light House Blue Theme"
 !define PIDGIN_SECTION_DESCRIPTION		"Các tập tin Pidgin chính và dlls"
 !define GTK_SECTION_DESCRIPTION		"Bộ công cụ giao diện đồ họa đa nền để dùng cho Pidgin"
 
@@ -40,9 +35,6 @@
 !define GTK_INSTALL_ERROR			"Lỗi cài đặt GTK+ runtime."
 !define GTK_BAD_INSTALL_PATH			"Đường dẫn mà bạn nhập có thể không truy cập được hay không tạo được."
 
-; GTK+ Themes section
-!define GTK_NO_THEME_INSTALL_RIGHTS		"Bạn không có quyền hạn để cài đặt GTK+ theme."
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Trình gỡ cài đặt không tìm được các  registry entry cho Pidgin.$\rCó thể là chương trình được người dùng khác cài đặt."
 !define un.PIDGIN_UNINSTALL_ERROR_2		"Bạn không có quyền hạn để gỡ bỏ chương trình này."