changeset 19499:47a2d00ab060

propagate from branch 'im.pidgin.pidgin' (head 1ade185e4daf699979b517ddb70cee47cd15e7ee) to branch 'im.pidgin.soc.2007.certmgr' (head 59d49a3a37747b811f234de6931e7c575bf885fb)
author William Ehlhardt <williamehlhardt@gmail.com>
date Tue, 28 Aug 2007 01:14:08 +0000
parents 8c00833b9959 (diff) 7589b218f89a (current diff)
children 6e4b16081dff
files configure.ac libpurple/Makefile.am libpurple/util.c libpurple/util.h pidgin/gtkblist.c pidgin/pixmaps/emotes/default/24/madtongue.png
diffstat 125 files changed, 12374 insertions(+), 3757 deletions(-) [+]
line wrap: on
line diff
--- a/AUTHORS	Sat Aug 25 20:32:15 2007 +0000
+++ b/AUTHORS	Tue Aug 28 01:14:08 2007 +0000
@@ -22,7 +22,7 @@
 Ka-Hing Cheung - Developer
 Sadrul Habib Chowdhury - Developer
 Mark 'KingAnt' Doliner - Developer
-Christian 'ChipX86' Hammond - Developer & Webmaster
+Casey Harkins - Developer
 Gary 'grim' Kramlich - Developer
 Richard 'rlaager' Laager - Developer
 Richard 'wabz' Nelson - Developer
@@ -31,21 +31,16 @@
 Etan 'deryni' Reisner - Developer
 Tim 'marv' Ringenbach - Developer
 Luke 'LSchiere' Schierer - Support
-Megan 'Cae' Schneider (support/QA)
+Megan 'Cae' Schneider - support/QA
 Evan Schoenberg - Developer
+Kevin 'SimGuy' Stange - Developer & Webmaster
 Stu 'nosnilmot' Tomlinson - Developer
 Nathan 'faceprint' Walp - Developer
 
 Crazy Patch Writers:
 -------------------
 John 'rekkanoryo' Bailey
-Felipe 'shx' Contreras
-Decklin Foster
-Casey Harkins
 Peter 'Bleeter' Lawler
-Robert 'Robot101' McQueen
-Benjamin Miller
-Kevin 'SimGuy' Stange
 
 Retired Developers:
 ------------------
@@ -53,11 +48,19 @@
 Jim Duchek <jim@linuxpimps.com> - maintainer
 Rob Flynn <gaim@robflynn.com> - maintainer
 Adam Fritzler - libfaim maintainer
+Christian 'ChipX86' Hammond - Developer & Webmaster
 Syd Logan - hacker and designated driver [lazy bum]
 Jim Seymour - XMPP developer
 Mark Spencer <markster@marko.net> - original author
 Eric Warmenhoven <eric@warmenhoven.org> - lead developer
 
+Retired Crazy Patch Writers:
+---------------------------
+Felipe 'shx' Contreras
+Decklin Foster
+Robert 'Robot101' McQueen
+Benjamin Miller
+
 Artists:
 -------
 Hylke Bons - Icons
--- a/COPYRIGHT	Sat Aug 25 20:32:15 2007 +0000
+++ b/COPYRIGHT	Tue Aug 28 01:14:08 2007 +0000
@@ -156,12 +156,14 @@
 Casey Harkins
 Andy Harrison
 Andrew Hart (arhart)
+Anders Hasselqvist
 Rene Hausleitner
 Will Hawkins
 G. Sumner Hayes
 Michael R. Head
 Nick Hebner
 Mike Heffner
+Justin Heiner
 Benjamin Herrenschmidt
 Fernando Herrera
 hjheins
@@ -214,6 +216,7 @@
 Nicolas Lichtmaier
 Wesley Lin
 Artem Litvinovich
+Josh Littlefield
 Syd Logan
 Lokheed
 Norberto Lopes
@@ -304,6 +307,7 @@
 Bob Rossi
 Jason Roth
 Jean-Francois Roy
+Peter Ruibal
 Sam S.
 Pradyumna Sampath
 Arvind Samptur
--- a/ChangeLog	Sat Aug 25 20:32:15 2007 +0000
+++ b/ChangeLog	Tue Aug 28 01:14:08 2007 +0000
@@ -1,6 +1,21 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.1.1 (08/17/2007):
+version 2.2.0:
+	Libpurple:
+	* New protocol plugin: MySpaceIM (Jeff Connelly, Google Summer of
+	  Code)
+
+	Pidgin:
+	* Insert Horizontal Rules and Strikethrough text from toolbar
+	* Option to show protocol icons in the buddy list, from the
+	  Buddies > Show menu (Justin Heiner)
+	* Ability to build with native, non-X11 GTK+ on OSX (Anders
+   	  Hasselqvist)
+
+	Finch:
+	* Per-conversation mute and logging options (accessible from the menu)
+
+version 2.1.1 (08/20/2007):
 	Yahoo:
 	* Added an account action to open your inbox in the yahoo prpl.
 	* Added support for Unicode status messages in Yahoo.
--- a/ChangeLog.API	Sat Aug 25 20:32:15 2007 +0000
+++ b/ChangeLog.API	Tue Aug 28 01:14:08 2007 +0000
@@ -1,6 +1,24 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-Version 2.1.1 (08/17/2007):
+Version 2.2.0 (??/??/????):
+	Pidgin:
+		Added:
+		* pidgin_set_accessible_relations, sets up label-for and labelled-by
+		  ATK relations (broken out from pidgin_set_accessible_label)
+
+	Finch:
+		Added:
+		* finch_sound_is_enabled
+		* The reserved field in the FinchConv is now used to store information
+		  about the conversation (using FinchConversationFlag)
+
+		libgnt:
+		* gnt_slider_set_small_step, gnt_slider_set_large_step to allow more
+		  fine tuned updates of a GntSlider
+		* gnt_util_parse_xhtml_to_textview to parse XHTML strings in a
+		  GntTextView (this works only if libxml2 is available)
+
+Version 2.1.1 (08/20/2007):
 	libpurple:
 		Changed:
 		* PurpleAccountUiOps.request_authorize's authorize_cb and
--- a/ChangeLog.win32	Sat Aug 25 20:32:15 2007 +0000
+++ b/ChangeLog.win32	Tue Aug 28 01:14:08 2007 +0000
@@ -1,4 +1,4 @@
-version 2.1.1 (08/17/2007):
+version 2.1.1 (08/20/2007):
         * No changes
 
 version 2.1.0 (7/28/2007):
--- a/NEWS	Sat Aug 25 20:32:15 2007 +0000
+++ b/NEWS	Tue Aug 28 01:14:08 2007 +0000
@@ -1,6 +1,6 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-2.1.1 (8/17/2007):
+2.1.1 (8/20/2007):
 	Sean: Continuing our schedule of frequent releases, Pidgin 2.1.1
 	is out. In it, we've addressed a lot of UI issues from our
 	experimental new changes introduced in 2.1.0, and gave a lot of 
--- a/configure.ac	Sat Aug 25 20:32:15 2007 +0000
+++ b/configure.ac	Tue Aug 28 01:14:08 2007 +0000
@@ -43,18 +43,18 @@
 #
 # Make sure to update finch/libgnt/configure.ac with libgnt version changes.
 #
-m4_define([purple_lt_current], [1])
+m4_define([purple_lt_current], [2])
 m4_define([purple_major_version], [2])
-m4_define([purple_minor_version], [1])
-m4_define([purple_micro_version], [1])
+m4_define([purple_minor_version], [2])
+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]))
 
-m4_define([gnt_lt_current], [1])
+m4_define([gnt_lt_current], [2])
 m4_define([gnt_major_version], [2])
-m4_define([gnt_minor_version], [1])
+m4_define([gnt_minor_version], [2])
 m4_define([gnt_micro_version], [0])
 m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
@@ -275,6 +275,8 @@
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
+AC_ARG_WITH(x, [],
+	with_x="$withval", with_x="yes")
 AC_ARG_ENABLE(gtkui, [AC_HELP_STRING([--disable-gtkui],
 		[compile without GTK+ user interface])],
 	enable_gtkui="$enableval", enable_gtkui="yes")
@@ -309,7 +311,10 @@
 	[AC_HELP_STRING([--disable-cap],
 		[compile without Contact Availability Prediction plugin])],
 	enable_cap="$enableval", enable_cap="yes")
-
+AC_ARG_ENABLE(gestures,
+	[AC_HELP_STRING([--disable-gestures],
+		[compile without the gestures plugin])],
+	enable_gestures="$enableval", enable_gestures="yes")
 
 AC_PATH_XTRA
 # We can't assume that $x_libraries will be set, because autoconf does not
@@ -343,50 +348,79 @@
 			AC_DEFINE(HAVE_PANGO14, 1, [Define if we have Pango 1.4 or newer.]),:)
 
 	dnl #######################################################################
+	dnl # Check if we should compile with X support
+	dnl #######################################################################
+	if test "x$with_x" = "xyes" ; then
+		PKG_CHECK_MODULES(X11, x11,
+			[AC_DEFINE(HAVE_X, 1, [Define to 1 if you have X11])],
+			[AC_MSG_RESULT(no)
+			with_x=no])
+		AC_SUBST(X11_LIBS)
+		AC_SUBST(X11_CFLAGS)
+	fi
+	
+	dnl #######################################################################
 	dnl # Check for XScreenSaver
 	dnl #######################################################################
 	if test "x$enable_screensaver" = "xyes" ; then
-		old_LIBS="$LIBS"
-		LIBS="$LIBS $GTK_LIBS $x_libpath_add"
-		XSS_LIBS=""
-		XSS_HEADERS=""
-		AC_CHECK_LIB(Xext, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_EXTRA_LIBS"],[],[-lX11 -lXext -lm])
-		AC_CHECK_LIB(Xss, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_LIBS $X_EXTRA_LIBS -lXss"],[],[-lX11 -lXext -lm])
-		if test "x$XSS_LIBS" != "x"; then
-			oldCPPFLAGS="$CPPFLAGS"
-			CPPFLAGS="$CPPFLAGS $x_incpath_add"
-			AC_TRY_COMPILE([
+		if test "x$with_x" = "xyes" ; then
+			old_LIBS="$LIBS"
+			LIBS="$LIBS $GTK_LIBS $x_libpath_add"
+			XSS_LIBS=""
+			XSS_HEADERS=""
+			AC_CHECK_LIB(Xext, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_EXTRA_LIBS"],[],[-lX11 -lXext -lm])
+			AC_CHECK_LIB(Xss, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_LIBS $X_EXTRA_LIBS -lXss"],[],[-lX11 -lXext -lm])
+			if test "x$XSS_LIBS" != "x"; then
+				oldCPPFLAGS="$CPPFLAGS"
+				CPPFLAGS="$CPPFLAGS $x_incpath_add"
+				AC_TRY_COMPILE([
 					#include <X11/Xlib.h>
 					#include <X11/extensions/scrnsaver.h>
-				], [], [], [enable_screensaver=no])
-			CPPFLAGS="$oldCPPFLAGS"
+					], [], [], [enable_screensaver=no])
+				CPPFLAGS="$oldCPPFLAGS"
+			else
+				enable_screensaver=no
+			fi
+			LIBS="$old_LIBS"
+
+			if test "x$enable_screensaver" = "xyes" ; then
+				AC_DEFINE(USE_SCREENSAVER, 1, [Define if we're using XScreenSaver.])
+				AC_SUBST(XSS_LIBS)
+			fi
 		else
 			enable_screensaver=no
 		fi
-		LIBS="$old_LIBS"
-
-		if test "x$enable_screensaver" = "xyes" ; then
-			AC_DEFINE(USE_SCREENSAVER, 1, [Define if we're using XScreenSaver.])
-			AC_SUBST(XSS_LIBS)
-		fi
 	fi
 
 	dnl #######################################################################
 	dnl # Check for X session management libs
 	dnl #######################################################################
 	if test "x$enable_sm" = "xyes"; then
-		enable_sm=no
-		AC_CHECK_LIB(SM, SmcSaveYourselfDone, found_sm_lib=true, , [$x_libpath_add -lICE])
-		if test "x$found_sm_lib" = "xtrue"; then
-			oldCPPFLAGS="$CPPFLAGS"
-			CPPFLAGS="$CPPFLAGS $x_incpath_add"
-			AC_CHECK_HEADERS(X11/SM/SMlib.h, SM_LIBS="$x_libpath_add -lSM -lICE" enable_sm=yes)
-			CPPFLAGS="$oldCPPFLAGS"
+		if test "x$with_x" = "xyes" ; then
+			enable_sm=no
+			AC_CHECK_LIB(SM, SmcSaveYourselfDone, found_sm_lib=true, , [$x_libpath_add -lICE])
+			if test "x$found_sm_lib" = "xtrue"; then
+				oldCPPFLAGS="$CPPFLAGS"
+				CPPFLAGS="$CPPFLAGS $x_incpath_add"
+				AC_CHECK_HEADERS(X11/SM/SMlib.h, SM_LIBS="$x_libpath_add -lSM -lICE" enable_sm=yes)
+				CPPFLAGS="$oldCPPFLAGS"
+			fi
+
+			if test "x$enable_sm" = "xyes"; then
+				AC_DEFINE(USE_SM, 1, [Define if we're using X Session Management.])
+				AC_SUBST(SM_LIBS)
+			fi
+		else
+			enable_sm=no
 		fi
+	fi
 
-		if test "x$enable_sm" = "xyes"; then
-			AC_DEFINE(USE_SM, 1, [Define if we're using X Session Management.])
-			AC_SUBST(SM_LIBS)
+	dnl #######################################################################
+	dnl # Check for X11 to allow the gestures plugin
+	dnl #######################################################################
+	if test "x$enable_gestures" = "xyes"; then
+		if test "x$with_x" = "xno" ; then
+			enable_gestures=no
 		fi
 	fi
 
@@ -450,10 +484,11 @@
 	dnl #######################################################################
 	if test "x$enable_cap" = "xyes"; then
 		PKG_CHECK_MODULES(SQLITE3, sqlite3 >= 3.3,,[
-													AC_MSG_RESULT(no)
-													enable_cap="no"
-													])
+			AC_MSG_RESULT(no)
+			enable_cap="no"
+			])
 	fi
+        
 
 else # GTK
 	enable_cap=no
@@ -467,6 +502,8 @@
 AM_CONDITIONAL(ENABLE_GTK, test "x$enable_gtkui" = "xyes")
 AM_CONDITIONAL(BUILD_GEVOLUTION, test "x$enable_gevolution" = "xyes")
 AM_CONDITIONAL(ENABLE_CAP, test "x$enable_cap" = "xyes")
+AM_CONDITIONAL(ENABLE_GESTURES, test "x$enable_gestures" = "xyes")
+
 
 dnl #######################################################################
 dnl # Check for ncurses and other things used by the console UI
@@ -531,11 +568,6 @@
 			fi
 		fi
 	fi
-
-	PKG_CHECK_MODULES(X11, x11,
-		[AC_DEFINE(HAVE_X11, 1, [Define to 1 if you have X11])], [AC_MSG_RESULT(no)])
-	AC_SUBST(X11_LIBS)
-	AC_SUBST(X11_CFLAGS)
 fi
 
 AC_SUBST(GNT_LIBS)
@@ -858,7 +890,7 @@
 fi
 
 if test "x$STATIC_PRPLS" = "xall" ; then
-	STATIC_PRPLS="bonjour gg irc jabber msn novell oscar qq sametime silc simple yahoo zephyr"
+	STATIC_PRPLS="bonjour gg irc jabber msn myspace novell oscar qq sametime silc simple yahoo zephyr"
 fi
 if test "x$have_meanwhile" != "xyes" ; then
 	STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'`
@@ -904,6 +936,7 @@
 		irc)		static_irc=yes ;;
 		jabber)		static_jabber=yes ;;
 		msn)		static_msn=yes ;;
+		myspace)	static_myspace=yes ;;
 		novell)		static_novell=yes ;;
 		oscar)		static_oscar=yes ;;
 		aim)		static_oscar=yes ;;
@@ -924,6 +957,7 @@
 AM_CONDITIONAL(STATIC_IRC, test "x$static_irc" = "xyes")
 AM_CONDITIONAL(STATIC_JABBER, test "x$static_jabber" = "xyes")
 AM_CONDITIONAL(STATIC_MSN, test "x$static_msn" = "xyes")
+AM_CONDITIONAL(STATIC_MYSPACE, test "x$static_myspace" = "xyes")
 AM_CONDITIONAL(STATIC_NOVELL, test "x$static_novell" = "xyes")
 AM_CONDITIONAL(STATIC_OSCAR, test "x$static_oscar" = "xyes")
 AM_CONDITIONAL(STATIC_QQ, test "x$static_qq" = "xyes")
@@ -939,7 +973,7 @@
 
 AC_ARG_WITH(dynamic_prpls, [AC_HELP_STRING([--with-dynamic-prpls], [specify which protocols to build dynamically])], [DYNAMIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`])
 if test "x$DYNAMIC_PRPLS" = "xall" ; then
-	DYNAMIC_PRPLS="bonjour gg irc jabber msn novell oscar qq sametime silc simple yahoo zephyr"
+	DYNAMIC_PRPLS="bonjour gg irc jabber msn myspace novell oscar qq sametime silc simple yahoo zephyr"
 fi
 if test "x$have_meanwhile" != "xyes"; then
 	DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'`
@@ -963,6 +997,7 @@
 		irc)		dynamic_irc=yes ;;
 		jabber)		dynamic_jabber=yes ;;
 		msn)		dynamic_msn=yes ;;
+		myspace)	dynamic_myspace=yes ;;
 		novell)		dynamic_novell=yes ;;
 		oscar)		dynamic_oscar=yes ;;
 		aim)		dynamic_oscar=yes ;;
@@ -983,6 +1018,7 @@
 AM_CONDITIONAL(DYNAMIC_IRC, test "x$dynamic_irc" = "xyes")
 AM_CONDITIONAL(DYNAMIC_JABBER, test "x$dynamic_jabber" = "xyes")
 AM_CONDITIONAL(DYNAMIC_MSN, test "x$dynamic_msn" = "xyes")
+AM_CONDITIONAL(DYNAMIC_MYSPACE, test "x$dynamic_myspace" = "xyes")
 AM_CONDITIONAL(DYNAMIC_NOVELL, test "x$dynamic_novell" = "xyes")
 AM_CONDITIONAL(DYNAMIC_OSCAR, test "x$dynamic_oscar" = "xyes")
 AM_CONDITIONAL(DYNAMIC_QQ, test "x$dynamic_qq" = "xyes")
@@ -2137,6 +2173,7 @@
 		   pidgin/pixmaps/status/Makefile
 		   pidgin/pixmaps/status/11/Makefile
 		   pidgin/pixmaps/status/11/scalable/Makefile
+		   pidgin/pixmaps/status/11/rtl/Makefile
 		   pidgin/pixmaps/status/16/Makefile
 		   pidgin/pixmaps/status/16/rtl/Makefile
 		   pidgin/pixmaps/status/16/scalable/Makefile
@@ -2187,6 +2224,7 @@
 		   libpurple/protocols/irc/Makefile
 		   libpurple/protocols/jabber/Makefile
 		   libpurple/protocols/msn/Makefile
+		   libpurple/protocols/myspace/Makefile
 		   libpurple/protocols/novell/Makefile
 		   libpurple/protocols/null/Makefile
 		   libpurple/protocols/oscar/Makefile
@@ -2206,6 +2244,7 @@
 		   finch/Makefile
 		   finch/libgnt/Makefile
 		   finch/libgnt/gnt.pc
+		   finch/libgnt/pygnt/Makefile
 		   finch/libgnt/wms/Makefile
 		   finch/plugins/Makefile
 		   po/Makefile.in
@@ -2218,7 +2257,9 @@
 echo
 echo Build GTK+ 2.x UI............. : $enable_gtkui
 echo Build console UI.............. : $enable_consoleui
+echo Build for X11................. : $with_x
 echo
+echo Enable Gestures............... : $enable_gestures
 echo Protocols to build dynamically : $DYNAMIC_PRPLS
 echo Protocols to link statically.. : $STATIC_PRPLS
 echo
--- a/doc/funniest_home_convos.txt	Sat Aug 25 20:32:15 2007 +0000
+++ b/doc/funniest_home_convos.txt	Tue Aug 28 01:14:08 2007 +0000
@@ -474,3 +474,16 @@
 
 19:23 <-- elb has quit (K-lined)
 
+19:01 <user> whoa
+19:01 <user> okay
+19:01 <user> now when i try to go into the left over files after the 
+             uninstall
+19:01 <user> something is seriously wrong because it says "the files on the 
+             c drive are not formatted, would you like to format?"
+19:03 <user> manually deleting the folder from command gives me a "Data 
+             error (cyclic redundancy check)."
+19:03 <elb> remember, one line per thought
+19:03 <elb> and yes, you have something wrong with your computer, we've 
+            established that
+19:03 <user> its functioning just fine
+
--- a/finch/gntaccount.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntaccount.c	Tue Aug 28 01:14:08 2007 +0000
@@ -222,6 +222,11 @@
 
 	/* XXX: Proxy options */
 
+	if (accounts.window && accounts.tree) {
+		gnt_tree_set_selected(GNT_TREE(accounts.tree), account);
+		gnt_box_give_focus_to_child(GNT_BOX(accounts.window), accounts.tree);
+	}
+
 	gnt_widget_destroy(dialog->window);
 }
 
--- a/finch/gntblist.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntblist.c	Tue Aug 28 01:14:08 2007 +0000
@@ -2139,20 +2139,29 @@
 	}
 }
 
-static void
-account_signed_on_cb(PurpleConnection *pc, gpointer null)
+static gboolean
+auto_join_chats(gpointer data)
 {
 	PurpleBlistNode *node;
+	PurpleConnection *pc = data;
+	PurpleAccount *account = purple_connection_get_account(pc);
 
 	for (node = purple_blist_get_root(); node;
 			node = purple_blist_node_next(node, FALSE)) {
 		if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
 			PurpleChat *chat = (PurpleChat*)node;
-			if (chat->account == purple_connection_get_account(pc) &&
+			if (chat->account == account &&
 					purple_blist_node_get_bool(node, "gnt-autojoin"))
 				serv_join_chat(purple_account_get_connection(chat->account), chat->components);
 		}
 	}
+	return FALSE;
+}
+
+static void
+account_signed_on_cb(PurpleConnection *gc, gpointer null)
+{
+	g_idle_add(auto_join_chats, gc);
 }
 
 static void toggle_pref_cb(GntMenuItem *item, gpointer n)
--- a/finch/gntconv.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntconv.c	Tue Aug 28 01:14:08 2007 +0000
@@ -37,6 +37,7 @@
 #include "gntdebug.h"
 #include "gntplugin.h"
 #include "gntprefs.h"
+#include "gntsound.h"
 #include "gntstatus.h"
 #include "gntpounce.h"
 
@@ -142,6 +143,11 @@
 			}
 			g_free(error);
 		}
+		else if (!purple_account_is_connected(ggconv->active_conv->account))
+		{
+			purple_conversation_write(ggconv->active_conv, "", _("Message was not sent, because you are not signed on."),
+					PURPLE_MESSAGE_ERROR | PURPLE_MESSAGE_NO_LOG, time(NULL));
+		}
 		else
 		{
 			char *escape = g_markup_escape_text(text, -1);
@@ -342,6 +348,53 @@
 }
 
 static void
+toggle_logging_cb(GntMenuItem *item, gpointer ggconv)
+{
+	FinchConv *fc = ggconv;
+	PurpleConversation *conv = fc->active_conv;
+	gboolean logging = gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item));
+	GList *iter;
+
+	if (logging == purple_conversation_is_logging(conv))
+		return;
+
+	/* Xerox */
+	if (logging) {
+		/* Enable logging first so the message below can be logged. */
+		purple_conversation_set_logging(conv, TRUE);
+
+		purple_conversation_write(conv, NULL,
+				_("Logging started. Future messages in this conversation will be logged."),
+				conv->logs ? (PURPLE_MESSAGE_SYSTEM) :
+				(PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG),
+				time(NULL));
+	} else {
+		purple_conversation_write(conv, NULL,
+				_("Logging stopped. Future messages in this conversation will not be logged."),
+				conv->logs ? (PURPLE_MESSAGE_SYSTEM) :
+				(PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG),
+				time(NULL));
+
+		/* Disable the logging second, so that the above message can be logged. */
+		purple_conversation_set_logging(conv, FALSE);
+	}
+
+	/* Each conversation with the same person will have the same logging setting */
+	for (iter = fc->list; iter; iter = iter->next) {
+		if (iter->data == conv)
+			continue;
+		purple_conversation_set_logging(iter->data, logging);
+	}
+}
+
+static void
+toggle_sound_cb(GntMenuItem *item, gpointer ggconv)
+{
+	FinchConv *fc = ggconv;
+	fc->flags ^= FINCH_CONV_NO_SOUND;
+}
+
+static void
 send_to_cb(GntMenuItem *m, gpointer n)
 {
 	PurpleAccount *account = g_object_get_data(G_OBJECT(m), "purple_account");
@@ -447,6 +500,18 @@
 
 		generate_send_to_menu(ggc);
 	}
+
+	item = gnt_menuitem_check_new(_("Enable Logging"));
+	gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item),
+			purple_conversation_is_logging(ggc->active_conv));
+	gnt_menu_add_item(GNT_MENU(sub), item);
+	gnt_menuitem_set_callback(item, toggle_logging_cb, ggc);
+
+	item = gnt_menuitem_check_new(_("Enable Sounds"));
+	gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item),
+			!(ggc->flags & FINCH_CONV_NO_SOUND));
+	gnt_menu_add_item(GNT_MENU(sub), item);
+	gnt_menuitem_set_callback(item, toggle_sound_cb, ggc);
 }
 
 static void
@@ -492,6 +557,12 @@
 	else
 		ggc = g_new0(FinchConv, 1);
 
+	/* Each conversation with the same person will have the same logging setting */
+	if (ggc->list) {
+		purple_conversation_set_logging(conv,
+				purple_conversation_is_logging(ggc->list->data));
+	}
+
 	ggc->list = g_list_prepend(ggc->list, conv);
 	ggc->active_conv = conv;
 	conv->ui_data = ggc;
@@ -581,6 +652,9 @@
 		g_signal_connect(G_OBJECT(ggc->entry), "text_changed", G_CALLBACK(send_typing_notification), ggc);
 	}
 
+	if (!finch_sound_is_enabled())
+		ggc->flags |= FINCH_CONV_NO_SOUND;
+
 	gg_create_menu(ggc);
 
 	g_free(title);
@@ -825,6 +899,23 @@
 	gnt_tree_change_text(GNT_TREE(ggc->u.chat->userlist), (gpointer)user, 0, chat_flag_text(cb->flags));
 }
 
+static void
+finch_conv_present(PurpleConversation *conv)
+{
+	FinchConv *fc = FINCH_CONV(conv);
+	if (fc && fc->window)
+		return gnt_window_present(fc->window);
+}
+
+static gboolean
+finch_conv_has_focus(PurpleConversation *conv)
+{
+	FinchConv *fc = FINCH_CONV(conv);
+	if (fc && fc->window)
+		return gnt_widget_has_focus(fc->window);
+	return FALSE;
+}
+
 static PurpleConversationUiOps conv_ui_ops = 
 {
 	finch_create_conversation,
@@ -836,8 +927,8 @@
 	finch_chat_rename_user,
 	finch_chat_remove_users,
 	finch_chat_update_user,
-	NULL, /* present */
-	NULL, /* has_focus */
+	finch_conv_present, /* present */
+	finch_conv_has_focus, /* has_focus */
 	NULL, /* custom_smiley_add */
 	NULL, /* custom_smiley_write */
 	NULL, /* custom_smiley_close */
--- a/finch/gntconv.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntconv.h	Tue Aug 28 01:14:08 2007 +0000
@@ -43,6 +43,11 @@
 typedef struct _FinchConvChat FinchConvChat;
 typedef struct _FinchConvIm FinchConvIm;
 
+typedef enum
+{
+	FINCH_CONV_NO_SOUND     = 1 << 0,
+} FinchConversationFlag;
+
 struct _FinchConv
 {
 	GList *list;
@@ -53,7 +58,7 @@
 	GntWidget *tv;            /* text-view */
 	GntWidget *menu;
 	GntWidget *info;
-	void *pad;
+	FinchConversationFlag flags;
 
 	union
 	{
--- a/finch/gntft.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntft.c	Tue Aug 28 01:14:08 2007 +0000
@@ -193,6 +193,8 @@
 	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(finch_xfer_dialog_destroy), NULL);
 	gnt_box_set_toplevel(GNT_BOX(window), TRUE);
 	gnt_box_set_title(GNT_BOX(window), _("File Transfers"));
+	gnt_box_set_fill(GNT_BOX(window), TRUE);
+	gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID);
 
 	xfer_dialog->tree = tree = gnt_tree_new_with_columns(NUM_COLUMNS);
 	gnt_tree_set_column_titles(GNT_TREE(tree), _("Progress"), _("Filename"), _("Size"), _("Speed"), _("Remaining"), _("Status"));
@@ -219,7 +221,7 @@
 					 G_CALLBACK(toggle_clear_finished_cb), NULL);
 	gnt_box_add_widget(GNT_BOX(window), checkbox);
 
-	bbox = gnt_hbox_new(TRUE);
+	bbox = gnt_hbox_new(FALSE);
 
 	xfer_dialog->remove_button = button = gnt_button_new(_("Remove"));
 	g_signal_connect(G_OBJECT(button), "activate",
@@ -425,8 +427,11 @@
 	g_free(remaining_str);
 	g_free(kbsec);
 	if (purple_xfer_is_completed(xfer)) {
+		char *msg = g_strdup_printf(_("The file was saved as %s."), purple_xfer_get_local_filename(xfer));
 		gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Finished"));
 		gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_REMAINING, _("Finished"));
+		purple_xfer_conversation_write(xfer, msg, FALSE);
+		g_free(msg);
 	} else {
 		gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Transferring"));
 	}
--- a/finch/gntpounce.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntpounce.c	Tue Aug 28 01:14:08 2007 +0000
@@ -452,7 +452,7 @@
 
 	gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE));
 	/* Now the button box! */
-	bbox = gnt_hbox_new(TRUE);
+	bbox = gnt_hbox_new(FALSE);
 
 	/* Cancel button */
 	button = gnt_button_new(_("Cancel"));
@@ -613,6 +613,12 @@
 static void
 pounces_manager_add_cb(GntButton *button, gpointer user_data)
 {
+	if (purple_accounts_get_all() == NULL) {
+		purple_notify_error(NULL, _("Cannot create pounce"),
+				_("You do not have any accounts."),
+				_("You must create an account first before you can create a pounce."));
+		return;
+	}
 	finch_pounce_editor_show(NULL, NULL, NULL);
 }
 
@@ -622,7 +628,8 @@
 {
 	PouncesManager *dialog = user_data;
 	PurplePounce *pounce = gnt_tree_get_selection_data(GNT_TREE(dialog->tree));
-	finch_pounce_editor_show(NULL, NULL, pounce);
+	if (pounce)
+		finch_pounce_editor_show(NULL, NULL, pounce);
 }
 
 static void
@@ -645,6 +652,9 @@
 	char *buf;
 
 	pounce = (PurplePounce *)gnt_tree_get_selection_data(GNT_TREE(dialog->tree));
+	if (pounce == NULL)
+		return;
+
 	account = purple_pounce_get_pouncer(pounce);
 	pouncer = purple_account_get_username(account);
 	pouncee = purple_pounce_get_pouncee(pounce);
@@ -696,7 +706,7 @@
 	gnt_box_add_widget(GNT_BOX(win), tree);
 
 	/* Button box. */
-	bbox = gnt_hbox_new(TRUE);
+	bbox = gnt_hbox_new(FALSE);
 
 	/* Add button */
 	button = gnt_button_new(_("Add"));
--- a/finch/gntsound.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntsound.c	Tue Aug 28 01:14:08 2007 +0000
@@ -40,6 +40,8 @@
 #include "sound.h"
 #include "util.h"
 
+#include "gntconv.h"
+
 #include "gntbox.h"
 #include "gntwindow.h"
 #include "gntcombobox.h"
@@ -173,7 +175,8 @@
 
 		has_focus = purple_conversation_has_focus(conv);
 
-		if (has_focus && !purple_prefs_get_bool(make_pref("/conv_focus")))
+		if ((gntconv->flags & FINCH_CONV_NO_SOUND) ||
+			(has_focus && !purple_prefs_get_bool(make_pref("/conv_focus"))))
 		{
 			return;
 		}
@@ -409,14 +412,14 @@
 	GError *err = NULL;
 
 	switch (GST_MESSAGE_TYPE (msg)) {
-	case GST_MESSAGE_EOS:
-		gst_element_set_state(play, GST_STATE_NULL);
-		gst_object_unref(GST_OBJECT(play));
-		break;
 	case GST_MESSAGE_ERROR:
 		gst_message_parse_error(msg, &err, NULL);
 		purple_debug_error("gstreamer", "%s\n", err->message);
 		g_error_free(err);
+		/* fall-through and clean up */
+	case GST_MESSAGE_EOS:
+		gst_element_set_state(play, GST_STATE_NULL);
+		gst_object_unref(GST_OBJECT(play));
 		break;
 	case GST_MESSAGE_WARNING:
 		gst_message_parse_warning(msg, &err, NULL);
@@ -670,28 +673,34 @@
 {
 	PurpleSoundEventID id = GPOINTER_TO_INT(gnt_tree_get_selection_data(GNT_TREE(pref_dialog->events)));
 	FinchSoundEvent * event = &sounds[id];
-	char *enabled, *file, *tmpfile;
+	char *enabled, *file, *tmpfile, *volpref;
 	gboolean temp_value;
+	int volume;
 
 	enabled = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/enabled/%s",
 			finch_sound_get_active_profile(), event->pref);
 	file = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/file/%s",
 			finch_sound_get_active_profile(), event->pref);
+	volpref = g_strdup(make_pref("/volume"));
 
 	temp_value = purple_prefs_get_bool(enabled);
 	tmpfile = g_strdup(purple_prefs_get_string(file));
+	volume = purple_prefs_get_int(volpref);
 
 	purple_prefs_set_string(file, event->file);
 	if (!temp_value) purple_prefs_set_bool(enabled, TRUE);
+	purple_prefs_set_int(volpref, gnt_slider_get_value(GNT_SLIDER(pref_dialog->volume)));
 
 	purple_sound_play_event(id, NULL);
 
 	if (!temp_value) purple_prefs_set_bool(enabled, FALSE);
 	purple_prefs_set_string(file, tmpfile);
+	purple_prefs_set_int(volpref, volume);
 
 	g_free(enabled);
 	g_free(file);
 	g_free(tmpfile);
+	g_free(volpref);
 }
 
 static void
@@ -990,6 +999,8 @@
 
 	pref_dialog->volume = slider = gnt_slider_new(FALSE, 100, 0);
 	gnt_slider_set_step(GNT_SLIDER(slider), 5);
+	gnt_slider_set_small_step(GNT_SLIDER(slider), 1);
+	gnt_slider_set_large_step(GNT_SLIDER(slider), 20);
 	label = gnt_label_new("");
 	gnt_slider_reflect_label(GNT_SLIDER(slider), GNT_LABEL(label));
 	gnt_box_set_pad(GNT_BOX(tmpbox), 1);
@@ -1053,7 +1064,22 @@
 	load_pref_window(finch_sound_get_active_profile());
 
 	gnt_widget_show(win);
-}	
+}
+
+gboolean finch_sound_is_enabled(void)
+{
+	const char *pref = make_pref("/method");
+	const char *method = purple_prefs_get_string(pref);
+
+	if (!method)
+		return FALSE;
+	if (strcmp(method, "nosound") == 0)
+		return FALSE;
+	if (purple_prefs_get_int(make_pref("/volume")) <= 0)
+		return FALSE;
+
+	return TRUE;
+}
 
 static PurpleSoundUiOps sound_ui_ops =
 {
--- a/finch/gntsound.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntsound.h	Tue Aug 28 01:14:08 2007 +0000
@@ -55,6 +55,14 @@
 GList *finch_sound_get_profiles(void);
 
 /**
+ * Determine whether any sound will be played or not.
+ *
+ * @return Returns FALSE if preference is set to 'No sound', or if volume is
+ *         set to zero.
+ */
+gboolean finch_sound_is_enabled(void);
+
+/**
  * Gets GNT sound UI ops.
  *
  * @return The UI operations structure.
--- a/finch/gntstatus.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/gntstatus.c	Tue Aug 28 01:14:08 2007 +0000
@@ -299,6 +299,7 @@
 	{
 		purple_notify_error(edit, _("Error"), _("Invalid title"),
 				_("Please enter a non-empty title for the status."));
+		gnt_box_give_focus_to_child(GNT_BOX(edit->window), edit->title);
 		return;
 	}
 
@@ -307,6 +308,7 @@
 	{
 		purple_notify_error(edit, _("Error"), _("Duplicate title"),
 				_("Please enter a different title for the status."));
+		gnt_box_give_focus_to_child(GNT_BOX(edit->window), edit->title);
 		return;
 	}
 	
@@ -447,6 +449,7 @@
 		sub->window = window = gnt_vbox_new(FALSE);
 		gnt_box_set_toplevel(GNT_BOX(window), TRUE);
 		gnt_box_set_title(GNT_BOX(window), _("Substatus"));  /* XXX: a better title */
+		gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID);
 
 		box = gnt_hbox_new(FALSE);
 		gnt_box_add_widget(GNT_BOX(box), gnt_label_new(_("Account:")));
@@ -523,7 +526,7 @@
 	gnt_box_set_toplevel(GNT_BOX(window), TRUE);
 	gnt_box_set_title(GNT_BOX(window), _("Edit Status"));
 	gnt_box_set_fill(GNT_BOX(window), TRUE);
-	gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_LEFT);
+	gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID);
 	gnt_box_set_pad(GNT_BOX(window), 0);
 
 	edits = g_list_append(edits, edit);
--- a/finch/libgnt/configure.ac	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/configure.ac	Tue Aug 28 01:14:08 2007 +0000
@@ -24,9 +24,9 @@
 # Make sure to update ../../configure.ac with libgnt version changes.
 #
 
-m4_define([gnt_lt_current], [1])
+m4_define([gnt_lt_current], [2])
 m4_define([gnt_major_version], [2])
-m4_define([gnt_minor_version], [1])
+m4_define([gnt_minor_version], [2])
 m4_define([gnt_micro_version], [0])
 m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
--- a/finch/libgnt/gnt.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gnt.h	Tue Aug 28 01:14:08 2007 +0000
@@ -37,6 +37,15 @@
 #include "gntkeys.h"
 
 /**
+ * Get things to compile in Glib < 2.8
+ */
+#if !GLIB_CHECK_VERSION(2,8,0)
+	#define G_PARAM_STATIC_NAME  G_PARAM_PRIVATE
+	#define G_PARAM_STATIC_NICK  G_PARAM_PRIVATE
+	#define G_PARAM_STATIC_BLURB  G_PARAM_PRIVATE
+#endif
+
+/**
  * 
  */
 void gnt_init(void);
--- a/finch/libgnt/gntcolors.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntcolors.c	Tue Aug 28 01:14:08 2007 +0000
@@ -133,6 +133,7 @@
 		restore_colors();
 }
 
+#if GLIB_CHECK_VERSION(2,6,0)
 static int
 get_color(char *key)
 {
@@ -164,7 +165,6 @@
 	return color;
 }
 
-#if GLIB_CHECK_VERSION(2,6,0)
 void gnt_colors_parse(GKeyFile *kfile)
 {
 	GError *error = NULL;
--- a/finch/libgnt/gntfilesel.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntfilesel.c	Tue Aug 28 01:14:08 2007 +0000
@@ -200,7 +200,7 @@
 	const char *tmp;
 	tmp = sel->suggest ? sel->suggest :
 		(const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
-	old = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : "");
+	old = g_strdup_printf("%s%s%s", SAFE(sel->current), SAFE(sel->current)[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : "");
 	gnt_entry_set_text(GNT_ENTRY(sel->location), old);
 	g_free(old);
 }
--- a/finch/libgnt/gntslider.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntslider.c	Tue Aug 28 01:14:08 2007 +0000
@@ -125,22 +125,66 @@
 step_back(GntBindable *bindable, GList *null)
 {
 	GntSlider *slider = GNT_SLIDER(bindable);
-	if (slider->current <= slider->min)
-		return FALSE;
 	gnt_slider_advance_step(slider, -1);
 	return TRUE;
 }
 
 static gboolean
+small_step_back(GntBindable *bindable, GList *null)
+{
+	GntSlider *slider = GNT_SLIDER(bindable);
+	gnt_slider_set_value(slider, slider->current - slider->smallstep);
+	return TRUE;
+}
+
+static gboolean
+large_step_back(GntBindable *bindable, GList *null)
+{
+	GntSlider *slider = GNT_SLIDER(bindable);
+	gnt_slider_set_value(slider, slider->current - slider->largestep);
+	return TRUE;
+}
+
+static gboolean
 step_forward(GntBindable *bindable, GList *list)
 {
 	GntSlider *slider = GNT_SLIDER(bindable);
-	if (slider->current >= slider->max)
-		return FALSE;
 	gnt_slider_advance_step(slider, 1);
 	return TRUE;
 }
 
+static gboolean
+small_step_forward(GntBindable *bindable, GList *null)
+{
+	GntSlider *slider = GNT_SLIDER(bindable);
+	gnt_slider_set_value(slider, slider->current + slider->smallstep);
+	return TRUE;
+}
+
+static gboolean
+large_step_forward(GntBindable *bindable, GList *null)
+{
+	GntSlider *slider = GNT_SLIDER(bindable);
+	gnt_slider_set_value(slider, slider->current + slider->largestep);
+	return TRUE;
+}
+
+static gboolean
+move_min_value(GntBindable *bindable, GList *null)
+{
+	GntSlider *slider = GNT_SLIDER(bindable);
+	gnt_slider_set_value(slider, slider->min);
+	return TRUE;
+}
+
+static gboolean
+move_max_value(GntBindable *bindable, GList *null)
+{
+	GntSlider *slider = GNT_SLIDER(bindable);
+	gnt_slider_set_value(slider, slider->max);
+	return TRUE;
+}
+
 static void
 gnt_slider_class_init(GntSliderClass *klass)
 {
@@ -165,8 +209,14 @@
 	gnt_bindable_register_binding(bindable, "step-backward", GNT_KEY_DOWN, NULL);
 	gnt_bindable_class_register_action(bindable, "step-forward", step_forward, GNT_KEY_RIGHT, NULL);
 	gnt_bindable_register_binding(bindable, "step-forward", GNT_KEY_UP, NULL);
-
-	/* XXX: how would home/end work? */
+	gnt_bindable_class_register_action(bindable, "small-step-backward", small_step_back, GNT_KEY_CTRL_LEFT, NULL);
+	gnt_bindable_register_binding(bindable, "small-step-backward", GNT_KEY_CTRL_DOWN, NULL);
+	gnt_bindable_class_register_action(bindable, "small-step-forward", small_step_forward, GNT_KEY_CTRL_RIGHT, NULL);
+	gnt_bindable_register_binding(bindable, "small-step-forward", GNT_KEY_CTRL_UP, NULL);
+	gnt_bindable_class_register_action(bindable, "large-step-backward", large_step_back, GNT_KEY_PGDOWN, NULL);
+	gnt_bindable_class_register_action(bindable, "large-step-forward", large_step_forward, GNT_KEY_PGUP, NULL);
+	gnt_bindable_class_register_action(bindable, "min-value", move_min_value, GNT_KEY_HOME, NULL);
+	gnt_bindable_class_register_action(bindable, "max-value", move_max_value, GNT_KEY_END, NULL);
 
 	gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
 }
@@ -233,10 +283,14 @@
 
 void gnt_slider_set_value(GntSlider *slider, int value)
 {
+	int old;
 	if (slider->current == value)
 		return;
+	old = slider->current;
 	slider->current = value;
 	sanitize_value(slider);
+	if (old == slider->current)
+		return;
 	redraw_slider(slider);
 	slider_value_changed(slider);
 }
@@ -248,10 +302,7 @@
 
 int gnt_slider_advance_step(GntSlider *slider, int steps)
 {
-	slider->current += steps * slider->step;
-	sanitize_value(slider);
-	redraw_slider(slider);
-	slider_value_changed(slider);
+	gnt_slider_set_value(slider, slider->current + steps * slider->step);
 	return slider->current;
 }
 
@@ -260,6 +311,16 @@
 	slider->step = step;
 }
 
+void gnt_slider_set_small_step(GntSlider *slider, int step)
+{
+	slider->smallstep = step;
+}
+
+void gnt_slider_set_large_step(GntSlider *slider, int step)
+{
+	slider->largestep = step;
+}
+
 void gnt_slider_set_range(GntSlider *slider, int max, int min)
 {
 	slider->max = MAX(max, min);
--- a/finch/libgnt/gntslider.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntslider.h	Tue Aug 28 01:14:08 2007 +0000
@@ -56,6 +56,8 @@
 	int min;        /* minimum value */
 	int step;       /* amount to change at each step */
 	int current;    /* current value */
+	int smallstep;
+	int largestep;
 };
 
 struct _GntSliderClass
@@ -103,11 +105,27 @@
  * Sets the amount of change at each step.
  * 
  * @param slider  The slider
- * @param step    The amount for each ste
+ * @param step    The amount for each step
  */
 void gnt_slider_set_step(GntSlider *slider, int step);
 
 /**
+ * Sets the amount of change a small step.
+ * 
+ * @param slider  The slider
+ * @param step    The amount for a small step (for the slider)
+ */
+void gnt_slider_set_small_step(GntSlider *slider, int step);
+
+/**
+ * Sets the amount of change a large step.
+ * 
+ * @param slider  The slider
+ * @param step    The amount for a large step (for the slider)
+ */
+void gnt_slider_set_large_step(GntSlider *slider, int step);
+
+/**
  * Advance the slider forward or backward.
  *
  * @param slider   The slider
--- a/finch/libgnt/gntstyle.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntstyle.c	Tue Aug 28 01:14:08 2007 +0000
@@ -55,6 +55,8 @@
 	if (!group)
 		group = "general";
 	return g_key_file_get_value(gkfile, group, key, NULL);
+#else
+	return NULL;
 #endif
 }
 
@@ -93,6 +95,7 @@
 	return def;
 }
 
+#if GLIB_CHECK_VERSION(2,6,0)
 static void
 refine(char *text)
 {
@@ -133,6 +136,7 @@
 {
 	return (char *)gnt_key_translate(key);
 }
+#endif
 
 void gnt_style_read_workspaces(GntWM *wm)
 {
--- a/finch/libgnt/gnttextview.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gnttextview.c	Tue Aug 28 01:14:08 2007 +0000
@@ -549,7 +549,8 @@
 		if ((end = strchr(start, '\r')) != NULL ||
 			(end = strchr(start, '\n')) != NULL) {
 			len = gnt_util_onscreen_width(start, end - has_scroll);
-			if (len >= widget->priv.width - line->length - has_scroll) {
+			if (widget->priv.width > 0 &&
+					len >= widget->priv.width - line->length - has_scroll) {
 				end = NULL;
 			}
 		}
--- a/finch/libgnt/gnttree.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gnttree.c	Tue Aug 28 01:14:08 2007 +0000
@@ -985,11 +985,7 @@
 			g_param_spec_int("columns", "Columns",
 				"Number of columns in the tree.",
 				1, G_MAXINT, 1,
-#if GLIB_CHECK_VERSION(2,8,0)
 				G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
-#else
-				G_PARAM_READWRITE|G_PARAM_PRIVATE
-#endif
 			)
 		);
 
--- a/finch/libgnt/gntutils.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntutils.c	Tue Aug 28 01:14:08 2007 +0000
@@ -376,6 +376,101 @@
 #endif
 }
 
+#ifndef NO_LIBXML
+static void
+util_parse_html_to_tv(xmlNode *node, GntTextView *tv, GntTextFormatFlags flag)
+{
+	const char *name;
+	char *content;
+	xmlNode *ch;
+	gboolean processed = FALSE;
+	char *url = NULL;
+	gboolean insert_nl_s = FALSE, insert_nl_e = FALSE;
+
+	if (node == NULL || node->name == NULL || node->type != XML_ELEMENT_NODE)
+		return;
+
+	name = (char*)node->name;
+	if (g_ascii_strcasecmp(name, "b") == 0 ||
+		g_ascii_strcasecmp(name, "strong") == 0 ||
+		g_ascii_strcasecmp(name, "i") == 0 ||
+		g_ascii_strcasecmp(name, "blockquote") == 0) {
+		flag |= GNT_TEXT_FLAG_BOLD;
+	} else if (g_ascii_strcasecmp(name, "u") == 0) {
+		flag |= GNT_TEXT_FLAG_UNDERLINE;
+	} else if (g_ascii_strcasecmp(name, "br") == 0) {
+		insert_nl_e = TRUE;
+	} else if (g_ascii_strcasecmp(name, "a") == 0) {
+		flag |= GNT_TEXT_FLAG_UNDERLINE;
+		url = (char *)xmlGetProp(node, (xmlChar*)"href");
+	} else if (g_ascii_strcasecmp(name, "h1") == 0 ||
+			g_ascii_strcasecmp(name, "h2") == 0 ||
+			g_ascii_strcasecmp(name, "h3") == 0 ||
+			g_ascii_strcasecmp(name, "h4") == 0 ||
+			g_ascii_strcasecmp(name, "h5") == 0 ||
+			g_ascii_strcasecmp(name, "h6") == 0) {
+		insert_nl_s = TRUE;
+		insert_nl_e = TRUE;
+	} else if (g_ascii_strcasecmp(name, "title") == 0) {
+		insert_nl_s = TRUE;
+		insert_nl_e = TRUE;
+		flag |= GNT_TEXT_FLAG_BOLD | GNT_TEXT_FLAG_UNDERLINE;
+	} else {
+		/* XXX: Process other possible tags */
+	}
+
+	if (insert_nl_s)
+		gnt_text_view_append_text_with_flags(tv, "\n", flag);
+
+	for (ch = node->children; ch; ch = ch->next) {
+		if (ch->type == XML_ELEMENT_NODE) {
+			processed = TRUE;
+			util_parse_html_to_tv(ch, tv, flag);
+		}
+	}
+
+	if (!processed) {
+		content = (char*)xmlNodeGetContent(node);
+		gnt_text_view_append_text_with_flags(tv, content, flag);
+		xmlFree(content);
+	}
+
+	if (url) {
+		char *href = g_strdup_printf(" (%s)", url);
+		gnt_text_view_append_text_with_flags(tv, href, flag);
+		g_free(href);
+		xmlFree(url);
+	}
+
+	if (insert_nl_e)
+		gnt_text_view_append_text_with_flags(tv, "\n", flag);
+}
+#endif
+
+gboolean gnt_util_parse_xhtml_to_textview(const char *string, GntTextView *tv)
+{
+#ifdef NO_LIBXML
+	return FALSE;
+#else
+	xmlParserCtxtPtr ctxt;
+	xmlDocPtr doc;
+	xmlNodePtr node;
+	GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL;
+	gboolean ret = FALSE;
+
+	ctxt = xmlNewParserCtxt();
+	doc = xmlCtxtReadDoc(ctxt, (xmlChar*)string, NULL, NULL, XML_PARSE_NOBLANKS | XML_PARSE_RECOVER);
+	if (doc) {
+		node = xmlDocGetRootElement(doc);
+		util_parse_html_to_tv(node, tv, flag);
+		xmlFreeDoc(doc);
+		ret = TRUE;
+	}
+	xmlCleanupParser();
+	return ret;
+#endif
+}
+
 /* Setup trigger widget */
 typedef struct {
 	char *text;
@@ -408,4 +503,3 @@
 	g_signal_connect(G_OBJECT(wid), "key_pressed", G_CALLBACK(key_pressed), tb);
 	g_signal_connect_swapped(G_OBJECT(button), "destroy", G_CALLBACK(free_trigger_button), tb);
 }
-
--- a/finch/libgnt/gntutils.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntutils.h	Tue Aug 28 01:14:08 2007 +0000
@@ -27,6 +27,7 @@
 #include <glib.h>
 
 #include "gnt.h"
+#include "gnttextview.h"
 #include "gntwidget.h"
 
 typedef gpointer (*GDupFunc)(gconstpointer data);
@@ -132,6 +133,16 @@
 void gnt_util_parse_widgets(const char *string, int num, ...);
 
 /**
+ * Parse an XHTML string and add it in a GntTextView with
+ * appropriate text flags.
+ *
+ * @param string   The XHTML string
+ * @param tv       The GntTextView
+ * @return  @c TRUE if the string was added to the textview properly, @c FALSE otherwise.
+ */
+gboolean gnt_util_parse_xhtml_to_textview(const char *string, GntTextView *tv);
+
+/**
  * Make some keypress activate a button when some key is pressed with 'wid' in focus.
  *
  * @param widget  The widget
--- a/finch/libgnt/gntwm.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/gntwm.c	Tue Aug 28 01:14:08 2007 +0000
@@ -738,7 +738,7 @@
 			print = ch;
 #ifndef NO_WIDECHAR
 			if (wch.chars[0] > 255) {
-				snprintf(unicode, sizeof(unicode), "&#x%x;", wch.chars[0]);
+				snprintf(unicode, sizeof(unicode), "&#x%x;", (unsigned int)wch.chars[0]);
 				print = unicode;
 			}
 #endif
--- a/finch/libgnt/test/tv.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/finch/libgnt/test/tv.c	Tue Aug 28 01:14:08 2007 +0000
@@ -5,6 +5,7 @@
 #include "gntbox.h"
 #include "gntentry.h"
 #include "gnttextview.h"
+#include "gntutils.h"
 
 static gboolean
 key_pressed(GntWidget *w, const char *key, GntWidget *view)
@@ -117,6 +118,8 @@
 	gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "plugins: ", GNT_TEXT_FLAG_BOLD);
 	gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "this is the 4th line\n", GNT_TEXT_FLAG_NORMAL);
 
+	gnt_util_parse_xhtml_to_textview("<p><b>Ohoy hoy!!</b><br/><p>I think this is going to</p> <u> WORK!!! </u><a href='www.google.com'>check this out!!</a></p>", GNT_TEXT_VIEW(view));
+
 #ifdef STANDALONE
 	gnt_main();
 
--- a/libpurple/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -22,9 +22,9 @@
 		win32/giowin32.c \
 		win32/win32dep.h
 
-if USE_GCONFTOOL
-GCONF_DIR=gconf
-endif
+# if USE_GCONFTOOL
+# GCONF_DIR=gconf
+# endif
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = purple.pc
--- a/libpurple/blist.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/blist.c	Tue Aug 28 01:14:08 2007 +0000
@@ -1190,6 +1190,12 @@
 			group = purple_group_new(_("Chats"));
 			purple_blist_add_group(group,
 					purple_blist_get_last_sibling(purplebuddylist->root));
+		} else {
+			/* Add group to blist if isn't already on it. Fixes #2752. */
+			if (!purple_find_group(group->name)) {
+				purple_blist_add_group(group,
+						purple_blist_get_last_sibling(purplebuddylist->root));
+			}
 		}
 	} else {
 		group = (PurpleGroup*)node->parent;
@@ -1284,6 +1290,12 @@
 		g = (PurpleGroup *)((PurpleBlistNode *)c)->parent;
 	} else {
 		if (group) {
+			/* Add chat to blist if isn't already on it. Fixes #2752. */
+			if (!purple_find_group(group->name)) {
+				purple_blist_add_group(group,
+						purple_blist_get_last_sibling(purplebuddylist->root));
+			}
+
 			g = group;
 		} else {
 			g = purple_group_new(_("Buddies"));
--- a/libpurple/example/nullclient.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/example/nullclient.c	Tue Aug 28 01:14:08 2007 +0000
@@ -197,7 +197,7 @@
 	purple_util_set_user_dir(CUSTOM_USER_DIRECTORY);
 
 	/* We do not want any debugging for now to keep the noise to a minimum. */
-	purple_debug_set_enabled(FALSE);
+	purple_debug_set_enabled(TRUE);
 
 	/* Set the core-uiops, which is used to
 	 * 	- initialize the ui specific preferences.
@@ -257,6 +257,24 @@
 				PURPLE_CALLBACK(signed_on), NULL);
 }
 
+
+
+
+void signedOn( PurpleConnection *gc, gpointer dummy ) { 
+
+    
+    if( gc ) {
+
+        PurpleAccount* a = purple_connection_get_account( gc );
+
+        if( a ) {
+            
+            purple_presence_set_idle( purple_account_get_presence( a ), TRUE, time( NULL ) );
+        }
+    }    
+}
+
+
 int main()
 {
 	GList *iter;
@@ -282,30 +300,26 @@
 			names = g_list_append(names, info->id);
 		}
 	}
-	printf("Select the protocol [0-%d]: ", i-1);
-	fgets(name, sizeof(name), stdin);
-	sscanf(name, "%d", &num);
-	prpl = g_list_nth_data(names, num);
-
-	printf("Username: ");
-	fgets(name, sizeof(name), stdin);
-	name[strlen(name) - 1] = 0;  /* strip the \n at the end */
 
 	/* Create the account */
-	account = purple_account_new(name, prpl);
-
-	/* Get the password for the account */
-	password = getpass("Password: ");
-	purple_account_set_password(account, password);
+	account = purple_account_new("msimprpl@xyzzy.cjb.net", "prpl-myspace" );
+	purple_account_set_password(account, "4224jc" );
 
 	/* It's necessary to enable the account first. */
 	purple_account_set_enabled(account, UI_ID, TRUE);
 
+#if 0 
+	static int handle;    
+	purple_signal_connect( purple_connections_get_handle(), 
+                           "signed-on", &handle,
+                           PURPLE_CALLBACK( signedOn ), 
+                           NULL );
+    
 	/* Now, to connect the account(s), create a status and activate it. */
-	status = purple_savedstatus_new(NULL, PURPLE_STATUS_AVAILABLE);
-	purple_savedstatus_activate(status);
+	purple_savedstatus_activate( purple_savedstatus_get_default() );
 
 	connect_to_signals_for_demonstration_purposes_only();
+#endif
 
 	g_main_loop_run(loop);
 
--- a/libpurple/idle.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/idle.c	Tue Aug 28 01:14:08 2007 +0000
@@ -163,8 +163,8 @@
 		{
 			if (!no_away)
 			{
+				no_away = TRUE;
 				purple_savedstatus_set_idleaway(FALSE);
-				no_away = TRUE;
 			}
 			time_until_next_idle_event = 0;
 			return;
--- a/libpurple/network.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/network.c	Tue Aug 28 01:14:08 2007 +0000
@@ -436,7 +436,7 @@
 static gint
 wpurple_get_connected_network_count(void)
 {
-	guint net_cnt = 0;
+	gint net_cnt = 0;
 
 	WSAQUERYSET qs;
 	HANDLE h;
@@ -521,7 +521,7 @@
 		HANDLE hLookup, DWORD dwControlCode, LPVOID lpvInBuffer,
 		DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer,
 		LPDWORD lpcbBytesReturned, LPWSACOMPLETION lpCompletion) = NULL;
- 
+
 	if (!(MyWSANSPIoctl = (void*) wpurple_find_and_loadproc("ws2_32.dll", "WSANSPIoctl"))) {
 		g_thread_exit(NULL);
 		return NULL;
@@ -636,7 +636,7 @@
 purple_network_get_handle(void)
 {
 	static int handle;
-	
+
 	return &handle;
 }
 
@@ -675,7 +675,7 @@
 
 	purple_signal_register(purple_network_get_handle(), "network-configuration-changed",
 						   purple_marshal_VOID, NULL, 0);
-	
+
 	purple_pmp_init();
 	purple_upnp_init();
 }
--- a/libpurple/protocols/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -1,5 +1,5 @@
 EXTRA_DIST = Makefile.mingw
 
-DIST_SUBDIRS = bonjour gg irc jabber msn novell null oscar qq sametime silc silc10 toc simple yahoo zephyr
+DIST_SUBDIRS = bonjour gg irc jabber msn myspace novell null oscar qq sametime silc silc10 toc simple yahoo zephyr
 
 SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS)
--- a/libpurple/protocols/Makefile.mingw	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/Makefile.mingw	Tue Aug 28 01:14:08 2007 +0000
@@ -8,7 +8,7 @@
 PIDGIN_TREE_TOP := ../..
 include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
 
-SUBDIRS = gg irc jabber msn novell null oscar qq sametime silc10 simple yahoo bonjour
+SUBDIRS = gg irc jabber msn novell null oscar qq sametime silc10 simple yahoo bonjour myspace
 
 .PHONY: all install clean
 
--- a/libpurple/protocols/bonjour/jabber.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/bonjour/jabber.c	Tue Aug 28 01:14:08 2007 +0000
@@ -82,8 +82,8 @@
 	BonjourJabberConversation *bconv = g_new0(BonjourJabberConversation, 1);
 	bconv->socket = -1;
 	bconv->tx_buf = purple_circ_buffer_new(512);
-	bconv->tx_handler = -1;
-	bconv->rx_handler = -1;
+	bconv->tx_handler = 0;
+	bconv->rx_handler = 0;
 
 	return bconv;
 }
@@ -234,7 +234,7 @@
 
 	if (writelen == 0) {
 		purple_input_remove(bconv->tx_handler);
-		bconv->tx_handler = -1;
+		bconv->tx_handler = 0;
 		return;
 	}
 
@@ -272,7 +272,7 @@
 	BonjourJabberConversation *bconv = bb->conversation;
 
 	/* If we're not ready to actually send, append it to the buffer */
-	if (bconv->tx_handler != -1
+	if (bconv->tx_handler != 0
 			|| bconv->connect_data != NULL
 			|| !bconv->sent_stream_start
 			|| !bconv->recv_stream_start
@@ -304,7 +304,7 @@
 	}
 
 	if (ret < len) {
-		if (bconv->tx_handler == -1)
+		if (bconv->tx_handler == 0)
 			bconv->tx_handler = purple_input_add(bconv->socket, PURPLE_INPUT_WRITE,
 				_send_data_write_cb, pb);
 		purple_circ_buffer_append(bconv->tx_buf, message + ret, len - ret);
@@ -455,7 +455,7 @@
 
 	/* Stream started; process the send buffer if there is one */
 	purple_input_remove(bconv->tx_handler);
-	bconv->tx_handler= -1;
+	bconv->tx_handler= 0;
 	bconv->sent_stream_start = TRUE;
 
 	bonjour_jabber_stream_started(pb);
@@ -779,7 +779,7 @@
 			/* TODO: We're really supposed to wait for "</stream:stream>" before closing the socket */
 			close(bconv->socket);
 		}
-		if (bconv->rx_handler != -1)
+		if (bconv->rx_handler != 0)
 			purple_input_remove(bconv->rx_handler);
 		if (bconv->tx_handler > 0)
 			purple_input_remove(bconv->tx_handler);
--- a/libpurple/protocols/bonjour/mdns_win32.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/bonjour/mdns_win32.c	Tue Aug 28 01:14:08 2007 +0000
@@ -99,7 +99,7 @@
 
 			/* We've got what we need; stop listening */
 			purple_input_remove(idata->null_query_handler);
-			idata->null_query_handler = -1;
+			idata->null_query_handler = 0;
 			DNSServiceRefDeallocate(idata->null_query);
 			idata->null_query = NULL;
 		}
--- a/libpurple/protocols/jabber/roster.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/jabber/roster.c	Tue Aug 28 01:14:08 2007 +0000
@@ -58,6 +58,7 @@
 {
 	GSList *buddies, *g2, *l;
 	gchar *my_bare_jid;
+	GList *pool = NULL;
 
 	buddies = purple_find_buddies(js->gc->account, jid);
 
@@ -89,13 +90,20 @@
 			g_free(l->data);
 			g2 = g_slist_delete_link(g2, l);
 		} else {
-			purple_blist_remove_buddy(b);
+			pool = g_list_prepend(pool, b);
 		}
 	}
 
 	while(g2) {
-		PurpleBuddy *b = purple_buddy_new(js->gc->account, jid, alias);
 		PurpleGroup *g = purple_find_group(g2->data);
+		PurpleBuddy *b = NULL;
+
+		if (pool) {
+			b = pool->data;
+			pool = g_list_delete_link(pool, pool);
+		} else {			
+			b = purple_buddy_new(js->gc->account, jid, alias);
+		}
 
 		if(!g) {
 			g = purple_group_new(g2->data);
@@ -121,6 +129,12 @@
 		g2 = g_slist_delete_link(g2, g2);
 	}
 
+	while (pool) {
+		PurpleBuddy *b = pool->data;
+		purple_blist_remove_buddy(b);
+		pool = g_list_delete_link(pool, pool);
+	}
+
 	g_free(my_bare_jid);
 	g_slist_free(buddies);
 }
--- a/libpurple/protocols/msn/msn.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Tue Aug 28 01:14:08 2007 +0000
@@ -100,25 +100,62 @@
 	return buf;
 }
 
-static PurpleCmdRet
-msn_cmd_nudge(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data)
+static gboolean
+msn_send_attention(PurpleConnection *gc, const char *username, guint type)
 {
-	PurpleAccount *account = purple_conversation_get_account(conv);
-	PurpleConnection *gc = purple_account_get_connection(account);
 	MsnMessage *msg;
 	MsnSession *session;
 	MsnSwitchBoard *swboard;
 
 	msg = msn_message_new_nudge();
 	session = gc->proto_data;
-	swboard = msn_session_get_swboard(session, purple_conversation_get_name(conv), MSN_SB_FLAG_IM);
+	swboard = msn_session_get_swboard(session, username, MSN_SB_FLAG_IM);
 
 	if (swboard == NULL)
-		return PURPLE_CMD_RET_FAILED;
+		return FALSE;
 
 	msn_switchboard_send_msg(swboard, msg, TRUE);
 
+	return TRUE;
+}
+
+#ifdef MSN_USE_ATTENTION_API
+static GList *
+msn_attention_types(PurpleAccount *account)
+{
+	PurpleAttentionType *attn;
+	static GList *list = NULL;
+
+	if (!list) {
+		attn = g_new0(PurpleAttentionType, 1);
+		attn->name = _("nudge");
+		attn->incoming_description = _("nudged");
+		attn->outgoing_description = _("Nudging");
+		list = g_list_append(list, attn);
+	}
+
+	return list;
+}
+#endif
+
+
+static PurpleCmdRet
+msn_cmd_nudge(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data)
+{
+	PurpleAccount *account = purple_conversation_get_account(conv);
+	PurpleConnection *gc = purple_account_get_connection(account);
+	const gchar *username;
+
+	username = purple_conversation_get_name(conv);
+
+#ifdef MSN_USE_ATTENTION_API
+	serv_send_attention(gc, username, MSN_NUDGE);
+#else
+	if (!msn_send_attention(gc, username, MSN_NUDGE))
+		return PURPLE_CMD_RET_FAILED;
+
 	purple_conversation_write(conv, NULL, _("You have just sent a Nudge!"), PURPLE_MESSAGE_SYSTEM, time(NULL));
+#endif
 
 	return PURPLE_CMD_RET_OK;
 }
@@ -2102,9 +2139,14 @@
 	NULL,					/* send_raw */
 	NULL,					/* roomlist_room_serialize */
 
+#ifdef MSN_USE_ATTENTION_API
+	msn_send_attention,                     /* send_attention */
+	msn_attention_types,                    /* attention_types */
+#else
 	/* padding */
 	NULL,
 	NULL,
+#endif
 	NULL,
 	NULL
 };
--- a/libpurple/protocols/msn/msn.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/msn/msn.h	Tue Aug 28 01:14:08 2007 +0000
@@ -79,6 +79,10 @@
 	"Client-Name: Purple/" VERSION "\r\n" \
 	"Chat-Logging: Y\r\n"
 
+/* Index into attention_types */
+#define MSN_NUDGE 0
+
+#define MSN_USE_ATTENTION_API
 
 typedef enum
 {
--- a/libpurple/protocols/msn/servconn.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/msn/servconn.c	Tue Aug 28 01:14:08 2007 +0000
@@ -51,7 +51,7 @@
 	servconn->num = session->servconns_count++;
 
 	servconn->tx_buf = purple_circ_buffer_new(MSN_BUF_LEN);
-	servconn->tx_handler = -1;
+	servconn->tx_handler = 0;
 
 	return servconn;
 }
@@ -303,7 +303,7 @@
 
 	if (writelen == 0) {
 		purple_input_remove(servconn->tx_handler);
-		servconn->tx_handler = -1;
+		servconn->tx_handler = 0;
 		return;
 	}
 
@@ -328,7 +328,7 @@
 
 	if (!servconn->session->http_method)
 	{
-		if (servconn->tx_handler == -1) {
+		if (servconn->tx_handler == 0) {
 			switch (servconn->type)
 			{
 				case MSN_SERVCONN_NS:
@@ -353,7 +353,7 @@
 		if (ret < 0 && errno == EAGAIN)
 			ret = 0;
 		if (ret >= 0 && ret < len) {
-			if (servconn->tx_handler == -1)
+			if (servconn->tx_handler == 0)
 				servconn->tx_handler = purple_input_add(
 					servconn->fd, PURPLE_INPUT_WRITE,
 					servconn_write_cb, servconn);
--- a/libpurple/protocols/msn/switchboard.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/msn/switchboard.c	Tue Aug 28 01:14:08 2007 +0000
@@ -951,6 +951,8 @@
 	PurpleBuddy *buddy;
 	const char *user;
 
+	str = NULL;
+
 	swboard = cmdproc->data;
 	account = cmdproc->session->account;
 	user = msg->remote_user;
@@ -960,9 +962,13 @@
 	else
 		username = g_markup_escape_text(user, -1);
 
+#ifdef MSN_USE_ATTENTION_API
+	serv_got_attention(account->gc, buddy->name, MSN_NUDGE);
+#else
 	str = g_strdup_printf(_("%s just sent you a Nudge!"), username);
+	msn_switchboard_report_user(swboard, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, str);
+#endif
 	g_free(username);
-	msn_switchboard_report_user(swboard, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, str);
 	g_free(str);
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/CHANGES	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,145 @@
+2007-08-23 Jeff Connelly <pidgin@xyzzy.cjb.net> - 0.16
+* Add option to add all friends from myspace.com to your buddy list (#2660)
+* If a user doesn't have a picture, don't display an icon (instead of
+  displaying MySpace's "no photo" icon)
+* Fix #2725, a common crash related to buddy icon data
+* Fix #2752, which led to duplicate groups
+* Fix #2720, crash/disconnect when adding a buddy that doesn't exist
+  (You'll now receive an error when looking up invalid usernames).
+
+2007-08-22 Jeff Connelly <pidgin@xyzzy.cjb.net> - 0.15
+* Incomplete implementation of adding friends from myspace.com.
+* Change msim_msg_get() to start at the given node instead of the beginning.
+* Add msim_msg_get_*_from_element() to access data in MsimMessagElement *'s.
+* Use MsimMessage dictionaries everywhere in incoming messages, instead of
+  the old GHashTable method. Dictionary type is now fully implemented.
+* Add functions to loop over MsimMessages.
+* Link to myspace.com profile in Get Info.
+* Conditionally use my proposed attention API if defined.
+* Propagate to im.pidgin.pidgin branch for 2.1.2.
+* GSoC ended on 2007-08-20. The code in this release hasn't changed since
+  then. I did, however, bump the version number to 0.15 to distinguish this
+  release from the previous one. But there were no code changes. I updated
+  the text files, too.
+* Note: msimprpl will continue to be developed as time permits.
+
+2007-08-12 Jeff Connelly <jeff2@soc.pidgin.im> - 0.14
+* Full emoticon support (except no difference between nerd and geek emoticons),
+  thanks to a number of new icons from Hylke Bons.
+* Package Win32 release archive so that it can easily be extracted directly
+  into the folder Pidgin was installed to.
+* Better password handling, may now support Unicode passwords.
+* Much general clean-up and restructuring of the code.
+* Resolve user ID from buddy list, if it exists. Greatly improves speed of 
+  receiving messages from user IDs.
+* Support sending and receiving hyperlinks.
+* Fix #2521 by reimplementing protocol message escaping to work correctly.
+* Fix #2520 by indicating sign-on at the correct time.
+
+2007-08-04 Jeff Connelly <jeff2@soc.pidgin.im> - 0.13
+* Fix crash when deleting buddies, on Windows.
+* Disable sending client version to oncoming buddies (compile-time option).
+* Updated login process (more closely resembles official client).
+* Zaps, sending and receiving
+* Emoticons, mapped to Pidgin-supported smileys
+* Show official client build in buddy profiles.
+
+2007-07-15 Jeff Connelly <jeff2@soc.pidgin.im> - 0.12
+* Allow logging in with passwords containing uppercase letters (bug #2066)
+* Add /3 -> | translation to escaping.
+* Allow setting status string.
+* Disable keepalive timeout.
+* Remove faking self online, instead show real status (now that it exists).
+* Support font sizes in incoming instant messages.
+* Add support for mail notifications.
+
+2007-07-09 Jeff Connelly <jeff2@soc.pidgin.im> - 0.11
+* Allow going idle (tested with I'dle Ma'ker) and viewing idle status of 
+  buddies (thanks to Scott Ellis, developing a MySpaceIM plugin for Miranda IM,
+  for finding the idle status code.)
+* Time out if no data from server within a certain amount of time 
+  (keep alives).
+* Remove "Sign on as hidden" option, and always set status to current status
+  when signing on.
+* Some support for sending formatted text.
+* Fix build process on Unix, bug #2086.
+
+2007-07-03 Jeff Connelly <jeff2@soc.pidgin.im> - 0.10
+* On incoming instant messages, add support for:
+ * Text color
+ * Font face
+* Add option to sign on as hidden, default off (previously, always was hidden)
+* Add ability to change status to hidden, available, away
+* Increase password length limit to 10 to match official client (bug #2010)
+
+2007-07-01 Jeff Connelly <jeff2@soc.pidgin.im> - 0.9
+* Fix crash on Windows when logging in (bug #1990)
+* Fix crash on Windows when viewing tooltip text (bug #1999)
+
+2007-06-30 Jeff Connelly <jeff2@soc.pidgin.im> - 0.8
+* Allow "Get Info" on all users, by uid or username
+* Fix crash when re-logging in, if login failed.
+* Show descriptive error message if login password is too long.
+* Fake self from being online, since can't add self to buddy list.
+* Update for Libpurple 2.0.2.
+* Partial support for formatting on incoming instant messages.
+
+2007-06-14 Jeff Connelly <jeff2@soc.pidgin.im> - 0.7
+* Add/delete buddy now functional (required many other code improvements).
+* Show improved buddy information in tooltip text.
+* Show user profile (in "Get Info" option) for buddies on buddy list.
+* Fix crash when re-logging in, if login succeeded.
+
+2007-06-12 Jeff Connelly <jeff2@soc.pidgin.im> - 0.6
+* Use RC4 code from Libpurple 2.0.1
+* Use a new implementation for sending and receiving messages (MsimMessage).
+  This infrastructural change significantly improves extensibility.
+* Show online buddies as online.
+* Send and receive typing notifications (along with other required changes).
+
+2007-05-22 Jeff Connelly <jeff2@soc.pidgin.im> - 0.5
+* Add protocol escaping, so can now send and receive / and \ characters
+* Designed Pidgin 2.0.0beta7
+* Use RC4 code from Samba
+* Use translations (_ macro)
+* No major changes to code, still getting familiar with tools & community
+
+2007-04-29 Jeff Connelly <jeff2@soc.pidgin.im> 
+
+* NOTE: This code is now being developed under Monotone, in the
+  im.pidgin.soc.2007.msimprpl branch on my local computer, which
+  is periodically sync'd with pidgin.im's Monotone database.
+
+  Changes will be logged to Monotone.
+
+2007-04-15 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.4
+
+* Gracefully handle a full receive buffer
+* Handle fatal errors
+* Last version for Gaim 2.0.0beta6
+
+2007-04-14 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.3
+
+* Win32 support
+* Add a large number of precondition checks and a handful of assertions
+* Add documentation to each function, for doxygen.
+
+2007-04-10 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.2
+
+* Add ability to IM by email address.
+* Show usernames on buddy list instead of userids.
+* Show incoming messages as coming from username, instead of userid.
+* Add status messages and tooltip text.
+
+2007-04-09 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.1
+
+* Parsing most of the protocol.
+* Logging in using RC4/SHA1-based authentication.
+* Sending messages, by numeric userid or username.
+* Receiving messages, currently only by numeric userid.
+* Some buddy list support (show all users on buddy list as online, by uid).
+
+2007-04-07 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.0
+
+* Initial version. Login only. Not publicly released.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/ChangeLog	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,39 @@
+
+2007-04-29 Jeff Connelly <jeff2@soc.pidgin.com> 
+
+* NOTE: This code is now being developed under Monotone, in the
+  im.pidgin.soc.2007.msimprpl branch on my local computer, which
+  is periodically sync'd with pidgin.im's Monotone database.
+
+  Changes will be logged to Monotone.
+
+2007-04-15 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.4
+
+* Gracefully handle a full receive buffer
+* Handle fatal errors
+
+2007-04-14 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.3
+
+* Win32 support
+* Add a large number of precondition checks and a handful of assertions
+* Add documentation to each function, for doxygen.
+
+2007-04-10 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.2
+
+* Add ability to IM by email address.
+* Show usernames on buddy list instead of userids.
+* Show incoming messages as coming from username, instead of userid.
+* Add status messages and tooltip text.
+
+2007-04-09 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.1
+
+* Parsing most of the protocol.
+* Logging in using RC4/SHA1-based authentication.
+* Sending messages, by numeric userid or username.
+* Receiving messages, currently only by numeric userid.
+* Some buddy list support (show all users on buddy list as online, by uid).
+
+2007-04-07 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.0
+
+* Initial version. Login only. Not publicly released.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/LICENSE	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,339 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,41 @@
+EXTRA_DIST = Makefile.mingw
+
+pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
+
+SOURCES = myspace.c \
+	  myspace.h \
+	  persist.h \
+	  message.c \
+	  message.h \
+	  zap.c \
+	  session.c \
+	  session.h \
+	  markup.c \
+	  markup.h \
+	  user.c \
+	  user.h
+
+AM_CFLAGS = $(st)
+
+libmyspace_la_LDFLAGS = -module -avoid-version
+
+if STATIC_MYSPACE
+
+st = -DPURPLE_STATIC_PRPL
+noinst_LIBRARIES     = libmyspace.a
+libmyspace_a_SOURCES = $(SOURCES)
+libmyspace_a_CFLAGS  = $(AM_CFLAGS)
+
+else
+
+st =
+pkg_LTLIBRARIES       = libmyspace.la
+libmyspace_la_SOURCES = $(SOURCES)
+libmyspace_la_LIBADD  = $(GLIB_LIBS)
+
+endif
+
+AM_CPPFLAGS = \
+	-I$(top_srcdir)/libpurple \
+	$(GLIB_CFLAGS) \
+	$(DEBUG_CFLAGS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/Makefile.mingw	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,81 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of libmyspace
+#
+
+PIDGIN_TREE_TOP := ../../..
+include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
+
+TARGET = libmyspace
+TYPE = PLUGIN
+
+# Static or Plugin...
+ifeq ($(TYPE),STATIC)
+  DEFINES += -DSTATIC
+  DLL_INSTALL_DIR =	$(PURPLE_INSTALL_DIR)
+else
+ifeq ($(TYPE),PLUGIN)
+  DLL_INSTALL_DIR =	$(PURPLE_INSTALL_PLUGINS_DIR)
+endif
+endif
+
+##
+## INCLUDE PATHS
+##
+INCLUDE_PATHS +=	-I. \
+			-I$(GTK_TOP)/include \
+			-I$(GTK_TOP)/include/glib-2.0 \
+			-I$(GTK_TOP)/lib/glib-2.0/include \
+			-I$(PURPLE_TOP) \
+			-I$(PURPLE_TOP)/win32 \
+			-I$(PIDGIN_TREE_TOP)
+
+LIB_PATHS =		-L$(GTK_TOP)/lib \
+			-L$(PURPLE_TOP)
+
+##
+##  SOURCES, OBJECTS
+##
+C_SRC =			myspace.c message.c zap.c session.c markup.c user.c
+
+OBJECTS = $(C_SRC:%.c=%.o)
+
+##
+## LIBRARIES
+##
+LIBS =	\
+			-lglib-2.0 \
+			-lws2_32 \
+			-lintl \
+			-lpurple
+
+include $(PIDGIN_COMMON_RULES)
+
+##
+## TARGET DEFINITIONS
+##
+.PHONY: all install clean
+
+all: $(TARGET).dll
+
+install: all $(DLL_INSTALL_DIR)
+	cp $(TARGET).dll $(DLL_INSTALL_DIR)
+
+$(OBJECTS): $(PURPLE_CONFIG_H)
+
+##
+## BUILD DLL
+##
+$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS)
+	$(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll
+
+##
+## CLEAN RULES
+##
+
+clean:
+	rm -f $(OBJECTS)
+	rm -f $(TARGET).dll
+
+include $(PIDGIN_COMMON_TARGETS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/README	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,32 @@
+MySpaceIM Protocol Plugin for Libpurple     by Jeff Connelly 20070807
+
+
+Greetings. This package contains a plugin for libpurple (as used in
+Pidgin, formerly Gaim) to connect to the new MySpaceIM instant messaging 
+network and send/receive messages. Functionality is only basic as of yet, 
+and this code should be considered alpha quality.
+
+This code was initially developed under Google Summer of Code 2007.
+
+For features and TODO, see http://developer.pidgin.im/wiki/MySpaceIM
+
+Windows installation: Unzip the archive to C:\Program Files\Pidgin
+Unix/source installation: run "make install"
+
+Usage:
+
+Login using your _email address_ you use to login to myspace.com. You can't
+login using your numeric ID or alias.
+
+To test it out, send a message to yourself (by your username or numeric 
+uid (email not yet supported)) or tom (6221). In either case you should 
+get a reply. You should also be able to talk to other MySpaceIM users if 
+you desire. Replies will always be shown as coming from a user's username, 
+even if you IM by email or userid.
+
+Feedback welcome. You can IM my test account at "msimprpl" if you feel like it.
+
+Enjoy,
+-Jeff Connelly
+msimprpl@xyzzy.cjb.net
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/markup.c	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,689 @@
+/* MySpaceIM Protocol Plugin - markup
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 "myspace.h"
+
+typedef void (*MSIM_XMLNODE_CONVERT)(MsimSession *, xmlnode *, gchar **, gchar **);
+
+/* Internal functions */
+
+static guint msim_point_to_purple_size(MsimSession *session, guint point);
+static guint msim_purple_size_to_point(MsimSession *session, guint size);
+static guint msim_height_to_point(MsimSession *session, guint height);
+static guint msim_point_to_height(MsimSession *session, guint point);
+
+static void msim_markup_tag_to_html(MsimSession *, xmlnode *root, gchar **begin, gchar **end);
+static void html_tag_to_msim_markup(MsimSession *, xmlnode *root, gchar **begin, gchar **end);
+static gchar *msim_convert_xml(MsimSession *, const gchar *raw, MSIM_XMLNODE_CONVERT f);
+static gchar *msim_convert_smileys_to_markup(gchar *before);
+static double msim_round(double round);
+
+
+/* Globals */
+
+/* The names in in emoticon_names (for <i n=whatever>) map to corresponding 
+ * entries in emoticon_symbols (for the ASCII representation of the emoticon).
+ *
+ * Multiple emoticon symbols in Pidgin can map to one name. List the
+ * canonical form, as inserted by the "Smile!" dialog, first. For example,
+ * :) comes before :-), because although both are recognized as 'happy',
+ * the first is inserted by the smiley button (first symbol in theme).
+ *
+ * Note that symbols are case-sensitive in Pidgin -- :-X is not :-x. */
+static struct MSIM_EMOTICON
+{
+	gchar *name;
+	gchar *symbol;
+} msim_emoticons[] = {
+	/* Unfortunately, this list duplicates much of the file
+	 * pidgin/pidgin/pixmaps/emotes/default/22/default.theme.in, because
+	 * that file is part of Pidgin, but we're part of libpurple.
+	 */
+	{ "bigsmile", ":D" },
+	{ "bigsmile", ":-D" },
+	{ "devil", "}:)" },
+	{ "frazzled", ":Z" },
+	{ "geek", "B)" },
+	{ "googles", "%)" },
+	{ "growl", ":E" },
+	{ "laugh", ":))" },		/* Must be before ':)' */
+	{ "happy", ":)" },
+	{ "happy", ":-)" },
+	{ "happi", ":)" },
+	{ "heart", ":X" },
+	{ "mohawk", "-:" },
+	{ "mad", "X(" },
+	{ "messed", "X)" },
+	{ "nerd", "Q)" },
+	{ "oops", ":G" },
+	{ "pirate", "P)" },
+	{ "scared", ":O" },
+	{ "sidefrown", ":{" },
+	{ "sinister", ":B" },
+	{ "smirk", ":," },
+	{ "straight", ":|" },
+	{ "tongue", ":P" },
+	{ "tongue", ":p" },
+	{ "tongy", ":P" },
+	{ "upset", "B|" },
+	{ "wink", ";-)" },
+	{ "wink", ";)" },
+	{ "winc", ";)" },
+	{ "worried", ":[" },
+	{ "kiss", ":x" },
+	{ NULL, NULL }
+};
+
+
+
+/* Indexes of this array + 1 map HTML font size to scale of normal font size. *
+ * Based on _point_sizes from libpurple/gtkimhtml.c 
+ *                                 1    2  3    4     5      6       7 */
+static gdouble _font_scale[] = { .85, .95, 1, 1.2, 1.44, 1.728, 2.0736 };
+
+#define MAX_FONT_SIZE                   7       /* Purple maximum font size */
+#define POINTS_PER_INCH                 72      /* How many pt's in an inch */
+
+/* Text formatting bits for <f s=#> */
+#define MSIM_TEXT_BOLD                  1
+#define MSIM_TEXT_ITALIC                2   
+#define MSIM_TEXT_UNDERLINE             4
+
+/* Default baseline size of purple's fonts, in points. What is size 3 in points. 
+ * _font_scale specifies scaling factor relative to this point size. Note this 
+ * is only the default; it is configurable in account options. */
+#define MSIM_BASE_FONT_POINT_SIZE       8
+
+/* Default display's DPI. 96 is common but it can differ. Also configurable
+ * in account options. */
+#define MSIM_DEFAULT_DPI                96
+
+
+/* round is part of C99, but sometimes is unavailable before then.
+ * Based on http://forums.belution.com/en/cpp/000/050/13.shtml
+ */
+double msim_round(double value)
+{
+	if (value < 0) {
+		return -(floor(-value + 0.5));
+	} else {
+		return   floor( value + 0.5);
+	}
+}
+
+
+/** Convert typographical font point size to HTML font size. 
+ * Based on libpurple/gtkimhtml.c */
+static guint
+msim_point_to_purple_size(MsimSession *session, guint point)
+{
+	guint size, this_point, base;
+	gdouble scale;
+	
+	base = purple_account_get_int(session->account, "base_font_size", MSIM_BASE_FONT_POINT_SIZE);
+   
+	for (size = 0; 
+			size < sizeof(_font_scale) / sizeof(_font_scale[0]);
+			++size) {
+		scale = _font_scale[CLAMP(size, 1, MAX_FONT_SIZE) - 1];
+		this_point = (guint)msim_round(scale * base);
+
+		if (this_point >= point) {
+			purple_debug_info("msim", "msim_point_to_purple_size: %d pt -> size=%d\n",
+					point, size);
+			return size;
+		}
+	}
+
+	/* No HTML font size was this big; return largest possible. */
+	return this_point;
+}
+
+/** Convert HTML font size to point size. */
+static guint
+msim_purple_size_to_point(MsimSession *session, guint size)
+{
+	gdouble scale;
+	guint point;
+	guint base;
+
+	scale = _font_scale[CLAMP(size, 1, MAX_FONT_SIZE) - 1];
+
+	base = purple_account_get_int(session->account, "base_font_size", MSIM_BASE_FONT_POINT_SIZE);
+
+	point = (guint)msim_round(scale * base);
+
+	purple_debug_info("msim", "msim_purple_size_to_point: size=%d -> %d pt\n",
+					size, point);
+
+	return point;
+}
+
+/** Convert a msim markup font pixel height to the more usual point size, for incoming messages. */
+static guint 
+msim_height_to_point(MsimSession *session, guint height)
+{
+	guint dpi;
+
+	dpi = purple_account_get_int(session->account, "port", MSIM_DEFAULT_DPI);
+
+	return (guint)msim_round((POINTS_PER_INCH * 1. / dpi) * height);
+
+	/* See also: libpurple/protocols/bonjour/jabber.c
+	 * _font_size_ichat_to_purple */
+}
+
+/** Convert point size to msim pixel height font size specification, for outgoing messages. */
+static guint
+msim_point_to_height(MsimSession *session, guint point)
+{
+	guint dpi;
+
+	dpi = purple_account_get_int(session->account, "port", MSIM_DEFAULT_DPI);
+
+	return (guint)msim_round((dpi * 1. / POINTS_PER_INCH) * point);
+}
+
+/** Convert the msim markup <f> (font) tag into HTML. */
+static void 
+msim_markup_f_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
+{
+	const gchar *face, *height_str, *decor_str;
+	GString *gs_end, *gs_begin;
+	guint decor, height;
+
+	face = xmlnode_get_attrib(root, "f");
+	height_str = xmlnode_get_attrib(root, "h");
+	decor_str = xmlnode_get_attrib(root, "s");
+
+	if (height_str) {
+		height = atol(height_str);
+	} else {
+		height = 12;
+	}
+
+	if (decor_str) {
+		decor = atol(decor_str);
+	} else {
+		decor = 0;
+	}
+
+	gs_begin = g_string_new("");
+	/* TODO: get font size working */
+	if (height && !face) {
+		g_string_printf(gs_begin, "<font size='%d'>", 
+				msim_point_to_purple_size(session, msim_height_to_point(session, height)));
+	} else if (height && face) {
+		g_string_printf(gs_begin, "<font face='%s' size='%d'>", face,  
+				msim_point_to_purple_size(session, msim_height_to_point(session, height)));
+	} else {
+		g_string_printf(gs_begin, "<font>");
+	}
+
+	/* No support for font-size CSS? */
+	/* g_string_printf(gs_begin, "<span style='font-family: %s; font-size: %dpt'>", face, 
+			msim_height_to_point(height)); */
+
+	gs_end = g_string_new("</font>");
+
+	if (decor & MSIM_TEXT_BOLD) {
+		g_string_append(gs_begin, "<b>");
+		g_string_prepend(gs_end, "</b>");
+	}
+
+	if (decor & MSIM_TEXT_ITALIC) {
+		g_string_append(gs_begin, "<i>");
+		g_string_append(gs_end, "</i>");
+	}
+
+	if (decor & MSIM_TEXT_UNDERLINE) {
+		g_string_append(gs_begin, "<u>");
+		g_string_append(gs_end, "</u>");
+	}
+
+
+	*begin = gs_begin->str;
+	*end = gs_end->str;
+}
+
+/** Convert a msim markup color to a color suitable for libpurple.
+  *
+  * @param msim Either a color name, or an rgb(x,y,z) code.
+  *
+  * @return A new string, either a color name or #rrggbb code. Must g_free(). 
+  */
+static char *
+msim_color_to_purple(const char *msim)
+{
+	guint red, green, blue;
+
+	if (!msim) {
+		return g_strdup("black");
+	}
+
+	if (sscanf(msim, "rgb(%d,%d,%d)", &red, &green, &blue) != 3) {
+		/* Color name. */
+		return g_strdup(msim);
+	}
+	/* TODO: rgba (alpha). */
+
+	return g_strdup_printf("#%.2x%.2x%.2x", red, green, blue);
+}
+
+/** Convert the msim markup <a> (anchor) tag into HTML. */
+static void 
+msim_markup_a_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
+{
+	const gchar *href;
+
+	href = xmlnode_get_attrib(root, "h");
+	if (!href) {
+		href = "";
+	}
+
+	*begin = g_strdup_printf("<a href=\"%s\">%s", href, href);
+	*end = g_strdup("</a>");
+}
+
+/** Convert the msim markup <p> (paragraph) tag into HTML. */
+static void 
+msim_markup_p_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
+{
+	/* Just pass through unchanged. 
+	 *
+	 * Note: attributes currently aren't passed, if there are any. */
+	*begin = g_strdup("<p>");
+	*end = g_strdup("</p>");
+}
+
+/** Convert the msim markup <c> tag (text color) into HTML. TODO: Test */
+static void 
+msim_markup_c_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
+{
+	const gchar *color;
+	gchar *purple_color;
+
+	color = xmlnode_get_attrib(root, "v");
+	if (!color) {
+		purple_debug_info("msim", "msim_markup_c_to_html: <c> tag w/o v attr");
+		*begin = g_strdup("");
+		*end = g_strdup("");
+		/* TODO: log as unrecognized */
+		return;
+	}
+
+	purple_color = msim_color_to_purple(color);
+
+	*begin = g_strdup_printf("<font color='%s'>", purple_color); 
+
+	g_free(purple_color);
+
+	/* *begin = g_strdup_printf("<span style='color: %s'>", color); */
+	*end = g_strdup("</font>");
+}
+
+/** Convert the msim markup <b> tag (background color) into HTML. TODO: Test */
+static void 
+msim_markup_b_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
+{
+	const gchar *color;
+	gchar *purple_color;
+
+	color = xmlnode_get_attrib(root, "v");
+	if (!color) {
+		*begin = g_strdup("");
+		*end = g_strdup("");
+		purple_debug_info("msim", "msim_markup_b_to_html: <b> w/o v attr");
+		/* TODO: log as unrecognized. */
+		return;
+	}
+
+	purple_color = msim_color_to_purple(color);
+
+	/* TODO: find out how to set background color. */
+	*begin = g_strdup_printf("<span style='background-color: %s'>", 
+			purple_color);
+	g_free(purple_color);
+
+	*end = g_strdup("</p>");
+}
+
+/** Convert the msim markup <i> tag (emoticon image) into HTML. */
+static void 
+msim_markup_i_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end)
+{
+	const gchar *name;
+	guint i;
+	struct MSIM_EMOTICON *emote;
+
+	name = xmlnode_get_attrib(root, "n");
+	if (!name) {
+		purple_debug_info("msim", "msim_markup_i_to_html: <i> w/o n");
+		*begin = g_strdup("");
+		*end = g_strdup("");
+		/* TODO: log as unrecognized */
+		return;
+	}
+
+	/* Find and use canonical form of smiley symbol. */
+	for (i = 0; (emote = &msim_emoticons[i]) && emote->name != NULL; ++i) {
+		if (g_str_equal(name, emote->name)) {
+			*begin = g_strdup(emote->symbol);
+			*end = g_strdup("");
+			return;
+		}
+	}
+
+	/* Couldn't find it, sorry. Try to degrade gracefully. */
+	*begin = g_strdup_printf("**%s**", name);
+	*end = g_strdup("");
+}
+
+/** Convert an individual msim markup tag to HTML. */
+static void 
+msim_markup_tag_to_html(MsimSession *session, xmlnode *root, gchar **begin, 
+		gchar **end)
+{
+	if (g_str_equal(root->name, "f")) {
+		msim_markup_f_to_html(session, root, begin, end);
+	} else if (g_str_equal(root->name, "a")) {
+		msim_markup_a_to_html(session, root, begin, end);
+	} else if (g_str_equal(root->name, "p")) {
+		msim_markup_p_to_html(session, root, begin, end);
+	} else if (g_str_equal(root->name, "c")) {
+		msim_markup_c_to_html(session, root, begin, end);
+	} else if (g_str_equal(root->name, "b")) {
+		msim_markup_b_to_html(session, root, begin, end);
+	} else if (g_str_equal(root->name, "i")) {
+		msim_markup_i_to_html(session, root, begin, end);
+	} else {
+		purple_debug_info("msim", "msim_markup_tag_to_html: "
+				"unknown tag name=%s, ignoring", 
+				(root && root->name) ? root->name : "(NULL)");
+		*begin = g_strdup("");
+		*end = g_strdup("");
+	}
+}
+
+/** Convert an individual HTML tag to msim markup. */
+static void 
+html_tag_to_msim_markup(MsimSession *session, xmlnode *root, gchar **begin, 
+		gchar **end)
+{
+	/* TODO: Coalesce nested tags into one <f> tag!
+	 * Currently, the 's' value will be overwritten when b/i/u is nested
+	 * within another one, and only the inner-most formatting will be 
+	 * applied to the text. */
+	if (!purple_utf8_strcasecmp(root->name, "root")) {
+		*begin = g_strdup("");
+		*end = g_strdup("");
+	} else if (!purple_utf8_strcasecmp(root->name, "b")) {
+		*begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_BOLD);
+		*end = g_strdup("</f>");
+	} else if (!purple_utf8_strcasecmp(root->name, "i")) {
+		*begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_ITALIC);
+		*end = g_strdup("</f>");
+	} else if (!purple_utf8_strcasecmp(root->name, "u")) {
+		*begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_UNDERLINE);
+		*end = g_strdup("</f>");
+	} else if (!purple_utf8_strcasecmp(root->name, "a")) {
+		const gchar *href, *link_text;
+
+		href = xmlnode_get_attrib(root, "href");
+
+		if (!href) {
+			href = xmlnode_get_attrib(root, "HREF");
+		}
+
+		link_text = xmlnode_get_data(root);
+
+		if (href) {
+			if (g_str_equal(link_text, href)) {
+				/* Purple gives us: <a href="URL">URL</a>
+				 * Translate to <a h='URL' />
+				 * Displayed as text of URL with link to URL
+				 */
+				*begin = g_strdup_printf("<a h='%s' />", href);
+			} else {
+				/* But if we get: <a href="URL">text</a>
+				 * Translate to: text: <a h='URL' />
+				 *
+				 * Because official client only supports self-closed <a>
+				 * tags; you can't change the link text.
+				 */
+				*begin = g_strdup_printf("%s: <a h='%s' />", link_text, href);
+			}
+		} else {
+			*begin = g_strdup("<a />");
+		}
+
+		/* Sorry, kid. MySpace doesn't support you within <a> tags. */
+		xmlnode_free(root->child);
+		root->child = NULL;
+
+		*end = g_strdup("");
+	} else if (!purple_utf8_strcasecmp(root->name, "font")) {
+		const gchar *size;
+		const gchar *face;
+
+		size = xmlnode_get_attrib(root, "size");
+		face = xmlnode_get_attrib(root, "face");
+
+		if (face && size) {
+			*begin = g_strdup_printf("<f f='%s' h='%d'>", face, 
+					msim_point_to_height(session,
+						msim_purple_size_to_point(session, atoi(size))));
+		} else if (face) {
+			*begin = g_strdup_printf("<f f='%s'>", face);
+		} else if (size) {
+			*begin = g_strdup_printf("<f h='%d'>", 
+					 msim_point_to_height(session,
+						 msim_purple_size_to_point(session, atoi(size))));
+		} else {
+			*begin = g_strdup("<f>");
+		}
+
+		*end = g_strdup("</f>");
+
+		/* TODO: color (bg uses <body>), emoticons */
+	} else {
+		*begin = g_strdup_printf("[%s]", root->name);
+		*end = g_strdup_printf("[/%s]", root->name);
+	}
+}
+
+/** Convert an xmlnode of msim markup or HTML to an HTML string or msim markup.
+ *
+ * @param f Function to convert tags.
+ *
+ * @return An HTML string. Caller frees.
+ */
+static gchar *
+msim_convert_xmlnode(MsimSession *session, xmlnode *root, MSIM_XMLNODE_CONVERT f)
+{
+	xmlnode *node;
+	gchar *begin, *inner, *end;
+	GString *final;
+
+	if (!root || !root->name) {
+		return g_strdup("");
+	}
+
+	purple_debug_info("msim", "msim_convert_xmlnode: got root=%s\n",
+			root->name);
+
+	begin = inner = end = NULL;
+
+	final = g_string_new("");
+
+	f(session, root, &begin, &end);
+	
+	g_string_append(final, begin);
+
+	/* Loop over all child nodes. */
+	for (node = root->child; node != NULL; node = node->next) {
+		switch (node->type) {
+		case XMLNODE_TYPE_ATTRIB:
+			/* Attributes handled above. */
+			break;
+
+		case XMLNODE_TYPE_TAG:
+			/* A tag or tag with attributes. Recursively descend. */
+			inner = msim_convert_xmlnode(session, node, f);
+			g_return_val_if_fail(inner != NULL, NULL);
+
+			purple_debug_info("msim", " ** node name=%s\n", 
+					(node && node->name) ? node->name : "(NULL)");
+			break;
+	
+		case XMLNODE_TYPE_DATA:
+			/* Literal text. */
+			inner = g_new0(char, node->data_sz + 1);
+			strncpy(inner, node->data, node->data_sz);
+			inner[node->data_sz] = 0;
+
+			purple_debug_info("msim", " ** node data=%s\n", 
+					inner ? inner : "(NULL)");
+			break;
+			
+		default:
+			purple_debug_info("msim",
+					"msim_convert_xmlnode: strange node\n");
+			inner = g_strdup("");
+		}
+
+		if (inner) {
+			g_string_append(final, inner);
+		}
+	}
+
+	/* TODO: Note that msim counts each piece of text enclosed by <f> as
+	 * a paragraph and will display each on its own line. You actually have
+	 * to _nest_ <f> tags to intersperse different text in one paragraph!
+	 * Comment out this line below to see. */
+	g_string_append(final, end);
+
+	purple_debug_info("msim", "msim_markup_xmlnode_to_gtkhtml: RETURNING %s\n",
+			(final && final->str) ? final->str : "(NULL)");
+
+	return final->str;
+}
+
+/** Convert XML to something based on MSIM_XMLNODE_CONVERT. */
+static gchar *
+msim_convert_xml(MsimSession *session, const gchar *raw, MSIM_XMLNODE_CONVERT f)
+{
+	xmlnode *root;
+	gchar *str;
+	gchar *enclosed_raw;
+
+	g_return_val_if_fail(raw != NULL, NULL);
+
+	/* Enclose text in one root tag, to try to make it valid XML for parsing. */
+	enclosed_raw = g_strconcat("<root>", raw, "</root>", NULL);
+
+	root = xmlnode_from_str(enclosed_raw, -1);
+
+	if (!root) {
+		purple_debug_info("msim", "msim_markup_to_html: couldn't parse "
+				"%s as XML, returning raw: %s\n", enclosed_raw, raw);
+		/* TODO: msim_unrecognized */
+		g_free(enclosed_raw);
+		return g_strdup(raw);
+	}
+
+	g_free(enclosed_raw);
+
+	str = msim_convert_xmlnode(session, root, f);
+	g_return_val_if_fail(str != NULL, NULL);
+	purple_debug_info("msim", "msim_markup_to_html: returning %s\n", str);
+
+	xmlnode_free(root);
+
+	return str;
+}
+
+/** Convert plaintext smileys to <i> markup tags.
+ *
+ * @param before Original text with ASCII smileys. Will be freed.
+ * @return A new string with <i> tags, if applicable. Must be g_free()'d.
+ */
+static gchar *
+msim_convert_smileys_to_markup(gchar *before)
+{
+	gchar *old, *new, *replacement;
+	guint i;
+	struct MSIM_EMOTICON *emote;
+
+	old = before;
+	new = NULL;
+
+	for (i = 0; (emote = &msim_emoticons[i]) && emote->name != NULL; ++i) {
+		gchar *name, *symbol;
+
+		name = emote->name;
+		symbol = emote->symbol;
+
+		replacement = g_strdup_printf("<i n=\"%s\"/>", name);
+
+		purple_debug_info("msim", "msim_convert_smileys_to_markup: %s->%s\n",
+				symbol ? symbol : "(NULL)", 
+				replacement ? replacement : "(NULL)");
+		new = purple_strreplace(old, symbol, replacement);
+		
+		g_free(replacement);
+		g_free(old);
+
+		old = new;
+	}
+
+	return new;
+}
+	
+
+/** High-level function to convert MySpaceIM markup to Purple (HTML) markup. 
+ *
+ * @return Purple markup string, must be g_free()'d. */
+gchar *
+msim_markup_to_html(MsimSession *session, const gchar *raw)
+{
+	return msim_convert_xml(session, raw, 
+			(MSIM_XMLNODE_CONVERT)(msim_markup_tag_to_html));
+}
+
+/** High-level function to convert Purple (HTML) to MySpaceIM markup.
+ *
+ * @return HTML markup string, must be g_free()'d. */
+gchar *
+html_to_msim_markup(MsimSession *session, const gchar *raw)
+{
+	gchar *markup;
+
+	markup = msim_convert_xml(session, raw,
+			(MSIM_XMLNODE_CONVERT)(html_tag_to_msim_markup));
+	
+	if (purple_account_get_bool(session->account, "emoticons", TRUE)) {
+		/* Frees markup and allocates a new one. */
+		markup = msim_convert_smileys_to_markup(markup);
+	}
+
+	return markup;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/markup.h	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,27 @@
+/* MySpaceIM Protocol Plugin - markup
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 _MYSPACE_MARKUP_H
+#define _MYSPACE_MARKUP_H
+
+/* High-level msim markup <=> Purple html conversion functions. */
+gchar *msim_markup_to_html(MsimSession *, const gchar *raw);
+gchar *html_to_msim_markup(MsimSession *, const gchar *raw);
+
+#endif /* !_MYSPACE_MARKUP_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/message.c	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,1358 @@
+/** MySpaceIM protocol messages
+ *
+ * \author Jeff Connelly
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 "myspace.h"
+#include "message.h"
+
+static void msim_msg_free_element(gpointer data, gpointer user_data);
+static void msim_msg_debug_string_element(gpointer data, gpointer user_data);
+static gchar *msim_msg_pack_using(MsimMessage *msg, GFunc gf, const gchar *sep, const gchar *begin, const gchar *end);
+static GList *msim_msg_get_node(MsimMessage *msg, const gchar *name);
+static MsimMessage *msim_msg_new_v(gchar *first_key, va_list argp);
+
+/* Escape codes and associated replacement text, used for protocol message
+ * escaping and unescaping. */
+static struct MSIM_ESCAPE_REPLACEMENT {
+	gchar *code;
+	gchar text;
+} msim_escape_replacements[] = {
+	{ "/1", '/' },
+	{ "/2", '\\' },
+	/* { "/3", "|" }, */      /* Not used here -- only for within arrays */
+	{ NULL, 0 }
+};
+
+/**
+ * Escape a protocol message.
+ *
+ * @return The escaped message. Caller must g_free().
+ */
+gchar *
+msim_escape(const gchar *msg)
+{
+	GString *gs;
+	guint i, j;
+
+	gs = g_string_new("");
+
+
+	for (i = 0; i < strlen(msg); ++i) {
+		struct MSIM_ESCAPE_REPLACEMENT *replacement;
+		gchar *replace;
+
+		replace = NULL;
+
+		/* Check for characters that need to be escaped, and escape them. */
+		for (j = 0; (replacement = &msim_escape_replacements[j]) &&
+				replacement->code != NULL; ++j) {
+			if (msg[i] == replacement->text) {
+				replace = replacement->code;
+				break;
+			}
+		}
+
+		if (replace) {
+			g_string_append(gs, replace);
+		} else {
+			g_string_append_c(gs, msg[i]);
+		}
+	}
+
+#ifdef MSIM_DEBUG_ESCAPE
+	purple_debug_info("msim", "msim_escape: msg=%s, ret=%s\n", msg, gs->str);
+#endif
+
+	return gs->str;
+}
+
+/**
+ * Unescape a protocol message.
+ *
+ * @return The unescaped message, caller must g_free().
+ */
+gchar *
+msim_unescape(const gchar *msg)
+{
+	GString *gs;
+	guint i, j;
+
+	gs = g_string_new("");
+
+	for (i = 0; i < strlen(msg); ++i) {
+		struct MSIM_ESCAPE_REPLACEMENT *replacement;
+		gchar replace;
+
+		replace = msg[i];
+
+		for (j = 0; (replacement = &msim_escape_replacements[j]) &&
+				replacement->code != NULL; ++j) {
+			if (msg[i] == replacement->code[0] &&
+			    i + 1 < strlen(msg) &&
+			    msg[i + 1] == replacement->code[1]) {
+				replace = replacement->text;
+				++i;
+				break;
+			}
+		}
+
+		g_string_append_c(gs, replace);
+	}
+
+#ifdef MSIM_DEBUG_ESCAPE
+	purple_debug_info("msim", "msim_unescape: msg=%s, ret=%s\n", msg, gs->str);
+#endif
+
+	return gs->str;
+}
+
+/** Create a new MsimMessage. 
+ * 
+ * @param first_key The first key in the sequence, or NULL for an empty message.
+ * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL. 
+ *
+ * See msim_msg_append() documentation for details on types.
+ */
+MsimMessage *
+msim_msg_new(gchar *first_key, ...)
+{
+	va_list argp;
+
+	if (first_key) {
+	va_start(argp, first_key);
+		return msim_msg_new_v(first_key, argp);
+	} else {
+		return NULL;
+	}
+}
+
+/** Create a new message from va_list and its first argument.
+ *
+ * @param first_key The first argument (a key), or NULL to take all arguments
+ *    from argp.
+ * @param argp A va_list of variadic arguments, already started with va_start(). Will be va_end()'d.
+ * @return New MsimMessage *, must be freed with msim_msg_free().
+ *
+ * For internal use - users probably want msim_msg_new() or msim_send().
+ */
+static MsimMessage *
+msim_msg_new_v(gchar *first_key, va_list argp)
+{
+	gchar *key, *value;
+	MsimMessageType type;
+	MsimMessage *msg;
+	gboolean first;
+
+	GString *gs;
+	GList *gl;
+	MsimMessage *dict;
+
+	/* Begin with an empty message. */
+	msg = NULL;
+
+	/* First parameter can be given explicitly. */
+	first = first_key != NULL;
+
+	/* Read key, type, value triplets until NULL. */
+	do {
+		if (first) {
+			key = first_key;
+			first = FALSE;
+		} else {
+			key = va_arg(argp, gchar *);
+			if (!key) {
+				break;
+			}
+		}
+
+		type = va_arg(argp, int);
+
+		/* Interpret variadic arguments. */
+		switch (type) {
+			case MSIM_TYPE_INTEGER: 
+			case MSIM_TYPE_BOOLEAN: 
+				msg = msim_msg_append(msg, key, type, GUINT_TO_POINTER(va_arg(argp, int)));
+				break;
+				
+			case MSIM_TYPE_STRING:
+				value = va_arg(argp, char *);
+
+				g_return_val_if_fail(value != NULL, FALSE);
+
+				msg = msim_msg_append(msg, key, type, value);
+				break;
+
+			case MSIM_TYPE_BINARY:
+				gs = va_arg(argp, GString *);
+
+				g_return_val_if_fail(gs != NULL, FALSE);
+
+				/* msim_msg_free() will free this GString the caller created. */
+				msg = msim_msg_append(msg, key, type, gs);
+				break;
+			
+			case MSIM_TYPE_LIST:
+				gl = va_arg(argp, GList *);
+
+				g_return_val_if_fail(gl != NULL, FALSE);
+
+				msg = msim_msg_append(msg, key, type, gl);
+				break;
+
+			case MSIM_TYPE_DICTIONARY:
+				dict = va_arg(argp, MsimMessage *);
+
+				g_return_val_if_fail(dict != NULL, FALSE);
+
+				msg = msim_msg_append(msg, key, type, dict);
+				break;
+
+			default:
+				purple_debug_info("msim", "msim_send: unknown type %d\n", type);
+				break;
+		}
+	} while(key);
+	va_end(argp);
+
+	return msg;
+}
+
+/** Perform a deep copy on a GList * of gchar * strings. Free with msim_msg_list_free(). */
+GList *
+msim_msg_list_copy(GList *old)
+{
+	GList *new_list;
+
+	new_list = NULL;
+
+	/* Deep copy (g_list_copy is shallow). Copy each string. */
+	for (; old != NULL; old = g_list_next(old)) {
+		new_list = g_list_append(new_list, g_strdup(old->data));
+	}
+
+	return new_list;
+}
+
+/** Free a GList * of MsimMessageElement *'s. */
+void
+msim_msg_list_free(GList *l)
+{
+
+	for (; l != NULL; l = g_list_next(l)) {
+		MsimMessageElement *elem;
+
+		elem = (MsimMessageElement *)l->data;
+
+		/* Note that name is almost never dynamically allocated elsewhere;
+		 * it is usually a static string, but not in lists. So cast it. */
+		g_free((gchar *)elem->name);
+		g_free(elem->data);
+		g_free(elem);
+	}
+	g_list_free(l);
+}
+
+/** Parse a |-separated string into a new GList. Free with msim_msg_list_free(). */
+GList *
+msim_msg_list_parse(const gchar *raw)
+{
+	gchar **array;
+	GList *list;
+	guint i;
+
+	array = g_strsplit(raw, "|", 0);
+	list = NULL;
+
+	/* TODO: escape/unescape /3 <-> | within list elements */
+	
+	for (i = 0; array[i] != NULL; ++i) {
+		MsimMessageElement *elem;
+
+		/* Freed in msim_msg_list_free() */
+		elem = g_new0(MsimMessageElement, 1);
+
+		/* Give the element a name for debugging purposes.
+		 * Not supposed to be looked up by this name; instead,
+		 * lookup the elements by indexing the array. */
+		elem->name = g_strdup_printf("(list item #%d)", i);
+		elem->type = MSIM_TYPE_RAW;
+		elem->data = g_strdup(array[i]);
+
+		list = g_list_append(list, elem);
+	}
+
+	g_strfreev(array);
+
+	return list;
+}
+
+/** Clone an individual element.
+ *
+ * @param data MsimMessageElement * to clone.
+ * @param user_data Pointer to MsimMessage * to add cloned element to.
+ */
+static void 
+msim_msg_clone_element(gpointer data, gpointer user_data)
+{
+	MsimMessageElement *elem;
+	MsimMessage **new;
+	gpointer new_data;
+				
+	GString *gs;
+	MsimMessage *dict;
+
+	elem = (MsimMessageElement *)data;
+	new = (MsimMessage **)user_data;
+
+	switch (elem->type) {
+		case MSIM_TYPE_BOOLEAN:
+		case MSIM_TYPE_INTEGER:
+			new_data = elem->data;
+			break;
+
+		case MSIM_TYPE_RAW:
+		case MSIM_TYPE_STRING:
+			new_data = g_strdup((gchar *)elem->data);
+			break;
+
+		case MSIM_TYPE_LIST:
+			new_data = (gpointer)msim_msg_list_copy((GList *)(elem->data));
+			break;
+
+		case MSIM_TYPE_BINARY:
+			gs = (GString *)elem->data;
+
+			new_data = g_string_new_len(gs->str, gs->len);
+			break;
+		case MSIM_TYPE_DICTIONARY:
+			dict = (MsimMessage *)elem->data;
+
+			new_data = msim_msg_clone(dict);
+			break;
+
+		default:
+			purple_debug_info("msim", "msim_msg_clone_element: unknown type %d\n", elem->type);
+			g_return_if_fail(NULL);
+	}
+
+	/* Append cloned data. Note that the 'name' field is a static string, so it
+	 * never needs to be copied nor freed. */
+	*new = msim_msg_append(*new, elem->name, elem->type, new_data);
+}
+
+/** Clone an existing MsimMessage. 
+ *
+ * @return Cloned message; caller should free with msim_msg_free().
+ */
+MsimMessage *
+msim_msg_clone(MsimMessage *old)
+{
+	MsimMessage *new;
+
+	if (old == NULL) {
+		return NULL;
+	}
+
+	new = msim_msg_new(FALSE);
+
+	g_list_foreach(old, msim_msg_clone_element, &new);
+
+	return new;
+}
+
+/** Free the data of a message element.
+ *
+ * @param elem The MsimMessageElement *
+ *
+ * Note this only frees the element data; you may also want to free the
+ * element itself with g_free() (see msim_msg_free_element()).
+ */
+void
+msim_msg_free_element_data(MsimMessageElement *elem)
+{
+	switch (elem->type) {
+		case MSIM_TYPE_BOOLEAN:
+		case MSIM_TYPE_INTEGER:
+			/* Integer value stored in gpointer - no need to free(). */
+			break;
+
+		case MSIM_TYPE_RAW:
+		case MSIM_TYPE_STRING:
+			/* Always free strings - caller should have g_strdup()'d if
+			 * string was static or temporary and not to be freed. */
+			g_free(elem->data);
+			break;
+
+		case MSIM_TYPE_BINARY:
+			/* Free the GString itself and the binary data. */
+			g_string_free((GString *)elem->data, TRUE);
+			break;
+
+		case MSIM_TYPE_DICTIONARY:
+			msim_msg_free((MsimMessage *)elem->data);
+			break;
+			
+		case MSIM_TYPE_LIST:
+			g_list_free((GList *)elem->data);
+			break;
+
+		default:
+			purple_debug_info("msim", "msim_msg_free_element_data: "
+					"not freeing unknown type %d\n", elem->type);
+			break;
+	}
+}
+
+/** Free an individual message element.
+ *
+ * @param data MsimMessageElement * to free.
+ * @param user_data Not used; required to match g_list_foreach() callback prototype.
+ *
+ * Frees both the element data and the element itself.
+ */
+static void 
+msim_msg_free_element(gpointer data, gpointer user_data)
+{
+	MsimMessageElement *elem;
+
+	elem = (MsimMessageElement *)data;
+
+	msim_msg_free_element_data(elem);
+
+	g_free(elem);
+}
+
+/** Free a complete message. */
+void 
+msim_msg_free(MsimMessage *msg)
+{
+	if (!msg) {
+		/* already free as can be */
+		return;
+	}
+
+#ifdef MSIM_MSG_DEBUG_FREE
+	msim_msg_dump("msim_msg_free: freeing %s", msg);
+#endif
+
+	g_list_foreach(msg, msim_msg_free_element, NULL);
+	g_list_free(msg);
+}
+
+/** Send an existing MsimMessage. */
+gboolean 
+msim_msg_send(MsimSession *session, MsimMessage *msg)
+{
+	gchar *raw;
+	gboolean success;
+	
+	raw = msim_msg_pack(msg);
+	g_return_val_if_fail(raw != NULL, FALSE);
+	success = msim_send_raw(session, raw);
+	g_free(raw);
+
+	msim_msg_dump("msim_msg_send()ing %s\n", msg);
+	
+	return success;
+}
+
+/**
+ *
+ * Send a message to the server, whose contents is specified using 
+ * variable arguments.
+ *
+ * @param session
+ * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL. 
+ *
+ * This function exists for coding convenience: it allows a message to be created
+ * and sent in one line of code. Internally it calls msim_msg_send(). 
+ *
+ * IMPORTANT: See msim_msg_append() documentation for details on element types.
+ *
+ */
+gboolean 
+msim_send(MsimSession *session, ...)
+{
+	gboolean success;
+	MsimMessage *msg;
+	va_list argp;
+	
+	va_start(argp, session);
+	msg = msim_msg_new_v(NULL, argp);
+
+	/* Actually send the message. */
+	success = msim_msg_send(session, msg);
+
+	/* Cleanup. */
+	msim_msg_free(msg);
+
+	return success;
+}
+
+/** Create a new MsimMessageElement * - must be g_free()'d. 
+ *
+ * For internal use; users probably want msim_msg_append() or msim_msg_insert_before(). 
+ */
+static MsimMessageElement *
+msim_msg_element_new(const gchar *name, MsimMessageType type, gpointer data)
+{
+	MsimMessageElement *elem;
+
+	elem = g_new0(MsimMessageElement, 1);
+
+	elem->name = name;
+	elem->type = type;
+	elem->data = data;
+
+	return elem;
+}
+
+
+/** Append a new element to a message. 
+ *
+ * @param name Textual name of element (static string, neither copied nor freed).
+ * @param type An MSIM_TYPE_* code.
+ * @param data Pointer to data, see below.
+ *
+ * @return The new message - must be assigned to as with GList*. For example:
+ *
+ *     msg = msim_msg_append(msg, ...)
+ *
+ * The data parameter depends on the type given:
+ *
+ * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x).
+ *
+ * * MSIM_TYPE_BINARY: Same as integer, non-zero is TRUE and zero is FALSE.
+ *
+ * * MSIM_TYPE_STRING: gchar *. The data WILL BE FREED - use g_strdup() if needed.
+ *
+ * * MSIM_TYPE_RAW: gchar *. The data WILL BE FREED - use g_strdup() if needed.
+ *
+ * * MSIM_TYPE_BINARY: g_string_new_len(data, length). The data AND GString will be freed.
+ *
+ * * MSIM_TYPE_DICTIONARY: An MsimMessage *. Freed when message is destroyed.
+ *
+ * * MSIM_TYPE_LIST: GList * of gchar *. Again, everything will be freed.
+ *
+ * */
+MsimMessage *
+msim_msg_append(MsimMessage *msg, const gchar *name, 
+		MsimMessageType type, gpointer data)
+{
+	return g_list_append(msg, msim_msg_element_new(name, type, data));
+}
+
+/** Insert a new element into a message, before the given element name.
+ *
+ * @param name_before Name of the element to insert the new element before. If 
+ *                    could not be found or NULL, new element will be inserted at end.
+ *
+ * See msim_msg_append() for usage of other parameters, and an important note about return value.
+ */
+MsimMessage *
+msim_msg_insert_before(MsimMessage *msg, const gchar *name_before, 
+		const gchar *name, MsimMessageType type, gpointer data)
+{
+	MsimMessageElement *new_elem;
+	GList *node_before;
+
+	new_elem = msim_msg_element_new(name, type, data);
+
+	node_before = msim_msg_get_node(msg, name_before);
+
+	return g_list_insert_before(msg, node_before, new_elem);
+}
+
+/** Pack a string using the given GFunc and seperator.
+ * Used by msim_msg_dump() and msim_msg_pack().
+ */
+gchar *
+msim_msg_pack_using(MsimMessage *msg, 
+		GFunc gf, 
+		const gchar *sep, 
+		const gchar *begin, const gchar *end)
+{
+	gchar **strings;
+	gchar **strings_tmp;
+	gchar *joined;
+	gchar *final;
+	int i;
+
+	g_return_val_if_fail(msg != NULL, NULL);
+
+	/* Add one for NULL terminator for g_strjoinv(). */
+	strings = (gchar **)g_new0(gchar *, g_list_length(msg) + 1);
+
+	strings_tmp = strings;
+	g_list_foreach(msg, gf, &strings_tmp);
+
+	joined = g_strjoinv(sep, strings);
+	final = g_strconcat(begin, joined, end, NULL);
+	g_free(joined);
+
+	/* Clean up. */
+	for (i = 0; i < g_list_length(msg); ++i) {
+		g_free(strings[i]);
+	}
+
+	g_free(strings);
+
+	return final;
+}
+/** Store a human-readable string describing the element.
+ *
+ * @param data Pointer to an MsimMessageElement.
+ * @param user_data 
+ */
+static void 
+msim_msg_debug_string_element(gpointer data, gpointer user_data)
+{
+	MsimMessageElement *elem;
+	gchar *string;
+	GString *gs;
+	gchar *binary;
+	gchar ***items;  /* wow, a pointer to a pointer to a pointer */
+	
+	gchar *s;
+	GList *gl;
+	guint i;
+
+	elem = (MsimMessageElement *)data;
+	items = user_data;
+
+	switch (elem->type) {
+		case MSIM_TYPE_INTEGER:
+			string = g_strdup_printf("%s(integer): %d", elem->name, 
+					GPOINTER_TO_UINT(elem->data));
+			break;
+
+		case MSIM_TYPE_RAW:
+			string = g_strdup_printf("%s(raw): %s", elem->name, 
+					elem->data ? (gchar *)elem->data : "(NULL)");
+			break;
+
+		case MSIM_TYPE_STRING:
+			string = g_strdup_printf("%s(string): %s", elem->name, 
+					elem->data ? (gchar *)elem->data : "(NULL)");
+			break;
+
+		case MSIM_TYPE_BINARY:
+			gs = (GString *)elem->data;
+			binary = purple_base64_encode((guchar*)gs->str, gs->len);
+			string = g_strdup_printf("%s(binary, %d bytes): %s", elem->name, (int)gs->len, binary);
+			g_free(binary);
+			break;
+
+		case MSIM_TYPE_BOOLEAN:
+			string = g_strdup_printf("%s(boolean): %s", elem->name,
+					elem->data ? "TRUE" : "FALSE");
+			break;
+
+		case MSIM_TYPE_DICTIONARY:
+			if (!elem->data) {
+				s = g_strdup("(NULL)");
+			} else {
+				s = msim_msg_dump_to_str((MsimMessage *)elem->data);
+			}
+
+			if (!s) {
+				s = g_strdup("(NULL, couldn't msim_msg_dump_to_str)");
+			}
+
+			string = g_strdup_printf("%s(dict): %s", elem->name, s);
+
+			g_free(s);
+			break;
+			
+		case MSIM_TYPE_LIST:
+			gs = g_string_new("");
+			g_string_append_printf(gs, "%s(list): \n", elem->name);
+
+			i = 0;
+			for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl)) {
+				g_string_append_printf(gs, " %d. %s\n", i, (gchar *)(gl->data));
+				++i;
+			}
+			
+			string = gs->str;
+			break;
+
+		default:
+			string = g_strdup_printf("%s(unknown type %d", 
+					elem->name ? elem->name : "(NULL)", elem->type);
+			break;
+	}
+
+	**items = string;
+	++(*items);
+}
+
+/** Print a human-readable string of the message to Purple's debug log.
+ *
+ * @param fmt_string A static string, in which '%s' will be replaced.
+ */
+void 
+msim_msg_dump(const gchar *fmt_string, MsimMessage *msg)
+{
+	gchar *debug_str;
+
+	g_return_if_fail(fmt_string != NULL);
+
+	debug_str = msim_msg_dump_to_str(msg);
+	
+	g_return_if_fail(debug_str != NULL);
+
+	purple_debug_info("msim", fmt_string, debug_str);
+
+	g_free(debug_str);
+}
+
+/** Return a human-readable string of the message.
+ *
+ * @return A new gchar *, must be g_free()'d.
+ */
+gchar *
+msim_msg_dump_to_str(MsimMessage *msg)
+{
+	gchar *debug_str;
+
+	if (!msg) {
+		debug_str = g_strdup("<MsimMessage: empty>");
+	} else {
+		debug_str = msim_msg_pack_using(msg, msim_msg_debug_string_element, 
+				"\n", "<MsimMessage: \n", "\n/MsimMessage>");
+	}
+
+	return debug_str;
+}
+
+/** Return a message element data as a new string for a raw protocol message, converting from other types (integer, etc.) if necessary.
+ *
+ * @return const gchar * The data as a string, or NULL. Caller must g_free().
+ *
+ * Returns a string suitable for inclusion in a raw protocol message, not necessarily
+ * optimal for human consumption. For example, strings are escaped. Use 
+ * msim_msg_get_string() if you want a string, which in some cases is same as this.
+ */
+gchar *
+msim_msg_pack_element_data(MsimMessageElement *elem)
+{
+	GString *gs;
+	GList *gl;
+
+	g_return_val_if_fail(elem != NULL, NULL);
+
+	switch (elem->type) {
+		case MSIM_TYPE_INTEGER:
+			return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data));
+
+		case MSIM_TYPE_RAW:
+			/* Not un-escaped - this is a raw element, already escaped if necessary. */
+			return (gchar *)g_strdup((gchar *)elem->data);
+
+		case MSIM_TYPE_STRING:
+			/* Strings get escaped. msim_escape() creates a new string. */
+			g_return_val_if_fail(elem->data != NULL, NULL);
+			return elem->data ? msim_escape((gchar *)elem->data) :
+				g_strdup("(NULL)");
+
+		case MSIM_TYPE_BINARY:
+			gs = (GString *)elem->data;
+			/* Do not escape! */
+			return purple_base64_encode((guchar *)gs->str, gs->len);
+
+		case MSIM_TYPE_BOOLEAN:
+			/* Not used by messages in the wire protocol * -- see msim_msg_pack_element.
+			 * Only used by dictionaries, see msim_msg_pack_element_dict. */
+			return elem->data ? g_strdup("On") : g_strdup("Off");
+
+		case MSIM_TYPE_DICTIONARY:
+			return msim_msg_pack_dict((MsimMessage *)elem->data);
+			
+		case MSIM_TYPE_LIST:
+			/* Pack using a|b|c|d|... */
+			gs = g_string_new("");
+
+			for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl)) {
+				g_string_append_printf(gs, "%s", (gchar*)(gl->data));
+				
+				/* All but last element is separated by a bar. */
+				if (g_list_next(gl)) 
+					g_string_append(gs, "|");
+			}
+			
+			return gs->str;
+
+		default:
+			purple_debug_info("msim", "field %s, unknown type %d\n", 
+					elem->name ? elem->name : "(NULL)", 
+					elem->type);
+			return NULL;
+	}
+}
+
+/** Pack an element into its protcol representation inside a dictionary.
+ *
+ * See msim_msg_pack_element().
+ */
+static void
+msim_msg_pack_element_dict(gpointer data, gpointer user_data)
+{
+	MsimMessageElement *elem;
+	gchar *string, *data_string, ***items;
+
+	elem = (MsimMessageElement *)data;
+	items = (gchar ***)user_data;
+
+	/* Exclude elements beginning with '_' from packed protocol messages. */
+	if (elem->name[0] == '_') {
+		return;
+	}
+
+	data_string = msim_msg_pack_element_data(elem);
+
+	g_return_if_fail(data_string != NULL);
+
+	switch (elem->type) {
+		/* These types are represented by key name/value pairs (converted above). */
+		case MSIM_TYPE_INTEGER:
+		case MSIM_TYPE_RAW:
+		case MSIM_TYPE_STRING:
+		case MSIM_TYPE_BINARY:
+		case MSIM_TYPE_DICTIONARY:
+		case MSIM_TYPE_LIST:
+		case MSIM_TYPE_BOOLEAN: /* Boolean is On or Off */
+			string = g_strconcat(elem->name, "=", data_string, NULL);
+			break;
+
+		default:
+			g_free(data_string);
+			g_return_if_fail(FALSE);
+			break;
+	}
+
+	g_free(data_string);
+
+	**items = string;
+	++(*items);
+}
+
+/** Pack an element into its protocol representation. 
+ *
+ * @param data Pointer to an MsimMessageElement.
+ * @param user_data Pointer to a gchar ** array of string items.
+ *
+ * Called by msim_msg_pack(). Will pack the MsimMessageElement into
+ * a part of the protocol string and append it to the array. Caller
+ * is responsible for creating array to correct dimensions, and
+ * freeing each string element of the array added by this function.
+ */
+static void 
+msim_msg_pack_element(gpointer data, gpointer user_data)
+{
+	MsimMessageElement *elem;
+	gchar *string, *data_string;
+	gchar ***items;
+
+	elem = (MsimMessageElement *)data;
+	items = (gchar ***)user_data;
+
+	/* Exclude elements beginning with '_' from packed protocol messages. */
+	if (elem->name[0] == '_') {
+		return;
+	}
+
+	data_string = msim_msg_pack_element_data(elem);
+
+	switch (elem->type) {
+		/* These types are represented by key name/value pairs (converted above). */
+		case MSIM_TYPE_INTEGER:
+		case MSIM_TYPE_RAW:
+		case MSIM_TYPE_STRING:
+		case MSIM_TYPE_BINARY:
+		case MSIM_TYPE_DICTIONARY:
+		case MSIM_TYPE_LIST:
+			string = g_strconcat(elem->name, "\\", data_string, NULL);
+			break;
+
+		/* Boolean is represented by absence or presence of name. */
+		case MSIM_TYPE_BOOLEAN:
+			if (GPOINTER_TO_UINT(elem->data)) {
+				/* True - leave in, with blank value. */
+				string = g_strdup_printf("%s\\", elem->name);
+			} else {
+				/* False - leave out. */
+				string = g_strdup("");
+			}
+			break;
+
+		default:
+			g_free(data_string);
+			g_return_if_fail(FALSE);
+			break;
+	}
+
+	g_free(data_string);
+
+	**items = string;
+	++(*items);
+}
+
+
+/** Return a packed string of a message suitable for sending over the wire.
+ *
+ * @return A string. Caller must g_free().
+ */
+gchar *
+msim_msg_pack(MsimMessage *msg)
+{
+	g_return_val_if_fail(msg != NULL, NULL);
+
+	return msim_msg_pack_using(msg, msim_msg_pack_element, "\\", "\\", "\\final\\");
+}
+
+/** Return a packed string of a dictionary, suitable for embedding in MSIM_TYPE_DICTIONARY.
+ *
+ * @return A string; caller must g_free().
+ */
+gchar *
+msim_msg_pack_dict(MsimMessage *msg)
+{
+	g_return_val_if_fail(msg != NULL, NULL);
+
+	return msim_msg_pack_using(msg, msim_msg_pack_element_dict, "\034", "", "");
+}
+
+/** 
+ * Parse a raw protocol message string into a MsimMessage *.
+ *
+ * @param raw The raw message string to parse, will be g_free()'d.
+ *
+ * @return MsimMessage *. Caller should msim_msg_free() when done.
+ */
+MsimMessage *
+msim_parse(gchar *raw)
+{
+	MsimMessage *msg;
+	gchar *token;
+	gchar **tokens;
+	gchar *key;
+	gchar *value;
+	int i;
+
+	g_return_val_if_fail(raw != NULL, NULL);
+
+	purple_debug_info("msim", "msim_parse: got <%s>\n", raw);
+
+	key = NULL;
+
+	/* All messages begin with a \. */
+	if (raw[0] != '\\' || raw[1] == 0) {
+		purple_debug_info("msim", "msim_parse: incomplete/bad string, "
+				"missing initial backslash: <%s>\n", raw);
+		/* XXX: Should we try to recover, and read to first backslash? */
+
+		g_free(raw);
+		return NULL;
+	}
+
+	msg = msim_msg_new(FALSE);
+
+	for (tokens = g_strsplit(raw + 1, "\\", 0), i = 0; 
+			(token = tokens[i]);
+			i++) {
+#ifdef MSIM_DEBUG_PARSE
+		purple_debug_info("msim", "tok=<%s>, i%2=%d\n", token, i % 2);
+#endif
+		if (i % 2) {
+			/* Odd-numbered ordinal is a value. */
+
+			value = token;
+		
+			/* Incoming protocol messages get tagged as MSIM_TYPE_RAW, which
+			 * represents an untyped piece of data. msim_msg_get_* will
+			 * convert to appropriate types for caller, and handle unescaping if needed. */
+			msg = msim_msg_append(msg, g_strdup(key), MSIM_TYPE_RAW, g_strdup(value));
+#ifdef MSIM_DEBUG_PARSE
+			purple_debug_info("msim", "insert string: |%s|=|%s|\n", key, value);
+#endif
+		} else {
+			/* Even numbered indexes are key names. */
+			key = token;
+		}
+	}
+	g_strfreev(tokens);
+
+	/* Can free now since all data was copied to hash key/values */
+	g_free(raw);
+
+	return msg;
+}
+
+/** Search for and return the node in msg, matching name, or NULL. 
+ *
+ * @param msg Message to search within.
+ * @param name Field name to search for.
+ *
+ * @return The GList * node for the MsimMessageElement with the given name, or NULL if not found or name is NULL.
+ *
+ * For internal use - users probably want to use msim_msg_get() to
+ * access the MsimMessageElement *, instead of the GList * container.
+ *
+ */
+static GList *
+msim_msg_get_node(MsimMessage *msg, const gchar *name)
+{
+	GList *node;
+
+	if (!name || !msg) {
+		return NULL;
+	}
+
+	/* Linear search for the given name. O(n) but n is small. */
+	for (node = msg; node != NULL; node = g_list_next(node)) {
+		MsimMessageElement *elem;
+
+		elem = (MsimMessageElement *)node->data;
+
+		g_return_val_if_fail(elem != NULL, NULL);
+		g_return_val_if_fail(elem->name != NULL, NULL);
+
+		if (strcmp(elem->name, name) == 0) {
+			return node;
+		}
+	}
+	return NULL;
+}
+
+/** Return the first MsimMessageElement * with given name in the MsimMessage *. 
+ *
+ * @param name Name to search for.
+ *
+ * @return MsimMessageElement * matching name, or NULL.
+ *
+ * Note: useful fields of MsimMessageElement are 'data' and 'type', which
+ * you can access directly. But it is often more convenient to use
+ * another msim_msg_get_* that converts the data to what type you want.
+ */
+MsimMessageElement *
+msim_msg_get(MsimMessage *msg, const gchar *name)
+{
+	GList *node;
+
+	node = msim_msg_get_node(msg, name);
+	if (node) {
+		return (MsimMessageElement *)node->data;
+	} else {
+		return NULL;
+	}
+}
+
+/** Return the data of an element of a given name, as a string.
+ *
+ * @param name Name of element.
+ *
+ * @return gchar * The data as a string, or NULL if not found. 
+ *     Caller must g_free().
+ *
+ * Note that msim_msg_pack_element_data() is similar, but returns a string
+ * for inclusion into a raw protocol string (escaped and everything).
+ * This function unescapes the string for you, if needed.
+ */
+gchar *
+msim_msg_get_string(MsimMessage *msg, const gchar *name)
+{
+	MsimMessageElement *elem;
+
+	elem = msim_msg_get(msg, name);
+	if (!elem) {
+		return NULL;
+	}
+
+	return msim_msg_get_string_from_element(elem);
+}
+
+gchar *
+msim_msg_get_string_from_element(MsimMessageElement *elem)
+{
+	g_return_val_if_fail(elem != NULL, NULL);
+	switch (elem->type) {
+		case MSIM_TYPE_INTEGER:
+			return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data));
+
+		case MSIM_TYPE_RAW:
+			/* Raw element from incoming message - if its a string, it'll
+			 * be escaped. */
+			return msim_unescape((gchar *)elem->data);
+
+		case MSIM_TYPE_STRING:
+			/* Already unescaped. */
+			return g_strdup((gchar *)elem->data);
+
+		default:
+			purple_debug_info("msim", "msim_msg_get_string_element: type %d unknown, name %s\n",
+					elem->type, elem->name ? elem->name : "(NULL)");
+			return NULL;
+	}
+}
+
+/** Return an element as a new list. Caller frees with msim_msg_list_free(). */
+GList *
+msim_msg_get_list(MsimMessage *msg, const gchar *name)
+{
+	MsimMessageElement *elem;
+
+	elem = msim_msg_get(msg, name);
+	if (!elem) {
+		return NULL;
+	}
+
+	return msim_msg_get_list_from_element(elem);
+}
+
+GList *
+msim_msg_get_list_from_element(MsimMessageElement *elem)
+{
+	g_return_val_if_fail(elem != NULL, NULL);
+	switch (elem->type) {
+		case MSIM_TYPE_LIST:
+			return msim_msg_list_copy((GList *)elem->data);
+
+		case MSIM_TYPE_RAW:
+			return msim_msg_list_parse((gchar *)elem->data);
+
+		default:
+			purple_debug_info("msim_msg_get_list", "type %d unknown, name %s\n",
+					elem->type, elem->name ? elem->name : "(NULL)");
+			return NULL;
+	}
+}
+
+/**
+ * Parse a \x1c-separated "dictionary" of key=value pairs into a hash table.
+ *
+ * @param raw The text of the dictionary to parse. Often the
+ *                 value for the 'body' field.
+ *
+ * @return A new MsimMessage *. Must msim_msg_free() when done.
+ */
+MsimMessage *
+msim_msg_dictionary_parse(gchar *raw)
+{
+	MsimMessage *dict;
+	gchar *item;
+	gchar **items;
+	gchar **elements;
+	guint i;
+
+	g_return_val_if_fail(raw != NULL, NULL);
+
+	dict = msim_msg_new(NULL);
+ 
+	for (items = g_strsplit(raw, "\x1c", 0), i = 0; 
+		(item = items[i]);
+		i++) {
+		gchar *key, *value;
+
+		elements = g_strsplit(item, "=", 2);
+
+		key = elements[0];
+		if (!key) {
+			purple_debug_info("msim", "msim_msg_parse_dictionary(%s): null key\n", 
+					raw);
+			g_strfreev(elements);
+			break;
+		}
+
+		value = elements[1];
+		if (!value) {
+			purple_debug_info("msim", "msim_msg_parse_dictionary(%s): null value\n", 
+					raw);
+			g_strfreev(elements);
+			break;
+		}
+
+#ifdef MSIM_DEBUG_PARSE
+		purple_debug_info("msim_msg_parse_dictionary","-- %s: %s\n", key ? key : "(NULL)", 
+				value ? value : "(NULL)");
+#endif
+		/* TODO: free key; right now it is treated as static */
+		dict = msim_msg_append(dict, g_strdup(key), MSIM_TYPE_RAW, g_strdup(value));
+
+		g_strfreev(elements);
+	}
+
+	g_strfreev(items);
+
+	return dict;
+}
+
+/** Return an element as a new dictionary. Caller frees with msim_msg_free(). */
+MsimMessage *
+msim_msg_get_dictionary(MsimMessage *msg, const gchar *name)
+{
+	MsimMessageElement *elem;
+
+	elem = msim_msg_get(msg, name);
+	if (!elem) {
+		return NULL;
+	}
+
+	return msim_msg_get_dictionary_from_element(elem);
+}
+
+MsimMessage *
+msim_msg_get_dictionary_from_element(MsimMessageElement *elem)
+{
+	g_return_val_if_fail(elem != NULL, NULL);
+	switch (elem->type) {
+		case MSIM_TYPE_DICTIONARY:
+			return msim_msg_clone((MsimMessage *)elem->data);
+		
+		case MSIM_TYPE_RAW:
+			return msim_msg_dictionary_parse((gchar *)elem->data);
+
+		default:
+			purple_debug_info("msim_msg_get_dictionary", "type %d unknown, name %s\n",
+					elem->type, elem->name ? elem->name : "(NULL)");
+			return NULL;
+	}
+}
+
+/** Return the data of an element of a given name, as an unsigned integer.
+ *
+ * @param name Name of element.
+ *
+ * @return guint Numeric representation of data, or 0 if could not be converted / not found.
+ *
+ * Useful to obtain an element's data if you know it should be an integer,
+ * even if it is not stored as an MSIM_TYPE_INTEGER. MSIM_TYPE_STRING will
+ * be converted handled correctly, for example.
+ */
+guint 
+msim_msg_get_integer(MsimMessage *msg, const gchar *name)
+{
+	MsimMessageElement *elem;
+
+	elem = msim_msg_get(msg, name);
+
+	if (!elem) {
+		return 0;
+	}
+
+	return msim_msg_get_integer_from_element(elem);
+}
+
+
+guint
+msim_msg_get_integer_from_element(MsimMessageElement *elem)
+{
+	g_return_val_if_fail(elem != NULL, 0);
+	switch (elem->type) {
+		case MSIM_TYPE_INTEGER:
+			return GPOINTER_TO_UINT(elem->data);
+
+		case MSIM_TYPE_RAW:
+		case MSIM_TYPE_STRING:
+			/* TODO: find out if we need larger integers */
+			return (guint)atoi((gchar *)elem->data);
+
+		default:
+			return 0;
+	}
+}
+
+/** Return the data of an element of a given name, as a binary GString.
+ *
+ * @param binary_data A pointer to a new pointer, which will be filled in with the binary data. CALLER MUST g_free().
+ *
+ * @param binary_length A pointer to an integer, which will be set to the binary data length.
+ *
+ * @return TRUE if successful, FALSE if not.
+ */
+gboolean 
+msim_msg_get_binary(MsimMessage *msg, const gchar *name, 
+		gchar **binary_data, gsize *binary_length)
+{
+	MsimMessageElement *elem;
+				
+	elem = msim_msg_get(msg, name);
+	if (!elem) {
+		return FALSE;
+	}
+
+	return msim_msg_get_binary_from_element(elem, binary_data, binary_length);
+}
+
+gboolean
+msim_msg_get_binary_from_element(MsimMessageElement *elem, gchar **binary_data, gsize *binary_length)
+{
+	GString *gs;
+
+	g_return_val_if_fail(elem != NULL, FALSE);
+
+	switch (elem->type) {
+		case MSIM_TYPE_RAW:
+			 /* Incoming messages are tagged with MSIM_TYPE_RAW, and
+			 * converted appropriately. They can still be "strings", just they won't
+			 * be tagged as MSIM_TYPE_STRING (as MSIM_TYPE_STRING is intended to be used
+			 * by msimprpl code for things like instant messages - stuff that should be
+			 * escaped if needed). DWIM.
+			 */
+	
+			/* Previously, incoming messages were stored as MSIM_TYPE_STRING.
+			 * This was fine for integers and strings, since they can easily be
+			 * converted in msim_get_*, as desirable. However, it does not work
+			 * well for binary strings. Consider:
+			 *
+			 * If incoming base64'd elements were tagged as MSIM_TYPE_STRING.
+			 * msim_msg_get_binary() sees MSIM_TYPE_STRING, base64 decodes, returns.
+			 * everything is fine.
+			 * But then, msim_send() is called on the incoming message, which has
+			 * a base64'd MSIM_TYPE_STRING that really is encoded binary. The values
+			 * will be escaped since strings are escaped, and / becomes /2; no good.
+			 *
+			 */
+			*binary_data = (gchar *)purple_base64_decode((const gchar *)elem->data, binary_length);
+			return TRUE;
+
+		case MSIM_TYPE_BINARY:
+			gs = (GString *)elem->data;
+
+			/* Duplicate data, so caller can g_free() it. */
+			*binary_data = g_new0(char, gs->len);
+			memcpy(*binary_data, gs->str, gs->len);
+
+			*binary_length = gs->len;
+
+			return TRUE;
+
+
+			/* Rejected because if it isn't already a GString, have to g_new0 it and
+			 * then caller has to ALSO free the GString! 
+			 *
+			 * return (GString *)elem->data; */
+
+		default:
+			purple_debug_info("msim", "msim_msg_get_binary: unhandled type %d for key %s\n",
+					elem->type, elem->name ? elem->name : "(NULL)");
+			return FALSE;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/message.h	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,117 @@
+/** MySpaceIM protocol messages
+ *
+ * \author Jeff Connelly
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 _MYSPACE_MESSAGE_H
+#define _MYSPACE_MESSAGE_H
+
+#include <glib.h>
+
+/* Types */
+#define MsimMessage GList               /* #define instead of typedef to avoid casting */
+typedef struct _MsimMessageElement
+{
+	const gchar *name;              /**< Textual name of element. */
+	guint type;                     /**< MSIM_TYPE_* code. */
+	gpointer data;                  /**< Pointer to data, or GUINT_TO_POINTER for int/bool. */
+} MsimMessageElement;
+
+typedef gchar MsimMessageType;
+
+#define msim_msg_get_next_element_node(msg)    ((MsimMessage *)(msg->next))
+
+/* Protocol field types */
+#define MSIM_TYPE_RAW            '-'
+#define MSIM_TYPE_INTEGER        'i'
+#define MSIM_TYPE_STRING         's'
+#define MSIM_TYPE_BINARY         'b'
+#define MSIM_TYPE_BOOLEAN        'f'
+#define MSIM_TYPE_DICTIONARY     'd'
+#define MSIM_TYPE_LIST           'l'
+
+gchar *msim_escape(const gchar *msg);
+gchar *msim_unescape(const gchar *msg);
+
+MsimMessage *msim_msg_new(gchar *first_key, ...);
+/* No sentinel attribute, because can leave off varargs if not_empty is FALSE. */
+
+MsimMessage *msim_msg_clone(MsimMessage *old);
+void msim_msg_free_element_data(MsimMessageElement *elem);
+void msim_msg_free(MsimMessage *msg);
+MsimMessage *msim_msg_append(MsimMessage *msg, const gchar *name, MsimMessageType type, gpointer data);
+MsimMessage *msim_msg_insert_before(MsimMessage *msg, const gchar *name_before, const gchar *name, MsimMessageType type, gpointer data);
+gchar *msim_msg_dump_to_str(MsimMessage *msg);
+gchar *msim_msg_pack_element_data(MsimMessageElement *elem);
+void msim_msg_dump(const char *fmt_string, MsimMessage *msg);
+gchar *msim_msg_pack(MsimMessage *msg);
+gchar *msim_msg_pack_dict(MsimMessage *msg);
+
+GList *msim_msg_list_copy(GList *old);
+void msim_msg_list_free(GList *l);
+GList *msim_msg_list_parse(const gchar *raw);
+
+/* Defined in myspace.h */
+struct _MsimSession;
+
+/* Based on http://permalink.gmane.org/gmane.comp.parsers.sparse/695 
+ * Define macros for useful gcc attributes. */
+#ifdef __GNUC__
+#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#define FORMAT_ATTR(pos) __attribute__ ((__format__ (__printf__, pos, pos+1)))
+#define NORETURN_ATTR __attribute__ ((__noreturn__))
+/* __sentinel__ attribute was introduced in gcc 3.5 */
+#if (GCC_VERSION >= 3005)
+	#define SENTINEL_ATTR __attribute__ ((__sentinel__(0)))
+#else
+	#define SENTINEL_ATTR
+#endif /* gcc >= 3.5 */
+#else
+	#define FORMAT_ATTR(pos)
+	#define NORETURN_ATTR
+	#define SENTINEL_ATTR
+#endif 
+
+/* Cause gcc to emit "a missing sentinel in function call" if forgot
+ * to write NULL as last, terminating parameter. */
+gboolean msim_send(struct _MsimSession *session, ...) SENTINEL_ATTR;
+
+gboolean msim_msg_send(struct _MsimSession *session, MsimMessage *msg);
+
+MsimMessage *msim_parse(gchar *raw);
+MsimMessage *msim_msg_dictionary_parse(gchar *raw);
+
+MsimMessageElement *msim_msg_get(MsimMessage *msg, const gchar *name);
+
+/* Retrieve data by name */
+gchar *msim_msg_get_string(MsimMessage *msg, const gchar *name);
+GList *msim_msg_get_list(MsimMessage *msg, const gchar *name);
+MsimMessage *msim_msg_get_dictionary(MsimMessage *msg, const gchar *name);
+guint msim_msg_get_integer(MsimMessage *msg, const gchar *name);
+gboolean msim_msg_get_binary(MsimMessage *msg, const gchar *name, gchar **binary_data, gsize *binary_length);
+
+/* Retrieve data by element (MsimMessageElement *), returned from msim_msg_get() */
+gchar *msim_msg_get_string_from_element(MsimMessageElement *elem);
+GList *msim_msg_get_list_from_element(MsimMessageElement *elem);
+MsimMessage *msim_msg_get_dictionary_from_element(MsimMessageElement *elem);
+guint msim_msg_get_integer_from_element(MsimMessageElement *elem);
+gboolean msim_msg_get_binary_from_element(MsimMessageElement *elem, 
+		gchar **binary_data, gsize *binary_length);
+
+#endif /* _MYSPACE_MESSAGE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/myspace.c	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,3181 @@
+/* MySpaceIM Protocol Plugin
+ *
+ * \author Jeff Connelly
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * Based on Purple's "C Plugin HOWTO" hello world example.
+ *
+ * Code also drawn from mockprpl:
+ *  http://snarfed.org/space/purple+mock+protocol+plugin
+ *  Copyright (C) 2004-2007, Ryan Barrett <mockprpl@ryanb.org>
+ *
+ * and some constructs also based on existing Purple plugins, which are:
+ *   Copyright (C) 2003, Robbert Haarman <purple@inglorion.net>
+ *   Copyright (C) 2003, Ethan Blanton <eblanton@cs.purdue.edu>
+ *   Copyright (C) 2000-2003, Rob Flynn <rob@tgflinux.com>
+ *   Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
+ *
+ * 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
+ */
+
+#define PURPLE_PLUGIN
+
+#include "myspace.h"
+
+/* Internal functions */
+
+#ifdef MSIM_DEBUG_MSG
+static void print_hash_item(gpointer key, gpointer value, gpointer user_data);
+#endif
+
+static int msim_send_really_raw(PurpleConnection *gc, const char *buf, int total_bytes);
+static gboolean msim_login_challenge(MsimSession *session, MsimMessage *msg);
+static const gchar *msim_compute_login_response(const gchar nonce[2 * NONCE_SIZE], const gchar *email, const gchar *password, guint *response_len);
+
+static gboolean msim_incoming_bm_record_cv(MsimSession *session, MsimMessage *msg);
+static gboolean msim_incoming_bm(MsimSession *session, MsimMessage *msg);
+static gboolean msim_incoming_status(MsimSession *session, MsimMessage *msg);
+static gboolean msim_incoming_im(MsimSession *session, MsimMessage *msg);
+/* static gboolean msim_incoming_zap(MsimSession *session, MsimMessage *msg); - in zap.c */
+static gboolean msim_incoming_action(MsimSession *session, MsimMessage *msg);
+static gboolean msim_incoming_media(MsimSession *session, MsimMessage *msg);
+static gboolean msim_incoming_unofficial_client(MsimSession *session, 
+		MsimMessage *msg);
+
+#ifdef MSIM_SEND_CLIENT_VERSION
+static gboolean msim_send_unofficial_client(MsimSession *session, gchar *username);
+#endif
+
+static void msim_get_info_cb(MsimSession *session, MsimMessage *userinfo, gpointer data);
+
+static void msim_set_status_code(MsimSession *session, guint code, gchar *statstring);
+
+static gboolean msim_process_server_info(MsimSession *session, MsimMessage *msg);
+static gboolean msim_web_challenge(MsimSession *session, MsimMessage *msg); 
+static gboolean msim_process_reply(MsimSession *session, MsimMessage *msg);
+
+static gboolean msim_preprocess_incoming(MsimSession *session, MsimMessage *msg);
+
+#ifdef MSIM_USE_KEEPALIVE
+static gboolean msim_check_alive(gpointer data);
+#endif
+
+static gboolean msim_we_are_logged_on(MsimSession *session, MsimMessage *msg);
+
+static gboolean msim_process(MsimSession *session, MsimMessage *msg);
+
+static MsimMessage *msim_do_postprocessing(MsimMessage *msg, const gchar *uid_field_name, const gchar *uid_before, guint uid);
+static void msim_postprocess_outgoing_cb(MsimSession *session, MsimMessage *userinfo, gpointer data);
+static gboolean msim_postprocess_outgoing(MsimSession *session, MsimMessage *msg, const gchar *username, const gchar *uid_field_name, const gchar *uid_before); 
+
+static gboolean msim_error(MsimSession *session, MsimMessage *msg);
+
+static void msim_check_inbox_cb(MsimSession *session, MsimMessage *userinfo, gpointer data);
+static gboolean msim_check_inbox(gpointer data);
+
+static void msim_input_cb(gpointer gc_uncasted, gint source, PurpleInputCondition cond);
+
+
+static void msim_connect_cb(gpointer data, gint source, const gchar *error_message);
+
+static void msim_import_friends(PurplePluginAction *action);
+static void msim_import_friends_cb(MsimSession *session, MsimMessage *reply, gpointer user_data);
+static gboolean msim_get_contact_list(MsimSession *session, int what_to_do_after);
+
+static gboolean msim_uri_handler(const gchar *proto, const gchar *cmd, GHashTable *params);
+static void msim_uri_handler_addContact_cb(MsimSession *session, MsimMessage *userinfo, gpointer data);
+static void msim_uri_handler_sendIM_cb(MsimSession *session, MsimMessage *userinfo, gpointer data);
+
+/** 
+ * Load the plugin.
+ */
+gboolean 
+msim_load(PurplePlugin *plugin)
+{
+	/* If compiled to use RC4 from libpurple, check if it is really there. */
+	if (!purple_ciphers_find_cipher("rc4")) {
+		purple_debug_error("msim", "rc4 not in libpurple, but it is required - not loading MySpaceIM plugin!\n");
+		purple_notify_error(plugin, _("Missing Cipher"), 
+				_("The RC4 cipher could not be found"),
+				_("Upgrade "
+					"to a libpurple with RC4 support (>= 2.0.1). MySpaceIM "
+					"plugin will not be loaded."));
+		return FALSE;
+	}
+	return TRUE;
+}
+
+/**
+ * Get possible user status types. Based on mockprpl.
+ *
+ * @return GList of status types.
+ */
+GList *
+msim_status_types(PurpleAccount *acct)
+{
+	GList *types;
+	PurpleStatusType *status;
+
+	purple_debug_info("myspace", "returning status types\n");
+
+	types = NULL;
+
+    /* Statuses are almost all the same. Define a macro to reduce code repetition. */
+#define _MSIM_ADD_NEW_STATUS(prim) status =                         \
+	purple_status_type_new_with_attrs(                          \
+	prim,   /* PurpleStatusPrimitive */                         \
+	NULL,   /* id - use default */                              \
+	NULL,   /* name - use default */                            \
+	TRUE,   /* savable */                                       \
+	TRUE,   /* user_settable */                                 \
+	FALSE,  /* not independent */                               \
+	                                                            \
+	/* Attributes - each status can have a message. */          \
+	"message",                                                  \
+	_("Message"),                                               \
+	purple_value_new(PURPLE_TYPE_STRING),                       \
+	NULL);                                                      \
+	                                                            \
+	                                                            \
+	types = g_list_append(types, status)
+
+
+	_MSIM_ADD_NEW_STATUS(PURPLE_STATUS_AVAILABLE);
+	_MSIM_ADD_NEW_STATUS(PURPLE_STATUS_AWAY);
+	_MSIM_ADD_NEW_STATUS(PURPLE_STATUS_OFFLINE);
+	_MSIM_ADD_NEW_STATUS(PURPLE_STATUS_INVISIBLE);
+
+
+	return types;
+}
+
+/**
+ * Return the icon name for a buddy and account.
+ *
+ * @param acct The account to find the icon for, or NULL for protocol icon.
+ * @param buddy The buddy to find the icon for, or NULL for the account icon.
+ *
+ * @return The base icon name string.
+ */
+const gchar *
+msim_list_icon(PurpleAccount *acct, PurpleBuddy *buddy)
+{
+	/* Use a MySpace icon submitted by hbons at
+	 * http://developer.pidgin.im/wiki/MySpaceIM. */
+	return "myspace";
+}
+
+#ifdef MSIM_DEBUG_MSG
+static void 
+print_hash_item(gpointer key, gpointer value, gpointer user_data)
+{
+	purple_debug_info("msim", "%s=%s\n",
+			key ? (gchar *)key : "(NULL)", 
+			value ? (gchar *)value : "(NULL)");
+}
+#endif
+
+/** 
+ * Send raw data (given as a NUL-terminated string) to the server.
+ *
+ * @param session 
+ * @param msg The raw data to send, in a NUL-terminated string.
+ *
+ * @return TRUE if succeeded, FALSE if not.
+ *
+ */
+gboolean 
+msim_send_raw(MsimSession *session, const gchar *msg)
+{
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+	
+	purple_debug_info("msim", "msim_send_raw: writing <%s>\n", msg);
+
+	return msim_send_really_raw(session->gc, msg, strlen(msg)) ==
+		strlen(msg);
+}
+
+/** Send raw data to the server, possibly with embedded NULs. 
+ *
+ * Used in prpl_info struct, so that plugins can have the most possible
+ * control of what is sent over the connection. Inside this prpl, 
+ * msim_send_raw() is used, since it sends NUL-terminated strings (easier).
+ *
+ * @param gc PurpleConnection
+ * @param buf Buffer to send
+ * @param total_bytes Size of buffer to send
+ *
+ * @return Bytes successfully sent, or -1 on error.
+ */
+static int 
+msim_send_really_raw(PurpleConnection *gc, const char *buf, int total_bytes)
+{
+	int total_bytes_sent;
+	MsimSession *session;
+
+	g_return_val_if_fail(gc != NULL, -1);
+	g_return_val_if_fail(buf != NULL, -1);
+	g_return_val_if_fail(total_bytes >= 0, -1);
+
+	session = (MsimSession *)gc->proto_data;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), -1);
+	
+	/* Loop until all data is sent, or a failure occurs. */
+	total_bytes_sent = 0;
+	do {
+		int bytes_sent;
+
+		bytes_sent = send(session->fd, buf + total_bytes_sent, 
+				total_bytes - total_bytes_sent, 0);
+
+		if (bytes_sent < 0) {
+			purple_debug_info("msim", "msim_send_raw(%s): send() failed: %s\n",
+					buf, g_strerror(errno));
+			return total_bytes_sent;
+		}
+		total_bytes_sent += bytes_sent;
+
+	} while(total_bytes_sent < total_bytes);
+
+	return total_bytes_sent;
+}
+
+
+/** 
+ * Start logging in to the MSIM servers.
+ * 
+ * @param acct Account information to use to login.
+ */
+void 
+msim_login(PurpleAccount *acct)
+{
+	PurpleConnection *gc;
+	const gchar *host;
+	int port;
+
+	g_return_if_fail(acct != NULL);
+	g_return_if_fail(acct->username != NULL);
+
+	purple_debug_info("msim", "logging in %s\n", acct->username);
+
+	gc = purple_account_get_connection(acct);
+	gc->proto_data = msim_session_new(acct);
+	gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_URLDESC;
+
+#ifdef MSIM_MAX_PASSWORD_LENGTH
+	/* Passwords are limited in length. */
+	if (strlen(acct->password) > MSIM_MAX_PASSWORD_LENGTH) {
+		gchar *str;
+
+		str = g_strdup_printf(
+				_("Sorry, passwords over %d characters in length (yours is "
+				"%d) are not supported by MySpace."), 
+				MSIM_MAX_PASSWORD_LENGTH,
+				(int)strlen(acct->password));
+
+		/* Notify an error message also, because this is important! */
+		purple_notify_error(acct, g_strdup(_("MySpaceIM Error")), str, NULL);
+
+		purple_connection_error(gc, str);
+		
+		g_free(str);
+	}
+#endif
+
+	/* 1. connect to server */
+	purple_connection_update_progress(gc, _("Connecting"),
+								  0,   /* which connection step this is */
+								  4);  /* total number of steps */
+
+	host = purple_account_get_string(acct, "server", MSIM_SERVER);
+	port = purple_account_get_int(acct, "port", MSIM_PORT);
+
+	/* From purple.sf.net/api:
+	 * """Note that this function name can be misleading--although it is called 
+	 * "proxy connect," it is used for establishing any outgoing TCP connection, 
+	 * whether through a proxy or not.""" */
+
+	/* Calls msim_connect_cb when connected. */
+	if (!purple_proxy_connect(gc, acct, host, port, msim_connect_cb, gc)) {
+		/* TODO: try other ports if in auto mode, then save
+		 * working port and try that first next time. */
+		purple_connection_error(gc, _("Couldn't create socket"));
+		return;
+	}
+}
+
+/**
+ * Process a login challenge, sending a response. 
+ *
+ * @param session 
+ * @param msg Login challenge message.
+ *
+ * @return TRUE if successful, FALSE if not
+ */
+static gboolean 
+msim_login_challenge(MsimSession *session, MsimMessage *msg) 
+{
+	PurpleAccount *account;
+	const gchar *response;
+	guint response_len;
+	gchar *nc;
+	gsize nc_len;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	g_return_val_if_fail(msim_msg_get_binary(msg, "nc", &nc, &nc_len), FALSE);
+
+	account = session->account;
+
+	g_return_val_if_fail(account != NULL, FALSE);
+
+	purple_connection_update_progress(session->gc, _("Reading challenge"), 1, 4);
+
+	purple_debug_info("msim", "nc is %d bytes, decoded\n", nc_len);
+
+	if (nc_len != MSIM_AUTH_CHALLENGE_LENGTH) {
+		purple_debug_info("msim", "bad nc length: %x != 0x%x\n", nc_len, MSIM_AUTH_CHALLENGE_LENGTH);
+		purple_connection_error(session->gc, _("Unexpected challenge length from server"));
+		return FALSE;
+	}
+
+	purple_connection_update_progress(session->gc, _("Logging in"), 2, 4);
+
+	response_len = 0;
+	response = msim_compute_login_response(nc, account->username, account->password, &response_len);
+
+	g_free(nc);
+
+	return msim_send(session, 
+			"login2", MSIM_TYPE_INTEGER, MSIM_AUTH_ALGORITHM,
+			/* This is actually user's email address. */
+			"username", MSIM_TYPE_STRING, g_strdup(account->username),
+			/* GString and gchar * response will be freed in msim_msg_free() in msim_send(). */
+			"response", MSIM_TYPE_BINARY, g_string_new_len(response, response_len),
+			"clientver", MSIM_TYPE_INTEGER, MSIM_CLIENT_VERSION,
+			"langid", MSIM_TYPE_INTEGER, MSIM_LANGUAGE_ID_ENGLISH,
+			"imlang", MSIM_TYPE_STRING, g_strdup(MSIM_LANGUAGE_NAME_ENGLISH),
+			"reconn", MSIM_TYPE_INTEGER, 0,
+			"status", MSIM_TYPE_INTEGER, 100,
+			"id", MSIM_TYPE_INTEGER, 1,
+			NULL);
+}
+
+/**
+ * Compute the base64'd login challenge response based on username, password, nonce, and IPs.
+ *
+ * @param nonce The base64 encoded nonce ('nc') field from the server.
+ * @param email User's email address (used as login name).
+ * @param password User's cleartext password.
+ * @param response_len Will be written with response length.
+ *
+ * @return Binary login challenge response, ready to send to the server. 
+ * Must be g_free()'d when finished. NULL if error.
+ */
+static const gchar *
+msim_compute_login_response(const gchar nonce[2 * NONCE_SIZE], 
+		const gchar *email, const gchar *password, guint *response_len)
+{
+	PurpleCipherContext *key_context;
+	PurpleCipher *sha1;
+	PurpleCipherContext *rc4;
+
+	guchar hash_pw[HASH_SIZE];
+	guchar key[HASH_SIZE];
+	gchar *password_utf16le, *password_utf8_lc;
+	guchar *data;
+	guchar *data_out;
+	size_t data_len, data_out_len;
+	gsize conv_bytes_read, conv_bytes_written;
+	GError *conv_error;
+#ifdef MSIM_DEBUG_LOGIN_CHALLENGE
+	int i;
+#endif
+
+	g_return_val_if_fail(nonce != NULL, NULL);
+	g_return_val_if_fail(email != NULL, NULL);
+	g_return_val_if_fail(password != NULL, NULL);
+	g_return_val_if_fail(response_len != NULL, NULL);
+
+	/* Convert password to lowercase (required for passwords containing
+	 * uppercase characters). MySpace passwords are lowercase,
+	 * see ticket #2066. */
+	password_utf8_lc = g_utf8_strdown(password, -1);
+
+	/* Convert ASCII password to UTF16 little endian */
+	purple_debug_info("msim", "converting password to UTF-16LE\n");
+	conv_error = NULL;
+	password_utf16le = g_convert(password_utf8_lc, -1, "UTF-16LE", "UTF-8", 
+			&conv_bytes_read, &conv_bytes_written, &conv_error);
+	g_free(password_utf8_lc);
+
+	g_return_val_if_fail(conv_bytes_read == strlen(password), NULL);
+
+	if (conv_error != NULL) {
+		purple_debug_error("msim", 
+				"g_convert password UTF8->UTF16LE failed: %s",
+				conv_error->message);
+		g_error_free(conv_error);
+		return NULL;
+	}
+
+	/* Compute password hash */ 
+	purple_cipher_digest_region("sha1", (guchar *)password_utf16le, 
+			conv_bytes_written, sizeof(hash_pw), hash_pw, NULL);
+	g_free(password_utf16le);
+
+#ifdef MSIM_DEBUG_LOGIN_CHALLENGE
+	purple_debug_info("msim", "pwhash = ");
+	for (i = 0; i < sizeof(hash_pw); i++)
+		purple_debug_info("msim", "%.2x ", hash_pw[i]);
+	purple_debug_info("msim", "\n");
+#endif
+
+	/* key = sha1(sha1(pw) + nonce2) */
+	sha1 = purple_ciphers_find_cipher("sha1");
+	key_context = purple_cipher_context_new(sha1, NULL);
+	purple_cipher_context_append(key_context, hash_pw, HASH_SIZE);
+	purple_cipher_context_append(key_context, (guchar *)(nonce + NONCE_SIZE), NONCE_SIZE);
+	purple_cipher_context_digest(key_context, sizeof(key), key, NULL);
+
+#ifdef MSIM_DEBUG_LOGIN_CHALLENGE
+	purple_debug_info("msim", "key = ");
+	for (i = 0; i < sizeof(key); i++) {
+		purple_debug_info("msim", "%.2x ", key[i]);
+	}
+	purple_debug_info("msim", "\n");
+#endif
+
+	rc4 = purple_cipher_context_new_by_name("rc4", NULL);
+
+	/* Note: 'key' variable is 0x14 bytes (from SHA-1 hash), 
+	 * but only first 0x10 used for the RC4 key. */
+	purple_cipher_context_set_option(rc4, "key_len", (gpointer)0x10);
+	purple_cipher_context_set_key(rc4, key);
+
+	/* TODO: obtain IPs of network interfaces */
+
+	/* rc4 encrypt:
+	 * nonce1+email+IP list */
+
+	data_len = NONCE_SIZE + strlen(email) + MSIM_LOGIN_IP_LIST_LEN;
+	data = g_new0(guchar, data_len);
+	memcpy(data, nonce, NONCE_SIZE);
+	memcpy(data + NONCE_SIZE, email, strlen(email));
+	memcpy(data + NONCE_SIZE + strlen(email), MSIM_LOGIN_IP_LIST, MSIM_LOGIN_IP_LIST_LEN);
+
+	data_out = g_new0(guchar, data_len);
+
+	purple_cipher_context_encrypt(rc4, (const guchar *)data, 
+			data_len, data_out, &data_out_len);
+	purple_cipher_context_destroy(rc4);
+
+	g_assert(data_out_len == data_len);
+
+#ifdef MSIM_DEBUG_LOGIN_CHALLENGE
+	purple_debug_info("msim", "response=<%s>\n", data_out);
+#endif
+
+	*response_len = data_out_len;
+
+	return (const gchar *)data_out;
+}
+
+/**
+ * Schedule an IM to be sent once the user ID is looked up. 
+ *
+ * @param gc Connection.
+ * @param who A user id, email, or username to send the message to.
+ * @param message Instant message text to send.
+ * @param flags Flags.
+ *
+ * @return 1 if successful or postponed, -1 if failed
+ *
+ * Allows sending to a user by username, email address, or userid. If
+ * a username or email address is given, the userid must be looked up.
+ * This function does that by calling msim_postprocess_outgoing().
+ */
+int 
+msim_send_im(PurpleConnection *gc, const gchar *who, const gchar *message, 
+		PurpleMessageFlags flags)
+{
+	MsimSession *session;
+	gchar *message_msim;
+	int rc;
+	
+	g_return_val_if_fail(gc != NULL, -1);
+	g_return_val_if_fail(who != NULL, -1);
+	g_return_val_if_fail(message != NULL, -1);
+
+	/* 'flags' has many options, not used here. */
+
+	session = (MsimSession *)gc->proto_data;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), -1);
+
+	message_msim = html_to_msim_markup(session, message);
+
+	if (msim_send_bm(session, who, message_msim, MSIM_BM_INSTANT)) {
+		/* Return 1 to have Purple show this IM as being sent, 0 to not. I always
+		 * return 1 even if the message could not be sent, since I don't know if
+		 * it has failed yet--because the IM is only sent after the userid is
+		 * retrieved from the server (which happens after this function returns).
+		 */
+		/* TODO: maybe if message is delayed, don't echo to conv window,
+		 * but do echo it to conv window manually once it is actually
+		 * sent? Would be complicated. */
+		rc = 1;
+	} else {
+		rc = -1;
+	}
+
+	g_free(message_msim);
+
+	/*
+	 * In MySpace, you login with your email address, but don't talk to other
+	 * users using their email address. So there is currently an asymmetry in the 
+	 * IM windows when using this plugin:
+	 *
+	 * you@example.com: hello
+	 * some_other_user: what's going on?
+	 * you@example.com: just coding a prpl
+	 *
+	 * TODO: Make the sent IM's appear as from the user's username, instead of
+	 * their email address. Purple uses the login (in MSIM, the email)--change this.
+	 */
+
+	return rc;
+}
+
+/** Send a buddy message of a given type.
+ *
+ * @param session
+ * @param who Username to send message to.
+ * @param text Message text to send. Not freed; will be copied.
+ * @param type A MSIM_BM_* constant.
+ *
+ * @return TRUE if success, FALSE if fail.
+ *
+ * Buddy messages ('bm') include instant messages, action messages, status messages, etc.
+ *
+ */
+gboolean 
+msim_send_bm(MsimSession *session, const gchar *who, const gchar *text, 
+		int type)
+{
+	gboolean rc;
+	MsimMessage *msg;
+	const gchar *from_username;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(who != NULL, FALSE);
+	g_return_val_if_fail(text != NULL, FALSE);
+   
+	from_username = session->account->username;
+
+	g_return_val_if_fail(from_username != NULL, FALSE);
+
+	purple_debug_info("msim", "sending %d message from %s to %s: %s\n",
+				  type, from_username, who, text);
+
+	msg = msim_msg_new(
+            "bm", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(type),
+			"sesskey", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(session->sesskey),
+			/* 't' will be inserted here */
+			"cv", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(MSIM_CLIENT_VERSION),
+			"msg", MSIM_TYPE_STRING, g_strdup(text),
+			NULL);
+
+	rc = msim_postprocess_outgoing(session, msg, who, "t", "cv");
+
+	msim_msg_free(msg);
+
+	return rc;
+}
+
+
+/** Record the client version in the buddy list, from an incoming message. */
+static gboolean
+msim_incoming_bm_record_cv(MsimSession *session, MsimMessage *msg)
+{
+	gchar *username, *cv;
+	gboolean ret;
+	MsimUser *user;
+
+	username = msim_msg_get_string(msg, "_username");
+	cv = msim_msg_get_string(msg, "cv");
+
+	g_return_val_if_fail(username != NULL, FALSE);
+	if (!cv) {
+		/* No client version to record, don't worry about it. */
+		return FALSE;
+	}
+
+	user = msim_find_user(session, username);
+
+	if (user) {
+		user->client_cv = atol(cv);
+		ret = TRUE;
+	} else {
+		ret = FALSE;
+	}
+
+	g_free(username);
+	g_free(cv);
+
+	return ret;
+}
+
+/** Handle an incoming buddy message. */
+static gboolean
+msim_incoming_bm(MsimSession *session, MsimMessage *msg)
+{
+	guint bm;
+   
+	bm = msim_msg_get_integer(msg, "bm");
+
+	msim_incoming_bm_record_cv(session, msg);
+
+	switch (bm) {
+		case MSIM_BM_STATUS:
+			return msim_incoming_status(session, msg);
+		case MSIM_BM_INSTANT:
+			return msim_incoming_im(session, msg);
+		case MSIM_BM_ACTION:
+			return msim_incoming_action(session, msg);
+		case MSIM_BM_MEDIA:
+			return msim_incoming_media(session, msg);
+		case MSIM_BM_UNOFFICIAL_CLIENT:
+			return msim_incoming_unofficial_client(session, msg);
+		default:
+			/* Not really an IM, but show it for informational 
+			 * purposes during development. */
+			return msim_incoming_im(session, msg);
+	}
+}
+
+/**
+ * Handle an incoming instant message.
+ *
+ * @param session The session
+ * @param msg Message from the server, containing 'f' (userid from) and 'msg'. 
+ *               Should also contain username in _username from preprocessing.
+ *
+ * @return TRUE if successful.
+ */
+static gboolean 
+msim_incoming_im(MsimSession *session, MsimMessage *msg)
+{
+	gchar *username, *msg_msim_markup, *msg_purple_markup;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	username = msim_msg_get_string(msg, "_username");
+	g_return_val_if_fail(username != NULL, FALSE);
+
+	msg_msim_markup = msim_msg_get_string(msg, "msg");
+	g_return_val_if_fail(msg_msim_markup != NULL, FALSE);
+
+	msg_purple_markup = msim_markup_to_html(session, msg_msim_markup);
+	g_free(msg_msim_markup);
+
+	serv_got_im(session->gc, username, msg_purple_markup, 
+			PURPLE_MESSAGE_RECV, time(NULL));
+
+	g_free(username);
+	g_free(msg_purple_markup);
+
+	return TRUE;
+}
+
+/**
+ * Process unrecognized information.
+ *
+ * @param session
+ * @param msg An MsimMessage that was unrecognized, or NULL.
+ * @param note Information on what was unrecognized, or NULL.
+ */
+void 
+msim_unrecognized(MsimSession *session, MsimMessage *msg, gchar *note)
+{
+	/* TODO: Some more context, outwardly equivalent to a backtrace, 
+	 * for helping figure out what this msg is for. What was going on?
+	 * But not too much information so that a user
+	 * posting this dump reveals confidential information.
+	 */
+
+	/* TODO: dump unknown msgs to file, so user can send them to me
+	 * if they wish, to help add support for new messages (inspired
+	 * by Alexandr Shutko, who maintains OSCAR protocol documentation). */
+
+	purple_debug_info("msim", "Unrecognized data on account for %s\n", 
+			(session && session->account && session->account->username) ? 
+			session->account->username : "(NULL)");
+	if (note) {
+		purple_debug_info("msim", "(Note: %s)\n", note);
+	}
+
+	if (msg) {
+		msim_msg_dump("Unrecognized message dump: %s\n", msg);
+	}
+}
+
+/**
+ * Handle an incoming action message.
+ *
+ * @param session
+ * @param msg
+ *
+ * @return TRUE if successful.
+ *
+ */
+static gboolean 
+msim_incoming_action(MsimSession *session, MsimMessage *msg)
+{
+	gchar *msg_text, *username;
+	gboolean rc;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	msg_text = msim_msg_get_string(msg, "msg");
+	g_return_val_if_fail(msg_text != NULL, FALSE);
+
+	username = msim_msg_get_string(msg, "_username");
+	g_return_val_if_fail(username != NULL, FALSE);
+
+	purple_debug_info("msim", "msim_incoming_action: action <%s> from <%d>\n", 
+			msg_text, username);
+
+	if (g_str_equal(msg_text, "%typing%")) {
+		/* TODO: find out if msim repeatedly sends typing messages, so we can 
+		 * give it a timeout. Right now, there does seem to be an inordinately 
+		 * amount of time between typing stopped-typing notifications. */
+		serv_got_typing(session->gc, username, 0, PURPLE_TYPING);
+		rc = TRUE;
+	} else if (g_str_equal(msg_text, "%stoptyping%")) {
+		serv_got_typing_stopped(session->gc, username);
+		rc = TRUE;
+	} else if (strstr(msg_text, "!!!ZAP_SEND!!!=RTE_BTN_ZAPS_")) {
+		rc = msim_incoming_zap(session, msg);
+	} else {
+		msim_unrecognized(session, msg, 
+				"got to msim_incoming_action but unrecognized value for 'msg'");
+		rc = FALSE;
+	}
+
+	g_free(msg_text);
+	g_free(username);
+
+	return rc;
+}
+
+/* Process an incoming media (message background?) message. */
+static gboolean
+msim_incoming_media(MsimSession *session, MsimMessage *msg)
+{
+	gchar *username, *text;
+
+	username = msim_msg_get_string(msg, "_username");
+	text = msim_msg_get_string(msg, "msg");
+
+	g_return_val_if_fail(username != NULL, FALSE);
+	g_return_val_if_fail(text != NULL, FALSE);
+
+	purple_debug_info("msim", "msim_incoming_media: from %s, got msg=%s\n", username, text);
+
+	/* Media messages are sent when the user opens a window to someone.
+	 * Tell libpurple they started typing and stopped typing, to inform the Psychic
+	 * Mode plugin so it too can open a window to the user. */
+	serv_got_typing(session->gc, username, 0, PURPLE_TYPING);
+	serv_got_typing_stopped(session->gc, username);
+
+	g_free(username);
+
+	return TRUE;
+}
+
+/* Process an incoming "unofficial client" message. The plugin for
+ * Miranda IM sends this message with the plugin information. */
+static gboolean
+msim_incoming_unofficial_client(MsimSession *session, MsimMessage *msg)
+{
+	MsimUser *user;
+	gchar *username, *client_info;
+
+	username = msim_msg_get_string(msg, "_username");
+	client_info = msim_msg_get_string(msg, "msg");
+
+	g_return_val_if_fail(username != NULL, FALSE);
+	g_return_val_if_fail(client_info != NULL, FALSE);
+
+	purple_debug_info("msim", "msim_incoming_unofficial_client: %s is using client %s\n",
+		username, client_info);
+
+	user = msim_find_user(session, username);
+	
+	g_return_val_if_fail(user != NULL, FALSE);
+
+	if (user->client_info) {
+		g_free(user->client_info);
+	}
+	user->client_info = client_info;
+
+	g_free(username);
+	/* Do not free client_info - the MsimUser now owns it. */
+
+	return TRUE;
+}
+
+
+#ifdef MSIM_SEND_CLIENT_VERSION
+/** Send our client version to another unofficial client that understands it. */
+static gboolean
+msim_send_unofficial_client(MsimSession *session, gchar *username)
+{
+	gchar *our_info;
+	gboolean ret;
+
+	our_info = g_strdup_printf("Libpurple %d.%d.%d - msimprpl %s", 
+			PURPLE_MAJOR_VERSION,
+			PURPLE_MINOR_VERSION,
+			PURPLE_MICRO_VERSION,
+			MSIM_PRPL_VERSION_STRING);
+
+	ret = msim_send_bm(session, username, our_info, MSIM_BM_UNOFFICIAL_CLIENT);
+
+	return ret;
+}
+#endif
+
+/** 
+ * Handle when our user starts or stops typing to another user.
+ *
+ * @param gc
+ * @param name The buddy name to which our user is typing to
+ * @param state PURPLE_TYPING, PURPLE_TYPED, PURPLE_NOT_TYPING
+ *
+ * @return 0
+ */
+unsigned int 
+msim_send_typing(PurpleConnection *gc, const gchar *name, 
+		PurpleTypingState state)
+{
+	const gchar *typing_str;
+	MsimSession *session;
+
+	g_return_val_if_fail(gc != NULL, 0);
+	g_return_val_if_fail(name != NULL, 0);
+
+	session = (MsimSession *)gc->proto_data;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), 0);
+
+	switch (state) {
+		case PURPLE_TYPING: 
+			typing_str = "%typing%"; 
+			break;
+
+		case PURPLE_TYPED:
+		case PURPLE_NOT_TYPING:
+		default:
+			typing_str = "%stoptyping%";
+			break;
+	}
+
+	purple_debug_info("msim", "msim_send_typing(%s): %d (%s)\n", name, state, typing_str);
+	msim_send_bm(session, name, typing_str, MSIM_BM_ACTION);
+	return 0;
+}
+
+
+
+/** Callback for msim_get_info(), for when user info is received. */
+static void 
+msim_get_info_cb(MsimSession *session, MsimMessage *user_info_msg, 
+		gpointer data)
+{
+	MsimMessage *msg;
+	gchar *username;
+	PurpleNotifyUserInfo *user_info;
+	MsimUser *user;
+	gboolean temporary_user;
+
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+
+	/* Get user{name,id} from msim_get_info, passed as an MsimMessage for 
+	   orthogonality. */
+	msg = (MsimMessage *)data;
+	g_return_if_fail(msg != NULL);
+
+	username = msim_msg_get_string(msg, "user");
+	if (!username) {
+		purple_debug_info("msim", "msim_get_info_cb: no 'user' in msg");
+		return;
+	}
+
+	msim_msg_free(msg);
+	purple_debug_info("msim", "msim_get_info_cb: got for user: %s\n", username);
+
+	user = msim_find_user(session, username);
+
+	if (!user) {
+		/* User isn't on blist, create a temporary user to store info. */
+		temporary_user = TRUE;
+		user = g_new0(MsimUser, 1);
+	} else {
+		temporary_user = FALSE;
+	}
+
+	/* Update user structure with new information */
+	msim_store_user_info(session, user_info_msg, user);
+
+	user_info = purple_notify_user_info_new();
+
+	/* Append data from MsimUser to PurpleNotifyUserInfo for display, full */
+	msim_append_user_info(session, user_info, user, TRUE);
+
+	purple_notify_userinfo(session->gc, username, user_info, NULL, NULL);
+	purple_debug_info("msim", "msim_get_info_cb: username=%s\n", username);
+
+	purple_notify_user_info_destroy(user_info);
+	/* TODO: do not free username, since it will be used by user_info? */
+
+	if (temporary_user) {
+		g_free(user->client_info);
+		g_free(user->gender);
+		g_free(user->location);
+		g_free(user->headline);
+		g_free(user->display_name);
+		g_free(user->username);
+		g_free(user->band_name);
+		g_free(user->song_name);
+		g_free(user->image_url);
+		g_free(user);
+	}
+
+}
+
+/** Retrieve a user's profile. 
+ * @param username Username, user ID, or email address to lookup.
+ */
+void 
+msim_get_info(PurpleConnection *gc, const gchar *username)
+{
+	MsimSession *session;
+	MsimUser *user;
+	guint uid;
+	gchar *user_to_lookup;
+	MsimMessage *user_msg;
+
+	g_return_if_fail(gc != NULL);
+	g_return_if_fail(username != NULL);
+
+	session = (MsimSession *)gc->proto_data;
+
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+
+	/* Obtain uid of buddy. */
+	user = msim_find_user(session, username);
+
+	/* If is on buddy list, lookup by uid since it is faster. */
+	if (user && (uid = purple_blist_node_get_int(&user->buddy->node, "UserID"))) {
+		user_to_lookup = g_strdup_printf("%d", uid);
+	} else {
+		/* Looking up buddy not on blist. Lookup by whatever user entered. */
+		user_to_lookup = g_strdup(username);
+	}
+
+	/* Pass the username to msim_get_info_cb(), because since we lookup
+	 * by userid, the userinfo message will only contain the uid (not 
+	 * the username) but it would be useful to display the username too.
+	 */
+	user_msg = msim_msg_new(
+			"user", MSIM_TYPE_STRING, g_strdup(username),
+			NULL);
+	purple_debug_info("msim", "msim_get_info, setting up lookup, user=%s\n", username);
+
+	msim_lookup_user(session, user_to_lookup, msim_get_info_cb, user_msg);
+
+	g_free(user_to_lookup); 
+}
+
+/** Set your status - callback for when user manually sets it.  */
+void
+msim_set_status(PurpleAccount *account, PurpleStatus *status)
+{
+	PurpleStatusType *type;
+	MsimSession *session;
+	guint status_code;
+	const gchar *statstring;
+
+	session = (MsimSession *)account->gc->proto_data;
+
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+
+	type = purple_status_get_type(status);
+
+	switch (purple_status_type_get_primitive(type)) {
+		case PURPLE_STATUS_AVAILABLE:
+			purple_debug_info("msim", "msim_set_status: available (%d->%d)\n", PURPLE_STATUS_AVAILABLE,
+					MSIM_STATUS_CODE_ONLINE);
+			status_code = MSIM_STATUS_CODE_ONLINE;
+			break;
+
+		case PURPLE_STATUS_INVISIBLE:
+			purple_debug_info("msim", "msim_set_status: invisible (%d->%d)\n", PURPLE_STATUS_INVISIBLE,
+					MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN);
+			status_code = MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN;
+			break;
+
+		case PURPLE_STATUS_AWAY:
+			purple_debug_info("msim", "msim_set_status: away (%d->%d)\n", PURPLE_STATUS_AWAY,
+					MSIM_STATUS_CODE_AWAY);
+			status_code = MSIM_STATUS_CODE_AWAY;
+			break;
+
+		default:
+			purple_debug_info("msim", "msim_set_status: unknown "
+					"status interpreting as online");
+			status_code = MSIM_STATUS_CODE_ONLINE;
+			break;
+	}
+
+	statstring = purple_status_get_attr_string(status, "message");
+
+	if (!statstring) {
+		statstring = g_strdup("");
+	}
+
+	msim_set_status_code(session, status_code, g_strdup(statstring));
+}
+
+/** Go idle. */
+void
+msim_set_idle(PurpleConnection *gc, int time)
+{
+	MsimSession *session;
+
+	g_return_if_fail(gc != NULL);
+
+	session = (MsimSession *)gc->proto_data;
+
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+
+	if (time == 0) {
+		/* Going back from idle. In msim, idle is mutually exclusive 
+		 * from the other states (you can only be away or idle, but not
+		 * both, for example), so by going non-idle I go online.
+		 */
+		/* TODO: find out how to keep old status string? */
+		msim_set_status_code(session, MSIM_STATUS_CODE_ONLINE, g_strdup(""));
+	} else {
+		/* msim doesn't support idle time, so just go idle */
+		msim_set_status_code(session, MSIM_STATUS_CODE_IDLE, g_strdup(""));
+	}
+}
+
+/** Set status using an MSIM_STATUS_CODE_* value.
+ * @param status_code An MSIM_STATUS_CODE_* value.
+ * @param statstring Status string, must be a dynamic string (will be freed by msim_send).
+ */
+static void 
+msim_set_status_code(MsimSession *session, guint status_code, gchar *statstring)
+{
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+	g_return_if_fail(statstring != NULL);
+
+	purple_debug_info("msim", "msim_set_status_code: going to set status to code=%d,str=%s\n",
+			status_code, statstring);
+
+	if (!msim_send(session,
+			"status", MSIM_TYPE_INTEGER, status_code,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"statstring", MSIM_TYPE_STRING, statstring, 
+			"locstring", MSIM_TYPE_STRING, g_strdup(""),
+			NULL))
+	{
+		purple_debug_info("msim", "msim_set_status: failed to set status");
+	}
+
+}
+
+/** After a uid is resolved to username, tag it with the username and submit for processing. 
+ * 
+ * @param session
+ * @param userinfo Response messsage to resolving request.
+ * @param data MsimMessage *, the message to attach information to. 
+ */
+static void 
+msim_incoming_resolved(MsimSession *session, MsimMessage *userinfo, 
+		gpointer data)
+{
+	gchar *username;
+	MsimMessage *msg, *body;
+
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+	g_return_if_fail(userinfo != NULL);
+
+	body = msim_msg_get_dictionary(userinfo, "body");
+	g_return_if_fail(body != NULL);
+
+	username = msim_msg_get_string(body, "UserName");
+	g_return_if_fail(username != NULL);
+	/* Note: username will be owned by 'msg' below. */
+
+	msg = (MsimMessage *)data;
+	g_return_if_fail(msg != NULL);
+
+	/* TODO: more elegant solution than below. attach whole message? */
+	/* Special elements name beginning with '_', we'll use internally within the
+	 * program (did not come directly from the wire). */
+	msg = msim_msg_append(msg, "_username", MSIM_TYPE_STRING, username);
+  
+	/* TODO: attach more useful information, like ImageURL */
+
+	msim_process(session, msg);
+
+	/* TODO: Free copy cloned from  msim_preprocess_incoming(). */
+	//XXX msim_msg_free(msg);
+	msim_msg_free(body);
+}
+
+/* Lookup a username by userid, from buddy list. 
+ *
+ * @param wanted_uid
+ *
+ * @return Username of wanted_uid, if on blist, or NULL. Static string. 
+ *
+ */
+static const gchar *
+msim_uid2username_from_blist(MsimSession *session, guint wanted_uid)
+{
+	GSList *buddies, *cur;
+	gchar *ret;
+
+	buddies = purple_find_buddies(session->account, NULL); 
+
+	if (!buddies)
+	{
+		purple_debug_info("msim", "msim_uid2username_from_blist: no buddies?");
+		return NULL;
+	}
+
+	ret = NULL;
+
+	for (cur = buddies; cur != NULL; cur = g_slist_next(cur))
+	{
+		PurpleBuddy *buddy;
+		guint uid;
+		const gchar *name;
+
+		/* See finch/gnthistory.c */
+		buddy = cur->data;
+
+		uid = purple_blist_node_get_int(&buddy->node, "UserID");
+		name = purple_buddy_get_name(buddy);
+
+		if (uid == wanted_uid)
+		{
+			ret = g_strdup(name);
+            break;
+		}
+	}
+
+	g_slist_free(buddies);
+	return ret;
+}
+
+/** Preprocess incoming messages, resolving as needed, calling msim_process() when ready to process.
+ *
+ * @param session
+ * @param msg MsimMessage *, freed by caller.
+ */
+static gboolean 
+msim_preprocess_incoming(MsimSession *session, MsimMessage *msg)
+{
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	if (msim_msg_get(msg, "bm") && msim_msg_get(msg, "f")) {
+		guint uid;
+		const gchar *username;
+
+		/* 'f' = userid message is from, in buddy messages */
+		uid = msim_msg_get_integer(msg, "f");
+
+		username = msim_uid2username_from_blist(session, uid); 
+
+		if (username) {
+			/* Know username already, use it. */
+			purple_debug_info("msim", "msim_preprocess_incoming: tagging with _username=%s\n",
+					username);
+			msg = msim_msg_append(msg, "_username", MSIM_TYPE_STRING, g_strdup(username));
+			return msim_process(session, msg);
+
+		} else {
+			gchar *from;
+
+			/* Send lookup request. */
+			/* XXX: where is msim_msg_get_string() freed? make _strdup and _nonstrdup. */
+			purple_debug_info("msim", "msim_incoming: sending lookup, setting up callback\n");
+			from = msim_msg_get_string(msg, "f");
+			msim_lookup_user(session, from, msim_incoming_resolved, msim_msg_clone(msg)); 
+			g_free(from);
+
+			/* indeterminate */
+			return TRUE;
+		}
+	} else {
+		/* Nothing to resolve - send directly to processing. */
+		return msim_process(session, msg);
+	}
+}
+
+#ifdef MSIM_USE_KEEPALIVE
+/** Check if the connection is still alive, based on last communication. */
+static gboolean
+msim_check_alive(gpointer data)
+{
+	MsimSession *session;
+	time_t delta;
+	gchar *errmsg;
+
+	session = (MsimSession *)data;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+
+	delta = time(NULL) - session->last_comm;
+	//purple_debug_info("msim", "msim_check_alive: delta=%d\n", delta);
+	if (delta >= MSIM_KEEPALIVE_INTERVAL) {
+		errmsg = g_strdup_printf(_("Connection to server lost (no data received within %d seconds)"), (int)delta);
+
+		purple_debug_info("msim", "msim_check_alive: %s > interval of %d, presumed dead\n",
+				errmsg, MSIM_KEEPALIVE_INTERVAL);
+		purple_connection_error(session->gc, errmsg);
+
+		purple_notify_error(session->gc, NULL, errmsg, NULL);
+
+		g_free(errmsg);
+
+		return FALSE;
+	}
+
+	return TRUE;
+}
+#endif
+
+/** Handle mail reply checks. */
+static void
+msim_check_inbox_cb(MsimSession *session, MsimMessage *reply, gpointer data)
+{
+	MsimMessage *body;
+	GString *notification;
+	guint old_inbox_status;
+	guint i, n;
+	const gchar *froms[5], *tos[5], *urls[5], *subjects[5];
+
+	/* Information for each new inbox message type. */
+	static struct 
+	{
+		const gchar *key;
+		guint bit;
+		const gchar *url;
+		const gchar *text;
+	} message_types[] = {
+		{ "Mail", MSIM_INBOX_MAIL, "http://messaging.myspace.com/index.cfm?fuseaction=mail.inbox", NULL },
+		{ "BlogComment", MSIM_INBOX_BLOG_COMMENT, "http://blog.myspace.com/index.cfm?fuseaction=blog", NULL },
+		{ "ProfileComment", MSIM_INBOX_PROFILE_COMMENT, "http://home.myspace.com/index.cfm?fuseaction=user", NULL },
+		{ "FriendRequest", MSIM_INBOX_FRIEND_REQUEST, "http://messaging.myspace.com/index.cfm?fuseaction=mail.friendRequests", NULL },
+		{ "PictureComment", MSIM_INBOX_PICTURE_COMMENT, "http://home.myspace.com/index.cfm?fuseaction=user", NULL }
+	};
+
+	/* Can't write _()'d strings in array initializers. Workaround. */
+	message_types[0].text = _("New mail messages");
+	message_types[1].text = _("New blog comments");
+	message_types[2].text = _("New profile comments");
+	message_types[3].text = _("New friend requests!");
+	message_types[4].text = _("New picture comments");
+
+	g_return_if_fail(reply != NULL);
+
+	msim_msg_dump("msim_check_inbox_cb: reply=%s\n", reply);
+
+	body = msim_msg_get_dictionary(reply, "body");
+	g_return_if_fail(body != NULL);
+
+	notification = g_string_new("");
+
+	old_inbox_status = session->inbox_status;
+
+	n = 0;
+
+	for (i = 0; i < sizeof(message_types) / sizeof(message_types[0]); ++i) {
+		const gchar *key;
+		guint bit;
+		
+		key = message_types[i].key;
+		bit = message_types[i].bit;
+
+		if (msim_msg_get(body, key)) {
+			/* Notify only on when _changes_ from no mail -> has mail
+			 * (edge triggered) */
+			if (!(session->inbox_status & bit)) {
+				purple_debug_info("msim", "msim_check_inbox_cb: got %s, at %d\n",
+						key ? key : "(NULL)", n);
+
+				subjects[n] = message_types[i].text;
+				froms[n] = _("MySpace");
+				tos[n] = session->username;
+				/* TODO: append token, web challenge, so automatically logs in.
+				 * Would also need to free strings because they won't be static
+				 */
+				urls[n] = message_types[i].url;
+
+				++n;
+			} else {
+				purple_debug_info("msim",
+						"msim_check_inbox_cb: already notified of %s\n",
+						key ? key : "(NULL)");
+			}
+
+			session->inbox_status |= bit;
+		}
+	}
+
+	if (n) {
+		purple_debug_info("msim",
+				"msim_check_inbox_cb: notifying of %d\n", n);
+
+		/* TODO: free strings with callback _if_ change to dynamic (w/ token) */
+		purple_notify_emails(session->gc,         /* handle */
+				n,                        /* count */
+				TRUE,                     /* detailed */
+				subjects, froms, tos, urls, 
+				NULL,                     /* PurpleNotifyCloseCallback cb */
+				NULL);                    /* gpointer user_data */
+
+	}
+
+	msim_msg_free(body);
+}
+
+/* Send request to check if there is new mail. */
+static gboolean
+msim_check_inbox(gpointer data)
+{
+	MsimSession *session;
+
+	session = (MsimSession *)data;
+
+	purple_debug_info("msim", "msim_check_inbox: checking mail\n");
+	g_return_val_if_fail(msim_send(session, 
+			"persist", MSIM_TYPE_INTEGER, 1,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"cmd", MSIM_TYPE_INTEGER, MSIM_CMD_GET,
+			"dsn", MSIM_TYPE_INTEGER, MG_CHECK_MAIL_DSN,
+			"lid", MSIM_TYPE_INTEGER, MG_CHECK_MAIL_LID,
+			"uid", MSIM_TYPE_INTEGER, session->userid,
+			"rid", MSIM_TYPE_INTEGER, 
+				msim_new_reply_callback(session, msim_check_inbox_cb, NULL),
+			"body", MSIM_TYPE_STRING, g_strdup(""),
+			NULL), TRUE);
+
+	/* Always return true, so that we keep checking for mail. */
+	return TRUE;
+}
+
+/** Called when the session key arrives. */
+static gboolean
+msim_we_are_logged_on(MsimSession *session, MsimMessage *msg)
+{
+	MsimMessage *body;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	session->sesskey = msim_msg_get_integer(msg, "sesskey");
+	purple_debug_info("msim", "SESSKEY=<%d>\n", session->sesskey);
+
+	/* What is proof? Used to be uid, but now is 52 base64'd bytes... */
+
+	/* Comes with: proof,profileid,userid,uniquenick -- all same values
+	 * some of the time, but can vary. This is our own user ID. */
+	session->userid = msim_msg_get_integer(msg, "userid");
+
+	/* Save uid to account so this account can be looked up by uid. */
+	purple_account_set_int(session->account, "uid", session->userid);
+
+	/* Not sure what profileid is used for. */
+	if (msim_msg_get_integer(msg, "profileid") != session->userid) {
+		msim_unrecognized(session, msg, 
+				"Profile ID didn't match user ID, don't know why");
+	}
+
+	/* We now know are our own username, only after we're logged in..
+	 * which is weird, but happens because you login with your email
+	 * address and not username. Will be freed in msim_session_destroy(). */
+	session->username = msim_msg_get_string(msg, "uniquenick");
+
+	/* If a local alias wasn't set, set it to user's username. */
+	if (!session->account->alias || !strlen(session->account->alias))
+		session->account->alias = session->username;
+
+	/* The session is now set up, ready to be connected. This emits the
+	 * signedOn signal, so clients can now do anything with msimprpl, and
+	 * we're ready for it (session key, userid, username all setup). */
+	purple_connection_update_progress(session->gc, _("Connected"), 3, 4);
+	purple_connection_set_state(session->gc, PURPLE_CONNECTED);
+
+
+	/* Additional post-connect operations */
+
+
+	if (msim_msg_get_integer(msg, "uniquenick") == session->userid) {
+		purple_debug_info("msim_we_are_logged_on", "TODO: pick username");
+	}
+
+	body = msim_msg_new(
+			"UserID", MSIM_TYPE_INTEGER, session->userid,
+			NULL);
+
+	/* Request IM info about ourself. */
+	msim_send(session,
+			"persist", MSIM_TYPE_STRING, g_strdup("persist"),
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"dsn", MSIM_TYPE_INTEGER, MG_OWN_MYSPACE_INFO_DSN,
+			"uid", MSIM_TYPE_INTEGER, session->userid,
+			"lid", MSIM_TYPE_INTEGER, MG_OWN_MYSPACE_INFO_LID,
+			"rid", MSIM_TYPE_INTEGER, session->next_rid++,
+			"body", MSIM_TYPE_DICTIONARY, body,
+			NULL);
+
+	/* Request MySpace info about ourself. */
+	msim_send(session,
+			"persist", MSIM_TYPE_STRING, g_strdup("persist"),
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"dsn", MSIM_TYPE_INTEGER, MG_OWN_IM_INFO_DSN,
+			"uid", MSIM_TYPE_INTEGER, session->userid,
+			"lid", MSIM_TYPE_INTEGER, MG_OWN_IM_INFO_LID,
+			"rid", MSIM_TYPE_INTEGER, session->next_rid++,
+			"body", MSIM_TYPE_STRING, g_strdup(""),
+			NULL);
+
+	/* TODO: set options (persist cmd=514,dsn=1,lid=10) */
+	/* TODO: set blocklist */
+
+	/* Notify servers of our current status. */
+	purple_debug_info("msim", "msim_we_are_logged_on: notifying servers of status\n");
+	msim_set_status(session->account,
+			purple_account_get_active_status(session->account));
+
+	/* TODO: setinfo */
+	/*
+	body = msim_msg_new(
+		"TotalFriends", MSIM_TYPE_INTEGER, 666,
+		NULL);
+	msim_send(session,
+			"setinfo", MSIM_TYPE_BOOLEAN, TRUE,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"info", MSIM_TYPE_DICTIONARY, body,
+			NULL);
+			*/
+
+	/* Disable due to problems with timeouts. TODO: fix. */
+#ifdef MSIM_USE_KEEPALIVE
+	purple_timeout_add(MSIM_KEEPALIVE_INTERVAL_CHECK, 
+			(GSourceFunc)msim_check_alive, session);
+#endif
+
+	/* Check mail if they want to. */
+	if (purple_account_get_check_mail(session->account)) {
+		purple_timeout_add(MSIM_MAIL_INTERVAL_CHECK, 
+				(GSourceFunc)msim_check_inbox, session);
+		msim_check_inbox(session);
+	}
+
+	msim_get_contact_list(session, MSIM_CONTACT_LIST_INITIAL_FRIENDS);
+
+	return TRUE;
+}
+
+/**
+ * Process a message. 
+ *
+ * @param session
+ * @param msg A message from the server, ready for processing (possibly with resolved username information attached). Caller frees.
+ *
+ * @return TRUE if successful. FALSE if processing failed.
+ */
+static gboolean 
+msim_process(MsimSession *session, MsimMessage *msg)
+{
+	g_return_val_if_fail(session != NULL, FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+#ifdef MSIM_DEBUG_MSG
+	msim_msg_dump("ready to process: %s\n", msg);
+#endif
+
+	if (msim_msg_get_integer(msg, "lc") == 1) {
+		return msim_login_challenge(session, msg);
+	} else if (msim_msg_get_integer(msg, "lc") == 2) {
+		return msim_we_are_logged_on(session, msg);
+	} else if (msim_msg_get(msg, "bm"))  {
+		return msim_incoming_bm(session, msg);
+	} else if (msim_msg_get(msg, "rid")) {
+		return msim_process_reply(session, msg);
+	} else if (msim_msg_get(msg, "error")) {
+		return msim_error(session, msg);
+	} else if (msim_msg_get(msg, "ka")) {
+		return TRUE;
+	} else {
+		msim_unrecognized(session, msg, "in msim_process");
+		return FALSE;
+	}
+}
+
+/** Process the initial server information from the server. */
+static gboolean
+msim_process_server_info(MsimSession *session, MsimMessage *msg)
+{
+	MsimMessage *body;
+
+	body = msim_msg_get_dictionary(msg, "body");
+	g_return_val_if_fail(body != NULL, FALSE);
+
+	/* Example body:
+AdUnitRefreshInterval=10.
+AlertPollInterval=360.
+AllowChatRoomEmoticonSharing=False.
+ChatRoomUserIDs=78744676;163733130;1300326231;123521495;142663391.
+CurClientVersion=673.
+EnableIMBrowse=True.
+EnableIMStuffAvatars=False.
+EnableIMStuffZaps=False.
+MaxAddAllFriends=100.
+MaxContacts=1000.
+MinClientVersion=594.
+MySpaceIM_ENGLISH=78744676.
+MySpaceNowTimer=720.
+PersistenceDataTimeout=900.
+UseWebChallenge=1.
+WebTicketGoHome=False
+
+	Anything useful? TODO: use what is useful, and use it.
+*/
+	purple_debug_info("msim_process_server_info",
+			"maximum contacts: %d\n", 
+			msim_msg_get_integer(body, "MaxContacts"));
+
+	session->server_info = body;
+	/* session->server_info freed in msim_session_destroy */
+
+	return TRUE;
+}
+
+/** Process a web challenge, used to login to the web site. */
+static gboolean
+msim_web_challenge(MsimSession *session, MsimMessage *msg)
+{
+	/* TODO: web challenge, store token */
+	return FALSE;
+}
+
+/**
+ * Process a persistance message reply from the server.
+ *
+ * @param session 
+ * @param msg Message reply from server.
+ *
+ * @return TRUE if successful.
+ *
+ * msim_lookup_user sets callback for here 
+ */
+static gboolean 
+msim_process_reply(MsimSession *session, MsimMessage *msg)
+{
+	MSIM_USER_LOOKUP_CB cb;
+	gpointer data;
+	guint rid, cmd, dsn, lid;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	msim_store_user_info(session, msg, NULL);
+
+	rid = msim_msg_get_integer(msg, "rid");
+	cmd = msim_msg_get_integer(msg, "cmd");
+	dsn = msim_msg_get_integer(msg, "dsn");
+	lid = msim_msg_get_integer(msg, "lid");
+
+	/* Unsolicited messages */
+	if (cmd == (MSIM_CMD_BIT_REPLY | MSIM_CMD_GET)) {
+		if (dsn == MG_SERVER_INFO_DSN && lid == MG_SERVER_INFO_LID) {
+			return msim_process_server_info(session, msg);
+		} else if (dsn == MG_WEB_CHALLENGE_DSN && lid == MG_WEB_CHALLENGE_LID) {
+			return msim_web_challenge(session, msg);
+		}
+	}
+
+	/* If a callback is registered for this userid lookup, call it. */
+	cb = g_hash_table_lookup(session->user_lookup_cb, GUINT_TO_POINTER(rid));
+	data = g_hash_table_lookup(session->user_lookup_cb_data, GUINT_TO_POINTER(rid));
+
+	if (cb) {
+		purple_debug_info("msim", "msim_process_reply: calling callback now\n");
+		msim_msg_dump("for msg=%s\n", msg);
+		/* Clone message, so that the callback 'cb' can use it (needs to free it also). */
+		cb(session, msim_msg_clone(msg), data);
+		g_hash_table_remove(session->user_lookup_cb, GUINT_TO_POINTER(rid));
+		g_hash_table_remove(session->user_lookup_cb_data, GUINT_TO_POINTER(rid));
+	} else {
+		purple_debug_info("msim", 
+				"msim_process_reply: no callback for rid %d\n", rid);
+	}
+
+	return TRUE;
+}
+
+/**
+ * Handle an error from the server.
+ *
+ * @param session 
+ * @param msg The message.
+ *
+ * @return TRUE if successfully reported error.
+ */
+static gboolean 
+msim_error(MsimSession *session, MsimMessage *msg)
+{
+	gchar *errmsg, *full_errmsg;
+	guint err;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	err = msim_msg_get_integer(msg, "err");
+	errmsg = msim_msg_get_string(msg, "errmsg");
+
+	full_errmsg = g_strdup_printf(_("Protocol error, code %d: %s"), err, 
+			errmsg ? errmsg : "no 'errmsg' given");
+
+	g_free(errmsg);
+
+	purple_debug_info("msim", "msim_error (sesskey=%d): %s\n", 
+			session->sesskey, full_errmsg);
+
+	purple_notify_error(session->account, g_strdup(_("MySpaceIM Error")), 
+			full_errmsg, NULL);
+
+	/* Destroy session if fatal. */
+	if (msim_msg_get(msg, "fatal")) {
+		purple_debug_info("msim", "fatal error, closing\n");
+		purple_connection_error(session->gc, full_errmsg);
+	}
+
+	return TRUE;
+}
+
+/**
+ * Process incoming status messages.
+ *
+ * @param session
+ * @param msg Status update message. Caller frees.
+ *
+ * @return TRUE if successful.
+ */
+static gboolean 
+msim_incoming_status(MsimSession *session, MsimMessage *msg)
+{
+	PurpleBuddyList *blist;
+	MsimUser *user;
+	GList *list;
+	gchar *status_headline;
+	gint status_code, purple_status_code;
+	gchar *username;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	msim_msg_dump("msim_status msg=%s\n", msg);
+
+	/* Helpfully looked up by msim_incoming_resolve() for us. */
+	username = msim_msg_get_string(msg, "_username");
+	g_return_val_if_fail(username != NULL, FALSE);
+
+	{
+		gchar *ss;
+
+		ss = msim_msg_get_string(msg, "msg");
+		purple_debug_info("msim", 
+				"msim_status: updating status for <%s> to <%s>\n",
+				username, ss ? ss : "(NULL)");
+		g_free(ss);
+	}
+
+	/* Example fields: 
+	 *  |s|0|ss|Offline 
+	 *  |s|1|ss|:-)|ls||ip|0|p|0 
+	 */
+	list = msim_msg_get_list(msg, "msg");
+
+	status_code = msim_msg_get_integer_from_element(g_list_nth_data(list, MSIM_STATUS_ORDINAL_ONLINE));
+	purple_debug_info("msim", "msim_status: %s's status code = %d\n", username, status_code);
+	status_headline = msim_msg_get_string_from_element(g_list_nth_data(list, MSIM_STATUS_ORDINAL_HEADLINE));
+
+	blist = purple_get_blist();
+
+	/* Add buddy if not found */
+	user = msim_find_user(session, username);
+	if (!user) {
+		PurpleBuddy *buddy;
+
+		purple_debug_info("msim", 
+				"msim_status: making new buddy for %s\n", username);
+		buddy = purple_buddy_new(session->account, username, NULL);
+		purple_blist_add_buddy(buddy, NULL, NULL, NULL);
+
+		user = msim_get_user_from_buddy(buddy);
+
+		/* All buddies on list should have 'uid' integer associated with them. */
+		purple_blist_node_set_int(&buddy->node, "UserID", msim_msg_get_integer(msg, "f"));
+		
+		msim_store_user_info(session, msg, NULL);
+	} else {
+		purple_debug_info("msim", "msim_status: found buddy %s\n", username);
+	}
+
+	/* don't copy; let the MsimUser own the headline, memory-wise */
+	user->headline = status_headline;
+  
+	/* Set user status */
+	switch (status_code) {
+		case MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN: 
+			purple_status_code = PURPLE_STATUS_OFFLINE;
+			break;
+
+		case MSIM_STATUS_CODE_ONLINE: 
+			purple_status_code = PURPLE_STATUS_AVAILABLE;
+			break;
+
+		case MSIM_STATUS_CODE_AWAY:
+			purple_status_code = PURPLE_STATUS_AWAY;
+			break;
+
+		case MSIM_STATUS_CODE_IDLE:
+			/* will be handled below */
+			purple_status_code = -1;
+			break;
+
+		default:
+			purple_debug_info("msim", "msim_status for %s, unknown status code %d, treating as available\n",
+						username, status_code);
+			purple_status_code = PURPLE_STATUS_AVAILABLE;
+	}
+
+	purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL);
+
+	if (status_code == MSIM_STATUS_CODE_IDLE) {
+		purple_debug_info("msim", "msim_status: got idle: %s\n", username);
+		purple_prpl_got_user_idle(session->account, username, TRUE, time(NULL));
+	} else {
+		/* All other statuses indicate going back to non-idle. */
+		purple_prpl_got_user_idle(session->account, username, FALSE, time(NULL));
+	}
+
+#ifdef MSIM_SEND_CLIENT_VERSION
+	if (status_code == MSIM_STATUS_CODE_ONLINE) {
+		/* Secretly whisper to unofficial clients our own version as they come online */
+		msim_send_unofficial_client(session, username);
+	}
+#endif
+
+	if (status_code != MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN) {
+		/* Get information when they come online.
+		 * TODO: periodically refresh?
+		 */
+		purple_debug_info("msim_incoming_status", "%s came online, looking up\n", username);
+		msim_lookup_user(session, username, NULL, NULL);
+	}
+
+	g_free(username);
+	msim_msg_list_free(list);
+
+	return TRUE;
+}
+
+/** Add a buddy to user's buddy list. */
+void 
+msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
+{
+	MsimSession *session;
+	MsimMessage *msg;
+	/* MsimMessage *msg_persist; */
+	MsimMessage *body;
+
+	session = (MsimSession *)gc->proto_data;
+	purple_debug_info("msim", "msim_add_buddy: want to add %s to %s\n", 
+			buddy->name, (group && group->name) ? group->name : "(no group)");
+
+	msg = msim_msg_new(
+			"addbuddy", MSIM_TYPE_BOOLEAN, TRUE,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			/* "newprofileid" will be inserted here with uid. */
+			"reason", MSIM_TYPE_STRING, g_strdup(""),
+			NULL);
+
+	if (!msim_postprocess_outgoing(session, msg, buddy->name, "newprofileid", "reason")) {
+		purple_notify_error(NULL, NULL, _("Failed to add buddy"), _("'addbuddy' command failed."));
+		msim_msg_free(msg);
+		return;
+	}
+	msim_msg_free(msg);
+	
+	/* TODO: if addbuddy fails ('error' message is returned), delete added buddy from
+	 * buddy list since Purple adds it locally. */
+
+	body = msim_msg_new(
+			"ContactID", MSIM_TYPE_STRING, g_strdup("<uid>"),
+			"GroupName", MSIM_TYPE_STRING, g_strdup(group->name),
+			"Position", MSIM_TYPE_INTEGER, 1000,
+			"Visibility", MSIM_TYPE_INTEGER, 1,
+			"NickName", MSIM_TYPE_STRING, g_strdup(""),
+			"NameSelect", MSIM_TYPE_INTEGER, 0,
+			NULL);
+
+	/* TODO: Update blocklist. */
+
+#if 0
+	msg_persist = msim_msg_new(
+		"persist", MSIM_TYPE_INTEGER, 1,
+		"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+		"cmd", MSIM_TYPE_INTEGER, MSIM_CMD_BIT_ACTION | MSIM_CMD_PUT,
+		"dsn", MSIM_TYPE_INTEGER, MC_CONTACT_INFO_DSN,
+		"lid", MSIM_TYPE_INTEGER, MC_CONTACT_INFO_LID,
+		/* TODO: Use msim_new_reply_callback to get rid. */
+		"rid", MSIM_TYPE_INTEGER, session->next_rid++,
+		"body", MSIM_TYPE_DICTIONARY, body,
+		NULL);
+
+	if (!msim_postprocess_outgoing(session, msg_persist, buddy->name, "body", NULL))
+	{
+		purple_notify_error(NULL, NULL, _("Failed to add buddy"), _("persist command failed"));
+		msim_msg_free(msg_persist);
+		return;
+	}
+	msim_msg_free(msg_persist);
+#endif
+
+}
+
+/** Perform actual postprocessing on a message, adding userid as specified.
+ *
+ * @param msg The message to postprocess.
+ * @param uid_before Name of field where to insert new field before, or NULL for end.
+ * @param uid_field_name Name of field to add uid to.
+ * @param uid The userid to insert.
+ *
+ * If the field named by uid_field_name already exists, then its string contents will
+ * be used for the field, except "<uid>" will be replaced by the userid.
+ *
+ * If the field named by uid_field_name does not exist, it will be added before the
+ * field named by uid_before, as an integer, with the userid.
+ *
+ * Does not handle sending, or scheduling userid lookup. For that, see msim_postprocess_outgoing().
+ */ 
+static MsimMessage *
+msim_do_postprocessing(MsimMessage *msg, const gchar *uid_before, 
+		const gchar *uid_field_name, guint uid)
+{
+	msim_msg_dump("msim_do_postprocessing msg: %s\n", msg);
+
+	/* First, check - if the field already exists, replace <uid> within it */
+	if (msim_msg_get(msg, uid_field_name)) {
+		MsimMessageElement *elem;
+		gchar *fmt_string;
+		gchar *uid_str, *new_str;
+
+		/* Warning: this is a delicate, but safe, operation */
+
+		elem = msim_msg_get(msg, uid_field_name);
+
+		/* Get the packed element, flattening it. This allows <uid> to be
+		 * replaced within nested data structures, since the replacement is done
+		 * on the linear, packed data, not on a complicated data structure.
+		 *
+		 * For example, if the field was originally a dictionary or a list, you 
+		 * would have to iterate over all the items in it to see what needs to
+		 * be replaced. But by packing it first, the <uid> marker is easily replaced
+		 * just by a string replacement.
+		 */
+		fmt_string = msim_msg_pack_element_data(elem);
+
+		uid_str = g_strdup_printf("%d", uid);
+		new_str = purple_strreplace(fmt_string, "<uid>", uid_str);
+		g_free(uid_str);
+		g_free(fmt_string);
+
+		/* Free the old element data */
+		msim_msg_free_element_data(elem->data);
+
+		/* Replace it with our new data */
+		elem->data = new_str;
+		elem->type = MSIM_TYPE_RAW;
+
+	} else {
+		/* Otherwise, insert new field into outgoing message. */
+		msg = msim_msg_insert_before(msg, uid_before, uid_field_name, MSIM_TYPE_INTEGER, GUINT_TO_POINTER(uid));
+	}
+
+	msim_msg_dump("msim_postprocess_outgoing_cb: postprocessed msg=%s\n", msg);
+
+	return msg;
+}
+
+/** Callback for msim_postprocess_outgoing() to add a userid to a message, and send it (once receiving userid).
+ *
+ * @param session
+ * @param userinfo The user information reply message, containing the user ID
+ * @param data The message to postprocess and send.
+ *
+ * The data message should contain these fields:
+ *
+ *  _uid_field_name: string, name of field to add with userid from userinfo message
+ *  _uid_before: string, name of field before field to insert, or NULL for end
+ *
+ *
+*/
+static void 
+msim_postprocess_outgoing_cb(MsimSession *session, MsimMessage *userinfo, 
+		gpointer data)
+{
+	gchar *uid_field_name, *uid_before, *username;
+	guint uid;
+	MsimMessage *msg, *body;
+
+	msg = (MsimMessage *)data;
+
+	msim_msg_dump("msim_postprocess_outgoing_cb() got msg=%s\n", msg);
+
+	/* Obtain userid from userinfo message. */
+	body = msim_msg_get_dictionary(userinfo, "body");
+	g_return_if_fail(body != NULL);
+
+	uid = msim_msg_get_integer(body, "UserID");
+	msim_msg_free(body);
+
+	username = msim_msg_get_string(msg, "_username");
+
+	if (!uid) {
+		gchar *msg;
+
+		msg = g_strdup_printf(_("No such user: %s"), username);
+		purple_notify_error(NULL, NULL, _("User lookup"), msg);
+		g_free(msg);
+		g_free(username);
+		//msim_msg_free(msg);
+		return;
+	}
+
+	uid_field_name = msim_msg_get_string(msg, "_uid_field_name");
+	uid_before = msim_msg_get_string(msg, "_uid_before");
+
+	msg = msim_do_postprocessing(msg, uid_before, uid_field_name, uid);
+
+	/* Send */
+	if (!msim_msg_send(session, msg)) {
+		msim_msg_dump("msim_postprocess_outgoing_cb: sending failed for message: %s\n", msg);
+	}
+
+
+	/* Free field names AFTER sending message, because MsimMessage does NOT copy
+	 * field names - instead, treats them as static strings (which they usually are).
+	 */
+	g_free(uid_field_name);
+	g_free(uid_before);
+	g_free(username);
+	//msim_msg_free(msg);
+}
+
+/** Postprocess and send a message.
+ *
+ * @param session
+ * @param msg Message to postprocess. Will NOT be freed.
+ * @param username Username to resolve. Assumed to be a static string (will not be freed or copied).
+ * @param uid_field_name Name of new field to add, containing uid of username. Static string.
+ * @param uid_before Name of existing field to insert username field before. Static string.
+ *
+ * @return TRUE if successful.
+ */
+gboolean 
+msim_postprocess_outgoing(MsimSession *session, MsimMessage *msg, 
+		const gchar *username, const gchar *uid_field_name, 
+		const gchar *uid_before)
+{
+	PurpleBuddy *buddy;
+	guint uid;
+	gboolean rc;
+
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	/* Store information for msim_postprocess_outgoing_cb(). */
+	msim_msg_dump("msim_postprocess_outgoing: msg before=%s\n", msg);
+	msg = msim_msg_append(msg, "_username", MSIM_TYPE_STRING, g_strdup(username));
+	msg = msim_msg_append(msg, "_uid_field_name", MSIM_TYPE_STRING, g_strdup(uid_field_name));
+	msg = msim_msg_append(msg, "_uid_before", MSIM_TYPE_STRING, g_strdup(uid_before));
+
+	/* First, try the most obvious. If numeric userid is given, use that directly. */
+	if (msim_is_userid(username)) {
+		uid = atol(username);
+	} else {
+		/* Next, see if on buddy list and know uid. */
+		buddy = purple_find_buddy(session->account, username);
+		if (buddy) {
+			uid = purple_blist_node_get_int(&buddy->node, "UserID");
+		} else {
+			uid = 0;
+		}
+
+		if (!buddy || !uid)
+		{
+			/* Don't have uid offhand - need to ask for it, and wait until hear back before sending. */
+			purple_debug_info("msim", ">>> msim_postprocess_outgoing: couldn't find username %s in blist\n",
+					username ? username : "(NULL)");
+			msim_msg_dump("msim_postprocess_outgoing - scheduling lookup, msg=%s\n", msg);
+			/* TODO: where is cloned message freed? Should be in _cb. */
+			msim_lookup_user(session, username, msim_postprocess_outgoing_cb, msim_msg_clone(msg));
+			return TRUE;       /* not sure of status yet - haven't sent! */
+		}
+	}
+	
+	/* Already have uid, postprocess and send msg immediately. */
+	purple_debug_info("msim", "msim_postprocess_outgoing: found username %s has uid %d\n",
+			username ? username : "(NULL)", uid);
+
+	msg = msim_do_postprocessing(msg, uid_before, uid_field_name, uid);
+
+	msim_msg_dump("msim_postprocess_outgoing: msg after (uid immediate)=%s\n", msg);
+	
+	rc = msim_msg_send(session, msg);
+
+	//msim_msg_free(msg);
+
+	return rc;
+}
+
+/** Remove a buddy from the user's buddy list. */
+void 
+msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
+{
+	MsimSession *session;
+	MsimMessage *delbuddy_msg;
+	MsimMessage *persist_msg;
+	MsimMessage *blocklist_msg;
+	GList *blocklist_updates;
+
+	session = (MsimSession *)gc->proto_data;
+
+	delbuddy_msg = msim_msg_new(
+				"delbuddy", MSIM_TYPE_BOOLEAN, TRUE,
+				"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+				/* 'delprofileid' with uid will be inserted here. */
+				NULL);
+
+	if (!msim_postprocess_outgoing(session, delbuddy_msg, buddy->name, "delprofileid", NULL)) {
+		purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("'delbuddy' command failed"));
+		msim_msg_free(delbuddy_msg);
+		return;
+	}
+	msim_msg_free(delbuddy_msg);
+
+	persist_msg = msim_msg_new(
+			"persist", MSIM_TYPE_INTEGER, 1,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"cmd", MSIM_TYPE_INTEGER, MSIM_CMD_BIT_ACTION | MSIM_CMD_DELETE,
+			"dsn", MSIM_TYPE_INTEGER, MD_DELETE_BUDDY_DSN,
+			"lid", MSIM_TYPE_INTEGER, MD_DELETE_BUDDY_LID,
+			"uid", MSIM_TYPE_INTEGER, session->userid,
+			"rid", MSIM_TYPE_INTEGER, session->next_rid++,
+			/* <uid> will be replaced by postprocessing */
+			"body", MSIM_TYPE_STRING, g_strdup("ContactID=<uid>"),
+			NULL);
+
+	if (!msim_postprocess_outgoing(session, persist_msg, buddy->name, "body", NULL)) {
+		purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("persist command failed"));
+		msim_msg_free(persist_msg);
+		return;
+	}
+	msim_msg_free(persist_msg);
+
+	blocklist_updates = NULL;
+	blocklist_updates = g_list_prepend(blocklist_updates, "a-");
+	blocklist_updates = g_list_prepend(blocklist_updates, "<uid>");
+	blocklist_updates = g_list_prepend(blocklist_updates, "b-");
+	blocklist_updates = g_list_prepend(blocklist_updates, "<uid>");
+	blocklist_updates = g_list_reverse(blocklist_updates);
+
+	blocklist_msg = msim_msg_new(
+			"blocklist", MSIM_TYPE_BOOLEAN, TRUE,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			/* TODO: MsimMessage lists. Currently <uid> isn't replaced in lists. */
+			//"idlist", MSIM_TYPE_STRING, g_strdup("a-|<uid>|b-|<uid>"),
+			"idlist", MSIM_TYPE_LIST, blocklist_updates,
+			NULL);
+
+	if (!msim_postprocess_outgoing(session, blocklist_msg, buddy->name, "idlist", NULL)) {
+		purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("blocklist command failed"));
+		msim_msg_free(blocklist_msg);
+		return;
+	}
+	msim_msg_free(blocklist_msg);
+}
+
+/** Return whether the buddy can be messaged while offline.
+ *
+ * The protocol supports offline messages in just the same way as online
+ * messages.
+ */
+gboolean 
+msim_offline_message(const PurpleBuddy *buddy)
+{
+	return TRUE;
+}
+
+/**
+ * Callback when input available.
+ *
+ * @param gc_uncasted A PurpleConnection pointer.
+ * @param source File descriptor.
+ * @param cond PURPLE_INPUT_READ
+ *
+ * Reads the input, and calls msim_preprocess_incoming() to handle it.
+ */
+static void 
+msim_input_cb(gpointer gc_uncasted, gint source, PurpleInputCondition cond)
+{
+	PurpleConnection *gc;
+	PurpleAccount *account;
+	MsimSession *session;
+	gchar *end;
+	int n;
+
+	g_return_if_fail(gc_uncasted != NULL);
+	g_return_if_fail(source >= 0);  /* Note: 0 is a valid fd */
+
+	gc = (PurpleConnection *)(gc_uncasted);
+	account = purple_connection_get_account(gc);
+	session = gc->proto_data;
+
+	/* libpurple/eventloop.h only defines these two */
+	if (cond != PURPLE_INPUT_READ && cond != PURPLE_INPUT_WRITE) {
+		purple_debug_info("msim_input_cb", "unknown condition=%d\n", cond);
+		purple_connection_error(gc, _("Invalid input condition"));
+		return;
+	}
+
+	g_return_if_fail(cond == PURPLE_INPUT_READ);
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+
+	/* Mark down that we got data, so don't timeout. */
+	session->last_comm = time(NULL);
+
+	/* Only can handle so much data at once... 
+	 * If this happens, try recompiling with a higher MSIM_READ_BUF_SIZE.
+	 * Should be large enough to hold the largest protocol message.
+	 */
+	if (session->rxoff >= MSIM_READ_BUF_SIZE) {
+		purple_debug_error("msim", 
+				"msim_input_cb: %d-byte read buffer full! rxoff=%d\n",
+				MSIM_READ_BUF_SIZE, session->rxoff);
+		purple_connection_error(gc, _("Read buffer full"));
+		return;
+	}
+
+	purple_debug_info("msim", "buffer at %d (max %d), reading up to %d\n",
+			session->rxoff, MSIM_READ_BUF_SIZE, 
+			MSIM_READ_BUF_SIZE - session->rxoff);
+
+	/* Read into buffer. On Win32, need recv() not read(). session->fd also holds
+	 * the file descriptor, but it sometimes differs from the 'source' parameter.
+	 */
+	n = recv(session->fd, session->rxbuf + session->rxoff, MSIM_READ_BUF_SIZE - session->rxoff, 0);
+
+	if (n < 0 && errno == EAGAIN) {
+		return;
+	} else if (n < 0) {
+		purple_debug_error("msim", "msim_input_cb: read error, ret=%d, "
+			"error=%s, source=%d, fd=%d (%X))\n", 
+			n, strerror(errno), source, session->fd, session->fd);
+		purple_connection_error(gc, _("Read error"));
+		return;
+	} else if (n == 0) {
+		purple_debug_info("msim", "msim_input_cb: server disconnected\n");
+		purple_connection_error(gc, _("Server has disconnected"));
+		return;
+	}
+
+	if (n + session->rxoff >= MSIM_READ_BUF_SIZE) {
+		purple_debug_info("msim_input_cb", "received %d bytes, pushing rxoff to %d, over buffer size of %d\n",
+				n, n + session->rxoff, MSIM_READ_BUF_SIZE);
+		/* TODO: g_realloc like msn, yahoo, irc, jabber? */
+		purple_connection_error(gc, _("Read buffer full"));
+	}
+
+	/* Null terminate */
+	purple_debug_info("msim", "msim_input_cb: going to null terminate "
+			"at n=%d\n", n);
+	session->rxbuf[session->rxoff + n] = 0;
+
+#ifdef MSIM_CHECK_EMBEDDED_NULLS
+	/* Check for embedded NULs. I don't handle them, and they shouldn't occur. */
+	if (strlen(session->rxbuf + session->rxoff) != n) {
+		/* Occurs after login, but it is not a null byte. */
+		purple_debug_info("msim", "msim_input_cb: strlen=%d, but read %d bytes"
+				"--null byte encountered?\n", 
+				strlen(session->rxbuf + session->rxoff), n);
+		//purple_connection_error(gc, "Invalid message - null byte on input");
+		return;
+	}
+#endif
+
+	session->rxoff += n;
+	purple_debug_info("msim", "msim_input_cb: read=%d\n", n);
+
+#ifdef MSIM_DEBUG_RXBUF
+	purple_debug_info("msim", "buf=<%s>\n", session->rxbuf);
+#endif
+
+	/* Look for \\final\\ end markers. If found, process message. */
+	while((end = strstr(session->rxbuf, MSIM_FINAL_STRING))) {
+		MsimMessage *msg;
+
+#ifdef MSIM_DEBUG_RXBUF
+		purple_debug_info("msim", "in loop: buf=<%s>\n", session->rxbuf);
+#endif
+		*end = 0;
+		msg = msim_parse(g_strdup(session->rxbuf));
+		if (!msg) {
+			purple_debug_info("msim", "msim_input_cb: couldn't parse rxbuf\n");
+			purple_connection_error(gc, _("Unparseable message"));
+		} else {
+			/* Process message and then free it (processing function should
+			 * clone message if it wants to keep it afterwards.) */
+			if (!msim_preprocess_incoming(session, msg)) {
+				msim_msg_dump("msim_input_cb: preprocessing message failed on msg: %s\n", msg);
+			}
+			msim_msg_free(msg);
+		}
+
+		/* Move remaining part of buffer to beginning. */
+		session->rxoff -= strlen(session->rxbuf) + strlen(MSIM_FINAL_STRING);
+		memmove(session->rxbuf, end + strlen(MSIM_FINAL_STRING), 
+				MSIM_READ_BUF_SIZE - (end + strlen(MSIM_FINAL_STRING) - session->rxbuf));
+
+		/* Clear end of buffer */
+		//memset(end, 0, MSIM_READ_BUF_SIZE - (end - session->rxbuf));
+	}
+}
+
+/* Setup a callback, to be called when a reply is received with the returned rid.
+ *
+ * @param cb The callback, an MSIM_USER_LOOKUP_CB.
+ * @param data Arbitrary user data to be passed to callback (probably an MsimMessage *).
+ *
+ * @return The request/reply ID, used to link replies with requests, or -1.
+ *          Put the rid in your request, 'rid' field.
+ *
+ * TODO: Make more generic and more specific:
+ * 1) MSIM_USER_LOOKUP_CB - make it for PERSIST_REPLY, not just user lookup
+ * 2) data - make it an MsimMessage?
+ */
+guint 
+msim_new_reply_callback(MsimSession *session, MSIM_USER_LOOKUP_CB cb, 
+		gpointer data)
+{
+	guint rid;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), -1);
+
+	rid = session->next_rid++;
+
+	g_hash_table_insert(session->user_lookup_cb, GUINT_TO_POINTER(rid), cb);
+	g_hash_table_insert(session->user_lookup_cb_data, GUINT_TO_POINTER(rid), data);
+
+	return rid;
+}
+
+/**
+ * Callback when connected. Sets up input handlers.
+ *
+ * @param data A PurpleConnection pointer.
+ * @param source File descriptor.
+ * @param error_message
+ */
+static void 
+msim_connect_cb(gpointer data, gint source, const gchar *error_message)
+{
+	PurpleConnection *gc;
+	MsimSession *session;
+
+	g_return_if_fail(data != NULL);
+
+	gc = (PurpleConnection *)data;
+	session = (MsimSession *)gc->proto_data;
+
+	if (source < 0) {
+		purple_connection_error(gc, _("Couldn't connect to host"));
+		purple_connection_error(gc, g_strdup_printf(
+					_("Couldn't connect to host: %s (%d)"), 
+					error_message ? error_message : "no message given", 
+					source));
+		return;
+	}
+
+	session->fd = source; 
+
+	gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc);
+}
+
+			 
+/** 
+ * Close the connection.
+ * 
+ * @param gc The connection.
+ */
+void 
+msim_close(PurpleConnection *gc)
+{
+	MsimSession *session;
+
+	if (gc == NULL) {
+		return;
+	}
+
+	session = (MsimSession *)gc->proto_data;
+	if (session == NULL)
+		return;
+
+	gc->proto_data = NULL;
+
+	if (!MSIM_SESSION_VALID(session)) {
+		return;
+	}
+
+	if (session->gc->inpa) {
+		purple_input_remove(session->gc->inpa);
+	}
+
+	msim_session_destroy(session);
+}
+
+
+/**
+ * Obtain the status text for a buddy.
+ *
+ * @param buddy The buddy to obtain status text for.
+ *
+ * @return Status text, or NULL if error. Caller g_free()'s.
+ *
+ */
+char *
+msim_status_text(PurpleBuddy *buddy)
+{
+	MsimSession *session;
+	MsimUser *user;
+	const gchar *display_name, *headline;
+
+	g_return_val_if_fail(buddy != NULL, NULL);
+
+	user = msim_get_user_from_buddy(buddy);
+
+	session = (MsimSession *)buddy->account->gc->proto_data;
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), NULL);
+
+	display_name = headline = NULL;
+
+	/* Retrieve display name and/or headline, depending on user preference. */
+	if (purple_account_get_bool(session->account, "show_display_name", TRUE)) {
+		display_name = user->display_name;
+	} 
+
+	if (purple_account_get_bool(session->account, "show_headline", FALSE)) {
+		headline = user->headline;
+	}
+
+	/* Return appropriate combination of display name and/or headline, or neither. */
+
+	if (display_name && headline) {
+		return g_strconcat(display_name, " ", headline, NULL);
+	} else if (display_name) {
+		return g_strdup(display_name);
+	} else if (headline) {
+		return g_strdup(headline);
+	}
+
+	return NULL;
+}
+
+/**
+ * Obtain the tooltip text for a buddy.
+ *
+ * @param buddy Buddy to obtain tooltip text on.
+ * @param user_info Variable modified to have the tooltip text.
+ * @param full TRUE if should obtain full tooltip text.
+ *
+ */
+void 
+msim_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, 
+		gboolean full)
+{
+	MsimUser *user;
+
+	g_return_if_fail(buddy != NULL);
+	g_return_if_fail(user_info != NULL);
+
+	user = msim_get_user_from_buddy(buddy);
+
+	if (PURPLE_BUDDY_IS_ONLINE(buddy)) {
+		MsimSession *session;
+
+		session = (MsimSession *)buddy->account->gc->proto_data;
+
+		g_return_if_fail(MSIM_SESSION_VALID(session));
+
+		/* TODO: if (full), do something different? */
+
+		/* TODO: request information? have to figure out how to do
+		 * the asynchronous lookup like oscar does (tooltip shows
+		 * 'retrieving...' if not yet available, then changes when it is).
+		 *
+		 * Right now, only show what we have on hand.
+		 */
+
+		/* Show abbreviated user info. */
+		msim_append_user_info(session, user_info, user, FALSE);
+	}
+}
+
+/** Add contact from server to buddy list, after looking up username.
+ * Callback from msim_add_contact_from_server(). 
+ *
+ * @param data An MsimMessage * of the contact information. Will be freed.
+ */
+static void
+msim_add_contact_from_server_cb(MsimSession *session, MsimMessage *user_lookup_info, gpointer data)
+{
+	MsimMessage *contact_info, *user_lookup_info_body;
+	PurpleGroup *group;
+	PurpleBuddy *buddy;
+	MsimUser *user;
+	gchar *username, *group_name;
+	guint uid;
+
+	contact_info = (MsimMessage *)data;
+	purple_debug_info("msim_add_contact_from_server_cb", "contact_info addr=%X\n", contact_info);
+	uid = msim_msg_get_integer(contact_info, "ContactID");
+
+	if (!user_lookup_info) {
+		username = g_strdup(msim_uid2username_from_blist(session, uid));
+		g_return_if_fail(username != NULL);
+	} else {
+		user_lookup_info_body = msim_msg_get_dictionary(user_lookup_info, "body");
+		username = msim_msg_get_string(user_lookup_info_body, "UserName");
+		msim_msg_free(user_lookup_info_body);
+		g_return_if_fail(username != NULL);
+	}
+
+	purple_debug_info("msim_add_contact_from_server_cb",
+			"*** about to add/update username=%s\n", username);
+
+	/* 1. Creates a new group, or gets existing group if it exists (or so
+	 * the documentation claims). */
+	group_name = msim_msg_get_string(contact_info, "GroupName");
+	if (group_name) {
+		group = purple_group_new(group_name);
+		purple_debug_info("msim_add_contact_from_server_cb",
+				"adding to GroupName: %s\n", group_name);
+		g_free(group_name);
+	} else {
+		group = purple_group_new(_("IM Friends"));
+	}
+
+	/* 2. Get or create buddy */
+	buddy = purple_find_buddy(session->account, username);
+	if (!buddy) {
+		purple_debug_info("msim_add_contact_from_server_cb",
+				"creating new buddy: %s\n", username);
+		buddy = purple_buddy_new(session->account, username, NULL);
+	}
+
+	/* Add group to beginning. See #2752. */
+	purple_blist_add_group(group, NULL);
+
+	/* TODO: use 'Position' in contact_info to take into account where buddy is */
+	purple_blist_add_buddy(buddy, NULL, group, NULL /* insertion point */);
+
+	/* 3. Update buddy information */
+	user = msim_get_user_from_buddy(buddy);
+
+	/* All buddies on list should have 'uid' integer associated with them. */
+	purple_blist_node_set_int(&buddy->node, "UserID", uid);
+
+	/* Stores a few fields in the MsimUser, relevant to the buddy itself.
+	 * AvatarURL, Headline, ContactID. */
+	msim_store_user_info(session, contact_info, NULL);
+
+	/* TODO: other fields, store in 'user' */
+
+	msim_msg_free(contact_info);
+}
+
+/** Add first ContactID in contact_info to buddy's list. Used to add
+ * server-side buddies to client-side list. 
+ *
+ * @return TRUE if added.
+ * */
+static gboolean
+msim_add_contact_from_server(MsimSession *session, MsimMessage *contact_info)
+{
+	guint uid;
+	const gchar *username;
+
+	uid = msim_msg_get_integer(contact_info, "ContactID");
+	g_return_val_if_fail(uid != 0, FALSE);
+
+	/* Lookup the username, since NickName and IMName is unreliable */
+	username = msim_uid2username_from_blist(session, uid);
+	if (!username) {
+		gchar *uid_str;
+
+		uid_str = g_strdup_printf("%d", uid);
+		purple_debug_info("msim_add_contact_from_server",
+				"contact_info addr=%X\n", contact_info);
+		msim_lookup_user(session, uid_str, msim_add_contact_from_server_cb, (gpointer)msim_msg_clone(contact_info));
+		g_free(uid_str);
+	} else {
+		msim_add_contact_from_server_cb(session, NULL, (gpointer)msim_msg_clone(contact_info));
+	}
+
+	/* Say that the contact was added, even if we're still looking up
+	 * their username. */
+	return TRUE;
+}
+
+/** Called when contact list is received from server. */
+static void
+msim_got_contact_list(MsimSession *session, MsimMessage *reply, gpointer user_data)
+{
+	MsimMessage *body, *body_node;
+	gchar *msg;
+	guint buddy_count;
+
+	msim_msg_dump("msim_got_contact_list: reply=%s", reply);
+
+	body = msim_msg_get_dictionary(reply, "body");
+	g_return_if_fail(body != NULL);
+
+	buddy_count = 0;
+
+	for (body_node = body;
+		body_node != NULL;
+		body_node = msim_msg_get_next_element_node(body_node))
+	{
+		MsimMessageElement *elem;
+
+		elem = (MsimMessageElement *)body_node->data;
+
+		if (g_str_equal(elem->name, "ContactID"))
+		{
+			/* Will look for first contact in body_node */
+			if (msim_add_contact_from_server(session, body_node)) {
+				++buddy_count;
+			}
+		}
+	}
+
+	switch (GPOINTER_TO_UINT(user_data)) {
+		case MSIM_CONTACT_LIST_IMPORT_ALL_FRIENDS:
+			msg = g_strdup_printf(_("%d buddies were added or updated"), buddy_count);
+			purple_notify_info(session->account, _("Add contacts from server"), msg, NULL);
+			g_free(msg);
+			break;
+
+		case MSIM_CONTACT_LIST_IMPORT_TOP_FRIENDS:
+			/* TODO */
+			break;
+		
+		case MSIM_CONTACT_LIST_INITIAL_FRIENDS:
+			/* Nothing */
+			break;
+	}
+
+	msim_msg_free(body);
+}
+
+/* Get contact list, calling msim_got_contact_list() with what_to_do_after as user_data gpointer. */
+static gboolean
+msim_get_contact_list(MsimSession *session, int what_to_do_after)
+{
+	return msim_send(session, 
+			"persist", MSIM_TYPE_INTEGER, 1,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"cmd", MSIM_TYPE_INTEGER, MSIM_CMD_GET,
+			"dsn", MSIM_TYPE_INTEGER, MG_LIST_ALL_CONTACTS_DSN,
+			"lid", MSIM_TYPE_INTEGER, MG_LIST_ALL_CONTACTS_LID,
+			"uid", MSIM_TYPE_INTEGER, session->userid,
+			"rid", MSIM_TYPE_INTEGER, 
+				msim_new_reply_callback(session, msim_got_contact_list, GUINT_TO_POINTER(what_to_do_after)), 
+			"body", MSIM_TYPE_STRING, g_strdup(""),
+			NULL);
+}
+
+
+/** Called when friends have been imported to buddy list on server. */
+static void 
+msim_import_friends_cb(MsimSession *session, MsimMessage *reply, gpointer user_data)
+{
+	MsimMessage *body;
+	gchar *completed;
+	msim_msg_dump("msim_import_friends_cb=%s", reply);
+
+	/* Check if the friends were imported successfully. */
+	body = msim_msg_get_dictionary(reply, "body");
+	g_return_if_fail(body != NULL);
+	completed = msim_msg_get_string(body, "Completed");
+	g_return_if_fail(body != NULL);
+	msim_msg_free(body);
+	if (!g_str_equal(completed, "True"))
+	{
+		purple_debug_info("msim_import_friends_cb",
+				"failed to import friends: %s", completed);
+		purple_notify_error(session->account, _("Add friends from MySpace.com"),
+				_("Importing friends failed"), NULL);
+		g_free(completed);
+		return;
+	}
+	g_free(completed);
+
+	purple_debug_info("msim_import_friends_cb",
+			"added friends to server-side buddy list, requesting new contacts from server");
+
+	msim_get_contact_list(session, MSIM_CONTACT_LIST_IMPORT_ALL_FRIENDS);
+
+	/* TODO: show, X friends have been added */
+}
+
+/** Import friends from myspace.com. */
+static void msim_import_friends(PurplePluginAction *action)
+{
+	PurpleConnection *gc;
+	MsimSession *session;
+	gchar *group_name;
+
+	gc = (PurpleConnection *)action->context;
+	session = (MsimSession *)gc->proto_data;
+
+	group_name = "MySpace Friends";
+
+	g_return_if_fail(msim_send(session, 
+			"persist", MSIM_TYPE_INTEGER, 1,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"cmd", MSIM_TYPE_INTEGER, MSIM_CMD_PUT,
+			"dsn", MSIM_TYPE_INTEGER, MC_IMPORT_ALL_FRIENDS_DSN,
+			"lid", MSIM_TYPE_INTEGER, MC_IMPORT_ALL_FRIENDS_LID,
+			"uid", MSIM_TYPE_INTEGER, session->userid,
+			"rid", MSIM_TYPE_INTEGER, 
+				msim_new_reply_callback(session, msim_import_friends_cb, NULL),
+			"body", MSIM_TYPE_STRING,
+				g_strdup_printf("GroupName=%s", group_name),
+			NULL));
+
+
+}
+
+/** Actions menu for account. */
+GList *
+msim_actions(PurplePlugin *plugin, gpointer context)
+{
+	PurpleConnection *gc;
+	GList *menu;
+	PurplePluginAction *act;
+
+	gc = (PurpleConnection *)context;
+
+	menu = NULL;
+
+#if 0
+	/* TODO: find out how */
+	act = purple_plugin_action_new(_("Find people..."), msim_);
+	menu = g_list_append(menu, act);
+
+	act = purple_plugin_action_new(_("Change IM name..."), NULL);
+	menu = g_list_append(menu, act);
+#endif
+
+	act = purple_plugin_action_new(g_strdup_printf("%s",
+				_("Add friends from MySpace.com")), msim_import_friends);
+	menu = g_list_append(menu, act);
+
+	return menu;
+}
+
+/** Callbacks called by Purple, to access this plugin. */
+PurplePluginProtocolInfo prpl_info = {
+	/* options */
+	  OPT_PROTO_USE_POINTSIZE        /* specify font size in sane point size */
+	| OPT_PROTO_MAIL_CHECK,
+
+	/* | OPT_PROTO_IM_IMAGE - TODO: direct images. */    
+	NULL,              /* user_splits */
+	NULL,              /* protocol_options */
+	NO_BUDDY_ICONS,    /* icon_spec - TODO: eventually should add this */
+	msim_list_icon,    /* list_icon */
+	NULL,              /* list_emblems */
+	msim_status_text,  /* status_text */
+	msim_tooltip_text, /* tooltip_text */
+	msim_status_types, /* status_types */
+	msim_blist_node_menu,  /* blist_node_menu */
+	NULL,              /* chat_info */
+	NULL,              /* chat_info_defaults */
+	msim_login,        /* login */
+	msim_close,        /* close */
+	msim_send_im,      /* send_im */
+	NULL,              /* set_info */
+	msim_send_typing,  /* send_typing */
+	msim_get_info,     /* get_info */
+	msim_set_status,   /* set_status */
+	msim_set_idle,     /* set_idle */
+	NULL,              /* change_passwd */
+	msim_add_buddy,    /* add_buddy */
+	NULL,              /* add_buddies */
+	msim_remove_buddy, /* remove_buddy */
+	NULL,              /* remove_buddies */
+	NULL,              /* add_permit */
+	NULL,              /* add_deny */
+	NULL,              /* rem_permit */
+	NULL,              /* rem_deny */
+	NULL,              /* set_permit_deny */
+	NULL,              /* join_chat */
+	NULL,              /* reject chat invite */
+	NULL,              /* get_chat_name */
+	NULL,              /* chat_invite */
+	NULL,              /* chat_leave */
+	NULL,              /* chat_whisper */
+	NULL,              /* chat_send */
+	NULL,              /* keepalive */
+	NULL,              /* register_user */
+	NULL,              /* get_cb_info */
+	NULL,              /* get_cb_away */
+	NULL,              /* alias_buddy */
+	NULL,              /* group_buddy */
+	NULL,              /* rename_group */
+	NULL,              /* buddy_free */
+	NULL,              /* convo_closed */
+	NULL,              /* normalize */
+	NULL,              /* set_buddy_icon */
+	NULL,              /* remove_group */
+	NULL,              /* get_cb_real_name */
+	NULL,              /* set_chat_topic */
+	NULL,              /* find_blist_chat */
+	NULL,              /* roomlist_get_list */
+	NULL,              /* roomlist_cancel */
+	NULL,              /* roomlist_expand_category */
+	NULL,              /* can_receive_file */
+	NULL,              /* send_file */
+	NULL,              /* new_xfer */
+	msim_offline_message,  /* offline_message */
+	NULL,              /* whiteboard_prpl_ops */
+	msim_send_really_raw,  /* send_raw */
+	NULL,                  /* roomlist_room_serialize */
+#ifdef MSIM_USE_ATTENTION_API
+	msim_send_attention,   /* send_attention */
+	msim_attention_types,  /* attention_types */
+#else
+	NULL,               /* _purple_reserved1 */
+	NULL,               /* _purple_reserved2 */
+#endif
+	NULL,               /* _purple_reserved3 */
+	NULL                /* _purple_reserved4 */
+};
+
+
+
+/** Based on MSN's plugin info comments. */
+PurplePluginInfo info = {
+	PURPLE_PLUGIN_MAGIC,                                
+	PURPLE_MAJOR_VERSION,
+	PURPLE_MINOR_VERSION,
+	PURPLE_PLUGIN_PROTOCOL,                           /**< type           */
+	NULL,                                             /**< ui_requirement */
+	0,                                                /**< flags          */
+	NULL,                                             /**< dependencies   */
+	PURPLE_PRIORITY_DEFAULT,                          /**< priority       */
+
+	"prpl-myspace",                                   /**< id             */
+	"MySpaceIM",                                      /**< name           */
+	MSIM_PRPL_VERSION_STRING,                         /**< version        */
+	                                                  /**  summary        */
+	"MySpaceIM Protocol Plugin",
+	                                                  /**  description    */
+	"MySpaceIM Protocol Plugin",
+	"Jeff Connelly <jeff2@soc.pidgin.im>",            /**< author         */
+	"http://developer.pidgin.im/wiki/MySpaceIM/",     /**< homepage       */
+
+	msim_load,                                        /**< load           */
+	NULL,                                             /**< unload         */
+	NULL,                                             /**< destroy        */
+	NULL,                                             /**< ui_info        */
+	&prpl_info,                                       /**< extra_info     */
+	NULL,                                             /**< prefs_info     */
+	msim_actions,                                     /**< msim_actions   */
+	NULL,                                             /**< reserved1      */
+	NULL,                                             /**< reserved2      */
+	NULL,                                             /**< reserved3      */
+	NULL                                              /**< reserved4      */
+};
+
+
+#ifdef MSIM_SELF_TEST
+/** Test functions.
+ * Used to test or try out the internal workings of msimprpl. If you're reading
+ * this code for the first time, these functions can be instructive in learning
+ * how msimprpl is architected.
+ */
+void 
+msim_test_all(void) {
+	guint failures;
+
+
+	failures = 0;
+	failures += msim_test_msg();
+	failures += msim_test_escaping();
+
+	if (failures) {
+		purple_debug_info("msim", "msim_test_all HAD FAILURES: %d\n", failures);
+	} else {
+		purple_debug_info("msim", "msim_test_all - all tests passed!\n");
+	}
+	exit(0);
+}
+
+/** Test MsimMessage for basic functionality. */
+int 
+msim_test_msg(void)
+{
+	MsimMessage *msg, *msg_cloned, *msg2;
+	GList *list;
+	gchar *packed, *packed_expected, *packed_cloned;
+	guint failures;
+
+	failures = 0;
+
+	purple_debug_info("msim", "\n\nTesting MsimMessage\n");
+	msg = msim_msg_new(NULL);      /* Create a new, empty message. */
+
+	/* Append some new elements. */
+	msg = msim_msg_append(msg, "bx", MSIM_TYPE_BINARY, g_string_new_len(g_strdup("XXX"), 3));
+	msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v1"));
+	msg = msim_msg_append(msg, "k1", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(42));
+	msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v43"));
+	msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v52/xxx\\yyy"));
+	msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v7"));
+	msim_msg_dump("msg debug str=%s\n", msg);
+	packed = msim_msg_pack(msg);
+
+	purple_debug_info("msim", "msg packed=%s\n", packed);
+
+	packed_expected = "\\bx\\WFhY\\k1\\v1\\k1\\42\\k1"
+		"\\v43\\k1\\v52/1xxx/2yyy\\k1\\v7\\final\\";
+
+	if (!g_str_equal(packed, packed_expected)) {
+		purple_debug_info("msim", "!!!(%d), msim_msg_pack not what expected: %s != %s\n",
+				++failures, packed, packed_expected);
+	}
+
+
+	msg_cloned = msim_msg_clone(msg);
+	packed_cloned = msim_msg_pack(msg_cloned);
+
+	purple_debug_info("msim", "msg cloned=%s\n", packed_cloned);
+	if (!g_str_equal(packed, packed_cloned)) {
+		purple_debug_info("msim", "!!!(%d), msim_msg_pack on cloned message not equal to original: %s != %s\n",
+				++failures, packed_cloned, packed);
+	}
+
+	g_free(packed);
+	g_free(packed_cloned);
+	msim_msg_free(msg_cloned);
+	msim_msg_free(msg);
+
+	/* Try some of the more advanced functionality */
+	list = NULL;
+
+	list = g_list_prepend(list, "item3");
+	list = g_list_prepend(list, "item2");
+	list = g_list_prepend(list, "item1");
+	list = g_list_prepend(list, "item0");
+
+	msg = msim_msg_new(NULL);
+	msg = msim_msg_append(msg, "string", MSIM_TYPE_STRING, g_strdup("string value"));
+	msg = msim_msg_append(msg, "raw", MSIM_TYPE_RAW, g_strdup("raw value"));
+	msg = msim_msg_append(msg, "integer", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(3140));
+	msg = msim_msg_append(msg, "boolean", MSIM_TYPE_BOOLEAN, GUINT_TO_POINTER(FALSE));
+	msg = msim_msg_append(msg, "list", MSIM_TYPE_LIST, list);
+
+	msim_msg_dump("msg with list=%s\n", msg);
+	purple_debug_info("msim", "msg with list packed=%s\n", msim_msg_pack(msg));
+
+	msg2 = msim_msg_new(NULL);
+	msg2 = msim_msg_append(msg2, "outer", MSIM_TYPE_STRING, g_strdup("outer value"));
+	msg2 = msim_msg_append(msg2, "body", MSIM_TYPE_DICTIONARY, msg);
+	msim_msg_dump("msg with dict=%s\n", msg2);      /* msg2 now 'owns' msg */
+	purple_debug_info("msim", "msg with dict packed=%s\n", msim_msg_pack(msg2));
+
+	msim_msg_free(msg2);
+
+	return failures;
+}
+
+/** Test protocol-level escaping/unescaping. */
+int 
+msim_test_escaping(void)
+{
+	guint failures;
+	gchar *raw, *escaped, *unescaped, *expected;
+
+	failures = 0;
+
+	purple_debug_info("msim", "\n\nTesting escaping\n");
+
+	raw = "hello/world\\hello/world";
+
+	escaped = msim_escape(raw);
+	purple_debug_info("msim", "msim_test_escaping: raw=%s, escaped=%s\n", raw, escaped);
+	expected = "hello/1world/2hello/1world";
+	if (!g_str_equal(escaped, expected)) {
+		purple_debug_info("msim", "!!!(%d), msim_escape failed: %s != %s\n",
+				++failures, escaped, expected);
+	}
+
+
+	unescaped = msim_unescape(escaped);
+	g_free(escaped);
+	purple_debug_info("msim", "msim_test_escaping: unescaped=%s\n", unescaped);
+	if (!g_str_equal(raw, unescaped)) {
+		purple_debug_info("msim", "!!!(%d), msim_unescape failed: %s != %s\n",
+				++failures, raw, unescaped);
+	}
+
+	return failures;
+}
+#endif
+
+static gboolean
+msim_uri_handler(const gchar *proto, const gchar *cmd, GHashTable *params)
+{
+	PurpleAccount *account;
+	MsimSession *session;
+	GList *l;
+	gchar *uid_str, *cid_str;
+	guint uid, cid;
+
+	if (g_ascii_strcasecmp(proto, "myim"))
+		return FALSE;
+
+	/* Parameters are case-insensitive. */
+	uid_str = g_hash_table_lookup(params, "uid");
+	cid_str = g_hash_table_lookup(params, "cid");
+
+	uid = uid_str ? atol(uid_str) : 0;
+	cid = cid_str ? atol(cid_str) : 0;
+
+	/* Need a contact. */
+	g_return_val_if_fail(cid != 0, FALSE);
+
+	/* TODO: if auto=true, "Add all the people on this page to my IM List!", on
+	 * http://collect.myspace.com/index.cfm?fuseaction=im.friendslist. Don't need a cid. */
+
+	/* Convert numeric contact ID back to a string. Needed for looking up. Don't just
+	 * directly use cid directly from parameters, because it might not be numeric. 
+	 * It is trivial to change this to allow cID to be a username, but that's not how
+	 * the official MySpaceIM client works, so don't provide that functionality. */
+	cid_str = g_strdup_printf("%d", cid);
+
+
+	/* Find our account with specified user id, or use first connected account if uid=0. */
+	account = NULL;
+	l = purple_accounts_get_all();
+	while (l) {
+		if (purple_account_is_connected(l->data) &&
+			(uid == 0 || purple_account_get_int(l->data, "uid", 0) == uid)) {
+			account = l->data;
+			break;
+		}
+		l = l->next;
+	}
+
+	if (!account) {
+		purple_notify_error(NULL, _("myim URL handler"), 
+				_("No suitable MySpaceIM account could be found to open this myim URL."),
+				_("Enable the proper MySpaceIM account and try again."));
+		g_free(cid_str);
+		return FALSE;
+	}
+
+	session = (MsimSession *)account->gc->proto_data;
+	g_return_val_if_fail(session != NULL, FALSE);
+
+	/* Lookup userid to username. TODO: push this down, to IM sending/contact 
+	 * adding functions. */
+
+	/* myim:sendIM?uID=USERID&cID=CONTACTID */
+	if (!g_ascii_strcasecmp(cmd, "sendIM")) {
+		msim_lookup_user(session, cid_str, (MSIM_USER_LOOKUP_CB)msim_uri_handler_sendIM_cb, NULL);
+		g_free(cid_str);
+		return TRUE;
+
+	/* myim:addContact?uID=USERID&cID=CONTACTID */
+	} else if (!g_ascii_strcasecmp(cmd, "addContact")) {
+		msim_lookup_user(session, cid_str, (MSIM_USER_LOOKUP_CB)msim_uri_handler_addContact_cb, NULL);
+		g_free(cid_str);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+/* TODO: move uid->username resolving to IM sending and buddy adding functions,
+ * so that user can manually add or IM by userid and username automatically
+ * looked up if possible? */
+ 
+/** Handle a myim:sendIM URI command, after username has been looked up. */
+static void
+msim_uri_handler_sendIM_cb(MsimSession *session, MsimMessage *userinfo, gpointer data)
+{
+	PurpleConversation *conv;
+	MsimMessage *body;
+	gchar *username;
+
+	body = msim_msg_get_dictionary(userinfo, "body");
+	username = msim_msg_get_string(body, "UserName");
+	msim_msg_free(body);
+
+	if (!username) {
+		guint uid;
+
+		uid = msim_msg_get_integer(userinfo, "UserID");
+		g_return_if_fail(uid != 0);
+
+		username = g_strdup_printf("%d", uid);
+	}
+
+
+	conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, username, session->account);
+	if (!conv)  {
+		purple_debug_info("msim_uri_handler", "creating new conversation for %s\n", username);
+		conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, session->account, username);
+	}
+
+	/* Just open the window so the user can send an IM. */
+	purple_conversation_present(conv);
+
+	g_free(username);
+}
+
+/** Handle a myim:addContact command, after username has been looked up. */
+static void
+msim_uri_handler_addContact_cb(MsimSession *session, MsimMessage *userinfo, gpointer data)
+{
+	MsimMessage *body;
+	gchar *username;
+
+	body = msim_msg_get_dictionary(userinfo, "body");
+	username = msim_msg_get_string(body, "UserName");
+	msim_msg_free(body);
+
+	if (!username) {
+		guint uid;
+
+		uid = msim_msg_get_integer(userinfo, "UserID");
+		g_return_if_fail(uid != 0);
+
+		username = g_strdup_printf("%d", uid);
+	}
+
+
+	purple_blist_request_add_buddy(session->account, username, _("Buddies"), NULL);
+
+	g_free(username);
+}
+
+/** Initialize plugin. */
+void 
+init_plugin(PurplePlugin *plugin) 
+{
+#ifdef MSIM_SELF_TEST
+	msim_test_all();
+	exit(0);
+#endif /* MSIM_SELF_TEST */
+
+	PurpleAccountOption *option;
+	static gboolean initialized = FALSE;
+
+
+	/* TODO: default to automatically try different ports. Make the user be
+	 * able to set the first port to try (like LastConnectedPort in Windows client).  */
+	option = purple_account_option_string_new(_("Connect server"), "server", MSIM_SERVER);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
+	option = purple_account_option_int_new(_("Connect port"), "port", MSIM_PORT);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
+#ifdef MSIM_USER_WANTS_TO_CONFIGURE_STATUS_TEXT
+	option = purple_account_option_bool_new(_("Show display name in status text"), "show_display_name", TRUE);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
+	option = purple_account_option_bool_new(_("Show headline in status text"), "show_headline", TRUE);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+#endif
+
+#ifdef MSIM_USER_WANTS_TO_DISABLE_EMOTICONS
+	option = purple_account_option_bool_new(_("Send emoticons"), "emoticons", FALSE);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+#endif
+
+#ifdef MSIM_USER_REALLY_CARES_ABOUT_PRECISE_FONT_SIZES
+	option = purple_account_option_int_new(_("Screen resolution (dots per inch)"), "dpi", MSIM_DEFAULT_DPI);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
+	option = purple_account_option_int_new(_("Base font size (points)"), "base_font_size", MSIM_BASE_FONT_POINT_SIZE);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+#endif
+
+	/* Code below only runs once. Based on oscar.c's oscar_init(). */
+	if (initialized) 
+		return;
+
+	initialized = TRUE;
+
+	purple_signal_connect(purple_get_core(), "uri-handler", &initialized,
+			PURPLE_CALLBACK(msim_uri_handler), NULL);
+}
+
+PURPLE_INIT_PLUGIN(myspace, init_plugin, info);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/myspace.h	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,238 @@
+/* MySpaceIM Protocol Plugin, header file
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 _MYSPACE_MYSPACE_H
+#define _MYSPACE_MYSPACE_H
+
+/* Other includes */
+#include <string.h>
+#include <errno.h>/* for EAGAIN */
+#include <stdarg.h>
+#include <math.h>
+
+#include <glib.h>
+
+#ifdef _WIN32
+#include "win32dep.h"
+#else
+/* For recv() and send(); needed to match Win32 */
+#include <sys/types.h>
+#include <sys/socket.h>
+#endif
+
+#include "internal.h"
+
+#include "notify.h"
+#include "plugin.h"
+#include "accountopt.h"
+#include "version.h"
+#include "cipher.h"     /* for SHA-1 */
+#include "util.h"       /* for base64 */
+#include "debug.h"      /* for purple_debug_info */
+#include "xmlnode.h"
+#include "core.h"
+
+/* MySpaceIM includes */
+#include "persist.h"
+#include "message.h"
+#include "session.h"
+#include "zap.h"
+#include "markup.h"
+#include "user.h"
+
+/* Conditional compilation options */
+/* Send third-party client version? (Recognized by us and Miranda's plugin) */
+/*#define MSIM_SEND_CLIENT_VERSION              */
+
+/* Debugging options */
+/*#define MSIM_DEBUG_MSG                */
+/* Low-level and rarely needed */
+/*#define MSIM_DEBUG_PARSE             */
+/*#define MSIM_DEBUG_LOGIN_CHALLENGE*/
+/*#define MSIM_DEBUG_RXBUF            */
+
+/* Define to cause init_plugin() to run some tests and print
+ * the results to the Purple debug log, then exit. Useful to 
+ * run with 'pidgin -d' to see the output. Don't define if
+ * you want to actually use the plugin! */
+/*#define MSIM_SELF_TEST            */
+
+/* Use the attention API for zaps? */
+/* Can't have until >=2.2.0, since is a new API. */
+#define MSIM_USE_ATTENTION_API
+
+/* Constants */
+
+/* Maximum length of a password that is acceptable. This is the limit
+ * on the official client (build 679) and on the 'new password' field at
+ * http://settings.myspace.com/index.cfm?fuseaction=user.changepassword
+ * (though curiously, not on the 'current password' field). */
+
+/* Not defined; instead have the client reject the password, until libpurple
+ * supports specifying a length limit on the protocol's password. */
+/* #define MSIM_MAX_PASSWORD_LENGTH    10	*/
+
+/* Build version of MySpaceIM to report to servers (1.0.xxx.0) */
+#define MSIM_CLIENT_VERSION         697
+
+/* Language codes from http://www.microsoft.com/globaldev/reference/oslocversion.mspx */
+#define MSIM_LANGUAGE_ID_ENGLISH    1033
+#define MSIM_LANGUAGE_NAME_ENGLISH  "ENGLISH"
+
+/* msimprpl version string of this plugin */
+#define MSIM_PRPL_VERSION_STRING    "0.16"
+
+/* Default server */
+#define MSIM_SERVER                 "im.myspace.akadns.net"
+#define MSIM_PORT                   1863        /* TODO: alternate ports and automatic */
+
+/* Time between keepalives (seconds) - if no data within this time, is dead. */
+#define MSIM_KEEPALIVE_INTERVAL     (3 * 60)
+
+/* Time to check if alive (milliseconds) */
+#define MSIM_KEEPALIVE_INTERVAL_CHECK   (30 * 1000)
+
+/* Time to check for new mail (milliseconds) */
+#define MSIM_MAIL_INTERVAL_CHECK    (60 * 1000) 
+
+
+/* Constants */
+#define HASH_SIZE                   0x14        /**< Size of SHA-1 hash for login */
+#define NONCE_SIZE                  0x20        /**< Half of decoded 'nc' field */
+#define MSIM_READ_BUF_SIZE          (15 * 1024) /**< Receive buffer size */
+#define MSIM_FINAL_STRING           "\\final\\" /**< Message end marker */
+
+/* Messages */
+#define MSIM_BM_INSTANT             1
+#define MSIM_BM_STATUS              100
+#define MSIM_BM_ACTION              121
+#define MSIM_BM_MEDIA               122
+#define MSIM_BM_PROFILE             124
+#define MSIM_BM_UNOFFICIAL_CLIENT   200
+
+/* Authentication algorithm for login2 */
+#define MSIM_AUTH_ALGORITHM         196610
+
+/* Recognized challenge length */
+#define MSIM_AUTH_CHALLENGE_LENGTH  0x40
+
+/* TODO: obtain IPs of network interfaces from user's machine, instead of
+ * hardcoding these values below (used in msim_compute_login_response). 
+ * This is not immediately
+ * important because you can still connect and perform basic
+ * functions of the protocol. There is also a high chance that the addreses
+ * are RFC1918 private, so the servers couldn't do anything with them
+ * anyways except make note of that fact. Probably important for any
+ * kind of direct connection, or file transfer functionality.
+ */
+
+#define MSIM_LOGIN_IP_LIST  "\x00\x00\x00\x00\x05\x7f\x00\x00\x01\x00\x00\x00\x00\x0a\x00\x00\x40\xc0\xa8\x58\x01\xc0\xa8\x3c\x01"
+#define MSIM_LOGIN_IP_LIST_LEN         25
+
+/* Indexes into status string (0|1|2|3|..., but 0 always empty) */
+#define MSIM_STATUS_ORDINAL_EMPTY       0
+#define MSIM_STATUS_ORDINAL_UNKNOWNs    1
+#define MSIM_STATUS_ORDINAL_ONLINE      2
+#define MSIM_STATUS_ORDINAL_UNKNOWNss   3
+#define MSIM_STATUS_ORDINAL_HEADLINE    4
+#define MSIM_STATUS_ORDINAL_UNKNOWNls   5
+#define MSIM_STATUS_ORDINAL_UNKNOWN     6
+#define MSIM_STATUS_ORDINAL_UNKNOWN1    7
+#define MSIM_STATUS_ORDINAL_UNKNOWNp    8
+#define MSIM_STATUS_ORDINAL_UNKNOWN2    9
+
+/* Status codes - states a buddy (or you!) can be in. */
+#define MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN    0
+#define MSIM_STATUS_CODE_ONLINE               1
+#define MSIM_STATUS_CODE_IDLE                 2
+#define MSIM_STATUS_CODE_AWAY                 5
+
+
+/* Inbox status bitfield values for MsimSession.inbox_status. */
+#define MSIM_INBOX_MAIL                 (1 << 0)
+#define MSIM_INBOX_BLOG_COMMENT         (1 << 1)
+#define MSIM_INBOX_PROFILE_COMMENT      (1 << 2)
+#define MSIM_INBOX_FRIEND_REQUEST       (1 << 3)
+#define MSIM_INBOX_PICTURE_COMMENT      (1 << 4)
+
+/* Codes for msim_got_contact_list(), to tell what to do afterwards. */
+#define MSIM_CONTACT_LIST_INITIAL_FRIENDS	0
+#define MSIM_CONTACT_LIST_IMPORT_ALL_FRIENDS	1
+#define MSIM_CONTACT_LIST_IMPORT_TOP_FRIENDS	2
+
+#ifdef MSIM_USE_ATTENTION_API
+#define MsimAttentionType PurpleAttentionType
+#else
+/* Different kinds of attention alerts. Not yet in libpurple, so define 
+ * our own structure here. */
+typedef struct _MsimAttentionType MsimAttentionType;
+
+/** A type of "attention" message (zap, nudge, buzz, etc. depending on the
+ * protocol) that can be sent and received. */
+struct _MsimAttentionType {
+	PurpleStoredImage *icon;
+	const gchar *description;		/**< Shown before sending. */
+	const gchar *incoming_description;	/**< Shown when sent. */
+	const gchar *outgoing_description;	/**< Shown when received. */
+};
+#endif
+
+/* Functions */
+gboolean msim_load(PurplePlugin *plugin);
+GList *msim_status_types(PurpleAccount *acct);
+
+const gchar *msim_list_icon(PurpleAccount *acct, PurpleBuddy *buddy);
+gboolean msim_send_raw(MsimSession *session, const gchar *msg);
+
+void msim_login(PurpleAccount *acct);
+int msim_send_im(PurpleConnection *gc, const gchar *who, const gchar *message, PurpleMessageFlags flags);
+unsigned int msim_send_typing(PurpleConnection *gc, const gchar *name, PurpleTypingState state);
+
+void msim_get_info(PurpleConnection *gc, const gchar *name);
+
+void msim_set_status(PurpleAccount *account, PurpleStatus *status);
+void msim_set_idle(PurpleConnection *gc, int time);
+
+void msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group);
+void msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group);
+
+gboolean msim_offline_message(const PurpleBuddy *buddy);
+
+void msim_close(PurpleConnection *gc);
+
+char *msim_status_text(PurpleBuddy *buddy);
+void msim_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full);
+GList *msim_actions(PurplePlugin *plugin, gpointer context);
+
+#ifdef MSIM_SELF_TEST
+void msim_test_all(void) __attribute__((__noreturn__));
+int msim_test_msg(void);
+int msim_test_escaping(void);
+#endif
+
+gboolean msim_send_bm(MsimSession *session, const gchar *who, const gchar *text, int type);
+
+
+void msim_unrecognized(MsimSession *session, MsimMessage *msg, gchar *note);
+guint msim_new_reply_callback(MsimSession *session, MSIM_USER_LOOKUP_CB cb, gpointer data);
+
+
+void init_plugin(PurplePlugin *plugin);
+
+#endif /* !_MYSPACE_MYSPACE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/persist.h	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,90 @@
+/* MySpaceIM Protocol Plugin, persist commands
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 _MYSPACE_PERSIST_H
+#define _MYSPACE_PERSIST_H
+
+/** Command codes */
+#define MSIM_CMD_GET               1
+#define MSIM_CMD_PUT               2
+#define MSIM_CMD_DELETE            3
+
+/** Command bit fields */
+#define MSIM_CMD_BIT_CODE          255        /*< Bits specifying command code */
+#define MSIM_CMD_BIT_REPLY         256        /**< 1=reply, 0=request */
+#define MSIM_CMD_BIT_ACTION        512        /**< 1=action, 0=information */
+#define MSIM_CMD_BIT_ERROR        1024        /**< 1=error, 0=normal */
+
+/** Macros to read cmd bitfield. */
+#define MSIM_CMD_GET_CODE(x)      (x & MSIM_CMD_BIT_CODE)
+#define MSIM_CMD_IS_REPLY(x)      (x & MSIM_CMD_BIT_REPLY)
+#define MSIM_CMD_IS_REQUEST(x)   !(x & MSIM_CMD_BIT_REPLY)
+#define MSIM_CMD_IS_ACTION(x)     (x & MSIM_CMD_BIT_ACTION)
+#define MSIM_CMD_IS_INFO(x)      !(x & MSIM_CMD_BIT_ACTION)
+#define MSIM_CMD_IS_ERROR(x)      (x & MSIM_CMD_BIT_ERROR)
+#define MSIM_CMD_IS_NORMAL(x)    !(x & MSIM_CMD_BIT_ERROR)
+
+/** Define a set of _DSN and _LID constants for a persistance request. */
+#define MSIM_PERSIST_DSN_LID(name,dsn,lid)             \
+    static const int name##_DSN = dsn;                 \
+    static const int name##_LID = lid;                        
+
+/* Can't do this, errors:
+ *     persist.h:51:3: error: '#' is not followed by a macro parameter
+ *  In file included from myspace.c:37:
+ *  persist.h:56: error: expected ')' before numeric constant
+ * So instead, I define const ints above.
+#define MSIM_PERSIST_DSN_LID(name,dsn,lid)             \
+	#define name##_DSN        dsn                  \
+	#define name##_LID        lid
+#endif
+*/
+
+/** Messages to Get information                dsn lid */
+MSIM_PERSIST_DSN_LID(MG_LIST_ALL_CONTACTS,         0, 1)
+MSIM_PERSIST_DSN_LID(MG_USER_INFO_BY_ID,           0, 2)
+MSIM_PERSIST_DSN_LID(MG_OWN_IM_INFO,               1, 4)
+MSIM_PERSIST_DSN_LID(MG_IM_INFO_BY_ID,             1, 17)
+MSIM_PERSIST_DSN_LID(MG_LIST_ALL_GROUPS,           2, 6)
+MSIM_PERSIST_DSN_LID(MG_MYSPACE_INFO_BY_ID,        4, 3)
+MSIM_PERSIST_DSN_LID(MG_OWN_MYSPACE_INFO,          4, 5)
+MSIM_PERSIST_DSN_LID(MG_MYSPACE_INFO_BY_STRING,    5, 7)
+MSIM_PERSIST_DSN_LID(MG_CHECK_MAIL,                7, 18)
+MSIM_PERSIST_DSN_LID(MG_WEB_CHALLENGE,            17, 26)
+MSIM_PERSIST_DSN_LID(MG_USER_SONG,                21, 28)
+MSIM_PERSIST_DSN_LID(MG_SERVER_INFO,             101, 20)
+
+/** Messages to Change/send information */
+MSIM_PERSIST_DSN_LID(MC_USER_PREFERENCES,          1, 10)
+MSIM_PERSIST_DSN_LID(MC_CONTACT_INFO,              0, 9)
+MSIM_PERSIST_DSN_LID(MC_IMPORT_ALL_FRIENDS,        14, 21)
+MSIM_PERSIST_DSN_LID(MC_INVITE,                   16, 25)
+
+/** Messages to Delete information */
+MSIM_PERSIST_DSN_LID(MD_DELETE_BUDDY,              0, 8)
+
+/** Error codes */
+#define MERR_PARSE                    1
+#define MERR_NOT_LOGGED_IN            2
+#define MERR_ANOTHER_LOGIN            6
+#define MERR_BAD_EMAIL                259
+#define MERR_BAD_PASSWORD             260
+#define MERR_BAD_UID_IN_PERSISTR      4352
+
+#endif /* !_MYSPACE_PERSIST_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/release.sh	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,48 @@
+#!/bin/bash
+# Created:20070618
+# By Jeff Connelly
+
+# Package a new msimprpl for release. Must be run with bash.
+
+VERSION=0.16
+make
+# Include 'myspace' directory in archive, so it can easily be unextracted
+# into ~/pidgin/libpurple/protocols at the correct location.
+# (if this command fails, run it manually).
+# This convenient command requires bash.
+cd ../../..
+tar -cf libpurple/protocols/msimprpl-$VERSION.tar libpurple/protocols/myspace/{CHANGES,ChangeLog,LICENSE,Makefile.*,*.c,*.h,README,release.sh,.deps/*} autogen.sh configure.ac
+cd libpurple/protocols/myspace
+gzip ../msimprpl-$VERSION.tar
+
+mv ~/pidgin/config.h ~/pidgin/config.h-
+make -f Makefile.mingw
+mv ~/pidgin/config.h- ~/pidgin/config.h
+cp ~/pidgin/win32-install-dir/plugins/libmyspace.dll .
+# Zip is more common with Win32 users. Just include a few files in this archive,
+# but (importantly) preserve the install directory structure!
+mkdir -p win32-archive/plugins
+cp libmyspace.dll win32-archive/plugins
+mkdir -p win32-archive/pixmaps/pidgin/protocols/{48,22,16}
+cp ~/pidgin/win32-install-dir/pixmaps/pidgin/protocols/48/myspace.png \
+                win32-archive/pixmaps/pidgin/protocols/48/
+cp ~/pidgin/win32-install-dir/pixmaps/pidgin/protocols/22/myspace.png \
+                win32-archive/pixmaps/pidgin/protocols/22/
+cp ~/pidgin/win32-install-dir/pixmaps/pidgin/protocols/16/myspace.png \
+                win32-archive/pixmaps/pidgin/protocols/16/
+mkdir -p win32-archive/pixmaps/pidgin/emotes/default
+cp ~/pidgin/win32-install-dir/pixmaps/pidgin/emotes/default/theme \
+        win32-archive/pixmaps/pidgin/emotes/default/theme
+# Emoticons in MySpaceIM but not Pidgin 2.1.0
+cp ~/pidgin/win32-install-dir/pixmaps/pidgin/emotes/default/{sinister,sidefrown,pirate,mohawk,messed,bulgy-eyes}.png \
+	win32-archive/pixmaps/pidgin/emotes/default/
+
+# Use DOS line endings and .txt file extension for convenience
+u2d < README > win32-archive/msimprpl-README.txt
+u2d < LICENSE > win32-archive/msimprpl-LICENSE.txt
+u2d < CHANGES > win32-archive/msimprpl-CHANGES.txt
+cd win32-archive
+zip -r ../../msimprpl-$VERSION-win32.zip *
+cd ..
+rm -rf win32-archive
+ls -l ../msimprpl-$VERSION*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/session.c	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,95 @@
+/* MySpaceIM Protocol Plugin, session
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 "myspace.h"
+
+/* Session methods */
+
+/**
+ * Create a new MSIM session.
+ *
+ * @param acct The account to create the session from.
+ *
+ * @return Pointer to a new session. Free with msim_session_destroy.
+ */
+MsimSession *
+msim_session_new(PurpleAccount *acct)
+{
+	MsimSession *session;
+
+	g_return_val_if_fail(acct != NULL, NULL);
+
+	session = g_new0(MsimSession, 1);
+
+	session->magic = MSIM_SESSION_STRUCT_MAGIC;
+	session->account = acct;
+	session->gc = purple_account_get_connection(acct);
+	session->sesskey = 0;
+	session->userid = 0;
+	session->username = NULL;
+	session->fd = -1;
+
+	/* TODO: Remove. */
+	session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, 
+			g_direct_equal, NULL, NULL);  /* do NOT free function pointers! (values) */
+	session->user_lookup_cb_data = g_hash_table_new_full(g_direct_hash, 
+			g_direct_equal, NULL, NULL);/* TODO: we don't know what the values are,
+											 they could be integers inside gpointers
+											 or strings, so I don't freed them.
+											 Figure this out, once free cache. */
+
+	/* Created in msim_process_server_info() */
+	session->server_info = NULL;
+
+	session->rxoff = 0;
+	session->rxbuf = g_new0(gchar, MSIM_READ_BUF_SIZE);
+	session->next_rid = 1;
+	session->last_comm = time(NULL);
+	session->inbox_status = 0;
+	
+	return session;
+}
+
+/**
+ * Free a session.
+ *
+ * @param session The session to destroy.
+ */
+void 
+msim_session_destroy(MsimSession *session)
+{
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+	
+	session->magic = -1;
+
+	g_free(session->rxbuf);
+	g_free(session->username);
+
+	/* TODO: Remove. */
+	g_hash_table_destroy(session->user_lookup_cb);
+	g_hash_table_destroy(session->user_lookup_cb_data);
+
+	if (session->server_info) {
+		msim_msg_free(session->server_info);
+	}
+	
+	g_free(session);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/session.h	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,57 @@
+/* MySpaceIM Protocol Plugin, session
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 _MYSPACE_SESSION_H
+#define _MYSPACE_SESSION_H
+
+/* Random number in every MsimSession, to ensure it is valid. */
+#define MSIM_SESSION_STRUCT_MAGIC       0xe4a6752b
+
+/* Everything needed to keep track of a session (proto_data field in PurpleConnection) */
+typedef struct _MsimSession
+{
+	guint magic;                        /**< MSIM_SESSION_STRUCT_MAGIC */
+	PurpleAccount *account;
+	PurpleConnection *gc;
+	guint sesskey;                      /**< Session key from server */
+	guint userid;                       /**< This user's numeric user ID */
+	gchar *username;                    /**< This user's unique username */
+	gint fd;                            /**< File descriptor to/from server */
+
+	/* TODO: Remove. */
+	GHashTable *user_lookup_cb;         /**< Username -> userid lookup callback */
+	GHashTable *user_lookup_cb_data;    /**< Username -> userid lookup callback data */
+
+	MsimMessage *server_info;           /**< Parameters from server */
+
+	gchar *rxbuf;                       /**< Receive buffer */
+	guint rxoff;                        /**< Receive buffer offset */
+	guint next_rid;                     /**< Next request/response ID */
+	time_t last_comm;                   /**< Time received last communication */
+	guint inbox_status;                 /**< Bit field of inbox notifications */
+} MsimSession;
+
+/* Check if an MsimSession is valid */
+#define MSIM_SESSION_VALID(s) (session != NULL && session->magic == MSIM_SESSION_STRUCT_MAGIC)
+
+
+MsimSession *msim_session_new(PurpleAccount *acct);
+void msim_session_destroy(MsimSession *session);
+
+#endif /* !_MYSPACE_SESSION_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/user.c	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,437 @@
+/* MySpaceIM Protocol Plugin, header file
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 "myspace.h"
+
+static void msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user);
+static gchar *msim_format_now_playing(gchar *band, gchar *song);
+static void msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text,
+		gsize len, const gchar *error_message);
+
+/** Format the "now playing" indicator, showing the artist and song.
+ * @return Return a new string (must be g_free()'d), or NULL.
+ */
+static gchar *
+msim_format_now_playing(gchar *band, gchar *song)
+{
+	if ((band && strlen(band)) || (song && strlen(song))) {
+		return g_strdup_printf("%s - %s",
+			(band && strlen(band)) ? band : "Unknown Artist",
+			(song && strlen(song)) ? song : "Unknown Song");
+	} else {
+		return NULL;
+	}
+}
+/** Get the MsimUser from a PurpleBuddy, creating it if needed. */
+MsimUser *
+msim_get_user_from_buddy(PurpleBuddy *buddy)
+{
+	MsimUser *user;
+
+	if (!buddy) {
+		return NULL;
+	}
+
+	if (!buddy->proto_data) {
+		/* No MsimUser for this buddy; make one. */
+
+		/* TODO: where is this freed? */
+		user = g_new0(MsimUser, 1);
+		user->buddy = buddy;
+		buddy->proto_data = (gpointer)user;
+	} 
+
+	user = (MsimUser *)(buddy->proto_data);
+
+	return user;
+}
+
+/** Find and return an MsimUser * representing a user on the buddy list, or NULL. */
+MsimUser *
+msim_find_user(MsimSession *session, const gchar *username)
+{
+	PurpleBuddy *buddy;
+	MsimUser *user;
+
+	buddy = purple_find_buddy(session->account, username);
+	if (!buddy) {
+		return NULL;
+	}
+
+	user = msim_get_user_from_buddy(buddy);
+
+	return user;
+}
+
+/** Append user information to a PurpleNotifyUserInfo, given an MsimUser. 
+ * Used by msim_tooltip_text() and msim_get_info_cb() to show a user's profile.
+ */
+void
+msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full)
+{
+	gchar *str;
+	guint uid;
+	guint cv;
+
+	/* Useful to identify the account the tooltip refers to. 
+	 *  Other prpls show this. */
+	if (user->username) {
+		purple_notify_user_info_add_pair(user_info, _("User"), user->username);
+	}
+
+	uid = purple_blist_node_get_int(&user->buddy->node, "UserID");
+
+	if (full) {
+		/* TODO: link to username, if available */
+		purple_notify_user_info_add_pair(user_info, _("Profile"),
+				g_strdup_printf("<a href=\"http://myspace.com/%d\">http://myspace.com/%d</a>",
+					uid, uid));
+	}
+
+
+	/* a/s/l...the vitals */
+	if (user->age) {
+		purple_notify_user_info_add_pair(user_info, _("Age"),
+				g_strdup_printf("%d", user->age));
+	}
+
+	if (user->gender && strlen(user->gender)) {
+		purple_notify_user_info_add_pair(user_info, _("Gender"), user->gender);
+	}
+
+	if (user->location && strlen(user->location)) {
+		purple_notify_user_info_add_pair(user_info, _("Location"), user->location);
+	}
+
+	/* Other information */
+	if (user->headline && strlen(user->headline)) {
+		purple_notify_user_info_add_pair(user_info, _("Headline"), user->headline);
+	}
+
+	str = msim_format_now_playing(user->band_name, user->song_name);
+	if (str && strlen(str)) {
+		purple_notify_user_info_add_pair(user_info, _("Song"), str);
+	}
+
+	/* Note: total friends only available if looked up by uid, not username. */
+	if (user->total_friends) {
+		purple_notify_user_info_add_pair(user_info, _("Total Friends"),
+			g_strdup_printf("%d", user->total_friends));
+	}
+
+	if (full) {
+		/* Client information */
+
+		str = user->client_info;
+		cv = user->client_cv;
+
+		if (str && cv != 0) {
+			purple_notify_user_info_add_pair(user_info, _("Client Version"),
+					g_strdup_printf("%s (build %d)", str, cv));
+		} else if (str) {
+			purple_notify_user_info_add_pair(user_info, _("Client Version"),
+					g_strdup(str));
+		} else if (cv) {
+			purple_notify_user_info_add_pair(user_info, _("Client Version"),
+					g_strdup_printf("Build %d", cv));
+		}
+	}
+}
+
+/** Store a field of information about a buddy. */
+void 
+msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user)
+{
+	if (g_str_equal(key_str, "UserID") || g_str_equal(key_str, "ContactID")) {
+		/* Save to buddy list, if it exists, for quick cached uid lookup with msim_uid2username_from_blist(). */
+		if (user->buddy)
+		{
+			purple_debug_info("msim", "associating uid %s with username %s\n", key_str, user->buddy->name);
+			purple_blist_node_set_int(&user->buddy->node, "UserID", atol(value_str));
+		}
+		/* Need to store in MsimUser, too? What if not on blist? */
+	} else if (g_str_equal(key_str, "Age")) {
+		user->age = atol(value_str);
+	} else if (g_str_equal(key_str, "Gender")) {
+		user->gender = g_strdup(value_str);
+	} else if (g_str_equal(key_str, "Location")) {
+		user->location = g_strdup(value_str);
+	} else if (g_str_equal(key_str, "TotalFriends")) {
+		user->total_friends = atol(value_str);
+	} else if (g_str_equal(key_str, "DisplayName")) {
+		user->display_name = g_strdup(value_str);
+	} else if (g_str_equal(key_str, "BandName")) {
+		user->band_name = g_strdup(value_str);
+	} else if (g_str_equal(key_str, "SongName")) {
+		user->song_name = g_strdup(value_str);
+	} else if (g_str_equal(key_str, "UserName") || g_str_equal(key_str, "IMName") || g_str_equal(key_str, "NickName")) {
+		/* Ignore because PurpleBuddy knows this already */
+		;
+	} else if (g_str_equal(key_str, "ImageURL") || g_str_equal(key_str, "AvatarURL")) {
+		const gchar *previous_url;
+
+		user->image_url = g_strdup(value_str);
+
+		/* Instead of showing 'no photo' picture, show nothing. */
+		if (g_str_equal(user->image_url, "http://x.myspace.com/images/no_pic.gif"))
+		{
+			purple_buddy_icons_set_for_user(user->buddy->account,
+				user->buddy->name,
+				NULL, 0, NULL);
+			return;
+		}
+	
+		/* TODO: use ETag for checksum */
+		previous_url = purple_buddy_icons_get_checksum_for_user(user->buddy);
+
+		/* Only download if URL changed */
+		if (!previous_url || !g_str_equal(previous_url, user->image_url)) {
+			purple_util_fetch_url(user->image_url, TRUE, NULL, TRUE, msim_downloaded_buddy_icon, (gpointer)user);
+		}
+	} else if (g_str_equal(key_str, "LastImageUpdated")) {
+		/* TODO: use somewhere */
+		user->last_image_updated = atol(value_str);
+	} else if (g_str_equal(key_str, "Headline")) {
+		user->headline = g_strdup(value_str);
+	} else {
+		/* TODO: other fields in MsimUser */
+		gchar *msg;
+
+		msg = g_strdup_printf("msim_store_user_info_each: unknown field %s=%s",
+				key_str, value_str);
+
+		msim_unrecognized(NULL, NULL, msg);
+
+		g_free(msg);
+	}
+}
+
+/** Save buddy information to the buddy list from a user info reply message.
+ *
+ * @param session
+ * @param msg The user information reply, with any amount of information.
+ * @param user The structure to save to, or NULL to save in PurpleBuddy->proto_data.
+ *
+ * Variable information is saved to the passed MsimUser structure. Permanent
+ * information (UserID) is stored in the blist node of the buddy list (and
+ * ends up in blist.xml, persisted to disk) if it exists.
+ *
+ * If the function has no buddy information, this function
+ * is a no-op (and returns FALSE).
+ *
+ */
+gboolean 
+msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user)
+{
+	gchar *username;
+	MsimMessage *body, *body_node;
+
+	g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE);
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	body = msim_msg_get_dictionary(msg, "body");
+	if (!body) {
+		return FALSE;
+	}
+
+	username = msim_msg_get_string(body, "UserName");
+
+	if (!username) {
+		purple_debug_info("msim", 
+			"msim_process_reply: not caching body, no UserName\n");
+		msim_msg_free(body);
+		g_free(username);
+		return FALSE;
+	}
+	
+	/* Null user = find and store in PurpleBuddy's proto_data */
+	if (!user) {
+		user = msim_find_user(session, username);
+		if (!user) {
+			msim_msg_free(body);
+			g_free(username);
+			return FALSE;
+		}
+	}
+
+	/* TODO: make looping over MsimMessage's easier. */
+	for (body_node = body; 
+		body_node != NULL; 
+		body_node = msim_msg_get_next_element_node(body_node))
+	{
+		const gchar *key_str;
+		gchar *value_str;
+		MsimMessageElement *elem;
+
+		elem = (MsimMessageElement *)body_node->data;
+		key_str = elem->name;
+
+		value_str = msim_msg_get_string_from_element(elem);
+		msim_store_user_info_each(key_str, value_str, user);
+		g_free(value_str);
+	}
+
+	if (msim_msg_get_integer(msg, "dsn") == MG_OWN_IM_INFO_DSN &&
+		msim_msg_get_integer(msg, "lid") == MG_OWN_IM_INFO_LID) {
+		/* TODO: do something with our own IM info, if we need it for some
+		 * specific purpose. Otherwise it is available on the buddy list,
+		 * if the user has themselves as their own buddy. 
+		 *
+		 * However, much of the info is already available in MsimSession,
+		 * stored in msim_we_are_logged_on(). */
+	} else if (msim_msg_get_integer(msg, "dsn") == MG_OWN_MYSPACE_INFO_DSN &&
+			msim_msg_get_integer(msg, "lid") == MG_OWN_MYSPACE_INFO_LID) {
+		/* TODO: same as above, but for MySpace info. */
+	}
+
+	msim_msg_free(body);
+
+	return TRUE;
+}
+
+/**
+ * Asynchronously lookup user information, calling callback when receive result.
+ *
+ * @param session
+ * @param user The user id, email address, or username. Not freed.
+ * @param cb Callback, called with user information when available.
+ * @param data An arbitray data pointer passed to the callback.
+ */
+/* TODO: change to not use callbacks */
+void 
+msim_lookup_user(MsimSession *session, const gchar *user, MSIM_USER_LOOKUP_CB cb, gpointer data)
+{
+	MsimMessage *body;
+	gchar *field_name;
+	guint rid, cmd, dsn, lid;
+
+	g_return_if_fail(MSIM_SESSION_VALID(session));
+	g_return_if_fail(user != NULL);
+	/* Callback can be null to not call anything, just lookup & store information. */
+	/*g_return_if_fail(cb != NULL);*/
+
+	purple_debug_info("msim", "msim_lookup_userid: "
+			"asynchronously looking up <%s>\n", user);
+
+	msim_msg_dump("msim_lookup_user: data=%s\n", (MsimMessage *)data);
+
+	/* Setup callback. Response will be associated with request using 'rid'. */
+	rid = msim_new_reply_callback(session, cb, data);
+
+	/* Send request */
+
+	cmd = MSIM_CMD_GET;
+
+	if (msim_is_userid(user)) {
+		field_name = "UserID";
+		dsn = MG_MYSPACE_INFO_BY_ID_DSN; 
+		lid = MG_MYSPACE_INFO_BY_ID_LID; 
+	} else if (msim_is_email(user)) {
+		field_name = "Email";
+		dsn = MG_MYSPACE_INFO_BY_STRING_DSN;
+		lid = MG_MYSPACE_INFO_BY_STRING_LID;
+	} else {
+		field_name = "UserName";
+		dsn = MG_MYSPACE_INFO_BY_STRING_DSN;
+		lid = MG_MYSPACE_INFO_BY_STRING_LID;
+	}
+
+	body = msim_msg_new(
+			field_name, MSIM_TYPE_STRING, g_strdup(user),
+			NULL);
+
+	g_return_if_fail(msim_send(session,
+			"persist", MSIM_TYPE_INTEGER, 1,
+			"sesskey", MSIM_TYPE_INTEGER, session->sesskey,
+			"cmd", MSIM_TYPE_INTEGER, 1,
+			"dsn", MSIM_TYPE_INTEGER, dsn,
+			"uid", MSIM_TYPE_INTEGER, session->userid,
+			"lid", MSIM_TYPE_INTEGER, lid,
+			"rid", MSIM_TYPE_INTEGER, rid,
+			"body", MSIM_TYPE_DICTIONARY, body,
+			NULL));
+} 
+
+
+/**
+ * Check if a string is a userid (all numeric).
+ *
+ * @param user The user id, email, or name.
+ *
+ * @return TRUE if is userid, FALSE if not.
+ */
+gboolean 
+msim_is_userid(const gchar *user)
+{
+	g_return_val_if_fail(user != NULL, FALSE);
+
+	return strspn(user, "0123456789") == strlen(user);
+}
+
+/**
+ * Check if a string is an email address (contains an @).
+ *
+ * @param user The user id, email, or name.
+ *
+ * @return TRUE if is an email, FALSE if not.
+ *
+ * This function is not intended to be used as a generic
+ * means of validating email addresses, but to distinguish
+ * between a user represented by an email address from
+ * other forms of identification.
+ */ 
+gboolean 
+msim_is_email(const gchar *user)
+{
+	g_return_val_if_fail(user != NULL, FALSE);
+
+	return strchr(user, '@') != NULL;
+}
+
+
+/** Callback for when a buddy icon finished being downloaded. */
+static void
+msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data,
+		gpointer user_data,
+		const gchar *url_text,
+		gsize len,
+		const gchar *error_message)
+{
+	MsimUser *user;
+
+	user = (MsimUser *)user_data;
+
+	purple_debug_info("msim_downloaded_buddy_icon",
+			"Downloaded %d bytes\n", len);
+
+	if (!url_text) {
+		purple_debug_info("msim_downloaded_buddy_icon",
+				"failed to download icon for %s",
+				user->buddy->name);
+		return;
+	}
+
+	purple_buddy_icons_set_for_user(user->buddy->account,
+			user->buddy->name,
+			g_memdup((gchar *)url_text, len), len, 
+			/* Use URL itself as buddy icon "checksum" (TODO: ETag) */
+			user->image_url);		/* checksum */
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/user.h	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,55 @@
+/* MySpaceIM Protocol Plugin, header file
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 _MYSPACE_USER_H
+#define _MYSPACE_USER_H
+
+/* Hold ephemeral information about buddies, for proto_data of PurpleBuddy. */
+/* GHashTable? */
+typedef struct _MsimUser
+{
+	PurpleBuddy *buddy;
+	guint client_cv;
+	gchar *client_info;
+	guint age;
+	gchar *gender;
+	gchar *location;
+	guint total_friends;
+	gchar *headline;
+	gchar *display_name;
+	/* Note: uid is in &buddy->node (set_blist_node_int), since it never changes */
+	gchar *username;
+	gchar *band_name, *song_name;
+	gchar *image_url;
+	guint last_image_updated;
+} MsimUser;
+
+/* Callback function pointer type for when a user's information is received, 
+ * initiated from a user lookup. */
+typedef void (*MSIM_USER_LOOKUP_CB)(MsimSession *session, MsimMessage *userinfo, gpointer data);
+
+MsimUser *msim_get_user_from_buddy(PurpleBuddy *buddy);
+MsimUser *msim_find_user(MsimSession *session, const gchar *username);
+void msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full);
+gboolean msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user);
+gboolean msim_is_userid(const gchar *user);
+gboolean msim_is_email(const gchar *user);
+void msim_lookup_user(MsimSession *session, const gchar *user, MSIM_USER_LOOKUP_CB cb, gpointer data);
+
+#endif /* !_MYSPACE_USER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/zap.c	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,265 @@
+/* MySpaceIM Protocol Plugin - zap support
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 "myspace.h"
+#include "zap.h"
+
+static gboolean msim_send_zap(MsimSession *session, const gchar *username, guint code);
+static void msim_send_zap_from_menu(PurpleBlistNode *node, gpointer zap_num_ptr);
+
+
+/** Get zap types. */
+GList *
+msim_attention_types(PurpleAccount *acct)
+{
+	static GList *types = NULL;
+	MsimAttentionType* attn;
+
+	if (!types) {
+#define _MSIM_ADD_NEW_ATTENTION(icn, nme, incoming, outgoing)              \
+		attn = g_new0(MsimAttentionType, 1);                       \
+		attn->icon_name = icn;                                     \
+		attn->name = nme;                                          \
+		attn->incoming_description = incoming;                     \
+		attn->outgoing_description = outgoing;                     \
+		types = g_list_append(types, attn);
+
+		/* TODO: icons for each zap */
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("zap"), _("zapped"), _("Zapping"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("whack"), _("whacked"), _("Whacking"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("torch"), _("torched"), _("Torching"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("smooch"), _("smooched"), _("Smooching"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("hug"), _("hugged"), _("Hugging"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("bslap"), _("bslapped"), _("Bslapping"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("goose"), _("goosed"), _("Goosing"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("hi-five"), _("hi-fived"), _("Hi-fiving"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("punk"), _("punk'd"), _("Punking"));
+		_MSIM_ADD_NEW_ATTENTION(NULL, _("raspberry"), _("raspberried"), _("Raspberry'ing"));
+	}
+
+	return types;
+}
+
+/** Send a zap */
+gboolean
+msim_send_attention(PurpleConnection *gc, const gchar *username, guint code)
+{
+	GList *types;
+	MsimSession *session;
+	MsimAttentionType *attn;
+	PurpleBuddy *buddy;
+
+	session = (MsimSession *)gc->proto_data;
+
+	/* Look for this attention type, by the code index given. */
+	types = msim_attention_types(gc->account);
+	attn = (MsimAttentionType *)g_list_nth_data(types, code);
+
+	if (!attn) {
+		purple_debug_info("msim_send_attention", "got invalid zap code %d\n", code);
+		return FALSE;
+	}
+
+	buddy = purple_find_buddy(session->account, username);
+	if (!buddy) {
+		return FALSE;
+	}
+
+	msim_send_zap(session, username, code);
+
+	return TRUE;
+}
+
+/** Send a zap to a user. */
+static gboolean
+msim_send_zap(MsimSession *session, const gchar *username, guint code)
+{
+	gchar *zap_string;
+	gboolean rc;
+#ifndef MSIM_USE_ATTENTION_API
+	GList *types;
+	MsimAttentionType *attn;
+	gchar *zap_description;
+#endif
+
+	g_return_val_if_fail(session != NULL, FALSE);
+	g_return_val_if_fail(username != NULL, FALSE);
+
+
+#ifdef MSIM_USE_ATTENTION_API
+	/* serv_send_attention(session->gc, username, code); */
+#else
+	types = msim_attention_types(session->account);
+
+	attn = g_list_nth_data(types, code);
+	if (!attn) {
+		return FALSE;
+	}
+
+
+	zap_description = g_strdup_printf("*** Attention: %s %s ***", attn->outgoing_description,
+			username);
+
+	serv_got_im(session->gc, username, zap_description,
+			PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_SYSTEM, time(NULL));
+
+	g_free(zap_description);
+#endif
+
+	/* Construct and send the actual zap command. */
+	zap_string = g_strdup_printf("!!!ZAP_SEND!!!=RTE_BTN_ZAPS_%d", code);
+
+	if (!msim_send_bm(session, username, zap_string, MSIM_BM_ACTION)) {
+		purple_debug_info("msim_send_zap_from_menu", "msim_send_bm failed: zapping %s with %s",
+				username, zap_string);
+		rc = FALSE;
+	} else {
+		rc = TRUE;
+	}
+	
+	g_free(zap_string);
+
+	return rc;
+
+}
+
+/** Zap someone. Callback from msim_blist_node_menu zap menu. */
+static void
+msim_send_zap_from_menu(PurpleBlistNode *node, gpointer zap_num_ptr)
+{
+	PurpleBuddy *buddy;
+	PurpleAccount *account;
+	PurpleConnection *gc;
+	MsimSession *session;
+	guint zap;
+
+	if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) {
+		/* Only know about buddies for now. */
+		return;
+	}
+
+	g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
+
+	buddy = (PurpleBuddy *)node;
+
+	/* Find the session */
+	account = buddy->account;
+	gc = purple_account_get_connection(account);
+	session = (MsimSession *)gc->proto_data;
+
+	zap = GPOINTER_TO_INT(zap_num_ptr);
+
+#ifdef MSIM_USE_ATTENTION_API
+	serv_send_attention(session->gc, buddy->name, zap);
+#else
+	g_return_if_fail(msim_send_zap(session, buddy->name, zap));
+#endif
+}
+
+/** Return menu, if any, for a buddy list node. */
+GList *
+msim_blist_node_menu(PurpleBlistNode *node)
+{
+	GList *menu, *zap_menu;
+	GList *types;
+	PurpleMenuAction *act;
+	/* Warning: hardcoded to match that in msim_attention_types. */
+	const gchar *zap_names[10];
+	guint i;
+
+	if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) {
+		/* Only know about buddies for now. */
+		return NULL;
+	}
+
+	/* Names from official client. */
+	types = msim_attention_types(NULL);
+	i = 0;
+	do
+	{
+		MsimAttentionType *attn;
+
+		attn = (MsimAttentionType *)types->data;
+		zap_names[i] = attn->name;
+		++i;
+	} while ((types = g_list_next(types)));
+
+	menu = zap_menu = NULL;
+
+	/* TODO: get rid of once is accessible directly in GUI */
+	for (i = 0; i < sizeof(zap_names) / sizeof(zap_names[0]); ++i) {
+		act = purple_menu_action_new(zap_names[i], PURPLE_CALLBACK(msim_send_zap_from_menu),
+				GUINT_TO_POINTER(i), NULL);
+		zap_menu = g_list_append(zap_menu, act);
+	}
+
+	act = purple_menu_action_new(_("Zap"), NULL, NULL, zap_menu);
+	menu = g_list_append(menu, act);
+
+	return menu;
+}
+
+/** Process an incoming zap. */
+gboolean
+msim_incoming_zap(MsimSession *session, MsimMessage *msg)
+{
+	gchar *msg_text, *username;
+	gint zap;
+#ifndef MSIM_USE_ATTENTION_API
+	const gchar *zap_past_tense[10];
+	gchar *zap_text;
+
+	zap_past_tense[0] = _("zapped");
+	zap_past_tense[1] = _("whacked");
+	zap_past_tense[2] = _("torched");
+	zap_past_tense[3] = _("smooched");
+	zap_past_tense[4] = _("hugged");
+	zap_past_tense[5] = _("bslapped");
+	zap_past_tense[6] = _("goosed");
+	zap_past_tense[7] = _("hi-fived");
+	zap_past_tense[8] = _("punk'd");
+	zap_past_tense[9] = _("raspberried");
+#endif
+
+	msg_text = msim_msg_get_string(msg, "msg");
+	username = msim_msg_get_string(msg, "_username");
+
+	g_return_val_if_fail(msg_text != NULL, FALSE);
+	g_return_val_if_fail(username != NULL, FALSE);
+
+	g_return_val_if_fail(sscanf(msg_text, "!!!ZAP_SEND!!!=RTE_BTN_ZAPS_%d", &zap) == 1, FALSE);
+
+	zap = CLAMP(zap, 0, 9);
+
+#ifdef MSIM_USE_ATTENTION_API
+	serv_got_attention(session->gc, username, zap);
+#else
+	zap_text = g_strdup_printf(_("*** You have been %s! ***"), zap_past_tense[zap]);
+	serv_got_im(session->gc, username, zap_text, 
+			PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_SYSTEM, time(NULL));
+	g_free(zap_text);
+#endif
+
+	g_free(msg_text);
+	g_free(username);
+
+	return TRUE;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/myspace/zap.h	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,28 @@
+/* MySpaceIM Protocol Plugin - zap support
+ *
+ * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
+ *
+ * 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 _MYSPACE_ZAP_H
+#define _MYSPACE_ZAP_H
+
+GList *msim_attention_types(PurpleAccount *acct);
+gboolean msim_send_attention(PurpleConnection *gc, const gchar *username, guint code);
+GList *msim_blist_node_menu(PurpleBlistNode *node);
+gboolean msim_incoming_zap(MsimSession *session, MsimMessage *msg);
+
+#endif /* !_MYSPACE_ZAP_H */
--- a/libpurple/protocols/oscar/oscar.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Tue Aug 28 01:14:08 2007 +0000
@@ -3529,6 +3529,7 @@
 	PurpleConnection *gc;
 	PurpleAccount *account;
 	PurpleStatus *status;
+	PurplePresence *presence;
 	const char *message, *itmsurl;
 	char *tmp;
 	va_list ap;
@@ -3572,7 +3573,8 @@
 	aim_srv_setextrainfo(od, FALSE, 0, TRUE, tmp, itmsurl);
 	g_free(tmp);
 
-	aim_srv_setidle(od, 0);
+	presence = purple_status_get_presence(status);
+	aim_srv_setidle(od, purple_presence_is_idle(presence) ? 0 : time(NULL) - purple_presence_get_idle_time(presence));
 
 	if (od->icq) {
 		aim_icq_reqofflinemsgs(od);
--- a/libpurple/protocols/qq/sys_msg.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/qq/sys_msg.c	Tue Aug 28 01:14:08 2007 +0000
@@ -166,7 +166,7 @@
 		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,
+				    _("Would you like to add him?"), 2,
 					purple_connection_get_account(gc), name, NULL,
 					g, 3,
 				    _("Cancel"), NULL,
--- a/libpurple/protocols/sametime/sametime.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/sametime/sametime.c	Tue Aug 28 01:14:08 2007 +0000
@@ -3183,13 +3183,12 @@
   PurpleConnection *gc;
   struct mwPurplePluginData *pd;
   struct mwAwareIdBlock t = { mwAware_USER, b->name, NULL };
-  const char *ret;
-
-  gc = b->account->gc;
-  pd = gc->proto_data;
-
-  ret = mwServiceAware_getText(pd->srvc_aware, &t);
-  
+  const char *ret = NULL;
+
+  if ((gc = purple_account_get_connection(b->account))
+      && (pd = gc->proto_data))
+    ret = mwServiceAware_getText(pd->srvc_aware, &t);
+
   return (ret && g_utf8_validate(ret, -1, NULL)) ? g_markup_escape_text(ret, -1): NULL;
 }
 
@@ -3242,17 +3241,17 @@
 
 static void mw_prpl_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) {
   PurpleConnection *gc;
-  struct mwPurplePluginData *pd;
+  struct mwPurplePluginData *pd = NULL;
   struct mwAwareIdBlock idb = { mwAware_USER, b->name, NULL };
 
-  const char *message;
+  const char *message = NULL;
   const char *status;
   char *tmp;
 
-  gc = b->account->gc;
-  pd = gc->proto_data;
-
-  message = mwServiceAware_getText(pd->srvc_aware, &idb);
+  if ((gc = purple_account_get_connection(b->account))
+      && (pd = gc->proto_data))
+     message = mwServiceAware_getText(pd->srvc_aware, &idb);
+
   status = status_text(b);
 
   if(message != NULL && g_utf8_validate(message, -1, NULL) && purple_utf8_strcasecmp(status, message)) {
@@ -3264,7 +3263,7 @@
 	purple_notify_user_info_add_pair(user_info, _("Status"), status);
   }
 
-  if(full) {
+  if(full && pd != NULL) {
     tmp = user_supports_text(pd->srvc_aware, b->name);
     if(tmp) {
 	  purple_notify_user_info_add_pair(user_info, _("Supports"), tmp);
--- a/libpurple/protocols/yahoo/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/yahoo/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -10,7 +10,7 @@
 	yahoochat.h \
 	yahoochat.c \
 	yahoo_aliases.c \
-	yahoo_alisaes.h \
+	yahoo_aliases.h \
 	yahoo_auth.c \
 	yahoo_auth.h \
 	yahoo_crypt.h \
--- a/libpurple/protocols/yahoo/yahoo.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Tue Aug 28 01:14:08 2007 +0000
@@ -238,14 +238,18 @@
 		case 8: /* how many online buddies we have */
 			break;
 		case 7: /* the current buddy */
-			if (name && f) /* update the previous buddy before changing the variables */
-				yahoo_update_status(gc, name, f);
-			name = pair->value;
-			if (name && g_utf8_validate(name, -1, NULL))
+			/* update the previous buddy before changing the variables */
+			if (f) {
+				if (message)
+					yahoo_friend_set_status_message(f, yahoo_string_decode(gc, message, unicode));
+				if (name)
+					yahoo_update_status(gc, name, f);
+			}
+			name = message = NULL;
+			f = NULL;
+			if (pair->value && g_utf8_validate(pair->value, -1, NULL)) {
+				name = pair->value;
 				f = yahoo_friend_find_or_new(gc, name);
-			else {
-				f = NULL;
-				name = NULL;
 			}
 			break;
 		case 10: /* state */
@@ -568,6 +572,11 @@
 				purple_debug_info("yahoo", "Setting protocol to %d\n", f->protocol);
 			}
 			break;
+		case 317: /* Stealth Setting */
+			if (f && (strtol(pair->value, NULL, 10) == 2)) {
+				f->presence = YAHOO_PRESENCE_PERM_OFFLINE;
+			}
+			break;
 		/* case 242: */ /* this seems related to 241 */
 			/* break; */
 		}
@@ -768,7 +777,13 @@
 			if (bud)
 				yahoo_update_status(gc, from, f);
 		}
+	} else if (!g_ascii_strncasecmp(msg, "WEBCAMINVITE", strlen("WEBCAMINVITE"))) {
+                PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, gc->account);
+		char *buf = g_strdup_printf(_("%s has sent you a webcam invite, which is not yet supported."), from);
+		purple_conversation_write(conv, NULL, buf, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, time(NULL));
+		g_free(buf);
 	}
+
 }
 
 
@@ -884,6 +899,8 @@
 			PurpleConversation *c;
 			char *username, *str;
 
+			str = NULL;
+
 			account = purple_connection_get_account(gc);
 			c = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, im->from);
 
@@ -892,10 +909,13 @@
 			else
 				username = g_markup_escape_text(im->from, -1);
 
+#ifdef YAHOO_USE_ATTENTION_API
+			serv_got_attention(gc, username, YAHOO_BUZZ);
+#else
 			str = g_strdup_printf(_("%s just sent you a Buzz!"), username);
 
 			purple_conversation_write(c, NULL, str, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, im->time);
-
+#endif
 			g_free(username);
 			g_free(str);
 			g_free(m);
@@ -964,7 +984,7 @@
 	yahoo_packet_hash(pkt, "ssiii", 1, add_req->id, 5, add_req->who, 241, add_req->protocol,
 	                  13, 1, 334, 0);
 	yahoo_packet_send_and_free(pkt, yd);
-	
+
 	g_free(add_req->id);
 	g_free(add_req->who);
 	g_free(add_req->msg);
@@ -976,19 +996,20 @@
 	struct yahoo_packet *pkt;
 	char *encoded_msg = NULL;
 	struct yahoo_data *yd = add_req->gc->proto_data;
-
-	if (msg)
+	PurpleAccount *account = purple_connection_get_account(add_req->gc);
+
+	if (msg && *msg)
 		encoded_msg = yahoo_string_encode(add_req->gc, msg, NULL);
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_REJECTCONTACT,
+	pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15,
 			YAHOO_STATUS_AVAILABLE, 0);
 
-	yahoo_packet_hash(pkt, "sss",
-			1, purple_normalize(add_req->gc->account,
-				purple_account_get_username(
-					purple_connection_get_account(
-						add_req->gc))),
-			7, add_req->who,
+	yahoo_packet_hash(pkt, "ssiiis",
+			1, purple_normalize(account, purple_account_get_username(account)),
+			5, add_req->who,
+			13, 2,
+			334, 0,
+			97, 1,
 			14, encoded_msg ? encoded_msg : "");
 
 	yahoo_packet_send_and_free(pkt, yd);
@@ -1018,51 +1039,129 @@
 			add_req);
 }
 
+static void yahoo_buddy_denied_our_add(PurpleConnection *gc, const char *who, const char *reason)
+{
+	char *notify_msg;
+	struct yahoo_data *yd = gc->proto_data;
+
+	if (who == NULL)
+		return;
+
+	if (reason != NULL) {
+		char *msg2 = yahoo_string_decode(gc, reason, FALSE);
+		notify_msg = g_strdup_printf(_("%s has (retroactively) denied your request to add them to your list for the following reason: %s."), who, msg2);
+		g_free(msg2);
+	} else
+		notify_msg = g_strdup_printf(_("%s has (retroactively) denied your request to add them to your list."), who);
+
+	purple_notify_info(gc, NULL, _("Add buddy rejected"), notify_msg);
+	g_free(notify_msg);
+
+	g_hash_table_remove(yd->friends, who);
+	purple_prpl_got_user_status(purple_connection_get_account(gc), who, "offline", NULL); /* FIXME: make this set not on list status instead */
+	/* TODO: Shouldn't we remove the buddy from our local list? */
+}
+
 static void yahoo_buddy_auth_req_15(PurpleConnection *gc, struct yahoo_packet *pkt) {
-	struct yahoo_add_request *add_req;
-	char *msg = NULL;
 	GSList *l = pkt->hash;
-
-	add_req = g_new0(struct yahoo_add_request, 1);
-	add_req->gc = gc;
-
-	while (l) {
-		struct yahoo_pair *pair = l->data;
-
-		switch (pair->key) {
-		case 5:
-			add_req->id = g_strdup(pair->value);
-			break;
-		case 4:
-			add_req->who = g_strdup(pair->value);
-			break;
-		case 241:
-			add_req->protocol = strtol(pair->value, NULL, 10);
-			break;
-		case 14:
-			msg = pair->value;
-			break;
+	const char *msg = NULL;
+
+	/* Buddy authorized/declined our addition */
+	if (pkt->status == 1) {
+		const char *who = NULL;
+		int response = 0;
+
+		while (l) {
+			struct yahoo_pair *pair = l->data;
+
+			switch (pair->key) {
+			case 4:
+				who = pair->value;
+				break;
+			case 13:
+				response = strtol(pair->value, NULL, 10);
+				break;
+			case 14:
+				msg = pair->value;
+				break;
+			}
+			l = l->next;
 		}
-		l = l->next;
+
+		if (response == 1) /* Authorized */
+			purple_debug_info("yahoo", "Received authorization from buddy '%s'.\n", who ? who : "(Unknown Buddy)");
+		else if (response == 2) { /* Declined */
+			purple_debug_info("yahoo", "Received authorization decline from buddy '%s'.\n", who ? who : "(Unknown Buddy)");
+			yahoo_buddy_denied_our_add(gc, who, msg);
+		} else
+			purple_debug_error("yahoo", "Received unknown authorization response of %d from buddy '%s'.\n", response, who ? who : "(Unknown Buddy)");
+
 	}
-
-	if (add_req->id) {
-		if (msg)
-			add_req->msg = yahoo_string_decode(gc, msg, FALSE);
-
-		/* DONE! this is almost exactly the same as what MSN does,
-		 * this should probably be moved to the core.
-		 */
-		 purple_account_request_authorization(purple_connection_get_account(gc), add_req->who, add_req->id,
-                                                    NULL, add_req->msg, purple_find_buddy(purple_connection_get_account(gc),add_req->who) != NULL,
+	/* Buddy requested authorization to add us. */
+	else if (pkt->status == 3) {
+		struct yahoo_add_request *add_req;
+		const char *firstname = NULL, *lastname = NULL;
+
+		add_req = g_new0(struct yahoo_add_request, 1);
+		add_req->gc = gc;
+
+		while (l) {
+			struct yahoo_pair *pair = l->data;
+
+			switch (pair->key) {
+			case 4:
+				add_req->who = g_strdup(pair->value);
+				break;
+			case 5:
+				add_req->id = g_strdup(pair->value);
+				break;
+			case 14:
+				msg = pair->value;
+				break;
+			case 216:
+				firstname = pair->value;
+				break;
+			case 241:
+				add_req->protocol = strtol(pair->value, NULL, 10);
+				break;
+			case 254:
+				lastname = pair->value;
+				break;
+
+			}
+			l = l->next;
+		}
+
+		if (add_req->id) {
+			char *alias = NULL;
+			if (msg)
+				add_req->msg = yahoo_string_decode(gc, msg, FALSE);
+
+			if (firstname && lastname)
+				alias = g_strdup_printf("%s %s", firstname, lastname);
+			else if (firstname)
+				alias = g_strdup(firstname);
+			else if (lastname)
+				alias = g_strdup(lastname);
+
+
+			/* DONE! this is almost exactly the same as what MSN does,
+			 * this should probably be moved to the core.
+			 */
+			 purple_account_request_authorization(purple_connection_get_account(gc), add_req->who, add_req->id,
+						    alias, add_req->msg, purple_find_buddy(purple_connection_get_account(gc),add_req->who) != NULL,
 						    yahoo_buddy_add_authorize_cb,
 						    yahoo_buddy_add_deny_reason_cb,
-                                                    add_req);
+						    add_req);
+			g_free(alias);
+		} else {
+			g_free(add_req->id);
+			g_free(add_req->who);
+			/*g_free(add_req->msg);*/
+			g_free(add_req);
+		}
 	} else {
-		g_free(add_req->id);
-		g_free(add_req->who);
-		/*g_free(add_req->msg);*/
-		g_free(add_req);
+		purple_debug_error("yahoo", "Received authorization of unknown status (%d).\n", pkt->status);
 	}
 }
 
@@ -1113,13 +1212,12 @@
 	}
 }
 
-static void yahoo_buddy_denied_our_add(PurpleConnection *gc, struct yahoo_packet *pkt)
+/* I have no idea if this every gets called in version 15 */
+static void yahoo_buddy_denied_our_add_old(PurpleConnection *gc, struct yahoo_packet *pkt)
 {
 	char *who = NULL;
 	char *msg = NULL;
 	GSList *l = pkt->hash;
-	GString *buf = NULL;
-	struct yahoo_data *yd = gc->proto_data;
 
 	while (l) {
 		struct yahoo_pair *pair = l->data;
@@ -1135,22 +1233,7 @@
 		l = l->next;
 	}
 
-	if (who) {
-		char *msg2;
-		buf = g_string_sized_new(0);
-		if (!msg) {
-			g_string_printf(buf, _("%s has (retroactively) denied your request to add them to your list."), who);
-		} else {
-			msg2 = yahoo_string_decode(gc, msg, FALSE);
-			g_string_printf(buf, _("%s has (retroactively) denied your request to add them to your list for the following reason: %s."), who, msg2);
-			g_free(msg2);
-		}
-		purple_notify_info(gc, NULL, _("Add buddy rejected"), buf->str);
-		g_string_free(buf, TRUE);
-		g_hash_table_remove(yd->friends, who);
-		purple_prpl_got_user_status(purple_connection_get_account(gc), who, "offline", NULL); /* FIXME: make this set not on list status instead */
-		/* TODO: Shouldn't we remove the buddy from our local list? */
-	}
+	yahoo_buddy_denied_our_add(gc, who, msg);
 }
 
 static void yahoo_process_contact(PurpleConnection *gc, struct yahoo_packet *pkt)
@@ -1163,7 +1246,7 @@
 		yahoo_buddy_added_us(gc, pkt);
 		break;
 	case 7:
-		yahoo_buddy_denied_our_add(gc, pkt);
+		yahoo_buddy_denied_our_add_old(gc, pkt);
 		break;
 	default:
 		break;
@@ -2265,7 +2348,7 @@
 		break;
 	case YAHOO_SERVICE_AUTH_REQ_15:
 		yahoo_buddy_auth_req_15(gc, pkt);
-		break;	       
+		break;
 	case YAHOO_SERVICE_ADDBUDDY:
 		yahoo_process_addbuddy(gc, pkt);
 		break;
@@ -2846,7 +2929,7 @@
 	purple_connection_set_display_name(gc, purple_account_get_username(account));
 
 	yd->fd = -1;
-	yd->txhandler = -1;
+	yd->txhandler = 0;
 	/* TODO: Is there a good grow size for the buffer? */
 	yd->txbuf = purple_circ_buffer_new(0);
 	yd->friends = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, yahoo_friend_free);
@@ -3723,10 +3806,10 @@
 	struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
 	struct yahoo_packet *pkt;
 	PurpleGroup *g;
-	char *group = NULL;
-	char *group2 = NULL;
+	const char *group = NULL;
+	char *group2;
 	YahooFriend *f;
-	
+
 	if (!yd->logged_in)
 		return;
 
@@ -3734,7 +3817,7 @@
 		return;
 
 	f = yahoo_friend_find(gc, purple_buddy_get_name(buddy));
-	
+
 	if (foo)
 		group = foo->name;
 	if (!group) {
@@ -3934,17 +4017,24 @@
 
 static PurpleCmdRet
 yahoopurple_cmd_buzz(PurpleConversation *c, const gchar *cmd, gchar **args, gchar **error, void *data) {
-
 	PurpleAccount *account = purple_conversation_get_account(c);
+#ifndef YAHOO_USE_ATTENTION_API
 	const char *username = purple_account_get_username(account);
+#endif
 
 	if (*args && args[0])
 		return PURPLE_CMD_RET_FAILED;
 
+#ifdef YAHOO_USE_ATTENTION_API
+	serv_send_attention(account->gc, c->name, YAHOO_BUZZ);
+#else
+
 	purple_debug(PURPLE_DEBUG_INFO, "yahoo",
 	           "Sending <ding> on account %s to buddy %s.\n", username, c->name);
 	purple_conv_im_send(PURPLE_CONV_IM(c), "<ding>");
 	purple_conversation_write(c, NULL, _("You have just sent a Buzz!"), PURPLE_MESSAGE_SYSTEM, time(NULL));
+#endif
+
 	return PURPLE_CMD_RET_OK;
 }
 
@@ -3994,6 +4084,42 @@
 {
 	return TRUE;
 }
+	
+gboolean yahoo_send_attention(PurpleConnection *gc, const char *username, guint type)
+{
+	PurpleConversation *c;
+
+	c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, 
+			username, gc->account);
+
+	g_return_val_if_fail(c != NULL, FALSE);
+
+	purple_debug(PURPLE_DEBUG_INFO, "yahoo",
+	           "Sending <ding> on account %s to buddy %s.\n", username, c->name);
+	/* TODO: find out how to send a <ding> without showing up as a blank line on
+	 * the conversation window. */
+	purple_conv_im_send(PURPLE_CONV_IM(c), "<ding>");
+
+	return TRUE;
+}
+
+GList *yahoo_attention_types(PurpleAccount *account)
+{
+	PurpleAttentionType *attn;
+	static GList *list = NULL;
+
+	if (!list) {
+		/* Yahoo only supports one attention command: the 'buzz'. */
+		/* This is index number YAHOO_BUZZ. */
+		attn = g_new0(PurpleAttentionType, 1);
+		attn->name = _("buzz");
+		attn->incoming_description = _("buzzed");
+		attn->outgoing_description = _("Buzzing");
+		list = g_list_append(list, attn);
+	} 
+
+	return list;
+}
 
 /************************** Plugin Initialization ****************************/
 static void
@@ -4203,9 +4329,15 @@
 	NULL, /* send_raw */
 	NULL, /* roomlist_room_serialize */
 
-	/* padding */
+#ifdef YAHOO_USE_ATTENTION_API
+	yahoo_send_attention,
+	yahoo_attention_types,
+#else
 	NULL,
 	NULL,
+#endif
+
+	/* padding */
 	NULL,
 	NULL
 };
--- a/libpurple/protocols/yahoo/yahoo.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.h	Tue Aug 28 01:14:08 2007 +0000
@@ -67,6 +67,13 @@
 #define YAHOO_STATUS_TYPE_INVISIBLE "invisible"
 #define YAHOO_STATUS_TYPE_MOBILE "mobile"
 
+#define YAHOO_USE_ATTENTION_API
+
+#ifdef YAHOO_USE_ATTENTION_API
+/* Index into attention types list. */
+#define YAHOO_BUZZ 0
+#endif
+
 enum yahoo_status {
 	YAHOO_STATUS_AVAILABLE = 0,
 	YAHOO_STATUS_BRB,
@@ -213,4 +220,7 @@
 gboolean yahoo_privacy_check
 	(PurpleConnection *gc, const char *who);
 
+gboolean yahoo_send_attention(PurpleConnection *gc, const char *username, guint type);
+GList *yahoo_attention_types(PurpleAccount *account);
+
 #endif /* _YAHOO_H_ */
--- a/libpurple/protocols/yahoo/yahoo_friend.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_friend.c	Tue Aug 28 01:14:08 2007 +0000
@@ -196,6 +196,8 @@
 	struct yahoo_data *yd = gc->proto_data;
 	struct yahoo_packet *pkt = NULL;
 	YahooFriend *f;
+	const char *thirtyone, *thirteen;
+	int service = -1;
 
 	if (!yd->logged_in)
 		return;
@@ -211,44 +213,48 @@
 	}
 
 	if (presence == YAHOO_PRESENCE_PERM_OFFLINE) {
-		pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_PERM,
-				YAHOO_STATUS_AVAILABLE, yd->session_id);
-
-		yahoo_packet_hash(pkt, "ssss",
-				1, purple_connection_get_display_name(gc),
-				31, "1", 13, "2", 7, name);
+		service = YAHOO_SERVICE_PRESENCE_PERM;
+		thirtyone = "1";
+		thirteen = "2";
 	} else if (presence == YAHOO_PRESENCE_DEFAULT) {
 		if (f->presence == YAHOO_PRESENCE_PERM_OFFLINE) {
-			pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_PERM,
-					YAHOO_STATUS_AVAILABLE, yd->session_id);
-
-			yahoo_packet_hash(pkt, "ssss",
-					1, purple_connection_get_display_name(gc),
-					31, "2", 13, "2", 7, name);
+			service = YAHOO_SERVICE_PRESENCE_PERM;
+			thirtyone = "2";
+			thirteen = "2";
 		} else if (yd->current_status == YAHOO_STATUS_INVISIBLE) {
-			pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_SESSION,
-					YAHOO_STATUS_AVAILABLE, yd->session_id);
-			yahoo_packet_hash(pkt, "ssss",
-				1, purple_connection_get_display_name(gc),
-				31, "2", 13, "1", 7, name);
+			service = YAHOO_SERVICE_PRESENCE_SESSION;
+			thirtyone = "2";
+			thirteen = "1";
 		}
 	} else if (presence == YAHOO_PRESENCE_ONLINE) {
 		if (f->presence == YAHOO_PRESENCE_PERM_OFFLINE) {
 			pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_PERM,
 					YAHOO_STATUS_AVAILABLE, yd->session_id);
-			yahoo_packet_hash(pkt, "ssss",
+			yahoo_packet_hash(pkt, "ssssssss",
 					1, purple_connection_get_display_name(gc),
-					31, "2", 13, "2", 7, name);
+					31, "2", 13, "2",
+					302, "319", 300, "319",
+					7, name,
+					301, "319", 303, "319");
 			yahoo_packet_send_and_free(pkt, yd);
 		}
 
-		pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_SESSION,
-				YAHOO_STATUS_AVAILABLE, yd->session_id);
-		yahoo_packet_hash(pkt, "ssss",
-				1, purple_connection_get_display_name(gc),
-				31, "1", 13, "1", 7, name);
+		service = YAHOO_SERVICE_PRESENCE_SESSION;
+		thirtyone = "1";
+		thirteen = "1";
 	}
 
-	if (pkt)
+	if (service > 0) {
+		pkt = yahoo_packet_new(service,
+				YAHOO_STATUS_AVAILABLE, yd->session_id);
+
+		yahoo_packet_hash(pkt, "ssssssss",
+				1, purple_connection_get_display_name(gc),
+				31, thirtyone, 13, thirteen,
+				302, "319", 300, "319",
+				7, name,
+				301, "319", 303, "319");
+
 		yahoo_packet_send_and_free(pkt, yd);
+	}
 }
--- a/libpurple/protocols/yahoo/yahoo_packet.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_packet.c	Tue Aug 28 01:14:08 2007 +0000
@@ -294,7 +294,7 @@
 
 	if (writelen == 0) {
 		purple_input_remove(yd->txhandler);
-		yd->txhandler = -1;
+		yd->txhandler = 0;
 		return;
 	}
 
@@ -355,7 +355,7 @@
 	len = yahoo_packet_build(pkt, 0, yd->wm, yd->jp, &data);
 
 	yahoo_packet_dump(data, len);
-	if (yd->txhandler == -1)
+	if (yd->txhandler == 0)
 		ret = write(yd->fd, data, len);
 	else {
 		ret = -1;
@@ -371,7 +371,7 @@
 	}
 
 	if (ret < len) {
-		if (yd->txhandler == -1)
+		if (yd->txhandler == 0)
 			yd->txhandler = purple_input_add(yd->fd, PURPLE_INPUT_WRITE,
 				yahoo_packet_send_can_write, yd);
 		purple_circ_buffer_append(yd->txbuf, data + ret, len - ret);
--- a/libpurple/protocols/yahoo/yahoochat.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoochat.c	Tue Aug 28 01:14:08 2007 +0000
@@ -62,8 +62,9 @@
 	}
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_CHATONLINE, YAHOO_STATUS_AVAILABLE,0);
-	yahoo_packet_hash(pkt, "sss", 1, purple_connection_get_display_name(gc),
-	                  109, purple_connection_get_display_name(gc), 6, "abcde");
+	yahoo_packet_hash(pkt, "ssss", 1, purple_connection_get_display_name(gc),
+	                  109, purple_connection_get_display_name(gc), 6, "abcde",
+	                  135, "ym8.1.0.415");
 	yahoo_packet_send_and_free(pkt, yd);
 }
 
@@ -155,7 +156,7 @@
 	if (members) {
 		g_hash_table_replace(components, g_strdup("members"), g_strdup(members->str));
 	}
-	if (!yahoo_privacy_check(gc, who) || 
+	if (!yahoo_privacy_check(gc, who) ||
 		(purple_account_get_bool(purple_connection_get_account(gc), "ignore_invites", FALSE))) {
 		purple_debug_info("yahoo",
 		    "Invite to conference %s from %s has been dropped.\n", room, who);
@@ -640,7 +641,7 @@
 	GList *w;
 
 	purple_debug_misc("yahoo", "leaving conference %s\n", room);
-	
+
 	pkt = yahoo_packet_new(YAHOO_SERVICE_CONFLOGOFF, YAHOO_STATUS_AVAILABLE, 0);
 
 	yahoo_packet_hash_str(pkt, 1, dn);
@@ -732,7 +733,7 @@
 			continue;
 		yahoo_packet_hash(pkt, "ss", 52, name, 53, name);
 	}
-	
+
 	yahoo_packet_send_and_free(pkt, yd);
 	g_free(msg2);
 }
--- a/libpurple/prpl.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/prpl.c	Tue Aug 28 01:14:08 2007 +0000
@@ -200,6 +200,7 @@
 			continue;
 
 		purple_status_set_active(status, FALSE);
+		purple_blist_update_buddy_status(buddy, status);
 	}
 
 	g_slist_free(list);
--- a/libpurple/prpl.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/prpl.h	Tue Aug 28 01:14:08 2007 +0000
@@ -30,6 +30,7 @@
 #define _PURPLE_PRPL_H_
 
 typedef struct _PurplePluginProtocolInfo PurplePluginProtocolInfo;
+typedef struct _PurpleAttentionType PurpleAttentionType;
 
 /**************************************************************************/
 /** @name Basic Protocol Information                                      */
@@ -91,6 +92,20 @@
 	gboolean secret;
 };
 
+struct _PurpleAttentionType
+{
+	const char *name;                  /**< Shown in GUI elements */
+	const char *incoming_description;  /**< Shown when sent */
+	const char *outgoing_description;  /**< Shown when receied */
+	const char *icon_name;             /**< Icon to display (optional) */
+
+	/* Reserved fields for future purposes */
+	gpointer _reserved1;
+	gpointer _reserved2;
+	gpointer _reserved3;
+	gpointer _reserved4;
+};
+
 /**
  * Protocol options
  *
@@ -332,8 +347,10 @@
 	/* room list serialize */
 	char *(*roomlist_room_serialize)(PurpleRoomlistRoom *room);
 
-	void (*_purple_reserved1)(void);
-	void (*_purple_reserved2)(void);
+	/* Attention API for sending & receiving zaps/nudges/buzzes etc. */
+	gboolean (*send_attention)(PurpleConnection *gc, const char *username, guint type);
+	GList *(*attention_types)(PurpleAccount *acct);
+
 	void (*_purple_reserved3)(void);
 	void (*_purple_reserved4)(void);
 };
--- a/libpurple/purple-url-handler	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/purple-url-handler	Tue Aug 28 01:14:08 2007 +0000
@@ -44,6 +44,12 @@
     else:
         return list
 
+def convert(value):
+    try:
+        return int(value)
+    except:
+        return value
+
 def findaccount(protocolname, accountname=""):
     # prefer connected accounts
     account = cpurple.PurpleAccountsFindConnected(accountname, protocolname)
@@ -84,6 +90,32 @@
     cpurple.PurpleBlistRequestAddBuddy(account, screenname, group, alias)
 
 
+def aim(uri):
+    protocol = "prpl-aim"
+    match = re.match(r"^aim:([^?]*)(\?(.*))", uri)
+    if not match:
+        print "Invalid aim URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    paramstring = match.group(3)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+    accountname = params.get("account", "")
+    screenname = params.get("screenname", "")
+
+    account = findaccount(protocol, accountname)
+
+    if command.lower() == "goim":
+        goim(account, screenname, params.get("message"))
+    elif command.lower() == "gochat":
+        gochat(account, params)
+    elif command.lower() == "addbuddy":
+        addbuddy(account, screenname, params.get("group", ""))
+
 def gg(uri):
     protocol = "prpl-gg"
     match = re.match(r"^gg:(.*)", uri)
@@ -95,6 +127,32 @@
     account = findaccount(protocol)
     goim(account, screenname)
 
+def icq(uri):
+    protocol = "prpl-icq"
+    match = re.match(r"^icq:([^?]*)(\?(.*))", uri)
+    if not match:
+        print "Invalid icq URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    paramstring = match.group(3)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+    accountname = params.get("account", "")
+    screenname = params.get("screenname", "")
+
+    account = findaccount(protocol, accountname)
+
+    if command.lower() == "goim":
+        goim(account, screenname, params.get("message"))
+    elif command.lower() == "gochat":
+        gochat(account, params)
+    elif command.lower() == "addbuddy":
+        addbuddy(account, screenname, params.get("group", ""))
+
 def irc(uri):
     protocol = "prpl-irc"
     match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri)
@@ -131,6 +189,34 @@
                 channel = "#" + channel
             gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg"))
 
+def msnim(uri):
+    protocol = "prpl-msn"
+    match = re.match(r"^msnim:([^?]*)(\?(.*))", uri)
+    if not match:
+        print "Invalid msnim URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    paramstring = match.group(3)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+    screenname = params.get("contact", "")
+
+    account = findaccount(protocol)
+
+    if command.lower() == "chat":
+        goim(account, screenname)
+    elif command.lower() == "add":
+        addbuddy(account, screenname)
+
+def myim(uri):
+	protocol = "prpl-myspace"
+	print "TODO: send uri: ", uri
+	assert False, "Not implemented"
+
 def sip(uri):
     protocol = "prpl-simple"
     match = re.match(r"^sip:(.*)", uri)
@@ -182,6 +268,32 @@
     else:
         goim(account, screenname)
 
+def ymsgr(uri):
+    protocol = "prpl-yahoo"
+    match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri)
+    if not match:
+        print "Invalid ymsgr URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    screenname = urllib.unquote_plus(match.group(3))
+    paramstring = match.group(5)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+
+    account = findaccount(protocol)
+
+    if command.lower() == "sendim":
+        goim(account, screenname, params.get("m"))
+    elif command.lower() == "chat":
+        gochat(account, {"room": screenname})
+    elif command.lower() == "addfriend":
+        addbuddy(account, screenname)
+
+
 def main(argv=sys.argv):
     if len(argv) != 2:
         print "Usage: %s URI" % argv[0]
@@ -192,16 +304,26 @@
     type = uri.split(":")[0]
 
     try:
-        if type == "gg":
+        if type == "aim":
+            aim(uri)
+        elif type == "gg":
             gg(uri)
+        elif type == "icq":
+            icq(uri)
         elif type == "irc":
             irc(uri)
+        elif type == "msnim":
+            msnim(uri)
+        elif type == "myim":
+            myim(uri)
         elif type == "sip":
             sip(uri)
         elif type == "xmpp":
             xmpp(uri)
+        elif type == "ymsgr":
+            ymsgr(uri)
         else:
-            cpurple.PurpleGotProtocolHandlerUri(uri)
+            print "Unknown protocol: %s" % type
     except dbus.dbus_bindings.DBusException:
         print "ERROR: Is there a libpurple-powered client (e.g. Pidgin or Finch) running?"
 
--- a/libpurple/request.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/request.c	Tue Aug 28 01:14:08 2007 +0000
@@ -1172,7 +1172,7 @@
 
 void *
 purple_request_choice(void *handle, const char *title, const char *primary,
-					const char *secondary, unsigned int default_value,
+					const char *secondary, int default_value,
 					const char *ok_text, GCallback ok_cb,
 					const char *cancel_text, GCallback cancel_cb,
 					PurpleAccount *account, const char *who, PurpleConversation *conv,
@@ -1197,7 +1197,7 @@
 void *
 purple_request_choice_varg(void *handle, const char *title,
 			 const char *primary, const char *secondary,
-			 unsigned int default_value,
+			 int default_value,
 			 const char *ok_text, GCallback ok_cb,
 			 const char *cancel_text, GCallback cancel_cb,
 			 PurpleAccount *account, const char *who, PurpleConversation *conv,
@@ -1233,7 +1233,7 @@
 
 void *
 purple_request_action(void *handle, const char *title, const char *primary,
-					const char *secondary, unsigned int default_action,
+					const char *secondary, int default_action,
 					PurpleAccount *account, const char *who, PurpleConversation *conv,
 					void *user_data, size_t action_count, ...)
 {
@@ -1254,7 +1254,7 @@
 void *
 purple_request_action_varg(void *handle, const char *title,
 						 const char *primary, const char *secondary,
-						 unsigned int default_action,
+						 int default_action,
 						 PurpleAccount *account, const char *who, PurpleConversation *conv,
 						  void *user_data, size_t action_count, va_list actions)
 {
--- a/libpurple/request.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/request.h	Tue Aug 28 01:14:08 2007 +0000
@@ -190,13 +190,13 @@
 						   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 *secondary, 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,
+							const char *secondary, int default_action,
 							PurpleAccount *account, const char *who, PurpleConversation *conv,
 							void *user_data, size_t action_count,
 							va_list actions);
@@ -1215,7 +1215,7 @@
  * @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 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.
@@ -1224,7 +1224,7 @@
  */
 void *purple_request_choice(void *handle, const char *title,
 						  const char *primary, const char *secondary,
-						  unsigned int default_value,
+						  int default_value,
 						  const char *ok_text, GCallback ok_cb,
 						  const char *cancel_text, GCallback cancel_cb,
 						  PurpleAccount *account, const char *who, PurpleConversation *conv,
@@ -1246,7 +1246,7 @@
  * @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 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.
@@ -1255,7 +1255,7 @@
  */
 void *purple_request_choice_varg(void *handle, const char *title,
 							   const char *primary, const char *secondary,
-							   unsigned int default_value,
+							   int default_value,
 							   const char *ok_text, GCallback ok_cb,
 							   const char *cancel_text, GCallback cancel_cb,
 							   PurpleAccount *account, const char *who, PurpleConversation *conv,
@@ -1275,7 +1275,7 @@
  * @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 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
@@ -1290,7 +1290,7 @@
  */
 void *purple_request_action(void *handle, const char *title,
 						  const char *primary, const char *secondary,
-						  unsigned int default_action,
+						  int default_action,
 						  PurpleAccount *account, const char *who, PurpleConversation *conv,
 						  void *user_data, size_t action_count, ...);
 
@@ -1308,7 +1308,7 @@
  * @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 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.
@@ -1317,7 +1317,7 @@
  */
 void *purple_request_action_varg(void *handle, const char *title,
 							   const char *primary, const char *secondary,
-							   unsigned int default_action,
+							   int default_action,
 							   PurpleAccount *account, const char *who, PurpleConversation *conv,
 							   void *user_data, size_t action_count,
 							   va_list actions);
@@ -1338,7 +1338,7 @@
  * @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 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.
@@ -1411,7 +1411,7 @@
  * @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 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.
@@ -1435,7 +1435,7 @@
  * @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 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.
--- a/libpurple/server.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/server.c	Tue Aug 28 01:14:08 2007 +0000
@@ -242,6 +242,107 @@
 	}
 }
 
+PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code)
+{
+	PurplePlugin *prpl;
+	PurpleAttentionType* attn;
+	GList *(*get_attention_types)(PurpleAccount *);
+
+	g_return_val_if_fail(account != NULL, NULL);
+
+	prpl = purple_find_prpl(purple_account_get_protocol_id(account));
+
+	/* Lookup the attention type in the protocol's attention_types list, if any. */
+	get_attention_types = PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->attention_types;
+	if (get_attention_types) {
+		GList *attention_types;
+
+		attention_types = get_attention_types(account);
+		attn = (PurpleAttentionType *)g_list_nth_data(attention_types, type_code);
+	} else {
+		attn = NULL;
+	}
+
+	return attn;
+}
+
+void
+serv_send_attention(PurpleConnection *gc, const char *who, guint type_code)
+{
+	PurpleAttentionType *attn;
+	PurpleMessageFlags flags;
+	PurplePlugin *prpl;
+	gboolean (*send_attention)(PurpleConnection *, const char *, guint);
+	
+	gchar *description;
+	time_t mtime;
+
+	g_return_if_fail(gc != NULL);
+	g_return_if_fail(who != NULL);
+
+	prpl = purple_find_prpl(purple_account_get_protocol_id(gc->account));
+	send_attention = PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->send_attention;
+	g_return_if_fail(send_attention != NULL);
+
+	mtime = time(NULL);
+
+	attn = purple_get_attention_type_from_code(gc->account, type_code);
+
+	if (attn && attn->outgoing_description) {
+		description = g_strdup_printf(_("Attention! %s %s."), attn->outgoing_description, who);
+	} else {
+		description = g_strdup(_("Attention!"));
+	}
+	
+	flags = PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_NOTIFY | PURPLE_MESSAGE_SYSTEM;
+
+	purple_debug_info("server", "serv_send_attention: sending '%s' to %s\n",
+			description, who);
+
+	if (!send_attention(gc, who, type_code))
+		return;
+
+	/* TODO: icons, sound, shaking... same as serv_got_attention(). */
+	serv_got_im(gc, who, description, flags, mtime);
+
+	g_free(description);
+}
+
+void
+serv_got_attention(PurpleConnection *gc, const char *who, guint type_code)
+{
+	PurpleMessageFlags flags;
+	PurpleAttentionType *attn;
+	gchar *description;
+	time_t mtime;
+
+	mtime = time(NULL);
+
+	attn = purple_get_attention_type_from_code(gc->account, type_code);
+
+	/* PURPLE_MESSAGE_NOTIFY is for attention messages. */
+	flags = PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NOTIFY | PURPLE_MESSAGE_RECV;
+
+	/* TODO: if (attn->icon_name) is non-null, use it to lookup an emoticon and display
+	 * it next to the attention command. And if it is null, display a generic icon. */
+
+	if (attn && attn->incoming_description) {
+		description = g_strdup_printf(_("Attention! You have been %s."), attn->incoming_description);
+	} else {
+		description = g_strdup(_("Attention!"));
+	}
+
+	purple_debug_info("server", "serv_got_attention: got '%s' from %s\n",
+			description, who);
+
+	serv_got_im(gc, who, description, flags, mtime);
+	
+	/* TODO: sounds (depending on PurpleAttentionType), shaking, etc. */
+
+	g_free(description);
+}
+
+
 /*
  * Move a buddy from one group to another on server.
  *
--- a/libpurple/server.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/server.h	Tue Aug 28 01:14:08 2007 +0000
@@ -53,6 +53,35 @@
 
 void serv_move_buddy(PurpleBuddy *, PurpleGroup *, PurpleGroup *);
 int  serv_send_im(PurpleConnection *, const char *, const char *, PurpleMessageFlags flags);
+
+/** Get information about an account's attention commands, from the prpl. 
+ * 
+ * @return The attention command numbered 'code' from the prpl's attention_types, or NULL.
+ */
+PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code);
+
+/** Send an attention request message.
+ *
+ * @param gc The connection to send the message on.
+ * @param who Whose attention to request.
+ * @param type An index into the prpl's attention_types list determining the type
+ * 	of the attention request command to send. 0 if prpl only defines one
+ * 	(for example, Yahoo and MSN), but some protocols define more (MySpaceIM).
+ *
+ * Note that you can't send arbitrary PurpleAttentionType's, because there is
+ * only a fixed set of attention commands.
+ */
+void serv_send_attention(PurpleConnection *gc, const char *who, guint type_code);
+
+/** Process an incoming attention message. 
+ *
+ * @param gc The connection that received the attention message.
+ * @param who Who requested your attention.
+ * @param type An index into the prpl's attention_types list determining the type
+ * 	of the attention request command to send. 
+ */
+void serv_got_attention(PurpleConnection *gc, const char *who, guint type_code);
+
 void serv_get_info(PurpleConnection *, const char *);
 void serv_set_info(PurpleConnection *, const char *);
 
@@ -68,6 +97,7 @@
 void serv_alias_buddy(PurpleBuddy *);
 void serv_got_alias(PurpleConnection *gc, const char *who, const char *alias);
 
+
 /**
  * Receive a typing message from a remote user.  Either PURPLE_TYPING
  * or PURPLE_TYPED.  If the user has stopped typing then use
--- a/libpurple/util.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/util.c	Tue Aug 28 01:14:08 2007 +0000
@@ -1374,7 +1374,7 @@
 								g_string_free(cdata, TRUE);
 								cdata = NULL;
 							}
-							
+
 						}
 						if(tags == tag)
 							break;
@@ -1425,7 +1425,7 @@
 				ALLOW_TAG("strong");
 				ALLOW_TAG("ul");
 
-				
+
 				/* we skip <HR> because it's not legal in XHTML-IM.  However,
 				 * we still want to send something sensible, so we put a
 				 * linebreak in its place. <BR> also needs special handling
@@ -2539,7 +2539,7 @@
  * people's settings if there is a problem writing the new values.
  */
 gboolean
-purple_util_write_data_to_file(const char *filename, const char *data, size_t size)
+purple_util_write_data_to_file(const char *filename, const char *data, gssize size)
 {
 	const char *user_dir = purple_user_dir();
 	gchar *filename_full;
@@ -4323,7 +4323,7 @@
 	}
 }
 
-gboolean purple_message_meify(char *message, size_t len)
+gboolean purple_message_meify(char *message, gssize len)
 {
 	char *c;
 	gboolean inside_html = FALSE;
--- a/libpurple/util.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/util.h	Tue Aug 28 01:14:08 2007 +0000
@@ -1133,7 +1133,7 @@
  * @return TRUE if it starts with "/me ", and it has been removed, otherwise
  *         FALSE
  */
-gboolean purple_message_meify(char *message, size_t len);
+gboolean purple_message_meify(char *message, gssize len);
 
 /**
  * Removes the underscore characters from a string used identify the mnemonic
--- a/libpurple/win32/global.mak	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/win32/global.mak	Tue Aug 28 01:14:08 2007 +0000
@@ -11,7 +11,7 @@
 # Locations of our various dependencies
 WIN32_DEV_TOP ?= $(PIDGIN_TREE_TOP)/../win32-dev
 ASPELL_TOP ?= $(WIN32_DEV_TOP)/aspell-dev-0-50-3-3
-GTKSPELL_TOP ?= $(WIN32_DEV_TOP)/gtkspell-2.0.6
+GTKSPELL_TOP ?= $(WIN32_DEV_TOP)/gtkspell-2.0.11
 GTK_TOP ?= $(WIN32_DEV_TOP)/gtk_2_0
 GTK_BIN ?= $(GTK_TOP)/bin
 BONJOUR_TOP ?= $(WIN32_DEV_TOP)/Bonjour_SDK
--- a/libpurple/xmlnode.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/libpurple/xmlnode.c	Tue Aug 28 01:14:08 2007 +0000
@@ -272,6 +272,8 @@
 	if(NULL != node->parent) {
 		if(node->parent->child == node) {
 			node->parent->child = node->next;
+			if (node->parent->lastchild == node)
+				node->parent->lastchild = node->next;
 		} else {
 			xmlnode *prev = node->parent->child;
 			while(prev && prev->next != node) {
@@ -279,6 +281,8 @@
 			}
 			if(prev) {
 				prev->next = node->next;
+				if (node->parent->lastchild == node)
+					node->parent->lastchild = prev;
 			}
 		}
 	}
--- a/pidgin/gtkaccount.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkaccount.c	Tue Aug 28 01:14:08 2007 +0000
@@ -272,7 +272,8 @@
 	add_user_options(dialog,     dialog->top_vbox);
 	add_protocol_options(dialog, dialog->bottom_vbox);
 
-	if (!dialog->prpl_info || !dialog->prpl_info->register_user) {
+	if (!dialog->prpl_info || !dialog->prpl_info->register_user || 
+	    g_object_get_data(G_OBJECT(item), "fake")) {
 		gtk_widget_hide(dialog->register_button);
 	} else {
 		if (dialog->prpl_info != NULL &&
@@ -1394,7 +1395,9 @@
 		purple_signal_emit(pidgin_account_get_handle(), "account-modified", account);
 
 	/* If this is a new account, then sign on! */
-	if (new && !dialog->registering) {
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->register_button))) {
+		purple_account_register(account);
+	} else if (new) {
 		const PurpleSavedStatus *saved_status;
 
 		saved_status = purple_savedstatus_get_current();
@@ -1410,19 +1413,6 @@
 	return account;
 }
 
-static void
-register_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog)
-{
-	PurpleAccount *account;
-
-	dialog->registering = TRUE;
-
-	account = ok_account_prefs_cb(NULL, dialog);
-
-	purple_account_register(account);
-}
-
-
 static const GtkTargetEntry dnd_targets[] = {
 	{"text/plain", 0, 0},
 	{"text/uri-list", 0, 1},
@@ -1501,6 +1491,18 @@
 	add_login_options(dialog, vbox);
 	add_user_options(dialog, vbox);
 
+	button = gtk_check_button_new_with_label(_("Create this new account on the server"));
+	gtk_box_pack_start(GTK_BOX(main_vbox), button, FALSE, FALSE, 0);
+	gtk_widget_show(button);
+	dialog->register_button = button;
+	if (dialog->account == NULL)
+		gtk_widget_set_sensitive(button, FALSE);
+
+	if (!dialog->prpl_info || !dialog->prpl_info->register_user)
+		gtk_widget_hide(button);
+
+
+
 	/* Setup the page with 'Advanced'. */
 	dialog->bottom_vbox = dbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
 	gtk_container_set_border_width(GTK_CONTAINER(dbox), PIDGIN_HIG_BORDER);
@@ -1519,22 +1521,6 @@
 	gtk_box_pack_end(GTK_BOX(main_vbox), bbox, FALSE, TRUE, 0);
 	gtk_widget_show(bbox);
 
-	/* Register button */
-	button = gtk_button_new_with_label(_("Register"));
-	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
-	gtk_widget_show(button);
-
-	g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(register_account_prefs_cb), dialog);
-
-	dialog->register_button = button;
-
-	if (dialog->account == NULL)
-		gtk_widget_set_sensitive(button, FALSE);
-
-	if (!dialog->prpl_info || !dialog->prpl_info->register_user)
-		gtk_widget_hide(button);
-
 	/* Cancel button */
 	button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
 	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
--- a/pidgin/gtkblist.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkblist.c	Tue Aug 28 01:14:08 2007 +0000
@@ -1539,6 +1539,12 @@
 	pidgin_clear_cursor(gtkblist->window);
 }
 
+static void pidgin_blist_show_protocol_icons_cb(gpointer data, guint action, GtkWidget *item)
+{
+	purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons",
+			      gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item)));
+}
+
 static void pidgin_blist_show_empty_groups_cb(gpointer data, guint action, GtkWidget *item)
 {
 	pidgin_set_cursor(gtkblist->window, GDK_WATCH);
@@ -2529,7 +2535,8 @@
 	GValue val;
 	struct _pidgin_blist_node *gtknode;
 
-	if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y, &path, NULL, NULL, NULL))
+	if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), 
+		&path, NULL, NULL, NULL))
 		return FALSE;
 	gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
 	val.g_type = 0;
@@ -2586,7 +2593,8 @@
 	PurpleBlistNode *node;
 	GValue val;
 
-	if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y, &path, NULL, NULL, NULL))
+	if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), 
+		&path, NULL, NULL, NULL))
 		return FALSE;
 	gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
 	val.g_type = 0;
@@ -2854,10 +2862,12 @@
 	{ N_("/Buddies/Get User _Info..."), "<CTL>I", pidgin_dialogs_info, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO },
 	{ N_("/Buddies/View User _Log..."), "<CTL>L", pidgin_dialogs_log, 0, "<Item>", NULL },
 	{ "/Buddies/sep1", NULL, NULL, 0, "<Separator>", NULL },
-	{ N_("/Buddies/Show _Offline Buddies"), NULL, pidgin_blist_edit_mode_cb, 1, "<CheckItem>", NULL },
-	{ N_("/Buddies/Show _Empty Groups"), NULL, pidgin_blist_show_empty_groups_cb, 1, "<CheckItem>", NULL },
-	{ N_("/Buddies/Show Buddy _Details"), NULL, pidgin_blist_buddy_details_cb, 1, "<CheckItem>", NULL },
-	{ N_("/Buddies/Show Idle _Times"), NULL, pidgin_blist_show_idle_time_cb, 1, "<CheckItem>", NULL },
+	{ N_("/Buddies/Show"), NULL, NULL, 0, "<Branch>", NULL},
+	{ N_("/Buddies/Show/Show _Offline Buddies"), NULL, pidgin_blist_edit_mode_cb, 1, "<CheckItem>", NULL },
+	{ N_("/Buddies/Show/Show _Empty Groups"), NULL, pidgin_blist_show_empty_groups_cb, 1, "<CheckItem>", NULL },
+	{ N_("/Buddies/Show/Show Buddy _Details"), NULL, pidgin_blist_buddy_details_cb, 1, "<CheckItem>", NULL },
+	{ N_("/Buddies/Show/Show Idle _Times"), NULL, pidgin_blist_show_idle_time_cb, 1, "<CheckItem>", NULL },
+	{ N_("/Buddies/Show/Show _Protocol Icons"), NULL, pidgin_blist_show_protocol_icons_cb, 1, "<CheckItem>", NULL },
 	{ N_("/Buddies/_Sort Buddies"), NULL, NULL, 0, "<Branch>", NULL },
 	{ "/Buddies/sep2", NULL, NULL, 0, "<Separator>", NULL },
 	{ N_("/Buddies/_Add Buddy..."), "<CTL>B", pidgin_blist_add_buddy_cb, 0, "<StockItem>", GTK_STOCK_ADD },
@@ -3143,10 +3153,11 @@
 			return ret;
 		}
 
-		if (((struct _pidgin_blist_node*)(node->parent->ui_data))->contact_expanded)
+		if (((struct _pidgin_blist_node*)(node->parent->ui_data))->contact_expanded) {
+			if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"))
+				return NULL;
 			return pidgin_create_prpl_icon(((PurpleBuddy*)node)->account, PIDGIN_PRPL_ICON_SMALL);
-	} else if(PURPLE_BLIST_NODE_IS_CHAT(node)) {
-		return pidgin_create_prpl_icon(((PurpleChat*)node)->account, PIDGIN_PRPL_ICON_SMALL);
+		}
 	} else {
 		return NULL;
 	}
@@ -4405,7 +4416,10 @@
 						 G_TYPE_BOOLEAN,  /* Contact expander */
 						 G_TYPE_BOOLEAN,  /* Contact expander visible */
 						 GDK_TYPE_PIXBUF, /* Emblem */
-						 G_TYPE_BOOLEAN); /* Emblem visible */
+						 G_TYPE_BOOLEAN,  /* Emblem visible */
+						 GDK_TYPE_PIXBUF, /* Protocol icon */
+						 G_TYPE_BOOLEAN   /* Protocol visible */
+						);
 
 	gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel));
 
@@ -4520,6 +4534,17 @@
 							  "visible", EMBLEM_VISIBLE_COLUMN, NULL);
 
 	rend = gtk_cell_renderer_pixbuf_new();
+	gtk_tree_view_column_pack_start(column, rend, FALSE);	
+	gtk_tree_view_column_set_attributes(column, rend,
+					   "pixbuf", PROTOCOL_ICON_COLUMN,
+					   "visible", PROTOCOL_ICON_VISIBLE_COLUMN,
+#if GTK_CHECK_VERSION(2,6,0)
+					   "cell-background-gdk", BGCOLOR_COLUMN,
+#endif
+					  NULL);
+	g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL);
+
+	rend = gtk_cell_renderer_pixbuf_new();
 	g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL);
 	gtk_tree_view_column_pack_start(column, rend, FALSE);
 	gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN,
@@ -4565,21 +4590,24 @@
 	/* set the Show Offline Buddies option. must be done
 	 * after the treeview or faceprint gets mad. -Robot101
 	 */
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Offline Buddies"))),
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Offline Buddies"))),
 			purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_offline_buddies"));
 
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Empty Groups"))),
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Empty Groups"))),
 			purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups"));
 
 	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Tools/Mute Sounds"))),
 			purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/sound/mute"));
 
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Buddy Details"))),
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Buddy Details"))),
 			purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"));
 
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Idle Times"))),
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Idle Times"))),
 			purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time"));
 
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Protocol Icons"))),
+			purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"));
+
 	if(!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"), "none"))
 		gtk_widget_set_sensitive(gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Mute Sounds")), FALSE);
 
@@ -4609,6 +4637,8 @@
 			_prefs_change_redo_list, NULL);
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/blist/show_offline_buddies",
 			_prefs_change_redo_list, NULL);
+	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/blist/show_protocol_icons",
+			_prefs_change_redo_list, NULL);
 
 	/* sorting */
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/blist/sort_type",
@@ -5040,6 +5070,8 @@
 			   BUDDY_ICON_VISIBLE_COLUMN, biglist,
 			   EMBLEM_COLUMN, emblem,
 			   EMBLEM_VISIBLE_COLUMN, emblem,
+			   PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(buddy->account, PIDGIN_PRPL_ICON_SMALL),
+			   PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"),
 			   BGCOLOR_COLUMN, NULL,
 			   CONTACT_EXPANDER_COLUMN, NULL,
 			   CONTACT_EXPANDER_VISIBLE_COLUMN, expanded,
@@ -5200,6 +5232,8 @@
 				BUDDY_ICON_VISIBLE_COLUMN,  purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"),
 			        EMBLEM_COLUMN, emblem,
 				EMBLEM_VISIBLE_COLUMN, emblem != NULL,
+		 	        PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(chat->account, PIDGIN_PRPL_ICON_SMALL),
+				PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"),
 				NAME_COLUMN, mark,
 				GROUP_EXPANDER_VISIBLE_COLUMN, FALSE,
 				-1);
@@ -6093,6 +6127,7 @@
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups", FALSE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time", TRUE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_offline_buddies", FALSE);
+	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons", FALSE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", FALSE);
 	purple_prefs_add_string(PIDGIN_PREFS_ROOT "/blist/sort_type", "alphabetical");
--- a/pidgin/gtkblist.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkblist.h	Tue Aug 28 01:14:08 2007 +0000
@@ -43,6 +43,8 @@
 	CONTACT_EXPANDER_VISIBLE_COLUMN,
 	EMBLEM_COLUMN,
 	EMBLEM_VISIBLE_COLUMN,
+	PROTOCOL_ICON_COLUMN,
+	PROTOCOL_ICON_VISIBLE_COLUMN,
 	BLIST_COLUMNS
 
 };
--- a/pidgin/gtkconv.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkconv.c	Tue Aug 28 01:14:08 2007 +0000
@@ -86,6 +86,7 @@
 	CONV_ICON_COLUMN,
 	CONV_TEXT_COLUMN,
 	CONV_EMBLEM_COLUMN,
+	CONV_PROTOCOL_ICON_COLUMN,
 	CONV_NUM_COLUMNS
 } PidginInfopaneColumns;
 
@@ -100,36 +101,6 @@
 
 #define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue)))
 
-#if 0
-/* These colors come from the default GNOME palette */
-static GdkColor nick_colors[] = {
-	{0, 47616, 46336, 43776},       /* Basic 3D Medium */
-	{0, 32768, 32000, 29696},       /* Basic 3D Dark */
-	{0, 22016, 20992, 18432},       /* 3D Shadow */
-	{0, 33536, 42496, 32512},       /* Green Medium */
-	{0, 23808, 29952, 21760},       /* Green Dark */
-	{0, 17408, 22016, 12800},       /* Green Shadow */
-	{0, 57344, 46592, 44800},       /* Red Hilight */
-	{0, 49408, 26112, 23040},       /* Red Medium */
-	{0, 34816, 17920, 12544},       /* Red Dark */
-	{0, 49408, 14336,  8704},       /* Red Shadow */
-	{0, 34816, 32512, 41728},       /* Purple Medium */
-	{0, 25088, 23296, 33024},       /* Purple Dark */
-	{0, 18688, 16384, 26112},       /* Purple Shadow */
-	{0, 40192, 47104, 53760},       /* Blue Hilight */
-	{0, 29952, 36864, 44544},       /* Blue Medium */
-	{0, 57344, 49920, 40448},       /* Face Skin Medium */
-	{0, 45824, 37120, 26880},       /* Face skin Dark */
-	{0, 33280, 26112, 18176},       /* Face Skin Shadow */
-	{0, 57088, 16896,  7680},       /* Accent Red */
-	{0, 39168,     0,     0},       /* Accent Red Dark */
-	{0, 17920, 40960, 17920},       /* Accent Green */
-	{0,  9728, 50944,  9728}        /* Accent Green Dark */
-};
-
-#define NUM_NICK_COLORS (sizeof(nick_colors) / sizeof(*nick_colors))
-#endif
-
 /* From http://www.w3.org/TR/AERT#color-contrast */
 #define MIN_BRIGHTNESS_CONTRAST 75
 #define MIN_COLOR_CONTRAST 200
@@ -2301,7 +2272,7 @@
         const char *name = NULL;
         GdkPixbuf *status = NULL;
         PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
-	const char *icon_size = small_icon ? "pidgin-icon-size-tango-microscopic" : PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL;
+	const char *icon_size = small_icon ? PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC : PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL;
         g_return_val_if_fail(conv != NULL, NULL);
 
         account = purple_conversation_get_account(conv);
@@ -2391,6 +2362,12 @@
 			&(gtkconv->infopane_iter),
 			CONV_EMBLEM_COLUMN, emblem, -1);
 
+	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons")) {
+		gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model),
+			&(gtkconv->infopane_iter),
+			CONV_PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(gtkconv->active_conv->account, PIDGIN_PRPL_ICON_SMALL), -1);
+	}
+
 	/* XXX seanegan Why do I have to do this? */
 	gtk_widget_queue_draw(gtkconv->infopane);
 
@@ -4537,7 +4514,7 @@
 			G_CALLBACK(pidgin_conv_leave_cb), gtkconv);
 
 	gtkconv->infopane = gtk_cell_view_new();
-	gtkconv->infopane_model = gtk_list_store_new(CONV_NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, GDK_TYPE_PIXBUF);
+	gtkconv->infopane_model = gtk_list_store_new(CONV_NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF);
 	gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), 
 				GTK_TREE_MODEL(gtkconv->infopane_model));
 	gtk_list_store_append(gtkconv->infopane_model, &(gtkconv->infopane_iter));
@@ -4562,6 +4539,12 @@
 	g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
 #endif
 
+
+	rend = gtk_cell_renderer_pixbuf_new();
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE);
+	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_PROTOCOL_ICON_COLUMN, NULL);
+	g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL);
+
 	rend = gtk_cell_renderer_pixbuf_new();
 	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE);
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_EMBLEM_COLUMN, NULL);
@@ -6918,6 +6901,17 @@
 }
 
 static void
+show_protocol_icons_pref_cb(const char *name, PurplePrefType type,
+						gconstpointer value, gpointer data)
+{
+	GList *l;
+	for (l = purple_get_conversations(); l != NULL; l = l->next) {
+		PurpleConversation *conv = l->data;
+		update_tab_icon(conv);
+	}
+}
+
+static void
 conv_placement_usetabs_cb(const char *name, PurplePrefType type,
 						  gconstpointer value, gpointer data)
 {
@@ -7258,6 +7252,8 @@
 								animate_buddy_icons_pref_cb, NULL);
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons",
 								show_buddy_icons_pref_cb, NULL);
+	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_protocol_icons",
+								show_protocol_icons_pref_cb, NULL);
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/hide_new",
                                 hide_new_pref_cb, NULL);
 
@@ -8736,7 +8732,7 @@
 		angle = 270;
 
 #if GTK_CHECK_VERSION(2,6,0)
-	if (!angle && pidgin_conv_window_get_gtkconv_count(win) > 1) {
+	if (!angle) {
 		g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_END,  NULL);
 		gtk_label_set_width_chars(GTK_LABEL(gtkconv->tab_label), 4);
 	} else {
@@ -8801,14 +8797,15 @@
 	}
 
 	gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, 
-					   !tabs_side && !angle && pidgin_conv_window_get_gtkconv_count(win) > 1, 
+					   !tabs_side && !angle, 
 					   TRUE, GTK_PACK_START);
 
 	if (pidgin_conv_window_get_gtkconv_count(win) == 1) 
 		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook),
-                                           !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons") ||  
+					   purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs") &&
+                                           (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons") ||  
                                            purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == GTK_POS_LEFT ||
-                                           purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == GTK_POS_RIGHT);
+                                           purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == GTK_POS_RIGHT));
 
 	/* show the widgets */
 /*	gtk_widget_show(gtkconv->icon); */
--- a/pidgin/gtkdialogs.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkdialogs.c	Tue Aug 28 01:14:08 2007 +0000
@@ -86,6 +86,7 @@
 	{"Luke 'LSchiere' Schierer",	N_("support"), "lschiere@users.sf.net"},
 	{"Megan 'Cae' Schneider",       N_("support/QA"), NULL},
 	{"Evan Schoenberg",		N_("developer"), NULL},
+	{"Kevin 'SimGuy' Stange",	N_("developer & webmaster"),	NULL},
 	{"Stu 'nosnilmot' Tomlinson",	N_("developer"), NULL},
 	{"Nathan 'faceprint' Walp",		N_("developer"), NULL},
 	{NULL, NULL, NULL}
@@ -95,7 +96,9 @@
 static struct developer patch_writers[] = {
 	{"John 'rekkanoryo' Bailey",	NULL,	NULL},
 	{"Peter 'Bleeter' Lawler",      NULL,   NULL},
-	{"Kevin 'SimGuy' Stange",		NULL,	NULL},
+        {"Dennis 'EvilDennisR' Ristuccia",	N_("Senior Contributor/QA"),	NULL},
+	{"Peter 'Fmoo' Ruibal",		NULL,	NULL},
+	{"Gabriel 'Nix' Schulhof", 	NULL, 	NULL},
 	{NULL, NULL, NULL}
 };
 
@@ -381,7 +384,7 @@
 		  "libpurple which is capable of connecting to "
 		  "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, "
 		  "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, "
-		  "Gadu-Gadu, and QQ all at once.  "
+		  "MySpaceIM, Gadu-Gadu, and QQ all at once.  "
 		  "It is written using GTK+.<BR><BR>"
 		  "You may modify and redistribute the program under "
 		  "the terms of the GPL (version 2 or later).  A copy of the GPL is "
--- a/pidgin/gtkimhtmltoolbar.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Tue Aug 28 01:14:08 2007 +0000
@@ -70,6 +70,14 @@
 }
 
 static void
+do_strikethrough(GtkWidget *strikethrough, GtkIMHtmlToolbar *toolbar)
+{
+	g_return_if_fail(toolbar != NULL);
+	gtk_imhtml_toggle_strike(GTK_IMHTML(toolbar->imhtml));
+	gtk_widget_grab_focus(toolbar->imhtml);
+}
+
+static void
 do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar)
 {
 	g_return_if_fail(toolbar != NULL);
@@ -433,6 +441,17 @@
 	gtk_widget_grab_focus(toolbar->imhtml);
 }
 
+static void insert_hr_cb(GtkWidget *widget, GtkIMHtmlToolbar *toolbar)
+{
+        GtkTextIter iter;
+        GtkTextMark *ins;
+	GtkIMHtmlScalable *hr;
+
+        ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)));
+        gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), &iter, ins);
+	hr = gtk_imhtml_hr_new();
+	gtk_imhtml_hr_add_to(hr, GTK_IMHTML(toolbar->imhtml), &iter);
+}
 
 static void
 do_insert_image_cb(GtkWidget *widget, int response, GtkIMHtmlToolbar *toolbar)
@@ -1027,6 +1046,13 @@
 			 G_CALLBACK(do_underline), toolbar);
 	toolbar->underline = button;
 
+
+	/* Strikethrough */
+	button = pidgin_pixbuf_toolbar_button_from_stock(GTK_STOCK_STRIKETHROUGH);
+	g_signal_connect(G_OBJECT(button), "clicked",
+			G_CALLBACK(do_strikethrough), toolbar);
+	toolbar->strikethrough = button;
+
 	/* Increase font size */
 	button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_TEXT_LARGER);
 	g_signal_connect(G_OBJECT(button), "clicked",
@@ -1124,6 +1150,7 @@
 		{_("<b>_Bold</b>"), &toolbar->bold, TRUE},
 		{_("<i>_Italic</i>"), &toolbar->italic, TRUE},
 		{_("<u>_Underline</u>"), &toolbar->underline, TRUE},
+		{_("<span strikethrough='true'>Strikethrough</span>"), &toolbar->strikethrough, TRUE},
 		{_("<span size='larger'>_Larger</span>"), &toolbar->larger_size, TRUE},
 #if 0
 		{_("_Normal"), &toolbar->normal_size, TRUE},
@@ -1230,6 +1257,11 @@
 	g_signal_connect(G_OBJECT(toolbar->link), "notify::sensitive",
 			G_CALLBACK(button_sensitiveness_changed), menuitem);
 
+	menuitem = gtk_menu_item_new_with_mnemonic(_("_Horizontal rule"));
+	g_signal_connect(G_OBJECT(menuitem), "activate"	, G_CALLBACK(insert_hr_cb), toolbar);
+	gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem);
+	toolbar->insert_hr = menuitem;	
+
 	g_signal_connect_swapped(G_OBJECT(insert_button), "button-press-event", G_CALLBACK(gtk_widget_activate), insert_button);
 	g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu);
 	g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button);
--- a/pidgin/gtkimhtmltoolbar.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkimhtmltoolbar.h	Tue Aug 28 01:14:08 2007 +0000
@@ -74,6 +74,8 @@
 	GtkWidget *image_dialog;
 
 	char *sml;
+	GtkWidget *strikethrough;
+	GtkWidget *insert_hr;
 };
 
 struct _GtkIMHtmlToolbarClass {
--- a/pidgin/gtknotify.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtknotify.c	Tue Aug 28 01:14:08 2007 +0000
@@ -589,16 +589,16 @@
 	char label_text[2048];
 	char *linked_text, *primary_esc, *secondary_esc;
 
-	window = pidgin_create_window(title, PIDGIN_HIG_BORDER, NULL, TRUE);
-	gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+	window = gtk_dialog_new();
+	gtk_window_set_title(GTK_WINDOW(window), title);
+	gtk_container_set_border_width(GTK_CONTAINER(window), PIDGIN_HIG_BORDER);
+	gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
 					 G_CALLBACK(formatted_close_cb), NULL);
 
 	/* Setup the main vbox */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
-	gtk_container_add(GTK_CONTAINER(window), vbox);
-	gtk_widget_show(vbox);
+	vbox = GTK_DIALOG(window)->vbox;
 
 	/* Setup the descriptive label */
 	primary_esc = g_markup_escape_text(primary, -1);
@@ -630,9 +630,7 @@
 	gtk_widget_show(frame);
 
 	/* Add the Close button. */
-	button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
-	gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
-	gtk_widget_show(button);
+	button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
 	gtk_widget_grab_focus(button);
 
 	g_signal_connect_swapped(G_OBJECT(button), "clicked",
@@ -708,7 +706,6 @@
 	guint i;
 
 	GtkWidget *vbox;
-	GtkWidget *button_area;
 	GtkWidget *label;
 	GtkWidget *sw;
 	PidginNotifySearchResultsData *data;
@@ -723,16 +720,16 @@
 	data->results = results;
 
 	/* Create the window */
-	window = pidgin_create_window(title ? title :_("Search Results"), PIDGIN_HIG_BORDER, NULL, TRUE);
-	gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+	window = gtk_dialog_new();
+	gtk_window_set_title(GTK_WINDOW(window), title ? title :_("Search Results"));
+	gtk_container_set_border_width(GTK_CONTAINER(window), PIDGIN_HIG_BORDER);
+	gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
 
 	g_signal_connect_swapped(G_OBJECT(window), "delete_event",
 							 G_CALLBACK(searchresults_close_cb), data);
 
 	/* Setup the main vbox */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
-	gtk_container_add(GTK_CONTAINER(window), vbox);
-	gtk_widget_show(vbox);
+	vbox = GTK_DIALOG(window)->vbox;
 
 	/* Setup the descriptive label */
 	primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL;
@@ -796,13 +793,6 @@
 				renderer, "text", i, NULL);
 	}
 
-	/* Setup the button area */
-	button_area = gtk_hbutton_box_new();
-	gtk_box_pack_start(GTK_BOX(vbox), button_area, FALSE, FALSE, 0);
-	gtk_button_box_set_layout(GTK_BUTTON_BOX(button_area), GTK_BUTTONBOX_END);
-	gtk_box_set_spacing(GTK_BOX(button_area), PIDGIN_HIG_BORDER);
-	gtk_widget_show(button_area);
-
 	for (i = 0; i < g_list_length(results->buttons); i++) {
 		PurpleNotifySearchButton *b = g_list_nth_data(results->buttons, i);
 		GtkWidget *button = NULL;
@@ -815,22 +805,22 @@
 				}
 				break;
 			case PURPLE_NOTIFY_BUTTON_CONTINUE:
-				button = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD);
+				button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_GO_FORWARD, GTK_RESPONSE_NONE);
 				break;
 			case PURPLE_NOTIFY_BUTTON_ADD:
-				button = gtk_button_new_from_stock(GTK_STOCK_ADD);
+				button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_ADD, GTK_RESPONSE_NONE);
 				break;
 			case PURPLE_NOTIFY_BUTTON_INFO:
-				button = gtk_button_new_from_stock(PIDGIN_STOCK_TOOLBAR_USER_INFO);
+				button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_TOOLBAR_USER_INFO, GTK_RESPONSE_NONE);
 				break;
 			case PURPLE_NOTIFY_BUTTON_IM:
-				button = gtk_button_new_from_stock(PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW);
+				button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, GTK_RESPONSE_NONE);
 				break;
 			case PURPLE_NOTIFY_BUTTON_JOIN:
-				button = gtk_button_new_from_stock(PIDGIN_STOCK_CHAT);
+				button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_CHAT, GTK_RESPONSE_NONE);
 				break;
 			case PURPLE_NOTIFY_BUTTON_INVITE:
-				button = gtk_button_new_from_stock(PIDGIN_STOCK_INVITE);
+				button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_INVITE, GTK_RESPONSE_NONE);
 				break;
 			default:
 				purple_debug_warning("gtknotify", "Incorrect button type: %d\n", b->type);
@@ -838,9 +828,6 @@
 		if (button != NULL) {
 			PidginNotifySearchResultsButtonData *bd;
 
-			gtk_box_pack_start(GTK_BOX(button_area), button, FALSE, FALSE, 0);
-			gtk_widget_show(button);
-
 			bd = g_new0(PidginNotifySearchResultsButtonData, 1);
 			bd->button = b;
 			bd->data = data;
@@ -852,9 +839,7 @@
 	}
 
 	/* Add the Close button */
-	close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
-	gtk_box_pack_start(GTK_BOX(button_area), close_button, FALSE, FALSE, 0);
-	gtk_widget_show(close_button);
+	close_button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
 
 	g_signal_connect_swapped(G_OBJECT(close_button), "clicked",
 	                         G_CALLBACK(searchresults_close_cb), data);
--- a/pidgin/gtkpounce.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkpounce.c	Tue Aug 28 01:14:08 2007 +0000
@@ -467,7 +467,6 @@
 	PidginPounceDialog *dialog;
 	GtkWidget *window;
 	GtkWidget *label;
-	GtkWidget *bbox;
 	GtkWidget *vbox1, *vbox2;
 	GtkWidget *hbox;
 	GtkWidget *button;
@@ -513,17 +512,16 @@
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
 	/* Create the window. */
-	dialog->window = window = pidgin_create_window((cur_pounce == NULL ? _("New Buddy Pounce") : _("Edit Buddy Pounce")),
-		PIDGIN_HIG_BORDER, "buddy_pounce", FALSE) ;
-	gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+	dialog->window = window = gtk_dialog_new();
+	gtk_window_set_title(GTK_WINDOW(window), (cur_pounce == NULL ? _("New Buddy Pounce") : _("Edit Buddy Pounce")));
+	gtk_window_set_role(GTK_WINDOW(window), "buddy_pounce");
+	gtk_container_set_border_width(GTK_CONTAINER(dialog->window), PIDGIN_HIG_BORDER);
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
 					 G_CALLBACK(delete_win_cb), dialog);
 
 	/* Create the parent vbox for everything. */
-	vbox1 = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
-	gtk_container_add(GTK_CONTAINER(window), vbox1);
-	gtk_widget_show(vbox1);
+	vbox1 = GTK_DIALOG(window)->vbox;
 
 	/* Create the vbox that will contain all the prefs stuff. */
 	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
@@ -808,26 +806,13 @@
 	gtk_widget_show(dialog->on_away);
 	gtk_widget_show(dialog->save_pounce);
 
-	/* Now the button box! */
-	bbox = gtk_hbutton_box_new();
-	gtk_box_set_spacing(GTK_BOX(bbox), PIDGIN_HIG_BOX_SPACE);
-	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
-	gtk_box_pack_end(GTK_BOX(vbox1), bbox, FALSE, FALSE, 0);
-	gtk_widget_show(bbox);
-
 	/* Cancel button */
-	button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
-	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
-	gtk_widget_show(button);
-
+	button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
 	g_signal_connect(G_OBJECT(button), "clicked",
 					 G_CALLBACK(cancel_cb), dialog);
 
 	/* Save button */
-	dialog->save_button = button = gtk_button_new_from_stock(GTK_STOCK_SAVE);
-	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
-	gtk_widget_show(button);
-
+	dialog->save_button = button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_SAVE, GTK_RESPONSE_OK);
 	g_signal_connect(G_OBJECT(button), "clicked",
 					 G_CALLBACK(save_pounce_cb), dialog);
 
--- a/pidgin/gtkprefs.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkprefs.c	Tue Aug 28 01:14:08 2007 +0000
@@ -240,7 +240,7 @@
 
 	if (label != NULL) {
 		gtk_label_set_mnemonic_widget(GTK_LABEL(label), dropdown);
-		pidgin_set_accessible_label (dropdown, label);
+		pidgin_set_accessible_relations (dropdown, label);
 	}
 
 	if (type == PURPLE_PREF_INT)
--- a/pidgin/gtkrequest.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkrequest.c	Tue Aug 28 01:14:08 2007 +0000
@@ -442,7 +442,7 @@
 
 static void *
 pidgin_request_choice(const char *title, const char *primary,
-			const char *secondary, unsigned int default_value,
+			const char *secondary, int default_value,
 			const char *ok_text, GCallback ok_cb,
 			const char *cancel_text, GCallback cancel_cb,
 			PurpleAccount *account, const char *who, PurpleConversation *conv,
@@ -548,7 +548,7 @@
 
 static void *
 pidgin_request_action(const char *title, const char *primary,
-						const char *secondary, unsigned int default_action,
+						const char *secondary, int default_action,
 					    PurpleAccount *account, const char *who, PurpleConversation *conv,
 						void *user_data, size_t action_count, va_list actions)
 {
@@ -1083,7 +1083,7 @@
 	data->cbs[0] = ok_cb;
 	data->cbs[1] = cancel_cb;
 
-	
+
 #ifdef _WIN32
 	data->dialog = win = pidgin_create_window(PIDGIN_ALERT_TITLE, PIDGIN_HIG_BORDER, "multifield", TRUE) ;
 #else /* !_WIN32 */
--- a/pidgin/gtksavedstatuses.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtksavedstatuses.c	Tue Aug 28 01:14:08 2007 +0000
@@ -1450,7 +1450,9 @@
 	GtkWidget *win;
 	GtkTreeIter iter;
 	GtkCellRenderer *rend;
-	const char *status_id = NULL;
+	char *status_id = NULL;
+	char *message = NULL;
+	gboolean parent_dialog_has_substatus = FALSE;
 	GList *list;
 	gboolean select = FALSE;
 
@@ -1553,25 +1555,29 @@
 					 G_CALLBACK(substatus_editor_ok_cb), dialog);
 
 	/* Seed the input widgets with the current values */
-	/* TODO: Get the current values from our parent's list store, not the saved_status! */
-	if (status_editor->original_title != NULL)
-	{
+
+	/* Only look at the saved status if we can't find it in the parent status dialog's substatuses model */
+	gtk_tree_model_get(GTK_TREE_MODEL(status_editor->model), &iter, 
+		STATUS_EDITOR_COLUMN_ENABLE_SUBSTATUS, &parent_dialog_has_substatus, -1);
+	if (parent_dialog_has_substatus) {
+		gtk_tree_model_get(GTK_TREE_MODEL(status_editor->model), &iter,
+			STATUS_EDITOR_COLUMN_STATUS_ID, &status_id,
+			STATUS_EDITOR_COLUMN_STATUS_MESSAGE, &message, -1);
+	} else if (status_editor->original_title != NULL) {
 		PurpleSavedStatus *saved_status = NULL;
 		PurpleSavedStatusSub *substatus = NULL;
 
-		saved_status = purple_savedstatus_find(status_editor->original_title);
-		if (saved_status != NULL)
-			substatus = purple_savedstatus_get_substatus(saved_status, account);
+		if ((saved_status = purple_savedstatus_find(status_editor->original_title)) != NULL) {
+			if ((substatus = purple_savedstatus_get_substatus(saved_status, account)) != NULL) {
+				message = (char *)purple_savedstatus_substatus_get_message(substatus);
+				status_id = (char *)purple_status_type_get_id(purple_savedstatus_substatus_get_type(substatus));
+			}
+		}
+	}
+	/* TODO: Else get the generic status type from our parent */
 
-		if (substatus != NULL)
-		{
-			gtk_imhtml_append_text(dialog->message,
-								   purple_savedstatus_substatus_get_message(substatus),
-								   0);
-			status_id = purple_status_type_get_id(purple_savedstatus_substatus_get_type(substatus));
-		}
-		/* TODO: Else get the generic status type from our parent */
-	}
+	if (message)
+		gtk_imhtml_append_text(dialog->message, message, 0);
 
 	for (list = purple_account_get_status_types(account); list; list = list->next)
 	{
@@ -1607,6 +1613,12 @@
 	if (!select)
 		gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
 
+	if (parent_dialog_has_substatus) {
+		/* These two were gotten from the parent tree model, so they need to be freed */
+		g_free(status_id);
+		g_free(message);
+	}
+
 	gtk_widget_show_all(win);
 }
 
--- a/pidgin/gtksound.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtksound.c	Tue Aug 28 01:14:08 2007 +0000
@@ -364,14 +364,14 @@
 	GError *err = NULL;
 
 	switch (GST_MESSAGE_TYPE (msg)) {
-	case GST_MESSAGE_EOS:
-		gst_element_set_state(play, GST_STATE_NULL);
-		gst_object_unref(GST_OBJECT(play));
-		break;
 	case GST_MESSAGE_ERROR:
 		gst_message_parse_error(msg, &err, NULL);
 		purple_debug_error("gstreamer", "%s\n", err->message);
 		g_error_free(err);
+		/* fall-through and clean up */
+	case GST_MESSAGE_EOS:
+		gst_element_set_state(play, GST_STATE_NULL);
+		gst_object_unref(GST_OBJECT(play));
 		break;
 	case GST_MESSAGE_WARNING:
 		gst_message_parse_warning(msg, &err, NULL);
--- a/pidgin/gtkstatusbox.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Tue Aug 28 01:14:08 2007 +0000
@@ -1415,15 +1415,15 @@
 }
 
 
-static void
-toggled_cb(GtkWidget *widget, PidginStatusBox *box)
+static 
+gboolean
+toggled_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *box)
 {
-	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))  {
 		if (!box->popup_in_progress)
 			pidgin_status_box_popup (box);
-	}  else {
-		pidgin_status_box_popdown(box);
-	}
+		else
+			pidgin_status_box_popdown(box);
+return TRUE;
 }
 
 static void
@@ -1773,7 +1773,7 @@
 	g_signal_connect(G_OBJECT(status_box->toggle_button), "button-release-event",
 			 G_CALLBACK(button_released_cb), status_box);
 #endif
-	g_signal_connect(G_OBJECT(status_box->toggle_button), "toggled",
+	g_signal_connect(G_OBJECT(status_box->toggle_button), "button-press-event",
 	                 G_CALLBACK(toggled_cb), status_box);
 	g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(imhtml_changed_cb), status_box);
 	g_signal_connect(G_OBJECT(status_box->imhtml), "format_function_toggle",
--- a/pidgin/gtkutils.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkutils.c	Tue Aug 28 01:14:08 2007 +0000
@@ -1147,12 +1147,30 @@
 void
 pidgin_set_accessible_label (GtkWidget *w, GtkWidget *l)
 {
+	AtkObject *acc;
+	const gchar *label_text;
+	const gchar *existing_name;
+
+	acc = gtk_widget_get_accessible (w);
+
+	/* If this object has no name, set it's name with the label text */
+	existing_name = atk_object_get_name (acc);
+	if (!existing_name) {
+		label_text = gtk_label_get_text (GTK_LABEL(l));
+		if (label_text)
+			atk_object_set_name (acc, label_text);
+	}
+
+	pidgin_set_accessible_relations(w, l);
+}
+
+void
+pidgin_set_accessible_relations (GtkWidget *w, GtkWidget *l)
+{
 	AtkObject *acc, *label;
 	AtkObject *rel_obj[1];
 	AtkRelationSet *set;
 	AtkRelation *relation;
-	const gchar *label_text;
-	const gchar *existing_name;
 
 	acc = gtk_widget_get_accessible (w);
 	label = gtk_widget_get_accessible (l);
@@ -1160,14 +1178,6 @@
 	/* Make sure mnemonics work */
         gtk_label_set_mnemonic_widget(GTK_LABEL(l), w);
 	
-	/* If this object has no name, set it's name with the label text */
-	existing_name = atk_object_get_name (acc);
-	if (!existing_name) {
-		label_text = gtk_label_get_text (GTK_LABEL(l));
-		if (label_text)
-			atk_object_set_name (acc, label_text);
-	}
-
 	/* Create the labeled-by relation */
 	set = atk_object_ref_relation_set (acc);
 	rel_obj[0] = label;
--- a/pidgin/gtkutils.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/gtkutils.h	Tue Aug 28 01:14:08 2007 +0000
@@ -418,6 +418,14 @@
 void pidgin_set_accessible_label(GtkWidget *w, GtkWidget *l);
 
 /**
+ * Sets the labelled-by and label-for ATK relationships.
+ *
+ * @param w The widget that we want to label.
+ * @param l A GtkLabel that we want to use as the label for the widget.
+ */
+void pidgin_set_accessible_relations(GtkWidget *w, GtkWidget *l);
+
+/**
  * A helper function for GtkMenuPositionFuncs. This ensures the menu will
  * be kept on screen if possible.
  *
--- a/pidgin/pidgin.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pidgin.h	Tue Aug 28 01:14:08 2007 +0000
@@ -26,7 +26,7 @@
 #ifndef _PIDGIN_H_
 #define _PIDGIN_H_
 
-#ifndef _WIN32
+#ifdef GDK_WINDOWING_X11
 # include <gdk/gdkx.h>
 #endif
 
--- a/pidgin/pidginstock.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pidginstock.c	Tue Aug 28 01:14:08 2007 +0000
@@ -105,7 +105,7 @@
 	{ PIDGIN_STOCK_STATUS_AVAILABLE,   "status", "available.png", 	TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I },
 	{ PIDGIN_STOCK_STATUS_AWAY, 	   "status", "away.png",	TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I },
 	{ PIDGIN_STOCK_STATUS_BUSY, 	"status", "busy.png", 		TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I },
-	{ PIDGIN_STOCK_STATUS_CHAT, 	"status", "chat.png",		TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+	{ PIDGIN_STOCK_STATUS_CHAT, 	"status", "chat.png",		TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
 	{ PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png",	TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
 	{ PIDGIN_STOCK_STATUS_XA, 	"status", "extended-away.png",	TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I },
 	{ PIDGIN_STOCK_STATUS_LOGIN, 	"status", "log-in.png",		FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
@@ -396,7 +396,7 @@
 
 	/* register custom icon sizes */
 	
-	microscopic =  gtk_icon_size_register("pidgin-icon-size-tango-microscopic", 11, 11);
+	microscopic =  gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11);
 	extra_small =  gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16);
 	small =        gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22);
 	medium =       gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32);
--- a/pidgin/pidginstock.h	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pidginstock.h	Tue Aug 28 01:14:08 2007 +0000
@@ -145,6 +145,7 @@
 /**
  * For using icons that aren't one of the default GTK_ICON_SIZEs
  */
+#define PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC    "pidgin-icon-size-tango-microscopic"
 #define PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL    "pidgin-icon-size-tango-extra-small"
 #define PIDGIN_ICON_SIZE_TANGO_SMALL          "pidgin-icon-size-tango-small"
 #define PIDGIN_ICON_SIZE_TANGO_MEDIUM         "pidgin-icon-size-tango-medium"
--- a/pidgin/pixmaps/emotes/default/24/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/24/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -95,7 +95,7 @@
     love-over.png \
     love.png \
     lying.png \
-    madtongue.png \
+    mad-tongue.png \
     mail.png \
     male-fighter1.png \
     male-fighter2.png \
Binary file pidgin/pixmaps/emotes/default/24/mad-tongue.png has changed
Binary file pidgin/pixmaps/emotes/default/24/madtongue.png has changed
--- a/pidgin/pixmaps/protocols/16/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pixmaps/protocols/16/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -10,6 +10,7 @@
 		jabber.png \
 		meanwhile.png \
 		msn.png \
+		myspace.png \
 		qq.png \
 		silc.png \
 		simple.png \
Binary file pidgin/pixmaps/protocols/16/myspace.png has changed
--- a/pidgin/pixmaps/protocols/22/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pixmaps/protocols/22/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -10,6 +10,7 @@
 		jabber.png \
 		meanwhile.png \
 		msn.png \
+		myspace.png \
 		qq.png \
 		silc.png \
 		simple.png \
Binary file pidgin/pixmaps/protocols/22/myspace.png has changed
--- a/pidgin/pixmaps/protocols/48/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pixmaps/protocols/48/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -9,6 +9,7 @@
 		jabber.png \
 		meanwhile.png \
 		msn.png \
+		myspace.png \
 		qq.png \
 		silc.png \
 		simple.png \
Binary file pidgin/pixmaps/protocols/48/myspace.png has changed
--- a/pidgin/pixmaps/status/11/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/pixmaps/status/11/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -1,4 +1,4 @@
-SUBDIRS = scalable
+SUBDIRS = scalable rtl
 
 EXTRA_DIST = 	available.png \
 		away.png \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/status/11/rtl/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -0,0 +1,6 @@
+EXTRA_DIST = 	extended-away.png
+
+pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/11/rtl
+
+pidginstatuspix_DATA = $(EXTRA_DIST)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/status/11/rtl/Makefile.mingw	Tue Aug 28 01:14:08 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/11/rtl/extended-away.png has changed
--- a/pidgin/plugins/Makefile.am	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/plugins/Makefile.am	Tue Aug 28 01:14:08 2007 +0000
@@ -16,9 +16,13 @@
 PERL_DIR = perl
 endif
 
+if ENABLE_GESTURES
+GESTURE_DIR = gestures
+endif
+
 SUBDIRS = \
 	$(CAP_DIR) \
-	gestures \
+	$(GESTURE_DIR) \
 	$(GEVOLUTION_DIR) \
 	$(MUSICMESSAGING_DIR) \
 	$(PERL_DIR) \
--- a/pidgin/plugins/musicmessaging/musicmessaging.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/plugins/musicmessaging/musicmessaging.c	Tue Aug 28 01:14:08 2007 +0000
@@ -71,10 +71,10 @@
 
 /* Globals */
 /* List of sessions */
-GList *conversations;
+static GList *conversations;
 
 /* Pointer to this plugin */
-PurplePlugin *plugin_pointer;
+static PurplePlugin *plugin_pointer;
 
 /* Define types needed for DBus */
 DBusGConnection *connection;
@@ -350,7 +350,16 @@
 static gboolean
 intercept_received(PurpleAccount *account, char **sender, char **message, PurpleConversation *conv, int *flags)
 {
-	MMConversation *mmconv = mmconv_from_conv(conv);
+	MMConversation *mmconv;
+	
+	if (conv == NULL) {
+		/* XXX: This is just to avoid a crash (#2726).
+		 *      We may want to create the conversation instead of returning from here
+		 */
+		return FALSE;
+	}
+
+	mmconv = mmconv_from_conv(conv);
 	
 	purple_debug_misc("purple-musicmessaging", "Intercepted: %s\n", *message);
 	if (strstr(*message, MUSICMESSAGING_PREFIX))
--- a/pidgin/plugins/spellchk.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/plugins/spellchk.c	Tue Aug 28 01:14:08 2007 +0000
@@ -667,7 +667,7 @@
 	return;
 }
 
-static int buf_get_line(char *ibuf, char **buf, int *position, int len)
+static int buf_get_line(char *ibuf, char **buf, int *position, gsize len)
 {
 	int pos = *position;
 	int spos = pos;
--- a/pidgin/plugins/win32/transparency/win2ktrans.c	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/plugins/win32/transparency/win2ktrans.c	Tue Aug 28 01:14:08 2007 +0000
@@ -396,8 +396,12 @@
 			&& pconv->unseen_state == PIDGIN_UNSEEN_NONE
 			&& pidgin_conv_window_get_gtkconv_count(win) == 1) {
 		GtkWidget *window = win->window;
+		gboolean has_focus;
 
-		set_conv_window_trans(NULL, win);
+		g_object_get(G_OBJECT(window), "has-toplevel-focus", &has_focus, NULL);
+
+		if (!has_focus || !purple_prefs_get_bool(OPT_WINTRANS_IM_ONFOCUS))
+			set_conv_window_trans(NULL, win);
 
 		if (g_signal_handler_find(G_OBJECT(window), G_SIGNAL_MATCH_FUNC,
 				0, 0, NULL, G_CALLBACK(focus_conv_win_cb), NULL) == 0) {
--- a/pidgin/win32/nsis/pidgin-installer.nsi	Sat Aug 25 20:32:15 2007 +0000
+++ b/pidgin/win32/nsis/pidgin-installer.nsi	Tue Aug 28 01:14:08 2007 +0000
@@ -554,6 +554,10 @@
     Push "msnim"
     Call RegisterURIHandler
   SectionEnd
+  Section /o "myim:" SecURI_MYIM
+    Push "myim"
+    Call RegisterURIHandler
+  SectionEnd
   Section /o "ymsgr:" SecURI_YMSGR
     Push "ymsgr"
     Call RegisterURIHandler
@@ -706,6 +710,7 @@
     Delete "$INSTDIR\plugins\libicq.dll"
     Delete "$INSTDIR\plugins\libirc.dll"
     Delete "$INSTDIR\plugins\libmsn.dll"
+    Delete "$INSTDIR\plugins\libmyspace.dll"
     Delete "$INSTDIR\plugins\libnapster.dll"
     Delete "$INSTDIR\plugins\libnovell.dll"
     Delete "$INSTDIR\plugins\libqq.dll"
--- a/po/POTFILES.in	Sat Aug 25 20:32:15 2007 +0000
+++ b/po/POTFILES.in	Tue Aug 28 01:14:08 2007 +0000
@@ -96,6 +96,7 @@
 libpurple/protocols/msn/state.c
 libpurple/protocols/msn/switchboard.c
 libpurple/protocols/msn/userlist.c
+libpurple/protocols/myspace/myspace.c
 libpurple/protocols/novell/nmuser.c
 libpurple/protocols/novell/novell.c
 libpurple/protocols/oscar/flap_connection.c
--- a/po/gl.po	Sat Aug 25 20:32:15 2007 +0000
+++ b/po/gl.po	Tue Aug 28 01:14:08 2007 +0000
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-01 03:21-0400\n"
-"PO-Revision-Date: 2007-08-02 14:19+0200\n"
+"POT-Creation-Date: 2007-08-20 03:22-0400\n"
+"PO-Revision-Date: 2007-08-20 13:55+0200\n"
 "Last-Translator: Frco. Javier Rial Rodríguez <fjrial@cesga.es>\n"
 "Language-Team: Galician <mancomun@mancomun.org>\n"
 "MIME-Version: 1.0\n"
@@ -19,17 +19,17 @@
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
-#: ../finch/finch.c:70 ../finch/finch.c:298 ../finch/finch.c:327
-#: ../finch/finch.c:404
+#: ../finch/finch.c:64 ../finch/finch.c:300 ../finch/finch.c:329
+#: ../finch/finch.c:417
 msgid "Finch"
 msgstr "Pidgin"
 
-#: ../finch/finch.c:204
+#: ../finch/finch.c:206
 #, c-format
 msgid "%s. Try `%s -h' for more information.\n"
 msgstr "%s. Tente `%s -h' para máis información.\n"
 
-#: ../finch/finch.c:206
+#: ../finch/finch.c:208
 #, c-format
 msgid ""
 "%s\n"
@@ -50,7 +50,7 @@
 "  -n, --nologin       non iniciar a sesión automaticamente\n"
 "  -v, --version       mostrar a versión actual e saír\n"
 
-#: ../finch/finch.c:325 ../pidgin/gtkmain.c:709
+#: ../finch/finch.c:327 ../pidgin/gtkmain.c:711
 #, c-format
 msgid ""
 "%s encountered errors migrating your settings from %s to %s. Please "
@@ -69,7 +69,8 @@
 #: ../libpurple/protocols/jabber/chat.c:688
 #: ../libpurple/protocols/jabber/jabber.c:1227
 #: ../libpurple/protocols/qq/group_join.c:328
-#: ../libpurple/protocols/silc/ops.c:57 ../libpurple/protocols/silc/ops.c:1456
+#: ../libpurple/protocols/qq/im.c:576 ../libpurple/protocols/silc/ops.c:57
+#: ../libpurple/protocols/silc/ops.c:1456
 #: ../libpurple/protocols/silc10/ops.c:1451
 msgid "Error"
 msgstr "Erro"
@@ -99,7 +100,7 @@
 msgstr "(Probablemente olvidaches executar 'make install'.)"
 
 #: ../finch/gntaccount.c:490 ../pidgin/gtkaccount.c:1478
-#: ../pidgin/gtkblist.c:4024
+#: ../pidgin/gtkblist.c:4023
 msgid "Modify Account"
 msgstr "Modificar a conta"
 
@@ -129,14 +130,14 @@
 #: ../finch/gntaccount.c:569 ../finch/gntaccount.c:632
 #: ../finch/gntaccount.c:878 ../finch/gntblist.c:343 ../finch/gntblist.c:420
 #: ../finch/gntblist.c:455 ../finch/gntblist.c:802 ../finch/gntblist.c:1004
-#: ../finch/gntblist.c:1100 ../finch/gntblist.c:2209 ../finch/gntplugin.c:378
+#: ../finch/gntblist.c:1100 ../finch/gntblist.c:2212 ../finch/gntplugin.c:378
 #: ../finch/gntpounce.c:458 ../finch/gntpounce.c:656 ../finch/gntprefs.c:264
-#: ../finch/gntstatus.c:144 ../finch/gntstatus.c:481 ../finch/gntstatus.c:606
-#: ../libpurple/account.c:984 ../libpurple/account.c:1234
-#: ../libpurple/account.c:1269 ../libpurple/conversation.c:1173
-#: ../libpurple/plugins/buddynote.c:51 ../libpurple/protocols/gg/gg.c:502
-#: ../libpurple/protocols/gg/gg.c:661 ../libpurple/protocols/gg/gg.c:798
-#: ../libpurple/protocols/gg/gg.c:879
+#: ../finch/gntsound.c:1046 ../finch/gntstatus.c:144 ../finch/gntstatus.c:481
+#: ../finch/gntstatus.c:606 ../libpurple/account.c:984
+#: ../libpurple/account.c:1234 ../libpurple/account.c:1269
+#: ../libpurple/conversation.c:1173 ../libpurple/plugins/buddynote.c:51
+#: ../libpurple/protocols/gg/gg.c:502 ../libpurple/protocols/gg/gg.c:661
+#: ../libpurple/protocols/gg/gg.c:798 ../libpurple/protocols/gg/gg.c:879
 #: ../libpurple/protocols/jabber/buddy.c:588
 #: ../libpurple/protocols/jabber/buddy.c:1826
 #: ../libpurple/protocols/jabber/buddy.c:1862
@@ -148,19 +149,19 @@
 #: ../libpurple/protocols/msn/msn.c:259 ../libpurple/protocols/msn/msn.c:276
 #: ../libpurple/protocols/msn/msn.c:293 ../libpurple/protocols/msn/msn.c:310
 #: ../libpurple/protocols/msn/msn.c:331
-#: ../libpurple/protocols/oscar/oscar.c:6083
+#: ../libpurple/protocols/oscar/oscar.c:6042
 #: ../libpurple/protocols/oscar/peer.c:1023
 #: ../libpurple/protocols/qq/buddy_info.c:484
 #: ../libpurple/protocols/qq/buddy_opt.c:214
-#: ../libpurple/protocols/qq/buddy_opt.c:409
+#: ../libpurple/protocols/qq/buddy_opt.c:411
 #: ../libpurple/protocols/qq/group.c:124
 #: ../libpurple/protocols/qq/group_join.c:140
 #: ../libpurple/protocols/qq/group_join.c:365
 #: ../libpurple/protocols/qq/group_opt.c:144
 #: ../libpurple/protocols/qq/group_opt.c:399
-#: ../libpurple/protocols/qq/sys_msg.c:115
-#: ../libpurple/protocols/qq/sys_msg.c:174
-#: ../libpurple/protocols/qq/sys_msg.c:269
+#: ../libpurple/protocols/qq/sys_msg.c:113
+#: ../libpurple/protocols/qq/sys_msg.c:172
+#: ../libpurple/protocols/qq/sys_msg.c:266
 #: ../libpurple/protocols/sametime/sametime.c:3389
 #: ../libpurple/protocols/sametime/sametime.c:3475
 #: ../libpurple/protocols/sametime/sametime.c:3646
@@ -183,36 +184,37 @@
 #: ../libpurple/protocols/silc10/ops.c:1904
 #: ../libpurple/protocols/silc10/silc.c:736
 #: ../libpurple/protocols/silc10/silc.c:942
-#: ../libpurple/protocols/yahoo/yahoo.c:1002
-#: ../libpurple/protocols/yahoo/yahoo.c:3333
-#: ../libpurple/protocols/yahoo/yahoo.c:3344 ../pidgin/gtkaccount.c:1917
-#: ../pidgin/gtkaccount.c:2511 ../pidgin/gtkblist.c:5926
-#: ../pidgin/gtkdialogs.c:747 ../pidgin/gtkdialogs.c:885
-#: ../pidgin/gtkdialogs.c:977 ../pidgin/gtkdialogs.c:997
-#: ../pidgin/gtkdialogs.c:1021 ../pidgin/gtkdialogs.c:1043
-#: ../pidgin/gtkdialogs.c:1091 ../pidgin/gtkdialogs.c:1132
-#: ../pidgin/gtkdialogs.c:1188 ../pidgin/gtkdialogs.c:1227
-#: ../pidgin/gtkdialogs.c:1254 ../pidgin/gtkimhtmltoolbar.c:425
+#: ../libpurple/protocols/yahoo/yahoo.c:1016
+#: ../libpurple/protocols/yahoo/yahoo.c:3398
+#: ../libpurple/protocols/yahoo/yahoo.c:3409 ../pidgin/gtkaccount.c:1917
+#: ../pidgin/gtkaccount.c:2511 ../pidgin/gtkblist.c:5925
+#: ../pidgin/gtkdialogs.c:750 ../pidgin/gtkdialogs.c:888
+#: ../pidgin/gtkdialogs.c:980 ../pidgin/gtkdialogs.c:1000
+#: ../pidgin/gtkdialogs.c:1024 ../pidgin/gtkdialogs.c:1046
+#: ../pidgin/gtkdialogs.c:1094 ../pidgin/gtkdialogs.c:1135
+#: ../pidgin/gtkdialogs.c:1191 ../pidgin/gtkdialogs.c:1230
+#: ../pidgin/gtkdialogs.c:1257 ../pidgin/gtkimhtmltoolbar.c:425
 #: ../pidgin/gtklog.c:327 ../pidgin/gtkplugin.c:288 ../pidgin/gtkpounce.c:1115
 #: ../pidgin/gtkprivacy.c:562 ../pidgin/gtkprivacy.c:578
 #: ../pidgin/gtkprivacy.c:603 ../pidgin/gtkprivacy.c:617
 #: ../pidgin/gtkrequest.c:270 ../pidgin/gtksavedstatuses.c:344
-#: ../pidgin/gtkstatusbox.c:1572
+#: ../pidgin/gtkstatusbox.c:1573
 msgid "Cancel"
 msgstr "Cancelar"
 
 #. Save button
 #. Save
 #: ../finch/gntaccount.c:573 ../finch/gntplugin.c:378 ../finch/gntpounce.c:464
-#: ../finch/gntprefs.c:264 ../finch/gntstatus.c:484 ../finch/gntstatus.c:594
-#: ../libpurple/account.c:1268 ../libpurple/plugins/buddynote.c:50
+#: ../finch/gntprefs.c:264 ../finch/gntsound.c:1043 ../finch/gntstatus.c:484
+#: ../finch/gntstatus.c:594 ../libpurple/account.c:1268
+#: ../libpurple/plugins/buddynote.c:50
 #: ../libpurple/protocols/jabber/buddy.c:587 ../pidgin/gtkdebug.c:748
 #: ../pidgin/gtkrequest.c:276
 msgid "Save"
 msgstr "Gardar"
 
 #: ../finch/gntaccount.c:626 ../pidgin/gtkaccount.c:1909
-#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1566
+#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1567
 #, c-format
 msgid "Are you sure you want to delete %s?"
 msgstr "Está seguro de que quere borrar %s?"
@@ -226,11 +228,11 @@
 #: ../finch/gntpounce.c:655 ../finch/gntpounce.c:718 ../finch/gntstatus.c:143
 #: ../finch/gntstatus.c:209 ../pidgin/gtkaccount.c:1916 ../pidgin/gtklog.c:326
 #: ../pidgin/gtkpounce.c:1114 ../pidgin/gtkrequest.c:273
-#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1571
+#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1572
 msgid "Delete"
 msgstr "Borrar"
 
-#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2115 ../finch/gntui.c:77
+#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2118 ../finch/gntui.c:81
 #: ../pidgin/gtkaccount.c:2334 ../pidgin/gtkdocklet.c:522
 msgid "Accounts"
 msgstr "Contas"
@@ -243,13 +245,13 @@
 #: ../finch/gntaccount.c:692 ../finch/gntaccount.c:877 ../finch/gntblist.c:342
 #: ../finch/gntblist.c:420 ../finch/gntblist.c:455 ../finch/gntnotify.c:379
 #: ../finch/gntpounce.c:702 ../finch/gntstatus.c:198
-#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:116
-#: ../libpurple/protocols/qq/sys_msg.c:175
-#: ../libpurple/protocols/qq/sys_msg.c:270
+#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:114
+#: ../libpurple/protocols/qq/sys_msg.c:173
+#: ../libpurple/protocols/qq/sys_msg.c:267
 #: ../libpurple/protocols/sametime/sametime.c:5487
 #: ../libpurple/protocols/silc/chat.c:615
 #: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2510
-#: ../pidgin/gtkblist.c:5925 ../pidgin/gtkconv.c:1650
+#: ../pidgin/gtkblist.c:5924 ../pidgin/gtkconv.c:1654
 #: ../pidgin/gtkrequest.c:274
 msgid "Add"
 msgstr "Engadir"
@@ -268,24 +270,24 @@
 msgid "Add buddy to your list?"
 msgstr "Quere engadir o contacto á súa lista?"
 
-#: ../finch/gntaccount.c:927 ../pidgin/gtkaccount.c:2561
+#: ../finch/gntaccount.c:933 ../pidgin/gtkaccount.c:2567
 #, c-format
 msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s"
 msgstr "%s%s%s%s quere engadir a %s á súa lista de contactos%s%s"
 
-#: ../finch/gntaccount.c:952 ../finch/gntaccount.c:955
-#: ../finch/gntaccount.c:982 ../pidgin/gtkaccount.c:2584
-#: ../pidgin/gtkaccount.c:2590
+#: ../finch/gntaccount.c:958 ../finch/gntaccount.c:961
+#: ../finch/gntaccount.c:988 ../pidgin/gtkaccount.c:2590
+#: ../pidgin/gtkaccount.c:2596
 msgid "Authorize buddy?"
 msgstr "Autorizar o contacto?"
 
-#: ../finch/gntaccount.c:959 ../finch/gntaccount.c:986
-#: ../pidgin/gtkaccount.c:2585 ../pidgin/gtkaccount.c:2591
+#: ../finch/gntaccount.c:965 ../finch/gntaccount.c:992
+#: ../pidgin/gtkaccount.c:2591 ../pidgin/gtkaccount.c:2597
 msgid "Authorize"
 msgstr "Autorizar"
 
-#: ../finch/gntaccount.c:960 ../finch/gntaccount.c:987
-#: ../pidgin/gtkaccount.c:2586 ../pidgin/gtkaccount.c:2592
+#: ../finch/gntaccount.c:966 ../finch/gntaccount.c:993
+#: ../pidgin/gtkaccount.c:2592 ../pidgin/gtkaccount.c:2598
 msgid "Deny"
 msgstr "Rexeitar"
 
@@ -309,7 +311,7 @@
 msgid "Error adding buddy"
 msgstr "Erro ao engadir un contacto"
 
-#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2860
+#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2858
 #: ../pidgin/gtkaccount.c:1990 ../pidgin/gtksavedstatuses.c:979
 msgid "Screen Name"
 msgstr "Nome de usuario"
@@ -320,8 +322,8 @@
 #: ../libpurple/protocols/silc10/chat.c:590
 #: ../libpurple/protocols/yahoo/yahoo_profile.c:704
 #: ../libpurple/protocols/zephyr/zephyr.c:788
-#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:996
-#: ../pidgin/gtkdialogs.c:1020 ../pidgin/gtkdialogs.c:1042
+#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:999
+#: ../pidgin/gtkdialogs.c:1023 ../pidgin/gtkdialogs.c:1045
 #: ../pidgin/gtkrequest.c:277
 msgid "Alias"
 msgstr "Alias"
@@ -330,10 +332,10 @@
 msgid "Group"
 msgstr "Grupo"
 
-#: ../finch/gntblist.c:334 ../finch/gntblist.c:400 ../finch/gntblist.c:1301
+#: ../finch/gntblist.c:334 ../finch/gntblist.c:400 ../finch/gntblist.c:1304
 #: ../finch/gntnotify.c:173 ../finch/gntstatus.c:572
 #: ../libpurple/plugins/idle.c:153 ../libpurple/plugins/idle.c:190
-#: ../pidgin/gtkblist.c:2983 ../pidgin/gtknotify.c:482
+#: ../pidgin/gtkblist.c:2986 ../pidgin/gtknotify.c:488
 #: ../pidgin/gtkpounce.c:1282 ../pidgin/plugins/gevolution/gevolution.c:445
 msgid "Account"
 msgstr "Conta"
@@ -347,7 +349,7 @@
 #: ../libpurple/protocols/silc10/buddy.c:1033
 #: ../libpurple/protocols/silc10/buddy.c:1080
 #: ../libpurple/protocols/silc10/buddy.c:1180
-#: ../libpurple/protocols/yahoo/yahoo.c:3178 ../pidgin/gtkblist.c:5432
+#: ../libpurple/protocols/yahoo/yahoo.c:3243 ../pidgin/gtkblist.c:5431
 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:445
 msgid "Add Buddy"
 msgstr "Engadir contacto"
@@ -375,7 +377,7 @@
 msgid "Auto-join"
 msgstr "Conectar automaticamente"
 
-#: ../finch/gntblist.c:418 ../finch/gntblist.c:853 ../pidgin/gtkblist.c:5811
+#: ../finch/gntblist.c:418 ../finch/gntblist.c:853 ../pidgin/gtkblist.c:5810
 msgid "Add Chat"
 msgstr "Engadir conversa"
 
@@ -397,7 +399,7 @@
 
 #: ../finch/gntblist.c:453 ../finch/gntblist.c:855
 #: ../libpurple/protocols/sametime/sametime.c:5397
-#: ../libpurple/protocols/sametime/sametime.c:5485 ../pidgin/gtkblist.c:5922
+#: ../libpurple/protocols/sametime/sametime.c:5485 ../pidgin/gtkblist.c:5921
 msgid "Add Group"
 msgstr "Engadir un grupo"
 
@@ -429,7 +431,7 @@
 msgid "Retrieving..."
 msgstr "Recuperando..."
 
-#: ../finch/gntblist.c:903 ../finch/gntconv.c:407
+#: ../finch/gntblist.c:903 ../finch/gntconv.c:431
 #: ../libpurple/protocols/silc/chat.c:899
 #: ../libpurple/protocols/silc10/chat.c:883
 msgid "Get Info"
@@ -440,10 +442,10 @@
 msgstr "Engadir aviso de contacto"
 
 #. if (q_bud && is_online(q_bud->status)) {
-#: ../finch/gntblist.c:914 ../finch/gntconv.c:419
+#: ../finch/gntblist.c:914 ../finch/gntconv.c:443
 #: ../libpurple/protocols/jabber/si.c:868
-#: ../libpurple/protocols/oscar/oscar.c:654 ../libpurple/protocols/qq/qq.c:585
-#: ../pidgin/gtkconv.c:1598
+#: ../libpurple/protocols/oscar/oscar.c:653 ../libpurple/protocols/qq/qq.c:587
+#: ../pidgin/gtkconv.c:1602
 msgid "Send File"
 msgstr "Enviar o ficheiro"
 
@@ -487,15 +489,15 @@
 msgstr "Confirmar a eliminación"
 
 #: ../finch/gntblist.c:1099 ../finch/gntblist.c:1251 ../finch/gntft.c:224
-#: ../pidgin/gtkconv.c:1647 ../pidgin/gtkrequest.c:275
+#: ../pidgin/gtkconv.c:1651 ../pidgin/gtkrequest.c:275
 #: ../pidgin/gtkstatusbox.c:263
 msgid "Remove"
 msgstr "Eliminar"
 
 #. Buddy List
-#: ../finch/gntblist.c:1225 ../finch/gntblist.c:2294 ../finch/gntprefs.c:257
-#: ../finch/gntui.c:78 ../pidgin/gtkblist.c:4268
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:330
+#: ../finch/gntblist.c:1225 ../finch/gntblist.c:2297 ../finch/gntprefs.c:257
+#: ../finch/gntui.c:82 ../pidgin/gtkblist.c:4267
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:326
 msgid "Buddy List"
 msgstr "Lista de contactos"
 
@@ -508,7 +510,7 @@
 msgstr "Cambiar etiqueta"
 
 #. General
-#: ../finch/gntblist.c:1296 ../libpurple/protocols/gg/gg.c:632
+#: ../finch/gntblist.c:1297 ../libpurple/protocols/gg/gg.c:632
 #: ../libpurple/protocols/gg/gg.c:1045 ../libpurple/protocols/gg/gg.c:1118
 #: ../libpurple/protocols/gg/gg.c:2202
 #: ../libpurple/protocols/jabber/buddy.c:274
@@ -526,29 +528,29 @@
 #: ../libpurple/protocols/silc10/ops.c:1036
 #: ../libpurple/protocols/silc10/ops.c:1179
 #: ../libpurple/protocols/silc10/ops.c:1328
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1066 ../pidgin/gtkblist.c:3007
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1066 ../pidgin/gtkblist.c:3010
 msgid "Nickname"
 msgstr "Alias"
 
 #. Idle stuff
-#: ../finch/gntblist.c:1316 ../finch/gntprefs.c:260
-#: ../libpurple/protocols/bonjour/bonjour.c:314
+#: ../finch/gntblist.c:1319 ../finch/gntprefs.c:260
+#: ../libpurple/protocols/bonjour/bonjour.c:333
 #: ../libpurple/protocols/jabber/buddy.c:647
 #: ../libpurple/protocols/jabber/buddy.c:687
 #: ../libpurple/protocols/msn/msn.c:516 ../libpurple/protocols/msn/state.c:32
 #: ../libpurple/protocols/novell/novell.c:2825
-#: ../libpurple/protocols/oscar/oscar.c:2884
-#: ../libpurple/protocols/yahoo/yahoo.c:2932
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3035
-#: ../pidgin/gtkblist.c:3444 ../pidgin/gtkprefs.c:1918
+#: ../libpurple/protocols/oscar/oscar.c:2882
+#: ../libpurple/protocols/yahoo/yahoo.c:2997
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3038
+#: ../pidgin/gtkblist.c:3443 ../pidgin/gtkprefs.c:1920
 msgid "Idle"
 msgstr "Inactivo"
 
-#: ../finch/gntblist.c:1330
+#: ../finch/gntblist.c:1333
 msgid "On Mobile"
 msgstr "No móbil"
 
-#: ../finch/gntblist.c:1411
+#: ../finch/gntblist.c:1414
 #, c-format
 msgid ""
 "Online: %d\n"
@@ -557,12 +559,12 @@
 "Conectado: %d\n"
 "Total: %d"
 
-#: ../finch/gntblist.c:1420
+#: ../finch/gntblist.c:1423
 #, c-format
 msgid "Account: %s (%s)"
 msgstr "Conta: %s (%s)"
 
-#: ../finch/gntblist.c:1432
+#: ../finch/gntblist.c:1435
 #, c-format
 msgid ""
 "\n"
@@ -571,47 +573,47 @@
 "\n"
 "Visto por última vez: hai %s"
 
-#: ../finch/gntblist.c:1698 ../pidgin/gtkdocklet.c:470
-#: ../pidgin/gtkstatusbox.c:1070
+#: ../finch/gntblist.c:1701 ../pidgin/gtkdocklet.c:470
+#: ../pidgin/gtkstatusbox.c:1071
 msgid "New..."
 msgstr "Novo..."
 
-#: ../finch/gntblist.c:1705 ../pidgin/gtkdocklet.c:471
-#: ../pidgin/gtkstatusbox.c:1071
+#: ../finch/gntblist.c:1708 ../pidgin/gtkdocklet.c:471
+#: ../pidgin/gtkstatusbox.c:1072
 msgid "Saved..."
 msgstr "Gardado..."
 
-#: ../finch/gntblist.c:2083 ../finch/gntplugin.c:254 ../finch/gntui.c:82
+#: ../finch/gntblist.c:2086 ../finch/gntplugin.c:254 ../finch/gntui.c:86
 #: ../pidgin/gtkdocklet.c:523 ../pidgin/gtkplugin.c:530
 msgid "Plugins"
 msgstr "Complementos"
 
-#: ../finch/gntblist.c:2190 ../pidgin/gtkdialogs.c:728
-#: ../pidgin/gtkdialogs.c:866 ../pidgin/gtkdialogs.c:947
+#: ../finch/gntblist.c:2193 ../pidgin/gtkdialogs.c:731
+#: ../pidgin/gtkdialogs.c:869 ../pidgin/gtkdialogs.c:950
 msgid "_Name"
 msgstr "_Nome"
 
-#: ../finch/gntblist.c:2195 ../pidgin/gtkdialogs.c:733
-#: ../pidgin/gtkdialogs.c:871 ../pidgin/gtkdialogs.c:952
+#: ../finch/gntblist.c:2198 ../pidgin/gtkdialogs.c:736
+#: ../pidgin/gtkdialogs.c:874 ../pidgin/gtkdialogs.c:955
 msgid "_Account"
 msgstr "_Conta"
 
-#: ../finch/gntblist.c:2203 ../pidgin/gtkdialogs.c:741
+#: ../finch/gntblist.c:2206 ../pidgin/gtkdialogs.c:744
 msgid "New Instant Message"
 msgstr "Mensaxe instantánea nova"
 
-#: ../finch/gntblist.c:2205 ../pidgin/gtkdialogs.c:743
+#: ../finch/gntblist.c:2208 ../pidgin/gtkdialogs.c:746
 msgid "Please enter the screen name or alias of the person you would like to IM."
 msgstr "Introduza o nome de usuario ou o alias da persoa con quen quere comunicarse."
 
-#: ../finch/gntblist.c:2208 ../finch/gntnotify.c:79 ../libpurple/account.c:983
+#: ../finch/gntblist.c:2211 ../finch/gntnotify.c:79 ../libpurple/account.c:983
 #: ../libpurple/account.c:1233 ../libpurple/protocols/gg/gg.c:501
 #: ../libpurple/protocols/gg/gg.c:660 ../libpurple/protocols/gg/gg.c:797
 #: ../libpurple/protocols/jabber/jabber.c:1383
 #: ../libpurple/protocols/jabber/xdata.c:336
 #: ../libpurple/protocols/msn/msn.c:258 ../libpurple/protocols/msn/msn.c:275
 #: ../libpurple/protocols/msn/msn.c:292 ../libpurple/protocols/msn/msn.c:309
-#: ../libpurple/protocols/oscar/oscar.c:6082
+#: ../libpurple/protocols/oscar/oscar.c:6041
 #: ../libpurple/protocols/silc/buddy.c:454
 #: ../libpurple/protocols/silc/buddy.c:1190
 #: ../libpurple/protocols/silc/chat.c:447
@@ -628,40 +630,40 @@
 #: ../libpurple/protocols/silc10/ops.c:1297
 #: ../libpurple/protocols/silc10/ops.c:1903
 #: ../libpurple/protocols/silc10/silc.c:735
-#: ../libpurple/protocols/yahoo/yahoo.c:1001
-#: ../libpurple/protocols/yahoo/yahoo.c:3332
-#: ../libpurple/protocols/yahoo/yahoo.c:3343 ../pidgin/gtkblist.c:4023
-#: ../pidgin/gtkdialogs.c:746 ../pidgin/gtkdialogs.c:884
-#: ../pidgin/gtkdialogs.c:976 ../pidgin/gtkrequest.c:269
+#: ../libpurple/protocols/yahoo/yahoo.c:1015
+#: ../libpurple/protocols/yahoo/yahoo.c:3397
+#: ../libpurple/protocols/yahoo/yahoo.c:3408 ../pidgin/gtkblist.c:4022
+#: ../pidgin/gtkdialogs.c:749 ../pidgin/gtkdialogs.c:887
+#: ../pidgin/gtkdialogs.c:979 ../pidgin/gtkrequest.c:269
 msgid "OK"
 msgstr "Aceptar"
 
 #. Create the "Options" frame.
-#: ../finch/gntblist.c:2228 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791
+#: ../finch/gntblist.c:2231 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791
 msgid "Options"
 msgstr "Opcións"
 
-#: ../finch/gntblist.c:2234
+#: ../finch/gntblist.c:2237
 msgid "Send IM..."
 msgstr "Enviar MI..."
 
-#: ../finch/gntblist.c:2238
+#: ../finch/gntblist.c:2241
 msgid "Show empty groups"
 msgstr "Mostrar grupos baleiros"
 
-#: ../finch/gntblist.c:2244
+#: ../finch/gntblist.c:2247
 msgid "Show offline buddies"
 msgstr "Mostrar contactos desconectados"
 
-#: ../finch/gntblist.c:2250
+#: ../finch/gntblist.c:2253
 msgid "Sort by status"
 msgstr "Ordenar por estado"
 
-#: ../finch/gntblist.c:2254
+#: ../finch/gntblist.c:2257
 msgid "Sort alphabetically"
 msgstr "Ordenar alfabeticamente"
 
-#: ../finch/gntblist.c:2258
+#: ../finch/gntblist.c:2261
 msgid "Sort by log size"
 msgstr "Ordenar por tamaño de rexistro"
 
@@ -688,41 +690,41 @@
 "Pidgin non tentará reconectar a conta ata que vostede corrixa o erro "
 "e a volva activar."
 
-#: ../finch/gntconv.c:117
+#: ../finch/gntconv.c:118
 msgid "No such command."
 msgstr "Non existe o comando."
 
-#: ../finch/gntconv.c:121 ../pidgin/gtkconv.c:491
+#: ../finch/gntconv.c:122 ../pidgin/gtkconv.c:495
 msgid "Syntax Error:  You typed the wrong number of arguments to that command."
 msgstr "Erro de sintaxe: O número de argumentos para ese comando non é correcto."
 
-#: ../finch/gntconv.c:126 ../pidgin/gtkconv.c:497
+#: ../finch/gntconv.c:127 ../pidgin/gtkconv.c:501
 msgid "Your command failed for an unknown reason."
 msgstr "O seu comando fallou por motivos descoñecidos."
 
-#: ../finch/gntconv.c:131 ../pidgin/gtkconv.c:504
+#: ../finch/gntconv.c:132 ../pidgin/gtkconv.c:508
 msgid "That command only works in chats, not IMs."
 msgstr "Ese comando só funciona en conversas, non en MI."
 
-#: ../finch/gntconv.c:134 ../pidgin/gtkconv.c:507
+#: ../finch/gntconv.c:135 ../pidgin/gtkconv.c:511
 msgid "That command only works in IMs, not chats."
 msgstr "Ese comando só funciona en MI, non en conversas."
 
-#: ../finch/gntconv.c:138 ../pidgin/gtkconv.c:512
+#: ../finch/gntconv.c:139 ../pidgin/gtkconv.c:516
 msgid "That command doesn't work on this protocol."
 msgstr "Ese comando non funciona neste protocolo."
 
-#: ../finch/gntconv.c:224
+#: ../finch/gntconv.c:225
 #, c-format
 msgid "%s (%s -- %s)"
 msgstr "%s (%s -- %s)"
 
-#: ../finch/gntconv.c:247
+#: ../finch/gntconv.c:248
 #, c-format
 msgid "%s [%s]"
 msgstr "%s [%s]"
 
-#: ../finch/gntconv.c:252 ../finch/gntconv.c:647
+#: ../finch/gntconv.c:253 ../finch/gntconv.c:672
 #, c-format
 msgid ""
 "\n"
@@ -731,48 +733,48 @@
 "\n"
 "%s está a escribir..."
 
-#: ../finch/gntconv.c:271
+#: ../finch/gntconv.c:272
 msgid "You have left this chat."
 msgstr "Abandonou esta conversa."
 
-#: ../finch/gntconv.c:342
+#: ../finch/gntconv.c:366
 msgid "Send To"
 msgstr "Enviar a"
 
-#: ../finch/gntconv.c:386
+#: ../finch/gntconv.c:410
 msgid "Conversation"
 msgstr "Conversa"
 
-#: ../finch/gntconv.c:392
+#: ../finch/gntconv.c:416
 msgid "Clear Scrollback"
 msgstr "Limpar o historial da conversa"
 
-#: ../finch/gntconv.c:396 ../finch/gntprefs.c:190
+#: ../finch/gntconv.c:420 ../finch/gntprefs.c:190
 msgid "Show Timestamps"
 msgstr "Mostrar marcas de tempo"
 
-#: ../finch/gntconv.c:412
+#: ../finch/gntconv.c:436
 msgid "Add Buddy Pounce..."
 msgstr "Engadir aviso de contacto..."
 
-#: ../finch/gntconv.c:613
+#: ../finch/gntconv.c:638
 msgid "<AUTO-REPLY> "
 msgstr "<RESPOSTA AUTOMÁTICA>"
 
 #. Print the list of users in the room
-#: ../finch/gntconv.c:735
+#: ../finch/gntconv.c:760
 msgid "List of users:\n"
 msgstr "Lista de usuarios:\n"
 
-#: ../finch/gntconv.c:880 ../pidgin/gtkconv.c:334
+#: ../finch/gntconv.c:905 ../pidgin/gtkconv.c:338
 msgid "Supported debug options are:  version"
 msgstr "As opcións de depuración soportadas son:  version"
 
-#: ../finch/gntconv.c:915 ../pidgin/gtkconv.c:383
+#: ../finch/gntconv.c:940 ../pidgin/gtkconv.c:387
 msgid "No such command (in this context)."
 msgstr "Non existe o comando (neste contexto)."
 
-#: ../finch/gntconv.c:918 ../pidgin/gtkconv.c:386
+#: ../finch/gntconv.c:943 ../pidgin/gtkconv.c:390
 msgid ""
 "Use \"/help &lt;command&gt;\" for help on a specific command.\n"
 "The following commands are available in this context:\n"
@@ -780,7 +782,7 @@
 "Usar \"/help &lt;comando&gt;\" para obter axuda dun comando específico.\n"
 "Os seguintes comandos están dispoñibles neste contexto:\n"
 
-#: ../finch/gntconv.c:976 ../pidgin/gtkconv.c:7291
+#: ../finch/gntconv.c:1001 ../pidgin/gtkconv.c:7350
 msgid ""
 "say &lt;message&gt;:  Send a message normally as if you weren't using a "
 "command."
@@ -788,13 +790,13 @@
 "say &lt;mensaxe&gt;:  Envía unha mensaxe como se non se estivese a utilizar"
 "un comando."
 
-#: ../finch/gntconv.c:979 ../pidgin/gtkconv.c:7294
+#: ../finch/gntconv.c:1004 ../pidgin/gtkconv.c:7353
 msgid "me &lt;action&gt;:  Send an IRC style action to a buddy or chat."
 msgstr ""
 "me &lt;acción&gt;:  Envía unha acción estilo IRC a un contacto ou a unha "
 "conversa."
 
-#: ../finch/gntconv.c:982 ../pidgin/gtkconv.c:7297
+#: ../finch/gntconv.c:1007 ../pidgin/gtkconv.c:7356
 msgid ""
 "debug &lt;option&gt;:  Send various debug information to the current "
 "conversation."
@@ -802,43 +804,43 @@
 "debug&lt;opción&gt;:  Envía información de depuración sobre a conversa "
 "actual."
 
-#: ../finch/gntconv.c:985 ../pidgin/gtkconv.c:7300
+#: ../finch/gntconv.c:1010 ../pidgin/gtkconv.c:7359
 msgid "clear: Clears the conversation scrollback."
 msgstr "clear: Limpa o historial da conversa."
 
-#: ../finch/gntconv.c:988 ../pidgin/gtkconv.c:7306
+#: ../finch/gntconv.c:1013 ../pidgin/gtkconv.c:7365
 msgid "help &lt;command&gt;:  Help on a specific command."
 msgstr "help &lt;comando&gt;:  Axuda sobre un comando específico."
 
-#: ../finch/gntconv.c:991
+#: ../finch/gntconv.c:1016
 msgid "users:  Show the list of users in the chat."
 msgstr "users:  Amosa a lista de usuarios na conversa"
 
-#: ../finch/gntconv.c:996
+#: ../finch/gntconv.c:1021
 msgid "plugins: Show the plugins window."
 msgstr "complementos: Mostra a ventá de complementos."
 
-#: ../finch/gntconv.c:999
+#: ../finch/gntconv.c:1024
 msgid "buddylist: Show the buddylist."
 msgstr "buddylist: Mostra a lista de contactos."
 
-#: ../finch/gntconv.c:1002
+#: ../finch/gntconv.c:1027
 msgid "accounts: Show the accounts window."
 msgstr "contas: Mostra a ventá de contas."
 
-#: ../finch/gntconv.c:1005
+#: ../finch/gntconv.c:1030
 msgid "debugwin: Show the debug window."
 msgstr "depuración: Mostra a ventá de depuración."
 
-#: ../finch/gntconv.c:1008
+#: ../finch/gntconv.c:1033
 msgid "prefs: Show the preference window."
 msgstr "preferencias: Mostra a ventá de preferencias."
 
-#: ../finch/gntconv.c:1011
+#: ../finch/gntconv.c:1036
 msgid "statuses: Show the savedstatuses window."
 msgstr "estados: Mostrar a ventá de estados gardardos."
 
-#: ../finch/gntdebug.c:234 ../finch/gntui.c:80 ../pidgin/gtkdebug.c:694
+#: ../finch/gntdebug.c:234 ../finch/gntui.c:84 ../pidgin/gtkdebug.c:694
 msgid "Debug Window"
 msgstr "Ventá de depuración"
 
@@ -864,7 +866,7 @@
 msgstr "Transferencia de ficheiros - %d%% de %d ficheiros"
 
 #. Create the window.
-#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:81
+#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:85
 #: ../pidgin/gtkft.c:233 ../pidgin/gtkft.c:761
 msgid "File Transfers"
 msgstr "Transferencia de ficheiros"
@@ -891,7 +893,7 @@
 
 #. XXX: Use of ggp_str_to_uin() is an ugly hack!
 #: ../finch/gntft.c:198 ../finch/gntstatus.c:543 ../finch/gntstatus.c:572
-#: ../libpurple/protocols/bonjour/bonjour.c:318
+#: ../libpurple/protocols/bonjour/bonjour.c:337
 #: ../libpurple/protocols/gg/gg.c:1034 ../libpurple/protocols/gg/gg.c:1571
 #: ../libpurple/protocols/gg/gg.c:1579
 #: ../libpurple/protocols/jabber/buddy.c:638
@@ -900,15 +902,15 @@
 #: ../libpurple/protocols/jabber/jabber.c:1212
 #: ../libpurple/protocols/msn/msn.c:515
 #: ../libpurple/protocols/novell/novell.c:2835
-#: ../libpurple/protocols/oscar/oscar.c:821
-#: ../libpurple/protocols/oscar/oscar.c:826
-#: ../libpurple/protocols/oscar/oscar.c:828
-#: ../libpurple/protocols/oscar/oscar.c:2672
-#: ../libpurple/protocols/oscar/oscar.c:3789
+#: ../libpurple/protocols/oscar/oscar.c:820
+#: ../libpurple/protocols/oscar/oscar.c:825
+#: ../libpurple/protocols/oscar/oscar.c:827
+#: ../libpurple/protocols/oscar/oscar.c:2670
+#: ../libpurple/protocols/oscar/oscar.c:3748
 #: ../libpurple/protocols/sametime/sametime.c:3264
 #: ../libpurple/protocols/sametime/sametime.c:4151
-#: ../libpurple/protocols/yahoo/yahoo.c:3083 ../pidgin/gtkblist.c:3079
-#: ../pidgin/gtkblist.c:3092 ../pidgin/gtkblist.c:3094
+#: ../libpurple/protocols/yahoo/yahoo.c:3148 ../pidgin/gtkblist.c:3082
+#: ../pidgin/gtkblist.c:3095 ../pidgin/gtkblist.c:3097
 #: ../pidgin/gtksavedstatuses.c:998 ../pidgin/gtksavedstatuses.c:1143
 msgid "Status"
 msgstr "Estado"
@@ -968,11 +970,11 @@
 msgid "You have mail!"
 msgstr "Ten un correo!"
 
-#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:489
+#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:495
 msgid "Sender"
 msgstr "Remitente"
 
-#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:496
+#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:502
 msgid "Subject"
 msgstr "Asunto"
 
@@ -983,29 +985,29 @@
 msgstr[0] "%s (%s) ten %d mensaxe nova."
 msgstr[1] "%s (%s) ten %d mensaxe nova."
 
-#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:335
+#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:340
 msgid "New Mail"
 msgstr "Correo novo"
 
-#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:915
+#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:923
 #, c-format
 msgid "Info for %s"
 msgstr "Información sobre %s"
 
 #: ../finch/gntnotify.c:290 ../libpurple/protocols/toc/toc.c:476
-#: ../pidgin/gtknotify.c:916
+#: ../pidgin/gtknotify.c:924
 msgid "Buddy Information"
 msgstr "Información do contacto"
 
-#: ../finch/gntnotify.c:376
+#: ../finch/gntnotify.c:376 ../libpurple/protocols/qq/group_join.c:367
 msgid "Continue"
 msgstr "Continuar"
 
-#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1626 ../pidgin/gtkdebug.c:834
+#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1630 ../pidgin/gtkdebug.c:834
 msgid "Info"
 msgstr "Info"
 
-#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1587
+#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1591
 msgid "IM"
 msgstr "MI"
 
@@ -1072,7 +1074,7 @@
 #. Back to instant-apply! I win!  BU-HAHAHA!
 #. Create the window
 #: ../finch/gntplugin.c:370 ../finch/gntplugin.c:377 ../finch/gntprefs.c:263
-#: ../finch/gntui.c:83 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2060
+#: ../finch/gntui.c:88 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2062
 msgid "Preferences"
 msgstr "Preferencias"
 
@@ -1185,7 +1187,7 @@
 msgid "Are you sure you want to delete the pounce on %s for %s?"
 msgstr "Está seguro de que quere borrar o aviso sobre %s para %s?"
 
-#: ../finch/gntpounce.c:685 ../finch/gntui.c:79 ../pidgin/gtkpounce.c:1339
+#: ../finch/gntpounce.c:685 ../finch/gntui.c:83 ../pidgin/gtkpounce.c:1339
 msgid "Buddy Pounces"
 msgstr "Avisos de contacto"
 
@@ -1247,13 +1249,13 @@
 msgid "Based on keyboard use"
 msgstr "Baseado no uso do teclado"
 
-#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1923
+#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1925
 msgid "From last sent message"
 msgstr "Desde a última mensaxe enviada"
 
 #: ../finch/gntprefs.c:95 ../pidgin/gtkprefs.c:897 ../pidgin/gtkprefs.c:906
-#: ../pidgin/gtkprefs.c:1922 ../pidgin/gtkprefs.c:1936
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:337
+#: ../pidgin/gtkprefs.c:1924 ../pidgin/gtkprefs.c:1938
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:333
 msgid "Never"
 msgstr "Nunca"
 
@@ -1302,12 +1304,12 @@
 msgstr "Cambiar o estado a"
 
 #. Conversations
-#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2026
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:344
+#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2028
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:340
 msgid "Conversations"
 msgstr "Conversas"
 
-#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1462 ../pidgin/gtkprefs.c:2037
+#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1464 ../pidgin/gtkprefs.c:2039
 msgid "Logging"
 msgstr "Rexistro"
 
@@ -1315,16 +1317,167 @@
 msgid "Not implemented yet."
 msgstr "Funcionalidade non implementada."
 
-#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1539
-#: ../pidgin/gtkrequest.c:1585
+#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1552
+#: ../pidgin/gtkrequest.c:1598
 msgid "Save File..."
 msgstr "Gardar ficheiro..."
 
-#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1540
-#: ../pidgin/gtkrequest.c:1586
+#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1553
+#: ../pidgin/gtkrequest.c:1599
 msgid "Open File..."
 msgstr "Abrir ficheiro..."
 
+#: ../finch/gntsound.c:94 ../pidgin/gtksound.c:63
+msgid "Buddy logs in"
+msgstr "Conéctase un contacto"
+
+#: ../finch/gntsound.c:95 ../pidgin/gtksound.c:64
+msgid "Buddy logs out"
+msgstr "Desconéctase un contacto"
+
+#: ../finch/gntsound.c:96 ../pidgin/gtksound.c:65
+msgid "Message received"
+msgstr "Mensaxe recibida"
+
+#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:66
+msgid "Message received begins conversation"
+msgstr "Mensaxe recibida que comeza unha conversa"
+
+#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:67
+msgid "Message sent"
+msgstr "Mensaxe enviada"
+
+#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:68
+msgid "Person enters chat"
+msgstr "Alguén entra na conversa"
+
+#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:69
+msgid "Person leaves chat"
+msgstr "Alguén deixa a conversa"
+
+#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:70
+msgid "You talk in chat"
+msgstr "Participa na conversa"
+
+#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:71
+msgid "Others talk in chat"
+msgstr "Conversan outros"
+
+#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:74
+msgid "Someone says your screen name in chat"
+msgstr "Alguén menciona o seu nome na conversa"
+
+#: ../finch/gntsound.c:357 ../pidgin/gtksound.c:310
+msgid "GStreamer Failure"
+msgstr "Fallo de GStreamer"
+
+#: ../finch/gntsound.c:358 ../pidgin/gtksound.c:311
+msgid "GStreamer failed to initialize."
+msgstr "O GStreamer errou ao iniciar."
+
+#: ../finch/gntsound.c:706 ../finch/gntsound.c:792 ../pidgin/gtkprefs.c:1584
+#: ../pidgin/gtkprefs.c:1673 ../pidgin/gtkprefs.c:1867
+msgid "(default)"
+msgstr "(por defecto)"
+
+#: ../finch/gntsound.c:719
+msgid "Select Sound File ..."
+msgstr "Elixir ficheiro de son ..."
+
+#: ../finch/gntsound.c:894
+msgid "Sound Preferences"
+msgstr "Preferencias de son"
+
+#: ../finch/gntsound.c:905
+msgid "Profiles"
+msgstr "Perfís"
+
+#: ../finch/gntsound.c:944 ../pidgin/gtkprefs.c:1712
+msgid "Automatic"
+msgstr "Automático"
+
+#: ../finch/gntsound.c:947
+msgid "Console Beep"
+msgstr "Bip da consola"
+
+#: ../finch/gntsound.c:948 ../pidgin/gtkprefs.c:1716
+msgid "Command"
+msgstr "Comando"
+
+#: ../finch/gntsound.c:949
+msgid "No Sound"
+msgstr "Sen son"
+
+#: ../finch/gntsound.c:951 ../pidgin/gtkprefs.c:1707
+msgid "Sound Method"
+msgstr "Método para reproducir sons"
+
+#: ../finch/gntsound.c:956
+msgid "Method: "
+msgstr "Método:"
+
+#: ../finch/gntsound.c:963
+#, c-format
+msgid ""
+"Sound Command\n"
+"(%s for filename)"
+msgstr ""
+"Comandos de son\n"
+"(%s para nome de ficheiro)"
+
+#. Sound options
+#: ../finch/gntsound.c:971 ../pidgin/gtkprefs.c:1751
+msgid "Sound Options"
+msgstr "Opcións de son"
+
+#: ../finch/gntsound.c:972
+msgid "Sounds when conversation has focus"
+msgstr "Sons cando a conversa ten o _foco"
+
+#: ../finch/gntsound.c:980 ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908
+#: ../pidgin/gtkprefs.c:1758 ../pidgin/plugins/timestamp_format.c:42
+#: ../pidgin/plugins/timestamp_format.c:51
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:334
+msgid "Always"
+msgstr "Sempre"
+
+#: ../finch/gntsound.c:981 ../pidgin/gtkprefs.c:1756
+msgid "Only when available"
+msgstr "Só cando estea dispoñible"
+
+#: ../finch/gntsound.c:982 ../pidgin/gtkprefs.c:1757
+msgid "Only when not available"
+msgstr "Só cando estea non dispoñible"
+
+#: ../finch/gntsound.c:989
+msgid "Volume(0-100):"
+msgstr "Volume(0-100):"
+
+#. Sound events
+#: ../finch/gntsound.c:1006 ../pidgin/gtkprefs.c:1793
+msgid "Sound Events"
+msgstr "Eventos de son"
+
+#: ../finch/gntsound.c:1008 ../pidgin/gtkprefs.c:1852
+msgid "Event"
+msgstr "Evento"
+
+#: ../finch/gntsound.c:1008
+msgid "File"
+msgstr "Ficheiro"
+
+#: ../finch/gntsound.c:1027 ../pidgin/gtkprefs.c:1871
+msgid "Test"
+msgstr "Probar"
+
+#: ../finch/gntsound.c:1030 ../pidgin/gtkprefs.c:1875
+msgid "Reset"
+msgstr "Reiniciar"
+
+#: ../finch/gntsound.c:1033 ../pidgin/gtkprefs.c:1879
+msgid "Choose..."
+msgstr "Escoller..."
+
 #: ../finch/gntstatus.c:137
 #, c-format
 msgid "Are you sure you want to delete \"%s\""
@@ -1351,9 +1504,9 @@
 msgstr "Tipo"
 
 #: ../finch/gntstatus.c:182 ../finch/gntstatus.c:560 ../finch/gntstatus.c:572
-#: ../libpurple/protocols/bonjour/bonjour.c:247
-#: ../libpurple/protocols/bonjour/bonjour.c:254
-#: ../libpurple/protocols/bonjour/bonjour.c:320
+#: ../libpurple/protocols/bonjour/bonjour.c:249
+#: ../libpurple/protocols/bonjour/bonjour.c:256
+#: ../libpurple/protocols/bonjour/bonjour.c:339
 #: ../libpurple/protocols/gg/gg.c:1072 ../libpurple/protocols/gg/gg.c:1574
 #: ../libpurple/protocols/gg/gg.c:1592 ../libpurple/protocols/gg/gg.c:1602
 #: ../libpurple/protocols/gg/gg.c:1608 ../libpurple/protocols/gg/gg.c:1617
@@ -1368,12 +1521,12 @@
 #: ../libpurple/protocols/novell/novell.c:2941
 #: ../libpurple/protocols/novell/novell.c:2947
 #: ../libpurple/protocols/novell/novell.c:2953
-#: ../libpurple/protocols/oscar/oscar.c:5543
-#: ../libpurple/protocols/oscar/oscar.c:5761
-#: ../libpurple/protocols/oscar/oscar.c:5775
-#: ../libpurple/protocols/oscar/oscar.c:5791
-#: ../libpurple/protocols/oscar/oscar.c:5798
-#: ../libpurple/protocols/oscar/oscar.c:5805
+#: ../libpurple/protocols/oscar/oscar.c:5502
+#: ../libpurple/protocols/oscar/oscar.c:5720
+#: ../libpurple/protocols/oscar/oscar.c:5734
+#: ../libpurple/protocols/oscar/oscar.c:5750
+#: ../libpurple/protocols/oscar/oscar.c:5757
+#: ../libpurple/protocols/oscar/oscar.c:5764
 #: ../libpurple/protocols/sametime/sametime.c:3287
 #: ../libpurple/protocols/sametime/sametime.c:3293
 #: ../libpurple/protocols/sametime/sametime.c:3299
@@ -1381,8 +1534,8 @@
 #: ../libpurple/protocols/silc/buddy.c:1551
 #: ../libpurple/protocols/silc10/buddy.c:1551
 #: ../libpurple/protocols/simple/simple.c:246
-#: ../libpurple/protocols/yahoo/yahoo.c:3586
-#: ../libpurple/protocols/yahoo/yahoo.c:3592
+#: ../libpurple/protocols/yahoo/yahoo.c:3651
+#: ../libpurple/protocols/yahoo/yahoo.c:3657
 #: ../libpurple/protocols/zephyr/zephyr.c:2337
 #: ../pidgin/gtksavedstatuses.c:525 ../pidgin/gtksavedstatuses.c:1009
 msgid "Message"
@@ -1434,7 +1587,11 @@
 msgid "Save & Use"
 msgstr "Gardar e usar"
 
-#: ../finch/gntui.c:84
+#: ../finch/gntui.c:87 ../pidgin/gtkprefs.c:2030
+msgid "Sounds"
+msgstr "Sons"
+
+#: ../finch/gntui.c:89
 msgid "Statuses"
 msgstr "Estados"
 
@@ -1596,7 +1753,7 @@
 msgstr "Falta o complemento de protocolo para %s"
 
 #: ../libpurple/account.c:1012 ../libpurple/connection.c:107
-#: ../pidgin/gtkblist.c:4020
+#: ../pidgin/gtkblist.c:4019
 msgid "Connection Error"
 msgstr "Erro de conexión"
 
@@ -1644,13 +1801,13 @@
 #: ../libpurple/protocols/jabber/buddy.c:1462
 #: ../libpurple/protocols/jabber/buddy.c:1479
 #: ../libpurple/protocols/novell/novell.c:2831
-#: ../libpurple/protocols/qq/qq.c:230 ../pidgin/gtkft.c:159
+#: ../libpurple/protocols/qq/qq.c:232 ../pidgin/gtkft.c:159
 msgid "Unknown"
 msgstr "Descoñecido"
 
 #: ../libpurple/blist.c:521 ../libpurple/blist.c:1289
 #: ../libpurple/blist.c:1518 ../libpurple/protocols/jabber/roster.c:68
-#: ../pidgin/gtkblist.c:5322 ../pidgin/plugins/gevolution/gevolution.c:96
+#: ../pidgin/gtkblist.c:5321 ../pidgin/plugins/gevolution/gevolution.c:96
 #: ../pidgin/plugins/gevolution/gevo-util.c:64
 msgid "Buddies"
 msgstr "Contactos"
@@ -2102,15 +2259,15 @@
 msgid "Old flat format"
 msgstr "Formato plano antigo"
 
-#: ../libpurple/log.c:837
+#: ../libpurple/log.c:838
 msgid "Logging of this conversation failed."
 msgstr "O rexistro desta conversa fallou."
 
-#: ../libpurple/log.c:1280
+#: ../libpurple/log.c:1281
 msgid "XML"
 msgstr "XML"
 
-#: ../libpurple/log.c:1364
+#: ../libpurple/log.c:1365
 #, c-format
 msgid ""
 "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s &lt;AUTO-"
@@ -2119,7 +2276,7 @@
 "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s &lt;RESPOSTA "
 "AUTOMÁTICA&gt;:</b></font> %s<br/>\n"
 
-#: ../libpurple/log.c:1366
+#: ../libpurple/log.c:1367
 #, c-format
 msgid ""
 "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s &lt;AUTO-"
@@ -2128,16 +2285,16 @@
 "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s &lt;RESPOSTA "
 "AUTOMÁTICA&gt;:</b></font> %s<br/>\n"
 
-#: ../libpurple/log.c:1424 ../libpurple/log.c:1557
+#: ../libpurple/log.c:1425 ../libpurple/log.c:1558
 msgid "<font color=\"red\"><b>Unable to find log path!</b></font>"
 msgstr "<font color=\"red\"><b>Non se puido encontrar o camiño do rexistro!</b></font>"
 
-#: ../libpurple/log.c:1436 ../libpurple/log.c:1566
+#: ../libpurple/log.c:1437 ../libpurple/log.c:1567
 #, c-format
 msgid "<font color=\"red\"><b>Could not read file: %s</b></font>"
 msgstr "<font color=\"red\"><b>Non se puido ler o ficheiro: %s</b></font>"
 
-#: ../libpurple/log.c:1498
+#: ../libpurple/log.c:1499
 #, c-format
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <RESPOSTA AUTOMÁTICA>: %s\n"
@@ -2228,13 +2385,13 @@
 
 #: ../libpurple/plugins/autoaccept.c:165 ../libpurple/plugins/idle.c:170
 #: ../libpurple/plugins/idle.c:204 ../libpurple/plugins/idle.c:230
-#: ../libpurple/protocols/oscar/oscar.c:1454
-#: ../libpurple/protocols/oscar/oscar.c:2247
-#: ../libpurple/protocols/oscar/oscar.c:2294
-#: ../libpurple/protocols/oscar/oscar.c:5875
-#: ../libpurple/protocols/oscar/oscar.c:5930
-#: ../libpurple/protocols/oscar/oscar.c:6156
-#: ../libpurple/protocols/oscar/oscar.c:6226 ../libpurple/request.h:1387
+#: ../libpurple/protocols/oscar/oscar.c:1451
+#: ../libpurple/protocols/oscar/oscar.c:2243
+#: ../libpurple/protocols/oscar/oscar.c:2292
+#: ../libpurple/protocols/oscar/oscar.c:5834
+#: ../libpurple/protocols/oscar/oscar.c:5889
+#: ../libpurple/protocols/oscar/oscar.c:6115
+#: ../libpurple/protocols/oscar/oscar.c:6185 ../libpurple/request.h:1387
 #: ../libpurple/request.h:1397
 msgid "_Cancel"
 msgstr "_Cancelar"
@@ -2297,18 +2454,18 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../libpurple/plugins/buddynote.c:90
+#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:71
 msgid "Buddy Notes"
 msgstr "Anotacións de contactos"
 
 #. *< name
 #. *< version
-#: ../libpurple/plugins/buddynote.c:92
+#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:73
 msgid "Store notes on particular buddies."
 msgstr "Almacenar anotacións de contactos particulares."
 
 #. *< summary
-#: ../libpurple/plugins/buddynote.c:93
+#: ../libpurple/plugins/buddynote.c:93 ../pidgin/plugins/gtkbuddynote.c:74
 msgid "Adds the option to store notes for buddies on your buddy list."
 msgstr "Engade a opción para almacenar anotacións para os contactos da súa lista de amigos."
 
@@ -2502,110 +2659,110 @@
 #. * offset is way off.  The user should never really see it, but
 #. * it's here just in case.  The parens are to make it clear it's
 #. * not a real timezone.
-#: ../libpurple/plugins/log_reader.c:492
+#: ../libpurple/plugins/log_reader.c:493
 msgid "(UTC)"
 msgstr "(UTC)"
 
-#: ../libpurple/plugins/log_reader.c:1574
+#: ../libpurple/plugins/log_reader.c:1577
 msgid "User is offline."
 msgstr "O usuario está desconectado."
 
-#: ../libpurple/plugins/log_reader.c:1580
+#: ../libpurple/plugins/log_reader.c:1583
 msgid "Auto-response sent:"
 msgstr "Resposta automática enviada:"
 
-#: ../libpurple/plugins/log_reader.c:1590
 #: ../libpurple/plugins/log_reader.c:1593
+#: ../libpurple/plugins/log_reader.c:1596
 #: ../libpurple/plugins/statenotify.c:80
 #, c-format
 msgid "%s has signed off."
 msgstr "%s desconectouse."
 
-#: ../libpurple/plugins/log_reader.c:1607
+#: ../libpurple/plugins/log_reader.c:1610
 msgid "One or more messages may have been undeliverable."
 msgstr "Unha ou máis mensaxes puideron non chegar ao destino."
 
-#: ../libpurple/plugins/log_reader.c:1617
+#: ../libpurple/plugins/log_reader.c:1620
 msgid "You were disconnected from the server."
 msgstr "Foi desconectado do servidor."
 
-#: ../libpurple/plugins/log_reader.c:1625
+#: ../libpurple/plugins/log_reader.c:1628
 msgid ""
 "You are currently disconnected. Messages will not be received unless you are "
 "logged in."
 msgstr "Está actualmente desconectado. As mensaxes non se recibirán a non ser que inicie sesión."
 
-#: ../libpurple/plugins/log_reader.c:1640
+#: ../libpurple/plugins/log_reader.c:1643
 msgid "Message could not be sent because the maximum length was exceeded."
 msgstr "Non se puido enviar a mensaxe porque excedeu a lonxitude máxima."
 
-#: ../libpurple/plugins/log_reader.c:1645
+#: ../libpurple/plugins/log_reader.c:1648
 msgid "Message could not be sent."
 msgstr "Non se puido enviar a mensaxe."
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2344
-#: ../libpurple/plugins/log_reader.c:2467
+#: ../libpurple/plugins/log_reader.c:2349
+#: ../libpurple/plugins/log_reader.c:2472
 msgid "Adium"
 msgstr "Adium"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2357
-#: ../libpurple/plugins/log_reader.c:2472
+#: ../libpurple/plugins/log_reader.c:2362
+#: ../libpurple/plugins/log_reader.c:2477
 msgid "Fire"
 msgstr "Fire"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2369
-#: ../libpurple/plugins/log_reader.c:2476
+#: ../libpurple/plugins/log_reader.c:2374
+#: ../libpurple/plugins/log_reader.c:2481
 msgid "Messenger Plus!"
 msgstr "Messenger Plus!"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2383
-#: ../libpurple/plugins/log_reader.c:2481
+#: ../libpurple/plugins/log_reader.c:2388
+#: ../libpurple/plugins/log_reader.c:2486
 msgid "QIP"
 msgstr "QIP"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2395
-#: ../libpurple/plugins/log_reader.c:2485
+#: ../libpurple/plugins/log_reader.c:2400
+#: ../libpurple/plugins/log_reader.c:2490
 msgid "MSN Messenger"
 msgstr "MSN Messenger"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2407
-#: ../libpurple/plugins/log_reader.c:2489
+#: ../libpurple/plugins/log_reader.c:2412
+#: ../libpurple/plugins/log_reader.c:2494
 msgid "Trillian"
 msgstr "Trillian"
 
 #. Add general preferences.
-#: ../libpurple/plugins/log_reader.c:2449
+#: ../libpurple/plugins/log_reader.c:2454
 msgid "General Log Reading Configuration"
 msgstr "Configuración de lectura de rexistro xeral"
 
-#: ../libpurple/plugins/log_reader.c:2453
+#: ../libpurple/plugins/log_reader.c:2458
 msgid "Fast size calculations"
 msgstr "Cálculos de tamaño rápido"
 
-#: ../libpurple/plugins/log_reader.c:2457
+#: ../libpurple/plugins/log_reader.c:2462
 msgid "Use name heuristics"
 msgstr "Usar nomes heurísticos"
 
 #. Add Log Directory preferences.
-#: ../libpurple/plugins/log_reader.c:2463
+#: ../libpurple/plugins/log_reader.c:2468
 msgid "Log Directory"
 msgstr "Directorio de rexistro"
 
@@ -2615,19 +2772,19 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../libpurple/plugins/log_reader.c:2518
+#: ../libpurple/plugins/log_reader.c:2523
 msgid "Log Reader"
 msgstr "Lector de rexistro"
 
 #. *< name
 #. *< version
 #. * summary
-#: ../libpurple/plugins/log_reader.c:2522
+#: ../libpurple/plugins/log_reader.c:2527
 msgid "Includes other IM clients' logs in the log viewer."
 msgstr "Incluír outros rexistros de clientes de MI no visor de rexistro."
 
 #. * description
-#: ../libpurple/plugins/log_reader.c:2526
+#: ../libpurple/plugins/log_reader.c:2531
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
 "Currently, this includes Adium, MSN Messenger, and Trillian.\n"
@@ -2977,25 +3134,43 @@
 msgid "Unable to establish connection with the local mDNS server.  Is it running?"
 msgstr "Imposible establecer a conexión co servidor local mDNS. Estase a executar?"
 
-#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
-#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
-#. Away stuff
-#: ../libpurple/protocols/bonjour/bonjour.c:294
-#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530
-#: ../libpurple/protocols/irc/msgs.c:310
-#: ../libpurple/protocols/jabber/buddy.c:1472
-#: ../libpurple/protocols/novell/novell.c:2819
-#: ../libpurple/protocols/oscar/oscar.c:733
-#: ../libpurple/protocols/oscar/oscar.c:4545
-#: ../libpurple/protocols/oscar/oscar.c:5621
-#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/silc/buddy.c:1476
-#: ../libpurple/protocols/silc10/buddy.c:1476
-#: ../libpurple/protocols/yahoo/yahoo.c:3488
-#: ../libpurple/protocols/yahoo/yahoo.c:3562 ../libpurple/status.c:157
-#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1932
-#: ../pidgin/gtkstatusbox.c:1056
-msgid "Away"
-msgstr "Ausente"
+#. Creating the options for the protocol
+#: ../libpurple/protocols/bonjour/bonjour.c:344
+#: ../libpurple/protocols/bonjour/bonjour.c:614
+#: ../libpurple/protocols/gg/gg.c:627
+#: ../libpurple/protocols/jabber/jabber.c:828
+msgid "First name"
+msgstr "Nome"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:346
+#: ../libpurple/protocols/bonjour/bonjour.c:617
+#: ../libpurple/protocols/gg/gg.c:622
+#: ../libpurple/protocols/jabber/jabber.c:833
+msgid "Last name"
+msgstr "Apelidos"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:350
+#: ../libpurple/protocols/jabber/buddy.c:283
+#: ../libpurple/protocols/jabber/buddy.c:940
+#: ../libpurple/protocols/jabber/buddy.c:948
+#: ../libpurple/protocols/jabber/buddy.c:1629
+#: ../libpurple/protocols/silc/ops.c:1041
+#: ../libpurple/protocols/silc/util.c:555
+#: ../libpurple/protocols/silc10/ops.c:1075
+#: ../libpurple/protocols/silc10/util.c:551
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1061
+msgid "E-Mail"
+msgstr "Correo electrónico"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:353
+#: ../libpurple/protocols/bonjour/bonjour.c:623
+msgid "AIM Account"
+msgstr "Conta de AIM"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:356
+#: ../libpurple/protocols/bonjour/bonjour.c:626
+msgid "XMPP Account"
+msgstr "Conta de XMPP"
 
 #. *< type
 #. *< ui_requirement
@@ -3007,38 +3182,25 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../libpurple/protocols/bonjour/bonjour.c:425
-#: ../libpurple/protocols/bonjour/bonjour.c:427
+#: ../libpurple/protocols/bonjour/bonjour.c:460
+#: ../libpurple/protocols/bonjour/bonjour.c:462
 msgid "Bonjour Protocol Plugin"
 msgstr "Complemento de protocolo Bonjour"
 
-#: ../libpurple/protocols/bonjour/bonjour.c:470
-#: ../libpurple/protocols/bonjour/bonjour.c:477
-#: ../libpurple/protocols/bonjour/bonjour.c:526
+#: ../libpurple/protocols/bonjour/bonjour.c:505
+#: ../libpurple/protocols/bonjour/bonjour.c:512
+#: ../libpurple/protocols/bonjour/bonjour.c:561
 msgid "Purple Person"
 msgstr "Persoa Purple"
 
 #. Creating the user splits
-#: ../libpurple/protocols/bonjour/bonjour.c:575
+#: ../libpurple/protocols/bonjour/bonjour.c:610
 #: ../libpurple/protocols/silc/silc.c:1007
 #: ../libpurple/protocols/silc10/silc.c:918
 msgid "Hostname"
 msgstr "Nome do servidor"
 
-#. Creating the options for the protocol
-#: ../libpurple/protocols/bonjour/bonjour.c:579
-#: ../libpurple/protocols/gg/gg.c:627
-#: ../libpurple/protocols/jabber/jabber.c:828
-msgid "First name"
-msgstr "Nome"
-
-#: ../libpurple/protocols/bonjour/bonjour.c:582
-#: ../libpurple/protocols/gg/gg.c:622
-#: ../libpurple/protocols/jabber/jabber.c:833
-msgid "Last name"
-msgstr "Apelidos"
-
-#: ../libpurple/protocols/bonjour/bonjour.c:585
+#: ../libpurple/protocols/bonjour/bonjour.c:620
 #: ../libpurple/protocols/gg/gg.c:472
 #: ../libpurple/protocols/jabber/jabber.c:818
 #: ../libpurple/protocols/silc/silc.c:770
@@ -3048,42 +3210,34 @@
 msgid "E-mail"
 msgstr "Correo electrónico"
 
-#: ../libpurple/protocols/bonjour/bonjour.c:588
-msgid "AIM Account"
-msgstr "Conta de AIM"
-
-#: ../libpurple/protocols/bonjour/bonjour.c:591
-msgid "XMPP Account"
-msgstr "Conta de XMPP"
-
 #: ../libpurple/protocols/bonjour/bonjour.h:33
 msgid "Bonjour"
 msgstr "Bonjour"
 
-#: ../libpurple/protocols/bonjour/jabber.c:381
+#: ../libpurple/protocols/bonjour/jabber.c:383
 #, c-format
 msgid "%s has closed the conversation."
 msgstr "%s pechou a conversa."
 
-#: ../libpurple/protocols/bonjour/jabber.c:433
-#: ../libpurple/protocols/bonjour/jabber.c:656
-#: ../libpurple/protocols/bonjour/jabber.c:674
+#: ../libpurple/protocols/bonjour/jabber.c:435
+#: ../libpurple/protocols/bonjour/jabber.c:658
+#: ../libpurple/protocols/bonjour/jabber.c:676
 msgid "Unable to send the message, the conversation couldn't be started."
 msgstr "Non se puido enviar a mensaxe, non se puido iniciar a conversa."
 
-#: ../libpurple/protocols/bonjour/jabber.c:579
+#: ../libpurple/protocols/bonjour/jabber.c:581
 msgid "Cannot open socket"
 msgstr "Non se puido abrir o conectador"
 
-#: ../libpurple/protocols/bonjour/jabber.c:587
+#: ../libpurple/protocols/bonjour/jabber.c:589
 msgid "Error setting socket options"
 msgstr "Erro ao establecer as opcións do conectador"
 
-#: ../libpurple/protocols/bonjour/jabber.c:611
+#: ../libpurple/protocols/bonjour/jabber.c:613
 msgid "Could not bind socket to port"
 msgstr "Non se pode ligar o conectador ao porto"
 
-#: ../libpurple/protocols/bonjour/jabber.c:619
+#: ../libpurple/protocols/bonjour/jabber.c:621
 msgid "Could not listen on socket"
 msgstr "Non se pode escoitar o conectador"
 
@@ -3190,8 +3344,8 @@
 #: ../libpurple/protocols/gg/gg.c:637 ../libpurple/protocols/gg/gg.c:1049
 #: ../libpurple/protocols/gg/gg.c:1121
 #: ../libpurple/protocols/jabber/jabber.c:843
-#: ../libpurple/protocols/oscar/oscar.c:3798
-#: ../libpurple/protocols/oscar/oscar.c:3811
+#: ../libpurple/protocols/oscar/oscar.c:3757
+#: ../libpurple/protocols/oscar/oscar.c:3770
 #: ../libpurple/protocols/qq/buddy_info.c:49
 msgid "City"
 msgstr "Cidade"
@@ -3201,10 +3355,10 @@
 msgstr "Data de nacemento"
 
 #: ../libpurple/protocols/gg/gg.c:645 ../libpurple/protocols/msn/msn.c:1558
-#: ../libpurple/protocols/oscar/oscar.c:3741
+#: ../libpurple/protocols/oscar/oscar.c:3700
 #: ../libpurple/protocols/qq/buddy_info.c:46
-#: ../libpurple/protocols/qq/qq.c:224 ../libpurple/protocols/qq/qq.c:227
-#: ../libpurple/protocols/qq/qq.c:230 ../libpurple/protocols/qq/qq.c:234
+#: ../libpurple/protocols/qq/qq.c:226 ../libpurple/protocols/qq/qq.c:229
+#: ../libpurple/protocols/qq/qq.c:232 ../libpurple/protocols/qq/qq.c:236
 #: ../libpurple/protocols/yahoo/yahoo_profile.c:1091
 msgid "Gender"
 msgstr "Sexo"
@@ -3214,16 +3368,16 @@
 msgstr "Home ou muller"
 
 #: ../libpurple/protocols/gg/gg.c:647
-#: ../libpurple/protocols/oscar/oscar.c:3741
+#: ../libpurple/protocols/oscar/oscar.c:3700
 #: ../libpurple/protocols/qq/buddy_info.c:83
-#: ../libpurple/protocols/qq/qq.c:224
+#: ../libpurple/protocols/qq/qq.c:226
 msgid "Male"
 msgstr "Home"
 
 #: ../libpurple/protocols/gg/gg.c:648
-#: ../libpurple/protocols/oscar/oscar.c:3741
+#: ../libpurple/protocols/oscar/oscar.c:3700
 #: ../libpurple/protocols/qq/buddy_info.c:84
-#: ../libpurple/protocols/qq/qq.c:227
+#: ../libpurple/protocols/qq/qq.c:229
 msgid "Female"
 msgstr "Muller"
 
@@ -3283,12 +3437,13 @@
 #: ../libpurple/protocols/gg/gg.c:1003
 #: ../libpurple/protocols/jabber/buddy.c:1466
 #: ../libpurple/protocols/novell/novell.c:2828
-#: ../libpurple/protocols/oscar/oscar.c:828
-#: ../libpurple/protocols/oscar/oscar.c:5593
+#: ../libpurple/protocols/oscar/oscar.c:827
+#: ../libpurple/protocols/oscar/oscar.c:5552
 #: ../libpurple/protocols/qq/qq.c:170 ../libpurple/protocols/qq/qq.c:177
-#: ../libpurple/protocols/yahoo/yahoo.c:2934 ../libpurple/status.c:153
-#: ../pidgin/gtkblist.c:3079 ../pidgin/gtkblist.c:3420
-#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1059
+#: ../libpurple/protocols/qq/qq.c:292
+#: ../libpurple/protocols/yahoo/yahoo.c:2999 ../libpurple/status.c:153
+#: ../pidgin/gtkblist.c:3082 ../pidgin/gtkblist.c:3419
+#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1060
 msgid "Offline"
 msgstr "Desconectado"
 
@@ -3297,21 +3452,42 @@
 #: ../libpurple/protocols/msn/state.c:29 ../libpurple/protocols/msn/state.c:30
 #: ../libpurple/protocols/msn/state.c:37 ../libpurple/protocols/msn/state.c:38
 #: ../libpurple/protocols/novell/novell.c:2816
-#: ../libpurple/protocols/yahoo/yahoo.c:2936 ../libpurple/status.c:154
-#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1055
+#: ../libpurple/protocols/qq/qq.c:280
+#: ../libpurple/protocols/yahoo/yahoo.c:3001 ../libpurple/status.c:154
+#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1056
 msgid "Available"
 msgstr "Dispoñible"
 
+#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
+#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
+#. Away stuff
+#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530
+#: ../libpurple/protocols/irc/msgs.c:310
+#: ../libpurple/protocols/jabber/buddy.c:1472
+#: ../libpurple/protocols/novell/novell.c:2819
+#: ../libpurple/protocols/oscar/oscar.c:732
+#: ../libpurple/protocols/oscar/oscar.c:4504
+#: ../libpurple/protocols/oscar/oscar.c:5580
+#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/qq/qq.c:284
+#: ../libpurple/protocols/silc/buddy.c:1476
+#: ../libpurple/protocols/silc10/buddy.c:1476
+#: ../libpurple/protocols/yahoo/yahoo.c:3553
+#: ../libpurple/protocols/yahoo/yahoo.c:3627 ../libpurple/status.c:157
+#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1934
+#: ../pidgin/gtkstatusbox.c:1057
+msgid "Away"
+msgstr "Ausente"
+
 #: ../libpurple/protocols/gg/gg.c:1038 ../libpurple/protocols/gg/gg.c:1112
-#: ../libpurple/protocols/oscar/oscar.c:2671
-#: ../libpurple/protocols/oscar/oscar.c:3708
+#: ../libpurple/protocols/oscar/oscar.c:2669
+#: ../libpurple/protocols/oscar/oscar.c:3667
 msgid "UIN"
 msgstr "UIN"
 
 #: ../libpurple/protocols/gg/gg.c:1041 ../libpurple/protocols/gg/gg.c:1115
 #: ../libpurple/protocols/jabber/buddy.c:1623
 #: ../libpurple/protocols/jabber/buddy.c:1799
-#: ../libpurple/protocols/oscar/oscar.c:3719
+#: ../libpurple/protocols/oscar/oscar.c:3678
 #: ../libpurple/protocols/silc/ops.c:990
 #: ../libpurple/protocols/silc10/ops.c:1024
 msgid "First Name"
@@ -3322,7 +3498,7 @@
 msgstr "Data de nacemento"
 
 #: ../libpurple/protocols/gg/gg.c:1106 ../libpurple/protocols/gg/gg.c:1175
-#: ../libpurple/protocols/oscar/oscar.c:3920
+#: ../libpurple/protocols/oscar/oscar.c:3879
 msgid "Unable to display the search results."
 msgstr "Non se poden mostrar os resultados da busca."
 
@@ -3530,11 +3706,11 @@
 #: ../libpurple/protocols/jabber/jabber.c:1046
 #: ../libpurple/protocols/msn/session.c:345
 #: ../libpurple/protocols/novell/novell.c:2182
-#: ../libpurple/protocols/oscar/oscar.c:1288
+#: ../libpurple/protocols/oscar/oscar.c:1285
 #: ../libpurple/protocols/qq/qq.c:136
 #: ../libpurple/protocols/sametime/sametime.c:3724
 #: ../libpurple/protocols/simple/simple.c:1676
-#: ../libpurple/protocols/yahoo/yahoo.c:2779
+#: ../libpurple/protocols/yahoo/yahoo.c:2844
 #: ../libpurple/protocols/zephyr/zephyr.c:1621 ../pidgin/gtkstatusbox.c:661
 msgid "Connecting"
 msgstr "Conectando"
@@ -3552,7 +3728,7 @@
 msgstr "Non se puido crear o conectador "
 
 #: ../libpurple/protocols/irc/irc.c:416
-#: ../libpurple/protocols/oscar/oscar.c:1284
+#: ../libpurple/protocols/oscar/oscar.c:1281
 msgid "Couldn't connect to host"
 msgstr "Non se puido conectar ao servidor"
 
@@ -3607,8 +3783,8 @@
 #. host to connect to
 #: ../libpurple/protocols/irc/irc.c:942 ../libpurple/protocols/irc/msgs.c:323
 #: ../libpurple/protocols/msn/msn.c:2154
-#: ../libpurple/protocols/oscar/oscar.c:6660
-#: ../libpurple/protocols/qq/qq.c:753
+#: ../libpurple/protocols/oscar/oscar.c:6619
+#: ../libpurple/protocols/qq/qq.c:755
 #: ../libpurple/protocols/sametime/sametime.c:5728
 #: ../libpurple/protocols/silc/ops.c:1249
 #: ../libpurple/protocols/silc/ops.c:1341
@@ -3621,8 +3797,8 @@
 
 #. port to connect to
 #: ../libpurple/protocols/irc/irc.c:945 ../libpurple/protocols/msn/msn.c:2159
-#: ../libpurple/protocols/oscar/oscar.c:6663
-#: ../libpurple/protocols/qq/qq.c:756
+#: ../libpurple/protocols/oscar/oscar.c:6622
+#: ../libpurple/protocols/qq/qq.c:758
 #: ../libpurple/protocols/sametime/sametime.c:5733
 #: ../libpurple/protocols/silc/silc.c:1918
 #: ../libpurple/protocols/silc10/silc.c:1861
@@ -3692,7 +3868,7 @@
 msgstr " <i>(identificado)</i>"
 
 #: ../libpurple/protocols/irc/msgs.c:303
-#: ../libpurple/protocols/oscar/oscar.c:3709
+#: ../libpurple/protocols/oscar/oscar.c:3668
 #: ../libpurple/protocols/silc/ops.c:1418
 #: ../libpurple/protocols/silc10/ops.c:1414
 msgid "Nick"
@@ -3972,7 +4148,7 @@
 msgstr "names [canle]:  Obter a lista dos usuarios que están na canle."
 
 #: ../libpurple/protocols/irc/parse.c:137
-#: ../libpurple/protocols/jabber/jabber.c:1832
+#: ../libpurple/protocols/jabber/jabber.c:1830
 msgid "nick &lt;new nickname&gt;:  Change your nickname."
 msgstr "nick &lt;novo alias&gt;:  Cambia o seu alias."
 
@@ -4226,18 +4402,6 @@
 msgid "Telephone"
 msgstr "Teléfono"
 
-#: ../libpurple/protocols/jabber/buddy.c:283
-#: ../libpurple/protocols/jabber/buddy.c:940
-#: ../libpurple/protocols/jabber/buddy.c:948
-#: ../libpurple/protocols/jabber/buddy.c:1629
-#: ../libpurple/protocols/silc/ops.c:1041
-#: ../libpurple/protocols/silc/util.c:555
-#: ../libpurple/protocols/silc10/ops.c:1075
-#: ../libpurple/protocols/silc10/util.c:551
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1061
-msgid "E-Mail"
-msgstr "Correo electrónico"
-
 #: ../libpurple/protocols/jabber/buddy.c:284
 #: ../libpurple/protocols/jabber/buddy.c:963
 msgid "Organization Name"
@@ -4256,13 +4420,13 @@
 #: ../libpurple/protocols/jabber/buddy.c:288
 #: ../libpurple/protocols/jabber/buddy.c:859
 #: ../libpurple/protocols/msn/msn.c:1627
-#: ../libpurple/protocols/oscar/oscar.c:3758
+#: ../libpurple/protocols/oscar/oscar.c:3717
 msgid "Birthday"
 msgstr "Ano de nacemento"
 
 #: ../libpurple/protocols/jabber/buddy.c:289
 #: ../libpurple/protocols/jabber/buddy.c:979
-#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3090
+#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3093
 #: ../pidgin/gtkprefs.c:738
 msgid "Description"
 msgstr "Descrición"
@@ -4313,8 +4477,8 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:879
 #: ../libpurple/protocols/jabber/jabber.c:838
-#: ../libpurple/protocols/oscar/oscar.c:3797
-#: ../libpurple/protocols/oscar/oscar.c:3810
+#: ../libpurple/protocols/oscar/oscar.c:3756
+#: ../libpurple/protocols/oscar/oscar.c:3769
 #: ../libpurple/protocols/qq/buddy_info.c:56
 #: ../libpurple/protocols/silc/ops.c:1030
 #: ../libpurple/protocols/silc10/ops.c:1064
@@ -4368,8 +4532,8 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:1476
 #: ../libpurple/protocols/jabber/jabber.c:1282
-#: ../libpurple/protocols/oscar/oscar.c:727
-#: ../libpurple/protocols/oscar/oscar.c:5797
+#: ../libpurple/protocols/oscar/oscar.c:726
+#: ../libpurple/protocols/oscar/oscar.c:5756
 #: ../libpurple/protocols/sametime/sametime.c:3298
 msgid "Do Not Disturb"
 msgstr "Non molestar"
@@ -4380,7 +4544,7 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:1625
 #: ../libpurple/protocols/jabber/buddy.c:1804
-#: ../libpurple/protocols/oscar/oscar.c:3720
+#: ../libpurple/protocols/oscar/oscar.c:3679
 msgid "Last Name"
 msgstr "Apelidos"
 
@@ -4418,8 +4582,8 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:1814
 #: ../libpurple/protocols/novell/novell.c:1488
-#: ../libpurple/protocols/oscar/oscar.c:3723
-#: ../libpurple/protocols/oscar/oscar.c:3732
+#: ../libpurple/protocols/oscar/oscar.c:3682
+#: ../libpurple/protocols/oscar/oscar.c:3691
 msgid "E-Mail Address"
 msgstr "Enderezo de correo electrónico"
 
@@ -4432,9 +4596,9 @@
 #: ../libpurple/protocols/jabber/buddy.c:1825
 #: ../libpurple/protocols/qq/group.c:123
 #: ../libpurple/protocols/qq/group_im.c:147
-#: ../libpurple/protocols/qq/sys_msg.c:176
-#: ../libpurple/protocols/qq/sys_msg.c:253
-#: ../libpurple/protocols/qq/sys_msg.c:271
+#: ../libpurple/protocols/qq/sys_msg.c:174
+#: ../libpurple/protocols/qq/sys_msg.c:250
+#: ../libpurple/protocols/qq/sys_msg.c:268
 #: ../libpurple/protocols/sametime/sametime.c:5612
 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:470
 #: ../pidgin/plugins/gevolution/assoc-buddy.c:356
@@ -4458,7 +4622,7 @@
 msgstr "Buscar directorio"
 
 #: ../libpurple/protocols/jabber/chat.c:41
-#: ../libpurple/protocols/oscar/oscar.c:5283
+#: ../libpurple/protocols/oscar/oscar.c:5242
 #: ../libpurple/protocols/yahoo/yahoochat.c:962
 msgid "_Room:"
 msgstr "_Sala:"
@@ -4566,8 +4730,8 @@
 
 #: ../libpurple/protocols/jabber/jabber.c:467
 #: ../libpurple/protocols/oscar/flap_connection.c:394
-#: ../libpurple/protocols/yahoo/yahoo.c:2398
-#: ../libpurple/protocols/yahoo/yahoo.c:2430
+#: ../libpurple/protocols/yahoo/yahoo.c:2463
+#: ../libpurple/protocols/yahoo/yahoo.c:2495
 #, c-format
 msgid ""
 "Could not establish a connection with the server:\n"
@@ -4615,8 +4779,8 @@
 msgstr "Xa está rexistrado"
 
 #: ../libpurple/protocols/jabber/jabber.c:848
-#: ../libpurple/protocols/oscar/oscar.c:3799
-#: ../libpurple/protocols/oscar/oscar.c:3812
+#: ../libpurple/protocols/oscar/oscar.c:3758
+#: ../libpurple/protocols/oscar/oscar.c:3771
 msgid "State"
 msgstr "Estado"
 
@@ -4669,8 +4833,8 @@
 #: ../libpurple/protocols/jabber/jabber.c:1502
 #: ../libpurple/protocols/jabber/jabber.c:1543
 #: ../libpurple/protocols/jabber/jabber.c:1579
-#: ../libpurple/protocols/oscar/oscar.c:826
-#: ../libpurple/protocols/oscar/oscar.c:5591
+#: ../libpurple/protocols/oscar/oscar.c:825
+#: ../libpurple/protocols/oscar/oscar.c:5550
 msgid "Not Authorized"
 msgstr "Non autorizado"
 
@@ -4731,7 +4895,7 @@
 msgstr "Introduza o novo contrasinal"
 
 #: ../libpurple/protocols/jabber/jabber.c:1394
-#: ../libpurple/protocols/oscar/oscar.c:6377
+#: ../libpurple/protocols/oscar/oscar.c:6336
 #: ../libpurple/protocols/silc/silc.c:1093
 #: ../libpurple/protocols/silc10/silc.c:1004
 msgid "Set User Info..."
@@ -4739,7 +4903,7 @@
 
 #. if (js->protocol_options & CHANGE_PASSWORD) {
 #: ../libpurple/protocols/jabber/jabber.c:1399
-#: ../libpurple/protocols/oscar/oscar.c:6388
+#: ../libpurple/protocols/oscar/oscar.c:6347
 #: ../libpurple/protocols/silc/silc.c:1089
 #: ../libpurple/protocols/silc10/silc.c:1000
 msgid "Change Password..."
@@ -4969,41 +5133,41 @@
 msgid "Unknown role: \"%s\""
 msgstr "Papel descoñecido: \"%s\""
 
-#: ../libpurple/protocols/jabber/jabber.c:1737
+#: ../libpurple/protocols/jabber/jabber.c:1735
 #, c-format
 msgid "Unable to set role \"%s\" for user: %s"
 msgstr "Non se puido establecer o papel \"%s\" para o usuario: %s"
 
-#: ../libpurple/protocols/jabber/jabber.c:1790
+#: ../libpurple/protocols/jabber/jabber.c:1788
 #, c-format
 msgid "Unable to kick user %s"
 msgstr "Non puido expulsar o usuario %s"
 
-#: ../libpurple/protocols/jabber/jabber.c:1824
+#: ../libpurple/protocols/jabber/jabber.c:1822
 msgid "config:  Configure a chat room."
 msgstr "config:  Configurar unha sala de conversa."
 
-#: ../libpurple/protocols/jabber/jabber.c:1828
+#: ../libpurple/protocols/jabber/jabber.c:1826
 msgid "configure:  Configure a chat room."
 msgstr "configure:  Configurar unha sala de conversa."
 
-#: ../libpurple/protocols/jabber/jabber.c:1837
+#: ../libpurple/protocols/jabber/jabber.c:1835
 msgid "part [room]:  Leave the room."
 msgstr "part [sala]:  Abandonar a sala."
 
-#: ../libpurple/protocols/jabber/jabber.c:1842
+#: ../libpurple/protocols/jabber/jabber.c:1840
 msgid "register:  Register with a chat room."
 msgstr "register: Rexistrarse nunha sala de conversa."
 
-#: ../libpurple/protocols/jabber/jabber.c:1848
+#: ../libpurple/protocols/jabber/jabber.c:1846
 msgid "topic [new topic]:  View or change the topic."
 msgstr "topic [novo asunto]:  Ver ou cambiar o asunto."
 
-#: ../libpurple/protocols/jabber/jabber.c:1854
+#: ../libpurple/protocols/jabber/jabber.c:1852
 msgid "ban &lt;user&gt; [room]:  Ban a user from the room."
 msgstr "ban &lt;usuario&gt; [sala]:  Vedar un usuario da sala."
 
-#: ../libpurple/protocols/jabber/jabber.c:1860
+#: ../libpurple/protocols/jabber/jabber.c:1858
 msgid ""
 "affiliate &lt;user&gt; &lt;owner|admin|member|outcast|none&gt;: Set a user's "
 "affiliation with the room."
@@ -5011,7 +5175,7 @@
 "affiliate &lt;usuario&gt; &lt;owner|admin|member|outcast|none&gt;: "
 "Establecer a afiliación dun usuario coa sala."
 
-#: ../libpurple/protocols/jabber/jabber.c:1866
+#: ../libpurple/protocols/jabber/jabber.c:1864
 msgid ""
 "role &lt;user&gt; &lt;moderator|participant|visitor|none&gt;: Set a user's "
 "role in the room."
@@ -5019,19 +5183,19 @@
 "role &lt;usuario&gt; &lt;moderator|participant|visitor|none&gt;: Establecer "
 "o papel dun usuario na sala."
 
-#: ../libpurple/protocols/jabber/jabber.c:1872
+#: ../libpurple/protocols/jabber/jabber.c:1870
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
 msgstr "invite &lt;usuario&gt; [mensaxe]:  Convidar un usuario á sala."
 
-#: ../libpurple/protocols/jabber/jabber.c:1878
+#: ../libpurple/protocols/jabber/jabber.c:1876
 msgid "join: &lt;room&gt; [server]:  Join a chat on this server."
 msgstr "join: &lt;sala&gt; [servidor]:  Unirse a unha sala no servidor indicado."
 
-#: ../libpurple/protocols/jabber/jabber.c:1884
+#: ../libpurple/protocols/jabber/jabber.c:1882
 msgid "kick &lt;user&gt; [room]:  Kick a user from the room."
 msgstr "kick &lt;usuario&gt; [sala]:  Botar un usuario da sala."
 
-#: ../libpurple/protocols/jabber/jabber.c:1889
+#: ../libpurple/protocols/jabber/jabber.c:1887
 msgid "msg &lt;user&gt; &lt;message&gt;:  Send a private message to another user."
 msgstr ""
 "msg &lt;usuario&gt; &lt;mensaxe&gt;:  Enviarlle unha mensaxe privada a un "
@@ -5115,35 +5279,35 @@
 msgid "XML Parse error"
 msgstr "Erro de tratamento XML"
 
-#: ../libpurple/protocols/jabber/presence.c:290
+#: ../libpurple/protocols/jabber/presence.c:292
 msgid "Unknown Error in presence"
 msgstr "Erro descoñecido en presenza"
 
-#: ../libpurple/protocols/jabber/presence.c:364
-#: ../libpurple/protocols/jabber/presence.c:365
+#: ../libpurple/protocols/jabber/presence.c:366
+#: ../libpurple/protocols/jabber/presence.c:367
 msgid "Create New Room"
 msgstr "Crear unha sala nova"
 
-#: ../libpurple/protocols/jabber/presence.c:366
+#: ../libpurple/protocols/jabber/presence.c:368
 msgid ""
 "You are creating a new room.  Would you like to configure it, or accept the "
 "default settings?"
 msgstr "Vai crear unha sala nova. Desexa configurala ou aceptar os valores predeterminados?"
 
-#: ../libpurple/protocols/jabber/presence.c:372
+#: ../libpurple/protocols/jabber/presence.c:374
 msgid "_Configure Room"
 msgstr "_Configurar a sala"
 
-#: ../libpurple/protocols/jabber/presence.c:373
+#: ../libpurple/protocols/jabber/presence.c:375
 msgid "_Accept Defaults"
 msgstr "_Aceptar os valores predeterminados"
 
-#: ../libpurple/protocols/jabber/presence.c:415
+#: ../libpurple/protocols/jabber/presence.c:417
 #, c-format
 msgid "Error in chat %s"
 msgstr "Erro na conversa %s"
 
-#: ../libpurple/protocols/jabber/presence.c:419
+#: ../libpurple/protocols/jabber/presence.c:421
 #, c-format
 msgid "Error joining chat %s"
 msgstr "Erro ao unirse á conversa %s"
@@ -5401,7 +5565,7 @@
 msgstr "Servidor moi ocupado"
 
 #: ../libpurple/protocols/msn/error.c:222
-#: ../libpurple/protocols/oscar/oscar.c:1381
+#: ../libpurple/protocols/oscar/oscar.c:1378
 #: ../libpurple/protocols/silc/silc.c:233
 #: ../libpurple/protocols/silc10/ops.c:1709
 #: ../libpurple/protocols/toc/toc.c:728 ../libpurple/proxy.c:1363
@@ -5504,8 +5668,8 @@
 msgstr "Tenlle"
 
 #: ../libpurple/protocols/msn/msn.c:551 ../libpurple/protocols/msn/state.c:33
-#: ../libpurple/protocols/yahoo/yahoo.c:2912
-#: ../libpurple/protocols/yahoo/yahoo.c:3596
+#: ../libpurple/protocols/yahoo/yahoo.c:2977
+#: ../libpurple/protocols/yahoo/yahoo.c:3661
 msgid "Be Right Back"
 msgstr "Volvo deseguida"
 
@@ -5516,20 +5680,20 @@
 #: ../libpurple/protocols/silc/silc.c:56
 #: ../libpurple/protocols/silc10/buddy.c:1480
 #: ../libpurple/protocols/silc10/silc.c:47
-#: ../libpurple/protocols/yahoo/yahoo.c:2914
-#: ../libpurple/protocols/yahoo/yahoo.c:3599
+#: ../libpurple/protocols/yahoo/yahoo.c:2979
+#: ../libpurple/protocols/yahoo/yahoo.c:3664
 msgid "Busy"
 msgstr "Ocupado"
 
 #: ../libpurple/protocols/msn/msn.c:559
-#: ../libpurple/protocols/yahoo/yahoo.c:2922
-#: ../libpurple/protocols/yahoo/yahoo.c:3611
+#: ../libpurple/protocols/yahoo/yahoo.c:2987
+#: ../libpurple/protocols/yahoo/yahoo.c:3676
 msgid "On the Phone"
 msgstr "Ao teléfono"
 
 #: ../libpurple/protocols/msn/msn.c:563
-#: ../libpurple/protocols/yahoo/yahoo.c:2926
-#: ../libpurple/protocols/yahoo/yahoo.c:3617
+#: ../libpurple/protocols/yahoo/yahoo.c:2991
+#: ../libpurple/protocols/yahoo/yahoo.c:3682
 msgid "Out to Lunch"
 msgstr "Saín xantar"
 
@@ -5589,9 +5753,9 @@
 msgstr "Xeral"
 
 #: ../libpurple/protocols/msn/msn.c:1557
-#: ../libpurple/protocols/oscar/oscar.c:3764
+#: ../libpurple/protocols/oscar/oscar.c:3723
 #: ../libpurple/protocols/qq/buddy_info.c:45
-#: ../libpurple/protocols/qq/qq.c:219
+#: ../libpurple/protocols/qq/qq.c:221
 #: ../libpurple/protocols/yahoo/yahoo_profile.c:1081
 msgid "Age"
 msgstr "Idade"
@@ -5685,7 +5849,7 @@
 msgstr "Teléfono da casa 2"
 
 #: ../libpurple/protocols/msn/msn.c:1622
-#: ../libpurple/protocols/oscar/oscar.c:3802
+#: ../libpurple/protocols/oscar/oscar.c:3761
 msgid "Home Address"
 msgstr "Domicilio"
 
@@ -5721,7 +5885,7 @@
 msgstr "Posto de traballo"
 
 #: ../libpurple/protocols/msn/msn.c:1647
-#: ../libpurple/protocols/oscar/oscar.c:3823
+#: ../libpurple/protocols/oscar/oscar.c:3782
 msgid "Company"
 msgstr "Compañía"
 
@@ -5743,7 +5907,7 @@
 msgstr "Teléfono do traballo 2"
 
 #: ../libpurple/protocols/msn/msn.c:1652
-#: ../libpurple/protocols/oscar/oscar.c:3815
+#: ../libpurple/protocols/oscar/oscar.c:3774
 msgid "Work Address"
 msgstr "Enderezo do traballo"
 
@@ -6066,22 +6230,22 @@
 msgid "%s just sent you a Nudge!"
 msgstr "%s acáballe de dar un cobadazo!"
 
-#: ../libpurple/protocols/msn/userlist.c:250
+#: ../libpurple/protocols/msn/userlist.c:252
 #, c-format
 msgid "%s has added you to his or her buddy list."
 msgstr "O usuario %s engadiulle á súa lista de contactos."
 
-#: ../libpurple/protocols/msn/userlist.c:319
+#: ../libpurple/protocols/msn/userlist.c:321
 #, c-format
 msgid "%s has removed you from his or her buddy list."
 msgstr "O usuario %s eliminoulle da súa lista de contactos."
 
-#: ../libpurple/protocols/msn/userlist.c:641
+#: ../libpurple/protocols/msn/userlist.c:643
 #, c-format
 msgid "Unable to add \"%s\"."
 msgstr "Imposible engadir \"%s\"."
 
-#: ../libpurple/protocols/msn/userlist.c:643
+#: ../libpurple/protocols/msn/userlist.c:645
 msgid "The screen name specified is invalid."
 msgstr "O nome especificado é incorrecto."
 
@@ -6441,8 +6605,8 @@
 msgstr "Porto do servidor"
 
 #: ../libpurple/protocols/oscar/flap_connection.c:387
-#: ../libpurple/protocols/yahoo/yahoo.c:2309
-#: ../libpurple/protocols/yahoo/yahoo.c:2476
+#: ../libpurple/protocols/yahoo/yahoo.c:2374
+#: ../libpurple/protocols/yahoo/yahoo.c:2541
 #: ../libpurple/protocols/yahoo/ycht.c:481 ../libpurple/proxy.c:580
 #: ../libpurple/proxy.c:1099 ../libpurple/proxy.c:1208
 #: ../libpurple/proxy.c:1308 ../libpurple/proxy.c:1436
@@ -6450,8 +6614,8 @@
 msgstr "O servidor pechou a conexión."
 
 #: ../libpurple/protocols/oscar/flap_connection.c:389
-#: ../libpurple/protocols/yahoo/yahoo.c:2303
-#: ../libpurple/protocols/yahoo/yahoo.c:2470 ../libpurple/proxy.c:592
+#: ../libpurple/protocols/yahoo/yahoo.c:2368
+#: ../libpurple/protocols/yahoo/yahoo.c:2535 ../libpurple/proxy.c:592
 #: ../libpurple/proxy.c:1111 ../libpurple/proxy.c:1220
 #: ../libpurple/proxy.c:1320 ../libpurple/proxy.c:1448
 #, c-format
@@ -6500,7 +6664,7 @@
 msgstr "Complemento de protocolo ICQ"
 
 #: ../libpurple/protocols/oscar/libicq.c:147
-#: ../libpurple/protocols/yahoo/yahoo.c:4203
+#: ../libpurple/protocols/yahoo/yahoo.c:4279
 #: ../libpurple/protocols/zephyr/zephyr.c:2997
 msgid "Encoding"
 msgstr "Codificación"
@@ -6631,7 +6795,7 @@
 msgid "Not while on AOL"
 msgstr "Non mentres está en AOL"
 
-#: ../libpurple/protocols/oscar/oscar.c:348
+#: ../libpurple/protocols/oscar/oscar.c:347
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
 "is probably using a different encoding than expected.  If you know what "
@@ -6642,7 +6806,7 @@
 "empregar unha codificación diferente da esperada. Se sabe cal está "
 "empregando pode especificalo nas opcións avanzadas de conta para AIM/ICQ)"
 
-#: ../libpurple/protocols/oscar/oscar.c:457
+#: ../libpurple/protocols/oscar/oscar.c:456
 #, c-format
 msgid ""
 "(There was an error receiving this message.  Either you and %s have "
@@ -6652,21 +6816,21 @@
 "unha codificación diferente ou que %s ten un cliente con erros.)"
 
 #. Label
-#: ../libpurple/protocols/oscar/oscar.c:639 ../pidgin/gtkutils.c:2376
+#: ../libpurple/protocols/oscar/oscar.c:638 ../pidgin/gtkutils.c:2376
 #: ../pidgin/gtkutils.c:2406
 #: ../pidgin/plugins/gevolution/new_person_dialog.c:334
 msgid "Buddy Icon"
 msgstr "Icona de contacto"
 
-#: ../libpurple/protocols/oscar/oscar.c:642
+#: ../libpurple/protocols/oscar/oscar.c:641
 msgid "Voice"
 msgstr "Voz"
 
-#: ../libpurple/protocols/oscar/oscar.c:645
+#: ../libpurple/protocols/oscar/oscar.c:644
 msgid "AIM Direct IM"
 msgstr "MI Directa AIM"
 
-#: ../libpurple/protocols/oscar/oscar.c:648
+#: ../libpurple/protocols/oscar/oscar.c:647
 #: ../libpurple/protocols/silc/silc.c:768
 #: ../libpurple/protocols/silc/util.c:553
 #: ../libpurple/protocols/silc10/silc.c:679
@@ -6674,124 +6838,125 @@
 msgid "Chat"
 msgstr "Conversa"
 
-#: ../libpurple/protocols/oscar/oscar.c:651
-#: ../libpurple/protocols/oscar/oscar.c:5999
+#: ../libpurple/protocols/oscar/oscar.c:650
+#: ../libpurple/protocols/oscar/oscar.c:5958
 msgid "Get File"
 msgstr "Recibir ficheiro"
 
-#: ../libpurple/protocols/oscar/oscar.c:658
+#: ../libpurple/protocols/oscar/oscar.c:657
 msgid "Games"
 msgstr "Xogos"
 
-#: ../libpurple/protocols/oscar/oscar.c:661
+#: ../libpurple/protocols/oscar/oscar.c:660
 msgid "Add-Ins"
 msgstr "Extensións"
 
-#: ../libpurple/protocols/oscar/oscar.c:664
+#: ../libpurple/protocols/oscar/oscar.c:663
 msgid "Send Buddy List"
 msgstr "Enviar lista de contactos"
 
-#: ../libpurple/protocols/oscar/oscar.c:667
+#: ../libpurple/protocols/oscar/oscar.c:666
 msgid "ICQ Direct Connect"
 msgstr "Conexión directa ICQ"
 
-#: ../libpurple/protocols/oscar/oscar.c:670
+#: ../libpurple/protocols/oscar/oscar.c:669
 msgid "AP User"
 msgstr "Usuario de AP"
 
-#: ../libpurple/protocols/oscar/oscar.c:673
+#: ../libpurple/protocols/oscar/oscar.c:672
 msgid "ICQ RTF"
 msgstr "ICQ RTF"
 
-#: ../libpurple/protocols/oscar/oscar.c:676
+#: ../libpurple/protocols/oscar/oscar.c:675
 msgid "Nihilist"
 msgstr "Nihilista"
 
-#: ../libpurple/protocols/oscar/oscar.c:679
+#: ../libpurple/protocols/oscar/oscar.c:678
 msgid "ICQ Server Relay"
 msgstr "ICQ Server Relay"
 
-#: ../libpurple/protocols/oscar/oscar.c:682
+#: ../libpurple/protocols/oscar/oscar.c:681
 msgid "Old ICQ UTF8"
 msgstr "Antigo ICQ UTF8"
 
-#: ../libpurple/protocols/oscar/oscar.c:685
+#: ../libpurple/protocols/oscar/oscar.c:684
 msgid "Trillian Encryption"
 msgstr "Cifraxe Trillian"
 
-#: ../libpurple/protocols/oscar/oscar.c:688
+#: ../libpurple/protocols/oscar/oscar.c:687
 msgid "ICQ UTF8"
 msgstr "ICQ UTF8"
 
-#: ../libpurple/protocols/oscar/oscar.c:691
+#: ../libpurple/protocols/oscar/oscar.c:690
 msgid "Hiptop"
 msgstr "Hiptop"
 
-#: ../libpurple/protocols/oscar/oscar.c:694
+#: ../libpurple/protocols/oscar/oscar.c:693
 msgid "Security Enabled"
 msgstr "Seguridade activada"
 
-#: ../libpurple/protocols/oscar/oscar.c:697
+#: ../libpurple/protocols/oscar/oscar.c:696
 msgid "Video Chat"
 msgstr "Vídeoconversa"
 
-#: ../libpurple/protocols/oscar/oscar.c:701
+#: ../libpurple/protocols/oscar/oscar.c:700
 msgid "iChat AV"
 msgstr "iChat AV"
 
-#: ../libpurple/protocols/oscar/oscar.c:704
+#: ../libpurple/protocols/oscar/oscar.c:703
 msgid "Live Video"
 msgstr "Vídeo en directo"
 
-#: ../libpurple/protocols/oscar/oscar.c:707
+#: ../libpurple/protocols/oscar/oscar.c:706
 msgid "Camera"
 msgstr "Cámara"
 
-#: ../libpurple/protocols/oscar/oscar.c:725
-#: ../libpurple/protocols/oscar/oscar.c:5769
+#: ../libpurple/protocols/oscar/oscar.c:724
+#: ../libpurple/protocols/oscar/oscar.c:5728
 msgid "Free For Chat"
 msgstr "Dispoñible para conversar"
 
-#: ../libpurple/protocols/oscar/oscar.c:729
-#: ../libpurple/protocols/oscar/oscar.c:5804
+#: ../libpurple/protocols/oscar/oscar.c:728
+#: ../libpurple/protocols/oscar/oscar.c:5763
 msgid "Not Available"
 msgstr "Non dispoñible"
 
-#: ../libpurple/protocols/oscar/oscar.c:731
-#: ../libpurple/protocols/oscar/oscar.c:5790
+#: ../libpurple/protocols/oscar/oscar.c:730
+#: ../libpurple/protocols/oscar/oscar.c:5749
 msgid "Occupied"
 msgstr "Ocupado"
 
-#: ../libpurple/protocols/oscar/oscar.c:735
+#: ../libpurple/protocols/oscar/oscar.c:734
 msgid "Web Aware"
 msgstr "Visible na Web"
 
-#: ../libpurple/protocols/oscar/oscar.c:737 ../libpurple/protocols/qq/qq.c:183
-#: ../libpurple/protocols/yahoo/yahoo.c:2930 ../libpurple/status.c:156
-#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1058
+#: ../libpurple/protocols/oscar/oscar.c:736 ../libpurple/protocols/qq/qq.c:183
+#: ../libpurple/protocols/qq/qq.c:288
+#: ../libpurple/protocols/yahoo/yahoo.c:2995 ../libpurple/status.c:156
+#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1059
 msgid "Invisible"
 msgstr "Invisible"
 
-#: ../libpurple/protocols/oscar/oscar.c:739
+#: ../libpurple/protocols/oscar/oscar.c:738
 msgid "Online"
 msgstr "Conectado"
 
-#: ../libpurple/protocols/oscar/oscar.c:838
-#: ../libpurple/protocols/oscar/oscar.c:3716
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1121
+#: ../libpurple/protocols/oscar/oscar.c:837
+#: ../libpurple/protocols/oscar/oscar.c:3675
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1123
 msgid "IP Address"
 msgstr "Enderezo IP"
 
-#: ../libpurple/protocols/oscar/oscar.c:845
-#: ../libpurple/protocols/oscar/oscar.c:2863
+#: ../libpurple/protocols/oscar/oscar.c:844
+#: ../libpurple/protocols/oscar/oscar.c:2861
 msgid "Warning Level"
 msgstr "Nivel de aviso"
 
-#: ../libpurple/protocols/oscar/oscar.c:855
+#: ../libpurple/protocols/oscar/oscar.c:854
 msgid "Buddy Comment"
 msgstr "Comentario de contacto"
 
-#: ../libpurple/protocols/oscar/oscar.c:995
+#: ../libpurple/protocols/oscar/oscar.c:994
 #, c-format
 msgid ""
 "Could not connect to authentication server:\n"
@@ -6800,7 +6965,7 @@
 "Non se puido conectar ao servidor de autenticación:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:1003
+#: ../libpurple/protocols/oscar/oscar.c:1002
 #, c-format
 msgid ""
 "Could not connect to BOS server:\n"
@@ -6809,20 +6974,20 @@
 "Non se puido conectar ao servidor BOS:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:1043
+#: ../libpurple/protocols/oscar/oscar.c:1042
 msgid "Screen name sent"
 msgstr "Enviouse o nome de usuario"
 
-#: ../libpurple/protocols/oscar/oscar.c:1048
+#: ../libpurple/protocols/oscar/oscar.c:1047
 msgid "Connection established, cookie sent"
 msgstr "Conexión establecida, cookie enviada"
 
 #. TODO: Don't call this with ssi
-#: ../libpurple/protocols/oscar/oscar.c:1077
+#: ../libpurple/protocols/oscar/oscar.c:1076
 msgid "Finalizing connection"
 msgstr "Rematando a conexión"
 
-#: ../libpurple/protocols/oscar/oscar.c:1261
+#: ../libpurple/protocols/oscar/oscar.c:1258
 #, c-format
 msgid ""
 "Unable to login: Could not sign on as %s because the screen name is "
@@ -6833,29 +6998,29 @@
 "inválido.  Os nomes de usuario teñen que ser unha dirección de correo electrónico válida ou "
 "comezar cunha letra e conter só letras, números e espazos, ou conter só números."
 
-#: ../libpurple/protocols/oscar/oscar.c:1346
-#: ../libpurple/protocols/yahoo/yahoo.c:1948
+#: ../libpurple/protocols/oscar/oscar.c:1343
+#: ../libpurple/protocols/yahoo/yahoo.c:2010
 msgid "Invalid screen name."
 msgstr "Nome de usuario incorrecto."
 
-#: ../libpurple/protocols/oscar/oscar.c:1353
+#: ../libpurple/protocols/oscar/oscar.c:1350
 #: ../libpurple/protocols/qq/login_logout.c:483
 #: ../libpurple/protocols/simple/simple.c:1039
-#: ../libpurple/protocols/yahoo/yahoo.c:1969
+#: ../libpurple/protocols/yahoo/yahoo.c:2031
 msgid "Incorrect password."
 msgstr "Contrasinal incorrecto."
 
-#: ../libpurple/protocols/oscar/oscar.c:1358
+#: ../libpurple/protocols/oscar/oscar.c:1355
 msgid "Your account is currently suspended."
 msgstr "A conta está deshabilitada actualmente."
 
 #. service temporarily unavailable
-#: ../libpurple/protocols/oscar/oscar.c:1362
+#: ../libpurple/protocols/oscar/oscar.c:1359
 msgid "The AOL Instant Messenger service is temporarily unavailable."
 msgstr "O servizo de mensaxería instantánea AOL non está dispoñible temporalmente."
 
-#: ../libpurple/protocols/oscar/oscar.c:1367
-#: ../libpurple/protocols/oscar/oscar.c:1378
+#: ../libpurple/protocols/oscar/oscar.c:1364
+#: ../libpurple/protocols/oscar/oscar.c:1375
 msgid ""
 "You have been connecting and disconnecting too frequently. Wait ten minutes "
 "and try again. If you continue to try, you will need to wait even longer."
@@ -6863,44 +7028,44 @@
 "Conectouse e desconectouse demasiadas veces. Agarde dez minutos e inténteo "
 "de novo. Se segue a intentalo, pode que necesite agardar máis tempo."
 
-#: ../libpurple/protocols/oscar/oscar.c:1372
+#: ../libpurple/protocols/oscar/oscar.c:1369
 #, c-format
 msgid "The client version you are using is too old. Please upgrade at %s"
 msgstr "A versión do cliente que usa é demasiado antiga. Actualízea en %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:1411
+#: ../libpurple/protocols/oscar/oscar.c:1408
 msgid "Could Not Connect"
 msgstr "Non se puido conectar"
 
-#: ../libpurple/protocols/oscar/oscar.c:1415
+#: ../libpurple/protocols/oscar/oscar.c:1412
 msgid "Received authorization"
 msgstr "Recibiuse a autorización"
 
-#: ../libpurple/protocols/oscar/oscar.c:1437
+#: ../libpurple/protocols/oscar/oscar.c:1434
 msgid "The SecurID key entered is invalid."
 msgstr "A clave SecurID que se introduciu non é válida."
 
-#: ../libpurple/protocols/oscar/oscar.c:1450
+#: ../libpurple/protocols/oscar/oscar.c:1447
 msgid "Enter SecurID"
 msgstr "Introduza o SecurID"
 
-#: ../libpurple/protocols/oscar/oscar.c:1451
+#: ../libpurple/protocols/oscar/oscar.c:1448
 msgid "Enter the 6 digit number from the digital display."
 msgstr "Introduza o díxito de seis números que aparece na pantalla."
 
 #. *
 #. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
 #.
-#: ../libpurple/protocols/oscar/oscar.c:1453
-#: ../libpurple/protocols/oscar/oscar.c:2246
-#: ../libpurple/protocols/oscar/oscar.c:2293
-#: ../libpurple/protocols/oscar/oscar.c:5874
-#: ../libpurple/protocols/oscar/oscar.c:6155 ../libpurple/request.h:1387
+#: ../libpurple/protocols/oscar/oscar.c:1450
+#: ../libpurple/protocols/oscar/oscar.c:2242
+#: ../libpurple/protocols/oscar/oscar.c:2291
+#: ../libpurple/protocols/oscar/oscar.c:5833
+#: ../libpurple/protocols/oscar/oscar.c:6114 ../libpurple/request.h:1387
 msgid "_OK"
 msgstr "_Aceptar"
 
-#: ../libpurple/protocols/oscar/oscar.c:1492
-#: ../libpurple/protocols/oscar/oscar.c:1535
+#: ../libpurple/protocols/oscar/oscar.c:1489
+#: ../libpurple/protocols/oscar/oscar.c:1532
 #, c-format
 msgid ""
 "You may be disconnected shortly.  You may want to use TOC until this is "
@@ -6909,53 +7074,53 @@
 "Talvez sexa desconectado en breve. Pode querer usar TOC ata que se resolva "
 "isto. Comprobe %s para as novidades."
 
-#: ../libpurple/protocols/oscar/oscar.c:1495
-#: ../libpurple/protocols/oscar/oscar.c:1538
+#: ../libpurple/protocols/oscar/oscar.c:1492
+#: ../libpurple/protocols/oscar/oscar.c:1535
 msgid "Unable to get a valid AIM login hash."
 msgstr "Non se puido obter un hash de inicio de sesión AIM válido."
 
-#: ../libpurple/protocols/oscar/oscar.c:1623
+#: ../libpurple/protocols/oscar/oscar.c:1620
 #, c-format
 msgid "You may be disconnected shortly.  Check %s for updates."
 msgstr "Talvez sexa desconectado en breve. Comprobe %s para actualizacións."
 
-#: ../libpurple/protocols/oscar/oscar.c:1626
+#: ../libpurple/protocols/oscar/oscar.c:1623
 msgid "Unable to get a valid login hash."
 msgstr "Non se puido obter un hash de inicio de sesión válido."
 
-#: ../libpurple/protocols/oscar/oscar.c:1655
+#: ../libpurple/protocols/oscar/oscar.c:1652
 msgid "Password sent"
 msgstr "Contrasinal enviado"
 
-#: ../libpurple/protocols/oscar/oscar.c:1711
+#: ../libpurple/protocols/oscar/oscar.c:1708
 msgid "Unable to initialize connection"
 msgstr "Non é posible comezar a conexión"
 
-#: ../libpurple/protocols/oscar/oscar.c:2216
+#: ../libpurple/protocols/oscar/oscar.c:2212
 msgid "Please authorize me so I can add you to my buddy list."
 msgstr "Autoríceme para que poida engadirlle á miña lista de contactos."
 
-#: ../libpurple/protocols/oscar/oscar.c:2244
+#: ../libpurple/protocols/oscar/oscar.c:2240
 msgid "Authorization Request Message:"
 msgstr "Mensaxe de solicitude de autorización:"
 
-#: ../libpurple/protocols/oscar/oscar.c:2245
+#: ../libpurple/protocols/oscar/oscar.c:2241
 msgid "Please authorize me!"
 msgstr "Por favor, autoríceme!"
 
-#: ../libpurple/protocols/oscar/oscar.c:2285
-#: ../libpurple/protocols/oscar/oscar.c:2292
-#: ../libpurple/protocols/oscar/oscar.c:2419
-#: ../libpurple/protocols/oscar/oscar.c:5252
-#: ../libpurple/protocols/yahoo/yahoo.c:1000
+#: ../libpurple/protocols/oscar/oscar.c:2282
+#: ../libpurple/protocols/oscar/oscar.c:2290
+#: ../libpurple/protocols/oscar/oscar.c:2417
+#: ../libpurple/protocols/oscar/oscar.c:5211
+#: ../libpurple/protocols/yahoo/yahoo.c:1014
 msgid "No reason given."
 msgstr "Non se indicou unha razón."
 
-#: ../libpurple/protocols/oscar/oscar.c:2291
+#: ../libpurple/protocols/oscar/oscar.c:2289
 msgid "Authorization Denied Message:"
 msgstr "Mensaxe de autorización rexeitada:"
 
-#: ../libpurple/protocols/oscar/oscar.c:2419
+#: ../libpurple/protocols/oscar/oscar.c:2417
 #, c-format
 msgid ""
 "The user %u has denied your request to add them to your buddy list for the "
@@ -6966,17 +7131,17 @@
 "seguinte razón:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2420
+#: ../libpurple/protocols/oscar/oscar.c:2418
 msgid "ICQ authorization denied."
 msgstr "Autorización ICQ rexeitada."
 
 #. Someone has granted you authorization
-#: ../libpurple/protocols/oscar/oscar.c:2427
+#: ../libpurple/protocols/oscar/oscar.c:2425
 #, c-format
 msgid "The user %u has granted your request to add them to your buddy list."
 msgstr "O usuario %u autorizou a súa solicitude de engadilos á súa lista de contactos."
 
-#: ../libpurple/protocols/oscar/oscar.c:2435
+#: ../libpurple/protocols/oscar/oscar.c:2433
 #, c-format
 msgid ""
 "You have received a special message\n"
@@ -6989,7 +7154,7 @@
 "De: %s [%s]\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2443
+#: ../libpurple/protocols/oscar/oscar.c:2441
 #, c-format
 msgid ""
 "You have received an ICQ page\n"
@@ -7002,7 +7167,7 @@
 "De: %s [%s]\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2451
+#: ../libpurple/protocols/oscar/oscar.c:2449
 #, c-format
 msgid ""
 "You have received an ICQ e-mail from %s [%s]\n"
@@ -7015,59 +7180,59 @@
 "A mensaxe é:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2472
+#: ../libpurple/protocols/oscar/oscar.c:2470
 #, c-format
 msgid "ICQ user %u has sent you a buddy: %s (%s)"
 msgstr "O usuario ICQ %u envioulle un contacto: %s (%s)"
 
-#: ../libpurple/protocols/oscar/oscar.c:2478
+#: ../libpurple/protocols/oscar/oscar.c:2476
 msgid "Do you want to add this buddy to your buddy list?"
 msgstr "Desexa engadir este contacto á lista de contactos?"
 
-#: ../libpurple/protocols/oscar/oscar.c:2483 ../pidgin/gtkroomlist.c:308
+#: ../libpurple/protocols/oscar/oscar.c:2481 ../pidgin/gtkroomlist.c:308
 msgid "_Add"
 msgstr "_Engadir"
 
-#: ../libpurple/protocols/oscar/oscar.c:2484
+#: ../libpurple/protocols/oscar/oscar.c:2482
 msgid "_Decline"
 msgstr "_Rexeitar"
 
-#: ../libpurple/protocols/oscar/oscar.c:2568
+#: ../libpurple/protocols/oscar/oscar.c:2566
 #, c-format
 msgid "You missed %hu message from %s because it was invalid."
 msgid_plural "You missed %hu messages from %s because they were invalid."
 msgstr[0] "Perdeuse %hu mensaxe de %s porque non era válida."
 msgstr[1] "Perdeuse %hu mensaxe de %s porque non era válida."
 
-#: ../libpurple/protocols/oscar/oscar.c:2577
+#: ../libpurple/protocols/oscar/oscar.c:2575
 #, c-format
 msgid "You missed %hu message from %s because it was too large."
 msgid_plural "You missed %hu messages from %s because they were too large."
 msgstr[0] "Perdeuse %hu mensaxe de %s porque era demasiado longa."
 msgstr[1] "Perdeuse %hu mensaxe de %s porque era demasiado longa."
 
-#: ../libpurple/protocols/oscar/oscar.c:2586
+#: ../libpurple/protocols/oscar/oscar.c:2584
 #, c-format
 msgid "You missed %hu message from %s because the rate limit has been exceeded."
 msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded."
 msgstr[0] "Perdeu %hu mensaxe de %s porque se mandou damasiado rápido."
 msgstr[1] "Perdeu %hu mensaxe de %s porque se mandou damasiado rápido."
 
-#: ../libpurple/protocols/oscar/oscar.c:2595
+#: ../libpurple/protocols/oscar/oscar.c:2593
 #, c-format
 msgid "You missed %hu message from %s because he/she was too evil."
 msgid_plural "You missed %hu messages from %s because he/she was too evil."
 msgstr[0] "Perdeuse %hu mensaxe de %s porque el/ela foi moi malvado/a."
 msgstr[1] "Perdeuse %hu mensaxe de %s porque el/ela foi moi malvado/a."
 
-#: ../libpurple/protocols/oscar/oscar.c:2604
+#: ../libpurple/protocols/oscar/oscar.c:2602
 #, c-format
 msgid "You missed %hu message from %s because you are too evil."
 msgid_plural "You missed %hu messages from %s because you are too evil."
 msgstr[0] "Perdeuse %hu mensaxe de %s porque es moi malvado/a."
 msgstr[1] "Perdeuse %hu mensaxe de %s porque es moi malvado/a."
 
-#: ../libpurple/protocols/oscar/oscar.c:2613
+#: ../libpurple/protocols/oscar/oscar.c:2611
 #, c-format
 msgid "You missed %hu message from %s for an unknown reason."
 msgid_plural "You missed %hu messages from %s for an unknown reason."
@@ -7075,55 +7240,55 @@
 msgstr[1] "Perdeuse %hu mensaxe de %s por motivos descoñecidos."
 
 #. Data is assumed to be the destination sn
-#: ../libpurple/protocols/oscar/oscar.c:2768
+#: ../libpurple/protocols/oscar/oscar.c:2766
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Non se puido enviar a mensaxe: %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2768
-#: ../libpurple/protocols/oscar/oscar.c:2773
-#: ../libpurple/protocols/oscar/oscar.c:2837
+#: ../libpurple/protocols/oscar/oscar.c:2766
+#: ../libpurple/protocols/oscar/oscar.c:2771
+#: ../libpurple/protocols/oscar/oscar.c:2835
 msgid "Unknown reason."
 msgstr "Razón descoñecida."
 
-#: ../libpurple/protocols/oscar/oscar.c:2771
+#: ../libpurple/protocols/oscar/oscar.c:2769
 #: ../libpurple/protocols/sametime/sametime.c:2409
 #, c-format
 msgid "Unable to send message to %s:"
 msgstr "Non se puido enviar a mensaxe a %s:"
 
-#: ../libpurple/protocols/oscar/oscar.c:2837
+#: ../libpurple/protocols/oscar/oscar.c:2835
 #, c-format
 msgid "User information not available: %s"
 msgstr "Información de usuario non dispoñible: %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2868
+#: ../libpurple/protocols/oscar/oscar.c:2866
 msgid "Online Since"
 msgstr "Conectado desde"
 
-#: ../libpurple/protocols/oscar/oscar.c:2873
+#: ../libpurple/protocols/oscar/oscar.c:2871
 #: ../libpurple/protocols/yahoo/yahoo_profile.c:1185
 msgid "Member Since"
 msgstr "Membro desde"
 
-#: ../libpurple/protocols/oscar/oscar.c:2878
+#: ../libpurple/protocols/oscar/oscar.c:2876
 msgid "Capabilities"
 msgstr "Capacidades"
 
-#: ../libpurple/protocols/oscar/oscar.c:2908
+#: ../libpurple/protocols/oscar/oscar.c:2906
 msgid "Available Message"
 msgstr "Mensaxe dispoñible"
 
-#: ../libpurple/protocols/oscar/oscar.c:2936
+#: ../libpurple/protocols/oscar/oscar.c:2934
 msgid "Profile"
 msgstr "Perfil"
 
-#: ../libpurple/protocols/oscar/oscar.c:3016
+#: ../libpurple/protocols/oscar/oscar.c:3014
 msgid "Your AIM connection may be lost."
 msgstr "Pode que se perdese a conexión AIM."
 
 #. The conversion failed!
-#: ../libpurple/protocols/oscar/oscar.c:3204
+#: ../libpurple/protocols/oscar/oscar.c:3202
 msgid ""
 "[Unable to display a message from this user because it contained invalid "
 "characters.]"
@@ -7131,7 +7296,7 @@
 "[Non se puido mostrar unha mensaxe deste usuario porque contén caracteres "
 "incorrectos.]"
 
-#: ../libpurple/protocols/oscar/oscar.c:3407
+#: ../libpurple/protocols/oscar/oscar.c:3366
 msgid ""
 "The last action you attempted could not be performed because you are over "
 "the rate limit. Please wait 10 seconds and try again."
@@ -7140,82 +7305,82 @@
 "na taxa de envío de mensaxes. Agarde 10 segundos e volva a "
 "intentalo."
 
-#: ../libpurple/protocols/oscar/oscar.c:3490
+#: ../libpurple/protocols/oscar/oscar.c:3449
 #: ../libpurple/protocols/toc/toc.c:977
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Desconectouse da sala de conversa: %s."
 
-#: ../libpurple/protocols/oscar/oscar.c:3738
+#: ../libpurple/protocols/oscar/oscar.c:3697
 #: ../libpurple/protocols/silc/util.c:585
 #: ../libpurple/protocols/silc10/util.c:581
 msgid "Mobile Phone"
 msgstr "Teléfono móbil"
 
-#: ../libpurple/protocols/oscar/oscar.c:3768
+#: ../libpurple/protocols/oscar/oscar.c:3727
 msgid "Personal Web Page"
 msgstr "Sitio web persoal"
 
-#: ../libpurple/protocols/oscar/oscar.c:3792
+#: ../libpurple/protocols/oscar/oscar.c:3751
 #: ../libpurple/protocols/qq/buddy_info.c:40
 msgid "Additional Information"
 msgstr "Información adicional"
 
-#: ../libpurple/protocols/oscar/oscar.c:3800
-#: ../libpurple/protocols/oscar/oscar.c:3813
+#: ../libpurple/protocols/oscar/oscar.c:3759
+#: ../libpurple/protocols/oscar/oscar.c:3772
 msgid "Zip Code"
 msgstr "Código postal"
 
-#: ../libpurple/protocols/oscar/oscar.c:3824
+#: ../libpurple/protocols/oscar/oscar.c:3783
 msgid "Division"
 msgstr "Sección"
 
-#: ../libpurple/protocols/oscar/oscar.c:3825
+#: ../libpurple/protocols/oscar/oscar.c:3784
 msgid "Position"
 msgstr "Cargo"
 
-#: ../libpurple/protocols/oscar/oscar.c:3827
+#: ../libpurple/protocols/oscar/oscar.c:3786
 msgid "Web Page"
 msgstr "Páxina web"
 
-#: ../libpurple/protocols/oscar/oscar.c:3830
+#: ../libpurple/protocols/oscar/oscar.c:3789
 msgid "Work Information"
 msgstr "Información do traballo"
 
-#: ../libpurple/protocols/oscar/oscar.c:3886
+#: ../libpurple/protocols/oscar/oscar.c:3845
 msgid "Pop-Up Message"
 msgstr "Mensaxe emerxente"
 
-#: ../libpurple/protocols/oscar/oscar.c:3926
+#: ../libpurple/protocols/oscar/oscar.c:3885
 #, c-format
 msgid "The following screen name is associated with %s"
 msgid_plural "The following screen names are associated with %s"
 msgstr[0] "O seguinte nome de usuario está asociado a %s"
 msgstr[1] "O seguinte nome de usuario está asociado a %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:3931
+#: ../libpurple/protocols/oscar/oscar.c:3890
 msgid "Screen name"
 msgstr "Nome de usuario"
 
-#: ../libpurple/protocols/oscar/oscar.c:3957
+#: ../libpurple/protocols/oscar/oscar.c:3916
 #, c-format
 msgid "No results found for e-mail address %s"
 msgstr "Non se atoparon resultados para o enderezo de correo electrónico %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:3978
+#: ../libpurple/protocols/oscar/oscar.c:3937
 #, c-format
 msgid "You should receive an e-mail asking to confirm %s."
 msgstr "Debería recibir un correo electrónico. solicitando confirmación de %s."
 
-#: ../libpurple/protocols/oscar/oscar.c:3980
+#: ../libpurple/protocols/oscar/oscar.c:3939
 msgid "Account Confirmation Requested"
 msgstr "Confirmación de conta solicitada"
 
-#: ../libpurple/protocols/oscar/oscar.c:4011
+#: ../libpurple/protocols/oscar/oscar.c:3970
 msgid "Error Changing Account Info"
 msgstr "Erro ao cambiar a información da conta"
 
-#: ../libpurple/protocols/oscar/oscar.c:4014
+#: ../libpurple/protocols/oscar/oscar.c:3973
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to format screen name because the requested screen name "
@@ -7224,12 +7389,12 @@
 "Erro 0x%04x: Non se lle pode dar formato ao nome de usuario porque o nome "
 "solicitado difire do orixinal."
 
-#: ../libpurple/protocols/oscar/oscar.c:4017
+#: ../libpurple/protocols/oscar/oscar.c:3976
 #, c-format
 msgid "Error 0x%04x: Unable to format screen name because it is invalid."
 msgstr "Erro 0x%04x: Non se pode dar formato ao nome de usuario porque é incorrecto."
 
-#: ../libpurple/protocols/oscar/oscar.c:4020
+#: ../libpurple/protocols/oscar/oscar.c:3979
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to format screen name because the requested screen name "
@@ -7238,7 +7403,7 @@
 "Erro 0x%04x: Non se pode dar formato ao nome de usuario porque o nome "
 "solicitado é demasiado longo."
 
-#: ../libpurple/protocols/oscar/oscar.c:4023
+#: ../libpurple/protocols/oscar/oscar.c:3982
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change e-mail address because there is already a "
@@ -7247,7 +7412,7 @@
 "Erro 0x%04x: Non se pode cambiar o enderezo de correo electrónico porque xa existe unha "
 "solicitude pendente para este usuario."
 
-#: ../libpurple/protocols/oscar/oscar.c:4026
+#: ../libpurple/protocols/oscar/oscar.c:3985
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change e-mail address because the given address has "
@@ -7256,7 +7421,7 @@
 "Erro 0x%04x: Non se pode cambiar o enderezo de correo electrónico porque o enderezo "
 "dado ten demasiados nomes asociados."
 
-#: ../libpurple/protocols/oscar/oscar.c:4029
+#: ../libpurple/protocols/oscar/oscar.c:3988
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change e-mail address because the given address is "
@@ -7265,31 +7430,31 @@
 "Erro 0x%04x: Non se pode cambiar o enderezo de correo electrónico porque o enderezo "
 "dado é incorrecto."
 
-#: ../libpurple/protocols/oscar/oscar.c:4032
+#: ../libpurple/protocols/oscar/oscar.c:3991
 #, c-format
 msgid "Error 0x%04x: Unknown error."
 msgstr "Erro 0x%04x: Erro descoñecido."
 
-#: ../libpurple/protocols/oscar/oscar.c:4042
+#: ../libpurple/protocols/oscar/oscar.c:4001
 #, c-format
 msgid "The e-mail address for %s is %s"
 msgstr "O enderezo de correo electrónico de %s é %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:4044
+#: ../libpurple/protocols/oscar/oscar.c:4003
 msgid "Account Info"
 msgstr "Información da conta"
 
-#: ../libpurple/protocols/oscar/oscar.c:4216
+#: ../libpurple/protocols/oscar/oscar.c:4175
 msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images."
 msgstr ""
 "Non se enviou a súa imaxe MI. Debe estar directamente conectado para enviar "
 "imaxes MI."
 
-#: ../libpurple/protocols/oscar/oscar.c:4487
+#: ../libpurple/protocols/oscar/oscar.c:4446
 msgid "Unable to set AIM profile."
 msgstr "Non se puido establecer o perfil AIM."
 
-#: ../libpurple/protocols/oscar/oscar.c:4488
+#: ../libpurple/protocols/oscar/oscar.c:4447
 msgid ""
 "You have probably requested to set your profile before the login procedure "
 "completed.  Your profile remains unset; try setting it again when you are "
@@ -7299,7 +7464,7 @@
 "inicio de sesión se completase. O perfil non se establecerá, inténteo novamente cando xa "
 "estea conectado completamente."
 
-#: ../libpurple/protocols/oscar/oscar.c:4502
+#: ../libpurple/protocols/oscar/oscar.c:4461
 #, c-format
 msgid ""
 "The maximum profile length of %d byte has been exceeded.  It has been "
@@ -7311,14 +7476,14 @@
 "Excedeuse a lonxitude máxima de %d byte do perfil de usuario.  Eliminouse o "
 "excedente."
 msgstr[1] ""
-"Excedeuse a lonxitude máxima de %d bytes do perfil de usuario.  Eliminouse o "
+"Excedeuse a lonxitude máxima de %d byte do perfil de usuario.  Eliminouse o "
 "excedente."
 
-#: ../libpurple/protocols/oscar/oscar.c:4507
+#: ../libpurple/protocols/oscar/oscar.c:4466
 msgid "Profile too long."
 msgstr "Perfil demasiado longo."
 
-#: ../libpurple/protocols/oscar/oscar.c:4552
+#: ../libpurple/protocols/oscar/oscar.c:4511
 #, c-format
 msgid ""
 "The maximum away message length of %d byte has been exceeded.  It has been "
@@ -7330,14 +7495,14 @@
 "Excedeuse a lonxitude máxima de %d byte da mensaxe de ausencia.  Eliminouse o "
 "excedente."
 msgstr[1] ""
-"Excedeuse a lonxitude máxima de %d bytes da mensaxe de ausencia.  Eliminouse o "
+"Excedeuse a lonxitude máxima de %d byte da mensaxe de ausencia.  Eliminouse o "
 "excedente."
 
-#: ../libpurple/protocols/oscar/oscar.c:4557
+#: ../libpurple/protocols/oscar/oscar.c:4516
 msgid "Away message too long."
 msgstr "Mensaxe de ausencia demasiado longa."
 
-#: ../libpurple/protocols/oscar/oscar.c:4626
+#: ../libpurple/protocols/oscar/oscar.c:4585
 #, c-format
 msgid ""
 "Could not add the buddy %s because the screen name is invalid.  Screen names "
@@ -7348,17 +7513,17 @@
 "deben ser un enderezo de correo electrónico válidos, ou comezar cunha letra e conter só "
 "letras, números e espazos, ou só conter números."
 
-#: ../libpurple/protocols/oscar/oscar.c:4628
-#: ../libpurple/protocols/oscar/oscar.c:5061
-#: ../libpurple/protocols/oscar/oscar.c:5076
+#: ../libpurple/protocols/oscar/oscar.c:4587
+#: ../libpurple/protocols/oscar/oscar.c:5020
+#: ../libpurple/protocols/oscar/oscar.c:5035
 msgid "Unable To Add"
 msgstr "Non se puido engadir"
 
-#: ../libpurple/protocols/oscar/oscar.c:4737
+#: ../libpurple/protocols/oscar/oscar.c:4696
 msgid "Unable To Retrieve Buddy List"
 msgstr "Non se puido obter a lista de contactos"
 
-#: ../libpurple/protocols/oscar/oscar.c:4738
+#: ../libpurple/protocols/oscar/oscar.c:4697
 msgid ""
 "The AIM servers were temporarily unable to send your buddy list.  Your buddy "
 "list is not lost, and will probably become available in a few hours."
@@ -7366,15 +7531,15 @@
 "Os servidores de AIM non son capaces de enviar a súa lista de contactos.  A súa lista "
 "de contactos non se perdeu, e probablemente volva a estar dispoñible nunhas horas."
 
-#: ../libpurple/protocols/oscar/oscar.c:4920
-#: ../libpurple/protocols/oscar/oscar.c:4922
-#: ../libpurple/protocols/oscar/oscar.c:5130
-#: ../libpurple/protocols/oscar/oscar.c:5131
-#: ../libpurple/protocols/oscar/oscar.c:5136
+#: ../libpurple/protocols/oscar/oscar.c:4879
+#: ../libpurple/protocols/oscar/oscar.c:4881
+#: ../libpurple/protocols/oscar/oscar.c:5089
+#: ../libpurple/protocols/oscar/oscar.c:5090
+#: ../libpurple/protocols/oscar/oscar.c:5095
 msgid "Orphans"
 msgstr "Orfos"
 
-#: ../libpurple/protocols/oscar/oscar.c:5059
+#: ../libpurple/protocols/oscar/oscar.c:5018
 #, c-format
 msgid ""
 "Could not add the buddy %s because you have too many buddies in your buddy "
@@ -7383,17 +7548,17 @@
 "Non se puido engadir o contacto %s porque hai demasiados contactos na "
 "lista de contactos. Elimina un e volve probar."
 
-#: ../libpurple/protocols/oscar/oscar.c:5059
-#: ../libpurple/protocols/oscar/oscar.c:5074
+#: ../libpurple/protocols/oscar/oscar.c:5018
+#: ../libpurple/protocols/oscar/oscar.c:5033
 msgid "(no name)"
 msgstr "(sen nome)"
 
-#: ../libpurple/protocols/oscar/oscar.c:5073
+#: ../libpurple/protocols/oscar/oscar.c:5032
 #, c-format
 msgid "Could not add the buddy %s for an unknown reason."
 msgstr "Non se puido engadir o contacto %s por unha razón descoñecida."
 
-#: ../libpurple/protocols/oscar/oscar.c:5167
+#: ../libpurple/protocols/oscar/oscar.c:5126
 #, c-format
 msgid ""
 "The user %s has given you permission to add you to their buddy list.  Do you "
@@ -7402,24 +7567,24 @@
 "O usuario %s deulle permiso para engadilo nas súas listas de contactos. Desexa "
 "engadilos a eles?"
 
-#: ../libpurple/protocols/oscar/oscar.c:5175
+#: ../libpurple/protocols/oscar/oscar.c:5134
 msgid "Authorization Given"
 msgstr "Autorización concedida"
 
 #. Granted
-#: ../libpurple/protocols/oscar/oscar.c:5248
+#: ../libpurple/protocols/oscar/oscar.c:5207
 #, c-format
 msgid "The user %s has granted your request to add them to your buddy list."
 msgstr ""
 "O usuario %s autorizou a súa solicitude de engadilos á súa lista de "
 "contactos."
 
-#: ../libpurple/protocols/oscar/oscar.c:5249
+#: ../libpurple/protocols/oscar/oscar.c:5208
 msgid "Authorization Granted"
 msgstr "Autorización aceptada"
 
 #. Denied
-#: ../libpurple/protocols/oscar/oscar.c:5252
+#: ../libpurple/protocols/oscar/oscar.c:5211
 #, c-format
 msgid ""
 "The user %s has denied your request to add them to your buddy list for the "
@@ -7430,51 +7595,51 @@
 "seguinte razón:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:5253
+#: ../libpurple/protocols/oscar/oscar.c:5212
 msgid "Authorization Denied"
 msgstr "Autorización denegada"
 
-#: ../libpurple/protocols/oscar/oscar.c:5289
+#: ../libpurple/protocols/oscar/oscar.c:5248
 #: ../libpurple/protocols/toc/toc.c:1371
 msgid "_Exchange:"
 msgstr "Int_ercambio:"
 
-#: ../libpurple/protocols/oscar/oscar.c:5329
+#: ../libpurple/protocols/oscar/oscar.c:5288
 msgid "Invalid chat name specified."
 msgstr "Especificouse un nome de conversa incorrecto."
 
-#: ../libpurple/protocols/oscar/oscar.c:5398
+#: ../libpurple/protocols/oscar/oscar.c:5357
 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats."
 msgstr "Non se enviou a imaxe MI. Non se poden enviar imaxes MI en conversas AIM."
 
-#: ../libpurple/protocols/oscar/oscar.c:5558
-#: ../libpurple/protocols/oscar/oscar.c:5563
+#: ../libpurple/protocols/oscar/oscar.c:5517
+#: ../libpurple/protocols/oscar/oscar.c:5522
 msgid "Away Message"
 msgstr "Mensaxe de ausencia"
 
-#: ../libpurple/protocols/oscar/oscar.c:5563
+#: ../libpurple/protocols/oscar/oscar.c:5522
 msgid "<i>(retrieving)</i>"
 msgstr " <i>(obtendo)</i>"
 
-#: ../libpurple/protocols/oscar/oscar.c:5763
+#: ../libpurple/protocols/oscar/oscar.c:5722
 msgid "iTunes Music Store Link"
 msgstr "LIgazón a tenda de música iTunes"
 
-#: ../libpurple/protocols/oscar/oscar.c:5871
+#: ../libpurple/protocols/oscar/oscar.c:5830
 #, c-format
 msgid "Buddy Comment for %s"
 msgstr "Comentario de contacto para %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:5872
+#: ../libpurple/protocols/oscar/oscar.c:5831
 msgid "Buddy Comment:"
 msgstr "Comentario de contacto:"
 
-#: ../libpurple/protocols/oscar/oscar.c:5919
+#: ../libpurple/protocols/oscar/oscar.c:5878
 #, c-format
 msgid "You have selected to open a Direct IM connection with %s."
 msgstr "Pediu abrir unha conexión MI directa con %s."
 
-#: ../libpurple/protocols/oscar/oscar.c:5923
+#: ../libpurple/protocols/oscar/oscar.c:5882
 msgid ""
 "Because this reveals your IP address, it may be considered a security risk.  "
 "Do you wish to continue?"
@@ -7482,66 +7647,66 @@
 "Como isto revela o seu enderezo IP, pode ser considerado como un risco de "
 "privacidade. Quere continuar?"
 
-#: ../libpurple/protocols/oscar/oscar.c:5929
+#: ../libpurple/protocols/oscar/oscar.c:5888
 #: ../libpurple/protocols/oscar/peer.c:1022
 msgid "C_onnect"
 msgstr "C_onectar"
 
-#: ../libpurple/protocols/oscar/oscar.c:5964
+#: ../libpurple/protocols/oscar/oscar.c:5923
 msgid "Get AIM Info"
 msgstr "Obter informaciónde AIM"
 
-#: ../libpurple/protocols/oscar/oscar.c:5970
+#: ../libpurple/protocols/oscar/oscar.c:5929
 msgid "Edit Buddy Comment"
 msgstr "Editar comentario de contacto"
 
-#: ../libpurple/protocols/oscar/oscar.c:5978
+#: ../libpurple/protocols/oscar/oscar.c:5937
 msgid "Get Status Msg"
 msgstr "Obter mensaxe de estado"
 
-#: ../libpurple/protocols/oscar/oscar.c:5991
+#: ../libpurple/protocols/oscar/oscar.c:5950
 msgid "Direct IM"
 msgstr "MI directa"
 
-#: ../libpurple/protocols/oscar/oscar.c:6013
+#: ../libpurple/protocols/oscar/oscar.c:5972
 msgid "Re-request Authorization"
 msgstr "Solicitar unha autorización outra vez"
 
-#: ../libpurple/protocols/oscar/oscar.c:6072
+#: ../libpurple/protocols/oscar/oscar.c:6031
 msgid "Require authorization"
 msgstr "Pedir unha autorización"
 
-#: ../libpurple/protocols/oscar/oscar.c:6075
+#: ../libpurple/protocols/oscar/oscar.c:6034
 msgid "Web aware (enabling this will cause you to receive SPAM!)"
 msgstr "Capacidade web (habilitar isto pode provocar que reciba SPAM!)"
 
-#: ../libpurple/protocols/oscar/oscar.c:6080
+#: ../libpurple/protocols/oscar/oscar.c:6039
 msgid "ICQ Privacy Options"
 msgstr "Opcións de privacidade ICQ"
 
-#: ../libpurple/protocols/oscar/oscar.c:6099
+#: ../libpurple/protocols/oscar/oscar.c:6058
 msgid "The new formatting is invalid."
 msgstr "O novo formato é incorrecto."
 
-#: ../libpurple/protocols/oscar/oscar.c:6100
+#: ../libpurple/protocols/oscar/oscar.c:6059
 msgid "Screen name formatting can change only capitalization and whitespace."
 msgstr ""
 "O formato do nome de usuario só pode modificar a capitalización e espazos en "
 "branco."
 
-#: ../libpurple/protocols/oscar/oscar.c:6153
+#: ../libpurple/protocols/oscar/oscar.c:6112
 msgid "Change Address To:"
 msgstr "Cambiar o enderezo a:"
 
-#: ../libpurple/protocols/oscar/oscar.c:6199
+#: ../libpurple/protocols/oscar/oscar.c:6158
 msgid "<i>you are not waiting for authorization</i>"
 msgstr "<i>vostede non está agardando autorización</i>"
 
-#: ../libpurple/protocols/oscar/oscar.c:6202
+#: ../libpurple/protocols/oscar/oscar.c:6161
 msgid "You are awaiting authorization from the following buddies"
 msgstr "Agardando a autorización dos seguintes contactos"
 
-#: ../libpurple/protocols/oscar/oscar.c:6203
+#: ../libpurple/protocols/oscar/oscar.c:6162
 msgid ""
 "You can re-request authorization from these buddies by right-clicking on "
 "them and selecting \"Re-request Authorization.\""
@@ -7549,73 +7714,73 @@
 "Pode volver pedir autorización a estes contactos ao premer o botón dereito do "
 "rato sobre eles e escoller\"Solicitar autorización outra vez.\""
 
-#: ../libpurple/protocols/oscar/oscar.c:6220
+#: ../libpurple/protocols/oscar/oscar.c:6179
 msgid "Find Buddy by E-Mail"
 msgstr "Buscar un contacto polo correo electrónico"
 
-#: ../libpurple/protocols/oscar/oscar.c:6221
+#: ../libpurple/protocols/oscar/oscar.c:6180
 msgid "Search for a buddy by e-mail address"
 msgstr "Buscar un contacto polo enderezo de correo electrónico"
 
-#: ../libpurple/protocols/oscar/oscar.c:6222
+#: ../libpurple/protocols/oscar/oscar.c:6181
 msgid "Type the e-mail address of the buddy you are searching for."
 msgstr "Escriba o enderezo de correo electrónico do contacto que está a buscar."
 
-#: ../libpurple/protocols/oscar/oscar.c:6225
+#: ../libpurple/protocols/oscar/oscar.c:6184
 msgid "_Search"
 msgstr "_Buscar"
 
-#: ../libpurple/protocols/oscar/oscar.c:6383
+#: ../libpurple/protocols/oscar/oscar.c:6342
 msgid "Set User Info (URL)..."
 msgstr "Editar a información de usuario (URL)..."
 
-#: ../libpurple/protocols/oscar/oscar.c:6394
+#: ../libpurple/protocols/oscar/oscar.c:6353
 msgid "Change Password (URL)"
 msgstr "Modificar contrasinal (URL)"
 
-#: ../libpurple/protocols/oscar/oscar.c:6398
+#: ../libpurple/protocols/oscar/oscar.c:6357
 msgid "Configure IM Forwarding (URL)"
 msgstr "Configurar o reenvío de MI (URL)"
 
 #. ICQ actions
-#: ../libpurple/protocols/oscar/oscar.c:6408
+#: ../libpurple/protocols/oscar/oscar.c:6367
 msgid "Set Privacy Options..."
 msgstr "Editar opcións de privacidade..."
 
 #. AIM actions
-#: ../libpurple/protocols/oscar/oscar.c:6415
+#: ../libpurple/protocols/oscar/oscar.c:6374
 msgid "Confirm Account"
 msgstr "Confirmar conta"
 
-#: ../libpurple/protocols/oscar/oscar.c:6419
+#: ../libpurple/protocols/oscar/oscar.c:6378
 msgid "Display Currently Registered E-Mail Address"
 msgstr "Mostrar o enderezo rexistrado actualmente"
 
-#: ../libpurple/protocols/oscar/oscar.c:6423
+#: ../libpurple/protocols/oscar/oscar.c:6382
 msgid "Change Currently Registered E-Mail Address..."
 msgstr "Cambiar o enderezo de correo actualmente rexistrado..."
 
-#: ../libpurple/protocols/oscar/oscar.c:6430
+#: ../libpurple/protocols/oscar/oscar.c:6389
 msgid "Show Buddies Awaiting Authorization"
 msgstr "Mostrar contactos pendentes de autorización"
 
-#: ../libpurple/protocols/oscar/oscar.c:6436
+#: ../libpurple/protocols/oscar/oscar.c:6395
 msgid "Search for Buddy by E-Mail Address..."
 msgstr "Buscar un contacto polo enderezo de correo electrónico..."
 
-#: ../libpurple/protocols/oscar/oscar.c:6441
+#: ../libpurple/protocols/oscar/oscar.c:6400
 msgid "Search for Buddy by Information"
 msgstr "Localizar un contacto pola súa información"
 
-#: ../libpurple/protocols/oscar/oscar.c:6509
+#: ../libpurple/protocols/oscar/oscar.c:6468
 msgid "Use recent buddies group"
 msgstr "Usar un grupo de contactos recente"
 
-#: ../libpurple/protocols/oscar/oscar.c:6512
+#: ../libpurple/protocols/oscar/oscar.c:6471
 msgid "Show how long you have been idle"
 msgstr "Mostrar o tempo que estivo inactivo"
 
-#: ../libpurple/protocols/oscar/oscar.c:6667
+#: ../libpurple/protocols/oscar/oscar.c:6626
 msgid ""
 "Always use ICQ proxy server for file transfers\n"
 "(slower, but does not reveal your IP address)"
@@ -7835,7 +8000,6 @@
 msgstr "Rexeitou a solicitude de %d"
 
 #: ../libpurple/protocols/qq/buddy_opt.c:209
-#: ../libpurple/protocols/qq/group_opt.c:137
 msgid "Input your reason:"
 msgstr "Introduza a súa razón:"
 
@@ -7852,35 +8016,37 @@
 #: ../libpurple/protocols/qq/buddy_opt.c:214
 #: ../libpurple/protocols/qq/group_im.c:144
 #: ../libpurple/protocols/qq/group_opt.c:127
-#: ../libpurple/protocols/qq/sys_msg.c:91
-#: ../libpurple/protocols/qq/sys_msg.c:249
+#: ../libpurple/protocols/qq/sys_msg.c:90
+#: ../libpurple/protocols/qq/sys_msg.c:246
 msgid "Reject"
 msgstr "Rexeitar"
 
 #: ../libpurple/protocols/qq/buddy_opt.c:277
-msgid "Add buddy with auth request fails"
-msgstr "Engadir contacto con solicitude de autorización fallida"
-
-#: ../libpurple/protocols/qq/buddy_opt.c:308
+msgid "Add buddy with auth request failed"
+msgstr "Engadir contacto con fallo na solicitude de autorización"
+
+#. TODO: We don't really need to notify the user about this, do we?
+#: ../libpurple/protocols/qq/buddy_opt.c:309
 msgid "You have successfully removed a buddy"
 msgstr "Eliminou con éxito un contacto"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:336
-msgid "You have successfully removed yourself from a buddy"
-msgstr "Eliminouse a vostede mesmo con éxito dun contacto"
-
-#: ../libpurple/protocols/qq/buddy_opt.c:402
+#. TODO: Does the user really need to be notified about this?
+#: ../libpurple/protocols/qq/buddy_opt.c:338
+msgid "You have successfully removed yourself from your friend's buddy list"
+msgstr "Eliminóuselle con éxito da lista de contactos do seu amigo."
+
+#: ../libpurple/protocols/qq/buddy_opt.c:404
 #, c-format
 msgid "User %d needs authentication"
 msgstr "O usuario %d precisa unha autenticación"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:404
+#: ../libpurple/protocols/qq/buddy_opt.c:406
 #: ../libpurple/protocols/qq/group_join.c:136
 msgid "Input request here"
 msgstr "Introduza a solicitude aquí"
 
 #. TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands
-#: ../libpurple/protocols/qq/buddy_opt.c:405
+#: ../libpurple/protocols/qq/buddy_opt.c:407
 #: ../libpurple/protocols/qq/group_join.c:137
 msgid "Would you be my friend?"
 msgstr "Quere ser o meu amigo?"
@@ -7888,22 +8054,22 @@
 #. multiline
 #. masked
 #. hint
-#: ../libpurple/protocols/qq/buddy_opt.c:406
+#: ../libpurple/protocols/qq/buddy_opt.c:408
 #: ../libpurple/protocols/qq/group_join.c:138
 #: ../libpurple/protocols/qq/group_opt.c:143
 msgid "Send"
 msgstr "Enviar"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:416
-#, c-format
-msgid "You have added %d in buddy list"
-msgstr "Engadiu %d á lista de amigos"
-
-#: ../libpurple/protocols/qq/buddy_opt.c:513
+#: ../libpurple/protocols/qq/buddy_opt.c:418
+#, c-format
+msgid "You have added %d to buddy list"
+msgstr "Engadiu a %d á súa lista de contactos."
+
+#: ../libpurple/protocols/qq/buddy_opt.c:515
 msgid "QQid Error"
 msgstr "Erro de QQid"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:514
+#: ../libpurple/protocols/qq/buddy_opt.c:516
 msgid "Invalid QQid"
 msgstr "QQid non válido"
 
@@ -7932,7 +8098,7 @@
 msgstr "QQ Qun"
 
 #: ../libpurple/protocols/qq/group.c:120
-msgid "Please input external group ID"
+msgid "Please enter external group ID"
 msgstr "Introduza o ID do grupo externo"
 
 #: ../libpurple/protocols/qq/group.c:121
@@ -7941,12 +8107,12 @@
 
 #: ../libpurple/protocols/qq/group_im.c:126
 #, c-format
-msgid "User %d applied to join group %d"
-msgstr "O usuario %d solicita unirse ao grupo %d"
+msgid "User %d requested to join group %d"
+msgstr "O usuario %d pediu unirse ao grupo %d"
 
 #: ../libpurple/protocols/qq/group_im.c:127
 #: ../libpurple/protocols/qq/group_im.c:181
-#: ../libpurple/protocols/qq/sys_msg.c:195
+#: ../libpurple/protocols/qq/sys_msg.c:193
 #, c-format
 msgid "Reason: %s"
 msgstr "Razón: %s"
@@ -7966,37 +8132,37 @@
 
 #: ../libpurple/protocols/qq/group_im.c:141
 #: ../libpurple/protocols/qq/group_opt.c:128
-#: ../libpurple/protocols/qq/sys_msg.c:92
-#: ../libpurple/protocols/qq/sys_msg.c:251
+#: ../libpurple/protocols/qq/sys_msg.c:91
+#: ../libpurple/protocols/qq/sys_msg.c:248
 msgid "Approve"
 msgstr "Aprobar"
 
 #: ../libpurple/protocols/qq/group_im.c:180
 #, c-format
-msgid "You request to join group %d has been rejected by admin %d"
-msgstr "A súa solicitude para se unir ao grupo%d foi rexeitada polo administrador %d"
+msgid "Your request to join group %d has been rejected by admin %d"
+msgstr "A súa petición para unirse ao grupo %d foi rexeitada polo administrador %d"
 
 #: ../libpurple/protocols/qq/group_im.c:221
 #, c-format
-msgid "You request to join group %d has been approved by admin %d"
-msgstr "A súa solicitude para se unir ao grupo %d foi aprobada polo administrador %d"
+msgid "Your request to join group %d has been approved by admin %d"
+msgstr "A súa petición para unirse ao grupo %d foi aprobada polo administrador %d"
 
 #: ../libpurple/protocols/qq/group_im.c:257
 #, c-format
-msgid "You [%d] has exit group \"%d\""
-msgstr "Ti [%d] acabas de saír do grupo \"%d\""
+msgid "You [%d] have left group \"%d\""
+msgstr "Vostede [%d] abandoou o grupo \"%d\""
 
 #: ../libpurple/protocols/qq/group_im.c:291
 #, c-format
-msgid "You [%d] has been added by group \"%d\""
-msgstr "Vostede [%d] foi engadido ao grupo\"%d\""
+msgid "You [%d] have been added to group \"%d\""
+msgstr "Vostede [%d] uniuse ao grupo \"%d\""
 
 #: ../libpurple/protocols/qq/group_im.c:292
 msgid "This group has been added to your buddy list"
 msgstr "Este grupo foi engadido á súa lista de contactos"
 
 #: ../libpurple/protocols/qq/group_internal.c:41
-msgid "I am not member"
+msgid "I am not a member"
 msgstr "Non son un membro"
 
 #: ../libpurple/protocols/qq/group_internal.c:44
@@ -8020,24 +8186,24 @@
 msgstr "Este grupo non permite que se unan outros membros"
 
 #: ../libpurple/protocols/qq/group_join.c:233
-msgid "You have successfully exited the group"
-msgstr "Saíu con éxito do grupo"
+msgid "You have successfully left the group"
+msgstr "Abandoou o grupo con éxito"
 
 #: ../libpurple/protocols/qq/group_join.c:257
 msgid "QQ Group Auth"
 msgstr "Autenticación de grupo QQ"
 
 #: ../libpurple/protocols/qq/group_join.c:258
-msgid "Your authorization operation has been accepted by the QQ server"
-msgstr "A súa operación de autorización foi aceptada polo servidor QQ"
+msgid "Your authorization request has been accepted by the QQ server"
+msgstr "A súa solicitude de autorización foi aceptada polo servidor QQ"
 
 #: ../libpurple/protocols/qq/group_join.c:329
-msgid "You inputted a group id outside the acceptable range"
-msgstr "Introduciu un id de grupo fóra dun intervalo aceptado"
+msgid "You entered a group ID outside the acceptable range"
+msgstr "Introduciu un ID de grupo fora do rango de aceptación"
 
 #: ../libpurple/protocols/qq/group_join.c:360
-msgid "Are you sure to exit this Qun?"
-msgstr "Está seguro de que quere saír deste Qun?"
+msgid "Are you sure you want to leave this Qun?"
+msgstr "Está seguro que quera abandoar este Qun?"
 
 #: ../libpurple/protocols/qq/group_join.c:362
 msgid ""
@@ -8047,10 +8213,6 @@
 "Nota: se vostede é o creador, \n"
 "esta operación eliminará finalmente este Qun."
 
-#: ../libpurple/protocols/qq/group_join.c:367
-msgid "Go ahead"
-msgstr "Seguir"
-
 #: ../libpurple/protocols/qq/group_network.c:92
 #, c-format
 msgid "Code [0x%02X]: %s"
@@ -8060,18 +8222,22 @@
 msgid "Group Operation Error"
 msgstr "Erro de operación do grupo"
 
-#. we wanna see window
+#. we want to see window
 #: ../libpurple/protocols/qq/group_opt.c:124
-#: ../libpurple/protocols/qq/sys_msg.c:88
-msgid "Do you wanna approve the request?"
-msgstr "Quere aprobar a solicitude?"
+#: ../libpurple/protocols/qq/sys_msg.c:87
+msgid "Do you want to approve the request?"
+msgstr "Quere aprobar esta petición?"
+
+#: ../libpurple/protocols/qq/group_opt.c:137
+msgid "Enter your reason:"
+msgstr "Introduza a súa razón:"
 
 #: ../libpurple/protocols/qq/group_opt.c:235
-msgid "You have successfully modify Qun member"
+msgid "You have successfully modified Qun member"
 msgstr "Modificou con éxito o membro de Qun"
 
 #: ../libpurple/protocols/qq/group_opt.c:305
-msgid "You have successfully modify Qun information"
+msgid "You have successfully modified Qun information"
 msgstr "Modificou con éxito a información de Qun"
 
 #: ../libpurple/protocols/qq/group_opt.c:392
@@ -8091,20 +8257,16 @@
 msgstr "Mensaxe do sistema"
 
 #: ../libpurple/protocols/qq/im.c:576
-msgid "Server ACK"
-msgstr "Servidor ACK"
-
-#: ../libpurple/protocols/qq/im.c:576
 msgid "Failed to send IM."
 msgstr "Non se puido enviar MI."
 
 #: ../libpurple/protocols/qq/keep_alive.c:87
-msgid "Keep alive error, seems connection lost!"
-msgstr "Produciuse un erro, semella que se perdeu a conexión!"
+msgid "Keep alive error"
+msgstr "Produciuse un erro"
 
 #: ../libpurple/protocols/qq/login_logout.c:408
-msgid "Request login token error!"
-msgstr "Erro na solicitude de inicio de sesión!"
+msgid "Error requesting login token"
+msgstr "Erro na solicitude de inicio de sesión"
 
 #: ../libpurple/protocols/qq/login_logout.c:486
 msgid "Unable to login, check debug log"
@@ -8123,96 +8285,83 @@
 msgid "Unknown-%d"
 msgstr "Descoñecido-%d"
 
-#: ../libpurple/protocols/qq/qq.c:209
-#, c-format
-msgid "%s Address"
-msgstr "%s Enderezo"
-
-#: ../libpurple/protocols/qq/qq.c:240
+#: ../libpurple/protocols/qq/qq.c:211
+msgid "TCP Address"
+msgstr "Enderezo TCP"
+
+#: ../libpurple/protocols/qq/qq.c:213
+msgid "UDP Address"
+msgstr "Enderezo UDP"
+
+#: ../libpurple/protocols/qq/qq.c:242
 msgid "Level"
 msgstr "Nivel"
 
-#: ../libpurple/protocols/qq/qq.c:278
-msgid "QQ: Available"
-msgstr "QQ: Dispoñible"
-
-#: ../libpurple/protocols/qq/qq.c:282
-msgid "QQ: Away"
-msgstr "QQ: Ausente"
-
-#: ../libpurple/protocols/qq/qq.c:286
-msgid "QQ: Invisible"
-msgstr "QQ: invisible"
-
-#: ../libpurple/protocols/qq/qq.c:290
-msgid "QQ: Offline"
-msgstr "QQ: Desconectado"
-
-#: ../libpurple/protocols/qq/qq.c:371
+#: ../libpurple/protocols/qq/qq.c:373
 msgid "Invalid name"
 msgstr "Nome non válido"
 
-#: ../libpurple/protocols/qq/qq.c:437
+#: ../libpurple/protocols/qq/qq.c:439
 #, c-format
 msgid "<b>Current Online</b>: %d<br>\n"
 msgstr "<b>Actualmente conectado</b>: %d<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:438
+#: ../libpurple/protocols/qq/qq.c:440
 #, c-format
 msgid "<b>Last Refresh</b>: %s<br>\n"
 msgstr "<b>Última actualización</b>: %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:442
+#: ../libpurple/protocols/qq/qq.c:444
 #, c-format
 msgid "<b>Connection Mode</b>: %s<br>\n"
 msgstr "<b>Modo de conexión:</b> %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:443
+#: ../libpurple/protocols/qq/qq.c:445
 #, c-format
 msgid "<b>Server IP</b>: %s: %d<br>\n"
 msgstr "<b>IP do servidor:</b> %s:%d<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:444
+#: ../libpurple/protocols/qq/qq.c:446
 #, c-format
 msgid "<b>My Public IP</b>: %s<br>\n"
 msgstr "<b>A miña IP pública:</b> %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:449
+#: ../libpurple/protocols/qq/qq.c:451
 #, c-format
 msgid "<b>Login Time</b>: %s<br>\n"
 msgstr "<b>Hora de inicio de sesión:</b>: %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:450
+#: ../libpurple/protocols/qq/qq.c:452
 #, c-format
 msgid "<b>Last Login IP</b>: %s<br>\n"
 msgstr "<b>Última IP de inicio de sesión</b> %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:451
+#: ../libpurple/protocols/qq/qq.c:453
 #, c-format
 msgid "<b>Last Login Time</b>: %s\n"
 msgstr "<b>Última hora de inicio de sesión</b>: %s\n"
 
-#: ../libpurple/protocols/qq/qq.c:455
+#: ../libpurple/protocols/qq/qq.c:457
 msgid "Login Information"
 msgstr "Información de inicio de sesión"
 
-#: ../libpurple/protocols/qq/qq.c:531
-msgid "Modify My Information"
-msgstr "Modificar a miña información"
-
-#: ../libpurple/protocols/qq/qq.c:534 ../libpurple/protocols/toc/toc.c:1680
+#: ../libpurple/protocols/qq/qq.c:533
+msgid "Set My Information"
+msgstr "Establecer a miña información"
+
+#: ../libpurple/protocols/qq/qq.c:536 ../libpurple/protocols/toc/toc.c:1680
 msgid "Change Password"
 msgstr "Modificar o contrasinal"
 
-#: ../libpurple/protocols/qq/qq.c:537
+#: ../libpurple/protocols/qq/qq.c:539
 msgid "Show Login Information"
 msgstr "Mostrar información de inicio de sesión"
 
-#: ../libpurple/protocols/qq/qq.c:558
-msgid "Exit this QQ Qun"
+#: ../libpurple/protocols/qq/qq.c:560
+msgid "Leave this QQ Qun"
 msgstr "Saír desta QQ Qun"
 
-#: ../libpurple/protocols/qq/qq.c:582
+#: ../libpurple/protocols/qq/qq.c:584
 msgid "Block this buddy"
 msgstr "Bloquear a este contacto"
 
@@ -8226,22 +8375,14 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../libpurple/protocols/qq/qq.c:723 ../libpurple/protocols/qq/qq.c:725
+#: ../libpurple/protocols/qq/qq.c:725 ../libpurple/protocols/qq/qq.c:727
 msgid "QQ Protocol\tPlugin"
 msgstr "Protocolo QQ\tComplemento"
 
-#: ../libpurple/protocols/qq/qq.c:750
+#: ../libpurple/protocols/qq/qq.c:752
 msgid "Connect using TCP"
 msgstr "Conectar usando TCP"
 
-#: ../libpurple/protocols/qq/qq_proxy.c:497
-msgid "Socket send error"
-msgstr "Erro de envio do conectador"
-
-#: ../libpurple/protocols/qq/qq_proxy.c:500
-msgid "Connection refused"
-msgstr "Conexión rexeitada"
-
 #: ../libpurple/protocols/qq/recv_core.c:309
 msgid "Socket error"
 msgstr "Erro do conectador"
@@ -8274,53 +8415,52 @@
 msgid "Login failed, no reply"
 msgstr "Fallou o inicio de sesión , non responder"
 
-#: ../libpurple/protocols/qq/sys_msg.c:112
-msgid "Do you wanna add this buddy?"
-msgstr "Desexa engadir este contacto?"
+#: ../libpurple/protocols/qq/sys_msg.c:110
+msgid "Do you want to add this buddy?"
+msgstr "Quere engadir este contacto?"
 
 #. only need to get value
-#: ../libpurple/protocols/qq/sys_msg.c:168
+#: ../libpurple/protocols/qq/sys_msg.c:166
 #, c-format
 msgid "You have been added by %s"
 msgstr "Foi engadido por %s"
 
-#: ../libpurple/protocols/qq/sys_msg.c:171
+#: ../libpurple/protocols/qq/sys_msg.c:169
 msgid "Would like to add him?"
 msgstr "Quere engadilo?"
 
-#: ../libpurple/protocols/qq/sys_msg.c:178
-#, c-format
-msgid "%s has added you [%s]"
-msgstr "%s engadiulle [%s]"
-
-#: ../libpurple/protocols/qq/sys_msg.c:194
+#: ../libpurple/protocols/qq/sys_msg.c:176
+#, c-format
+msgid "%s has added you [%s] to his or her buddy list"
+msgstr "%s engadiuno [%s] á súa lista de contactos"
+
+#: ../libpurple/protocols/qq/sys_msg.c:192
 #, c-format
 msgid "User %s rejected your request"
 msgstr "O usuario %s rexeitou a súa solicitude"
 
-#: ../libpurple/protocols/qq/sys_msg.c:214
-#, c-format
-msgid "User %s has approved your request"
+#: ../libpurple/protocols/qq/sys_msg.c:212
+#, c-format
+msgid "User %s approved your request"
 msgstr "O usuario %s aprobou a súa solicitude"
 
-#. TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze
 #. TODO: this should go through purple_account_request_authorization()
-#: ../libpurple/protocols/qq/sys_msg.c:241
-#, c-format
-msgid "%s wanna add you [%s] as friends"
-msgstr "%s quere engadirlle [%s] como amigo"
-
-#: ../libpurple/protocols/qq/sys_msg.c:242
+#: ../libpurple/protocols/qq/sys_msg.c:238
+#, c-format
+msgid "%s wants to add you [%s] as a friend"
+msgstr "%s quere engadilo [%s] como amigo"
+
+#: ../libpurple/protocols/qq/sys_msg.c:239
 #, c-format
 msgid "Message: %s"
 msgstr "Mensaxe: %s"
 
-#: ../libpurple/protocols/qq/sys_msg.c:264
+#: ../libpurple/protocols/qq/sys_msg.c:261
 #, c-format
 msgid "%s is not in your buddy list"
 msgstr " %s non está na súa lista de contactos"
 
-#: ../libpurple/protocols/qq/sys_msg.c:266
+#: ../libpurple/protocols/qq/sys_msg.c:263
 msgid "Would you like to add him?"
 msgstr "Quere engadilo?"
 
@@ -8514,7 +8654,7 @@
 msgid "Send TEST Announcement"
 msgstr "Enviar anuncio de PROBA"
 
-#: ../libpurple/protocols/sametime/sametime.c:3587 ../pidgin/gtkconv.c:4302
+#: ../libpurple/protocols/sametime/sametime.c:3587 ../pidgin/gtkconv.c:4329
 msgid "Topic:"
 msgstr "Asunto:"
 
@@ -8539,7 +8679,7 @@
 msgid "No Sametime Community Server Specified"
 msgstr "Non se especificou un servidor de comunidade Sametime"
 
-#: ../libpurple/protocols/sametime/sametime.c:3645 ../pidgin/gtkblist.c:4025
+#: ../libpurple/protocols/sametime/sametime.c:3645 ../pidgin/gtkblist.c:4024
 msgid "Connect"
 msgstr "Conectar"
 
@@ -8718,7 +8858,7 @@
 "enviarlles mensaxes cos botóns de acción que se amosan abaixo."
 
 #. Create the window
-#: ../libpurple/protocols/sametime/sametime.c:5539 ../pidgin/gtknotify.c:718
+#: ../libpurple/protocols/sametime/sametime.c:5539 ../pidgin/gtknotify.c:726
 msgid "Search Results"
 msgstr "Resultados da busca"
 
@@ -9992,7 +10132,7 @@
 msgstr "O seu estado de ánimo actual"
 
 #: ../libpurple/protocols/silc/silc.c:741
-#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1636
+#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1638
 msgid "Normal"
 msgstr "Normal"
 
@@ -10388,7 +10528,7 @@
 msgstr "Protocolo de conferencia segura en vivo na Internet (SILC)"
 
 #: ../libpurple/protocols/silc/silc.c:1910
-#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2029
+#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2031
 msgid "Network"
 msgstr "Rede"
 
@@ -10867,8 +11007,8 @@
 msgid "Password Change Successful"
 msgstr "O contrasinal modificouse con éxito"
 
-#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5531
-#: ../pidgin/gtkblist.c:5884
+#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5530
+#: ../pidgin/gtkblist.c:5883
 msgid "_Group:"
 msgstr "_Grupo:"
 
@@ -10936,28 +11076,28 @@
 msgid "Your Yahoo! message did not get sent."
 msgstr "A súa mensaxe Yahoo! non se enviou."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:893
+#: ../libpurple/protocols/yahoo/yahoo.c:895
 #, c-format
 msgid "%s just sent you a Buzz!"
 msgstr "%s acaba de darlle un cobadazo!"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:940
+#: ../libpurple/protocols/yahoo/yahoo.c:942
 #, c-format
 msgid "Yahoo! system message for %s:"
 msgstr "Mensaxe do sistema Yahoo! para %s:"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:999
+#: ../libpurple/protocols/yahoo/yahoo.c:1013
 msgid "Authorization denied message:"
 msgstr "Mensaxe de autorización rexeitada:"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1080
+#: ../libpurple/protocols/yahoo/yahoo.c:1142
 #, c-format
 msgid "%s has (retroactively) denied your request to add them to your list."
 msgstr ""
 "O usuario %s rexeitou a súa solicitude de engadilos á súa lista"
 "(de forma retroactiva)."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1083
+#: ../libpurple/protocols/yahoo/yahoo.c:1145
 #, c-format
 msgid ""
 "%s has (retroactively) denied your request to add them to your list for the "
@@ -10966,11 +11106,11 @@
 "O usuario %s rexeitou (de forma retroactiva) a súa solicitude de engadilos á súa "
 "lista pola seguinte razón: %s."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1086
+#: ../libpurple/protocols/yahoo/yahoo.c:1148
 msgid "Add buddy rejected"
 msgstr "Rexeitouse engadir o contacto"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1837
+#: ../libpurple/protocols/yahoo/yahoo.c:1899
 #, c-format
 msgid ""
 "The Yahoo server has requested the use of an unrecognized authentication "
@@ -10981,11 +11121,11 @@
 "Probablemente non será capaz de conectarse con Yahoo.  "
 "Comprobe se hai actualizacións de %s."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1840
+#: ../libpurple/protocols/yahoo/yahoo.c:1902
 msgid "Failed Yahoo! Authentication"
 msgstr "Fallou a autenticación en Yahoo!"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1906
+#: ../libpurple/protocols/yahoo/yahoo.c:1968
 #, c-format
 msgid ""
 "You have tried to ignore %s, but the user is on your buddy list.  Clicking "
@@ -10994,52 +11134,52 @@
 "Intentou ignorar a %s, mais o usuario está na súa lista de contactos. Se "
 "selecciona \"Si\" eliminarase e ignorarase este contacto."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1909
+#: ../libpurple/protocols/yahoo/yahoo.c:1971
 msgid "Ignore buddy?"
 msgstr "Ignorar o contacto?"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1972
+#: ../libpurple/protocols/yahoo/yahoo.c:2034
 msgid "Your account is locked, please log in to the Yahoo! website."
 msgstr "A conta está bloqueada. Inicie sesión no sitio web de Yahoo!."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1975
+#: ../libpurple/protocols/yahoo/yahoo.c:2037
 #, c-format
 msgid "Unknown error number %d. Logging into the Yahoo! website may fix this."
 msgstr ""
 "Erro descoñecido número %d. Se inicia sesión no sitio web de Yahoo! é "
 "posible que isto se arranxe."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2029
+#: ../libpurple/protocols/yahoo/yahoo.c:2091
 #, c-format
 msgid "Could not add buddy %s to group %s to the server list on account %s."
 msgstr ""
 "Non se puido engadir o contacto %s ao grupo %s á lista no servidor para a "
 "conta %s."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2032
+#: ../libpurple/protocols/yahoo/yahoo.c:2094
 msgid "Could not add buddy to server list"
 msgstr "Non se puido engadir o contacto á lista do servidor"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2151
+#: ../libpurple/protocols/yahoo/yahoo.c:2213
 #, c-format
 msgid "[ Audible %s/%s/%s.swf ] %s"
 msgstr "[ Audible %s/%s/%s.swf ] %s"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2491
+#: ../libpurple/protocols/yahoo/yahoo.c:2556
 msgid "Received unexpected HTTP response from server."
 msgstr "Recibiuse unha resposta HTTP inesperada do servidor."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2515
-#: ../libpurple/protocols/yahoo/yahoo.c:2701
-#: ../libpurple/protocols/yahoo/yahoo.c:2804
-#: ../libpurple/protocols/yahoo/yahoo.c:2814
+#: ../libpurple/protocols/yahoo/yahoo.c:2580
+#: ../libpurple/protocols/yahoo/yahoo.c:2766
+#: ../libpurple/protocols/yahoo/yahoo.c:2869
+#: ../libpurple/protocols/yahoo/yahoo.c:2879
 #: ../libpurple/protocols/yahoo/yahoochat.c:1418
 #: ../libpurple/protocols/yahoo/yahoochat.c:1488
 #: ../libpurple/protocols/yahoo/ycht.c:585
 msgid "Connection problem"
 msgstr "Problema de conexión"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2541
+#: ../libpurple/protocols/yahoo/yahoo.c:2606
 #, c-format
 msgid ""
 "Lost connection with %s:\n"
@@ -11048,7 +11188,7 @@
 "Perdeuse a conexión con %s:\n"
 "%s"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2566
+#: ../libpurple/protocols/yahoo/yahoo.c:2631
 #, c-format
 msgid ""
 "Could not establish a connection with %s:\n"
@@ -11057,111 +11197,111 @@
 "Non se puido establecer unha conexión con %s:\n"
 "%s"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2916
-#: ../libpurple/protocols/yahoo/yahoo.c:3602
+#: ../libpurple/protocols/yahoo/yahoo.c:2981
+#: ../libpurple/protocols/yahoo/yahoo.c:3667
 msgid "Not at Home"
 msgstr "Fóra da casa"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2918
-#: ../libpurple/protocols/yahoo/yahoo.c:3605
+#: ../libpurple/protocols/yahoo/yahoo.c:2983
+#: ../libpurple/protocols/yahoo/yahoo.c:3670
 msgid "Not at Desk"
 msgstr "Lonxe do escritorio"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2920
-#: ../libpurple/protocols/yahoo/yahoo.c:3608
+#: ../libpurple/protocols/yahoo/yahoo.c:2985
+#: ../libpurple/protocols/yahoo/yahoo.c:3673
 msgid "Not in Office"
 msgstr "Fóra da oficina"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2924
-#: ../libpurple/protocols/yahoo/yahoo.c:3614
+#: ../libpurple/protocols/yahoo/yahoo.c:2989
+#: ../libpurple/protocols/yahoo/yahoo.c:3679
 msgid "On Vacation"
 msgstr "De vacacións"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2928
-#: ../libpurple/protocols/yahoo/yahoo.c:3620
+#: ../libpurple/protocols/yahoo/yahoo.c:2993
+#: ../libpurple/protocols/yahoo/yahoo.c:3685
 msgid "Stepped Out"
 msgstr "Abandonou"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3021
-#: ../libpurple/protocols/yahoo/yahoo.c:3051
+#: ../libpurple/protocols/yahoo/yahoo.c:3086
+#: ../libpurple/protocols/yahoo/yahoo.c:3116
 msgid "Not on server list"
 msgstr "Non incluído na lista do servidor"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3068
-#: ../libpurple/protocols/yahoo/yahoo.c:3126
+#: ../libpurple/protocols/yahoo/yahoo.c:3133
+#: ../libpurple/protocols/yahoo/yahoo.c:3191
 msgid "Appear Online"
 msgstr "Aparecer conectado"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3071
-#: ../libpurple/protocols/yahoo/yahoo.c:3147
+#: ../libpurple/protocols/yahoo/yahoo.c:3136
+#: ../libpurple/protocols/yahoo/yahoo.c:3212
 msgid "Appear Permanently Offline"
 msgstr "Aparecer permanentemente desconectado"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3089
+#: ../libpurple/protocols/yahoo/yahoo.c:3154
 msgid "Presence"
 msgstr "Presenza"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3132
+#: ../libpurple/protocols/yahoo/yahoo.c:3197
 msgid "Appear Offline"
 msgstr "Aparecer desconectado"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3141
+#: ../libpurple/protocols/yahoo/yahoo.c:3206
 msgid "Don't Appear Permanently Offline"
 msgstr "Non aparecer sempre desconectado"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3189
+#: ../libpurple/protocols/yahoo/yahoo.c:3254
 msgid "Join in Chat"
 msgstr "Unirse a unha conversa"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3195
+#: ../libpurple/protocols/yahoo/yahoo.c:3260
 msgid "Initiate Conference"
 msgstr "Iniciar unha conferencia"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3223
+#: ../libpurple/protocols/yahoo/yahoo.c:3288
 msgid "Presence Settings"
 msgstr "Configuración da presenza"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3229
+#: ../libpurple/protocols/yahoo/yahoo.c:3294
 msgid "Start Doodling"
 msgstr "Comezar Doodle"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3330
+#: ../libpurple/protocols/yahoo/yahoo.c:3395
 msgid "Activate which ID?"
 msgstr "Que ID activar?"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3341
+#: ../libpurple/protocols/yahoo/yahoo.c:3406
 msgid "Join who in chat?"
 msgstr "A quen quere unir á conversa?"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3353
+#: ../libpurple/protocols/yahoo/yahoo.c:3418
 msgid "Activate ID..."
 msgstr "Activar ID..."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3357
+#: ../libpurple/protocols/yahoo/yahoo.c:3422
 msgid "Join User in Chat..."
 msgstr "Unir a un usuario á conversa..."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3362
+#: ../libpurple/protocols/yahoo/yahoo.c:3427
 msgid "Open Inbox"
 msgstr "Abrir a caixa de entrada"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3871
+#: ../libpurple/protocols/yahoo/yahoo.c:3947
 msgid "You have just sent a Buzz!"
 msgstr "Acaba de enviar un cobadazo!"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3930
+#: ../libpurple/protocols/yahoo/yahoo.c:4006
 msgid "join &lt;room&gt;:  Join a chat room on the Yahoo network"
 msgstr "join &lt;sala&gt;:  Unirse a unha sala na rede de Yahoo"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3935
+#: ../libpurple/protocols/yahoo/yahoo.c:4011
 msgid "list: List rooms on the Yahoo network"
 msgstr "list:  Mostrar as canles da rede Yahoo"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3939
+#: ../libpurple/protocols/yahoo/yahoo.c:4015
 msgid "buzz: Buzz a user to get their attention"
 msgstr "buzz: Avisar a un contacto para chamar a súa atención"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3943
+#: ../libpurple/protocols/yahoo/yahoo.c:4019
 msgid "doodle: Request user to start a Doodle session"
 msgstr "doodle: Solicitarlle ao usuario o comezo dunha sesión Doodle"
 
@@ -11175,56 +11315,56 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../libpurple/protocols/yahoo/yahoo.c:4151
-#: ../libpurple/protocols/yahoo/yahoo.c:4153
+#: ../libpurple/protocols/yahoo/yahoo.c:4227
+#: ../libpurple/protocols/yahoo/yahoo.c:4229
 msgid "Yahoo Protocol Plugin"
 msgstr "Complemento de protocolo Yahoo"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4176
+#: ../libpurple/protocols/yahoo/yahoo.c:4252
 msgid "Yahoo Japan"
 msgstr "Yahoo Xapón"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4179
+#: ../libpurple/protocols/yahoo/yahoo.c:4255
 msgid "Pager server"
 msgstr "Servidor do buscapersoas"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4182
+#: ../libpurple/protocols/yahoo/yahoo.c:4258
 msgid "Japan Pager server"
 msgstr "Servidor de buscapersoas xaponés"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4185
+#: ../libpurple/protocols/yahoo/yahoo.c:4261
 msgid "Pager port"
 msgstr "Porto do buscapersoas"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4188
+#: ../libpurple/protocols/yahoo/yahoo.c:4264
 msgid "File transfer server"
 msgstr "Servidor de transferencia de ficheiros"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4191
+#: ../libpurple/protocols/yahoo/yahoo.c:4267
 msgid "Japan file transfer server"
 msgstr "Servidor de transferencia de ficheiros xaponés"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4194
+#: ../libpurple/protocols/yahoo/yahoo.c:4270
 msgid "File transfer port"
 msgstr "Porto de transferencia de ficheiros"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4197
+#: ../libpurple/protocols/yahoo/yahoo.c:4273
 msgid "Chat room locale"
 msgstr "Localización da sala de conversa"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4200
+#: ../libpurple/protocols/yahoo/yahoo.c:4276
 msgid "Ignore conference and chatroom invitations"
 msgstr "Ignorar os convites a salas de conferencias ou de conversa"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4208
+#: ../libpurple/protocols/yahoo/yahoo.c:4284
 msgid "Chat room list URL"
 msgstr "Url de lista de salas da conversa"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4211
+#: ../libpurple/protocols/yahoo/yahoo.c:4287
 msgid "Yahoo Chat server"
 msgstr "Servidor de conversa de Yahoo"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4214
+#: ../libpurple/protocols/yahoo/yahoo.c:4290
 msgid "Yahoo Chat port"
 msgstr "Porto de conversa de Yahoo"
 
@@ -11313,7 +11453,7 @@
 msgstr "Non se puido establecer o descritor de ficheiro."
 
 #. TODO: what to do here - do we really have to disconnect?
-#: ../libpurple/protocols/yahoo/yahoo_packet.c:302
+#: ../libpurple/protocols/yahoo/yahoo_packet.c:307
 msgid "Write Error"
 msgstr "Erro de escritura"
 
@@ -11677,7 +11817,7 @@
 msgid "Unset"
 msgstr "Quitar"
 
-#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1057
+#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1058
 msgid "Do not disturb"
 msgstr "Non molestar"
 
@@ -11729,12 +11869,12 @@
 msgid "%x %X"
 msgstr "%x %X"
 
-#: ../libpurple/util.c:2692
+#: ../libpurple/util.c:2702
 #, c-format
 msgid "Error Reading %s"
 msgstr "Erro ao ler %s"
 
-#: ../libpurple/util.c:2693
+#: ../libpurple/util.c:2703
 #, c-format
 msgid ""
 "An error was encountered reading your %s.  They have not been loaded, and "
@@ -11743,84 +11883,84 @@
 "Atopouse un erro ao ler o seu %s. Non se cargou e o ficheiro antigo foi "
 "renomeado a %s~."
 
-#: ../libpurple/util.c:3193
+#: ../libpurple/util.c:3203
 msgid "Calculating..."
 msgstr "Calculando..."
 
-#: ../libpurple/util.c:3196
+#: ../libpurple/util.c:3206
 msgid "Unknown."
 msgstr "Descoñecido."
 
-#: ../libpurple/util.c:3222
+#: ../libpurple/util.c:3232
 #, c-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "%d segundo"
 msgstr[1] "%d segundo"
 
-#: ../libpurple/util.c:3234
+#: ../libpurple/util.c:3244
 #, c-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "%d día"
 msgstr[1] "%d día"
 
-#: ../libpurple/util.c:3242
+#: ../libpurple/util.c:3252
 #, c-format
 msgid "%s, %d hour"
 msgid_plural "%s, %d hours"
 msgstr[0] "%s, %d hora"
 msgstr[1] "%s, %d hora"
 
-#: ../libpurple/util.c:3248
+#: ../libpurple/util.c:3258
 #, c-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "%d hora"
 msgstr[1] "%d hora"
 
-#: ../libpurple/util.c:3256
+#: ../libpurple/util.c:3266
 #, c-format
 msgid "%s, %d minute"
 msgid_plural "%s, %d minutes"
 msgstr[0] "%s, %d minuto"
 msgstr[1] "%s, %d minuto"
 
-#: ../libpurple/util.c:3262
+#: ../libpurple/util.c:3272
 #, c-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "%d minuto"
 msgstr[1] "%d minuto"
 
-#: ../libpurple/util.c:3522
+#: ../libpurple/util.c:3532
 #, c-format
 msgid "Could not open %s: Redirected too many times"
 msgstr "Non se puido abrir %s: Demasiadas redireccións"
 
-#: ../libpurple/util.c:3559 ../libpurple/util.c:3854
+#: ../libpurple/util.c:3569 ../libpurple/util.c:3864
 #, c-format
 msgid "Unable to connect to %s"
 msgstr "Non se puido conectar a %s"
 
-#: ../libpurple/util.c:3682
+#: ../libpurple/util.c:3692
 #, c-format
 msgid ""
 "Unable to allocate enough memory to hold the contents from %s.  The web "
 "server may be trying something malicious."
 msgstr "Non é posible asignar memoria suficiente para manter os contidos de %s. O servidor web talvez pode estar a intentar algo malintencionado."
 
-#: ../libpurple/util.c:3717
+#: ../libpurple/util.c:3727
 #, c-format
 msgid "Error reading from %s: %s"
 msgstr "Erro ao ler desde %s: %s"
 
-#: ../libpurple/util.c:3748
+#: ../libpurple/util.c:3758
 #, c-format
 msgid "Error writing to %s: %s"
 msgstr "Error ao escribir a %s: %s"
 
-#: ../libpurple/util.c:3773
+#: ../libpurple/util.c:3783
 #, c-format
 msgid "Unable to connect to %s: %s"
 msgstr "Non se pode conectar a %s: %s"
@@ -11910,7 +12050,7 @@
 msgid "SOCKS 5"
 msgstr "SOCKS 5"
 
-#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1206
+#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1208
 msgid "Use Environmental Settings"
 msgstr "Usar a configuración do contorno"
 
@@ -11932,15 +12072,15 @@
 msgid "Proxy Options"
 msgstr "Opcións do proxy"
 
-#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1200
+#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1202
 msgid "Proxy _type:"
 msgstr "_Tipo de proxy:"
 
-#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1221
+#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1223
 msgid "_Host:"
 msgstr "_Servidor:"
 
-#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1239
+#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1241
 msgid "_Port:"
 msgstr "_Porto:"
 
@@ -11948,7 +12088,7 @@
 msgid "_Username:"
 msgstr "Nome de _usuario:"
 
-#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1276
+#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1278
 msgid "Pa_ssword:"
 msgstr "Co_ntrasinal:"
 
@@ -12005,8 +12145,8 @@
 msgstr "Introduza a información apropiada da conversa á que desexaría unirse.\n"
 
 #. Set up stuff for the account box
-#: ../pidgin/gtkblist.c:792 ../pidgin/gtkblist.c:5479
-#: ../pidgin/gtkblist.c:5845 ../pidgin/gtkpounce.c:540
+#: ../pidgin/gtkblist.c:792 ../pidgin/gtkblist.c:5478
+#: ../pidgin/gtkblist.c:5844 ../pidgin/gtkpounce.c:540
 #: ../pidgin/gtkroomlist.c:395
 msgid "_Account:"
 msgstr "Con_ta:"
@@ -12086,136 +12226,136 @@
 msgstr "_Expandir"
 
 #: ../pidgin/gtkblist.c:1572 ../pidgin/gtkblist.c:1584
-#: ../pidgin/gtkblist.c:4573 ../pidgin/gtkblist.c:4583
+#: ../pidgin/gtkblist.c:4572 ../pidgin/gtkblist.c:4582
 msgid "/Tools/Mute Sounds"
 msgstr "/Ferramentas/Silenciar sons"
 
-#: ../pidgin/gtkblist.c:2044 ../pidgin/gtkconv.c:4686
+#: ../pidgin/gtkblist.c:2044 ../pidgin/gtkconv.c:4731
 #: ../pidgin/gtkpounce.c:429
 msgid "You are not currently signed on with an account that can add that buddy."
 msgstr "Actualmente non está conectado con ningunha conta que poida engadir a ese contacto."
 
 #. Buddies menu
-#: ../pidgin/gtkblist.c:2847
+#: ../pidgin/gtkblist.c:2850
 msgid "/_Buddies"
 msgstr "/_Contactos"
 
-#: ../pidgin/gtkblist.c:2848
+#: ../pidgin/gtkblist.c:2851
 msgid "/Buddies/New Instant _Message..."
 msgstr "/Contactos/_Mensaxe instantánea nova..."
 
-#: ../pidgin/gtkblist.c:2849
+#: ../pidgin/gtkblist.c:2852
 msgid "/Buddies/Join a _Chat..."
 msgstr "/Contactos/_Unirse a unha conversa..."
 
-#: ../pidgin/gtkblist.c:2850
+#: ../pidgin/gtkblist.c:2853
 msgid "/Buddies/Get User _Info..."
 msgstr "/Contactos/Obter _información do usuario..."
 
-#: ../pidgin/gtkblist.c:2851
+#: ../pidgin/gtkblist.c:2854
 msgid "/Buddies/View User _Log..."
 msgstr "/Contactos/Ver _rexistro do usuario..."
 
-#: ../pidgin/gtkblist.c:2853
+#: ../pidgin/gtkblist.c:2856
 msgid "/Buddies/Show _Offline Buddies"
 msgstr "/Contactos/Mostrar contactos _desconectados"
 
-#: ../pidgin/gtkblist.c:2854
+#: ../pidgin/gtkblist.c:2857
 msgid "/Buddies/Show _Empty Groups"
 msgstr "/Contactos/Mostrar grupos _baleiros"
 
-#: ../pidgin/gtkblist.c:2855
+#: ../pidgin/gtkblist.c:2858
 msgid "/Buddies/Show Buddy _Details"
 msgstr "/Contactos/Mostrar detalles de _contactos"
 
-#: ../pidgin/gtkblist.c:2856
-msgid "/Buddies/Show Idle _Times"
-msgstr "/Contactos/Mostrar _tempo de ausencia"
-
-#: ../pidgin/gtkblist.c:2857
-msgid "/Buddies/_Sort Buddies"
-msgstr "/Contactos/_Ordenar contactos"
-
 #: ../pidgin/gtkblist.c:2859
+msgid "/Buddies/Show Idle _Times"
+msgstr "/Contactos/Mostrar _tempo de ausencia"
+
+#: ../pidgin/gtkblist.c:2860
+msgid "/Buddies/_Sort Buddies"
+msgstr "/Contactos/_Ordenar contactos"
+
+#: ../pidgin/gtkblist.c:2862
 msgid "/Buddies/_Add Buddy..."
 msgstr "/Contactos/_Engadir un contacto..."
 
-#: ../pidgin/gtkblist.c:2860
+#: ../pidgin/gtkblist.c:2863
 msgid "/Buddies/Add C_hat..."
 msgstr "/Contactos/Engadir unha con_versa..."
 
-#: ../pidgin/gtkblist.c:2861
+#: ../pidgin/gtkblist.c:2864
 msgid "/Buddies/Add _Group..."
 msgstr "/Contactos/Engadir un _grupo..."
 
-#: ../pidgin/gtkblist.c:2863
+#: ../pidgin/gtkblist.c:2866
 msgid "/Buddies/_Quit"
 msgstr "/Contactos/_Saír"
 
 #. Accounts menu
-#: ../pidgin/gtkblist.c:2866
+#: ../pidgin/gtkblist.c:2869
 msgid "/_Accounts"
 msgstr "/Con_tas"
 
-#: ../pidgin/gtkblist.c:2867 ../pidgin/gtkblist.c:6543
+#: ../pidgin/gtkblist.c:2870 ../pidgin/gtkblist.c:6542
 msgid "/Accounts/Add\\/Edit"
 msgstr "/Contas/Engadir\\/Editar"
 
 #. Tools
-#: ../pidgin/gtkblist.c:2870
+#: ../pidgin/gtkblist.c:2873
 msgid "/_Tools"
 msgstr "/_Ferramentas"
 
-#: ../pidgin/gtkblist.c:2871
-msgid "/Tools/Buddy _Pounces"
-msgstr "/Ferramentas/_Avisos de contacto"
-
-#: ../pidgin/gtkblist.c:2872
-msgid "/Tools/Plu_gins"
-msgstr "/Ferramentas/C_omplementos"
-
-#: ../pidgin/gtkblist.c:2873
-msgid "/Tools/Pr_eferences"
-msgstr "/Ferramentas/Pr_eferencias"
-
 #: ../pidgin/gtkblist.c:2874
-msgid "/Tools/Pr_ivacy"
-msgstr "/Ferramentas/Pr_ivacidade"
+msgid "/Tools/Buddy _Pounces"
+msgstr "/Ferramentas/_Avisos de contacto"
+
+#: ../pidgin/gtkblist.c:2875
+msgid "/Tools/Plu_gins"
+msgstr "/Ferramentas/C_omplementos"
 
 #: ../pidgin/gtkblist.c:2876
-msgid "/Tools/_File Transfers"
-msgstr "/Ferramentas/Transferencias de _ficheiros"
+msgid "/Tools/Pr_eferences"
+msgstr "/Ferramentas/Pr_eferencias"
 
 #: ../pidgin/gtkblist.c:2877
+msgid "/Tools/Pr_ivacy"
+msgstr "/Ferramentas/Pr_ivacidade"
+
+#: ../pidgin/gtkblist.c:2879
+msgid "/Tools/_File Transfers"
+msgstr "/Ferramentas/Transferencias de _ficheiros"
+
+#: ../pidgin/gtkblist.c:2880
 msgid "/Tools/R_oom List"
 msgstr "/Ferramentas/Lista de _salas"
 
-#: ../pidgin/gtkblist.c:2878
+#: ../pidgin/gtkblist.c:2881
 msgid "/Tools/System _Log"
 msgstr "/Ferramentas/_Rexistro do sistema"
 
-#: ../pidgin/gtkblist.c:2880
+#: ../pidgin/gtkblist.c:2883
 msgid "/Tools/Mute _Sounds"
 msgstr "/Ferramentas/Silenciar s_ons"
 
 #. Help
-#: ../pidgin/gtkblist.c:2882
+#: ../pidgin/gtkblist.c:2885
 msgid "/_Help"
 msgstr "/A_xuda"
 
-#: ../pidgin/gtkblist.c:2883
+#: ../pidgin/gtkblist.c:2886
 msgid "/Help/Online _Help"
 msgstr "/Axuda/A_xuda en liña"
 
-#: ../pidgin/gtkblist.c:2884
+#: ../pidgin/gtkblist.c:2887
 msgid "/Help/_Debug Window"
 msgstr "/Axuda/Ventá de _depuración"
 
-#: ../pidgin/gtkblist.c:2886 ../pidgin/gtkblist.c:2888
+#: ../pidgin/gtkblist.c:2889 ../pidgin/gtkblist.c:2891
 msgid "/Help/_About"
 msgstr "/Axuda/_Acerca de"
 
-#: ../pidgin/gtkblist.c:2917
+#: ../pidgin/gtkblist.c:2920
 #, c-format
 msgid ""
 "\n"
@@ -12224,132 +12364,132 @@
 "\n"
 "<b>Conta:</b> %s"
 
-#: ../pidgin/gtkblist.c:2995
+#: ../pidgin/gtkblist.c:2998
 msgid "Buddy Alias"
 msgstr "Alias de contacto"
 
-#: ../pidgin/gtkblist.c:3024
+#: ../pidgin/gtkblist.c:3027
 msgid "Logged In"
 msgstr "Xa está conectado"
 
-#: ../pidgin/gtkblist.c:3070
+#: ../pidgin/gtkblist.c:3073
 msgid "Last Seen"
 msgstr "Última vista"
 
-#: ../pidgin/gtkblist.c:3090
+#: ../pidgin/gtkblist.c:3093
 msgid "Spooky"
 msgstr "Espeluznante"
 
-#: ../pidgin/gtkblist.c:3092
+#: ../pidgin/gtkblist.c:3095
 msgid "Awesome"
 msgstr "Impresionante"
 
-#: ../pidgin/gtkblist.c:3094
+#: ../pidgin/gtkblist.c:3097
 msgid "Rockin'"
 msgstr "Brillante"
 
-#: ../pidgin/gtkblist.c:3437
+#: ../pidgin/gtkblist.c:3436
 #, c-format
 msgid "Idle %dd %dh %02dm"
 msgstr "Inactivo %dd %dh %02dm"
 
-#: ../pidgin/gtkblist.c:3439
+#: ../pidgin/gtkblist.c:3438
 #, c-format
 msgid "Idle %dh %02dm"
 msgstr "Inactivo %dh %02dm"
 
-#: ../pidgin/gtkblist.c:3441
+#: ../pidgin/gtkblist.c:3440
 #, c-format
 msgid "Idle %dm"
 msgstr "Inactivo %dm"
 
-#: ../pidgin/gtkblist.c:3586
+#: ../pidgin/gtkblist.c:3585
 msgid "/Buddies/New Instant Message..."
 msgstr "/Contacto/Mensaxe instantánea _nova..."
 
-#: ../pidgin/gtkblist.c:3587 ../pidgin/gtkblist.c:3620
+#: ../pidgin/gtkblist.c:3586 ../pidgin/gtkblist.c:3619
 msgid "/Buddies/Join a Chat..."
 msgstr "/Contacto/Unirse a unha conversa..."
 
-#: ../pidgin/gtkblist.c:3588
+#: ../pidgin/gtkblist.c:3587
 msgid "/Buddies/Get User Info..."
 msgstr "/Contacto/Obter información do usuario..."
 
-#: ../pidgin/gtkblist.c:3589
+#: ../pidgin/gtkblist.c:3588
 msgid "/Buddies/Add Buddy..."
 msgstr "/Contacto/Engadir un contacto..."
 
-#: ../pidgin/gtkblist.c:3590 ../pidgin/gtkblist.c:3623
+#: ../pidgin/gtkblist.c:3589 ../pidgin/gtkblist.c:3622
 msgid "/Buddies/Add Chat..."
 msgstr "/Contacto/Engadir unha conversa..."
 
-#: ../pidgin/gtkblist.c:3591
+#: ../pidgin/gtkblist.c:3590
 msgid "/Buddies/Add Group..."
 msgstr "/Contacto/Engadir un grupo..."
 
-#: ../pidgin/gtkblist.c:3626
+#: ../pidgin/gtkblist.c:3625
 msgid "/Tools/Privacy"
 msgstr "/Ferramentas/Privacidade"
 
-#: ../pidgin/gtkblist.c:3629
+#: ../pidgin/gtkblist.c:3628
 msgid "/Tools/Room List"
 msgstr "/Ferramentas/Lista de salas"
 
-#: ../pidgin/gtkblist.c:3726 ../pidgin/gtkdocklet.c:153
+#: ../pidgin/gtkblist.c:3725 ../pidgin/gtkdocklet.c:153
 #, c-format
 msgid "%d unread message from %s\n"
 msgid_plural "%d unread messages from %s\n"
 msgstr[0] "%d mensaxes sen ler de %s\n"
 msgstr[1] "%d mensaxes sen ler de %s\n"
 
-#: ../pidgin/gtkblist.c:3806
+#: ../pidgin/gtkblist.c:3805
 msgid "Manually"
 msgstr "Manualmente"
 
-#: ../pidgin/gtkblist.c:3808
+#: ../pidgin/gtkblist.c:3807
 msgid "Alphabetically"
 msgstr "Alfabeticamente"
 
+#: ../pidgin/gtkblist.c:3808
+msgid "By status"
+msgstr "Por estado"
+
 #: ../pidgin/gtkblist.c:3809
-msgid "By status"
-msgstr "Por estado"
-
-#: ../pidgin/gtkblist.c:3810
 msgid "By log size"
 msgstr "Por tamaño de rexistro"
 
-#: ../pidgin/gtkblist.c:4015 ../pidgin/gtkconn.c:178
+#: ../pidgin/gtkblist.c:4014 ../pidgin/gtkconn.c:178
 #, c-format
 msgid "%s disconnected"
 msgstr "%s desconectado"
 
-#: ../pidgin/gtkblist.c:4025
+#: ../pidgin/gtkblist.c:4024
 msgid "Re-enable Account"
 msgstr "Reactivar conta"
 
-#: ../pidgin/gtkblist.c:4051
+#: ../pidgin/gtkblist.c:4050
 #, c-format
 msgid "<span color=\"red\">%s disconnected: %s</span>"
 msgstr "<span color=\"red\">%s desconectado: %s</span>"
 
-#: ../pidgin/gtkblist.c:4203
+#: ../pidgin/gtkblist.c:4202
 msgid "<b>Username:</b>"
 msgstr "<b>Nome de usuario:</b>"
 
-#: ../pidgin/gtkblist.c:4210
+#: ../pidgin/gtkblist.c:4209
 msgid "<b>Password:</b>"
 msgstr "<b>Contrasinal:</b>"
 
-#: ../pidgin/gtkblist.c:4221
+#: ../pidgin/gtkblist.c:4220
 msgid "_Login"
 msgstr "_Iniciar a sesión"
 
-#: ../pidgin/gtkblist.c:4304
+#: ../pidgin/gtkblist.c:4303
 msgid "/Accounts"
 msgstr "/Contas"
 
 #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy
-#: ../pidgin/gtkblist.c:4318
+#: ../pidgin/gtkblist.c:4317
 #, c-format
 msgid ""
 "<span weight='bold' size='larger'>Welcome to %s!</span>\n"
@@ -12367,23 +12507,23 @@
 #. set the Show Offline Buddies option. must be done
 #. * after the treeview or faceprint gets mad. -Robot101
 #.
-#: ../pidgin/gtkblist.c:4567
+#: ../pidgin/gtkblist.c:4566
 msgid "/Buddies/Show Offline Buddies"
 msgstr "/Contactos/Mostrar contactos desconectados"
 
-#: ../pidgin/gtkblist.c:4570
+#: ../pidgin/gtkblist.c:4569
 msgid "/Buddies/Show Empty Groups"
 msgstr "/Contactos/Mostrar grupos baleiros"
 
-#: ../pidgin/gtkblist.c:4576
+#: ../pidgin/gtkblist.c:4575
 msgid "/Buddies/Show Buddy Details"
 msgstr "/Contactos/Mostrar detalles de contactos"
 
-#: ../pidgin/gtkblist.c:4579
+#: ../pidgin/gtkblist.c:4578
 msgid "/Buddies/Show Idle Times"
 msgstr "/Contactos/Mostrar tempos de ausencia"
 
-#: ../pidgin/gtkblist.c:5456
+#: ../pidgin/gtkblist.c:5455
 msgid ""
 "Please enter the screen name of the person you would like to add to your "
 "buddy list. You may optionally enter an alias, or nickname,  for the buddy. "
@@ -12394,19 +12534,19 @@
 "nome de usuario sempre que for posible.\n"
 
 #. End of account box
-#: ../pidgin/gtkblist.c:5491
+#: ../pidgin/gtkblist.c:5490
 msgid "_Screen name:"
 msgstr "_Nome de usuario:"
 
-#: ../pidgin/gtkblist.c:5513 ../pidgin/gtkblist.c:5866
+#: ../pidgin/gtkblist.c:5512 ../pidgin/gtkblist.c:5865
 msgid "A_lias:"
 msgstr "A_lias:"
 
-#: ../pidgin/gtkblist.c:5778
+#: ../pidgin/gtkblist.c:5777
 msgid "This protocol does not support chat rooms."
 msgstr "Este protocolo non está soportado nas salas de conversa."
 
-#: ../pidgin/gtkblist.c:5794
+#: ../pidgin/gtkblist.c:5793
 msgid ""
 "You are not currently signed on with any protocols that have the ability to "
 "chat."
@@ -12414,7 +12554,7 @@
 "Non está conectado con ningunha conta que teña capacidade de acceder a "
 "conversas."
 
-#: ../pidgin/gtkblist.c:5835
+#: ../pidgin/gtkblist.c:5834
 msgid ""
 "Please enter an alias, and the appropriate information about the chat you "
 "would like to add to your buddy list.\n"
@@ -12422,39 +12562,39 @@
 "Introduza un alias e a información que crea apropiada da conversa que "
 "desexaría engadir á lista de contactos.\n"
 
-#: ../pidgin/gtkblist.c:5923
+#: ../pidgin/gtkblist.c:5922
 msgid "Please enter the name of the group to be added."
 msgstr "Introduza o nome do grupo que quere engadir."
 
-#: ../pidgin/gtkblist.c:6563
+#: ../pidgin/gtkblist.c:6562
 msgid "<PurpleMain>/Accounts/"
 msgstr "<PurpleMain>/Contas/"
 
-#: ../pidgin/gtkblist.c:6587
+#: ../pidgin/gtkblist.c:6586
 msgid "_Edit Account"
 msgstr "_Editar a conta"
 
-#: ../pidgin/gtkblist.c:6600 ../pidgin/gtkconv.c:3011
+#: ../pidgin/gtkblist.c:6599 ../pidgin/gtkconv.c:3037
 msgid "No actions available"
 msgstr "Non hai accións dispoñibles"
 
-#: ../pidgin/gtkblist.c:6608
+#: ../pidgin/gtkblist.c:6607
 msgid "_Disable"
 msgstr "_Desactivar"
 
-#: ../pidgin/gtkblist.c:6620
+#: ../pidgin/gtkblist.c:6619
 msgid "Enable Account"
 msgstr "Activar a conta"
 
-#: ../pidgin/gtkblist.c:6626
+#: ../pidgin/gtkblist.c:6625
 msgid "<PurpleMain>/Accounts/Enable Account"
 msgstr "<PurpleMain>/Contas/Activar conta"
 
-#: ../pidgin/gtkblist.c:6675
+#: ../pidgin/gtkblist.c:6674
 msgid "/Tools"
 msgstr "/Ferramentas"
 
-#: ../pidgin/gtkblist.c:6745
+#: ../pidgin/gtkblist.c:6744
 msgid "/Buddies/Sort Buddies"
 msgstr "/Contactos/Ordenar contactos"
 
@@ -12471,24 +12611,24 @@
 "%s non tentará reconectar a conta até que vostede corrixa o erro e "
 "a volva activar."
 
-#: ../pidgin/gtkconv.c:484
+#: ../pidgin/gtkconv.c:488
 msgid "Unknown command."
 msgstr "Comando descoñecido."
 
-#: ../pidgin/gtkconv.c:756 ../pidgin/gtkconv.c:782
+#: ../pidgin/gtkconv.c:760 ../pidgin/gtkconv.c:786
 msgid "That buddy is not on the same protocol as this chat."
 msgstr "Ese contacto non utiliza o mesmo protocolo que esta conversa."
 
-#: ../pidgin/gtkconv.c:776
+#: ../pidgin/gtkconv.c:780
 msgid "You are not currently signed on with an account that can invite that buddy."
 msgstr "Non está conectado con ningunha conta coa que poida convidar a ese contacto."
 
-#: ../pidgin/gtkconv.c:829
+#: ../pidgin/gtkconv.c:833
 msgid "Invite Buddy Into Chat Room"
 msgstr "Convidar a un contacto á sala de conversa"
 
 #. Put our happy label in it.
-#: ../pidgin/gtkconv.c:859
+#: ../pidgin/gtkconv.c:863
 msgid ""
 "Please enter the name of the user you wish to invite, along with an optional "
 "invite message."
@@ -12496,200 +12636,200 @@
 "Introduza o nome de usuario que desexa convidar, xunto cunha mensaxe de "
 "convite opcional."
 
-#: ../pidgin/gtkconv.c:880
+#: ../pidgin/gtkconv.c:884
 msgid "_Buddy:"
 msgstr "_Contacto:"
 
-#: ../pidgin/gtkconv.c:900 ../pidgin/gtksavedstatuses.c:1193
+#: ../pidgin/gtkconv.c:904 ../pidgin/gtksavedstatuses.c:1193
 #: ../pidgin/gtksavedstatuses.c:1525
 msgid "_Message:"
 msgstr "_Mensaxe:"
 
-#: ../pidgin/gtkconv.c:957 ../pidgin/gtkconv.c:2518 ../pidgin/gtkdebug.c:218
+#: ../pidgin/gtkconv.c:961 ../pidgin/gtkconv.c:2544 ../pidgin/gtkdebug.c:218
 #: ../pidgin/gtkft.c:542
 msgid "Unable to open file."
 msgstr "Non se puido abrir o ficheiro."
 
-#: ../pidgin/gtkconv.c:963
+#: ../pidgin/gtkconv.c:967
 #, c-format
 msgid "<h1>Conversation with %s</h1>\n"
 msgstr "<h1>Conversa con %s</h1>\n"
 
-#: ../pidgin/gtkconv.c:999
+#: ../pidgin/gtkconv.c:1003
 msgid "Save Conversation"
 msgstr "Gardar conversa"
 
-#: ../pidgin/gtkconv.c:1148 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742
+#: ../pidgin/gtkconv.c:1152 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742
 msgid "Find"
 msgstr "Buscar"
 
-#: ../pidgin/gtkconv.c:1174 ../pidgin/gtkdebug.c:194
+#: ../pidgin/gtkconv.c:1178 ../pidgin/gtkdebug.c:194
 msgid "_Search for:"
 msgstr "_Buscar:"
 
-#: ../pidgin/gtkconv.c:1357
+#: ../pidgin/gtkconv.c:1361
 msgid "Logging started. Future messages in this conversation will be logged."
 msgstr ""
 "Iniciuose o rexistro. A partir de agora rexistraranse todas as mensaxes "
 "desta conversa."
 
-#: ../pidgin/gtkconv.c:1365
+#: ../pidgin/gtkconv.c:1369
 msgid "Logging stopped. Future messages in this conversation will not be logged."
 msgstr ""
 "Detívose o rexistro. Non se rexistrarán mensaxes desta conversa de agora "
 "en adiante."
 
-#: ../pidgin/gtkconv.c:1613
+#: ../pidgin/gtkconv.c:1617
 msgid "Un-Ignore"
 msgstr "Non ignorar"
 
-#: ../pidgin/gtkconv.c:1616
+#: ../pidgin/gtkconv.c:1620
 msgid "Ignore"
 msgstr "Ignorar"
 
-#: ../pidgin/gtkconv.c:1636
+#: ../pidgin/gtkconv.c:1640
 msgid "Get Away Message"
 msgstr "Mensaxe de ausencia"
 
-#: ../pidgin/gtkconv.c:1659
+#: ../pidgin/gtkconv.c:1663
 msgid "Last said"
 msgstr "Dito a última vez"
 
-#: ../pidgin/gtkconv.c:2526
+#: ../pidgin/gtkconv.c:2552
 msgid "Unable to save icon file to disk."
 msgstr "Non se puido gardar o ficheiro de iconas no disco."
 
-#: ../pidgin/gtkconv.c:2577
+#: ../pidgin/gtkconv.c:2603
 msgid "Save Icon"
 msgstr "Gardar icona"
 
-#: ../pidgin/gtkconv.c:2629
+#: ../pidgin/gtkconv.c:2655
 msgid "Animate"
 msgstr "Animar"
 
-#: ../pidgin/gtkconv.c:2634
+#: ../pidgin/gtkconv.c:2660
 msgid "Hide Icon"
 msgstr "Ocultar icona"
 
-#: ../pidgin/gtkconv.c:2637
+#: ../pidgin/gtkconv.c:2663
 msgid "Save Icon As..."
 msgstr "Gardar a icona como..."
 
-#: ../pidgin/gtkconv.c:2641
+#: ../pidgin/gtkconv.c:2667
 msgid "Set Custom Icon..."
 msgstr "Establecer iconas personalizadas..."
 
-#: ../pidgin/gtkconv.c:2654
+#: ../pidgin/gtkconv.c:2680
 msgid "Remove Custom Icon"
 msgstr "Eliminar as iconas personalizadas"
 
 #. Conversation menu
-#: ../pidgin/gtkconv.c:2796
+#: ../pidgin/gtkconv.c:2822
 msgid "/_Conversation"
 msgstr "/_Conversa"
 
-#: ../pidgin/gtkconv.c:2798
+#: ../pidgin/gtkconv.c:2824
 msgid "/Conversation/New Instant _Message..."
 msgstr "/Conversa/_Mensaxe instantánea nova..."
 
-#: ../pidgin/gtkconv.c:2803
+#: ../pidgin/gtkconv.c:2829
 msgid "/Conversation/_Find..."
 msgstr "/Conversa/_Buscar..."
 
-#: ../pidgin/gtkconv.c:2805
+#: ../pidgin/gtkconv.c:2831
 msgid "/Conversation/View _Log"
 msgstr "/Conversa/Ver _rexistro"
 
-#: ../pidgin/gtkconv.c:2806
+#: ../pidgin/gtkconv.c:2832
 msgid "/Conversation/_Save As..."
 msgstr "/Conversa/_Gardar como..."
 
-#: ../pidgin/gtkconv.c:2808
+#: ../pidgin/gtkconv.c:2834
 msgid "/Conversation/Clea_r Scrollback"
 msgstr "/Conversa/Limpar _historial"
 
-#: ../pidgin/gtkconv.c:2812
+#: ../pidgin/gtkconv.c:2838
 msgid "/Conversation/Se_nd File..."
 msgstr "/Conversa/E_nviar ficheiro..."
 
-#: ../pidgin/gtkconv.c:2813
+#: ../pidgin/gtkconv.c:2839
 msgid "/Conversation/Add Buddy _Pounce..."
 msgstr "/Conversa/Engadir _aviso de contacto..."
 
-#: ../pidgin/gtkconv.c:2815
+#: ../pidgin/gtkconv.c:2841
 msgid "/Conversation/_Get Info"
 msgstr "/Conversa/_Obter información"
 
-#: ../pidgin/gtkconv.c:2817
+#: ../pidgin/gtkconv.c:2843
 msgid "/Conversation/In_vite..."
 msgstr "/Conversa/Con_vidar..."
 
-#: ../pidgin/gtkconv.c:2819
+#: ../pidgin/gtkconv.c:2845
 msgid "/Conversation/M_ore"
 msgstr "/Conversa/Má_is"
 
-#: ../pidgin/gtkconv.c:2823
+#: ../pidgin/gtkconv.c:2849
 msgid "/Conversation/Al_ias..."
 msgstr "/Conversa/A_lias..."
 
-#: ../pidgin/gtkconv.c:2825
+#: ../pidgin/gtkconv.c:2851
 msgid "/Conversation/_Block..."
 msgstr "/Conversa/_Bloquear..."
 
-#: ../pidgin/gtkconv.c:2827
+#: ../pidgin/gtkconv.c:2853
 msgid "/Conversation/_Unblock..."
 msgstr "/Conversa/_Desbloquear..."
 
-#: ../pidgin/gtkconv.c:2829
+#: ../pidgin/gtkconv.c:2855
 msgid "/Conversation/_Add..."
 msgstr "/Conversa/Enga_dir..."
 
-#: ../pidgin/gtkconv.c:2831
+#: ../pidgin/gtkconv.c:2857
 msgid "/Conversation/_Remove..."
 msgstr "/Conversa/_Eliminar..."
 
-#: ../pidgin/gtkconv.c:2836
+#: ../pidgin/gtkconv.c:2862
 msgid "/Conversation/Insert Lin_k..."
 msgstr "/Conversa/Inserir liga_zón..."
 
-#: ../pidgin/gtkconv.c:2838
+#: ../pidgin/gtkconv.c:2864
 msgid "/Conversation/Insert Imag_e..."
 msgstr "/Conversa/Inserir ima_xe..."
 
-#: ../pidgin/gtkconv.c:2844
+#: ../pidgin/gtkconv.c:2870
 msgid "/Conversation/_Close"
 msgstr "/Conversa/_Pechar"
 
 #. Options
-#: ../pidgin/gtkconv.c:2848
+#: ../pidgin/gtkconv.c:2874
 msgid "/_Options"
 msgstr "/_Opcións"
 
-#: ../pidgin/gtkconv.c:2849
+#: ../pidgin/gtkconv.c:2875
 msgid "/Options/Enable _Logging"
 msgstr "/Opcións/Activar _rexistro"
 
-#: ../pidgin/gtkconv.c:2850
+#: ../pidgin/gtkconv.c:2876
 msgid "/Options/Enable _Sounds"
 msgstr "/Opcións/Activar _sons"
 
-#: ../pidgin/gtkconv.c:2851
+#: ../pidgin/gtkconv.c:2877
 msgid "/Options/Show Buddy _Icon"
 msgstr "/Opcións/Mostrar _iconas dos contactos"
 
-#: ../pidgin/gtkconv.c:2853
+#: ../pidgin/gtkconv.c:2879
 msgid "/Options/Show Formatting _Toolbars"
 msgstr "/Opcións/Mostrar _barra de formato"
 
-#: ../pidgin/gtkconv.c:2854
+#: ../pidgin/gtkconv.c:2880
 msgid "/Options/Show Ti_mestamps"
 msgstr "/Opcións/Mostrar _marcas de tempo"
 
-#: ../pidgin/gtkconv.c:2999
+#: ../pidgin/gtkconv.c:3025
 msgid "/Conversation/More"
 msgstr "/Conversa/Máis"
 
-#: ../pidgin/gtkconv.c:3055
+#: ../pidgin/gtkconv.c:3081
 msgid "/Options"
 msgstr "/Opcións"
 
@@ -12698,176 +12838,176 @@
 #. Make sure the 'Conversation -> More' menuitems are regenerated whenever
 #. * the 'Conversation' menu pops up because the entries can change after the
 #. * conversation is created.
-#: ../pidgin/gtkconv.c:3090 ../pidgin/gtkconv.c:3122
+#: ../pidgin/gtkconv.c:3116 ../pidgin/gtkconv.c:3148
 msgid "/Conversation"
 msgstr "/Conversa"
 
-#: ../pidgin/gtkconv.c:3130
+#: ../pidgin/gtkconv.c:3156
 msgid "/Conversation/View Log"
 msgstr "/Conversa/Ver o rexistro"
 
-#: ../pidgin/gtkconv.c:3136
+#: ../pidgin/gtkconv.c:3162
 msgid "/Conversation/Send File..."
 msgstr "/Conversa/Enviar o ficheiro..."
 
-#: ../pidgin/gtkconv.c:3140
+#: ../pidgin/gtkconv.c:3166
 msgid "/Conversation/Add Buddy Pounce..."
 msgstr "/Conversa/Engadir un aviso de contacto..."
 
-#: ../pidgin/gtkconv.c:3146
+#: ../pidgin/gtkconv.c:3172
 msgid "/Conversation/Get Info"
 msgstr "/Conversa/Obter información"
 
-#: ../pidgin/gtkconv.c:3150
+#: ../pidgin/gtkconv.c:3176
 msgid "/Conversation/Invite..."
 msgstr "/Conversa/Convidar..."
 
-#: ../pidgin/gtkconv.c:3156
+#: ../pidgin/gtkconv.c:3182
 msgid "/Conversation/Alias..."
 msgstr "/Conversa/Alias..."
 
-#: ../pidgin/gtkconv.c:3160
+#: ../pidgin/gtkconv.c:3186
 msgid "/Conversation/Block..."
 msgstr "/Conversa/Bloquear..."
 
-#: ../pidgin/gtkconv.c:3164
+#: ../pidgin/gtkconv.c:3190
 msgid "/Conversation/Unblock..."
 msgstr "/Conversa/Desbloquear..."
 
-#: ../pidgin/gtkconv.c:3168
+#: ../pidgin/gtkconv.c:3194
 msgid "/Conversation/Add..."
 msgstr "/Conversa/Engadir..."
 
-#: ../pidgin/gtkconv.c:3172
+#: ../pidgin/gtkconv.c:3198
 msgid "/Conversation/Remove..."
 msgstr "/Conversa/Eliminar..."
 
-#: ../pidgin/gtkconv.c:3178
+#: ../pidgin/gtkconv.c:3204
 msgid "/Conversation/Insert Link..."
 msgstr "/Conversa/Inserir ligazón..."
 
-#: ../pidgin/gtkconv.c:3182
+#: ../pidgin/gtkconv.c:3208
 msgid "/Conversation/Insert Image..."
 msgstr "/Conversa/Inserir unha imaxe..."
 
-#: ../pidgin/gtkconv.c:3188
+#: ../pidgin/gtkconv.c:3214
 msgid "/Options/Enable Logging"
 msgstr "/Opcións/Activar rexistro"
 
-#: ../pidgin/gtkconv.c:3191
+#: ../pidgin/gtkconv.c:3217
 msgid "/Options/Enable Sounds"
 msgstr "/Opcións/Activar sons"
 
-#: ../pidgin/gtkconv.c:3204
+#: ../pidgin/gtkconv.c:3230
 msgid "/Options/Show Formatting Toolbars"
 msgstr "/Opcións/Mostrar barra de formato"
 
-#: ../pidgin/gtkconv.c:3207
+#: ../pidgin/gtkconv.c:3233
 msgid "/Options/Show Timestamps"
 msgstr "/Opcións/Mostrar marcas de tempo"
 
-#: ../pidgin/gtkconv.c:3210
+#: ../pidgin/gtkconv.c:3236
 msgid "/Options/Show Buddy Icon"
 msgstr "/Opcións/Mostrar iconas dos contactos"
 
-#: ../pidgin/gtkconv.c:3294 ../pidgin/gtkconv.c:3336
+#: ../pidgin/gtkconv.c:3320 ../pidgin/gtkconv.c:3362
 msgid "User is typing..."
 msgstr "O usuario está a escribir..."
 
-#: ../pidgin/gtkconv.c:3339
+#: ../pidgin/gtkconv.c:3365
 msgid "User has typed something and stopped"
 msgstr "O usuario escribiu algo e parou"
 
 #. Build the Send To menu
-#: ../pidgin/gtkconv.c:3520 ../pidgin/gtkconv.c:7732
+#: ../pidgin/gtkconv.c:3548 ../pidgin/gtkconv.c:7812
 msgid "_Send To"
 msgstr "_Enviar a"
 
-#: ../pidgin/gtkconv.c:4234
+#: ../pidgin/gtkconv.c:4261
 msgid "_Send"
 msgstr "_Enviar"
 
 #. Setup the label telling how many people are in the room.
-#: ../pidgin/gtkconv.c:4338
+#: ../pidgin/gtkconv.c:4365
 msgid "0 people in room"
 msgstr "0 persoas na sala"
 
-#: ../pidgin/gtkconv.c:5585 ../pidgin/gtkconv.c:5706
+#: ../pidgin/gtkconv.c:5633 ../pidgin/gtkconv.c:5754
 #, c-format
 msgid "%d person in room"
 msgid_plural "%d people in room"
 msgstr[0] "%d persoa na sala"
 msgstr[1] "%d persoa na sala"
 
-#: ../pidgin/gtkconv.c:6305 ../pidgin/gtkstatusbox.c:659
+#: ../pidgin/gtkconv.c:6357 ../pidgin/gtkstatusbox.c:659
 msgid "Typing"
 msgstr "Escribindo"
 
-#: ../pidgin/gtkconv.c:6311
+#: ../pidgin/gtkconv.c:6361
 msgid "Stopped Typing"
 msgstr "Deixou de escribir"
 
-#: ../pidgin/gtkconv.c:6316
+#: ../pidgin/gtkconv.c:6364
 msgid "Nick Said"
 msgstr "Alias dixo"
 
-#: ../pidgin/gtkconv.c:6321 ../pidgin/gtkdocklet.c:492
+#: ../pidgin/gtkconv.c:6367 ../pidgin/gtkdocklet.c:492
 msgid "Unread Messages"
 msgstr "Mensaxes sen ler"
 
-#: ../pidgin/gtkconv.c:6326
+#: ../pidgin/gtkconv.c:6370
 msgid "New Event"
 msgstr "Evento novo"
 
-#: ../pidgin/gtkconv.c:7303
+#: ../pidgin/gtkconv.c:7362
 msgid "clear: Clears all conversation scrollbacks."
 msgstr "clear: Limpa todos os historiais de conversas."
 
-#: ../pidgin/gtkconv.c:7467
+#: ../pidgin/gtkconv.c:7526
 msgid "Confirm close"
 msgstr "Confirmar o peche"
 
-#: ../pidgin/gtkconv.c:7499
+#: ../pidgin/gtkconv.c:7558
 msgid "You have unread messages. Are you sure you want to close the window?"
 msgstr "Hai mensaxes sen ler. Seguro que quere pechar a ventá?"
 
-#: ../pidgin/gtkconv.c:8059
+#: ../pidgin/gtkconv.c:8144
 msgid "Close other tabs"
 msgstr "Pechar outros separadores"
 
-#: ../pidgin/gtkconv.c:8065
+#: ../pidgin/gtkconv.c:8150
 msgid "Close all tabs"
 msgstr "Pechar todas os separadores"
 
-#: ../pidgin/gtkconv.c:8073
+#: ../pidgin/gtkconv.c:8158
 msgid "Detach this tab"
 msgstr "Separar este separador"
 
-#: ../pidgin/gtkconv.c:8079
+#: ../pidgin/gtkconv.c:8164
 msgid "Close this tab"
 msgstr "Pechar este separador"
 
-#: ../pidgin/gtkconv.c:8560
+#: ../pidgin/gtkconv.c:8662
 msgid "Close conversation"
 msgstr "Pechar a conversa"
 
-#: ../pidgin/gtkconv.c:9092
+#: ../pidgin/gtkconv.c:9261
 msgid "Last created window"
 msgstr "Última ventá creada"
 
-#: ../pidgin/gtkconv.c:9094
+#: ../pidgin/gtkconv.c:9263
 msgid "Separate IM and Chat windows"
 msgstr "Separar as ventás de MI e de conversa"
 
-#: ../pidgin/gtkconv.c:9096 ../pidgin/gtkprefs.c:1410
+#: ../pidgin/gtkconv.c:9265 ../pidgin/gtkprefs.c:1412
 msgid "New window"
 msgstr "Nova ventá"
 
-#: ../pidgin/gtkconv.c:9098
+#: ../pidgin/gtkconv.c:9267
 msgid "By group"
 msgstr "Por grupo"
 
-#: ../pidgin/gtkconv.c:9100
+#: ../pidgin/gtkconv.c:9269
 msgid "By account"
 msgstr "Por conta"
 
@@ -13059,121 +13199,122 @@
 msgid "Spanish"
 msgstr "Español"
 
-#: ../pidgin/gtkdialogs.c:155 ../pidgin/gtkdialogs.c:156
+#: ../pidgin/gtkdialogs.c:155
+msgid "Estonian"
+msgstr "Estonio"
+
+#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:157
 msgid "Euskera(Basque)"
 msgstr "Euskera"
 
-#: ../pidgin/gtkdialogs.c:157 ../pidgin/gtkdialogs.c:158
-#: ../pidgin/gtkdialogs.c:159
+#: ../pidgin/gtkdialogs.c:158 ../pidgin/gtkdialogs.c:159
+#: ../pidgin/gtkdialogs.c:160
 msgid "Persian"
 msgstr "Persa"
 
-#: ../pidgin/gtkdialogs.c:160 ../pidgin/gtkdialogs.c:227
+#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:227
 #: ../pidgin/gtkdialogs.c:228
 msgid "Finnish"
 msgstr "Finlandés"
 
-#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:229
+#: ../pidgin/gtkdialogs.c:162 ../pidgin/gtkdialogs.c:229
 #: ../pidgin/gtkdialogs.c:230 ../pidgin/gtkdialogs.c:231
 #: ../pidgin/gtkdialogs.c:232
 msgid "French"
 msgstr "Francés"
 
-#: ../pidgin/gtkdialogs.c:162 ../pidgin/gtkdialogs.c:163
+#: ../pidgin/gtkdialogs.c:163 ../pidgin/gtkdialogs.c:164
+#: ../pidgin/gtkdialogs.c:233
 msgid "Galician"
 msgstr "Galego"
 
-#: ../pidgin/gtkdialogs.c:164 ../pidgin/gtkdialogs.c:165
+#: ../pidgin/gtkdialogs.c:165 ../pidgin/gtkdialogs.c:166
 msgid "Gujarati"
 msgstr "Gujarati"
 
-#: ../pidgin/gtkdialogs.c:165
+#: ../pidgin/gtkdialogs.c:166
 msgid "Gujarati Language Team"
 msgstr "Equipo de idioma de Gujarati"
 
-#: ../pidgin/gtkdialogs.c:166 ../pidgin/gtkdialogs.c:233
+#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:234
 msgid "Hebrew"
 msgstr "Hebreo"
 
-#: ../pidgin/gtkdialogs.c:167
-msgid "Hindi"
-msgstr "Hindú"
-
 #: ../pidgin/gtkdialogs.c:168
-msgid "Hungarian"
-msgstr "Húngaro"
+msgid "Hindi"
+msgstr "Hindú"
 
 #: ../pidgin/gtkdialogs.c:169
+msgid "Hungarian"
+msgstr "Húngaro"
+
+#: ../pidgin/gtkdialogs.c:170
 msgid "Indonesian"
 msgstr "Indonesio"
 
-#: ../pidgin/gtkdialogs.c:170 ../pidgin/gtkdialogs.c:234
+#: ../pidgin/gtkdialogs.c:171 ../pidgin/gtkdialogs.c:235
 msgid "Italian"
 msgstr "Italiano"
 
-#: ../pidgin/gtkdialogs.c:171 ../pidgin/gtkdialogs.c:235
-#: ../pidgin/gtkdialogs.c:236 ../pidgin/gtkdialogs.c:237
+#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:236
+#: ../pidgin/gtkdialogs.c:237 ../pidgin/gtkdialogs.c:238
 msgid "Japanese"
 msgstr "Xaponés"
 
-#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:238
+#: ../pidgin/gtkdialogs.c:173 ../pidgin/gtkdialogs.c:239
 msgid "Georgian"
 msgstr "Xeorxiano"
 
-#: ../pidgin/gtkdialogs.c:172
+#: ../pidgin/gtkdialogs.c:173
 msgid "Ubuntu Georgian Translators"
 msgstr "Tradutores xeorxianos de Ubuntu"
 
-#: ../pidgin/gtkdialogs.c:173
+#: ../pidgin/gtkdialogs.c:174
 msgid "Kannada"
 msgstr "Kannada"
 
-#: ../pidgin/gtkdialogs.c:173
+#: ../pidgin/gtkdialogs.c:174
 msgid "Kannada Translation team"
 msgstr "Equipo de tradución ao Kannada"
 
-#: ../pidgin/gtkdialogs.c:174 ../pidgin/gtkdialogs.c:239
-#: ../pidgin/gtkdialogs.c:240
+#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:240
+#: ../pidgin/gtkdialogs.c:241
 msgid "Korean"
 msgstr "Coreano"
 
-#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:176
-#: ../pidgin/gtkdialogs.c:177
+#: ../pidgin/gtkdialogs.c:176 ../pidgin/gtkdialogs.c:177
+#: ../pidgin/gtkdialogs.c:178
 msgid "Kurdish"
 msgstr "Curdo"
 
-#: ../pidgin/gtkdialogs.c:178 ../pidgin/gtkdialogs.c:241
-#: ../pidgin/gtkdialogs.c:242
+#: ../pidgin/gtkdialogs.c:179 ../pidgin/gtkdialogs.c:242
+#: ../pidgin/gtkdialogs.c:243
 msgid "Lithuanian"
 msgstr "Lituano"
 
-#: ../pidgin/gtkdialogs.c:179 ../pidgin/gtkdialogs.c:180
-#: ../pidgin/gtkdialogs.c:243
+#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:181
+#: ../pidgin/gtkdialogs.c:244
 msgid "Macedonian"
 msgstr "Macedonio"
 
-#: ../pidgin/gtkdialogs.c:181
+#: ../pidgin/gtkdialogs.c:182 ../pidgin/gtkdialogs.c:245
 msgid "Bokmål Norwegian"
 msgstr "Bokmål noruegués"
 
-#: ../pidgin/gtkdialogs.c:182
+#: ../pidgin/gtkdialogs.c:183
 msgid "Nepali"
 msgstr "Bengalí"
 
-#: ../pidgin/gtkdialogs.c:183
+#: ../pidgin/gtkdialogs.c:184
 msgid "Dutch, Flemish"
 msgstr "Holandés, Flamenco"
 
-#: ../pidgin/gtkdialogs.c:184
-msgid "Norwegian"
-msgstr "Noruegués"
-
 #: ../pidgin/gtkdialogs.c:185
 msgid "Norwegian Nynorsk"
 msgstr "Nynorsk noruegués"
 
 #: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:187
-#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:244
+#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:246
 msgid "Polish"
 msgstr "Polaco"
 
@@ -13193,18 +13334,18 @@
 msgid "Romanian"
 msgstr "Romeno"
 
-#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:245
-#: ../pidgin/gtkdialogs.c:246
+#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:247
+#: ../pidgin/gtkdialogs.c:248
 msgid "Russian"
 msgstr "Ruso"
 
 #: ../pidgin/gtkdialogs.c:194 ../pidgin/gtkdialogs.c:195
-#: ../pidgin/gtkdialogs.c:247 ../pidgin/gtkdialogs.c:248
-#: ../pidgin/gtkdialogs.c:249
+#: ../pidgin/gtkdialogs.c:249 ../pidgin/gtkdialogs.c:250
+#: ../pidgin/gtkdialogs.c:251
 msgid "Slovak"
 msgstr "Eslovaco"
 
-#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:250
+#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:252
 msgid "Slovenian"
 msgstr "Esloveno"
 
@@ -13216,7 +13357,8 @@
 msgid "Serbian"
 msgstr "Serbio"
 
-#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:251
+#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:253
+#: ../pidgin/gtkdialogs.c:254
 msgid "Swedish"
 msgstr "Sueco"
 
@@ -13232,7 +13374,7 @@
 msgid "Thai"
 msgstr "Thai"
 
-#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:252
+#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:255
 msgid "Turkish"
 msgstr "Turco"
 
@@ -13244,7 +13386,7 @@
 msgid "T.M.Thanh and the Gnome-Vi Team"
 msgstr "T.M.Thanh e o equipo Gnome-Vi"
 
-#: ../pidgin/gtkdialogs.c:206 ../pidgin/gtkdialogs.c:253
+#: ../pidgin/gtkdialogs.c:206 ../pidgin/gtkdialogs.c:256
 msgid "Simplified Chinese"
 msgstr "Chinés simplificado"
 
@@ -13254,7 +13396,7 @@
 msgstr "Chinés de Hong Kong"
 
 #: ../pidgin/gtkdialogs.c:210 ../pidgin/gtkdialogs.c:211
-#: ../pidgin/gtkdialogs.c:254
+#: ../pidgin/gtkdialogs.c:257
 msgid "Traditional Chinese"
 msgstr "Chinés tradicional"
 
@@ -13262,12 +13404,12 @@
 msgid "Amharic"
 msgstr "Amhárico"
 
-#: ../pidgin/gtkdialogs.c:339
+#: ../pidgin/gtkdialogs.c:342
 #, c-format
 msgid "About %s"
 msgstr "Acerca de %s"
 
-#: ../pidgin/gtkdialogs.c:377
+#: ../pidgin/gtkdialogs.c:380
 #, c-format
 msgid ""
 "%s is a graphical modular messaging client based on libpurple which is "
@@ -13288,47 +13430,47 @@
 "contribuíntes.  Vexa o ficheiro de 'COPYRIGHT' para a lista completa de "
 "contribuíntes.  Nós non damos ningún tipo de garantía sobre este programa.<BR><BR>"
 
-#: ../pidgin/gtkdialogs.c:392
+#: ../pidgin/gtkdialogs.c:395
 msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>"
 msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>"
 
-#: ../pidgin/gtkdialogs.c:397
+#: ../pidgin/gtkdialogs.c:400
 msgid "Current Developers"
 msgstr "Desenvolvedores actuais"
 
-#: ../pidgin/gtkdialogs.c:412
+#: ../pidgin/gtkdialogs.c:415
 msgid "Crazy Patch Writers"
 msgstr "Tolos escritores de parches"
 
-#: ../pidgin/gtkdialogs.c:427
+#: ../pidgin/gtkdialogs.c:430
 msgid "Retired Developers"
 msgstr "Desenvolvedores retirados"
 
-#: ../pidgin/gtkdialogs.c:442
+#: ../pidgin/gtkdialogs.c:445
 msgid "Retired Crazy Patch Writers"
 msgstr "Desenvolvedores de parches tolos retirados"
 
-#: ../pidgin/gtkdialogs.c:457
+#: ../pidgin/gtkdialogs.c:460
 msgid "Artists"
 msgstr "Artistas"
 
-#: ../pidgin/gtkdialogs.c:472
+#: ../pidgin/gtkdialogs.c:475
 msgid "Current Translators"
 msgstr "Tradutores actuais"
 
-#: ../pidgin/gtkdialogs.c:492
+#: ../pidgin/gtkdialogs.c:495
 msgid "Past Translators"
 msgstr "Tradutores anteriores"
 
-#: ../pidgin/gtkdialogs.c:510
+#: ../pidgin/gtkdialogs.c:513
 msgid "Debugging Information"
 msgstr "Información de depuración"
 
-#: ../pidgin/gtkdialogs.c:879
+#: ../pidgin/gtkdialogs.c:882
 msgid "Get User Info"
 msgstr "Obter información do usuario"
 
-#: ../pidgin/gtkdialogs.c:881
+#: ../pidgin/gtkdialogs.c:884
 msgid ""
 "Please enter the screen name or alias of the person whose info you would "
 "like to view."
@@ -13336,11 +13478,11 @@
 "Introduza o nome de usuario ou o alias da persoa da que quere ver "
 "información."
 
-#: ../pidgin/gtkdialogs.c:971
+#: ../pidgin/gtkdialogs.c:974
 msgid "View User Log"
 msgstr "Ver rexistro do usuario"
 
-#: ../pidgin/gtkdialogs.c:973
+#: ../pidgin/gtkdialogs.c:976
 msgid ""
 "Please enter the screen name or alias of the person whose log you would like "
 "to view."
@@ -13348,32 +13490,32 @@
 "Introduza o nome de usuario ou o alias da persoa da que quere ver a "
 "información de rexistro."
 
-#: ../pidgin/gtkdialogs.c:993
+#: ../pidgin/gtkdialogs.c:996
 msgid "Alias Contact"
 msgstr "Alias para o contacto"
 
-#: ../pidgin/gtkdialogs.c:994
+#: ../pidgin/gtkdialogs.c:997
 msgid "Enter an alias for this contact."
 msgstr "Introduza un alias para este contacto."
 
-#: ../pidgin/gtkdialogs.c:1016
+#: ../pidgin/gtkdialogs.c:1019
 #, c-format
 msgid "Enter an alias for %s."
 msgstr "Introduza un alias para %s."
 
-#: ../pidgin/gtkdialogs.c:1018
+#: ../pidgin/gtkdialogs.c:1021
 msgid "Alias Buddy"
 msgstr "Alias do contacto"
 
-#: ../pidgin/gtkdialogs.c:1039
+#: ../pidgin/gtkdialogs.c:1042
 msgid "Alias Chat"
 msgstr "Alias na conversa"
 
-#: ../pidgin/gtkdialogs.c:1040
+#: ../pidgin/gtkdialogs.c:1043
 msgid "Enter an alias for this chat."
 msgstr "Introduza un alias para esta conversa."
 
-#: ../pidgin/gtkdialogs.c:1079
+#: ../pidgin/gtkdialogs.c:1082
 #, c-format
 msgid ""
 "You are about to remove the contact containing %s and %d other buddy from "
@@ -13388,30 +13530,30 @@
 "Está a punto de eliminar o contacto que contén a %s e %d contacto máis da lista de "
 "contactos. Quere continuar?"
 
-#: ../pidgin/gtkdialogs.c:1087
+#: ../pidgin/gtkdialogs.c:1090
 msgid "Remove Contact"
 msgstr "Eliminar o contacto"
 
-#: ../pidgin/gtkdialogs.c:1090
+#: ../pidgin/gtkdialogs.c:1093
 msgid "_Remove Contact"
 msgstr "_Eliminar o contacto"
 
-#: ../pidgin/gtkdialogs.c:1121
+#: ../pidgin/gtkdialogs.c:1124
 #, c-format
 msgid ""
 "You are about to merge the group called %s into the group called %s. Do you "
 "want to continue?"
 msgstr "Está a piques de combinar o grupo chamado %s dentro do grupo %s.Desexa continuar?"
 
-#: ../pidgin/gtkdialogs.c:1128
+#: ../pidgin/gtkdialogs.c:1131
 msgid "Merge Groups"
 msgstr "Combinar grupos"
 
-#: ../pidgin/gtkdialogs.c:1131
+#: ../pidgin/gtkdialogs.c:1134
 msgid "_Merge Groups"
 msgstr "_Combinar grupos"
 
-#: ../pidgin/gtkdialogs.c:1181
+#: ../pidgin/gtkdialogs.c:1184
 #, c-format
 msgid ""
 "You are about to remove the group %s and all its members from your buddy "
@@ -13420,28 +13562,28 @@
 "Está a piques de borrar o grupo %s e todos os seus membros da lista de "
 "contactos. Quere continuar?"
 
-#: ../pidgin/gtkdialogs.c:1184
+#: ../pidgin/gtkdialogs.c:1187
 msgid "Remove Group"
 msgstr "Eliminar o grupo"
 
-#: ../pidgin/gtkdialogs.c:1187
+#: ../pidgin/gtkdialogs.c:1190
 msgid "_Remove Group"
 msgstr "_Eliminar o grupo"
 
-#: ../pidgin/gtkdialogs.c:1220
+#: ../pidgin/gtkdialogs.c:1223
 #, c-format
 msgid "You are about to remove %s from your buddy list.  Do you want to continue?"
 msgstr "Está a punto de eliminar a %s da lista de contactos. Quere continuar?"
 
-#: ../pidgin/gtkdialogs.c:1223
+#: ../pidgin/gtkdialogs.c:1226
 msgid "Remove Buddy"
 msgstr "Eliminar o contacto"
 
-#: ../pidgin/gtkdialogs.c:1226
+#: ../pidgin/gtkdialogs.c:1229
 msgid "_Remove Buddy"
 msgstr "_Eliminar o contacto"
 
-#: ../pidgin/gtkdialogs.c:1247
+#: ../pidgin/gtkdialogs.c:1250
 #, c-format
 msgid ""
 "You are about to remove the chat %s from your buddy list.  Do you want to "
@@ -13450,11 +13592,11 @@
 "Está a punto de eliminar a conversa %s da lista de contactos. Quere "
 "continuar?"
 
-#: ../pidgin/gtkdialogs.c:1250
+#: ../pidgin/gtkdialogs.c:1253
 msgid "Remove Chat"
 msgstr "Eliminar a conversa"
 
-#: ../pidgin/gtkdialogs.c:1253
+#: ../pidgin/gtkdialogs.c:1256
 msgid "_Remove Chat"
 msgstr "_Eliminar a conversa"
 
@@ -13572,43 +13714,43 @@
 msgid "_Resume"
 msgstr "_Continuar"
 
-#: ../pidgin/gtkimhtml.c:814
+#: ../pidgin/gtkimhtml.c:815
 msgid "Paste as Plain _Text"
 msgstr "Pegar como _texto plano"
 
-#: ../pidgin/gtkimhtml.c:831
+#: ../pidgin/gtkimhtml.c:832 ../pidgin/gtkimhtmltoolbar.c:1138
 msgid "_Reset formatting"
 msgstr "_Reiniciar os formatos"
 
-#: ../pidgin/gtkimhtml.c:1371
+#: ../pidgin/gtkimhtml.c:1372
 msgid "Hyperlink color"
 msgstr "Cor da ligazón"
 
-#: ../pidgin/gtkimhtml.c:1372
+#: ../pidgin/gtkimhtml.c:1373
 msgid "Color to draw hyperlinks."
 msgstr "Cor para debuxar ligazóns."
 
-#: ../pidgin/gtkimhtml.c:1375
+#: ../pidgin/gtkimhtml.c:1376
 msgid "Hyperlink prelight color"
 msgstr "Cor de ligazón pre-iluminada"
 
-#: ../pidgin/gtkimhtml.c:1376
+#: ../pidgin/gtkimhtml.c:1377
 msgid "Color to draw hyperlinks when mouse is over them."
 msgstr "Cor para debuxar ligazóns cando o rato estea enriba."
 
-#: ../pidgin/gtkimhtml.c:1596
+#: ../pidgin/gtkimhtml.c:1597
 msgid "_Copy E-Mail Address"
 msgstr "_Copiar o enderezo de correo"
 
-#: ../pidgin/gtkimhtml.c:1608
+#: ../pidgin/gtkimhtml.c:1609
 msgid "_Open Link in Browser"
 msgstr "_Abrir a ligazón no navegador"
 
-#: ../pidgin/gtkimhtml.c:1618
+#: ../pidgin/gtkimhtml.c:1619
 msgid "_Copy Link Location"
 msgstr "_Copiar o destino da ligazón"
 
-#: ../pidgin/gtkimhtml.c:3363
+#: ../pidgin/gtkimhtml.c:3365
 msgid ""
 "<span size='larger' weight='bold'>Unrecognized file type</span>\n"
 "\n"
@@ -13618,7 +13760,7 @@
 "\n"
 "PNG é o predeterminado."
 
-#: ../pidgin/gtkimhtml.c:3366
+#: ../pidgin/gtkimhtml.c:3368
 msgid ""
 "Unrecognized file type\n"
 "\n"
@@ -13628,7 +13770,7 @@
 "\n"
 "PNG é o predeterminado."
 
-#: ../pidgin/gtkimhtml.c:3395
+#: ../pidgin/gtkimhtml.c:3397
 #, c-format
 msgid ""
 "<span size='larger' weight='bold'>Error saving image</span>\n"
@@ -13639,7 +13781,7 @@
 "\n"
 "%s"
 
-#: ../pidgin/gtkimhtml.c:3398
+#: ../pidgin/gtkimhtml.c:3400
 #, c-format
 msgid ""
 "Error saving image\n"
@@ -13650,11 +13792,11 @@
 "\n"
 "%s"
 
-#: ../pidgin/gtkimhtml.c:3476 ../pidgin/gtkimhtml.c:3488
+#: ../pidgin/gtkimhtml.c:3478 ../pidgin/gtkimhtml.c:3490
 msgid "Save Image"
 msgstr "Gardar a imaxe"
 
-#: ../pidgin/gtkimhtml.c:3516
+#: ../pidgin/gtkimhtml.c:3518
 msgid "_Save Image..."
 msgstr "_Gardar a imaxe..."
 
@@ -13694,7 +13836,7 @@
 msgid "Insert Link"
 msgstr "Inserir unha ligazón"
 
-#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1157
+#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1207
 msgid "_Insert"
 msgstr "_Inserir"
 
@@ -13716,59 +13858,58 @@
 msgid "Smile!"
 msgstr "Emoticona!"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1066
-msgid "_Bold"
-msgstr "_Negra"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1067
-msgid "_Italic"
-msgstr "_Cursiva"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1068
-msgid "_Underline"
-msgstr "_Subraiado"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1069
-msgid "_Larger"
-msgstr "_Grande"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1071
+#: ../pidgin/gtkimhtmltoolbar.c:820 ../pidgin/gtkimhtmltoolbar.c:1164
+msgid "_Font"
+msgstr "_Tipo de letra"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1124
+msgid "<b>_Bold</b>"
+msgstr "<b>_Negra</b>"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1125
+msgid "<i>_Italic</i>"
+msgstr "<i>_Cursiva</i> "
+
+#: ../pidgin/gtkimhtmltoolbar.c:1126
+msgid "<u>_Underline</u>"
+msgstr "<u>_Subliñado</u>"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1127
+msgid "<span size='larger'>_Larger</span>"
+msgstr "<span size='larger'>_Máis grande</span>"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1129
 msgid "_Normal"
 msgstr "_Normal"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1073
-msgid "_Smaller"
-msgstr "_Pequena"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1074
+#: ../pidgin/gtkimhtmltoolbar.c:1131
+msgid "<span size='smaller'>_Smaller</span>"
+msgstr "<span size='smaller'>Máis _pequena</span>"
+
+#. If we want to show the formatting for the following items, we would
+#. * need to update them when formatting changes. The above items don't need
+#. * no updating nor nothin'
+#: ../pidgin/gtkimhtmltoolbar.c:1135
 msgid "_Font face"
 msgstr "_Estilo do tipo de letra"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1075
-msgid "_Foreground color"
-msgstr "_Cor de primeiro plano"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1076
-msgid "_Background color"
-msgstr "_Cor de fondo"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1102
-msgid "_Font"
-msgstr "_Tipo de letra"
+#: ../pidgin/gtkimhtmltoolbar.c:1136
+msgid "Foreground _color"
+msgstr "Cor de primeiro plano"
 
 #: ../pidgin/gtkimhtmltoolbar.c:1137
-msgid "_Reset font"
-msgstr "_Reiniciar tipo de letra"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1164
+msgid "Bac_kground color"
+msgstr "Cor de _fondo"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1215
 msgid "_Smiley"
 msgstr "_Emoticona"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1170
+#: ../pidgin/gtkimhtmltoolbar.c:1221
 msgid "_Image"
 msgstr "_Imaxe"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1176
+#: ../pidgin/gtkimhtmltoolbar.c:1227
 msgid "_Link"
 msgstr "_Ligazón"
 
@@ -13933,48 +14074,48 @@
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
-#: ../pidgin/gtkmain.c:698 ../pidgin/pidgin.h:50
+#: ../pidgin/gtkmain.c:699 ../pidgin/pidgin.h:50
 msgid "Pidgin"
 msgstr "Pidgin"
 
-#: ../pidgin/gtknotify.c:343
+#: ../pidgin/gtknotify.c:348
 msgid "Open All Messages"
 msgstr "Abrir todas as mensaxes"
 
-#: ../pidgin/gtknotify.c:395
+#: ../pidgin/gtknotify.c:401
 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Ten correo!</span>"
 
-#: ../pidgin/gtknotify.c:515
+#: ../pidgin/gtknotify.c:521
 #, c-format
 msgid "%s has %d new message."
 msgid_plural "%s has %d new messages."
 msgstr[0] "%s ten %d mensaxe nova."
 msgstr[1] "%s ten %d mensaxe nova."
 
-#: ../pidgin/gtknotify.c:526
+#: ../pidgin/gtknotify.c:532
 #, c-format
 msgid "<b>You have %d new e-mail.</b>"
 msgid_plural "<b>You have %d new e-mails.</b>"
 msgstr[0] "<b>Ten %d correo electrónico novo.</b>"
 msgstr[1] "<b>Ten %d correo electrónico novo.</b>"
 
-#: ../pidgin/gtknotify.c:964
+#: ../pidgin/gtknotify.c:972
 #, c-format
 msgid "The browser command \"%s\" is invalid."
 msgstr "O comando do navegador \"%s\" non é válido."
 
-#: ../pidgin/gtknotify.c:966 ../pidgin/gtknotify.c:978
-#: ../pidgin/gtknotify.c:991 ../pidgin/gtknotify.c:1119
+#: ../pidgin/gtknotify.c:974 ../pidgin/gtknotify.c:986
+#: ../pidgin/gtknotify.c:999 ../pidgin/gtknotify.c:1127
 msgid "Unable to open URL"
 msgstr "Non se puido abrir o URL"
 
-#: ../pidgin/gtknotify.c:976 ../pidgin/gtknotify.c:989
+#: ../pidgin/gtknotify.c:984 ../pidgin/gtknotify.c:997
 #, c-format
 msgid "Error launching \"%s\": %s"
 msgstr "Erro ao lanzar \"%s\": %s"
 
-#: ../pidgin/gtknotify.c:1120
+#: ../pidgin/gtknotify.c:1128
 msgid "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr ""
 "Elixiuse o navegador 'Manual', mais non se definiu ningún "
@@ -14120,7 +14261,7 @@
 msgstr "Sobre quen avisar"
 
 #: ../pidgin/gtkprefs.c:385
-#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:1
+#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1
 msgid "Default"
 msgstr "Por defecto"
 
@@ -14152,13 +14293,6 @@
 msgid "_Show system tray icon:"
 msgstr "Mo_strar icona da área de notificación do sistema:"
 
-#: ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908 ../pidgin/gtkprefs.c:1756
-#: ../pidgin/plugins/timestamp_format.c:42
-#: ../pidgin/plugins/timestamp_format.c:51
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:338
-msgid "Always"
-msgstr "Sempre"
-
 #: ../pidgin/gtkprefs.c:898
 msgid "On unread messages"
 msgstr "Se hai mensaxes sen ler"
@@ -14171,7 +14305,7 @@
 msgid "_Hide new IM conversations:"
 msgstr "_Ocultar as novas conversas de MI:"
 
-#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1937
+#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1939
 msgid "When away"
 msgstr "Cando estea ausente"
 
@@ -14272,7 +14406,7 @@
 msgid "Default Formatting"
 msgstr "Formato predeterminado"
 
-#: ../pidgin/gtkprefs.c:1057
+#: ../pidgin/gtkprefs.c:1059
 msgid ""
 "This is how your outgoing message text will appear when you use protocols "
 "that support formatting."
@@ -14280,119 +14414,119 @@
 "Isto é unha mostra de como aparecerá a súa mensaxe saínte cando use protocolos "
 "que soportan formatado."
 
-#: ../pidgin/gtkprefs.c:1123
+#: ../pidgin/gtkprefs.c:1125
 msgid "ST_UN server:"
 msgstr "Servidor ST_UN:"
 
-#: ../pidgin/gtkprefs.c:1135
+#: ../pidgin/gtkprefs.c:1137
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Exemplo: stunserver.org</span>"
 
-#: ../pidgin/gtkprefs.c:1139
+#: ../pidgin/gtkprefs.c:1141
 msgid "_Autodetect IP address"
 msgstr "_Autodetectar enderezo IP"
 
-#: ../pidgin/gtkprefs.c:1148
+#: ../pidgin/gtkprefs.c:1150
 msgid "Public _IP:"
 msgstr "_IP pública:"
 
-#: ../pidgin/gtkprefs.c:1177
+#: ../pidgin/gtkprefs.c:1179
 msgid "Ports"
 msgstr "Portos"
 
-#: ../pidgin/gtkprefs.c:1180
+#: ../pidgin/gtkprefs.c:1182
 msgid "_Manually specify range of ports to listen on"
 msgstr "Especificar _manualmente o rango de portos en que se escoitará"
 
-#: ../pidgin/gtkprefs.c:1183
+#: ../pidgin/gtkprefs.c:1185
 msgid "_Start port:"
 msgstr "Porto _inicial:"
 
-#: ../pidgin/gtkprefs.c:1190
+#: ../pidgin/gtkprefs.c:1192
 msgid "_End port:"
 msgstr "Porto _final:"
 
-#: ../pidgin/gtkprefs.c:1198
+#: ../pidgin/gtkprefs.c:1200
 msgid "Proxy Server"
 msgstr "Servidor proxy"
 
-#: ../pidgin/gtkprefs.c:1202
+#: ../pidgin/gtkprefs.c:1204
 msgid "No proxy"
 msgstr "Sen proxy"
 
-#: ../pidgin/gtkprefs.c:1258
+#: ../pidgin/gtkprefs.c:1260
 msgid "_User:"
 msgstr "_Usuario:"
 
-#: ../pidgin/gtkprefs.c:1323
+#: ../pidgin/gtkprefs.c:1325
 msgid "Seamonkey"
 msgstr "Seamonkey"
 
-#: ../pidgin/gtkprefs.c:1324
-msgid "Opera"
-msgstr "Opera"
-
-#: ../pidgin/gtkprefs.c:1325
-msgid "Netscape"
-msgstr "Netscape"
-
 #: ../pidgin/gtkprefs.c:1326
-msgid "Mozilla"
-msgstr "Mozilla"
+msgid "Opera"
+msgstr "Opera"
 
 #: ../pidgin/gtkprefs.c:1327
-msgid "Konqueror"
-msgstr "Konqueror"
+msgid "Netscape"
+msgstr "Netscape"
 
 #: ../pidgin/gtkprefs.c:1328
-msgid "GNOME Default"
-msgstr "Predeterminado de Gnome"
+msgid "Mozilla"
+msgstr "Mozilla"
 
 #: ../pidgin/gtkprefs.c:1329
+msgid "Konqueror"
+msgstr "Konqueror"
+
+#: ../pidgin/gtkprefs.c:1330
+msgid "GNOME Default"
+msgstr "Predeterminado de Gnome"
+
+#: ../pidgin/gtkprefs.c:1331
 msgid "Galeon"
 msgstr "Galeon"
 
-#: ../pidgin/gtkprefs.c:1330
+#: ../pidgin/gtkprefs.c:1332
 msgid "Firefox"
 msgstr "Firefox"
 
-#: ../pidgin/gtkprefs.c:1331
+#: ../pidgin/gtkprefs.c:1333
 msgid "Firebird"
 msgstr "Firebird"
 
-#: ../pidgin/gtkprefs.c:1332
+#: ../pidgin/gtkprefs.c:1334
 msgid "Epiphany"
 msgstr "Epiphany"
 
-#: ../pidgin/gtkprefs.c:1341
+#: ../pidgin/gtkprefs.c:1343
 msgid "Manual"
 msgstr "Manual"
 
-#: ../pidgin/gtkprefs.c:1394
+#: ../pidgin/gtkprefs.c:1396
 msgid "Browser Selection"
 msgstr "Selección de navegador"
 
-#: ../pidgin/gtkprefs.c:1398
+#: ../pidgin/gtkprefs.c:1400
 msgid "_Browser:"
 msgstr "_Navegador:"
 
-#: ../pidgin/gtkprefs.c:1406
+#: ../pidgin/gtkprefs.c:1408
 msgid "_Open link in:"
 msgstr "_Abrir ligazón en:"
 
-#: ../pidgin/gtkprefs.c:1408
+#: ../pidgin/gtkprefs.c:1410
 msgid "Browser default"
 msgstr "Navegador predeterminado"
 
-#: ../pidgin/gtkprefs.c:1409
+#: ../pidgin/gtkprefs.c:1411
 msgid "Existing window"
 msgstr "Ventá existente"
 
-#: ../pidgin/gtkprefs.c:1411
+#: ../pidgin/gtkprefs.c:1413
 msgid "New tab"
 msgstr "Novo separador"
 
-#: ../pidgin/gtkprefs.c:1425
+#: ../pidgin/gtkprefs.c:1427
 #, c-format
 msgid ""
 "_Manual:\n"
@@ -14401,80 +14535,63 @@
 "_Manual:\n"
 "(%s para URL)"
 
-#: ../pidgin/gtkprefs.c:1465
+#: ../pidgin/gtkprefs.c:1467
 msgid "Log _format:"
 msgstr "_Formato de rexistro:"
 
-#: ../pidgin/gtkprefs.c:1470
+#: ../pidgin/gtkprefs.c:1472
 msgid "Log all _instant messages"
 msgstr "Rexistrar todas as mensaxes _instantáneas"
 
-#: ../pidgin/gtkprefs.c:1472
+#: ../pidgin/gtkprefs.c:1474
 msgid "Log all c_hats"
 msgstr "Rexistrar todas as _conversas"
 
-#: ../pidgin/gtkprefs.c:1474
+#: ../pidgin/gtkprefs.c:1476
 msgid "Log all _status changes to system log"
 msgstr "Rexistrar todas os cambios de e_stado no rexistro do sistema"
 
-#: ../pidgin/gtkprefs.c:1582 ../pidgin/gtkprefs.c:1671
-#: ../pidgin/gtkprefs.c:1865
-msgid "(default)"
-msgstr "(por defecto)"
-
-#: ../pidgin/gtkprefs.c:1620
+#: ../pidgin/gtkprefs.c:1622
 msgid "Sound Selection"
 msgstr "Selección de son"
 
-#: ../pidgin/gtkprefs.c:1630
+#: ../pidgin/gtkprefs.c:1632
 msgid "Quietest"
 msgstr "O máis silencioso"
 
-#: ../pidgin/gtkprefs.c:1632
+#: ../pidgin/gtkprefs.c:1634
 msgid "Quieter"
 msgstr "Máis silencioso"
 
-#: ../pidgin/gtkprefs.c:1634
+#: ../pidgin/gtkprefs.c:1636
 msgid "Quiet"
 msgstr "Silencioso"
 
-#: ../pidgin/gtkprefs.c:1638
+#: ../pidgin/gtkprefs.c:1640
 msgid "Loud"
 msgstr "Ruidoso"
 
-#: ../pidgin/gtkprefs.c:1640
-msgid "Louder"
-msgstr "Máis ruidoso"
-
 #: ../pidgin/gtkprefs.c:1642
+msgid "Louder"
+msgstr "Máis ruidoso"
+
+#: ../pidgin/gtkprefs.c:1644
 msgid "Loudest"
 msgstr "O máis ruidoso"
 
-#: ../pidgin/gtkprefs.c:1705
-msgid "Sound Method"
-msgstr "Método para reproducir sons"
-
-#: ../pidgin/gtkprefs.c:1706
+#: ../pidgin/gtkprefs.c:1708
 msgid "_Method:"
 msgstr "_Método:"
 
-#: ../pidgin/gtkprefs.c:1708
+#: ../pidgin/gtkprefs.c:1710
 msgid "Console beep"
 msgstr "Bip da consola"
 
-#: ../pidgin/gtkprefs.c:1710
-msgid "Automatic"
-msgstr "Automático"
-
-#: ../pidgin/gtkprefs.c:1714
-msgid "Command"
-msgstr "Comando"
-
-#: ../pidgin/gtkprefs.c:1715
+#: ../pidgin/gtkprefs.c:1717
 msgid "No sounds"
 msgstr "Sen sons"
 
-#: ../pidgin/gtkprefs.c:1723
+#: ../pidgin/gtkprefs.c:1725
 #, c-format
 msgid ""
 "Sound c_ommand:\n"
@@ -14483,117 +14600,81 @@
 "C_omando para son:\n"
 "(%s para nome de ficheiro)"
 
-#: ../pidgin/gtkprefs.c:1749
-msgid "Sound Options"
-msgstr "Opcións de son"
-
-#: ../pidgin/gtkprefs.c:1750
+#: ../pidgin/gtkprefs.c:1752
 msgid "Sounds when conversation has _focus"
 msgstr "Sons cando a conversa ten o _foco"
 
-#: ../pidgin/gtkprefs.c:1752
-msgid "Enable sounds:"
-msgstr "Activar os sons:"
-
 #: ../pidgin/gtkprefs.c:1754
-msgid "Only when available"
-msgstr "Só cando estea dispoñible"
-
-#: ../pidgin/gtkprefs.c:1755
-msgid "Only when not available"
-msgstr "Só cando estea non dispoñible"
-
-#: ../pidgin/gtkprefs.c:1763
+msgid "Enable sounds:"
+msgstr "Activar os sons:"
+
+#: ../pidgin/gtkprefs.c:1765
 msgid "Volume:"
 msgstr "Volume:"
 
-#: ../pidgin/gtkprefs.c:1791
-msgid "Sound Events"
-msgstr "Eventos de son"
-
-#: ../pidgin/gtkprefs.c:1843
+#: ../pidgin/gtkprefs.c:1845
 msgid "Play"
 msgstr "Reproducir"
 
-#: ../pidgin/gtkprefs.c:1850
-msgid "Event"
-msgstr "Evento"
-
-#: ../pidgin/gtkprefs.c:1869
-msgid "Test"
-msgstr "Probar"
-
-#: ../pidgin/gtkprefs.c:1873
-msgid "Reset"
-msgstr "Reiniciar"
-
-#: ../pidgin/gtkprefs.c:1877
-msgid "Choose..."
-msgstr "Escoller..."
-
-#: ../pidgin/gtkprefs.c:1920
+#: ../pidgin/gtkprefs.c:1922
 msgid "_Report idle time:"
 msgstr "Mostrar o _tempo de inactividade:"
 
-#: ../pidgin/gtkprefs.c:1925
+#: ../pidgin/gtkprefs.c:1927
 msgid "Based on keyboard or mouse use"
 msgstr "Baseado no uso do teclado ou do rato"
 
-#: ../pidgin/gtkprefs.c:1934
+#: ../pidgin/gtkprefs.c:1936
 msgid "_Auto-reply:"
 msgstr "Resposta _automática:"
 
-#: ../pidgin/gtkprefs.c:1938
+#: ../pidgin/gtkprefs.c:1940
 msgid "When both away and idle"
 msgstr "Cando estea ausente e inactivo"
 
 #. Auto-away stuff
-#: ../pidgin/gtkprefs.c:1944
+#: ../pidgin/gtkprefs.c:1946
 msgid "Auto-away"
 msgstr "Auto-ausencia"
 
-#: ../pidgin/gtkprefs.c:1946
+#: ../pidgin/gtkprefs.c:1948
 msgid "Change status when _idle"
 msgstr "Cambiar o estado cando estea _inactivo"
 
-#: ../pidgin/gtkprefs.c:1950
+#: ../pidgin/gtkprefs.c:1952
 msgid "_Minutes before becoming idle:"
 msgstr "_Minutos antes de cambiar a inactivo:"
 
-#: ../pidgin/gtkprefs.c:1958
+#: ../pidgin/gtkprefs.c:1960
 msgid "Change _status to:"
 msgstr "Cambiar o e_stado a:"
 
 #. Signon status stuff
-#: ../pidgin/gtkprefs.c:1979
+#: ../pidgin/gtkprefs.c:1981
 msgid "Status at Startup"
 msgstr "Estado para o inicio"
 
-#: ../pidgin/gtkprefs.c:1981
+#: ../pidgin/gtkprefs.c:1983
 msgid "Use status from last _exit at startup"
 msgstr "Empregar o estado da última _saída ao comezar"
 
-#: ../pidgin/gtkprefs.c:1987
+#: ../pidgin/gtkprefs.c:1989
 msgid "Status to a_pply at startup:"
 msgstr "Estado para _aplicar ao comezar:"
 
-#: ../pidgin/gtkprefs.c:2025
+#: ../pidgin/gtkprefs.c:2027
 msgid "Interface"
 msgstr "Interface"
 
-#: ../pidgin/gtkprefs.c:2027
+#: ../pidgin/gtkprefs.c:2029
 msgid "Smiley Themes"
 msgstr "Temas das emoticonas"
 
-#: ../pidgin/gtkprefs.c:2028
-msgid "Sounds"
-msgstr "Sons"
-
-#: ../pidgin/gtkprefs.c:2034
+#: ../pidgin/gtkprefs.c:2036
 msgid "Browser"
 msgstr "Navegador"
 
-#: ../pidgin/gtkprefs.c:2038
+#: ../pidgin/gtkprefs.c:2040
 msgid "Status / Idle"
 msgstr "Estado / Inactivo"
 
@@ -14682,23 +14763,23 @@
 msgid "Apply"
 msgstr "Aplicar"
 
-#: ../pidgin/gtkrequest.c:1491
+#: ../pidgin/gtkrequest.c:1504
 msgid "That file already exists"
 msgstr "Ese ficheiro xa existe"
 
-#: ../pidgin/gtkrequest.c:1492
+#: ../pidgin/gtkrequest.c:1505
 msgid "Would you like to overwrite it?"
 msgstr "Quere sobrescribilo?"
 
-#: ../pidgin/gtkrequest.c:1495
+#: ../pidgin/gtkrequest.c:1508
 msgid "Overwrite"
 msgstr "Sobrescribir"
 
-#: ../pidgin/gtkrequest.c:1496
+#: ../pidgin/gtkrequest.c:1509
 msgid "Choose New Name"
 msgstr "Escoller un novo nome"
 
-#: ../pidgin/gtkrequest.c:1634 ../pidgin/gtkrequest.c:1648
+#: ../pidgin/gtkrequest.c:1647 ../pidgin/gtkrequest.c:1661
 msgid "Select Folder..."
 msgstr "Seleccionar cartafol..."
 
@@ -14757,54 +14838,6 @@
 msgid "Status for %s"
 msgstr "Estado para %s"
 
-#: ../pidgin/gtksound.c:63
-msgid "Buddy logs in"
-msgstr "Conéctase un contacto"
-
-#: ../pidgin/gtksound.c:64
-msgid "Buddy logs out"
-msgstr "Desconéctase un contacto"
-
-#: ../pidgin/gtksound.c:65
-msgid "Message received"
-msgstr "Mensaxe recibida"
-
-#: ../pidgin/gtksound.c:66
-msgid "Message received begins conversation"
-msgstr "Mensaxe recibida que comeza unha conversa"
-
-#: ../pidgin/gtksound.c:67
-msgid "Message sent"
-msgstr "Mensaxe enviada"
-
-#: ../pidgin/gtksound.c:68
-msgid "Person enters chat"
-msgstr "Alguén entra na conversa"
-
-#: ../pidgin/gtksound.c:69
-msgid "Person leaves chat"
-msgstr "Alguén deixa a conversa"
-
-#: ../pidgin/gtksound.c:70
-msgid "You talk in chat"
-msgstr "Participa na conversa"
-
-#: ../pidgin/gtksound.c:71
-msgid "Others talk in chat"
-msgstr "Conversan outros"
-
-#: ../pidgin/gtksound.c:74
-msgid "Someone says your screen name in chat"
-msgstr "Alguén menciona o seu nome na conversa"
-
-#: ../pidgin/gtksound.c:310
-msgid "GStreamer Failure"
-msgstr "Fallo de GStreamer"
-
-#: ../pidgin/gtksound.c:311
-msgid "GStreamer failed to initialize."
-msgstr "O GStreamer errou ao iniciar."
-
 #: ../pidgin/gtkstatusbox.c:663
 msgid "Waiting for network connection"
 msgstr "A agardar pola conexión á rede"
@@ -14964,7 +14997,7 @@
 msgid "_Open Mail"
 msgstr "_Abrir o correo"
 
-#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:2
+#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2
 msgid "Pidgin smileys"
 msgstr "Emitocanas de Pidgin"
 
@@ -15388,6 +15421,15 @@
 msgid "E-mail:"
 msgstr "Correo electrónico:"
 
+#: ../pidgin/plugins/gtkbuddynote.c:34
+#, c-format
+msgid ""
+"\n"
+"<b>Buddy Note</b>: %s"
+msgstr ""
+"\n"
+"<b>Nota do contacto</b>: %s"
+
 #. *< type
 #. *< ui_requirement
 #. *< flags
@@ -15989,43 +16031,43 @@
 "tempo para as mensaxes de conversas e as mensaxes de rexistro."
 
 #: ../pidgin/plugins/win32/transparency/win2ktrans.c:174
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:589
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:636
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:593
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:640
 msgid "Opacity:"
 msgstr "Opacidade:"
 
 #. IM Convo trans options
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:553
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:557
 msgid "IM Conversation Windows"
 msgstr "Ventás de conversa de MI"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:554
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:558
 msgid "_IM window transparency"
 msgstr "Transparencia das ventás de M_I"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:568
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:572
 msgid "_Show slider bar in IM window"
 msgstr "M_ostrar barra de desprazamento na ventá MI"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:575
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:579
 msgid "Remove IM window transparency on focus"
 msgstr "Eliminar a transparencia das ventás de MI ao ter o foco"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:578
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:626
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:582
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:630
 msgid "Always on top"
 msgstr "Sempre enriba"
 
 #. Buddy List trans options
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:610
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:614
 msgid "Buddy List Window"
 msgstr "Ventá da lista de contactos"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:611
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:615
 msgid "_Buddy List window transparency"
 msgstr "Transparencia da ventá de lista de _contactos"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:624
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:628
 msgid "Remove Buddy List window transparency on focus"
 msgstr "Eliminar transparencia da ventá da lista de contactos ao ter o foco"
 
@@ -16035,19 +16077,19 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:684
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:688
 msgid "Transparency"
 msgstr "Transparencia"
 
 #. *< name
 #. *< version
 #. *  summary
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:687
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:691
 msgid "Variable Transparency for the buddy list and conversations."
 msgstr "Transparencia variable para a lista de contactos e as conversas."
 
 #. *  description
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:689
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:693
 msgid ""
 "This plugin enables variable alpha transparency on conversation windows and "
 "the buddy list.\n"
@@ -16059,47 +16101,47 @@
 "\n"
 "* Nota: este complemento require Win2000 ou outro máis novo."
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:307
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:303
 msgid "GTK+ Runtime Version"
 msgstr "GTK+ Runtime Version"
 
 #. Autostart
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:315
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:311
 msgid "Startup"
 msgstr "Inicio"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:316
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:312
 #, c-format
 msgid "_Start %s on Windows startup"
 msgstr "_Iniciar %s ao comezo de Windows"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:331
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:327
 msgid "_Dockable Buddy List"
 msgstr "Lista de contactos a_ncorable"
 
 #. Blist On Top
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:335
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:331
 msgid "_Keep Buddy List window on top:"
 msgstr "_Manter a ventá da lista de contactos por enriba:"
 
 #. XXX: Did this ever work?
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:340
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:336
 msgid "Only when docked"
 msgstr "Só cando está ancorado"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:345
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:341
 msgid "_Flash window when chat messages are received"
 msgstr "_Ventá escintilante cando se reciben mensaxes nas conversas"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:375
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:371
 msgid "Windows Pidgin Options"
 msgstr "Opcións de Pidgin en Windows"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:377
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:373
 msgid "Options specific to Pidgin for Windows."
 msgstr "Opcións específicas de Pidgin en Windows."
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:378
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:374
 msgid "Provides options specific to Pidgin for Windows , such as buddy list docking."
 msgstr "Prové opcións específicas para Pidgin en Windows , como o ancoraxe da ventá de contactos."
 
--- a/po/pt_BR.po	Sat Aug 25 20:32:15 2007 +0000
+++ b/po/pt_BR.po	Tue Aug 28 01:14:08 2007 +0000
@@ -14207,7 +14207,7 @@
 "Favor especificar o que você estava fazendo na hora em que o erro ocorreu\n"
 "e enviar o backtrace do arquivo de core.  Se você não sabe\n"
 "como obter o backtrace, favor ler as instruções em\n"
-"%swiki/GetABackTrace\n"
+"%swiki/GetABacktrace\n"
 "\n"
 "Se você precisa de assistência adicional, mande uma mensagem instantânea\n"
 "para o SeanEgn ou o LSchiere (via AIM e em inglês).  Informações de contato\n"
--- a/po/sk.po	Sat Aug 25 20:32:15 2007 +0000
+++ b/po/sk.po	Tue Aug 28 01:14:08 2007 +0000
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: pidgin-1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-07-17 03:22-0400\n"
+"POT-Creation-Date: 2007-08-19 03:21-0400\n"
 "PO-Revision-Date: 2007-07-18 19:59+0100\n"
 "Last-Translator: loptosko <loptosko@gmail.com>\n"
 "Language-Team: Slovak <kde-sk@linux.sk>\n"
@@ -19,17 +19,17 @@
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
-#: ../finch/finch.c:70 ../finch/finch.c:298 ../finch/finch.c:327
-#: ../finch/finch.c:404
+#: ../finch/finch.c:64 ../finch/finch.c:300 ../finch/finch.c:329
+#: ../finch/finch.c:417
 msgid "Finch"
 msgstr "Finch"
 
-#: ../finch/finch.c:204
+#: ../finch/finch.c:206
 #, c-format
 msgid "%s. Try `%s -h' for more information.\n"
 msgstr "%s. Príkaz `%s -h' zobrazí viac informácií.\n"
 
-#: ../finch/finch.c:206
+#: ../finch/finch.c:208
 #, c-format
 msgid ""
 "%s\n"
@@ -50,7 +50,7 @@
 "  -n, --nologin       neprihlasovať automaticky\n"
 "  -v, --version       zobrazí verziu programu a skončí\n"
 
-#: ../finch/finch.c:325 ../pidgin/gtkmain.c:708
+#: ../finch/finch.c:327 ../pidgin/gtkmain.c:711
 #, c-format
 msgid ""
 "%s encountered errors migrating your settings from %s to %s. Please "
@@ -58,17 +58,19 @@
 "http://developer.pidgin.im"
 msgstr ""
 "V programe %s sa vyskytli chyby pri prenose nastavení z %s do %s. Prosím, "
-"skúste dokončiť prenos nastavení sami. Prosím, ohláste túto chybu na adrese http://developer.pidgin.im"
+"skúste dokončiť prenos nastavení sami. Prosím, ohláste túto chybu na adrese "
+"http://developer.pidgin.im"
 
 #: ../finch/gntaccount.c:123 ../finch/gntaccount.c:478 ../finch/gntblist.c:299
-#: ../finch/gntblist.c:424 ../finch/gntblist.c:437 ../finch/gntplugin.c:185
+#: ../finch/gntblist.c:432 ../finch/gntblist.c:445 ../finch/gntplugin.c:185
 #: ../finch/gntplugin.c:233 ../finch/gntstatus.c:300 ../finch/gntstatus.c:308
 #: ../libpurple/protocols/jabber/buddy.c:1464
 #: ../libpurple/protocols/jabber/chat.c:677
 #: ../libpurple/protocols/jabber/chat.c:688
 #: ../libpurple/protocols/jabber/jabber.c:1227
 #: ../libpurple/protocols/qq/group_join.c:328
-#: ../libpurple/protocols/silc/ops.c:57 ../libpurple/protocols/silc/ops.c:1456
+#: ../libpurple/protocols/qq/im.c:576 ../libpurple/protocols/silc/ops.c:57
+#: ../libpurple/protocols/silc/ops.c:1456
 #: ../libpurple/protocols/silc10/ops.c:1451
 msgid "Error"
 msgstr "Chyba"
@@ -97,8 +99,8 @@
 msgid "(You probably forgot to 'make install'.)"
 msgstr "(Pravdepodobne ste zabudli na 'make install'.)"
 
-#: ../finch/gntaccount.c:490 ../pidgin/gtkaccount.c:1473
-#: ../pidgin/gtkblist.c:4014
+#: ../finch/gntaccount.c:490 ../pidgin/gtkaccount.c:1478
+#: ../pidgin/gtkblist.c:4023
 msgid "Modify Account"
 msgstr "Upraviť účet"
 
@@ -126,16 +128,16 @@
 #. Cancel button
 #. Cancel
 #: ../finch/gntaccount.c:569 ../finch/gntaccount.c:632
-#: ../finch/gntaccount.c:878 ../finch/gntblist.c:343 ../finch/gntblist.c:412
-#: ../finch/gntblist.c:447 ../finch/gntblist.c:794 ../finch/gntblist.c:996
-#: ../finch/gntblist.c:1092 ../finch/gntblist.c:2198 ../finch/gntplugin.c:378
+#: ../finch/gntaccount.c:878 ../finch/gntblist.c:343 ../finch/gntblist.c:420
+#: ../finch/gntblist.c:455 ../finch/gntblist.c:802 ../finch/gntblist.c:1004
+#: ../finch/gntblist.c:1100 ../finch/gntblist.c:2212 ../finch/gntplugin.c:378
 #: ../finch/gntpounce.c:458 ../finch/gntpounce.c:656 ../finch/gntprefs.c:264
-#: ../finch/gntstatus.c:144 ../finch/gntstatus.c:481 ../finch/gntstatus.c:606
-#: ../libpurple/account.c:984 ../libpurple/account.c:1234
-#: ../libpurple/account.c:1269 ../libpurple/conversation.c:1173
-#: ../libpurple/plugins/buddynote.c:51 ../libpurple/protocols/gg/gg.c:502
-#: ../libpurple/protocols/gg/gg.c:661 ../libpurple/protocols/gg/gg.c:798
-#: ../libpurple/protocols/gg/gg.c:879
+#: ../finch/gntsound.c:1046 ../finch/gntstatus.c:144 ../finch/gntstatus.c:481
+#: ../finch/gntstatus.c:606 ../libpurple/account.c:984
+#: ../libpurple/account.c:1234 ../libpurple/account.c:1269
+#: ../libpurple/conversation.c:1173 ../libpurple/plugins/buddynote.c:51
+#: ../libpurple/protocols/gg/gg.c:502 ../libpurple/protocols/gg/gg.c:661
+#: ../libpurple/protocols/gg/gg.c:798 ../libpurple/protocols/gg/gg.c:879
 #: ../libpurple/protocols/jabber/buddy.c:588
 #: ../libpurple/protocols/jabber/buddy.c:1826
 #: ../libpurple/protocols/jabber/buddy.c:1862
@@ -147,25 +149,25 @@
 #: ../libpurple/protocols/msn/msn.c:259 ../libpurple/protocols/msn/msn.c:276
 #: ../libpurple/protocols/msn/msn.c:293 ../libpurple/protocols/msn/msn.c:310
 #: ../libpurple/protocols/msn/msn.c:331
-#: ../libpurple/protocols/oscar/oscar.c:6073
+#: ../libpurple/protocols/oscar/oscar.c:6042
 #: ../libpurple/protocols/oscar/peer.c:1023
 #: ../libpurple/protocols/qq/buddy_info.c:484
 #: ../libpurple/protocols/qq/buddy_opt.c:214
-#: ../libpurple/protocols/qq/buddy_opt.c:409
+#: ../libpurple/protocols/qq/buddy_opt.c:411
 #: ../libpurple/protocols/qq/group.c:124
 #: ../libpurple/protocols/qq/group_join.c:140
 #: ../libpurple/protocols/qq/group_join.c:365
 #: ../libpurple/protocols/qq/group_opt.c:144
 #: ../libpurple/protocols/qq/group_opt.c:399
-#: ../libpurple/protocols/qq/sys_msg.c:115
-#: ../libpurple/protocols/qq/sys_msg.c:174
-#: ../libpurple/protocols/qq/sys_msg.c:269
-#: ../libpurple/protocols/sametime/sametime.c:3388
-#: ../libpurple/protocols/sametime/sametime.c:3474
-#: ../libpurple/protocols/sametime/sametime.c:3645
-#: ../libpurple/protocols/sametime/sametime.c:5397
-#: ../libpurple/protocols/sametime/sametime.c:5487
-#: ../libpurple/protocols/sametime/sametime.c:5612
+#: ../libpurple/protocols/qq/sys_msg.c:113
+#: ../libpurple/protocols/qq/sys_msg.c:172
+#: ../libpurple/protocols/qq/sys_msg.c:266
+#: ../libpurple/protocols/sametime/sametime.c:3389
+#: ../libpurple/protocols/sametime/sametime.c:3475
+#: ../libpurple/protocols/sametime/sametime.c:3646
+#: ../libpurple/protocols/sametime/sametime.c:5398
+#: ../libpurple/protocols/sametime/sametime.c:5488
+#: ../libpurple/protocols/sametime/sametime.c:5613
 #: ../libpurple/protocols/silc/buddy.c:455
 #: ../libpurple/protocols/silc/buddy.c:1076
 #: ../libpurple/protocols/silc/buddy.c:1191
@@ -182,36 +184,37 @@
 #: ../libpurple/protocols/silc10/ops.c:1904
 #: ../libpurple/protocols/silc10/silc.c:736
 #: ../libpurple/protocols/silc10/silc.c:942
-#: ../libpurple/protocols/yahoo/yahoo.c:989
-#: ../libpurple/protocols/yahoo/yahoo.c:3248
-#: ../libpurple/protocols/yahoo/yahoo.c:3259 ../pidgin/gtkaccount.c:1908
-#: ../pidgin/gtkaccount.c:2501 ../pidgin/gtkblist.c:5915
-#: ../pidgin/gtkdialogs.c:727 ../pidgin/gtkdialogs.c:865
-#: ../pidgin/gtkdialogs.c:957 ../pidgin/gtkdialogs.c:977
-#: ../pidgin/gtkdialogs.c:1001 ../pidgin/gtkdialogs.c:1023
-#: ../pidgin/gtkdialogs.c:1071 ../pidgin/gtkdialogs.c:1112
-#: ../pidgin/gtkdialogs.c:1168 ../pidgin/gtkdialogs.c:1207
-#: ../pidgin/gtkdialogs.c:1234 ../pidgin/gtkimhtmltoolbar.c:425
+#: ../libpurple/protocols/yahoo/yahoo.c:1016
+#: ../libpurple/protocols/yahoo/yahoo.c:3398
+#: ../libpurple/protocols/yahoo/yahoo.c:3409 ../pidgin/gtkaccount.c:1917
+#: ../pidgin/gtkaccount.c:2511 ../pidgin/gtkblist.c:5925
+#: ../pidgin/gtkdialogs.c:750 ../pidgin/gtkdialogs.c:888
+#: ../pidgin/gtkdialogs.c:980 ../pidgin/gtkdialogs.c:1000
+#: ../pidgin/gtkdialogs.c:1024 ../pidgin/gtkdialogs.c:1046
+#: ../pidgin/gtkdialogs.c:1094 ../pidgin/gtkdialogs.c:1135
+#: ../pidgin/gtkdialogs.c:1191 ../pidgin/gtkdialogs.c:1230
+#: ../pidgin/gtkdialogs.c:1257 ../pidgin/gtkimhtmltoolbar.c:425
 #: ../pidgin/gtklog.c:327 ../pidgin/gtkplugin.c:288 ../pidgin/gtkpounce.c:1115
 #: ../pidgin/gtkprivacy.c:562 ../pidgin/gtkprivacy.c:578
 #: ../pidgin/gtkprivacy.c:603 ../pidgin/gtkprivacy.c:617
 #: ../pidgin/gtkrequest.c:270 ../pidgin/gtksavedstatuses.c:344
-#: ../pidgin/gtkstatusbox.c:1582
+#: ../pidgin/gtkstatusbox.c:1573
 msgid "Cancel"
 msgstr "Zrušiť"
 
 #. Save button
 #. Save
 #: ../finch/gntaccount.c:573 ../finch/gntplugin.c:378 ../finch/gntpounce.c:464
-#: ../finch/gntprefs.c:264 ../finch/gntstatus.c:484 ../finch/gntstatus.c:594
-#: ../libpurple/account.c:1268 ../libpurple/plugins/buddynote.c:50
+#: ../finch/gntprefs.c:264 ../finch/gntsound.c:1043 ../finch/gntstatus.c:484
+#: ../finch/gntstatus.c:594 ../libpurple/account.c:1268
+#: ../libpurple/plugins/buddynote.c:50
 #: ../libpurple/protocols/jabber/buddy.c:587 ../pidgin/gtkdebug.c:748
 #: ../pidgin/gtkrequest.c:276
 msgid "Save"
 msgstr "Uložiť"
 
-#: ../finch/gntaccount.c:626 ../pidgin/gtkaccount.c:1900
-#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1576
+#: ../finch/gntaccount.c:626 ../pidgin/gtkaccount.c:1909
+#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1567
 #, c-format
 msgid "Are you sure you want to delete %s?"
 msgstr "Naozaj chcete odstrániť %s?"
@@ -223,14 +226,14 @@
 #. Delete button
 #: ../finch/gntaccount.c:631 ../finch/gntaccount.c:701
 #: ../finch/gntpounce.c:655 ../finch/gntpounce.c:718 ../finch/gntstatus.c:143
-#: ../finch/gntstatus.c:209 ../pidgin/gtkaccount.c:1907 ../pidgin/gtklog.c:326
+#: ../finch/gntstatus.c:209 ../pidgin/gtkaccount.c:1916 ../pidgin/gtklog.c:326
 #: ../pidgin/gtkpounce.c:1114 ../pidgin/gtkrequest.c:273
-#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1581
+#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1572
 msgid "Delete"
 msgstr "Odstrániť"
 
-#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2104 ../finch/gntui.c:77
-#: ../pidgin/gtkaccount.c:2327 ../pidgin/gtkdocklet.c:522
+#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2118 ../finch/gntui.c:81
+#: ../pidgin/gtkaccount.c:2334 ../pidgin/gtkdocklet.c:522
 msgid "Accounts"
 msgstr "Účty"
 
@@ -240,15 +243,15 @@
 
 #. Add button
 #: ../finch/gntaccount.c:692 ../finch/gntaccount.c:877 ../finch/gntblist.c:342
-#: ../finch/gntblist.c:412 ../finch/gntblist.c:447 ../finch/gntnotify.c:379
+#: ../finch/gntblist.c:420 ../finch/gntblist.c:455 ../finch/gntnotify.c:379
 #: ../finch/gntpounce.c:702 ../finch/gntstatus.c:198
-#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:116
-#: ../libpurple/protocols/qq/sys_msg.c:175
-#: ../libpurple/protocols/qq/sys_msg.c:270
-#: ../libpurple/protocols/sametime/sametime.c:5486
+#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:114
+#: ../libpurple/protocols/qq/sys_msg.c:173
+#: ../libpurple/protocols/qq/sys_msg.c:267
+#: ../libpurple/protocols/sametime/sametime.c:5487
 #: ../libpurple/protocols/silc/chat.c:615
-#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2500
-#: ../pidgin/gtkblist.c:5914 ../pidgin/gtkconv.c:1651
+#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2510
+#: ../pidgin/gtkblist.c:5924 ../pidgin/gtkconv.c:1654
 #: ../pidgin/gtkrequest.c:274
 msgid "Add"
 msgstr "Pridať"
@@ -258,35 +261,35 @@
 msgid "Modify"
 msgstr "Upraviť"
 
-#: ../finch/gntaccount.c:800 ../pidgin/gtkaccount.c:2447
+#: ../finch/gntaccount.c:800 ../pidgin/gtkaccount.c:2457
 #, c-format
 msgid "%s%s%s%s has made %s his or her buddy%s%s"
 msgstr "%s%s%s používateľ %s pridal %s medzi svojich priateľov%s%s"
 
-#: ../finch/gntaccount.c:873 ../pidgin/gtkaccount.c:2499
+#: ../finch/gntaccount.c:873 ../pidgin/gtkaccount.c:2509
 msgid "Add buddy to your list?"
 msgstr "Pridať priateľa do vášho zoznamu?"
 
-#: ../finch/gntaccount.c:927 ../pidgin/gtkaccount.c:2551
+#: ../finch/gntaccount.c:933 ../pidgin/gtkaccount.c:2567
 #, c-format
 msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s"
 msgstr ""
 "%s%s%sPoužívateľ %s si chce pridať používateľa %s do svojho zoznamu priateľov"
 "%s%s"
 
-#: ../finch/gntaccount.c:952 ../finch/gntaccount.c:955
-#: ../finch/gntaccount.c:982 ../pidgin/gtkaccount.c:2574
-#: ../pidgin/gtkaccount.c:2580
+#: ../finch/gntaccount.c:958 ../finch/gntaccount.c:961
+#: ../finch/gntaccount.c:988 ../pidgin/gtkaccount.c:2590
+#: ../pidgin/gtkaccount.c:2596
 msgid "Authorize buddy?"
 msgstr "Autorizovať priateľa?"
 
-#: ../finch/gntaccount.c:959 ../finch/gntaccount.c:986
-#: ../pidgin/gtkaccount.c:2575 ../pidgin/gtkaccount.c:2581
+#: ../finch/gntaccount.c:965 ../finch/gntaccount.c:992
+#: ../pidgin/gtkaccount.c:2591 ../pidgin/gtkaccount.c:2597
 msgid "Authorize"
 msgstr "Autorizovať"
 
-#: ../finch/gntaccount.c:960 ../finch/gntaccount.c:987
-#: ../pidgin/gtkaccount.c:2576 ../pidgin/gtkaccount.c:2582
+#: ../finch/gntaccount.c:966 ../finch/gntaccount.c:993
+#: ../pidgin/gtkaccount.c:2592 ../pidgin/gtkaccount.c:2598
 msgid "Deny"
 msgstr "Odmietnuť"
 
@@ -310,36 +313,36 @@
 msgid "Error adding buddy"
 msgstr "Chyba počas pridávania priateľa"
 
-#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2864
-#: ../pidgin/gtkaccount.c:1983 ../pidgin/gtksavedstatuses.c:979
+#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2858
+#: ../pidgin/gtkaccount.c:1990 ../pidgin/gtksavedstatuses.c:979
 msgid "Screen Name"
 msgstr "Používateľské meno"
 
-#: ../finch/gntblist.c:327 ../finch/gntblist.c:404 ../finch/gntblist.c:1240
+#: ../finch/gntblist.c:327 ../finch/gntblist.c:409 ../finch/gntblist.c:1249
 #: ../libpurple/protocols/msn/msn.c:1364
 #: ../libpurple/protocols/silc/chat.c:606
 #: ../libpurple/protocols/silc10/chat.c:590
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:680
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:704
 #: ../libpurple/protocols/zephyr/zephyr.c:788
-#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:976
-#: ../pidgin/gtkdialogs.c:1000 ../pidgin/gtkdialogs.c:1022
+#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:999
+#: ../pidgin/gtkdialogs.c:1023 ../pidgin/gtkdialogs.c:1045
 #: ../pidgin/gtkrequest.c:277
 msgid "Alias"
 msgstr "Prezývka"
 
-#: ../finch/gntblist.c:330 ../finch/gntblist.c:407
+#: ../finch/gntblist.c:330 ../finch/gntblist.c:412
 msgid "Group"
 msgstr "Skupina"
 
-#: ../finch/gntblist.c:334 ../finch/gntblist.c:395 ../finch/gntblist.c:1292
+#: ../finch/gntblist.c:334 ../finch/gntblist.c:400 ../finch/gntblist.c:1304
 #: ../finch/gntnotify.c:173 ../finch/gntstatus.c:572
 #: ../libpurple/plugins/idle.c:153 ../libpurple/plugins/idle.c:190
-#: ../pidgin/gtkblist.c:2974 ../pidgin/gtknotify.c:482
-#: ../pidgin/gtkpounce.c:1282 ../pidgin/plugins/gevolution/gevolution.c:443
+#: ../pidgin/gtkblist.c:2986 ../pidgin/gtknotify.c:488
+#: ../pidgin/gtkpounce.c:1282 ../pidgin/plugins/gevolution/gevolution.c:445
 msgid "Account"
 msgstr "Účet"
 
-#: ../finch/gntblist.c:340 ../finch/gntblist.c:843
+#: ../finch/gntblist.c:340 ../finch/gntblist.c:851
 #: ../libpurple/protocols/silc/buddy.c:725
 #: ../libpurple/protocols/silc/buddy.c:1027
 #: ../libpurple/protocols/silc/buddy.c:1072
@@ -348,7 +351,7 @@
 #: ../libpurple/protocols/silc10/buddy.c:1033
 #: ../libpurple/protocols/silc10/buddy.c:1080
 #: ../libpurple/protocols/silc10/buddy.c:1180
-#: ../libpurple/protocols/yahoo/yahoo.c:3161 ../pidgin/gtkblist.c:5420
+#: ../libpurple/protocols/yahoo/yahoo.c:3243 ../pidgin/gtkblist.c:5431
 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:445
 msgid "Add Buddy"
 msgstr "Pridať priateľa"
@@ -357,12 +360,12 @@
 msgid "Please enter buddy information."
 msgstr "Zadajte, prosím, informáciu o priateľovi."
 
-#: ../finch/gntblist.c:367 ../libpurple/blist.c:1190
+#: ../finch/gntblist.c:369 ../libpurple/blist.c:1190
 msgid "Chats"
 msgstr "Chaty"
 
 #. Extract their Name and put it in
-#: ../finch/gntblist.c:401 ../libpurple/protocols/jabber/jabber.c:813
+#: ../finch/gntblist.c:406 ../libpurple/protocols/jabber/jabber.c:813
 #: ../libpurple/protocols/msn/msn.c:1553 ../libpurple/protocols/msn/msn.c:1618
 #: ../libpurple/protocols/msn/msn.c:1645
 #: ../libpurple/protocols/qq/buddy_info.c:44 ../pidgin/gtkplugin.c:581
@@ -372,146 +375,146 @@
 msgid "Name"
 msgstr "Meno"
 
-#: ../finch/gntblist.c:410 ../finch/gntblist.c:845 ../pidgin/gtkblist.c:5800
+#: ../finch/gntblist.c:415 ../finch/gntblist.c:818
+msgid "Auto-join"
+msgstr "Prihlásiť automaticky"
+
+#: ../finch/gntblist.c:418 ../finch/gntblist.c:853 ../pidgin/gtkblist.c:5810
 msgid "Add Chat"
 msgstr "Pridať chat"
 
-#: ../finch/gntblist.c:411
+#: ../finch/gntblist.c:419
 msgid "You can edit more information from the context menu later."
 msgstr "Viac informácií môžete zmeniť neskôr v kontextovej ponuke."
 
-#: ../finch/gntblist.c:424 ../finch/gntblist.c:437
+#: ../finch/gntblist.c:432 ../finch/gntblist.c:445
 msgid "Error adding group"
 msgstr "Chyba počas pridávania skupiny"
 
-#: ../finch/gntblist.c:425
+#: ../finch/gntblist.c:433
 msgid "You must give a name for the group to add."
 msgstr "Zadajte názov skupiny, ktorú chcete pridať."
 
-#: ../finch/gntblist.c:438
+#: ../finch/gntblist.c:446
 msgid "A group with the name already exists."
 msgstr "Skupina s týmto názvom už existuje."
 
-#: ../finch/gntblist.c:445 ../finch/gntblist.c:847
-#: ../libpurple/protocols/sametime/sametime.c:5396
-#: ../libpurple/protocols/sametime/sametime.c:5484 ../pidgin/gtkblist.c:5911
+#: ../finch/gntblist.c:453 ../finch/gntblist.c:855
+#: ../libpurple/protocols/sametime/sametime.c:5397
+#: ../libpurple/protocols/sametime/sametime.c:5485 ../pidgin/gtkblist.c:5921
 msgid "Add Group"
 msgstr "Pridať skupinu"
 
-#: ../finch/gntblist.c:445
+#: ../finch/gntblist.c:453
 msgid "Enter the name of the group"
 msgstr "Zadajte názov skupiny"
 
-#: ../finch/gntblist.c:793
+#: ../finch/gntblist.c:801
 msgid "Edit Chat"
 msgstr "Upraviť chat"
 
-#: ../finch/gntblist.c:793
+#: ../finch/gntblist.c:801
 msgid "Please Update the necessary fields."
 msgstr "Prosím, aktualizujte potrebné políčka."
 
-#: ../finch/gntblist.c:794 ../finch/gntstatus.c:204
+#: ../finch/gntblist.c:802 ../finch/gntstatus.c:204
 msgid "Edit"
 msgstr "Upraviť"
 
-#: ../finch/gntblist.c:810
-msgid "Auto-join"
-msgstr "Prihlásiť automaticky"
-
-#: ../finch/gntblist.c:819
+#: ../finch/gntblist.c:827
 msgid "Edit Settings"
 msgstr "Upraviť nastavenia"
 
-#: ../finch/gntblist.c:855 ../pidgin/gtkutils.c:926
+#: ../finch/gntblist.c:863 ../pidgin/gtkutils.c:930
 msgid "Information"
 msgstr "Informácie"
 
-#: ../finch/gntblist.c:855 ../pidgin/gtkutils.c:926
+#: ../finch/gntblist.c:863 ../pidgin/gtkutils.c:930
 msgid "Retrieving..."
 msgstr "Prijíma sa..."
 
-#: ../finch/gntblist.c:895 ../finch/gntconv.c:407
+#: ../finch/gntblist.c:903 ../finch/gntconv.c:431
 #: ../libpurple/protocols/silc/chat.c:899
 #: ../libpurple/protocols/silc10/chat.c:883
 msgid "Get Info"
 msgstr "Zobraziť podrobnosti"
 
-#: ../finch/gntblist.c:899
+#: ../finch/gntblist.c:907
 msgid "Add Buddy Pounce"
 msgstr "Pridať sledovanie priateľa"
 
 #. if (q_bud && is_online(q_bud->status)) {
-#: ../finch/gntblist.c:906 ../finch/gntconv.c:419
+#: ../finch/gntblist.c:914 ../finch/gntconv.c:443
 #: ../libpurple/protocols/jabber/si.c:868
-#: ../libpurple/protocols/oscar/oscar.c:654 ../libpurple/protocols/qq/qq.c:585
-#: ../pidgin/gtkconv.c:1599
+#: ../libpurple/protocols/oscar/oscar.c:653 ../libpurple/protocols/qq/qq.c:587
+#: ../pidgin/gtkconv.c:1602
 msgid "Send File"
 msgstr "Odoslať súbor"
 
-#: ../finch/gntblist.c:910
+#: ../finch/gntblist.c:918
 msgid "View Log"
 msgstr "Zobraziť záznam"
 
-#: ../finch/gntblist.c:991
+#: ../finch/gntblist.c:999
 #, c-format
 msgid "Please enter the new name for %s"
 msgstr "Zadajte, prosím, nový názov pre %s"
 
-#: ../finch/gntblist.c:993 ../finch/gntblist.c:1240
+#: ../finch/gntblist.c:1001 ../finch/gntblist.c:1249
 msgid "Rename"
 msgstr "Premenovať"
 
-#: ../finch/gntblist.c:993
+#: ../finch/gntblist.c:1001
 msgid "Set Alias"
 msgstr "Nastaviť prezývku"
 
-#: ../finch/gntblist.c:994
+#: ../finch/gntblist.c:1002
 msgid "Enter empty string to reset the name."
 msgstr "Zadajte prázdny reťazec pre obnovenie názvu."
 
-#: ../finch/gntblist.c:1070
+#: ../finch/gntblist.c:1078
 msgid "Removing this contact will also remove all the buddies in the contact"
 msgstr ""
 "Odstránením tohoto kontaktu odstránite všetkých priateľov, ktorí sa "
 "nachádzajú v kontakte"
 
-#: ../finch/gntblist.c:1078
+#: ../finch/gntblist.c:1086
 msgid "Removing this group will also remove all the buddies in the group"
 msgstr "Odstránením tejto skupiny odstránite všetkých priateľov v skupine"
 
-#: ../finch/gntblist.c:1083
+#: ../finch/gntblist.c:1091
 #, c-format
 msgid "Are you sure you want to remove %s?"
 msgstr "Naozaj chcete odstrániť %s?"
 
 #. XXX: anything to do with the returned ui-handle?
-#: ../finch/gntblist.c:1086
+#: ../finch/gntblist.c:1094
 msgid "Confirm Remove"
 msgstr "Potvrdiť odstránenie"
 
-#: ../finch/gntblist.c:1091 ../finch/gntblist.c:1242 ../finch/gntft.c:224
-#: ../pidgin/gtkconv.c:1648 ../pidgin/gtkrequest.c:275
+#: ../finch/gntblist.c:1099 ../finch/gntblist.c:1251 ../finch/gntft.c:224
+#: ../pidgin/gtkconv.c:1651 ../pidgin/gtkrequest.c:275
 #: ../pidgin/gtkstatusbox.c:263
 msgid "Remove"
 msgstr "Odstrániť"
 
 #. Buddy List
-#: ../finch/gntblist.c:1216 ../finch/gntblist.c:2283 ../finch/gntprefs.c:257
-#: ../finch/gntui.c:78 ../pidgin/gtkblist.c:4256
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:330
+#: ../finch/gntblist.c:1225 ../finch/gntblist.c:2297 ../finch/gntprefs.c:257
+#: ../finch/gntui.c:82 ../pidgin/gtkblist.c:4267
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:326
 msgid "Buddy List"
 msgstr "Zoznam priateľov"
 
-#: ../finch/gntblist.c:1247
+#: ../finch/gntblist.c:1256
 msgid "Place tagged"
 msgstr "Miesto bolo označené"
 
-#: ../finch/gntblist.c:1252
+#: ../finch/gntblist.c:1261
 msgid "Toggle Tag"
 msgstr "Prepnúť značku"
 
 #. General
-#: ../finch/gntblist.c:1287 ../libpurple/protocols/gg/gg.c:632
+#: ../finch/gntblist.c:1297 ../libpurple/protocols/gg/gg.c:632
 #: ../libpurple/protocols/gg/gg.c:1045 ../libpurple/protocols/gg/gg.c:1118
 #: ../libpurple/protocols/gg/gg.c:2202
 #: ../libpurple/protocols/jabber/buddy.c:274
@@ -529,29 +532,29 @@
 #: ../libpurple/protocols/silc10/ops.c:1036
 #: ../libpurple/protocols/silc10/ops.c:1179
 #: ../libpurple/protocols/silc10/ops.c:1328
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1042 ../pidgin/gtkblist.c:2998
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1066 ../pidgin/gtkblist.c:3010
 msgid "Nickname"
 msgstr "Prezývka"
 
 #. Idle stuff
-#: ../finch/gntblist.c:1307 ../finch/gntprefs.c:260
-#: ../libpurple/protocols/bonjour/bonjour.c:314
+#: ../finch/gntblist.c:1319 ../finch/gntprefs.c:260
+#: ../libpurple/protocols/bonjour/bonjour.c:333
 #: ../libpurple/protocols/jabber/buddy.c:647
 #: ../libpurple/protocols/jabber/buddy.c:687
 #: ../libpurple/protocols/msn/msn.c:516 ../libpurple/protocols/msn/state.c:32
 #: ../libpurple/protocols/novell/novell.c:2825
-#: ../libpurple/protocols/oscar/oscar.c:2888
-#: ../libpurple/protocols/yahoo/yahoo.c:2915
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:686 ../pidgin/gtkblist.c:3026
-#: ../pidgin/gtkblist.c:3435 ../pidgin/gtkprefs.c:1918
+#: ../libpurple/protocols/oscar/oscar.c:2882
+#: ../libpurple/protocols/yahoo/yahoo.c:2997
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3038
+#: ../pidgin/gtkblist.c:3443 ../pidgin/gtkprefs.c:1920
 msgid "Idle"
 msgstr "Nečinný"
 
-#: ../finch/gntblist.c:1320
+#: ../finch/gntblist.c:1333
 msgid "On Mobile"
 msgstr "Mobilný"
 
-#: ../finch/gntblist.c:1400
+#: ../finch/gntblist.c:1414
 #, c-format
 msgid ""
 "Online: %d\n"
@@ -560,12 +563,12 @@
 "Pripojený: %d\n"
 "Celkom: %d"
 
-#: ../finch/gntblist.c:1409
+#: ../finch/gntblist.c:1423
 #, c-format
 msgid "Account: %s (%s)"
 msgstr "Účet: %s (%s)"
 
-#: ../finch/gntblist.c:1421
+#: ../finch/gntblist.c:1435
 #, c-format
 msgid ""
 "\n"
@@ -574,50 +577,50 @@
 "\n"
 "Naposledy pripojený: %s dozadu"
 
-#: ../finch/gntblist.c:1687 ../pidgin/gtkdocklet.c:470
-#: ../pidgin/gtkstatusbox.c:1070
+#: ../finch/gntblist.c:1701 ../pidgin/gtkdocklet.c:470
+#: ../pidgin/gtkstatusbox.c:1071
 msgid "New..."
 msgstr "Nový..."
 
-#: ../finch/gntblist.c:1694 ../pidgin/gtkdocklet.c:471
-#: ../pidgin/gtkstatusbox.c:1071
+#: ../finch/gntblist.c:1708 ../pidgin/gtkdocklet.c:471
+#: ../pidgin/gtkstatusbox.c:1072
 msgid "Saved..."
 msgstr "Uložený..."
 
-#: ../finch/gntblist.c:2072 ../finch/gntplugin.c:254 ../finch/gntui.c:82
+#: ../finch/gntblist.c:2086 ../finch/gntplugin.c:254 ../finch/gntui.c:86
 #: ../pidgin/gtkdocklet.c:523 ../pidgin/gtkplugin.c:530
 msgid "Plugins"
 msgstr "Moduly"
 
-#: ../finch/gntblist.c:2179 ../pidgin/gtkdialogs.c:708
-#: ../pidgin/gtkdialogs.c:846 ../pidgin/gtkdialogs.c:927
+#: ../finch/gntblist.c:2193 ../pidgin/gtkdialogs.c:731
+#: ../pidgin/gtkdialogs.c:869 ../pidgin/gtkdialogs.c:950
 msgid "_Name"
 msgstr "_Meno"
 
-#: ../finch/gntblist.c:2184 ../pidgin/gtkdialogs.c:713
-#: ../pidgin/gtkdialogs.c:851 ../pidgin/gtkdialogs.c:932
+#: ../finch/gntblist.c:2198 ../pidgin/gtkdialogs.c:736
+#: ../pidgin/gtkdialogs.c:874 ../pidgin/gtkdialogs.c:955
 msgid "_Account"
 msgstr "Úč_et"
 
-#: ../finch/gntblist.c:2192 ../pidgin/gtkdialogs.c:721
+#: ../finch/gntblist.c:2206 ../pidgin/gtkdialogs.c:744
 msgid "New Instant Message"
 msgstr "Nová správa"
 
-#: ../finch/gntblist.c:2194 ../pidgin/gtkdialogs.c:723
+#: ../finch/gntblist.c:2208 ../pidgin/gtkdialogs.c:746
 msgid ""
 "Please enter the screen name or alias of the person you would like to IM."
 msgstr ""
 "Zadajte, prosím, používateľské meno alebo prezývku osoby, ktorej chcete "
 "odoslať správu."
 
-#: ../finch/gntblist.c:2197 ../finch/gntnotify.c:79 ../libpurple/account.c:983
+#: ../finch/gntblist.c:2211 ../finch/gntnotify.c:79 ../libpurple/account.c:983
 #: ../libpurple/account.c:1233 ../libpurple/protocols/gg/gg.c:501
 #: ../libpurple/protocols/gg/gg.c:660 ../libpurple/protocols/gg/gg.c:797
 #: ../libpurple/protocols/jabber/jabber.c:1383
 #: ../libpurple/protocols/jabber/xdata.c:336
 #: ../libpurple/protocols/msn/msn.c:258 ../libpurple/protocols/msn/msn.c:275
 #: ../libpurple/protocols/msn/msn.c:292 ../libpurple/protocols/msn/msn.c:309
-#: ../libpurple/protocols/oscar/oscar.c:6072
+#: ../libpurple/protocols/oscar/oscar.c:6041
 #: ../libpurple/protocols/silc/buddy.c:454
 #: ../libpurple/protocols/silc/buddy.c:1190
 #: ../libpurple/protocols/silc/chat.c:447
@@ -634,40 +637,40 @@
 #: ../libpurple/protocols/silc10/ops.c:1297
 #: ../libpurple/protocols/silc10/ops.c:1903
 #: ../libpurple/protocols/silc10/silc.c:735
-#: ../libpurple/protocols/yahoo/yahoo.c:988
-#: ../libpurple/protocols/yahoo/yahoo.c:3247
-#: ../libpurple/protocols/yahoo/yahoo.c:3258 ../pidgin/gtkblist.c:4013
-#: ../pidgin/gtkdialogs.c:726 ../pidgin/gtkdialogs.c:864
-#: ../pidgin/gtkdialogs.c:956 ../pidgin/gtkrequest.c:269
+#: ../libpurple/protocols/yahoo/yahoo.c:1015
+#: ../libpurple/protocols/yahoo/yahoo.c:3397
+#: ../libpurple/protocols/yahoo/yahoo.c:3408 ../pidgin/gtkblist.c:4022
+#: ../pidgin/gtkdialogs.c:749 ../pidgin/gtkdialogs.c:887
+#: ../pidgin/gtkdialogs.c:979 ../pidgin/gtkrequest.c:269
 msgid "OK"
 msgstr "OK"
 
 #. Create the "Options" frame.
-#: ../finch/gntblist.c:2217 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791
+#: ../finch/gntblist.c:2231 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791
 msgid "Options"
 msgstr "Voľby"
 
-#: ../finch/gntblist.c:2223
+#: ../finch/gntblist.c:2237
 msgid "Send IM..."
 msgstr "Odoslať správu..."
 
-#: ../finch/gntblist.c:2227
+#: ../finch/gntblist.c:2241
 msgid "Show empty groups"
 msgstr "Zobraziť prázdne skupiny"
 
-#: ../finch/gntblist.c:2233
+#: ../finch/gntblist.c:2247
 msgid "Show offline buddies"
 msgstr "Zobraziť odpojených priateľov"
 
-#: ../finch/gntblist.c:2239
+#: ../finch/gntblist.c:2253
 msgid "Sort by status"
 msgstr "Zoradiť podľa stavu"
 
-#: ../finch/gntblist.c:2243
+#: ../finch/gntblist.c:2257
 msgid "Sort alphabetically"
 msgstr "Zoradiť podľa abecedy"
 
-#: ../finch/gntblist.c:2247
+#: ../finch/gntblist.c:2261
 msgid "Sort by log size"
 msgstr "Zoradiť podľa veľkosti záznamu"
 
@@ -694,41 +697,41 @@
 "Finch sa nebude pokúšať znovu pripojiť na tento účet, dokým neopravíte chybu "
 "a znovu nepovolíte tento účet."
 
-#: ../finch/gntconv.c:117
+#: ../finch/gntconv.c:118
 msgid "No such command."
 msgstr "Tento príkaz neexistuje."
 
-#: ../finch/gntconv.c:121 ../pidgin/gtkconv.c:492
+#: ../finch/gntconv.c:122 ../pidgin/gtkconv.c:495
 msgid "Syntax Error:  You typed the wrong number of arguments to that command."
 msgstr "Chyba syntaxi: V príkaze ste zadali nesprávny počet argumentov."
 
-#: ../finch/gntconv.c:126 ../pidgin/gtkconv.c:498
+#: ../finch/gntconv.c:127 ../pidgin/gtkconv.c:501
 msgid "Your command failed for an unknown reason."
 msgstr "Váš príkaz zlyhal z neznámeho dôvodu."
 
-#: ../finch/gntconv.c:131 ../pidgin/gtkconv.c:505
+#: ../finch/gntconv.c:132 ../pidgin/gtkconv.c:508
 msgid "That command only works in chats, not IMs."
 msgstr "Tento príkaz funguje len v chatoch, nie v IM."
 
-#: ../finch/gntconv.c:134 ../pidgin/gtkconv.c:508
+#: ../finch/gntconv.c:135 ../pidgin/gtkconv.c:511
 msgid "That command only works in IMs, not chats."
 msgstr "Tento príkaz funguje len v IM, nie v chatoch."
 
-#: ../finch/gntconv.c:138 ../pidgin/gtkconv.c:513
+#: ../finch/gntconv.c:139 ../pidgin/gtkconv.c:516
 msgid "That command doesn't work on this protocol."
 msgstr "Tento príkaz nefunguje v tomto protokole."
 
-#: ../finch/gntconv.c:224
+#: ../finch/gntconv.c:225
 #, c-format
 msgid "%s (%s -- %s)"
 msgstr "%s (%s -- %s)"
 
-#: ../finch/gntconv.c:247
+#: ../finch/gntconv.c:248
 #, c-format
 msgid "%s [%s]"
 msgstr "%s [%s]"
 
-#: ../finch/gntconv.c:252 ../finch/gntconv.c:647
+#: ../finch/gntconv.c:253 ../finch/gntconv.c:672
 #, c-format
 msgid ""
 "\n"
@@ -737,48 +740,48 @@
 "\n"
 "%s píše..."
 
-#: ../finch/gntconv.c:271
+#: ../finch/gntconv.c:272
 msgid "You have left this chat."
 msgstr "Opustili ste tento chat."
 
-#: ../finch/gntconv.c:342
+#: ../finch/gntconv.c:366
 msgid "Send To"
 msgstr "Odoslať do"
 
-#: ../finch/gntconv.c:386
+#: ../finch/gntconv.c:410
 msgid "Conversation"
 msgstr "Rozhovor"
 
-#: ../finch/gntconv.c:392
+#: ../finch/gntconv.c:416
 msgid "Clear Scrollback"
 msgstr "Vymazať záznam"
 
-#: ../finch/gntconv.c:396 ../finch/gntprefs.c:190
+#: ../finch/gntconv.c:420 ../finch/gntprefs.c:190
 msgid "Show Timestamps"
 msgstr "Zobrazovať časové značky"
 
-#: ../finch/gntconv.c:412
+#: ../finch/gntconv.c:436
 msgid "Add Buddy Pounce..."
 msgstr "Pridať sledovanie priateľa..."
 
-#: ../finch/gntconv.c:614
+#: ../finch/gntconv.c:638
 msgid "<AUTO-REPLY> "
 msgstr "<AUTOMATICKÁ ODPOVEĎ> "
 
 #. Print the list of users in the room
-#: ../finch/gntconv.c:735
+#: ../finch/gntconv.c:760
 msgid "List of users:\n"
 msgstr "Zoznam používateľov:\n"
 
-#: ../finch/gntconv.c:880 ../pidgin/gtkconv.c:335
+#: ../finch/gntconv.c:905 ../pidgin/gtkconv.c:338
 msgid "Supported debug options are:  version"
 msgstr "Podporované ladiace voľby sú:  version"
 
-#: ../finch/gntconv.c:915 ../pidgin/gtkconv.c:384
+#: ../finch/gntconv.c:940 ../pidgin/gtkconv.c:387
 msgid "No such command (in this context)."
 msgstr "Tento príkaz neexistuje (v tejto situácii)."
 
-#: ../finch/gntconv.c:918 ../pidgin/gtkconv.c:387
+#: ../finch/gntconv.c:943 ../pidgin/gtkconv.c:390
 msgid ""
 "Use \"/help &lt;command&gt;\" for help on a specific command.\n"
 "The following commands are available in this context:\n"
@@ -786,60 +789,60 @@
 "Pomocníka ku zadanému príkazu zobrazíte zadaním \"/help &lt;príkaz&gt;\".\n"
 "V tomto kontexte sú dostupné nasledujúce príkazy:\n"
 
-#: ../finch/gntconv.c:976 ../pidgin/gtkconv.c:7198
+#: ../finch/gntconv.c:1001 ../pidgin/gtkconv.c:7350
 msgid ""
 "say &lt;message&gt;:  Send a message normally as if you weren't using a "
 "command."
 msgstr "say &lt;správa&gt;:  Odošle správu rovnako, ako bez použitia príkazu."
 
-#: ../finch/gntconv.c:979 ../pidgin/gtkconv.c:7201
+#: ../finch/gntconv.c:1004 ../pidgin/gtkconv.c:7353
 msgid "me &lt;action&gt;:  Send an IRC style action to a buddy or chat."
 msgstr "me &lt;akcia&gt;:  Odošle priateľovi alebo na chat akciu v štýle IRC."
 
-#: ../finch/gntconv.c:982 ../pidgin/gtkconv.c:7204
+#: ../finch/gntconv.c:1007 ../pidgin/gtkconv.c:7356
 msgid ""
 "debug &lt;option&gt;:  Send various debug information to the current "
 "conversation."
 msgstr ""
 "debug &lt;voľby&gt;:  Do aktuálneho rozhovoru vloží rôzne ladiace informácie."
 
-#: ../finch/gntconv.c:985 ../pidgin/gtkconv.c:7207
+#: ../finch/gntconv.c:1010 ../pidgin/gtkconv.c:7359
 msgid "clear: Clears the conversation scrollback."
 msgstr "clear: Vyčistí okno rozhovoru."
 
-#: ../finch/gntconv.c:988 ../pidgin/gtkconv.c:7213
+#: ../finch/gntconv.c:1013 ../pidgin/gtkconv.c:7365
 msgid "help &lt;command&gt;:  Help on a specific command."
 msgstr "help &lt;príkaz&gt;:  Zobrazí pomocníka ku zadanému príkazu."
 
-#: ../finch/gntconv.c:991
+#: ../finch/gntconv.c:1016
 msgid "users:  Show the list of users in the chat."
 msgstr "users:  Zobrazí zoznam používateľov na chate."
 
-#: ../finch/gntconv.c:996
+#: ../finch/gntconv.c:1021
 msgid "plugins: Show the plugins window."
 msgstr "plugins: Zobrazí okno modulov."
 
-#: ../finch/gntconv.c:999
+#: ../finch/gntconv.c:1024
 msgid "buddylist: Show the buddylist."
 msgstr "buddylist: Zobrazí zoznam priateľov."
 
-#: ../finch/gntconv.c:1002
+#: ../finch/gntconv.c:1027
 msgid "accounts: Show the accounts window."
 msgstr "accounts: Zobrazí okno účtov."
 
-#: ../finch/gntconv.c:1005
+#: ../finch/gntconv.c:1030
 msgid "debugwin: Show the debug window."
 msgstr "debugwin: Zobrazí ladiace okno."
 
-#: ../finch/gntconv.c:1008
+#: ../finch/gntconv.c:1033
 msgid "prefs: Show the preference window."
 msgstr "prefs: Zobrazí okno nastavení."
 
-#: ../finch/gntconv.c:1011
+#: ../finch/gntconv.c:1036
 msgid "statuses: Show the savedstatuses window."
 msgstr "statuses: Zobrazí okno uložených stavov."
 
-#: ../finch/gntdebug.c:234 ../finch/gntui.c:80 ../pidgin/gtkdebug.c:694
+#: ../finch/gntdebug.c:234 ../finch/gntui.c:84 ../pidgin/gtkdebug.c:694
 msgid "Debug Window"
 msgstr "Ladiace okno"
 
@@ -865,7 +868,7 @@
 msgstr "Prenosy súborov - %d%% z %d súborov"
 
 #. Create the window.
-#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:81
+#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:85
 #: ../pidgin/gtkft.c:233 ../pidgin/gtkft.c:761
 msgid "File Transfers"
 msgstr "Prenosy súborov"
@@ -892,7 +895,7 @@
 
 #. XXX: Use of ggp_str_to_uin() is an ugly hack!
 #: ../finch/gntft.c:198 ../finch/gntstatus.c:543 ../finch/gntstatus.c:572
-#: ../libpurple/protocols/bonjour/bonjour.c:318
+#: ../libpurple/protocols/bonjour/bonjour.c:337
 #: ../libpurple/protocols/gg/gg.c:1034 ../libpurple/protocols/gg/gg.c:1571
 #: ../libpurple/protocols/gg/gg.c:1579
 #: ../libpurple/protocols/jabber/buddy.c:638
@@ -901,15 +904,15 @@
 #: ../libpurple/protocols/jabber/jabber.c:1212
 #: ../libpurple/protocols/msn/msn.c:515
 #: ../libpurple/protocols/novell/novell.c:2835
-#: ../libpurple/protocols/oscar/oscar.c:821
-#: ../libpurple/protocols/oscar/oscar.c:826
-#: ../libpurple/protocols/oscar/oscar.c:828
-#: ../libpurple/protocols/oscar/oscar.c:2676
-#: ../libpurple/protocols/oscar/oscar.c:3794
-#: ../libpurple/protocols/sametime/sametime.c:3263
-#: ../libpurple/protocols/sametime/sametime.c:4150
-#: ../libpurple/protocols/yahoo/yahoo.c:3066 ../pidgin/gtkblist.c:3070
-#: ../pidgin/gtkblist.c:3083 ../pidgin/gtkblist.c:3085
+#: ../libpurple/protocols/oscar/oscar.c:820
+#: ../libpurple/protocols/oscar/oscar.c:825
+#: ../libpurple/protocols/oscar/oscar.c:827
+#: ../libpurple/protocols/oscar/oscar.c:2670
+#: ../libpurple/protocols/oscar/oscar.c:3748
+#: ../libpurple/protocols/sametime/sametime.c:3264
+#: ../libpurple/protocols/sametime/sametime.c:4151
+#: ../libpurple/protocols/yahoo/yahoo.c:3148 ../pidgin/gtkblist.c:3082
+#: ../pidgin/gtkblist.c:3095 ../pidgin/gtkblist.c:3097
 #: ../pidgin/gtksavedstatuses.c:998 ../pidgin/gtksavedstatuses.c:1143
 msgid "Status"
 msgstr "Stav"
@@ -930,7 +933,7 @@
 #: ../finch/gntft.c:234 ../finch/gntnotify.c:181 ../finch/gntplugin.c:209
 #: ../finch/gntplugin.c:309 ../finch/gntpounce.c:727 ../finch/gntstatus.c:215
 #: ../libpurple/protocols/msn/msn.c:375 ../libpurple/protocols/silc/util.c:382
-#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2474
+#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2484
 #: ../pidgin/gtkrequest.c:272
 msgid "Close"
 msgstr "Zavrieť"
@@ -969,11 +972,11 @@
 msgid "You have mail!"
 msgstr "Máte poštu!"
 
-#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:489
+#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:495
 msgid "Sender"
 msgstr "Odosielateľ"
 
-#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:496
+#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:502
 msgid "Subject"
 msgstr "Predmet"
 
@@ -985,29 +988,29 @@
 msgstr[1] "%s (%s) má %d novú správu."
 msgstr[2] "%s (%s) má %d nové správy."
 
-#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:335
+#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:340
 msgid "New Mail"
 msgstr "Nová pošta"
 
-#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:916
+#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:923
 #, c-format
 msgid "Info for %s"
 msgstr "Podrobnosti o %s"
 
 #: ../finch/gntnotify.c:290 ../libpurple/protocols/toc/toc.c:476
-#: ../pidgin/gtknotify.c:917
+#: ../pidgin/gtknotify.c:924
 msgid "Buddy Information"
 msgstr "Podrobnosti o priateľovi"
 
-#: ../finch/gntnotify.c:376
+#: ../finch/gntnotify.c:376 ../libpurple/protocols/qq/group_join.c:367
 msgid "Continue"
 msgstr "Pokračovať"
 
-#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1627 ../pidgin/gtkdebug.c:834
+#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1630 ../pidgin/gtkdebug.c:834
 msgid "Info"
 msgstr "Podrobnosti"
 
-#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1588
+#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1591
 msgid "IM"
 msgstr "Napísať správu"
 
@@ -1015,7 +1018,7 @@
 msgid "Join"
 msgstr "Pripojiť"
 
-#: ../finch/gntnotify.c:391 ../libpurple/protocols/sametime/sametime.c:3473
+#: ../finch/gntnotify.c:391 ../libpurple/protocols/sametime/sametime.c:3474
 msgid "Invite"
 msgstr "Pozvať"
 
@@ -1074,7 +1077,7 @@
 #. Back to instant-apply! I win!  BU-HAHAHA!
 #. Create the window
 #: ../finch/gntplugin.c:370 ../finch/gntplugin.c:377 ../finch/gntprefs.c:263
-#: ../finch/gntui.c:83 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2060
+#: ../finch/gntui.c:88 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2062
 msgid "Preferences"
 msgstr "Nastavenia"
 
@@ -1187,7 +1190,7 @@
 msgid "Are you sure you want to delete the pounce on %s for %s?"
 msgstr "Ste si istý, že chcete odstrániť sledovanie na %s pre %s?"
 
-#: ../finch/gntpounce.c:685 ../finch/gntui.c:79 ../pidgin/gtkpounce.c:1339
+#: ../finch/gntpounce.c:685 ../finch/gntui.c:83 ../pidgin/gtkpounce.c:1339
 msgid "Buddy Pounces"
 msgstr "Sledovanie priateľov"
 
@@ -1249,13 +1252,13 @@
 msgid "Based on keyboard use"
 msgstr "Podľa využitia klávesnice"
 
-#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1923
+#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1925
 msgid "From last sent message"
 msgstr "Podľa naposledy odoslanej správy"
 
 #: ../finch/gntprefs.c:95 ../pidgin/gtkprefs.c:897 ../pidgin/gtkprefs.c:906
-#: ../pidgin/gtkprefs.c:1922 ../pidgin/gtkprefs.c:1936
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:337
+#: ../pidgin/gtkprefs.c:1924 ../pidgin/gtkprefs.c:1938
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:333
 msgid "Never"
 msgstr "Nikdy"
 
@@ -1304,12 +1307,12 @@
 msgstr "Zmeniť stav na:"
 
 #. Conversations
-#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2026
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:344
+#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2028
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:340
 msgid "Conversations"
 msgstr "Rozhovory"
 
-#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1462 ../pidgin/gtkprefs.c:2037
+#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1464 ../pidgin/gtkprefs.c:2039
 msgid "Logging"
 msgstr "Zaznamenávanie"
 
@@ -1317,16 +1320,167 @@
 msgid "Not implemented yet."
 msgstr "Zatiaľ nie je implementované."
 
-#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1526
-#: ../pidgin/gtkrequest.c:1572
+#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1552
+#: ../pidgin/gtkrequest.c:1598
 msgid "Save File..."
 msgstr "Uložiť súbor..."
 
-#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1527
-#: ../pidgin/gtkrequest.c:1573
+#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1553
+#: ../pidgin/gtkrequest.c:1599
 msgid "Open File..."
 msgstr "Otvoriť súbor..."
 
+#: ../finch/gntsound.c:94 ../pidgin/gtksound.c:63
+msgid "Buddy logs in"
+msgstr "Priateľ sa prihlási"
+
+#: ../finch/gntsound.c:95 ../pidgin/gtksound.c:64
+msgid "Buddy logs out"
+msgstr "Priateľ sa odhlási"
+
+#: ../finch/gntsound.c:96 ../pidgin/gtksound.c:65
+msgid "Message received"
+msgstr "Prijatie správy"
+
+#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:66
+msgid "Message received begins conversation"
+msgstr "Prijatá správa začína rozhovor"
+
+#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:67
+msgid "Message sent"
+msgstr "Odoslanie správy"
+
+#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:68
+msgid "Person enters chat"
+msgstr "Osoba vstúpi do chatu"
+
+#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:69
+msgid "Person leaves chat"
+msgstr "Osoba opustí chat"
+
+#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:70
+msgid "You talk in chat"
+msgstr "Vy hovoríte v chate"
+
+#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:71
+msgid "Others talk in chat"
+msgstr "Ostatní hovoria v chate"
+
+#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:74
+msgid "Someone says your screen name in chat"
+msgstr "Niekto v chate napíše vaše meno"
+
+#: ../finch/gntsound.c:357 ../pidgin/gtksound.c:310
+msgid "GStreamer Failure"
+msgstr "Zlyhanie rozhrania GStreamer"
+
+#: ../finch/gntsound.c:358 ../pidgin/gtksound.c:311
+msgid "GStreamer failed to initialize."
+msgstr "Nepodarilo sa inicializovať rozhranie GStreamer"
+
+#: ../finch/gntsound.c:706 ../finch/gntsound.c:792 ../pidgin/gtkprefs.c:1584
+#: ../pidgin/gtkprefs.c:1673 ../pidgin/gtkprefs.c:1867
+msgid "(default)"
+msgstr "(štandardné)"
+
+#: ../finch/gntsound.c:719
+msgid "Select Sound File ..."
+msgstr "Vyberte zvukový súbor..."
+
+#: ../finch/gntsound.c:894
+msgid "Sound Preferences"
+msgstr "Nastavenia zvuku"
+
+#: ../finch/gntsound.c:905
+msgid "Profiles"
+msgstr "Profily"
+
+#: ../finch/gntsound.c:944 ../pidgin/gtkprefs.c:1712
+msgid "Automatic"
+msgstr "Automaticky"
+
+#: ../finch/gntsound.c:947
+msgid "Console Beep"
+msgstr "Pípnutie konzoly"
+
+#: ../finch/gntsound.c:948 ../pidgin/gtkprefs.c:1716
+msgid "Command"
+msgstr "Príkaz"
+
+#: ../finch/gntsound.c:949
+msgid "No Sound"
+msgstr "Žiadne zvuky"
+
+#: ../finch/gntsound.c:951 ../pidgin/gtkprefs.c:1707
+msgid "Sound Method"
+msgstr "Spôsob prehrávania zvukov"
+
+#: ../finch/gntsound.c:956
+msgid "Method: "
+msgstr "Spôsob:"
+
+#: ../finch/gntsound.c:963
+#, c-format
+msgid ""
+"Sound Command\n"
+"(%s for filename)"
+msgstr ""
+"Príkaz zvuku:\n"
+"(%s pre názov súboru)"
+
+#. Sound options
+#: ../finch/gntsound.c:971 ../pidgin/gtkprefs.c:1751
+msgid "Sound Options"
+msgstr "Možnosti zvuku"
+
+#: ../finch/gntsound.c:972
+msgid "Sounds when conversation has focus"
+msgstr "Prehrávať zvuky, keď je okno koverzácie aktívne"
+
+#: ../finch/gntsound.c:980 ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908
+#: ../pidgin/gtkprefs.c:1758 ../pidgin/plugins/timestamp_format.c:42
+#: ../pidgin/plugins/timestamp_format.c:51
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:334
+msgid "Always"
+msgstr "Vždy"
+
+#: ../finch/gntsound.c:981 ../pidgin/gtkprefs.c:1756
+msgid "Only when available"
+msgstr "Len ak sú dostupné"
+
+#: ../finch/gntsound.c:982 ../pidgin/gtkprefs.c:1757
+msgid "Only when not available"
+msgstr "Len ak sú nedostupné"
+
+#: ../finch/gntsound.c:989
+msgid "Volume(0-100):"
+msgstr "Hlasitosť(0-100):"
+
+#. Sound events
+#: ../finch/gntsound.c:1006 ../pidgin/gtkprefs.c:1793
+msgid "Sound Events"
+msgstr "Zvukové udalosti"
+
+#: ../finch/gntsound.c:1008 ../pidgin/gtkprefs.c:1852
+msgid "Event"
+msgstr "Udalosť"
+
+#: ../finch/gntsound.c:1008
+msgid "File"
+msgstr "Súbor"
+
+#: ../finch/gntsound.c:1027 ../pidgin/gtkprefs.c:1871
+msgid "Test"
+msgstr "Ukážka"
+
+#: ../finch/gntsound.c:1030 ../pidgin/gtkprefs.c:1875
+msgid "Reset"
+msgstr "Obnoviť"
+
+#: ../finch/gntsound.c:1033 ../pidgin/gtkprefs.c:1879
+msgid "Choose..."
+msgstr "Vybrať..."
+
 #: ../finch/gntstatus.c:137
 #, c-format
 msgid "Are you sure you want to delete \"%s\""
@@ -1353,9 +1507,9 @@
 msgstr "Typ"
 
 #: ../finch/gntstatus.c:182 ../finch/gntstatus.c:560 ../finch/gntstatus.c:572
-#: ../libpurple/protocols/bonjour/bonjour.c:247
-#: ../libpurple/protocols/bonjour/bonjour.c:254
-#: ../libpurple/protocols/bonjour/bonjour.c:320
+#: ../libpurple/protocols/bonjour/bonjour.c:249
+#: ../libpurple/protocols/bonjour/bonjour.c:256
+#: ../libpurple/protocols/bonjour/bonjour.c:339
 #: ../libpurple/protocols/gg/gg.c:1072 ../libpurple/protocols/gg/gg.c:1574
 #: ../libpurple/protocols/gg/gg.c:1592 ../libpurple/protocols/gg/gg.c:1602
 #: ../libpurple/protocols/gg/gg.c:1608 ../libpurple/protocols/gg/gg.c:1617
@@ -1370,21 +1524,21 @@
 #: ../libpurple/protocols/novell/novell.c:2941
 #: ../libpurple/protocols/novell/novell.c:2947
 #: ../libpurple/protocols/novell/novell.c:2953
-#: ../libpurple/protocols/oscar/oscar.c:5533
-#: ../libpurple/protocols/oscar/oscar.c:5751
-#: ../libpurple/protocols/oscar/oscar.c:5765
-#: ../libpurple/protocols/oscar/oscar.c:5781
-#: ../libpurple/protocols/oscar/oscar.c:5788
-#: ../libpurple/protocols/oscar/oscar.c:5795
-#: ../libpurple/protocols/sametime/sametime.c:3286
-#: ../libpurple/protocols/sametime/sametime.c:3292
-#: ../libpurple/protocols/sametime/sametime.c:3298
-#: ../libpurple/protocols/sametime/sametime.c:3377
+#: ../libpurple/protocols/oscar/oscar.c:5502
+#: ../libpurple/protocols/oscar/oscar.c:5720
+#: ../libpurple/protocols/oscar/oscar.c:5734
+#: ../libpurple/protocols/oscar/oscar.c:5750
+#: ../libpurple/protocols/oscar/oscar.c:5757
+#: ../libpurple/protocols/oscar/oscar.c:5764
+#: ../libpurple/protocols/sametime/sametime.c:3287
+#: ../libpurple/protocols/sametime/sametime.c:3293
+#: ../libpurple/protocols/sametime/sametime.c:3299
+#: ../libpurple/protocols/sametime/sametime.c:3378
 #: ../libpurple/protocols/silc/buddy.c:1551
 #: ../libpurple/protocols/silc10/buddy.c:1551
 #: ../libpurple/protocols/simple/simple.c:246
-#: ../libpurple/protocols/yahoo/yahoo.c:3494
-#: ../libpurple/protocols/yahoo/yahoo.c:3500
+#: ../libpurple/protocols/yahoo/yahoo.c:3651
+#: ../libpurple/protocols/yahoo/yahoo.c:3657
 #: ../libpurple/protocols/zephyr/zephyr.c:2337
 #: ../pidgin/gtksavedstatuses.c:525 ../pidgin/gtksavedstatuses.c:1009
 msgid "Message"
@@ -1436,7 +1590,11 @@
 msgid "Save & Use"
 msgstr "Uložiť & použiť"
 
-#: ../finch/gntui.c:84
+#: ../finch/gntui.c:87 ../pidgin/gtkprefs.c:2030
+msgid "Sounds"
+msgstr "Zvuky"
+
+#: ../finch/gntui.c:89
 msgid "Statuses"
 msgstr "Stavy"
 
@@ -1453,8 +1611,7 @@
 "When the gnt clipboard contents change, the contents are made available to "
 "X, if possible."
 msgstr ""
-"Keď sa obsah gnt schránky zmení, obsah bude dostupný "
-"X, pokiaľ je to možné."
+"Keď sa obsah gnt schránky zmení, obsah bude dostupný X, pokiaľ je to možné."
 
 #: ../finch/plugins/gntgf.c:231
 #, c-format
@@ -1520,7 +1677,7 @@
 #: ../finch/plugins/gnthistory.c:116 ../pidgin/plugins/history.c:120
 #, c-format
 msgid "<b>Conversation with %s on %s:</b><br>"
-msgstr "<b>Rozhovor s %s na %s:</b><br>"
+msgstr "<b>Rozhovor s %s, %s:</b><br>"
 
 #: ../finch/plugins/gnthistory.c:138 ../pidgin/plugins/history.c:147
 msgid "History Plugin Requires Logging"
@@ -1598,7 +1755,7 @@
 msgstr "Chýba modul protokolu pre protokol %s"
 
 #: ../libpurple/account.c:1012 ../libpurple/connection.c:107
-#: ../pidgin/gtkblist.c:4010
+#: ../pidgin/gtkblist.c:4019
 msgid "Connection Error"
 msgstr "Chyba pripojenia"
 
@@ -1646,13 +1803,13 @@
 #: ../libpurple/protocols/jabber/buddy.c:1462
 #: ../libpurple/protocols/jabber/buddy.c:1479
 #: ../libpurple/protocols/novell/novell.c:2831
-#: ../libpurple/protocols/qq/qq.c:230 ../pidgin/gtkft.c:159
+#: ../libpurple/protocols/qq/qq.c:232 ../pidgin/gtkft.c:159
 msgid "Unknown"
 msgstr "Neznáma"
 
 #: ../libpurple/blist.c:521 ../libpurple/blist.c:1289
 #: ../libpurple/blist.c:1518 ../libpurple/protocols/jabber/roster.c:68
-#: ../pidgin/gtkblist.c:5310 ../pidgin/plugins/gevolution/gevolution.c:96
+#: ../pidgin/gtkblist.c:5321 ../pidgin/plugins/gevolution/gevolution.c:96
 #: ../pidgin/plugins/gevolution/gevo-util.c:64
 msgid "Buddies"
 msgstr "Priatelia"
@@ -1695,8 +1852,8 @@
 msgid "The message is too large."
 msgstr "Správa je príliš dlhá."
 
-#: ../libpurple/conversation.c:183 ../libpurple/protocols/bonjour/jabber.c:284
-#: ../libpurple/protocols/bonjour/jabber.c:326
+#: ../libpurple/conversation.c:183 ../libpurple/protocols/bonjour/jabber.c:255
+#: ../libpurple/protocols/bonjour/jabber.c:298
 msgid "Unable to send message."
 msgstr "Nepodarilo sa odoslať správu."
 
@@ -2122,15 +2279,15 @@
 msgid "Old flat format"
 msgstr "Starý priamy formát"
 
-#: ../libpurple/log.c:837
+#: ../libpurple/log.c:838
 msgid "Logging of this conversation failed."
 msgstr "Zaznamenávanie tejto konverzácie zlyhalo."
 
-#: ../libpurple/log.c:1280
+#: ../libpurple/log.c:1281
 msgid "XML"
 msgstr "XML"
 
-#: ../libpurple/log.c:1364
+#: ../libpurple/log.c:1365
 #, c-format
 msgid ""
 "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s &lt;AUTO-"
@@ -2139,7 +2296,7 @@
 "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s &lt;AUTOMATICKÁ "
 "ODPOVEĎ&gt;:</b></font> %s<br/>\n"
 
-#: ../libpurple/log.c:1366
+#: ../libpurple/log.c:1367
 #, c-format
 msgid ""
 "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s &lt;AUTO-"
@@ -2148,16 +2305,16 @@
 "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s &lt;AUTOMATICKÁ "
 "ODPOVEĎ&gt;:</b></font> %s<br/>\n"
 
-#: ../libpurple/log.c:1424 ../libpurple/log.c:1557
+#: ../libpurple/log.c:1425 ../libpurple/log.c:1558
 msgid "<font color=\"red\"><b>Unable to find log path!</b></font>"
 msgstr "<font color=\"red\"><b>Nepodarilo sa nájsť cestu k záznamu!</b></font>"
 
-#: ../libpurple/log.c:1436 ../libpurple/log.c:1566
+#: ../libpurple/log.c:1437 ../libpurple/log.c:1567
 #, c-format
 msgid "<font color=\"red\"><b>Could not read file: %s</b></font>"
 msgstr "<font color=\"red\"><b>Nepodarilo sa čítať súbor: %s</b></font>"
 
-#: ../libpurple/log.c:1498
+#: ../libpurple/log.c:1499
 #, c-format
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <AUTOMATICKÁ ODPOVEĎ>: %s\n"
@@ -2222,12 +2379,15 @@
 
 #: ../libpurple/plugins/autoaccept.c:25 ../libpurple/plugins/autoaccept.c:26
 msgid "Auto-accept file transfer requests from selected users."
-msgstr "Automaticky potvrdiť požiadavky na prenos súborov od vybraných používateľov."
+msgstr ""
+"Automaticky potvrdiť požiadavky na prenos súborov od vybraných používateľov."
 
 #: ../libpurple/plugins/autoaccept.c:80
 #, c-format
 msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed."
-msgstr "Automaticky potvrdený prenos súboru \"%s\" od používateľa \"%s\" je dokončený."
+msgstr ""
+"Automaticky potvrdený prenos súboru \"%s\" od používateľa \"%s\" je "
+"dokončený."
 
 #: ../libpurple/plugins/autoaccept.c:82
 msgid "Autoaccept complete"
@@ -2248,13 +2408,13 @@
 
 #: ../libpurple/plugins/autoaccept.c:165 ../libpurple/plugins/idle.c:170
 #: ../libpurple/plugins/idle.c:204 ../libpurple/plugins/idle.c:230
-#: ../libpurple/protocols/oscar/oscar.c:1458
-#: ../libpurple/protocols/oscar/oscar.c:2251
-#: ../libpurple/protocols/oscar/oscar.c:2298
-#: ../libpurple/protocols/oscar/oscar.c:5865
-#: ../libpurple/protocols/oscar/oscar.c:5920
-#: ../libpurple/protocols/oscar/oscar.c:6146
-#: ../libpurple/protocols/oscar/oscar.c:6216 ../libpurple/request.h:1387
+#: ../libpurple/protocols/oscar/oscar.c:1451
+#: ../libpurple/protocols/oscar/oscar.c:2243
+#: ../libpurple/protocols/oscar/oscar.c:2292
+#: ../libpurple/protocols/oscar/oscar.c:5834
+#: ../libpurple/protocols/oscar/oscar.c:5889
+#: ../libpurple/protocols/oscar/oscar.c:6115
+#: ../libpurple/protocols/oscar/oscar.c:6185 ../libpurple/request.h:1387
 #: ../libpurple/request.h:1397
 msgid "_Cancel"
 msgstr "_Zrušiť"
@@ -2293,7 +2453,8 @@
 "Notify with a popup when an autoaccepted file transfer is complete\n"
 "(only when there's no conversation with the sender)"
 msgstr ""
-"Upozorniť vyskakovacím oknom, keď je dokončený automaticky potvrdený prenos súboru\n"
+"Upozorniť vyskakovacím oknom, keď je dokončený automaticky potvrdený prenos "
+"súboru\n"
 "(len ak neexistuje konverzácia s odosielateľom)"
 
 #: ../libpurple/plugins/buddynote.c:46 ../libpurple/protocols/msn/msn.c:1629
@@ -2317,20 +2478,21 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../libpurple/plugins/buddynote.c:90
+#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:71
 msgid "Buddy Notes"
 msgstr "Poznámky o priateľovi"
 
 #. *< name
 #. *< version
-#: ../libpurple/plugins/buddynote.c:92
+#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:73
 msgid "Store notes on particular buddies."
 msgstr "Ukladať poznámky do samotných priateľov."
 
 #. *< summary
-#: ../libpurple/plugins/buddynote.c:93
+#: ../libpurple/plugins/buddynote.c:93 ../pidgin/plugins/gtkbuddynote.c:74
 msgid "Adds the option to store notes for buddies on your buddy list."
-msgstr "Pridáva možnosť ukladania poznámok o priateľoch vo vašom zozname priateľov."
+msgstr ""
+"Pridáva možnosť ukladania poznámok o priateľoch vo vašom zozname priateľov."
 
 #. *< type
 #. *< ui_requirement
@@ -2480,7 +2642,7 @@
 
 #: ../libpurple/plugins/joinpart.c:229
 msgid "Join/Part Hiding Configuration"
-msgstr ""
+msgstr "Nastavenie skrývania prihlasovacích a odhlasovacích správ"
 
 #: ../libpurple/plugins/joinpart.c:233
 msgid "Minimum Room Size"
@@ -2498,14 +2660,14 @@
 #. *< id
 #: ../libpurple/plugins/joinpart.c:270
 msgid "Join/Part Hiding"
-msgstr ""
+msgstr "Skrývať prihlásenie a odhlásenie"
 
 #. *< name
 #. *< version
 #. *  summary
 #: ../libpurple/plugins/joinpart.c:273
 msgid "Hides extraneous join/part messages."
-msgstr ""
+msgstr "Skryť časté správy o prihlásení a odhlásení"
 
 #. *  description
 #: ../libpurple/plugins/joinpart.c:275
@@ -2513,39 +2675,42 @@
 "This plugin hides join/part messages in large rooms, except for those users "
 "actively taking part in a conversation."
 msgstr ""
+"Tento modul skryje oznamy o prihlasovaní a odhlasovaní používateľov vo "
+"veľkých diskusných miestnostiach, okrem používateľov, ktorí sa aktívne "
+"zúčastňujú rozhovoru."
 
 #. This is used in the place of a timezone abbreviation if the
 #. * offset is way off.  The user should never really see it, but
 #. * it's here just in case.  The parens are to make it clear it's
 #. * not a real timezone.
-#: ../libpurple/plugins/log_reader.c:492
+#: ../libpurple/plugins/log_reader.c:493
 msgid "(UTC)"
 msgstr "(UTC)"
 
-#: ../libpurple/plugins/log_reader.c:1573
+#: ../libpurple/plugins/log_reader.c:1577
 msgid "User is offline."
 msgstr "Používateľ je odpojený."
 
-#: ../libpurple/plugins/log_reader.c:1579
+#: ../libpurple/plugins/log_reader.c:1583
 msgid "Auto-response sent:"
 msgstr "Odoslaná automatická odpoveď:"
 
-#: ../libpurple/plugins/log_reader.c:1589
-#: ../libpurple/plugins/log_reader.c:1592
+#: ../libpurple/plugins/log_reader.c:1593
+#: ../libpurple/plugins/log_reader.c:1596
 #: ../libpurple/plugins/statenotify.c:80
 #, c-format
 msgid "%s has signed off."
 msgstr "Používateľ %s sa odhlásil."
 
-#: ../libpurple/plugins/log_reader.c:1606
+#: ../libpurple/plugins/log_reader.c:1610
 msgid "One or more messages may have been undeliverable."
 msgstr "Jedna alebo viac správ možno nebolo doručených."
 
-#: ../libpurple/plugins/log_reader.c:1616
+#: ../libpurple/plugins/log_reader.c:1620
 msgid "You were disconnected from the server."
 msgstr "Boli ste odpojený zo servra."
 
-#: ../libpurple/plugins/log_reader.c:1624
+#: ../libpurple/plugins/log_reader.c:1628
 msgid ""
 "You are currently disconnected. Messages will not be received unless you are "
 "logged in."
@@ -2553,77 +2718,77 @@
 "Momentálne ste odpojený. Až dokým sa neprihlásite vám nebudú doručované "
 "správy."
 
-#: ../libpurple/plugins/log_reader.c:1639
+#: ../libpurple/plugins/log_reader.c:1643
 msgid "Message could not be sent because the maximum length was exceeded."
 msgstr "Správa sa neodoslala, pretože bola prekročená maximálna dĺžka."
 
-#: ../libpurple/plugins/log_reader.c:1644
+#: ../libpurple/plugins/log_reader.c:1648
 msgid "Message could not be sent."
 msgstr "Vašu správu nebolo možné odoslať."
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2344
-#: ../libpurple/plugins/log_reader.c:2467
+#: ../libpurple/plugins/log_reader.c:2349
+#: ../libpurple/plugins/log_reader.c:2472
 msgid "Adium"
 msgstr "Adium"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2357
-#: ../libpurple/plugins/log_reader.c:2472
+#: ../libpurple/plugins/log_reader.c:2362
+#: ../libpurple/plugins/log_reader.c:2477
 msgid "Fire"
 msgstr "Fire"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2369
-#: ../libpurple/plugins/log_reader.c:2476
+#: ../libpurple/plugins/log_reader.c:2374
+#: ../libpurple/plugins/log_reader.c:2481
 msgid "Messenger Plus!"
 msgstr "Messenger Plus!"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2383
-#: ../libpurple/plugins/log_reader.c:2481
+#: ../libpurple/plugins/log_reader.c:2388
+#: ../libpurple/plugins/log_reader.c:2486
 msgid "QIP"
 msgstr "QIP"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2395
-#: ../libpurple/plugins/log_reader.c:2485
+#: ../libpurple/plugins/log_reader.c:2400
+#: ../libpurple/plugins/log_reader.c:2490
 msgid "MSN Messenger"
 msgstr "MSN Messenger"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
-#: ../libpurple/plugins/log_reader.c:2407
-#: ../libpurple/plugins/log_reader.c:2489
+#: ../libpurple/plugins/log_reader.c:2412
+#: ../libpurple/plugins/log_reader.c:2494
 msgid "Trillian"
 msgstr "Trillian"
 
 #. Add general preferences.
-#: ../libpurple/plugins/log_reader.c:2449
+#: ../libpurple/plugins/log_reader.c:2454
 msgid "General Log Reading Configuration"
 msgstr "Všeobecné nastavenie čítania záznamov"
 
-#: ../libpurple/plugins/log_reader.c:2453
+#: ../libpurple/plugins/log_reader.c:2458
 msgid "Fast size calculations"
 msgstr "Rýchle výpočty veľkosti"
 
-#: ../libpurple/plugins/log_reader.c:2457
+#: ../libpurple/plugins/log_reader.c:2462
 msgid "Use name heuristics"
 msgstr "Použiť heurestiku pre názvy"
 
 #. Add Log Directory preferences.
-#: ../libpurple/plugins/log_reader.c:2463
+#: ../libpurple/plugins/log_reader.c:2468
 msgid "Log Directory"
 msgstr "Priečinok záznamov"
 
@@ -2633,19 +2798,19 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../libpurple/plugins/log_reader.c:2518
+#: ../libpurple/plugins/log_reader.c:2523
 msgid "Log Reader"
 msgstr "Zobrazovač záznamov"
 
 #. *< name
 #. *< version
 #. * summary
-#: ../libpurple/plugins/log_reader.c:2522
+#: ../libpurple/plugins/log_reader.c:2527
 msgid "Includes other IM clients' logs in the log viewer."
 msgstr "V prehliadači záznamov prehliadať aj záznamy ostatných IM klientov."
 
 #. * description
-#: ../libpurple/plugins/log_reader.c:2526
+#: ../libpurple/plugins/log_reader.c:2531
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
 "Currently, this includes Adium, MSN Messenger, and Trillian.\n"
@@ -2693,21 +2858,22 @@
 msgid ""
 "Prepends a newline to messages so that the rest of the message appears below "
 "the screen name in the conversation window."
-msgstr ""
+msgstr "Pridáva entery pred správy, čo spôsobí že správy sa zobrazujú pod používateľským menom priateľa"
 
 #: ../libpurple/plugins/offlinemsg.c:23
 msgid "Offline Message Emulation"
-msgstr ""
+msgstr "Emulácia offline správ"
 
 #: ../libpurple/plugins/offlinemsg.c:25 ../libpurple/plugins/offlinemsg.c:26
 msgid "Save messages sent to an offline user as pounce."
-msgstr ""
+msgstr "Ukladať správy ktoré boli odoslané odhláseným používateľom ako výzvu."
 
 #: ../libpurple/plugins/offlinemsg.c:95
 msgid ""
 "The rest of the messages will be saved as pounce. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
+"Zostatok správ bude uložený ako sledovanie. Sledovanie môžete pridať/odstrániť v dialógu `Sledovanie priateľov'."
 
 #: ../libpurple/plugins/offlinemsg.c:152
 #, c-format
@@ -2715,6 +2881,8 @@
 "\"%s\" is currently offline. Do you want to save the rest of the messages in "
 "a pounce and automatically send them when \"%s\" logs back in?"
 msgstr ""
+"Používateľ \"%s\" je momentálne odhlásený. Chcete uložiť zvyšok správ do sledovania, a "
+"automaticky ich odoslať hneď, keď sa \"%s\" prihlási?"
 
 #: ../libpurple/plugins/offlinemsg.c:156
 msgid "Offline Message"
@@ -2722,7 +2890,7 @@
 
 #: ../libpurple/plugins/offlinemsg.c:157
 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog"
-msgstr ""
+msgstr "Sledovanie môžete pridať/odstrániť v dialógu `Sledovanie priateľov'"
 
 #: ../libpurple/plugins/offlinemsg.c:161
 #: ../libpurple/protocols/msn/dialog.c:133
@@ -2787,8 +2955,8 @@
 "This works for AIM, ICQ, XMPP, Sametime, and Yahoo!"
 msgstr ""
 "Spôsobí, že okná konverzácie sa objavia v momente, keď vám ostatní "
-"používatelia začnú písať správu.  "
-"Funguje na AIM, ICQ, XMPP, Sametime, and Yahoo!"
+"používatelia začnú písať správu.  Funguje na AIM, ICQ, XMPP, Sametime, and "
+"Yahoo!"
 
 #: ../libpurple/plugins/psychic.c:72
 msgid "You feel a disturbance in the force..."
@@ -2816,7 +2984,7 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../libpurple/plugins/signals-test.c:684
+#: ../libpurple/plugins/signals-test.c:711
 msgid "Signals Test"
 msgstr "Test signálov"
 
@@ -2824,8 +2992,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../libpurple/plugins/signals-test.c:687
-#: ../libpurple/plugins/signals-test.c:689
+#: ../libpurple/plugins/signals-test.c:714
+#: ../libpurple/plugins/signals-test.c:716
 msgid "Test to see that all signals are working properly."
 msgstr "Test, ktorý zisťuje, či všetky signály fungujú správne."
 
@@ -2993,25 +3161,43 @@
 "Unable to establish connection with the local mDNS server.  Is it running?"
 msgstr "Nepodarilo sa založiť spojenie s miestnym mDNS serverom.  Je spustený?"
 
-#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
-#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
-#. Away stuff
-#: ../libpurple/protocols/bonjour/bonjour.c:294
-#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530
-#: ../libpurple/protocols/irc/msgs.c:310
-#: ../libpurple/protocols/jabber/buddy.c:1472
-#: ../libpurple/protocols/novell/novell.c:2819
-#: ../libpurple/protocols/oscar/oscar.c:733
-#: ../libpurple/protocols/oscar/oscar.c:4545
-#: ../libpurple/protocols/oscar/oscar.c:5611
-#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/silc/buddy.c:1476
-#: ../libpurple/protocols/silc10/buddy.c:1476
-#: ../libpurple/protocols/yahoo/yahoo.c:3397
-#: ../libpurple/protocols/yahoo/yahoo.c:3470 ../libpurple/status.c:157
-#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1932
-#: ../pidgin/gtkstatusbox.c:1056
-msgid "Away"
-msgstr "Neprítomný"
+#. Creating the options for the protocol
+#: ../libpurple/protocols/bonjour/bonjour.c:344
+#: ../libpurple/protocols/bonjour/bonjour.c:614
+#: ../libpurple/protocols/gg/gg.c:627
+#: ../libpurple/protocols/jabber/jabber.c:828
+msgid "First name"
+msgstr "Krstné meno"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:346
+#: ../libpurple/protocols/bonjour/bonjour.c:617
+#: ../libpurple/protocols/gg/gg.c:622
+#: ../libpurple/protocols/jabber/jabber.c:833
+msgid "Last name"
+msgstr "Priezvisko"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:350
+#: ../libpurple/protocols/jabber/buddy.c:283
+#: ../libpurple/protocols/jabber/buddy.c:940
+#: ../libpurple/protocols/jabber/buddy.c:948
+#: ../libpurple/protocols/jabber/buddy.c:1629
+#: ../libpurple/protocols/silc/ops.c:1041
+#: ../libpurple/protocols/silc/util.c:555
+#: ../libpurple/protocols/silc10/ops.c:1075
+#: ../libpurple/protocols/silc10/util.c:551
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1061
+msgid "E-Mail"
+msgstr "E-mail"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:353
+#: ../libpurple/protocols/bonjour/bonjour.c:623
+msgid "AIM Account"
+msgstr "AIM účet"
+
+#: ../libpurple/protocols/bonjour/bonjour.c:356
+#: ../libpurple/protocols/bonjour/bonjour.c:626
+msgid "XMPP Account"
+msgstr "XMPP účet"
 
 #. *< type
 #. *< ui_requirement
@@ -3023,38 +3209,25 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../libpurple/protocols/bonjour/bonjour.c:425
-#: ../libpurple/protocols/bonjour/bonjour.c:427
+#: ../libpurple/protocols/bonjour/bonjour.c:460
+#: ../libpurple/protocols/bonjour/bonjour.c:462
 msgid "Bonjour Protocol Plugin"
 msgstr "Modul protokolu Bonjour"
 
-#: ../libpurple/protocols/bonjour/bonjour.c:470
-#: ../libpurple/protocols/bonjour/bonjour.c:477
-#: ../libpurple/protocols/bonjour/bonjour.c:535
+#: ../libpurple/protocols/bonjour/bonjour.c:505
+#: ../libpurple/protocols/bonjour/bonjour.c:512
+#: ../libpurple/protocols/bonjour/bonjour.c:561
 msgid "Purple Person"
 msgstr "Purple Osoba"
 
 #. Creating the user splits
-#: ../libpurple/protocols/bonjour/bonjour.c:583
+#: ../libpurple/protocols/bonjour/bonjour.c:610
 #: ../libpurple/protocols/silc/silc.c:1007
 #: ../libpurple/protocols/silc10/silc.c:918
 msgid "Hostname"
 msgstr "Názov hostiteľa"
 
-#. Creating the options for the protocol
-#: ../libpurple/protocols/bonjour/bonjour.c:587
-#: ../libpurple/protocols/gg/gg.c:627
-#: ../libpurple/protocols/jabber/jabber.c:828
-msgid "First name"
-msgstr "Krstné meno"
-
-#: ../libpurple/protocols/bonjour/bonjour.c:590
-#: ../libpurple/protocols/gg/gg.c:622
-#: ../libpurple/protocols/jabber/jabber.c:833
-msgid "Last name"
-msgstr "Priezvisko"
-
-#: ../libpurple/protocols/bonjour/bonjour.c:593
+#: ../libpurple/protocols/bonjour/bonjour.c:620
 #: ../libpurple/protocols/gg/gg.c:472
 #: ../libpurple/protocols/jabber/jabber.c:818
 #: ../libpurple/protocols/silc/silc.c:770
@@ -3064,42 +3237,34 @@
 msgid "E-mail"
 msgstr "E-mail"
 
-#: ../libpurple/protocols/bonjour/bonjour.c:596
-msgid "AIM Account"
-msgstr "AIM účet"
-
-#: ../libpurple/protocols/bonjour/bonjour.c:599
-msgid "XMPP Account"
-msgstr "XMPP účet"
-
 #: ../libpurple/protocols/bonjour/bonjour.h:33
 msgid "Bonjour"
 msgstr "Bonjour"
 
-#: ../libpurple/protocols/bonjour/jabber.c:395
+#: ../libpurple/protocols/bonjour/jabber.c:383
 #, c-format
 msgid "%s has closed the conversation."
 msgstr "Používateľ %s uzavrel rozhovor."
 
-#: ../libpurple/protocols/bonjour/jabber.c:441
-#: ../libpurple/protocols/bonjour/jabber.c:654
-#: ../libpurple/protocols/bonjour/jabber.c:679
+#: ../libpurple/protocols/bonjour/jabber.c:435
+#: ../libpurple/protocols/bonjour/jabber.c:658
+#: ../libpurple/protocols/bonjour/jabber.c:676
 msgid "Unable to send the message, the conversation couldn't be started."
 msgstr "Nepodarilo sa odoslať správu, rozvor sa nezačal."
 
-#: ../libpurple/protocols/bonjour/jabber.c:575
+#: ../libpurple/protocols/bonjour/jabber.c:581
 msgid "Cannot open socket"
 msgstr "Nepodarilo sa otvoriť socket"
 
-#: ../libpurple/protocols/bonjour/jabber.c:583
+#: ../libpurple/protocols/bonjour/jabber.c:589
 msgid "Error setting socket options"
 msgstr "Chyba pri nastavovaní socketu"
 
-#: ../libpurple/protocols/bonjour/jabber.c:607
+#: ../libpurple/protocols/bonjour/jabber.c:613
 msgid "Could not bind socket to port"
 msgstr "Nepodarilo sa zviazať socket na port"
 
-#: ../libpurple/protocols/bonjour/jabber.c:615
+#: ../libpurple/protocols/bonjour/jabber.c:621
 msgid "Could not listen on socket"
 msgstr "Nepodarilo sa spustiť čakanie na sockete"
 
@@ -3204,8 +3369,8 @@
 #: ../libpurple/protocols/gg/gg.c:637 ../libpurple/protocols/gg/gg.c:1049
 #: ../libpurple/protocols/gg/gg.c:1121
 #: ../libpurple/protocols/jabber/jabber.c:843
-#: ../libpurple/protocols/oscar/oscar.c:3803
-#: ../libpurple/protocols/oscar/oscar.c:3816
+#: ../libpurple/protocols/oscar/oscar.c:3757
+#: ../libpurple/protocols/oscar/oscar.c:3770
 #: ../libpurple/protocols/qq/buddy_info.c:49
 msgid "City"
 msgstr "Mesto"
@@ -3215,11 +3380,11 @@
 msgstr "Rok narodenia"
 
 #: ../libpurple/protocols/gg/gg.c:645 ../libpurple/protocols/msn/msn.c:1558
-#: ../libpurple/protocols/oscar/oscar.c:3746
+#: ../libpurple/protocols/oscar/oscar.c:3700
 #: ../libpurple/protocols/qq/buddy_info.c:46
-#: ../libpurple/protocols/qq/qq.c:224 ../libpurple/protocols/qq/qq.c:227
-#: ../libpurple/protocols/qq/qq.c:230 ../libpurple/protocols/qq/qq.c:234
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1067
+#: ../libpurple/protocols/qq/qq.c:226 ../libpurple/protocols/qq/qq.c:229
+#: ../libpurple/protocols/qq/qq.c:232 ../libpurple/protocols/qq/qq.c:236
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1091
 msgid "Gender"
 msgstr "Pohlavie"
 
@@ -3228,16 +3393,16 @@
 msgstr "Muž alebo žena"
 
 #: ../libpurple/protocols/gg/gg.c:647
-#: ../libpurple/protocols/oscar/oscar.c:3746
+#: ../libpurple/protocols/oscar/oscar.c:3700
 #: ../libpurple/protocols/qq/buddy_info.c:83
-#: ../libpurple/protocols/qq/qq.c:224
+#: ../libpurple/protocols/qq/qq.c:226
 msgid "Male"
 msgstr "Muž"
 
 #: ../libpurple/protocols/gg/gg.c:648
-#: ../libpurple/protocols/oscar/oscar.c:3746
+#: ../libpurple/protocols/oscar/oscar.c:3700
 #: ../libpurple/protocols/qq/buddy_info.c:84
-#: ../libpurple/protocols/qq/qq.c:227
+#: ../libpurple/protocols/qq/qq.c:229
 msgid "Female"
 msgstr "Žena"
 
@@ -3297,12 +3462,13 @@
 #: ../libpurple/protocols/gg/gg.c:1003
 #: ../libpurple/protocols/jabber/buddy.c:1466
 #: ../libpurple/protocols/novell/novell.c:2828
-#: ../libpurple/protocols/oscar/oscar.c:828
-#: ../libpurple/protocols/oscar/oscar.c:5583
+#: ../libpurple/protocols/oscar/oscar.c:827
+#: ../libpurple/protocols/oscar/oscar.c:5552
 #: ../libpurple/protocols/qq/qq.c:170 ../libpurple/protocols/qq/qq.c:177
-#: ../libpurple/protocols/yahoo/yahoo.c:2917 ../libpurple/status.c:153
-#: ../pidgin/gtkblist.c:3070 ../pidgin/gtkblist.c:3411
-#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1059
+#: ../libpurple/protocols/qq/qq.c:292
+#: ../libpurple/protocols/yahoo/yahoo.c:2999 ../libpurple/status.c:153
+#: ../pidgin/gtkblist.c:3082 ../pidgin/gtkblist.c:3419
+#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1060
 msgid "Offline"
 msgstr "Odpojený"
 
@@ -3311,21 +3477,42 @@
 #: ../libpurple/protocols/msn/state.c:29 ../libpurple/protocols/msn/state.c:30
 #: ../libpurple/protocols/msn/state.c:37 ../libpurple/protocols/msn/state.c:38
 #: ../libpurple/protocols/novell/novell.c:2816
-#: ../libpurple/protocols/yahoo/yahoo.c:2919 ../libpurple/status.c:154
-#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1055
+#: ../libpurple/protocols/qq/qq.c:280
+#: ../libpurple/protocols/yahoo/yahoo.c:3001 ../libpurple/status.c:154
+#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1056
 msgid "Available"
 msgstr "Pripojený"
 
+#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
+#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
+#. Away stuff
+#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530
+#: ../libpurple/protocols/irc/msgs.c:310
+#: ../libpurple/protocols/jabber/buddy.c:1472
+#: ../libpurple/protocols/novell/novell.c:2819
+#: ../libpurple/protocols/oscar/oscar.c:732
+#: ../libpurple/protocols/oscar/oscar.c:4504
+#: ../libpurple/protocols/oscar/oscar.c:5580
+#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/qq/qq.c:284
+#: ../libpurple/protocols/silc/buddy.c:1476
+#: ../libpurple/protocols/silc10/buddy.c:1476
+#: ../libpurple/protocols/yahoo/yahoo.c:3553
+#: ../libpurple/protocols/yahoo/yahoo.c:3627 ../libpurple/status.c:157
+#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1934
+#: ../pidgin/gtkstatusbox.c:1057
+msgid "Away"
+msgstr "Neprítomný"
+
 #: ../libpurple/protocols/gg/gg.c:1038 ../libpurple/protocols/gg/gg.c:1112
-#: ../libpurple/protocols/oscar/oscar.c:2675
-#: ../libpurple/protocols/oscar/oscar.c:3713
+#: ../libpurple/protocols/oscar/oscar.c:2669
+#: ../libpurple/protocols/oscar/oscar.c:3667
 msgid "UIN"
 msgstr "UIN"
 
 #: ../libpurple/protocols/gg/gg.c:1041 ../libpurple/protocols/gg/gg.c:1115
 #: ../libpurple/protocols/jabber/buddy.c:1623
 #: ../libpurple/protocols/jabber/buddy.c:1799
-#: ../libpurple/protocols/oscar/oscar.c:3724
+#: ../libpurple/protocols/oscar/oscar.c:3678
 #: ../libpurple/protocols/silc/ops.c:990
 #: ../libpurple/protocols/silc10/ops.c:1024
 msgid "First Name"
@@ -3336,7 +3523,7 @@
 msgstr "Rok narodenia"
 
 #: ../libpurple/protocols/gg/gg.c:1106 ../libpurple/protocols/gg/gg.c:1175
-#: ../libpurple/protocols/oscar/oscar.c:3925
+#: ../libpurple/protocols/oscar/oscar.c:3879
 msgid "Unable to display the search results."
 msgstr "Nebolo možné zobraziť výsledky vyhľadávania."
 
@@ -3544,11 +3731,11 @@
 #: ../libpurple/protocols/jabber/jabber.c:1046
 #: ../libpurple/protocols/msn/session.c:345
 #: ../libpurple/protocols/novell/novell.c:2182
-#: ../libpurple/protocols/oscar/oscar.c:1288
+#: ../libpurple/protocols/oscar/oscar.c:1285
 #: ../libpurple/protocols/qq/qq.c:136
-#: ../libpurple/protocols/sametime/sametime.c:3723
-#: ../libpurple/protocols/simple/simple.c:1671
-#: ../libpurple/protocols/yahoo/yahoo.c:2762
+#: ../libpurple/protocols/sametime/sametime.c:3724
+#: ../libpurple/protocols/simple/simple.c:1676
+#: ../libpurple/protocols/yahoo/yahoo.c:2844
 #: ../libpurple/protocols/zephyr/zephyr.c:1621 ../pidgin/gtkstatusbox.c:661
 msgid "Connecting"
 msgstr "Pripája sa"
@@ -3561,12 +3748,12 @@
 
 #: ../libpurple/protocols/irc/irc.c:338
 #: ../libpurple/protocols/simple/simple.c:464
-#: ../libpurple/protocols/simple/simple.c:1586
+#: ../libpurple/protocols/simple/simple.c:1591
 msgid "Couldn't create socket"
 msgstr "Nepodarilo sa vytvoriť soket"
 
 #: ../libpurple/protocols/irc/irc.c:416
-#: ../libpurple/protocols/oscar/oscar.c:1284
+#: ../libpurple/protocols/oscar/oscar.c:1281
 msgid "Couldn't connect to host"
 msgstr "Nepodarilo sa pripojiť ku hostiteľovi"
 
@@ -3592,7 +3779,7 @@
 msgstr "Užívatelia"
 
 #: ../libpurple/protocols/irc/irc.c:778
-#: ../libpurple/protocols/sametime/sametime.c:3374
+#: ../libpurple/protocols/sametime/sametime.c:3375
 #: ../libpurple/protocols/silc/chat.c:1415
 #: ../libpurple/protocols/silc/ops.c:1389
 #: ../libpurple/protocols/silc10/chat.c:1429
@@ -3621,23 +3808,23 @@
 #. host to connect to
 #: ../libpurple/protocols/irc/irc.c:942 ../libpurple/protocols/irc/msgs.c:323
 #: ../libpurple/protocols/msn/msn.c:2154
-#: ../libpurple/protocols/oscar/oscar.c:6650
-#: ../libpurple/protocols/qq/qq.c:756
-#: ../libpurple/protocols/sametime/sametime.c:5727
+#: ../libpurple/protocols/oscar/oscar.c:6619
+#: ../libpurple/protocols/qq/qq.c:755
+#: ../libpurple/protocols/sametime/sametime.c:5728
 #: ../libpurple/protocols/silc/ops.c:1249
 #: ../libpurple/protocols/silc/ops.c:1341
 #: ../libpurple/protocols/silc10/ops.c:1244
 #: ../libpurple/protocols/silc10/ops.c:1347
-#: ../libpurple/protocols/simple/simple.c:1850
+#: ../libpurple/protocols/simple/simple.c:1855
 #: ../libpurple/protocols/toc/toc.c:2327
 msgid "Server"
 msgstr "Server"
 
 #. port to connect to
 #: ../libpurple/protocols/irc/irc.c:945 ../libpurple/protocols/msn/msn.c:2159
-#: ../libpurple/protocols/oscar/oscar.c:6653
-#: ../libpurple/protocols/qq/qq.c:759
-#: ../libpurple/protocols/sametime/sametime.c:5732
+#: ../libpurple/protocols/oscar/oscar.c:6622
+#: ../libpurple/protocols/qq/qq.c:758
+#: ../libpurple/protocols/sametime/sametime.c:5733
 #: ../libpurple/protocols/silc/silc.c:1918
 #: ../libpurple/protocols/silc10/silc.c:1861
 #: ../libpurple/protocols/toc/toc.c:2331
@@ -3663,7 +3850,7 @@
 #: ../libpurple/protocols/silc10/ops.c:1343
 #: ../libpurple/protocols/silc10/silc.c:916
 msgid "Username"
-msgstr "Používateľské meno"
+msgstr "Prihlasovacie meno"
 
 #: ../libpurple/protocols/irc/irc.c:954 ../libpurple/protocols/irc/msgs.c:317
 #: ../libpurple/protocols/silc/silc.c:1009
@@ -3706,7 +3893,7 @@
 msgstr " <i>(identifikovaný)</i>"
 
 #: ../libpurple/protocols/irc/msgs.c:303
-#: ../libpurple/protocols/oscar/oscar.c:3714
+#: ../libpurple/protocols/oscar/oscar.c:3668
 #: ../libpurple/protocols/silc/ops.c:1418
 #: ../libpurple/protocols/silc10/ops.c:1414
 msgid "Nick"
@@ -3989,7 +4176,7 @@
 "names [kanál]:  Zobrazí názvy používateľov nachádzajúcich sa na kanáli."
 
 #: ../libpurple/protocols/irc/parse.c:137
-#: ../libpurple/protocols/jabber/jabber.c:1813
+#: ../libpurple/protocols/jabber/jabber.c:1830
 msgid "nick &lt;new nickname&gt;:  Change your nickname."
 msgstr "nick &lt;nová prezývka&gt;:  Zmení vašu prezývku."
 
@@ -4096,7 +4283,8 @@
 
 #: ../libpurple/protocols/irc/parse.c:155
 msgid "whowas &lt;nick&gt;: Get information on a user that has logged off."
-msgstr "whowas &lt;nick&gt;: Zobrazí informácie o používateľovi, ktorý sa odhlásil."
+msgstr ""
+"whowas &lt;nick&gt;: Zobrazí informácie o používateľovi, ktorý sa odhlásil."
 
 #: ../libpurple/protocols/irc/parse.c:465
 #, c-format
@@ -4183,7 +4371,7 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:271
 #: ../libpurple/protocols/jabber/buddy.c:825
-#: ../libpurple/protocols/sametime/sametime.c:4128
+#: ../libpurple/protocols/sametime/sametime.c:4129
 #: ../libpurple/protocols/silc/ops.c:986
 #: ../libpurple/protocols/silc10/ops.c:1020
 msgid "Full Name"
@@ -4244,18 +4432,6 @@
 msgid "Telephone"
 msgstr "Telefón"
 
-#: ../libpurple/protocols/jabber/buddy.c:283
-#: ../libpurple/protocols/jabber/buddy.c:940
-#: ../libpurple/protocols/jabber/buddy.c:948
-#: ../libpurple/protocols/jabber/buddy.c:1629
-#: ../libpurple/protocols/silc/ops.c:1041
-#: ../libpurple/protocols/silc/util.c:555
-#: ../libpurple/protocols/silc10/ops.c:1075
-#: ../libpurple/protocols/silc10/util.c:551
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1037
-msgid "E-Mail"
-msgstr "E-mail"
-
 #: ../libpurple/protocols/jabber/buddy.c:284
 #: ../libpurple/protocols/jabber/buddy.c:963
 msgid "Organization Name"
@@ -4274,13 +4450,13 @@
 #: ../libpurple/protocols/jabber/buddy.c:288
 #: ../libpurple/protocols/jabber/buddy.c:859
 #: ../libpurple/protocols/msn/msn.c:1627
-#: ../libpurple/protocols/oscar/oscar.c:3763
+#: ../libpurple/protocols/oscar/oscar.c:3717
 msgid "Birthday"
 msgstr "Narodeniny"
 
 #: ../libpurple/protocols/jabber/buddy.c:289
 #: ../libpurple/protocols/jabber/buddy.c:979
-#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3081
+#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3093
 #: ../pidgin/gtkprefs.c:738
 msgid "Description"
 msgstr "Popis"
@@ -4331,8 +4507,8 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:879
 #: ../libpurple/protocols/jabber/jabber.c:838
-#: ../libpurple/protocols/oscar/oscar.c:3802
-#: ../libpurple/protocols/oscar/oscar.c:3815
+#: ../libpurple/protocols/oscar/oscar.c:3756
+#: ../libpurple/protocols/oscar/oscar.c:3769
 #: ../libpurple/protocols/qq/buddy_info.c:56
 #: ../libpurple/protocols/silc/ops.c:1030
 #: ../libpurple/protocols/silc10/ops.c:1064
@@ -4386,9 +4562,9 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:1476
 #: ../libpurple/protocols/jabber/jabber.c:1282
-#: ../libpurple/protocols/oscar/oscar.c:727
-#: ../libpurple/protocols/oscar/oscar.c:5787
-#: ../libpurple/protocols/sametime/sametime.c:3297
+#: ../libpurple/protocols/oscar/oscar.c:726
+#: ../libpurple/protocols/oscar/oscar.c:5756
+#: ../libpurple/protocols/sametime/sametime.c:3298
 msgid "Do Not Disturb"
 msgstr "Nerušiť"
 
@@ -4398,7 +4574,7 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:1625
 #: ../libpurple/protocols/jabber/buddy.c:1804
-#: ../libpurple/protocols/oscar/oscar.c:3725
+#: ../libpurple/protocols/oscar/oscar.c:3679
 msgid "Last Name"
 msgstr "Priezvisko"
 
@@ -4432,12 +4608,13 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:1794
 msgid "Fill in one or more fields to search for any matching XMPP users."
-msgstr "Vyplňte jedno alebo viac políčok na hľadanie vyhovujúcich XMPP používateľov."
+msgstr ""
+"Vyplňte jedno alebo viac políčok na hľadanie vyhovujúcich XMPP používateľov."
 
 #: ../libpurple/protocols/jabber/buddy.c:1814
 #: ../libpurple/protocols/novell/novell.c:1488
-#: ../libpurple/protocols/oscar/oscar.c:3728
-#: ../libpurple/protocols/oscar/oscar.c:3737
+#: ../libpurple/protocols/oscar/oscar.c:3682
+#: ../libpurple/protocols/oscar/oscar.c:3691
 msgid "E-Mail Address"
 msgstr "E-mailová adresa"
 
@@ -4450,10 +4627,10 @@
 #: ../libpurple/protocols/jabber/buddy.c:1825
 #: ../libpurple/protocols/qq/group.c:123
 #: ../libpurple/protocols/qq/group_im.c:147
-#: ../libpurple/protocols/qq/sys_msg.c:176
-#: ../libpurple/protocols/qq/sys_msg.c:253
-#: ../libpurple/protocols/qq/sys_msg.c:271
-#: ../libpurple/protocols/sametime/sametime.c:5611
+#: ../libpurple/protocols/qq/sys_msg.c:174
+#: ../libpurple/protocols/qq/sys_msg.c:250
+#: ../libpurple/protocols/qq/sys_msg.c:268
+#: ../libpurple/protocols/sametime/sametime.c:5612
 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:470
 #: ../pidgin/plugins/gevolution/assoc-buddy.c:356
 msgid "Search"
@@ -4476,7 +4653,7 @@
 msgstr "Prehľadávať priečinok"
 
 #: ../libpurple/protocols/jabber/chat.c:41
-#: ../libpurple/protocols/oscar/oscar.c:5273
+#: ../libpurple/protocols/oscar/oscar.c:5242
 #: ../libpurple/protocols/yahoo/yahoochat.c:962
 msgid "_Room:"
 msgstr "Miestnosť:"
@@ -4584,9 +4761,9 @@
 msgstr "Chyba čítania"
 
 #: ../libpurple/protocols/jabber/jabber.c:467
-#: ../libpurple/protocols/oscar/flap_connection.c:386
-#: ../libpurple/protocols/yahoo/yahoo.c:2381
-#: ../libpurple/protocols/yahoo/yahoo.c:2413
+#: ../libpurple/protocols/oscar/flap_connection.c:394
+#: ../libpurple/protocols/yahoo/yahoo.c:2463
+#: ../libpurple/protocols/yahoo/yahoo.c:2495
 #, c-format
 msgid ""
 "Could not establish a connection with the server:\n"
@@ -4634,8 +4811,8 @@
 msgstr "Už registrovaný"
 
 #: ../libpurple/protocols/jabber/jabber.c:848
-#: ../libpurple/protocols/oscar/oscar.c:3804
-#: ../libpurple/protocols/oscar/oscar.c:3817
+#: ../libpurple/protocols/oscar/oscar.c:3758
+#: ../libpurple/protocols/oscar/oscar.c:3771
 msgid "State"
 msgstr "Štát"
 
@@ -4669,7 +4846,7 @@
 msgstr "Registrovať nový XMPP účet"
 
 #. Register button
-#: ../libpurple/protocols/jabber/jabber.c:881 ../pidgin/gtkaccount.c:1518
+#: ../libpurple/protocols/jabber/jabber.c:881 ../pidgin/gtkaccount.c:1523
 msgid "Register"
 msgstr "Register"
 
@@ -4690,8 +4867,8 @@
 #: ../libpurple/protocols/jabber/jabber.c:1502
 #: ../libpurple/protocols/jabber/jabber.c:1543
 #: ../libpurple/protocols/jabber/jabber.c:1579
-#: ../libpurple/protocols/oscar/oscar.c:826
-#: ../libpurple/protocols/oscar/oscar.c:5581
+#: ../libpurple/protocols/oscar/oscar.c:825
+#: ../libpurple/protocols/oscar/oscar.c:5550
 msgid "Not Authorized"
 msgstr "Neautorizovaný"
 
@@ -4752,7 +4929,7 @@
 msgstr "Zadajte, prosím, vaše nové heslo"
 
 #: ../libpurple/protocols/jabber/jabber.c:1394
-#: ../libpurple/protocols/oscar/oscar.c:6367
+#: ../libpurple/protocols/oscar/oscar.c:6336
 #: ../libpurple/protocols/silc/silc.c:1093
 #: ../libpurple/protocols/silc10/silc.c:1004
 msgid "Set User Info..."
@@ -4760,7 +4937,7 @@
 
 #. if (js->protocol_options & CHANGE_PASSWORD) {
 #: ../libpurple/protocols/jabber/jabber.c:1399
-#: ../libpurple/protocols/oscar/oscar.c:6378
+#: ../libpurple/protocols/oscar/oscar.c:6347
 #: ../libpurple/protocols/silc/silc.c:1089
 #: ../libpurple/protocols/silc10/silc.c:1000
 msgid "Change Password..."
@@ -4970,61 +5147,61 @@
 msgid "Stream Error"
 msgstr "Chyba prúdu"
 
-#: ../libpurple/protocols/jabber/jabber.c:1670
+#: ../libpurple/protocols/jabber/jabber.c:1686
 #, c-format
 msgid "Unable to ban user %s"
 msgstr "Nedá sa udeliť zákaz pre používateľa %s"
 
-#: ../libpurple/protocols/jabber/jabber.c:1690
+#: ../libpurple/protocols/jabber/jabber.c:1706
 #, c-format
 msgid "Unknown affiliation: \"%s\""
 msgstr "Neznáme pričlenenie: \"%s\""
 
-#: ../libpurple/protocols/jabber/jabber.c:1695
+#: ../libpurple/protocols/jabber/jabber.c:1711
 #, c-format
 msgid "Unable to affiliate user %s as \"%s\""
 msgstr "Používateľ %s sa nedá pričleniť ako \"%s\""
 
-#: ../libpurple/protocols/jabber/jabber.c:1714
+#: ../libpurple/protocols/jabber/jabber.c:1730
 #, c-format
 msgid "Unknown role: \"%s\""
 msgstr "Neznáma úloha: \"%s\""
 
-#: ../libpurple/protocols/jabber/jabber.c:1721
+#: ../libpurple/protocols/jabber/jabber.c:1735
 #, c-format
 msgid "Unable to set role \"%s\" for user: %s"
 msgstr "Nepodarilo sa nastaviť úlohu \"%s\" pre používateľa: %s"
 
-#: ../libpurple/protocols/jabber/jabber.c:1774
+#: ../libpurple/protocols/jabber/jabber.c:1788
 #, c-format
 msgid "Unable to kick user %s"
 msgstr "Nepodarilo sa vykopnúť používateľa %s"
 
-#: ../libpurple/protocols/jabber/jabber.c:1805
+#: ../libpurple/protocols/jabber/jabber.c:1822
 msgid "config:  Configure a chat room."
 msgstr "config:  Nastavenie miestnosti chatu."
 
-#: ../libpurple/protocols/jabber/jabber.c:1809
+#: ../libpurple/protocols/jabber/jabber.c:1826
 msgid "configure:  Configure a chat room."
 msgstr "configure:  Nastavenie miestnosti chatu."
 
-#: ../libpurple/protocols/jabber/jabber.c:1818
+#: ../libpurple/protocols/jabber/jabber.c:1835
 msgid "part [room]:  Leave the room."
 msgstr "part [miestnosť]:  Opustí miestnosť."
 
-#: ../libpurple/protocols/jabber/jabber.c:1823
+#: ../libpurple/protocols/jabber/jabber.c:1840
 msgid "register:  Register with a chat room."
 msgstr "register:  Zaregistrovať sa v chatovacej miestnosti."
 
-#: ../libpurple/protocols/jabber/jabber.c:1829
+#: ../libpurple/protocols/jabber/jabber.c:1846
 msgid "topic [new topic]:  View or change the topic."
 msgstr "topic [nová téma]:  Zobrazí alebo zmení tému."
 
-#: ../libpurple/protocols/jabber/jabber.c:1835
+#: ../libpurple/protocols/jabber/jabber.c:1852
 msgid "ban &lt;user&gt; [room]:  Ban a user from the room."
 msgstr "ban &lt;používateľ&gt; [miestnosť]:  Vykázať používateľa z miestnosti."
 
-#: ../libpurple/protocols/jabber/jabber.c:1841
+#: ../libpurple/protocols/jabber/jabber.c:1858
 msgid ""
 "affiliate &lt;user&gt; &lt;owner|admin|member|outcast|none&gt;: Set a user's "
 "affiliation with the room."
@@ -5032,7 +5209,7 @@
 "affiliate &lt;používateľ&gt; &lt;owner|admin|member|outcast|none&gt;: "
 "Nastaví používateľové pričlenenie v miestnosti."
 
-#: ../libpurple/protocols/jabber/jabber.c:1847
+#: ../libpurple/protocols/jabber/jabber.c:1864
 msgid ""
 "role &lt;user&gt; &lt;moderator|participant|visitor|none&gt;: Set a user's "
 "role in the room."
@@ -5040,20 +5217,20 @@
 "role &lt;používateľ&gt; &lt;moderator|participant|visitor|none&gt;: Nastaví "
 "postavenie používateľa v miestnosti."
 
-#: ../libpurple/protocols/jabber/jabber.c:1853
+#: ../libpurple/protocols/jabber/jabber.c:1870
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
 msgstr "invite &lt;user&gt; [správa]: Pozve používateľa do miestnosti."
 
-#: ../libpurple/protocols/jabber/jabber.c:1859
+#: ../libpurple/protocols/jabber/jabber.c:1876
 msgid "join: &lt;room&gt; [server]:  Join a chat on this server."
 msgstr "join: &lt;room&gt; [server]: Pripojí sa na chat na tomto serveri."
 
-#: ../libpurple/protocols/jabber/jabber.c:1865
+#: ../libpurple/protocols/jabber/jabber.c:1882
 msgid "kick &lt;user&gt; [room]:  Kick a user from the room."
 msgstr ""
 "kick &lt;používateľ&gt; [miestnosť]:  Vykopne používateľa z miestnosti."
 
-#: ../libpurple/protocols/jabber/jabber.c:1870
+#: ../libpurple/protocols/jabber/jabber.c:1887
 msgid ""
 "msg &lt;user&gt; &lt;message&gt;:  Send a private message to another user."
 msgstr ""
@@ -5089,7 +5266,7 @@
 msgstr "Povoliť plaintextovú autentifikáciu cez nezašifrované spojenia"
 
 #: ../libpurple/protocols/jabber/libxmpp.c:216
-#: ../libpurple/protocols/simple/simple.c:1856
+#: ../libpurple/protocols/simple/simple.c:1861
 msgid "Connect port"
 msgstr "Port pripojenia"
 
@@ -5138,16 +5315,16 @@
 msgid "XML Parse error"
 msgstr "Chyba pri spracovaní XML"
 
-#: ../libpurple/protocols/jabber/presence.c:290
+#: ../libpurple/protocols/jabber/presence.c:292
 msgid "Unknown Error in presence"
 msgstr "Prítomná neznáma chyba"
 
-#: ../libpurple/protocols/jabber/presence.c:364
-#: ../libpurple/protocols/jabber/presence.c:365
+#: ../libpurple/protocols/jabber/presence.c:366
+#: ../libpurple/protocols/jabber/presence.c:367
 msgid "Create New Room"
 msgstr "Vytvoriť novú miestnosť"
 
-#: ../libpurple/protocols/jabber/presence.c:366
+#: ../libpurple/protocols/jabber/presence.c:368
 msgid ""
 "You are creating a new room.  Would you like to configure it, or accept the "
 "default settings?"
@@ -5155,20 +5332,20 @@
 "Vytvárate novú miestnosť. Chceli by ste ju nastaviť, alebo prijmete "
 "štandardné nastavenia?"
 
-#: ../libpurple/protocols/jabber/presence.c:372
+#: ../libpurple/protocols/jabber/presence.c:374
 msgid "_Configure Room"
 msgstr "Konfigurovať miestnosť"
 
-#: ../libpurple/protocols/jabber/presence.c:373
+#: ../libpurple/protocols/jabber/presence.c:375
 msgid "_Accept Defaults"
 msgstr "_Prijať štandardné"
 
-#: ../libpurple/protocols/jabber/presence.c:409
+#: ../libpurple/protocols/jabber/presence.c:417
 #, c-format
 msgid "Error in chat %s"
 msgstr "Chyba v chate %s"
 
-#: ../libpurple/protocols/jabber/presence.c:412
+#: ../libpurple/protocols/jabber/presence.c:421
 #, c-format
 msgid "Error joining chat %s"
 msgstr "Chyba pripojenia na chat %s"
@@ -5197,16 +5374,18 @@
 #: ../libpurple/protocols/jabber/si.c:836
 #, c-format
 msgid "Unable to send file to %s, not subscribed to user presence"
-msgstr "Používateľovi %s nie je možné odoslať súbor, nie je zapísaný v prítomných používateľoch."
+msgstr ""
+"Používateľovi %s nie je možné odoslať súbor, nie je zapísaný v prítomných "
+"používateľoch."
 
 #: ../libpurple/protocols/jabber/si.c:851
 #, c-format
 msgid "Please select which resource of %s you would like to send a file to"
-msgstr ""
+msgstr "Vyberte, prosím, zdroj používateľa %s, na ktorý chcete odoslať súbor"
 
 #: ../libpurple/protocols/jabber/si.c:867
 msgid "Select a Resource"
-msgstr ""
+msgstr "Vyberte zdroj"
 
 #: ../libpurple/protocols/msn/dialog.c:110
 #, c-format
@@ -5424,7 +5603,7 @@
 msgstr "Server je príliš zaneprázdnený"
 
 #: ../libpurple/protocols/msn/error.c:222
-#: ../libpurple/protocols/oscar/oscar.c:1381
+#: ../libpurple/protocols/oscar/oscar.c:1378
 #: ../libpurple/protocols/silc/silc.c:233
 #: ../libpurple/protocols/silc10/ops.c:1709
 #: ../libpurple/protocols/toc/toc.c:728 ../libpurple/proxy.c:1363
@@ -5526,8 +5705,8 @@
 msgstr "Vás má"
 
 #: ../libpurple/protocols/msn/msn.c:551 ../libpurple/protocols/msn/state.c:33
-#: ../libpurple/protocols/yahoo/yahoo.c:2895
-#: ../libpurple/protocols/yahoo/yahoo.c:3504
+#: ../libpurple/protocols/yahoo/yahoo.c:2977
+#: ../libpurple/protocols/yahoo/yahoo.c:3661
 msgid "Be Right Back"
 msgstr "Hneď som späť"
 
@@ -5538,20 +5717,20 @@
 #: ../libpurple/protocols/silc/silc.c:56
 #: ../libpurple/protocols/silc10/buddy.c:1480
 #: ../libpurple/protocols/silc10/silc.c:47
-#: ../libpurple/protocols/yahoo/yahoo.c:2897
-#: ../libpurple/protocols/yahoo/yahoo.c:3507
+#: ../libpurple/protocols/yahoo/yahoo.c:2979
+#: ../libpurple/protocols/yahoo/yahoo.c:3664
 msgid "Busy"
 msgstr "Zaneprázdnený"
 
 #: ../libpurple/protocols/msn/msn.c:559
-#: ../libpurple/protocols/yahoo/yahoo.c:2905
-#: ../libpurple/protocols/yahoo/yahoo.c:3519
+#: ../libpurple/protocols/yahoo/yahoo.c:2987
+#: ../libpurple/protocols/yahoo/yahoo.c:3676
 msgid "On the Phone"
 msgstr "Telefonujem"
 
 #: ../libpurple/protocols/msn/msn.c:563
-#: ../libpurple/protocols/yahoo/yahoo.c:2909
-#: ../libpurple/protocols/yahoo/yahoo.c:3525
+#: ../libpurple/protocols/yahoo/yahoo.c:2991
+#: ../libpurple/protocols/yahoo/yahoo.c:3682
 msgid "Out to Lunch"
 msgstr "Na obede"
 
@@ -5594,14 +5773,16 @@
 
 #: ../libpurple/protocols/msn/msn.c:698
 msgid "SSL support is needed for MSN. Please install a supported SSL library."
-msgstr "Pre MSN je potrebná podpora SSL. Nainštalujte, prosím, podporovanú SSL knižnicu."
+msgstr ""
+"Pre MSN je potrebná podpora SSL. Nainštalujte, prosím, podporovanú SSL "
+"knižnicu."
 
 #: ../libpurple/protocols/msn/msn.c:723
 msgid "Failed to connect to server."
 msgstr "Nepodarilo sa spojiť so serverom."
 
 #: ../libpurple/protocols/msn/msn.c:1479 ../libpurple/protocols/msn/msn.c:1827
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:784
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:808
 msgid "Error retrieving profile"
 msgstr "Chyba pri získavaní profilu"
 
@@ -5611,22 +5792,22 @@
 msgstr "Všeobecné"
 
 #: ../libpurple/protocols/msn/msn.c:1557
-#: ../libpurple/protocols/oscar/oscar.c:3769
+#: ../libpurple/protocols/oscar/oscar.c:3723
 #: ../libpurple/protocols/qq/buddy_info.c:45
-#: ../libpurple/protocols/qq/qq.c:219
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1057
+#: ../libpurple/protocols/qq/qq.c:221
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1081
 msgid "Age"
 msgstr "Vek"
 
 #: ../libpurple/protocols/msn/msn.c:1559
 #: ../libpurple/protocols/qq/buddy_info.c:51
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1072
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1096
 msgid "Occupation"
 msgstr "Zamestnanie"
 
 #: ../libpurple/protocols/msn/msn.c:1560
 #: ../libpurple/protocols/novell/novell.c:1478
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1052
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1076
 #: ../libpurple/protocols/zephyr/zephyr.c:798
 #: ../libpurple/protocols/zephyr/zephyr.c:1215
 msgid "Location"
@@ -5645,10 +5826,10 @@
 
 #: ../libpurple/protocols/msn/msn.c:1588
 msgid "Social"
-msgstr ""
+msgstr "Sociálne"
 
 #: ../libpurple/protocols/msn/msn.c:1590
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1062
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1086
 msgid "Marital Status"
 msgstr "Manželský stav"
 
@@ -5682,7 +5863,7 @@
 
 #: ../libpurple/protocols/msn/msn.c:1598 ../libpurple/protocols/msn/msn.c:1779
 #: ../libpurple/protocols/msn/msn.c:1785
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1114
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1138
 msgid "Favorite Quote"
 msgstr "Obľúbený citát"
 
@@ -5707,7 +5888,7 @@
 msgstr "Telefón domov 2"
 
 #: ../libpurple/protocols/msn/msn.c:1622
-#: ../libpurple/protocols/oscar/oscar.c:3807
+#: ../libpurple/protocols/oscar/oscar.c:3761
 msgid "Home Address"
 msgstr "Adresa domov"
 
@@ -5743,7 +5924,7 @@
 msgstr "Názov zamestnania"
 
 #: ../libpurple/protocols/msn/msn.c:1647
-#: ../libpurple/protocols/oscar/oscar.c:3828
+#: ../libpurple/protocols/oscar/oscar.c:3782
 msgid "Company"
 msgstr "Spoločnosť"
 
@@ -5765,7 +5946,7 @@
 msgstr "Telefón do práce 2"
 
 #: ../libpurple/protocols/msn/msn.c:1652
-#: ../libpurple/protocols/oscar/oscar.c:3820
+#: ../libpurple/protocols/oscar/oscar.c:3774
 msgid "Work Address"
 msgstr "Adresa pracoviska"
 
@@ -5831,7 +6012,7 @@
 "pravdepodobne neexistuje."
 
 #: ../libpurple/protocols/msn/msn.c:1841
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1216
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1240
 msgid "Profile URL"
 msgstr "Adresa profilu"
 
@@ -5992,8 +6173,8 @@
 msgstr "Chyba pri spracovávaní HTTP."
 
 #: ../libpurple/protocols/msn/session.c:307
-#: ../libpurple/protocols/oscar/oscar.c:3481
-#: ../libpurple/protocols/yahoo/yahoo.c:202
+#: ../libpurple/protocols/oscar/flap_connection.c:384
+#: ../libpurple/protocols/yahoo/yahoo.c:205
 msgid "You have signed on from another location."
 msgstr "Prihlásili ste sa z iného miesta."
 
@@ -6068,13 +6249,15 @@
 
 #: ../libpurple/protocols/msn/switchboard.c:420
 msgid "Message could not be sent because we are sending too quickly:"
-msgstr "Správu sa nepodarilo odoslať, pretože posielami príliš rýchlo:"
+msgstr "Správu sa nepodarilo odoslať, pretože posielame príliš rýchlo:"
 
 #: ../libpurple/protocols/msn/switchboard.c:424
 msgid ""
 "Message could not be sent because we were unable to establish a session with "
 "the server. This is likely a server problem, try again in a few minutes:"
 msgstr ""
+"Správu sa nepodarilo odoslať, pretože nebolo možné založiť sedenie na serveri. "
+"Toto je pravdepodobne problém serveru, skúste to znovu o pár minút:"
 
 #: ../libpurple/protocols/msn/switchboard.c:431
 msgid ""
@@ -6090,22 +6273,22 @@
 msgid "%s just sent you a Nudge!"
 msgstr "%s vám práve poslal Nudge!"
 
-#: ../libpurple/protocols/msn/userlist.c:250
+#: ../libpurple/protocols/msn/userlist.c:252
 #, c-format
 msgid "%s has added you to his or her buddy list."
 msgstr "Používateľ %s si vás pridal do svojho zoznamu priateľov."
 
-#: ../libpurple/protocols/msn/userlist.c:319
+#: ../libpurple/protocols/msn/userlist.c:321
 #, c-format
 msgid "%s has removed you from his or her buddy list."
 msgstr "Používateľ %s vás odstránil zo svojho zoznamu priateľov."
 
-#: ../libpurple/protocols/msn/userlist.c:641
+#: ../libpurple/protocols/msn/userlist.c:643
 #, c-format
 msgid "Unable to add \"%s\"."
 msgstr "Nepodarilo sa pridať \"%s\"."
 
-#: ../libpurple/protocols/msn/userlist.c:643
+#: ../libpurple/protocols/msn/userlist.c:645
 msgid "The screen name specified is invalid."
 msgstr "Zadané používateľské meno je chybné."
 
@@ -6350,7 +6533,7 @@
 msgstr "Pošta"
 
 #: ../libpurple/protocols/novell/novell.c:1502
-#: ../libpurple/protocols/sametime/sametime.c:4122
+#: ../libpurple/protocols/sametime/sametime.c:4123
 msgid "User ID"
 msgstr "Používateľské ID"
 
@@ -6466,18 +6649,18 @@
 msgid "Server port"
 msgstr "Port serveru"
 
-#: ../libpurple/protocols/oscar/flap_connection.c:379
-#: ../libpurple/protocols/yahoo/yahoo.c:2292
-#: ../libpurple/protocols/yahoo/yahoo.c:2459
+#: ../libpurple/protocols/oscar/flap_connection.c:387
+#: ../libpurple/protocols/yahoo/yahoo.c:2374
+#: ../libpurple/protocols/yahoo/yahoo.c:2541
 #: ../libpurple/protocols/yahoo/ycht.c:481 ../libpurple/proxy.c:580
 #: ../libpurple/proxy.c:1099 ../libpurple/proxy.c:1208
 #: ../libpurple/proxy.c:1308 ../libpurple/proxy.c:1436
 msgid "Server closed the connection."
 msgstr "Server zrušil pripojenie."
 
-#: ../libpurple/protocols/oscar/flap_connection.c:381
-#: ../libpurple/protocols/yahoo/yahoo.c:2286
-#: ../libpurple/protocols/yahoo/yahoo.c:2453 ../libpurple/proxy.c:592
+#: ../libpurple/protocols/oscar/flap_connection.c:389
+#: ../libpurple/protocols/yahoo/yahoo.c:2368
+#: ../libpurple/protocols/yahoo/yahoo.c:2535 ../libpurple/proxy.c:592
 #: ../libpurple/proxy.c:1111 ../libpurple/proxy.c:1220
 #: ../libpurple/proxy.c:1320 ../libpurple/proxy.c:1448
 #, c-format
@@ -6488,7 +6671,7 @@
 "Pripojenie k serveru bolo prerušené:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/flap_connection.c:384
+#: ../libpurple/protocols/oscar/flap_connection.c:392
 #: ../libpurple/proxy.c:1128 ../libpurple/proxy.c:1233
 #: ../libpurple/proxy.c:1332 ../libpurple/proxy.c:1404
 #: ../libpurple/proxy.c:1461
@@ -6526,7 +6709,7 @@
 msgstr "Modul protokolu ICQ"
 
 #: ../libpurple/protocols/oscar/libicq.c:147
-#: ../libpurple/protocols/yahoo/yahoo.c:4111
+#: ../libpurple/protocols/yahoo/yahoo.c:4279
 #: ../libpurple/protocols/zephyr/zephyr.c:2997
 msgid "Encoding"
 msgstr "Kódovanie"
@@ -6657,7 +6840,7 @@
 msgid "Not while on AOL"
 msgstr "Nie, pokým ste na AOL"
 
-#: ../libpurple/protocols/oscar/oscar.c:348
+#: ../libpurple/protocols/oscar/oscar.c:347
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
 "is probably using a different encoding than expected.  If you know what "
@@ -6668,31 +6851,31 @@
 "píšete zrejme používa neočakávané kódovanie.  Ak viete, aké kódovanie "
 "používa, môžete ho nastaviť v pokročílých možnostiach vášho AIM/ICQ účtu.)"
 
-#: ../libpurple/protocols/oscar/oscar.c:457
+#: ../libpurple/protocols/oscar/oscar.c:456
 #, c-format
 msgid ""
 "(There was an error receiving this message.  Either you and %s have "
 "different encodings selected, or %s has a buggy client.)"
 msgstr ""
-"(Počas prijímania tejto správy sa vyskytla chyba.  Buď máte nastavené "
-"iné kódovanie ako %s, alebo má %s chybný klient.)"
+"(Počas prijímania tejto správy sa vyskytla chyba.  Buď máte nastavené iné "
+"kódovanie ako %s, alebo má %s chybný klient.)"
 
 #. Label
-#: ../libpurple/protocols/oscar/oscar.c:639 ../pidgin/gtkutils.c:2359
-#: ../pidgin/gtkutils.c:2389
+#: ../libpurple/protocols/oscar/oscar.c:638 ../pidgin/gtkutils.c:2376
+#: ../pidgin/gtkutils.c:2406
 #: ../pidgin/plugins/gevolution/new_person_dialog.c:334
 msgid "Buddy Icon"
 msgstr "Ikona priateľa"
 
-#: ../libpurple/protocols/oscar/oscar.c:642
+#: ../libpurple/protocols/oscar/oscar.c:641
 msgid "Voice"
 msgstr "Hlas"
 
-#: ../libpurple/protocols/oscar/oscar.c:645
+#: ../libpurple/protocols/oscar/oscar.c:644
 msgid "AIM Direct IM"
 msgstr "AIM - priame IM"
 
-#: ../libpurple/protocols/oscar/oscar.c:648
+#: ../libpurple/protocols/oscar/oscar.c:647
 #: ../libpurple/protocols/silc/silc.c:768
 #: ../libpurple/protocols/silc/util.c:553
 #: ../libpurple/protocols/silc10/silc.c:679
@@ -6700,124 +6883,125 @@
 msgid "Chat"
 msgstr "Chat"
 
-#: ../libpurple/protocols/oscar/oscar.c:651
-#: ../libpurple/protocols/oscar/oscar.c:5989
+#: ../libpurple/protocols/oscar/oscar.c:650
+#: ../libpurple/protocols/oscar/oscar.c:5958
 msgid "Get File"
 msgstr "Získať súbor"
 
-#: ../libpurple/protocols/oscar/oscar.c:658
+#: ../libpurple/protocols/oscar/oscar.c:657
 msgid "Games"
 msgstr "Hry"
 
-#: ../libpurple/protocols/oscar/oscar.c:661
+#: ../libpurple/protocols/oscar/oscar.c:660
 msgid "Add-Ins"
 msgstr "Doplnky"
 
-#: ../libpurple/protocols/oscar/oscar.c:664
+#: ../libpurple/protocols/oscar/oscar.c:663
 msgid "Send Buddy List"
 msgstr "Odoslať zoznam priateľov"
 
-#: ../libpurple/protocols/oscar/oscar.c:667
+#: ../libpurple/protocols/oscar/oscar.c:666
 msgid "ICQ Direct Connect"
 msgstr "Priame spojenie ICQ"
 
-#: ../libpurple/protocols/oscar/oscar.c:670
+#: ../libpurple/protocols/oscar/oscar.c:669
 msgid "AP User"
 msgstr "AP používateľ"
 
-#: ../libpurple/protocols/oscar/oscar.c:673
+#: ../libpurple/protocols/oscar/oscar.c:672
 msgid "ICQ RTF"
 msgstr "ICQ RTF"
 
-#: ../libpurple/protocols/oscar/oscar.c:676
+#: ../libpurple/protocols/oscar/oscar.c:675
 msgid "Nihilist"
 msgstr "Nihilista"
 
-#: ../libpurple/protocols/oscar/oscar.c:679
+#: ../libpurple/protocols/oscar/oscar.c:678
 msgid "ICQ Server Relay"
 msgstr "ICQ Server Relay"
 
-#: ../libpurple/protocols/oscar/oscar.c:682
+#: ../libpurple/protocols/oscar/oscar.c:681
 msgid "Old ICQ UTF8"
 msgstr "Staré ICQ UTF8"
 
-#: ../libpurple/protocols/oscar/oscar.c:685
+#: ../libpurple/protocols/oscar/oscar.c:684
 msgid "Trillian Encryption"
 msgstr "Šifrovanie Trillian"
 
-#: ../libpurple/protocols/oscar/oscar.c:688
+#: ../libpurple/protocols/oscar/oscar.c:687
 msgid "ICQ UTF8"
 msgstr "ICQ UTF8"
 
-#: ../libpurple/protocols/oscar/oscar.c:691
+#: ../libpurple/protocols/oscar/oscar.c:690
 msgid "Hiptop"
 msgstr "Hiptom"
 
-#: ../libpurple/protocols/oscar/oscar.c:694
+#: ../libpurple/protocols/oscar/oscar.c:693
 msgid "Security Enabled"
 msgstr "Bezpečnosť zapnutá"
 
-#: ../libpurple/protocols/oscar/oscar.c:697
+#: ../libpurple/protocols/oscar/oscar.c:696
 msgid "Video Chat"
 msgstr "Video chat"
 
-#: ../libpurple/protocols/oscar/oscar.c:701
+#: ../libpurple/protocols/oscar/oscar.c:700
 msgid "iChat AV"
 msgstr "iChat AV"
 
-#: ../libpurple/protocols/oscar/oscar.c:704
+#: ../libpurple/protocols/oscar/oscar.c:703
 msgid "Live Video"
 msgstr "Živé video"
 
-#: ../libpurple/protocols/oscar/oscar.c:707
+#: ../libpurple/protocols/oscar/oscar.c:706
 msgid "Camera"
 msgstr "Kamera"
 
-#: ../libpurple/protocols/oscar/oscar.c:725
-#: ../libpurple/protocols/oscar/oscar.c:5759
+#: ../libpurple/protocols/oscar/oscar.c:724
+#: ../libpurple/protocols/oscar/oscar.c:5728
 msgid "Free For Chat"
 msgstr "Voľný pre rozhovor"
 
-#: ../libpurple/protocols/oscar/oscar.c:729
-#: ../libpurple/protocols/oscar/oscar.c:5794
+#: ../libpurple/protocols/oscar/oscar.c:728
+#: ../libpurple/protocols/oscar/oscar.c:5763
 msgid "Not Available"
 msgstr "Nedostupný"
 
-#: ../libpurple/protocols/oscar/oscar.c:731
-#: ../libpurple/protocols/oscar/oscar.c:5780
+#: ../libpurple/protocols/oscar/oscar.c:730
+#: ../libpurple/protocols/oscar/oscar.c:5749
 msgid "Occupied"
 msgstr "Zaneprázdnený"
 
-#: ../libpurple/protocols/oscar/oscar.c:735
+#: ../libpurple/protocols/oscar/oscar.c:734
 msgid "Web Aware"
 msgstr "Web aware"
 
-#: ../libpurple/protocols/oscar/oscar.c:737 ../libpurple/protocols/qq/qq.c:183
-#: ../libpurple/protocols/yahoo/yahoo.c:2913 ../libpurple/status.c:156
-#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1058
+#: ../libpurple/protocols/oscar/oscar.c:736 ../libpurple/protocols/qq/qq.c:183
+#: ../libpurple/protocols/qq/qq.c:288
+#: ../libpurple/protocols/yahoo/yahoo.c:2995 ../libpurple/status.c:156
+#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1059
 msgid "Invisible"
 msgstr "Neviditeľný"
 
-#: ../libpurple/protocols/oscar/oscar.c:739
+#: ../libpurple/protocols/oscar/oscar.c:738
 msgid "Online"
 msgstr "Pripojený"
 
-#: ../libpurple/protocols/oscar/oscar.c:838
-#: ../libpurple/protocols/oscar/oscar.c:3721
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:697 ../pidgin/gtkprefs.c:1121
+#: ../libpurple/protocols/oscar/oscar.c:837
+#: ../libpurple/protocols/oscar/oscar.c:3675
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1123
 msgid "IP Address"
 msgstr "IP adresa"
 
-#: ../libpurple/protocols/oscar/oscar.c:845
-#: ../libpurple/protocols/oscar/oscar.c:2867
+#: ../libpurple/protocols/oscar/oscar.c:844
+#: ../libpurple/protocols/oscar/oscar.c:2861
 msgid "Warning Level"
 msgstr "Úroveň upozornenia"
 
-#: ../libpurple/protocols/oscar/oscar.c:855
+#: ../libpurple/protocols/oscar/oscar.c:854
 msgid "Buddy Comment"
 msgstr "Komentár priateľa"
 
-#: ../libpurple/protocols/oscar/oscar.c:995
+#: ../libpurple/protocols/oscar/oscar.c:994
 #, c-format
 msgid ""
 "Could not connect to authentication server:\n"
@@ -6826,7 +7010,7 @@
 "Nepodarilo sa pripojiť na autentifikačný server:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:1003
+#: ../libpurple/protocols/oscar/oscar.c:1002
 #, c-format
 msgid ""
 "Could not connect to BOS server:\n"
@@ -6835,20 +7019,20 @@
 "Nepodarilo sa pripojiť na BOS server:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:1043
+#: ../libpurple/protocols/oscar/oscar.c:1042
 msgid "Screen name sent"
 msgstr "Používateľské meno odoslané"
 
-#: ../libpurple/protocols/oscar/oscar.c:1048
+#: ../libpurple/protocols/oscar/oscar.c:1047
 msgid "Connection established, cookie sent"
 msgstr "Pripojenie založené, boli odoslané cookies"
 
 #. TODO: Don't call this with ssi
-#: ../libpurple/protocols/oscar/oscar.c:1077
+#: ../libpurple/protocols/oscar/oscar.c:1076
 msgid "Finalizing connection"
 msgstr "Dokončuje sa pripojenie"
 
-#: ../libpurple/protocols/oscar/oscar.c:1261
+#: ../libpurple/protocols/oscar/oscar.c:1258
 #, c-format
 msgid ""
 "Unable to login: Could not sign on as %s because the screen name is "
@@ -6856,33 +7040,33 @@
 "and contain only letters, numbers and spaces, or contain only numbers."
 msgstr ""
 "Nepodarilo sa prihlásiť: Nepodarilo sa prihlásiť ako %s, pretože "
-"používateľské meno je chybné.  Používateľské mená musia byť v tvare "
-"e-mailovej adresy, čísla, alebo musí byť prvý znak písmeno a ostatné znaky "
-"sú písmená, čísla a medzery."
-
-#: ../libpurple/protocols/oscar/oscar.c:1346
-#: ../libpurple/protocols/yahoo/yahoo.c:1934
+"používateľské meno je chybné.  Používateľské mená musia byť v tvare e-"
+"mailovej adresy, čísla, alebo musí byť prvý znak písmeno a ostatné znaky sú "
+"písmená, čísla a medzery."
+
+#: ../libpurple/protocols/oscar/oscar.c:1343
+#: ../libpurple/protocols/yahoo/yahoo.c:2010
 msgid "Invalid screen name."
 msgstr "Chybné používateľské meno."
 
-#: ../libpurple/protocols/oscar/oscar.c:1353
+#: ../libpurple/protocols/oscar/oscar.c:1350
 #: ../libpurple/protocols/qq/login_logout.c:483
-#: ../libpurple/protocols/simple/simple.c:1037
-#: ../libpurple/protocols/yahoo/yahoo.c:1952
+#: ../libpurple/protocols/simple/simple.c:1039
+#: ../libpurple/protocols/yahoo/yahoo.c:2031
 msgid "Incorrect password."
 msgstr "Nesprávne heslo."
 
-#: ../libpurple/protocols/oscar/oscar.c:1358
+#: ../libpurple/protocols/oscar/oscar.c:1355
 msgid "Your account is currently suspended."
 msgstr "Váš účet je momentálne pozastavený"
 
 #. service temporarily unavailable
-#: ../libpurple/protocols/oscar/oscar.c:1362
+#: ../libpurple/protocols/oscar/oscar.c:1359
 msgid "The AOL Instant Messenger service is temporarily unavailable."
 msgstr "Služba AOL je dočasne nedostupná."
 
-#: ../libpurple/protocols/oscar/oscar.c:1367
-#: ../libpurple/protocols/oscar/oscar.c:1378
+#: ../libpurple/protocols/oscar/oscar.c:1364
+#: ../libpurple/protocols/oscar/oscar.c:1375
 msgid ""
 "You have been connecting and disconnecting too frequently. Wait ten minutes "
 "and try again. If you continue to try, you will need to wait even longer."
@@ -6890,46 +7074,46 @@
 "Pripájali a odpájali ste sa príliš často. Počkajte desať minút a skúste "
 "znova. Ak budete i naďalej skúšať, budete musieť čakať este dlhšie."
 
-#: ../libpurple/protocols/oscar/oscar.c:1372
+#: ../libpurple/protocols/oscar/oscar.c:1369
 #, c-format
 msgid "The client version you are using is too old. Please upgrade at %s"
 msgstr ""
 "Verzia klienta, ktorého používate, je príliš stará. Prosím, aktualizujte ho "
 "na %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:1412
+#: ../libpurple/protocols/oscar/oscar.c:1408
 msgid "Could Not Connect"
 msgstr "Nepodarilo sa pripojiť"
 
-#: ../libpurple/protocols/oscar/oscar.c:1417
+#: ../libpurple/protocols/oscar/oscar.c:1412
 msgid "Received authorization"
 msgstr "Prijatá autorizácia"
 
-#: ../libpurple/protocols/oscar/oscar.c:1440
+#: ../libpurple/protocols/oscar/oscar.c:1434
 msgid "The SecurID key entered is invalid."
 msgstr "Zadaný kľúč SecurID je neplatný."
 
-#: ../libpurple/protocols/oscar/oscar.c:1454
+#: ../libpurple/protocols/oscar/oscar.c:1447
 msgid "Enter SecurID"
 msgstr "Zadajte SecurID"
 
-#: ../libpurple/protocols/oscar/oscar.c:1455
+#: ../libpurple/protocols/oscar/oscar.c:1448
 msgid "Enter the 6 digit number from the digital display."
 msgstr "Zadajte 6-ciferné číslo z digitálneho displeja."
 
 #. *
 #. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
 #.
-#: ../libpurple/protocols/oscar/oscar.c:1457
-#: ../libpurple/protocols/oscar/oscar.c:2250
-#: ../libpurple/protocols/oscar/oscar.c:2297
-#: ../libpurple/protocols/oscar/oscar.c:5864
-#: ../libpurple/protocols/oscar/oscar.c:6145 ../libpurple/request.h:1387
+#: ../libpurple/protocols/oscar/oscar.c:1450
+#: ../libpurple/protocols/oscar/oscar.c:2242
+#: ../libpurple/protocols/oscar/oscar.c:2291
+#: ../libpurple/protocols/oscar/oscar.c:5833
+#: ../libpurple/protocols/oscar/oscar.c:6114 ../libpurple/request.h:1387
 msgid "_OK"
 msgstr "_OK"
 
-#: ../libpurple/protocols/oscar/oscar.c:1496
-#: ../libpurple/protocols/oscar/oscar.c:1539
+#: ../libpurple/protocols/oscar/oscar.c:1489
+#: ../libpurple/protocols/oscar/oscar.c:1532
 #, c-format
 msgid ""
 "You may be disconnected shortly.  You may want to use TOC until this is "
@@ -6938,55 +7122,55 @@
 "Zakrátko môžete byť odpojený. Možno budete chcieť použiť TOC kým sa toto "
 "neopraví. Navštívte %s pre aktualizácie."
 
-#: ../libpurple/protocols/oscar/oscar.c:1499
-#: ../libpurple/protocols/oscar/oscar.c:1542
+#: ../libpurple/protocols/oscar/oscar.c:1492
+#: ../libpurple/protocols/oscar/oscar.c:1535
 msgid "Unable to get a valid AIM login hash."
 msgstr "Nebolo možné získať platný AIM prihlasovací hash."
 
-#: ../libpurple/protocols/oscar/oscar.c:1627
+#: ../libpurple/protocols/oscar/oscar.c:1620
 #, c-format
 msgid "You may be disconnected shortly.  Check %s for updates."
 msgstr "Zakrátko môžete byť odpojený. Skontrolujte aktualizácie na %s."
 
-#: ../libpurple/protocols/oscar/oscar.c:1630
+#: ../libpurple/protocols/oscar/oscar.c:1623
 msgid "Unable to get a valid login hash."
 msgstr "Nebolo možné získať platný prihlasovací hash."
 
-#: ../libpurple/protocols/oscar/oscar.c:1659
+#: ../libpurple/protocols/oscar/oscar.c:1652
 msgid "Password sent"
 msgstr "Heslo odoslané"
 
-#: ../libpurple/protocols/oscar/oscar.c:1715
+#: ../libpurple/protocols/oscar/oscar.c:1708
 msgid "Unable to initialize connection"
 msgstr "Spojenie sa nedá inicializovať"
 
-#: ../libpurple/protocols/oscar/oscar.c:2220
+#: ../libpurple/protocols/oscar/oscar.c:2212
 msgid "Please authorize me so I can add you to my buddy list."
 msgstr ""
 "Prosím, autorizujte ma, aby som si vás mohol pridať do svojho zoznamu "
 "priateľov."
 
-#: ../libpurple/protocols/oscar/oscar.c:2248
+#: ../libpurple/protocols/oscar/oscar.c:2240
 msgid "Authorization Request Message:"
 msgstr "Žiadosť o autorizáciu:"
 
-#: ../libpurple/protocols/oscar/oscar.c:2249
+#: ../libpurple/protocols/oscar/oscar.c:2241
 msgid "Please authorize me!"
 msgstr "Autorizujte ma, prosím!"
 
+#: ../libpurple/protocols/oscar/oscar.c:2282
+#: ../libpurple/protocols/oscar/oscar.c:2290
+#: ../libpurple/protocols/oscar/oscar.c:2417
+#: ../libpurple/protocols/oscar/oscar.c:5211
+#: ../libpurple/protocols/yahoo/yahoo.c:1014
+msgid "No reason given."
+msgstr "Nebol uvedený dôvod."
+
 #: ../libpurple/protocols/oscar/oscar.c:2289
-#: ../libpurple/protocols/oscar/oscar.c:2296
-#: ../libpurple/protocols/oscar/oscar.c:2423
-#: ../libpurple/protocols/oscar/oscar.c:5242
-#: ../libpurple/protocols/yahoo/yahoo.c:987
-msgid "No reason given."
-msgstr "Nebol uvedený dôvod."
-
-#: ../libpurple/protocols/oscar/oscar.c:2295
 msgid "Authorization Denied Message:"
 msgstr "Správa zamietnutia autorizácie:"
 
-#: ../libpurple/protocols/oscar/oscar.c:2423
+#: ../libpurple/protocols/oscar/oscar.c:2417
 #, c-format
 msgid ""
 "The user %u has denied your request to add them to your buddy list for the "
@@ -6997,18 +7181,18 @@
 "nasledujúcich dôvodov:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2424
+#: ../libpurple/protocols/oscar/oscar.c:2418
 msgid "ICQ authorization denied."
 msgstr "ICQ autorizácia zamietnutá."
 
 #. Someone has granted you authorization
-#: ../libpurple/protocols/oscar/oscar.c:2431
+#: ../libpurple/protocols/oscar/oscar.c:2425
 #, c-format
 msgid "The user %u has granted your request to add them to your buddy list."
 msgstr ""
 "Používateľ %u prijal vašu požiadavku o pridanie do vášho zoznamu priateľov."
 
-#: ../libpurple/protocols/oscar/oscar.c:2439
+#: ../libpurple/protocols/oscar/oscar.c:2433
 #, c-format
 msgid ""
 "You have received a special message\n"
@@ -7021,7 +7205,7 @@
 "od: %s [%s]\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2447
+#: ../libpurple/protocols/oscar/oscar.c:2441
 #, c-format
 msgid ""
 "You have received an ICQ page\n"
@@ -7034,7 +7218,7 @@
 "od: %s [%s]\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2455
+#: ../libpurple/protocols/oscar/oscar.c:2449
 #, c-format
 msgid ""
 "You have received an ICQ e-mail from %s [%s]\n"
@@ -7047,24 +7231,24 @@
 "Správa je:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2476
+#: ../libpurple/protocols/oscar/oscar.c:2470
 #, c-format
 msgid "ICQ user %u has sent you a buddy: %s (%s)"
 msgstr "Používateľ protokolu ICQ, %u, vám poslal priateľa: %s (%s)"
 
-#: ../libpurple/protocols/oscar/oscar.c:2482
+#: ../libpurple/protocols/oscar/oscar.c:2476
 msgid "Do you want to add this buddy to your buddy list?"
 msgstr "Chcete pridať tohoto priateľa do svojho zoznamu priateľov?"
 
-#: ../libpurple/protocols/oscar/oscar.c:2487 ../pidgin/gtkroomlist.c:308
+#: ../libpurple/protocols/oscar/oscar.c:2481 ../pidgin/gtkroomlist.c:308
 msgid "_Add"
 msgstr "_Pridať"
 
-#: ../libpurple/protocols/oscar/oscar.c:2488
+#: ../libpurple/protocols/oscar/oscar.c:2482
 msgid "_Decline"
 msgstr "Odmietnuť"
 
-#: ../libpurple/protocols/oscar/oscar.c:2572
+#: ../libpurple/protocols/oscar/oscar.c:2566
 #, c-format
 msgid "You missed %hu message from %s because it was invalid."
 msgid_plural "You missed %hu messages from %s because they were invalid."
@@ -7072,7 +7256,7 @@
 msgstr[1] "Prišli ste o %hu správu od používateľa %s, pretože bola chybná."
 msgstr[2] "Prišli ste o %hu správy od používateľa %s, pretože boli chybné."
 
-#: ../libpurple/protocols/oscar/oscar.c:2581
+#: ../libpurple/protocols/oscar/oscar.c:2575
 #, c-format
 msgid "You missed %hu message from %s because it was too large."
 msgid_plural "You missed %hu messages from %s because they were too large."
@@ -7083,7 +7267,7 @@
 msgstr[2] ""
 "Prišli ste o %hu správy od používateľa %s, pretože boli príliš veľké."
 
-#: ../libpurple/protocols/oscar/oscar.c:2590
+#: ../libpurple/protocols/oscar/oscar.c:2584
 #, c-format
 msgid ""
 "You missed %hu message from %s because the rate limit has been exceeded."
@@ -7099,7 +7283,7 @@
 "Prišli ste o %hu správy od používateľa %s, pretože bol prekročený limit "
 "hodnotenia."
 
-#: ../libpurple/protocols/oscar/oscar.c:2599
+#: ../libpurple/protocols/oscar/oscar.c:2593
 #, c-format
 msgid "You missed %hu message from %s because he/she was too evil."
 msgid_plural "You missed %hu messages from %s because he/she was too evil."
@@ -7107,7 +7291,7 @@
 msgstr[1] "Prišli ste o %hu správu od používateľa %s, pretože je príliš zlý."
 msgstr[2] "Prišli ste o %hu správy od používateľa %s, pretože je príliš zlý."
 
-#: ../libpurple/protocols/oscar/oscar.c:2608
+#: ../libpurple/protocols/oscar/oscar.c:2602
 #, c-format
 msgid "You missed %hu message from %s because you are too evil."
 msgid_plural "You missed %hu messages from %s because you are too evil."
@@ -7115,7 +7299,7 @@
 msgstr[1] "Prišli ste o %hu správu od používateľa %s, pretože ste príliš zlý."
 msgstr[2] "Prišli ste o %hu správy od používateľa %s, pretože ste príliš zlý."
 
-#: ../libpurple/protocols/oscar/oscar.c:2617
+#: ../libpurple/protocols/oscar/oscar.c:2611
 #, c-format
 msgid "You missed %hu message from %s for an unknown reason."
 msgid_plural "You missed %hu messages from %s for an unknown reason."
@@ -7124,55 +7308,55 @@
 msgstr[2] "Z neznámeho dôvodu ste prišli o %hu správy od používateľa %s."
 
 #. Data is assumed to be the destination sn
-#: ../libpurple/protocols/oscar/oscar.c:2772
+#: ../libpurple/protocols/oscar/oscar.c:2766
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Nepodarilo sa odoslať správu: %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2772
-#: ../libpurple/protocols/oscar/oscar.c:2777
-#: ../libpurple/protocols/oscar/oscar.c:2841
+#: ../libpurple/protocols/oscar/oscar.c:2766
+#: ../libpurple/protocols/oscar/oscar.c:2771
+#: ../libpurple/protocols/oscar/oscar.c:2835
 msgid "Unknown reason."
 msgstr "Neznámy dôvod."
 
-#: ../libpurple/protocols/oscar/oscar.c:2775
+#: ../libpurple/protocols/oscar/oscar.c:2769
 #: ../libpurple/protocols/sametime/sametime.c:2409
 #, c-format
 msgid "Unable to send message to %s:"
 msgstr "Nepodarilo sa odoslať správu používateľovi %s:"
 
-#: ../libpurple/protocols/oscar/oscar.c:2841
+#: ../libpurple/protocols/oscar/oscar.c:2835
 #, c-format
 msgid "User information not available: %s"
 msgstr "Podrobnosti o používateľovi nie sú dostupné: %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:2872
+#: ../libpurple/protocols/oscar/oscar.c:2866
 msgid "Online Since"
 msgstr "Pripojený od"
 
-#: ../libpurple/protocols/oscar/oscar.c:2877
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1161
+#: ../libpurple/protocols/oscar/oscar.c:2871
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1185
 msgid "Member Since"
 msgstr "Členom od"
 
-#: ../libpurple/protocols/oscar/oscar.c:2882
+#: ../libpurple/protocols/oscar/oscar.c:2876
 msgid "Capabilities"
 msgstr "Schopnosti"
 
-#: ../libpurple/protocols/oscar/oscar.c:2912
+#: ../libpurple/protocols/oscar/oscar.c:2906
 msgid "Available Message"
 msgstr "Dostupná správa"
 
-#: ../libpurple/protocols/oscar/oscar.c:2940
+#: ../libpurple/protocols/oscar/oscar.c:2934
 msgid "Profile"
 msgstr "Profil"
 
-#: ../libpurple/protocols/oscar/oscar.c:3020
+#: ../libpurple/protocols/oscar/oscar.c:3014
 msgid "Your AIM connection may be lost."
 msgstr "Vaše AIM pripojenie môže byť stratené."
 
 #. The conversion failed!
-#: ../libpurple/protocols/oscar/oscar.c:3208
+#: ../libpurple/protocols/oscar/oscar.c:3202
 msgid ""
 "[Unable to display a message from this user because it contained invalid "
 "characters.]"
@@ -7180,7 +7364,7 @@
 "[Správa od používateľa obsahovala nesprávne znaky, preto ju nebolo možné "
 "zobraziť.]"
 
-#: ../libpurple/protocols/oscar/oscar.c:3411
+#: ../libpurple/protocols/oscar/oscar.c:3366
 msgid ""
 "The last action you attempted could not be performed because you are over "
 "the rate limit. Please wait 10 seconds and try again."
@@ -7188,57 +7372,53 @@
 "Akciu nebolo možné vykonať, pretože ste prekročili limit hodnotenia. Prosím, "
 "počkajte 10 sekúnd a skúste to znovu."
 
-#: ../libpurple/protocols/oscar/oscar.c:3483
-msgid "You have been signed off for an unknown reason."
-msgstr "Z neznámeho dôvodu ste boli odhlásení."
-
-#: ../libpurple/protocols/oscar/oscar.c:3496
+#: ../libpurple/protocols/oscar/oscar.c:3449
 #: ../libpurple/protocols/toc/toc.c:977
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Boli ste odpojení z miestnosti %s."
 
-#: ../libpurple/protocols/oscar/oscar.c:3743
+#: ../libpurple/protocols/oscar/oscar.c:3697
 #: ../libpurple/protocols/silc/util.c:585
 #: ../libpurple/protocols/silc10/util.c:581
 msgid "Mobile Phone"
 msgstr "Mobilný telefón"
 
-#: ../libpurple/protocols/oscar/oscar.c:3773
+#: ../libpurple/protocols/oscar/oscar.c:3727
 msgid "Personal Web Page"
 msgstr "Osobná web stránka"
 
-#: ../libpurple/protocols/oscar/oscar.c:3797
+#: ../libpurple/protocols/oscar/oscar.c:3751
 #: ../libpurple/protocols/qq/buddy_info.c:40
 msgid "Additional Information"
 msgstr "Rozširujúce informácie"
 
-#: ../libpurple/protocols/oscar/oscar.c:3805
-#: ../libpurple/protocols/oscar/oscar.c:3818
+#: ../libpurple/protocols/oscar/oscar.c:3759
+#: ../libpurple/protocols/oscar/oscar.c:3772
 msgid "Zip Code"
 msgstr "Zip kód"
 
-#: ../libpurple/protocols/oscar/oscar.c:3829
+#: ../libpurple/protocols/oscar/oscar.c:3783
 msgid "Division"
 msgstr "Oddelenie"
 
-#: ../libpurple/protocols/oscar/oscar.c:3830
+#: ../libpurple/protocols/oscar/oscar.c:3784
 msgid "Position"
 msgstr "Pozícia"
 
-#: ../libpurple/protocols/oscar/oscar.c:3832
+#: ../libpurple/protocols/oscar/oscar.c:3786
 msgid "Web Page"
 msgstr "Webstránka"
 
-#: ../libpurple/protocols/oscar/oscar.c:3835
+#: ../libpurple/protocols/oscar/oscar.c:3789
 msgid "Work Information"
 msgstr "Pracovné informácie"
 
-#: ../libpurple/protocols/oscar/oscar.c:3891
+#: ../libpurple/protocols/oscar/oscar.c:3845
 msgid "Pop-Up Message"
 msgstr "Vyskakovacia správa"
 
-#: ../libpurple/protocols/oscar/oscar.c:3931
+#: ../libpurple/protocols/oscar/oscar.c:3885
 #, c-format
 msgid "The following screen name is associated with %s"
 msgid_plural "The following screen names are associated with %s"
@@ -7246,29 +7426,29 @@
 msgstr[1] "S %s je asociované nasledujúce používateľské meno"
 msgstr[2] "S %s sú asociované nasledujúce používateľské mená"
 
-#: ../libpurple/protocols/oscar/oscar.c:3936
+#: ../libpurple/protocols/oscar/oscar.c:3890
 msgid "Screen name"
 msgstr "Používateľské meno"
 
-#: ../libpurple/protocols/oscar/oscar.c:3962
+#: ../libpurple/protocols/oscar/oscar.c:3916
 #, c-format
 msgid "No results found for e-mail address %s"
 msgstr "Pre e-mailovú %s adresu neboli nájdené žiadne výsledky"
 
-#: ../libpurple/protocols/oscar/oscar.c:3983
+#: ../libpurple/protocols/oscar/oscar.c:3937
 #, c-format
 msgid "You should receive an e-mail asking to confirm %s."
 msgstr "Mali by ste prijať e-mail so žiadosťou o potvrdenie %s."
 
-#: ../libpurple/protocols/oscar/oscar.c:3985
+#: ../libpurple/protocols/oscar/oscar.c:3939
 msgid "Account Confirmation Requested"
 msgstr "Podvrdenie účtu bolo vyžiadané"
 
-#: ../libpurple/protocols/oscar/oscar.c:4016
+#: ../libpurple/protocols/oscar/oscar.c:3970
 msgid "Error Changing Account Info"
 msgstr "Chyba pri zmene podrobností účtu"
 
-#: ../libpurple/protocols/oscar/oscar.c:4019
+#: ../libpurple/protocols/oscar/oscar.c:3973
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to format screen name because the requested screen name "
@@ -7277,13 +7457,13 @@
 "Chyba 0x%04x: Nepodarilo sa formátovať používateľské meno, pretože "
 "požadované používateľské meno sa líši od pôvodného."
 
-#: ../libpurple/protocols/oscar/oscar.c:4022
+#: ../libpurple/protocols/oscar/oscar.c:3976
 #, c-format
 msgid "Error 0x%04x: Unable to format screen name because it is invalid."
 msgstr ""
 "Chyba 0x%04x: Nepodarilo sa formátovať používateľské meno, pretože je chybné."
 
-#: ../libpurple/protocols/oscar/oscar.c:4025
+#: ../libpurple/protocols/oscar/oscar.c:3979
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to format screen name because the requested screen name "
@@ -7292,7 +7472,7 @@
 "Chyba 0x%04x: Nepodarilo sa formátovať používateľské meno, pretože "
 "požadované používateľské meno je príliš dlhé."
 
-#: ../libpurple/protocols/oscar/oscar.c:4028
+#: ../libpurple/protocols/oscar/oscar.c:3982
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change e-mail address because there is already a "
@@ -7301,7 +7481,7 @@
 "Chyba 0x%04x: Nepodarilo sa zmeniť e-mailovú adresu, pretože toto "
 "používateľské meno už má požiadavku."
 
-#: ../libpurple/protocols/oscar/oscar.c:4031
+#: ../libpurple/protocols/oscar/oscar.c:3985
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change e-mail address because the given address has "
@@ -7310,7 +7490,7 @@
 "Chyba 0x%04x: e-mailová adresa sa nedá zmeniť, pretože daná adresa má so "
 "sebou asociovaných veľmi veľa zobrazovaných mien."
 
-#: ../libpurple/protocols/oscar/oscar.c:4034
+#: ../libpurple/protocols/oscar/oscar.c:3988
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change e-mail address because the given address is "
@@ -7319,32 +7499,32 @@
 "Chyba 0x%04x: Nepodarilo sa zmeniť e-mailovú adresu, pretože zadaná adresa "
 "je chybná."
 
-#: ../libpurple/protocols/oscar/oscar.c:4037
+#: ../libpurple/protocols/oscar/oscar.c:3991
 #, c-format
 msgid "Error 0x%04x: Unknown error."
 msgstr "Chyba 0x%04x: Neznáma chyba."
 
-#: ../libpurple/protocols/oscar/oscar.c:4047
+#: ../libpurple/protocols/oscar/oscar.c:4001
 #, c-format
 msgid "The e-mail address for %s is %s"
 msgstr "E-mailová adresa používateľa %s je %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:4049
+#: ../libpurple/protocols/oscar/oscar.c:4003
 msgid "Account Info"
 msgstr "Podrobnosti o účte"
 
-#: ../libpurple/protocols/oscar/oscar.c:4221
+#: ../libpurple/protocols/oscar/oscar.c:4175
 msgid ""
 "Your IM Image was not sent. You must be Direct Connected to send IM Images."
 msgstr ""
 "Váš obrázok nebol odoslaný. Na odosielanie obrázkov v správach musíte byť "
 "priamo pripojený."
 
-#: ../libpurple/protocols/oscar/oscar.c:4487
+#: ../libpurple/protocols/oscar/oscar.c:4446
 msgid "Unable to set AIM profile."
 msgstr "Nepodarilo sa odoslať AIM profil."
 
-#: ../libpurple/protocols/oscar/oscar.c:4488
+#: ../libpurple/protocols/oscar/oscar.c:4447
 msgid ""
 "You have probably requested to set your profile before the login procedure "
 "completed.  Your profile remains unset; try setting it again when you are "
@@ -7354,7 +7534,7 @@
 "procedúry prihlásenia. Váš profil zostáva nenastavený, skúste ho nastaviť "
 "znovu, keď budete plne pripojený."
 
-#: ../libpurple/protocols/oscar/oscar.c:4502
+#: ../libpurple/protocols/oscar/oscar.c:4461
 #, c-format
 msgid ""
 "The maximum profile length of %d byte has been exceeded.  It has been "
@@ -7363,17 +7543,20 @@
 "The maximum profile length of %d bytes has been exceeded.  It has been "
 "truncated for you."
 msgstr[0] ""
-"Maximálna dĺžka profilu, %d bajtov, bola prekročená.  Profil bol automaticky skrátený."
+"Maximálna dĺžka profilu, %d bajtov, bola prekročená.  Profil bol automaticky "
+"skrátený."
 msgstr[1] ""
-"Maximálna dĺžka profilu, %d bajt, bola prekročená.  Profil bol automaticky skrátený."
+"Maximálna dĺžka profilu, %d bajt, bola prekročená.  Profil bol automaticky "
+"skrátený."
 msgstr[2] ""
-"Maximálna dĺžka profilu, %d bajty, bola prekročená.  Profil bol automaticky skrátený."
-
-#: ../libpurple/protocols/oscar/oscar.c:4507
+"Maximálna dĺžka profilu, %d bajty, bola prekročená.  Profil bol automaticky "
+"skrátený."
+
+#: ../libpurple/protocols/oscar/oscar.c:4466
 msgid "Profile too long."
 msgstr "Profil je príliš dlhý."
 
-#: ../libpurple/protocols/oscar/oscar.c:4552
+#: ../libpurple/protocols/oscar/oscar.c:4511
 #, c-format
 msgid ""
 "The maximum away message length of %d byte has been exceeded.  It has been "
@@ -7382,56 +7565,57 @@
 "The maximum away message length of %d bytes has been exceeded.  It has been "
 "truncated for you."
 msgstr[0] ""
-"Maximálna dĺžka správy neprítomnosti, %d bajtov, bola prekročená.  Správa bola automaticky skrátená."
+"Maximálna dĺžka správy neprítomnosti, %d bajtov, bola prekročená.  Správa "
+"bola automaticky skrátená."
 msgstr[1] ""
-"Maximálna dĺžka správy neprítomnosti, %d bajt, bola prekročená.  Správa bola automaticky skrátená."
+"Maximálna dĺžka správy neprítomnosti, %d bajt, bola prekročená.  Správa bola "
+"automaticky skrátená."
 msgstr[2] ""
-"Maximálna dĺžka správy neprítomnosti, %d bajty, bola prekročená.  Správa bola automaticky skrátená."
-
-#: ../libpurple/protocols/oscar/oscar.c:4557
+"Maximálna dĺžka správy neprítomnosti, %d bajty, bola prekročená.  Správa "
+"bola automaticky skrátená."
+
+#: ../libpurple/protocols/oscar/oscar.c:4516
 msgid "Away message too long."
 msgstr "Správa neprítomnosti je príliš dlhá."
 
-#: ../libpurple/protocols/oscar/oscar.c:4626
+#: ../libpurple/protocols/oscar/oscar.c:4585
 #, c-format
 msgid ""
 "Could not add the buddy %s because the screen name is invalid.  Screen names "
 "must be a valid email address, or start with a letter and contain only "
 "letters, numbers and spaces, or contain only numbers."
 msgstr ""
-"Nepodarilo sa pridať priateľa %s, pretože "
-"používateľské meno je chybné.  Používateľské mená musia byť v tvare "
-"e-mailovej adresy, čísla, alebo musí byť prvý znak písmeno a ostatné znaky "
-"sú písmená, čísla a medzery."
-
-#: ../libpurple/protocols/oscar/oscar.c:4628
-#: ../libpurple/protocols/oscar/oscar.c:5051
-#: ../libpurple/protocols/oscar/oscar.c:5066
+"Nepodarilo sa pridať priateľa %s, pretože používateľské meno je chybné.  "
+"Používateľské mená musia byť v tvare e-mailovej adresy, čísla, alebo musí "
+"byť prvý znak písmeno a ostatné znaky sú písmená, čísla a medzery."
+
+#: ../libpurple/protocols/oscar/oscar.c:4587
+#: ../libpurple/protocols/oscar/oscar.c:5020
+#: ../libpurple/protocols/oscar/oscar.c:5035
 msgid "Unable To Add"
 msgstr "Nepodarilo sa pridať"
 
-#: ../libpurple/protocols/oscar/oscar.c:4732
+#: ../libpurple/protocols/oscar/oscar.c:4696
 msgid "Unable To Retrieve Buddy List"
 msgstr "Nepodarilo sa získať zoznam priateľov"
 
-#: ../libpurple/protocols/oscar/oscar.c:4733
+#: ../libpurple/protocols/oscar/oscar.c:4697
 msgid ""
 "The AIM servers were temporarily unable to send your buddy list.  Your buddy "
 "list is not lost, and will probably become available in a few hours."
 msgstr ""
-"AIM servery vám dočasne neposlali váš zoznam priateľov.  Váš zoznam priateľov "
-"nie je stratený, a mal by byť znovu dostupný o pár hodín."
-
-#: ../libpurple/protocols/oscar/oscar.c:4937
-#: ../libpurple/protocols/oscar/oscar.c:4938
-#: ../libpurple/protocols/oscar/oscar.c:4943
-#: ../libpurple/protocols/oscar/oscar.c:5120
-#: ../libpurple/protocols/oscar/oscar.c:5121
-#: ../libpurple/protocols/oscar/oscar.c:5126
+"AIM servery vám dočasne neposlali váš zoznam priateľov.  Váš zoznam "
+"priateľov nie je stratený, a mal by byť znovu dostupný o pár hodín."
+
+#: ../libpurple/protocols/oscar/oscar.c:4879
+#: ../libpurple/protocols/oscar/oscar.c:4881
+#: ../libpurple/protocols/oscar/oscar.c:5089
+#: ../libpurple/protocols/oscar/oscar.c:5090
+#: ../libpurple/protocols/oscar/oscar.c:5095
 msgid "Orphans"
 msgstr "Siroty"
 
-#: ../libpurple/protocols/oscar/oscar.c:5049
+#: ../libpurple/protocols/oscar/oscar.c:5018
 #, c-format
 msgid ""
 "Could not add the buddy %s because you have too many buddies in your buddy "
@@ -7440,17 +7624,17 @@
 "Nepodarilo sa pridať priateľa %s, pretože vo vašom zozname priateľov máte "
 "príliš veľa priateľov.  Odstránte, prosím, jedného a skúste to znovu"
 
-#: ../libpurple/protocols/oscar/oscar.c:5049
-#: ../libpurple/protocols/oscar/oscar.c:5064
+#: ../libpurple/protocols/oscar/oscar.c:5018
+#: ../libpurple/protocols/oscar/oscar.c:5033
 msgid "(no name)"
 msgstr "(bez názvu)"
 
-#: ../libpurple/protocols/oscar/oscar.c:5063
+#: ../libpurple/protocols/oscar/oscar.c:5032
 #, c-format
 msgid "Could not add the buddy %s for an unknown reason."
 msgstr "Nebolo možné pridať priateľa %s z neznámeho dôvodu."
 
-#: ../libpurple/protocols/oscar/oscar.c:5157
+#: ../libpurple/protocols/oscar/oscar.c:5126
 #, c-format
 msgid ""
 "The user %s has given you permission to add you to their buddy list.  Do you "
@@ -7459,22 +7643,22 @@
 "Používateľ %s vám udelil oprávnenie, aby si vás mohol pridať do svojho "
 "zoznamu kamarátov. Chcete pridať jeho do svojho?"
 
-#: ../libpurple/protocols/oscar/oscar.c:5165
+#: ../libpurple/protocols/oscar/oscar.c:5134
 msgid "Authorization Given"
 msgstr "Udelená autorizácia"
 
 #. Granted
-#: ../libpurple/protocols/oscar/oscar.c:5238
+#: ../libpurple/protocols/oscar/oscar.c:5207
 #, c-format
 msgid "The user %s has granted your request to add them to your buddy list."
 msgstr "Používateľ %s vám dovolil pridať ho do vášho zoznamu priateľov."
 
-#: ../libpurple/protocols/oscar/oscar.c:5239
+#: ../libpurple/protocols/oscar/oscar.c:5208
 msgid "Authorization Granted"
 msgstr "Udelená autorizácia"
 
 #. Denied
-#: ../libpurple/protocols/oscar/oscar.c:5242
+#: ../libpurple/protocols/oscar/oscar.c:5211
 #, c-format
 msgid ""
 "The user %s has denied your request to add them to your buddy list for the "
@@ -7485,52 +7669,52 @@
 "nasledujúceho dôvodu:\n"
 "%s"
 
-#: ../libpurple/protocols/oscar/oscar.c:5243
+#: ../libpurple/protocols/oscar/oscar.c:5212
 msgid "Authorization Denied"
 msgstr "Autorizácia zamietnutá"
 
-#: ../libpurple/protocols/oscar/oscar.c:5279
+#: ../libpurple/protocols/oscar/oscar.c:5248
 #: ../libpurple/protocols/toc/toc.c:1371
 msgid "_Exchange:"
 msgstr "_Výmena:"
 
-#: ../libpurple/protocols/oscar/oscar.c:5319
+#: ../libpurple/protocols/oscar/oscar.c:5288
 msgid "Invalid chat name specified."
 msgstr "Bol zadaný chybný názov chatu."
 
-#: ../libpurple/protocols/oscar/oscar.c:5388
+#: ../libpurple/protocols/oscar/oscar.c:5357
 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats."
 msgstr ""
 "Váš obrázok nebol odoslaný. V AIM chatoch nie je možné odosielať obrázky."
 
-#: ../libpurple/protocols/oscar/oscar.c:5548
-#: ../libpurple/protocols/oscar/oscar.c:5553
+#: ../libpurple/protocols/oscar/oscar.c:5517
+#: ../libpurple/protocols/oscar/oscar.c:5522
 msgid "Away Message"
 msgstr "Správa o neprítomnosti"
 
-#: ../libpurple/protocols/oscar/oscar.c:5553
+#: ../libpurple/protocols/oscar/oscar.c:5522
 msgid "<i>(retrieving)</i>"
 msgstr "<i>(prijíma sa)</i>"
 
-#: ../libpurple/protocols/oscar/oscar.c:5753
+#: ../libpurple/protocols/oscar/oscar.c:5722
 msgid "iTunes Music Store Link"
 msgstr "Odkaz na hudobný obchod iTunes"
 
-#: ../libpurple/protocols/oscar/oscar.c:5861
+#: ../libpurple/protocols/oscar/oscar.c:5830
 #, c-format
 msgid "Buddy Comment for %s"
 msgstr "Komentár priateľa %s"
 
-#: ../libpurple/protocols/oscar/oscar.c:5862
+#: ../libpurple/protocols/oscar/oscar.c:5831
 msgid "Buddy Comment:"
 msgstr "Komentár priateľa:"
 
-#: ../libpurple/protocols/oscar/oscar.c:5909
+#: ../libpurple/protocols/oscar/oscar.c:5878
 #, c-format
 msgid "You have selected to open a Direct IM connection with %s."
 msgstr "Rozhodli ste sa otvoriť Priame IM pripojenie s používateľom %s."
 
-#: ../libpurple/protocols/oscar/oscar.c:5913
+#: ../libpurple/protocols/oscar/oscar.c:5882
 msgid ""
 "Because this reveals your IP address, it may be considered a security risk.  "
 "Do you wish to continue?"
@@ -7538,65 +7722,65 @@
 "Táto akcia odhalí vašu IP adresu, a preto môže byť hodnotená ako "
 "bezpečnostné riziko.  Chcete pokračovať?"
 
-#: ../libpurple/protocols/oscar/oscar.c:5919
+#: ../libpurple/protocols/oscar/oscar.c:5888
 #: ../libpurple/protocols/oscar/peer.c:1022
 msgid "C_onnect"
 msgstr "Prip_ojiť"
 
-#: ../libpurple/protocols/oscar/oscar.c:5954
+#: ../libpurple/protocols/oscar/oscar.c:5923
 msgid "Get AIM Info"
 msgstr "Získať info AIM"
 
-#: ../libpurple/protocols/oscar/oscar.c:5960
+#: ../libpurple/protocols/oscar/oscar.c:5929
 msgid "Edit Buddy Comment"
 msgstr "Upraviť komentár priateľa"
 
-#: ../libpurple/protocols/oscar/oscar.c:5968
+#: ../libpurple/protocols/oscar/oscar.c:5937
 msgid "Get Status Msg"
 msgstr "Získať správu o stave"
 
-#: ../libpurple/protocols/oscar/oscar.c:5981
+#: ../libpurple/protocols/oscar/oscar.c:5950
 msgid "Direct IM"
 msgstr "Priame IM"
 
-#: ../libpurple/protocols/oscar/oscar.c:6003
+#: ../libpurple/protocols/oscar/oscar.c:5972
 msgid "Re-request Authorization"
 msgstr "Znovu požiadať o autorizáciu"
 
-#: ../libpurple/protocols/oscar/oscar.c:6062
+#: ../libpurple/protocols/oscar/oscar.c:6031
 msgid "Require authorization"
 msgstr "Vyžadovať autorizáciu"
 
-#: ../libpurple/protocols/oscar/oscar.c:6065
+#: ../libpurple/protocols/oscar/oscar.c:6034
 msgid "Web aware (enabling this will cause you to receive SPAM!)"
 msgstr "Web aware (zapnutie tejto možnosti spôsobí, že budete dostávať SPAM!)"
 
-#: ../libpurple/protocols/oscar/oscar.c:6070
+#: ../libpurple/protocols/oscar/oscar.c:6039
 msgid "ICQ Privacy Options"
 msgstr "Nastavenie súkromia ICQ"
 
-#: ../libpurple/protocols/oscar/oscar.c:6089
+#: ../libpurple/protocols/oscar/oscar.c:6058
 msgid "The new formatting is invalid."
 msgstr "Nové formátovanie je chybné."
 
-#: ../libpurple/protocols/oscar/oscar.c:6090
+#: ../libpurple/protocols/oscar/oscar.c:6059
 msgid "Screen name formatting can change only capitalization and whitespace."
 msgstr ""
 "Formátovanie používateľského mena smie obsahovať len písmená a medzery."
 
-#: ../libpurple/protocols/oscar/oscar.c:6143
+#: ../libpurple/protocols/oscar/oscar.c:6112
 msgid "Change Address To:"
 msgstr "Zmeniť adresu na:"
 
-#: ../libpurple/protocols/oscar/oscar.c:6189
+#: ../libpurple/protocols/oscar/oscar.c:6158
 msgid "<i>you are not waiting for authorization</i>"
 msgstr "<i>nečakáte na autorizáciu</i>"
 
-#: ../libpurple/protocols/oscar/oscar.c:6192
+#: ../libpurple/protocols/oscar/oscar.c:6161
 msgid "You are awaiting authorization from the following buddies"
 msgstr "Očakávate autorizáciu od nasledujúcich priateľov"
 
-#: ../libpurple/protocols/oscar/oscar.c:6193
+#: ../libpurple/protocols/oscar/oscar.c:6162
 msgid ""
 "You can re-request authorization from these buddies by right-clicking on "
 "them and selecting \"Re-request Authorization.\""
@@ -7604,77 +7788,79 @@
 "Týchto priateľov môžete znovu požiadať o autorizáciu, keď na nich kliknete "
 "pravým tlačidlom a vyberiete možnosť \"Znovu požiadať o autorizáciu.\""
 
-#: ../libpurple/protocols/oscar/oscar.c:6210
+#: ../libpurple/protocols/oscar/oscar.c:6179
 msgid "Find Buddy by E-Mail"
 msgstr "Nájsť priateľa podľa E-mailu"
 
-#: ../libpurple/protocols/oscar/oscar.c:6211
+#: ../libpurple/protocols/oscar/oscar.c:6180
 msgid "Search for a buddy by e-mail address"
 msgstr "Vyhľadávať priateľov podľa e-mailovej adresy"
 
-#: ../libpurple/protocols/oscar/oscar.c:6212
+#: ../libpurple/protocols/oscar/oscar.c:6181
 msgid "Type the e-mail address of the buddy you are searching for."
 msgstr "Zadajte e-mailovú adresu priateľa, ktorého hľadáte."
 
-#: ../libpurple/protocols/oscar/oscar.c:6215
+#: ../libpurple/protocols/oscar/oscar.c:6184
 msgid "_Search"
 msgstr "_Hľadať"
 
-#: ../libpurple/protocols/oscar/oscar.c:6373
+#: ../libpurple/protocols/oscar/oscar.c:6342
 msgid "Set User Info (URL)..."
 msgstr "Nastaviť podrobnosti používateľa (URL)..."
 
-#: ../libpurple/protocols/oscar/oscar.c:6384
+#: ../libpurple/protocols/oscar/oscar.c:6353
 msgid "Change Password (URL)"
 msgstr "Zmeniť heslo (URL)"
 
-#: ../libpurple/protocols/oscar/oscar.c:6388
+#: ../libpurple/protocols/oscar/oscar.c:6357
 msgid "Configure IM Forwarding (URL)"
 msgstr "Konfiguravať preposielanie správ (URL)"
 
 #. ICQ actions
-#: ../libpurple/protocols/oscar/oscar.c:6398
+#: ../libpurple/protocols/oscar/oscar.c:6367
 msgid "Set Privacy Options..."
 msgstr "Nastaviť možnosti súkromia..."
 
 #. AIM actions
-#: ../libpurple/protocols/oscar/oscar.c:6405
+#: ../libpurple/protocols/oscar/oscar.c:6374
 msgid "Confirm Account"
 msgstr "Potvrdiť účet"
 
-#: ../libpurple/protocols/oscar/oscar.c:6409
+#: ../libpurple/protocols/oscar/oscar.c:6378
 msgid "Display Currently Registered E-Mail Address"
 msgstr "Zobraziť momentálne registrovanú e-maiovú adresu"
 
-#: ../libpurple/protocols/oscar/oscar.c:6413
+#: ../libpurple/protocols/oscar/oscar.c:6382
 msgid "Change Currently Registered E-Mail Address..."
 msgstr "Zmeniť momentálne registrovanú e-maiovú adresu..."
 
-#: ../libpurple/protocols/oscar/oscar.c:6420
+#: ../libpurple/protocols/oscar/oscar.c:6389
 msgid "Show Buddies Awaiting Authorization"
 msgstr "Zobraziť priateľov, ktorí čakajú na autorizáciu"
 
-#: ../libpurple/protocols/oscar/oscar.c:6426
+#: ../libpurple/protocols/oscar/oscar.c:6395
 msgid "Search for Buddy by E-Mail Address..."
 msgstr "Hľadať priateľa podľa e-maiovej adresy..."
 
-#: ../libpurple/protocols/oscar/oscar.c:6431
+#: ../libpurple/protocols/oscar/oscar.c:6400
 msgid "Search for Buddy by Information"
 msgstr "Hľadať priateľa podľa podrobností"
 
-#: ../libpurple/protocols/oscar/oscar.c:6499
+#: ../libpurple/protocols/oscar/oscar.c:6468
 msgid "Use recent buddies group"
 msgstr "Použiť naposledy použitú skupinu kamarátov"
 
-#: ../libpurple/protocols/oscar/oscar.c:6502
+#: ../libpurple/protocols/oscar/oscar.c:6471
 msgid "Show how long you have been idle"
 msgstr "Zobrazí ako dlho ste boli nečinní"
 
-#: ../libpurple/protocols/oscar/oscar.c:6657
+#: ../libpurple/protocols/oscar/oscar.c:6626
 msgid ""
 "Always use ICQ proxy server for file transfers\n"
 "(slower, but does not reveal your IP address)"
 msgstr ""
+"Vždy používať ICQ proxy server na prenosy súborov\n"
+"(pomalšie, ale neprezradí vašu IP adresu)"
 
 #: ../libpurple/protocols/oscar/peer.c:674
 #, c-format
@@ -7876,8 +8062,7 @@
 "Setting custom faces is not currently supported. Please choose an image from "
 "%s."
 msgstr ""
-"Nastavenie vlastných tvárí zatiaľ nefunguje. Prosím, vyberte si obrázok z "
-"%s."
+"Nastavenie vlastných tvárí zatiaľ nefunguje. Prosím, vyberte si obrázok z %s."
 
 #: ../libpurple/protocols/qq/buddy_info.c:577
 #: ../libpurple/protocols/qq/buddy_info.c:590
@@ -7891,7 +8076,6 @@
 msgstr "Odmietli ste požiadavku používateľa %d"
 
 #: ../libpurple/protocols/qq/buddy_opt.c:209
-#: ../libpurple/protocols/qq/group_opt.c:137
 msgid "Input your reason:"
 msgstr "Zadajte váš dôvod:"
 
@@ -7908,35 +8092,37 @@
 #: ../libpurple/protocols/qq/buddy_opt.c:214
 #: ../libpurple/protocols/qq/group_im.c:144
 #: ../libpurple/protocols/qq/group_opt.c:127
-#: ../libpurple/protocols/qq/sys_msg.c:91
-#: ../libpurple/protocols/qq/sys_msg.c:249
+#: ../libpurple/protocols/qq/sys_msg.c:90
+#: ../libpurple/protocols/qq/sys_msg.c:246
 msgid "Reject"
 msgstr "Odmietnuť"
 
 #: ../libpurple/protocols/qq/buddy_opt.c:277
-msgid "Add buddy with auth request fails"
+msgid "Add buddy with auth request failed"
 msgstr "Pridanie kamaráta s požiadavkou na autentifikáciu zlyhalo"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:308
+#. TODO: We don't really need to notify the user about this, do we?
+#: ../libpurple/protocols/qq/buddy_opt.c:309
 msgid "You have successfully removed a buddy"
 msgstr "Úspešne ste odstránili priateľa"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:336
-msgid "You have successfully removed yourself from a buddy"
-msgstr "Boli ste úspešne odstránený od kamaráta"
-
-#: ../libpurple/protocols/qq/buddy_opt.c:402
+#. TODO: Does the user really need to be notified about this?
+#: ../libpurple/protocols/qq/buddy_opt.c:338
+msgid "You have successfully removed yourself from your friend's buddy list"
+msgstr "Boli ste úspešne odstránený z priateľovho zoznamu kontaktov"
+
+#: ../libpurple/protocols/qq/buddy_opt.c:404
 #, c-format
 msgid "User %d needs authentication"
 msgstr "Používateľ %d vyžaduje autentifikáciu"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:404
+#: ../libpurple/protocols/qq/buddy_opt.c:406
 #: ../libpurple/protocols/qq/group_join.c:136
 msgid "Input request here"
 msgstr "Sem zadajte požiadavku"
 
 #. TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands
-#: ../libpurple/protocols/qq/buddy_opt.c:405
+#: ../libpurple/protocols/qq/buddy_opt.c:407
 #: ../libpurple/protocols/qq/group_join.c:137
 msgid "Would you be my friend?"
 msgstr "Chceš byť mojím priateľom?"
@@ -7944,22 +8130,22 @@
 #. multiline
 #. masked
 #. hint
-#: ../libpurple/protocols/qq/buddy_opt.c:406
+#: ../libpurple/protocols/qq/buddy_opt.c:408
 #: ../libpurple/protocols/qq/group_join.c:138
 #: ../libpurple/protocols/qq/group_opt.c:143
 msgid "Send"
 msgstr "Odoslať"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:416
-#, c-format
-msgid "You have added %d in buddy list"
-msgstr "Pridali ste %d do zoznamu kamarátov"
-
-#: ../libpurple/protocols/qq/buddy_opt.c:513
+#: ../libpurple/protocols/qq/buddy_opt.c:418
+#, c-format
+msgid "You have added %d to buddy list"
+msgstr "Pridali ste používateľa %d do zoznamu kamarátov"
+
+#: ../libpurple/protocols/qq/buddy_opt.c:515
 msgid "QQid Error"
 msgstr "Chyba QQid"
 
-#: ../libpurple/protocols/qq/buddy_opt.c:514
+#: ../libpurple/protocols/qq/buddy_opt.c:516
 msgid "Invalid QQid"
 msgstr "Nesprávne QQid"
 
@@ -7988,7 +8174,7 @@
 msgstr "QQ Qun"
 
 #: ../libpurple/protocols/qq/group.c:120
-msgid "Please input external group ID"
+msgid "Please enter external group ID"
 msgstr "Zadajte, prosím, ID externej skupiny"
 
 #: ../libpurple/protocols/qq/group.c:121
@@ -7997,12 +8183,12 @@
 
 #: ../libpurple/protocols/qq/group_im.c:126
 #, c-format
-msgid "User %d applied to join group %d"
-msgstr "Používateľ %d sa prihlásil pre pripojenie do skupiny %d"
+msgid "User %d requested to join group %d"
+msgstr "Používateľ %d požiadal o vstup do skupiny %d"
 
 #: ../libpurple/protocols/qq/group_im.c:127
 #: ../libpurple/protocols/qq/group_im.c:181
-#: ../libpurple/protocols/qq/sys_msg.c:195
+#: ../libpurple/protocols/qq/sys_msg.c:193
 #, c-format
 msgid "Reason: %s"
 msgstr "Dôvod: %s"
@@ -8022,40 +8208,40 @@
 
 #: ../libpurple/protocols/qq/group_im.c:141
 #: ../libpurple/protocols/qq/group_opt.c:128
-#: ../libpurple/protocols/qq/sys_msg.c:92
-#: ../libpurple/protocols/qq/sys_msg.c:251
+#: ../libpurple/protocols/qq/sys_msg.c:91
+#: ../libpurple/protocols/qq/sys_msg.c:248
 msgid "Approve"
 msgstr "Potvrdiť"
 
 #: ../libpurple/protocols/qq/group_im.c:180
 #, c-format
-msgid "You request to join group %d has been rejected by admin %d"
-msgstr ""
-"Vaša požiadavka pre zapojenie do skupiny %d bola odmietnutá administrátorom %"
+msgid "Your request to join group %d has been rejected by admin %d"
+msgstr ""
+"Vaša požiadavka pre vstup do skupiny %d bola odmietnutá administrátorom %"
 "d"
 
 #: ../libpurple/protocols/qq/group_im.c:221
 #, c-format
-msgid "You request to join group %d has been approved by admin %d"
-msgstr ""
-"Vaša požiadavka pre zapojenie do skupiny %d bola potvrdená administrátorom %d"
+msgid "Your request to join group %d has been approved by admin %d"
+msgstr ""
+"Vaša požiadavka pre vstup do skupiny %d bola vyhovená administrátorom %d"
 
 #: ../libpurple/protocols/qq/group_im.c:257
 #, c-format
-msgid "You [%d] has exit group \"%d\""
-msgstr "Opustili ste [%d] skupinu \"%d\""
+msgid "You [%d] have left group \"%d\""
+msgstr "[%d] Opustili ste skupinu \"%d\""
 
 #: ../libpurple/protocols/qq/group_im.c:291
 #, c-format
-msgid "You [%d] has been added by group \"%d\""
-msgstr "Boli ste [%d] pridaný skupinou \"%d\""
+msgid "You [%d] have been added to group \"%d\""
+msgstr "[%d] Boli ste pridaný do skupiny \"%d\""
 
 #: ../libpurple/protocols/qq/group_im.c:292
 msgid "This group has been added to your buddy list"
 msgstr "Skupina bola pridaná do vášho zoznamu priateľov"
 
 #: ../libpurple/protocols/qq/group_internal.c:41
-msgid "I am not member"
+msgid "I am not a member"
 msgstr "Nie som člen"
 
 #: ../libpurple/protocols/qq/group_internal.c:44
@@ -8079,7 +8265,7 @@
 msgstr "Skupina neumožňuje iným pripojiť sa"
 
 #: ../libpurple/protocols/qq/group_join.c:233
-msgid "You have successfully exited the group"
+msgid "You have successfully left the group"
 msgstr "Úspešne ste opustili skupinu"
 
 #: ../libpurple/protocols/qq/group_join.c:257
@@ -8087,15 +8273,15 @@
 msgstr "QQ Skupinová autentifikácia"
 
 #: ../libpurple/protocols/qq/group_join.c:258
-msgid "Your authorization operation has been accepted by the QQ server"
-msgstr "Vaša autorizačná operácia bola prijatá QQ serverom"
+msgid "Your authorization request has been accepted by the QQ server"
+msgstr "Vaša žiadosť o autorizáciu bola prijatá QQ serverom"
 
 #: ../libpurple/protocols/qq/group_join.c:329
-msgid "You inputted a group id outside the acceptable range"
-msgstr "Zadali ste id skupiny mimo prijateľného rozsahu"
+msgid "You entered a group ID outside the acceptable range"
+msgstr "Zadali ste ID skupiny mimo prijateľného rozsahu"
 
 #: ../libpurple/protocols/qq/group_join.c:360
-msgid "Are you sure to exit this Qun?"
+msgid "Are you sure you want to leave this Qun?"
 msgstr "Naozaj chcete opustiť toto Qun?"
 
 #: ../libpurple/protocols/qq/group_join.c:362
@@ -8106,10 +8292,6 @@
 "Ak ste tvorca, \n"
 "táto operácia nakoniec odstráni tento Qun."
 
-#: ../libpurple/protocols/qq/group_join.c:367
-msgid "Go ahead"
-msgstr "Pokračovať"
-
 #: ../libpurple/protocols/qq/group_network.c:92
 #, c-format
 msgid "Code [0x%02X]: %s"
@@ -8119,19 +8301,23 @@
 msgid "Group Operation Error"
 msgstr "Chyba skupinovej operácie"
 
-#. we wanna see window
+#. we want to see window
 #: ../libpurple/protocols/qq/group_opt.c:124
-#: ../libpurple/protocols/qq/sys_msg.c:88
-msgid "Do you wanna approve the request?"
+#: ../libpurple/protocols/qq/sys_msg.c:87
+msgid "Do you want to approve the request?"
 msgstr "Chcete potvrdiť požiadavku?"
 
+#: ../libpurple/protocols/qq/group_opt.c:137
+msgid "Enter your reason:"
+msgstr "Zadajte váš dôvod:"
+
 #: ../libpurple/protocols/qq/group_opt.c:235
-msgid "You have successfully modify Qun member"
+msgid "You have successfully modified Qun member"
 msgstr "Úspešne ste zmenili Qun číslo"
 
 #: ../libpurple/protocols/qq/group_opt.c:305
-msgid "You have successfully modify Qun information"
-msgstr "Úspešne ste zmenili informácie o Qun"
+msgid "You have successfully modified Qun information"
+msgstr "Úspešne ste zmenili Qun informácie"
 
 #: ../libpurple/protocols/qq/group_opt.c:392
 msgid "You have successfully created a Qun"
@@ -8150,20 +8336,16 @@
 msgstr "Systémová správa"
 
 #: ../libpurple/protocols/qq/im.c:576
-msgid "Server ACK"
-msgstr "Server ACK"
-
-#: ../libpurple/protocols/qq/im.c:576
 msgid "Failed to send IM."
 msgstr "Zlyhalo odoslanie IM."
 
 #: ../libpurple/protocols/qq/keep_alive.c:87
-msgid "Keep alive error, seems connection lost!"
-msgstr "Chyba spojenia, asi padlo spojenie!"
+msgid "Keep alive error"
+msgstr "Chyba keep alive"
 
 #: ../libpurple/protocols/qq/login_logout.c:408
-msgid "Request login token error!"
-msgstr "Vyžiadaná chyba pri prihlasovaní do tokenu!"
+msgid "Error requesting login token"
+msgstr "Chyba pri požadovaní prihlasovacieho tokenu"
 
 #: ../libpurple/protocols/qq/login_logout.c:486
 msgid "Unable to login, check debug log"
@@ -8182,96 +8364,83 @@
 msgid "Unknown-%d"
 msgstr "Neznáme-%d"
 
-#: ../libpurple/protocols/qq/qq.c:209
-#, c-format
-msgid "%s Address"
-msgstr "%s Adresa"
-
-#: ../libpurple/protocols/qq/qq.c:240
+#: ../libpurple/protocols/qq/qq.c:211
+msgid "TCP Address"
+msgstr "TCP adresa"
+
+#: ../libpurple/protocols/qq/qq.c:213
+msgid "UDP Address"
+msgstr "UDP adresa"
+
+#: ../libpurple/protocols/qq/qq.c:242
 msgid "Level"
 msgstr "Úroveň"
 
-#: ../libpurple/protocols/qq/qq.c:278
-msgid "QQ: Available"
-msgstr "QQ: Prítomný"
-
-#: ../libpurple/protocols/qq/qq.c:282
-msgid "QQ: Away"
-msgstr "QQ: Neprítomný"
-
-#: ../libpurple/protocols/qq/qq.c:286
-msgid "QQ: Invisible"
-msgstr "QQ: Neviditeľný"
-
-#: ../libpurple/protocols/qq/qq.c:290
-msgid "QQ: Offline"
-msgstr "QQ: Odpojený"
-
-#: ../libpurple/protocols/qq/qq.c:371
+#: ../libpurple/protocols/qq/qq.c:373
 msgid "Invalid name"
 msgstr "Chybný názov"
 
-#: ../libpurple/protocols/qq/qq.c:437
+#: ../libpurple/protocols/qq/qq.c:439
 #, c-format
 msgid "<b>Current Online</b>: %d<br>\n"
 msgstr "<b>Momenálne pripojený</b>: %d<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:438
+#: ../libpurple/protocols/qq/qq.c:440
 #, c-format
 msgid "<b>Last Refresh</b>: %s<br>\n"
 msgstr "<b>Naposledy obnovené</b>: %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:442
+#: ../libpurple/protocols/qq/qq.c:444
 #, c-format
 msgid "<b>Connection Mode</b>: %s<br>\n"
 msgstr "<b>Režim pripojenia</b>: %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:443
+#: ../libpurple/protocols/qq/qq.c:445
 #, c-format
 msgid "<b>Server IP</b>: %s: %d<br>\n"
 msgstr "<b>IP serveru</b>: %s: %d<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:444
+#: ../libpurple/protocols/qq/qq.c:446
 #, c-format
 msgid "<b>My Public IP</b>: %s<br>\n"
 msgstr "<b>Moja verejná IP</b>: %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:449
+#: ../libpurple/protocols/qq/qq.c:451
 #, c-format
 msgid "<b>Login Time</b>: %s<br>\n"
 msgstr "<b>Čas pripojenia</b>: %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:450
+#: ../libpurple/protocols/qq/qq.c:452
 #, c-format
 msgid "<b>Last Login IP</b>: %s<br>\n"
 msgstr "<b>Naposledy prihlásená IP</b>: %s<br>\n"
 
-#: ../libpurple/protocols/qq/qq.c:451
+#: ../libpurple/protocols/qq/qq.c:453
 #, c-format
 msgid "<b>Last Login Time</b>: %s\n"
 msgstr "<b>Čas posledného prihlásenia</b>: %s\n"
 
-#: ../libpurple/protocols/qq/qq.c:455
+#: ../libpurple/protocols/qq/qq.c:457
 msgid "Login Information"
 msgstr "Informácie o prihlasení"
 
-#: ../libpurple/protocols/qq/qq.c:531
-msgid "Modify My Information"
-msgstr "Upraviť moje podrobnosti"
-
-#: ../libpurple/protocols/qq/qq.c:534 ../libpurple/protocols/toc/toc.c:1680
+#: ../libpurple/protocols/qq/qq.c:533
+msgid "Set My Information"
+msgstr "Nastaviť moje informácie"
+
+#: ../libpurple/protocols/qq/qq.c:536 ../libpurple/protocols/toc/toc.c:1680
 msgid "Change Password"
 msgstr "Zmeniť heslo"
 
-#: ../libpurple/protocols/qq/qq.c:537
+#: ../libpurple/protocols/qq/qq.c:539
 msgid "Show Login Information"
 msgstr "Zobraziť informácie o prihlasení"
 
-#: ../libpurple/protocols/qq/qq.c:558
-msgid "Exit this QQ Qun"
-msgstr "Ukončiť tento QQ Qun"
-
-#: ../libpurple/protocols/qq/qq.c:582
+#: ../libpurple/protocols/qq/qq.c:560
+msgid "Leave this QQ Qun"
+msgstr "Opustiť toto QQ Qun"
+
+#: ../libpurple/protocols/qq/qq.c:584
 msgid "Block this buddy"
 msgstr "Blokovať tohoto priateľa"
 
@@ -8285,25 +8454,13 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../libpurple/protocols/qq/qq.c:723 ../libpurple/protocols/qq/qq.c:725
+#: ../libpurple/protocols/qq/qq.c:725 ../libpurple/protocols/qq/qq.c:727
 msgid "QQ Protocol\tPlugin"
 msgstr "QQ Protokol\tModul"
 
-#: ../libpurple/protocols/qq/qq.c:750
-msgid "Login in TCP"
-msgstr "Prihlásenie v TCP"
-
-#: ../libpurple/protocols/qq/qq.c:753
-msgid "Login Hidden"
-msgstr "Prihlasenie skryté"
-
-#: ../libpurple/protocols/qq/qq_proxy.c:497
-msgid "Socket send error"
-msgstr "Chyba odoslania soketu"
-
-#: ../libpurple/protocols/qq/qq_proxy.c:500
-msgid "Connection refused"
-msgstr "Spojenie odmietnuté"
+#: ../libpurple/protocols/qq/qq.c:752
+msgid "Connect using TCP"
+msgstr "Pripojiť sa pomocou TCP"
 
 #: ../libpurple/protocols/qq/recv_core.c:309
 msgid "Socket error"
@@ -8337,53 +8494,52 @@
 msgid "Login failed, no reply"
 msgstr "Prihlásenie zlyhalo, žiadna odpoveď"
 
-#: ../libpurple/protocols/qq/sys_msg.c:112
-msgid "Do you wanna add this buddy?"
+#: ../libpurple/protocols/qq/sys_msg.c:110
+msgid "Do you want to add this buddy?"
 msgstr "Chcete pridať tohoto priateľa?"
 
 #. only need to get value
-#: ../libpurple/protocols/qq/sys_msg.c:168
+#: ../libpurple/protocols/qq/sys_msg.c:166
 #, c-format
 msgid "You have been added by %s"
 msgstr "%s vás pridal"
 
-#: ../libpurple/protocols/qq/sys_msg.c:171
+#: ../libpurple/protocols/qq/sys_msg.c:169
 msgid "Would like to add him?"
 msgstr "Chcete ho pridať?"
 
-#: ../libpurple/protocols/qq/sys_msg.c:178
-#, c-format
-msgid "%s has added you [%s]"
-msgstr "%s vás pridal [%s]"
-
-#: ../libpurple/protocols/qq/sys_msg.c:194
+#: ../libpurple/protocols/qq/sys_msg.c:176
+#, c-format
+msgid "%s has added you [%s] to his or her buddy list"
+msgstr "Používateľ %s si vás [%s] pridal do svojho zoznamu priateľov"
+
+#: ../libpurple/protocols/qq/sys_msg.c:192
 #, c-format
 msgid "User %s rejected your request"
 msgstr "Používateľ %s odmietol vašu požiadavku"
 
-#: ../libpurple/protocols/qq/sys_msg.c:214
-#, c-format
-msgid "User %s has approved your request"
-msgstr "Používateľ %s potvrdil vašu požiadavku"
-
-#. TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze
+#: ../libpurple/protocols/qq/sys_msg.c:212
+#, c-format
+msgid "User %s approved your request"
+msgstr "Používateľ %s odsúhlasil vašu požiadavku"
+
 #. TODO: this should go through purple_account_request_authorization()
-#: ../libpurple/protocols/qq/sys_msg.c:241
-#, c-format
-msgid "%s wanna add you [%s] as friends"
-msgstr "%s vás chce pridať [%s] ako priateľa"
-
-#: ../libpurple/protocols/qq/sys_msg.c:242
+#: ../libpurple/protocols/qq/sys_msg.c:238
+#, c-format
+msgid "%s wants to add you [%s] as a friend"
+msgstr "%s chce pridať vás [%s] ako priateľa"
+
+#: ../libpurple/protocols/qq/sys_msg.c:239
 #, c-format
 msgid "Message: %s"
 msgstr "Správa: %s"
 
-#: ../libpurple/protocols/qq/sys_msg.c:264
+#: ../libpurple/protocols/qq/sys_msg.c:261
 #, c-format
 msgid "%s is not in your buddy list"
 msgstr "%s sa nenachádza vo vašom zozname priateľov"
 
-#: ../libpurple/protocols/qq/sys_msg.c:266
+#: ../libpurple/protocols/qq/sys_msg.c:263
 msgid "Would you like to add him?"
 msgstr "Chcete pridať používateľa?"
 
@@ -8475,7 +8631,7 @@
 
 #. this is a regular connect, error out
 #: ../libpurple/protocols/sametime/sametime.c:1732
-#: ../libpurple/protocols/sametime/sametime.c:3726
+#: ../libpurple/protocols/sametime/sametime.c:3727
 msgid "Unable to connect to host"
 msgstr "Nepodarilo sa pripojiť ku hostiteľovi"
 
@@ -8496,37 +8652,37 @@
 msgid "Place Closed"
 msgstr "Miesto uzavreté"
 
-#: ../libpurple/protocols/sametime/sametime.c:3229
+#: ../libpurple/protocols/sametime/sametime.c:3230
 msgid "Microphone"
 msgstr "Mikrofón"
 
-#: ../libpurple/protocols/sametime/sametime.c:3230
+#: ../libpurple/protocols/sametime/sametime.c:3231
 msgid "Speakers"
 msgstr "Reproduktory"
 
-#: ../libpurple/protocols/sametime/sametime.c:3231
+#: ../libpurple/protocols/sametime/sametime.c:3232
 msgid "Video Camera"
 msgstr "Kamera"
 
-#: ../libpurple/protocols/sametime/sametime.c:3235
+#: ../libpurple/protocols/sametime/sametime.c:3236
 msgid "File Transfer"
 msgstr "Prenos súborov"
 
-#: ../libpurple/protocols/sametime/sametime.c:3269
-#: ../libpurple/protocols/sametime/sametime.c:4145
+#: ../libpurple/protocols/sametime/sametime.c:3270
+#: ../libpurple/protocols/sametime/sametime.c:4146
 msgid "Supports"
 msgstr "Podporuje"
 
-#: ../libpurple/protocols/sametime/sametime.c:3274
-#: ../libpurple/protocols/sametime/sametime.c:4119
+#: ../libpurple/protocols/sametime/sametime.c:3275
+#: ../libpurple/protocols/sametime/sametime.c:4120
 msgid "External User"
 msgstr "Externý používateľ"
 
-#: ../libpurple/protocols/sametime/sametime.c:3380
+#: ../libpurple/protocols/sametime/sametime.c:3381
 msgid "Create conference with user"
 msgstr "Vytvoriť konferenciu s používateľom"
 
-#: ../libpurple/protocols/sametime/sametime.c:3381
+#: ../libpurple/protocols/sametime/sametime.c:3382
 #, c-format
 msgid ""
 "Please enter a topic for the new conference, and an invitation message to be "
@@ -8535,27 +8691,27 @@
 "Zadajte, prosím, tému pre novú konferenciu, a pozývaciu správu pre "
 "používateľa %s"
 
-#: ../libpurple/protocols/sametime/sametime.c:3385
+#: ../libpurple/protocols/sametime/sametime.c:3386
 msgid "New Conference"
 msgstr "Nová konferencia"
 
-#: ../libpurple/protocols/sametime/sametime.c:3387
+#: ../libpurple/protocols/sametime/sametime.c:3388
 msgid "Create"
 msgstr "Vytvoriť"
 
-#: ../libpurple/protocols/sametime/sametime.c:3452
+#: ../libpurple/protocols/sametime/sametime.c:3453
 msgid "Available Conferences"
 msgstr "Dostupné konferencie"
 
-#: ../libpurple/protocols/sametime/sametime.c:3458
+#: ../libpurple/protocols/sametime/sametime.c:3459
 msgid "Create New Conference..."
 msgstr "Vytvoriť novú konferenciu..."
 
-#: ../libpurple/protocols/sametime/sametime.c:3465
+#: ../libpurple/protocols/sametime/sametime.c:3466
 msgid "Invite user to a conference"
 msgstr "Pozvať používateľa na konferenciu"
 
-#: ../libpurple/protocols/sametime/sametime.c:3466
+#: ../libpurple/protocols/sametime/sametime.c:3467
 #, c-format
 msgid ""
 "Select a conference from the list below to send an invite to user %s. Select "
@@ -8566,27 +8722,27 @@
 "%s. Vyberte \"Vytvoriť novú konferenciu\", ak chcete vytvoriť novú "
 "konferenciu, kam chcete pozvať tohto používateľa."
 
-#: ../libpurple/protocols/sametime/sametime.c:3471
+#: ../libpurple/protocols/sametime/sametime.c:3472
 msgid "Invite to Conference"
 msgstr "Pozvať na konferenciu"
 
-#: ../libpurple/protocols/sametime/sametime.c:3562
+#: ../libpurple/protocols/sametime/sametime.c:3563
 msgid "Invite to Conference..."
 msgstr "Pozvať na konferenciu..."
 
-#: ../libpurple/protocols/sametime/sametime.c:3567
+#: ../libpurple/protocols/sametime/sametime.c:3568
 msgid "Send TEST Announcement"
 msgstr "Poslať ohlásenie TEST"
 
-#: ../libpurple/protocols/sametime/sametime.c:3586 ../pidgin/gtkconv.c:4274
+#: ../libpurple/protocols/sametime/sametime.c:3587 ../pidgin/gtkconv.c:4329
 msgid "Topic:"
 msgstr "Téma:"
 
-#: ../libpurple/protocols/sametime/sametime.c:3614
+#: ../libpurple/protocols/sametime/sametime.c:3615
 msgid "No Sametime Community Server specified"
 msgstr "Nebol určený žiadny server komunity rovnakého času"
 
-#: ../libpurple/protocols/sametime/sametime.c:3636
+#: ../libpurple/protocols/sametime/sametime.c:3637
 #, c-format
 msgid ""
 "No host or IP address has been configured for the Meanwhile account %s. "
@@ -8595,42 +8751,42 @@
 "Žiadny hostiteľ ani IP adresa neboli nastavené pre Meanwhile účet %s. "
 "Zadajte, prosím, jeden nižšie pre pokračovanie prihlásenia."
 
-#: ../libpurple/protocols/sametime/sametime.c:3641
+#: ../libpurple/protocols/sametime/sametime.c:3642
 msgid "Meanwhile Connection Setup"
 msgstr "Nastavenie spojenia Meanwhile"
 
-#: ../libpurple/protocols/sametime/sametime.c:3642
+#: ../libpurple/protocols/sametime/sametime.c:3643
 msgid "No Sametime Community Server Specified"
 msgstr "Nebol určený žiadny server komunity rovnakého času"
 
-#: ../libpurple/protocols/sametime/sametime.c:3644 ../pidgin/gtkblist.c:4015
+#: ../libpurple/protocols/sametime/sametime.c:3645 ../pidgin/gtkblist.c:4024
 msgid "Connect"
 msgstr "Pripojiť"
 
-#: ../libpurple/protocols/sametime/sametime.c:4135
+#: ../libpurple/protocols/sametime/sametime.c:4136
 #, c-format
 msgid "Unknown (0x%04x)<br>"
 msgstr "Neznáme (0x%04x)<br>"
 
-#: ../libpurple/protocols/sametime/sametime.c:4137
+#: ../libpurple/protocols/sametime/sametime.c:4138
 msgid "Last Known Client"
 msgstr "Posledný známy klient"
 
-#: ../libpurple/protocols/sametime/sametime.c:4301
-#: ../libpurple/protocols/sametime/sametime.c:5506
+#: ../libpurple/protocols/sametime/sametime.c:4302
+#: ../libpurple/protocols/sametime/sametime.c:5507
 msgid "User Name"
 msgstr "Meno používateľa"
 
-#: ../libpurple/protocols/sametime/sametime.c:4304
-#: ../libpurple/protocols/sametime/sametime.c:5509
+#: ../libpurple/protocols/sametime/sametime.c:4305
+#: ../libpurple/protocols/sametime/sametime.c:5510
 msgid "Sametime ID"
 msgstr "Sametime ID"
 
-#: ../libpurple/protocols/sametime/sametime.c:4328
+#: ../libpurple/protocols/sametime/sametime.c:4329
 msgid "An ambiguous user ID was entered"
 msgstr "Bolo zadané nejednoznačné používateľské ID"
 
-#: ../libpurple/protocols/sametime/sametime.c:4329
+#: ../libpurple/protocols/sametime/sametime.c:4330
 #, c-format
 msgid ""
 "The identifier '%s' may possibly refer to any of the following users. Please "
@@ -8640,15 +8796,15 @@
 "používateľov. Vyberte, prosím, správneho používateľa zo zoznamu nižšie a "
 "pridajte ho do svojho zoznamu kamarátov."
 
-#: ../libpurple/protocols/sametime/sametime.c:4334
+#: ../libpurple/protocols/sametime/sametime.c:4335
 msgid "Select User"
 msgstr "Vyberte používateľa"
 
-#: ../libpurple/protocols/sametime/sametime.c:4418
+#: ../libpurple/protocols/sametime/sametime.c:4419
 msgid "Unable to add user: user not found"
 msgstr "Nebolo možné priadať používateľa: používateľ nebol nájdený"
 
-#: ../libpurple/protocols/sametime/sametime.c:4420
+#: ../libpurple/protocols/sametime/sametime.c:4421
 #, c-format
 msgid ""
 "The identifier '%s' did not match any users in your Sametime community. This "
@@ -8657,11 +8813,11 @@
 "Identifikátoru '%s' nevyhovujú žiadni používatelia vo vašej Sametime "
 "komunite. Tento záznam bol odstránený z vášho zoznamu priateľov."
 
-#: ../libpurple/protocols/sametime/sametime.c:4425
+#: ../libpurple/protocols/sametime/sametime.c:4426
 msgid "Unable to add user"
 msgstr "Nebolo možné priadať používateľa"
 
-#: ../libpurple/protocols/sametime/sametime.c:5011
+#: ../libpurple/protocols/sametime/sametime.c:5012
 #, c-format
 msgid ""
 "Error reading file %s: \n"
@@ -8670,63 +8826,63 @@
 "Chyba pri čítaní súboru %s: \n"
 "%s\n"
 
-#: ../libpurple/protocols/sametime/sametime.c:5146
+#: ../libpurple/protocols/sametime/sametime.c:5147
 msgid "Remotely Stored Buddy List"
 msgstr "Vzdialene uložený zoznam kamarátov"
 
-#: ../libpurple/protocols/sametime/sametime.c:5151
+#: ../libpurple/protocols/sametime/sametime.c:5152
 msgid "Buddy List Storage Mode"
 msgstr "Umiestnenie zoznamu priateľov"
 
-#: ../libpurple/protocols/sametime/sametime.c:5154
+#: ../libpurple/protocols/sametime/sametime.c:5155
 msgid "Local Buddy List Only"
 msgstr "Iba miestny zoznam kamarátov"
 
-#: ../libpurple/protocols/sametime/sametime.c:5156
+#: ../libpurple/protocols/sametime/sametime.c:5157
 msgid "Merge List from Server"
 msgstr "Spojiť so zoznamom zo servera"
 
-#: ../libpurple/protocols/sametime/sametime.c:5158
+#: ../libpurple/protocols/sametime/sametime.c:5159
 msgid "Merge and Save List to Server"
 msgstr "Spojiť zoznam a uložiť na server"
 
-#: ../libpurple/protocols/sametime/sametime.c:5160
+#: ../libpurple/protocols/sametime/sametime.c:5161
 msgid "Synchronize List with Server"
 msgstr "Synchronizovať zoznam so serverom"
 
-#: ../libpurple/protocols/sametime/sametime.c:5215
+#: ../libpurple/protocols/sametime/sametime.c:5216
 #, c-format
 msgid "Import Sametime List for Account %s"
 msgstr "Importovať zoznam Sametime do účtu %s"
 
-#: ../libpurple/protocols/sametime/sametime.c:5255
+#: ../libpurple/protocols/sametime/sametime.c:5256
 #, c-format
 msgid "Export Sametime List for Account %s"
 msgstr "Exportovať zoznam Sametime z účtu %s"
 
-#: ../libpurple/protocols/sametime/sametime.c:5309
+#: ../libpurple/protocols/sametime/sametime.c:5310
 msgid "Unable to add group: group exists"
 msgstr "Nepodarilo sa pridať skupinu: skupina existuje"
 
-#: ../libpurple/protocols/sametime/sametime.c:5310
+#: ../libpurple/protocols/sametime/sametime.c:5311
 #, c-format
 msgid "A group named '%s' already exists in your buddy list."
 msgstr "Skupina pomenovaná '%s' sa už nachádza vo vašom zozname priateľov."
 
-#: ../libpurple/protocols/sametime/sametime.c:5313
-#: ../libpurple/protocols/sametime/sametime.c:5443
+#: ../libpurple/protocols/sametime/sametime.c:5314
+#: ../libpurple/protocols/sametime/sametime.c:5444
 msgid "Unable to add group"
 msgstr "Nepodarilo sa pridať skupinu"
 
-#: ../libpurple/protocols/sametime/sametime.c:5372
+#: ../libpurple/protocols/sametime/sametime.c:5373
 msgid "Possible Matches"
 msgstr "Možné výskyty"
 
-#: ../libpurple/protocols/sametime/sametime.c:5388
+#: ../libpurple/protocols/sametime/sametime.c:5389
 msgid "Notes Address Book group results"
 msgstr "Výsledky skupiny Notes zoznamu adries"
 
-#: ../libpurple/protocols/sametime/sametime.c:5389
+#: ../libpurple/protocols/sametime/sametime.c:5390
 #, c-format
 msgid ""
 "The identifier '%s' may possibly refer to any of the following Notes Address "
@@ -8737,15 +8893,15 @@
 "Notes zoznamu adries. Vyberte, prosím, správneho používateľa zo zoznamu "
 "nižšie a pridajte ho do svojho zoznamu kamarátov."
 
-#: ../libpurple/protocols/sametime/sametime.c:5394
+#: ../libpurple/protocols/sametime/sametime.c:5395
 msgid "Select Notes Address Book"
 msgstr "Vyberte Notes zoznam adries"
 
-#: ../libpurple/protocols/sametime/sametime.c:5437
+#: ../libpurple/protocols/sametime/sametime.c:5438
 msgid "Unable to add group: group not found"
 msgstr "Nepodarilo sa pridať skupinu: skupina nenájdená"
 
-#: ../libpurple/protocols/sametime/sametime.c:5439
+#: ../libpurple/protocols/sametime/sametime.c:5440
 #, c-format
 msgid ""
 "The identifier '%s' did not match any Notes Address Book groups in your "
@@ -8754,11 +8910,11 @@
 "Identifikátoru '%s' nevyhovujú žiadne skupiny Notes zoznamu adries vo vašej "
 "Sametime komunite. "
 
-#: ../libpurple/protocols/sametime/sametime.c:5480
+#: ../libpurple/protocols/sametime/sametime.c:5481
 msgid "Notes Address Book Group"
 msgstr "Skupina Notes zoznamu adries"
 
-#: ../libpurple/protocols/sametime/sametime.c:5481
+#: ../libpurple/protocols/sametime/sametime.c:5482
 msgid ""
 "Enter the name of a Notes Address Book group in the field below to add the "
 "group and its members to your buddy list."
@@ -8766,12 +8922,12 @@
 "Zadajte názov skupiny Notes zoznamu adries do políčka, ktoré sa nachádza "
 "nižšie, a skupina spolu s jej členmi sa pridá do vášho zoznamu priateľov."
 
-#: ../libpurple/protocols/sametime/sametime.c:5530
+#: ../libpurple/protocols/sametime/sametime.c:5531
 #, c-format
 msgid "Search results for '%s'"
 msgstr "Výsledky vyhľadávania '%s'"
 
-#: ../libpurple/protocols/sametime/sametime.c:5531
+#: ../libpurple/protocols/sametime/sametime.c:5532
 #, c-format
 msgid ""
 "The identifier '%s' may possibly refer to any of the following users. You "
@@ -8783,30 +8939,30 @@
 "tlačidiel, ktoré sú nižšie. "
 
 #. Create the window
-#: ../libpurple/protocols/sametime/sametime.c:5538 ../pidgin/gtknotify.c:719
+#: ../libpurple/protocols/sametime/sametime.c:5539 ../pidgin/gtknotify.c:726
 msgid "Search Results"
 msgstr "Výsledky vyhľadávania"
 
-#: ../libpurple/protocols/sametime/sametime.c:5563
+#: ../libpurple/protocols/sametime/sametime.c:5564
 msgid "No matches"
 msgstr "Žiadne výskyty"
 
-#: ../libpurple/protocols/sametime/sametime.c:5564
+#: ../libpurple/protocols/sametime/sametime.c:5565
 #, c-format
 msgid "The identifier '%s' did not match any users in your Sametime community."
 msgstr ""
 "Identifikátoru '%s' nevyhovujú žiadni používatelia vo vašej Sametime "
 "komunite. "
 
-#: ../libpurple/protocols/sametime/sametime.c:5568
+#: ../libpurple/protocols/sametime/sametime.c:5569
 msgid "No Matches"
 msgstr "Žiadne výskyty"
 
-#: ../libpurple/protocols/sametime/sametime.c:5605
+#: ../libpurple/protocols/sametime/sametime.c:5606
 msgid "Search for a user"
 msgstr "Hľadanie používateľa"
 
-#: ../libpurple/protocols/sametime/sametime.c:5606
+#: ../libpurple/protocols/sametime/sametime.c:5607
 msgid ""
 "Enter a name or partial ID in the field below to search for matching users "
 "in your Sametime community."
@@ -8814,32 +8970,32 @@
 "Zadajte meno, alebo čiastočné ID do políčka nachádzajúceho sa nižšie pre "
 "vyhľadanie vyhovujúcich používateľov vo vašej Sametime komunite."
 
-#: ../libpurple/protocols/sametime/sametime.c:5609
+#: ../libpurple/protocols/sametime/sametime.c:5610
 msgid "User Search"
 msgstr "Hľadanie používateľov"
 
-#: ../libpurple/protocols/sametime/sametime.c:5622
+#: ../libpurple/protocols/sametime/sametime.c:5623
 msgid "Import Sametime List..."
 msgstr "Importovať zoznam Sametime..."
 
-#: ../libpurple/protocols/sametime/sametime.c:5626
+#: ../libpurple/protocols/sametime/sametime.c:5627
 msgid "Export Sametime List..."
 msgstr "Exportovať zoznam Sametime..."
 
-#: ../libpurple/protocols/sametime/sametime.c:5630
+#: ../libpurple/protocols/sametime/sametime.c:5631
 msgid "Add Notes Address Book Group..."
 msgstr "Pridať skupinu Notes zoznamu adries...."
 
-#: ../libpurple/protocols/sametime/sametime.c:5634
+#: ../libpurple/protocols/sametime/sametime.c:5635
 msgid "User Search..."
 msgstr "Hľadanie používateľov..."
 
-#: ../libpurple/protocols/sametime/sametime.c:5740
+#: ../libpurple/protocols/sametime/sametime.c:5741
 msgid "Force login (ignore server redirects)"
 msgstr "Vynútiť prihlásenie (ignorovať presmerovania serverom)"
 
 #. pretend to be Sametime Connect
-#: ../libpurple/protocols/sametime/sametime.c:5750
+#: ../libpurple/protocols/sametime/sametime.c:5751
 msgid "Hide client identity"
 msgstr "Skryť identitu klienta"
 
@@ -9764,7 +9920,7 @@
 #: ../libpurple/protocols/silc/ops.c:1326
 #: ../libpurple/protocols/silc10/ops.c:1183
 #: ../libpurple/protocols/silc10/ops.c:1332
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1047
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1071
 msgid "Real Name"
 msgstr "Skutočné meno"
 
@@ -10061,7 +10217,7 @@
 msgstr "Vaša aktuálna nálada"
 
 #: ../libpurple/protocols/silc/silc.c:741
-#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1636
+#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1638
 msgid "Normal"
 msgstr "Normálna"
 
@@ -10456,7 +10612,7 @@
 msgstr "Protokol Secure Internet Live Conferencing (SILC)"
 
 #: ../libpurple/protocols/silc/silc.c:1910
-#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2029
+#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2031
 msgid "Network"
 msgstr "Sieť"
 
@@ -10482,7 +10638,7 @@
 
 #: ../libpurple/protocols/silc/silc.c:1948
 msgid "Use Perfect Forward Secrecy"
-msgstr ""
+msgstr "Použiť vlastnosť Perfect Forward Secrecy"
 
 #: ../libpurple/protocols/silc/silc.c:1952
 #: ../libpurple/protocols/silc10/silc.c:1891
@@ -10534,7 +10690,7 @@
 #: ../libpurple/protocols/silc10/util.c:357
 #, c-format
 msgid "User Name: \t%s\n"
-msgstr "Používateľské meno: \t%s\n"
+msgstr "Prihlasovacie meno: \t%s\n"
 
 #: ../libpurple/protocols/silc/util.c:362
 #: ../libpurple/protocols/silc10/util.c:359
@@ -10717,26 +10873,26 @@
 msgstr "Nepodarilo sa zapisovať"
 
 #: ../libpurple/protocols/simple/simple.c:438
-#: ../libpurple/protocols/simple/simple.c:1484
+#: ../libpurple/protocols/simple/simple.c:1489
 msgid "Could not connect"
 msgstr "Nepodarilo sa pripojiť"
 
-#: ../libpurple/protocols/simple/simple.c:1518
-#: ../libpurple/protocols/simple/simple.c:1560
-#: ../libpurple/protocols/simple/simple.c:1573
-#: ../libpurple/protocols/simple/simple.c:1624
+#: ../libpurple/protocols/simple/simple.c:1523
+#: ../libpurple/protocols/simple/simple.c:1565
+#: ../libpurple/protocols/simple/simple.c:1578
+#: ../libpurple/protocols/simple/simple.c:1629
 msgid "Could not create listen socket"
 msgstr "Nepodarilo sa vytvoriť socket pre príjem"
 
-#: ../libpurple/protocols/simple/simple.c:1541
+#: ../libpurple/protocols/simple/simple.c:1546
 msgid "Couldn't resolve host"
 msgstr "Nebolo možné preložiť názov hostiteľa"
 
-#: ../libpurple/protocols/simple/simple.c:1632
+#: ../libpurple/protocols/simple/simple.c:1637
 msgid "Could not resolve hostname"
 msgstr "Nebolo možné previesť názov hostiteľa na IP"
 
-#: ../libpurple/protocols/simple/simple.c:1649
+#: ../libpurple/protocols/simple/simple.c:1654
 msgid "SIP screen names may not contain whitespaces or @ symbols"
 msgstr "Používateľské mená SIP nemôžu obsahovať medzery alebo znaky @"
 
@@ -10748,36 +10904,36 @@
 #. *< id
 #. *< name
 #. *< version
-#: ../libpurple/protocols/simple/simple.c:1824
+#: ../libpurple/protocols/simple/simple.c:1829
 msgid "SIP/SIMPLE Protocol Plugin"
 msgstr "Modul protokolu SIP/SIMPLE"
 
 #. *  summary
-#: ../libpurple/protocols/simple/simple.c:1825
+#: ../libpurple/protocols/simple/simple.c:1830
 msgid "The SIP/SIMPLE Protocol Plugin"
 msgstr "Modul pre protokol SIP/SIMPLE"
 
-#: ../libpurple/protocols/simple/simple.c:1853
+#: ../libpurple/protocols/simple/simple.c:1858
 msgid "Publish status (note: everyone may watch you)"
 msgstr "Zverejniť stav (poznámka: ktokoľvek vás môže sledovať)"
 
-#: ../libpurple/protocols/simple/simple.c:1859
+#: ../libpurple/protocols/simple/simple.c:1864
 msgid "Use UDP"
 msgstr "Používať UDP"
 
-#: ../libpurple/protocols/simple/simple.c:1861
+#: ../libpurple/protocols/simple/simple.c:1866
 msgid "Use proxy"
 msgstr "Používať proxy"
 
-#: ../libpurple/protocols/simple/simple.c:1863
+#: ../libpurple/protocols/simple/simple.c:1868
 msgid "Proxy"
 msgstr "Proxy"
 
-#: ../libpurple/protocols/simple/simple.c:1865
+#: ../libpurple/protocols/simple/simple.c:1870
 msgid "Auth User"
 msgstr "Autentifikačný používateľ"
 
-#: ../libpurple/protocols/simple/simple.c:1867
+#: ../libpurple/protocols/simple/simple.c:1872
 msgid "Auth Domain"
 msgstr "Autentifikačná doména"
 
@@ -10939,8 +11095,8 @@
 msgid "Password Change Successful"
 msgstr "Heslo bolo úspešne zmenené"
 
-#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5519
-#: ../pidgin/gtkblist.c:5873
+#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5530
+#: ../pidgin/gtkblist.c:5883
 msgid "_Group:"
 msgstr "Skupina:"
 
@@ -11007,32 +11163,32 @@
 msgid "TOC Protocol Plugin"
 msgstr "Modul protokolu TOC"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:810
+#: ../libpurple/protocols/yahoo/yahoo.c:823
 msgid "Your Yahoo! message did not get sent."
 msgstr "Vaša Yahoo! správa sa neodoslala."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:880
+#: ../libpurple/protocols/yahoo/yahoo.c:895
 #, c-format
 msgid "%s just sent you a Buzz!"
 msgstr "%s vám práve poslal bzzz!"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:927
+#: ../libpurple/protocols/yahoo/yahoo.c:942
 #, c-format
 msgid "Yahoo! system message for %s:"
 msgstr "Systémová správa Yahoo! pre %s:"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:986
+#: ../libpurple/protocols/yahoo/yahoo.c:1013
 msgid "Authorization denied message:"
 msgstr "Správa odmietnutia autorizácie"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1067
+#: ../libpurple/protocols/yahoo/yahoo.c:1142
 #, c-format
 msgid "%s has (retroactively) denied your request to add them to your list."
 msgstr ""
 "Používateľ %s (retroaktívne) zamietol vašu žiadosť o jeho pridanie do vášho "
 "zoznamu."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1070
+#: ../libpurple/protocols/yahoo/yahoo.c:1145
 #, c-format
 msgid ""
 "%s has (retroactively) denied your request to add them to your list for the "
@@ -11041,11 +11197,11 @@
 "Používateľ %s (retroaktívne) zamietol vašu žiadosť o jeho pridanie do vášho "
 "zoznamu z nasledujúceho dôvodu: %s."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1073
+#: ../libpurple/protocols/yahoo/yahoo.c:1148
 msgid "Add buddy rejected"
 msgstr "Pridanie kamaráta odmietnuté"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1824
+#: ../libpurple/protocols/yahoo/yahoo.c:1899
 #, c-format
 msgid ""
 "The Yahoo server has requested the use of an unrecognized authentication "
@@ -11053,14 +11209,13 @@
 "Check %s for updates."
 msgstr ""
 "Yahoo server vyžaduje neznámy spôsob autentifikácie. Zrejme sa nebude dať "
-"úspešne prihlásiť na Yahoo.  Na adrese %s "
-"skontrolujte možnosť aktualizácie."
-
-#: ../libpurple/protocols/yahoo/yahoo.c:1827
+"úspešne prihlásiť na Yahoo.  Na adrese %s skontrolujte možnosť aktualizácie."
+
+#: ../libpurple/protocols/yahoo/yahoo.c:1902
 msgid "Failed Yahoo! Authentication"
 msgstr "Zlyhala Yahoo! autentifikácia"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1893
+#: ../libpurple/protocols/yahoo/yahoo.c:1968
 #, c-format
 msgid ""
 "You have tried to ignore %s, but the user is on your buddy list.  Clicking "
@@ -11070,51 +11225,51 @@
 "vašom zozname priateľov. Kliknutím \"Áno\" odstránite používateľa zo zoznamu "
 "priateľov a ignorujete ho."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1896
+#: ../libpurple/protocols/yahoo/yahoo.c:1971
 msgid "Ignore buddy?"
 msgstr "Ignorovať priateľa?"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1955
+#: ../libpurple/protocols/yahoo/yahoo.c:2034
 msgid "Your account is locked, please log in to the Yahoo! website."
 msgstr "Váš účet je uzamknutý, prihláste sa, prosím, na webstránke Yahoo!."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:1958
+#: ../libpurple/protocols/yahoo/yahoo.c:2037
 #, c-format
 msgid "Unknown error number %d. Logging into the Yahoo! website may fix this."
 msgstr ""
 "Neznáme číslo chyby %d. Prihlásenie sa na stránke Yahoo! to môže napraviť."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2012
+#: ../libpurple/protocols/yahoo/yahoo.c:2091
 #, c-format
 msgid "Could not add buddy %s to group %s to the server list on account %s."
 msgstr ""
 "Nepodarilo sa pridať kamaráta %s do skupiny %s do zoznamu na serveri na účte "
 "%s."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2015
+#: ../libpurple/protocols/yahoo/yahoo.c:2094
 msgid "Could not add buddy to server list"
 msgstr "Nepodarilo sa pridať priateľa do serverového zoznamu"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2134
+#: ../libpurple/protocols/yahoo/yahoo.c:2213
 #, c-format
 msgid "[ Audible %s/%s/%s.swf ] %s"
 msgstr "[ Počúvateľné %s/%s/%s.swf ] %s"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2474
+#: ../libpurple/protocols/yahoo/yahoo.c:2556
 msgid "Received unexpected HTTP response from server."
 msgstr "Zo serveru bola prijatá neočakávaná HTTP odpoveď."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2498
-#: ../libpurple/protocols/yahoo/yahoo.c:2684
-#: ../libpurple/protocols/yahoo/yahoo.c:2787
-#: ../libpurple/protocols/yahoo/yahoo.c:2797
+#: ../libpurple/protocols/yahoo/yahoo.c:2580
+#: ../libpurple/protocols/yahoo/yahoo.c:2766
+#: ../libpurple/protocols/yahoo/yahoo.c:2869
+#: ../libpurple/protocols/yahoo/yahoo.c:2879
 #: ../libpurple/protocols/yahoo/yahoochat.c:1418
 #: ../libpurple/protocols/yahoo/yahoochat.c:1488
 #: ../libpurple/protocols/yahoo/ycht.c:585
 msgid "Connection problem"
 msgstr "Problém pripojenia"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2524
+#: ../libpurple/protocols/yahoo/yahoo.c:2606
 #, c-format
 msgid ""
 "Lost connection with %s:\n"
@@ -11123,7 +11278,7 @@
 "Prerušené pripojenie ku %s:\n"
 "%s"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2549
+#: ../libpurple/protocols/yahoo/yahoo.c:2631
 #, c-format
 msgid ""
 "Could not establish a connection with %s:\n"
@@ -11132,109 +11287,112 @@
 "Nebolo možné založiť spojenie s %s:\n"
 "%s"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2899
-#: ../libpurple/protocols/yahoo/yahoo.c:3510
+#: ../libpurple/protocols/yahoo/yahoo.c:2981
+#: ../libpurple/protocols/yahoo/yahoo.c:3667
 msgid "Not at Home"
 msgstr "Nie som doma"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2901
-#: ../libpurple/protocols/yahoo/yahoo.c:3513
+#: ../libpurple/protocols/yahoo/yahoo.c:2983
+#: ../libpurple/protocols/yahoo/yahoo.c:3670
 msgid "Not at Desk"
 msgstr "Nie som pri stole"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2903
-#: ../libpurple/protocols/yahoo/yahoo.c:3516
+#: ../libpurple/protocols/yahoo/yahoo.c:2985
+#: ../libpurple/protocols/yahoo/yahoo.c:3673
 msgid "Not in Office"
 msgstr "Nie som v kancelárii"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2907
-#: ../libpurple/protocols/yahoo/yahoo.c:3522
+#: ../libpurple/protocols/yahoo/yahoo.c:2989
+#: ../libpurple/protocols/yahoo/yahoo.c:3679
 msgid "On Vacation"
 msgstr "Na dovolenke"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:2911
-#: ../libpurple/protocols/yahoo/yahoo.c:3528
+#: ../libpurple/protocols/yahoo/yahoo.c:2993
+#: ../libpurple/protocols/yahoo/yahoo.c:3685
 msgid "Stepped Out"
 msgstr "Vyrazil si von"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3004
-#: ../libpurple/protocols/yahoo/yahoo.c:3034
+#: ../libpurple/protocols/yahoo/yahoo.c:3086
+#: ../libpurple/protocols/yahoo/yahoo.c:3116
 msgid "Not on server list"
 msgstr "Nie je na zozname serverov"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3051
-#: ../libpurple/protocols/yahoo/yahoo.c:3109
+#: ../libpurple/protocols/yahoo/yahoo.c:3133
+#: ../libpurple/protocols/yahoo/yahoo.c:3191
 msgid "Appear Online"
 msgstr "Javí sa pripojený"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3054
-#: ../libpurple/protocols/yahoo/yahoo.c:3130
+#: ../libpurple/protocols/yahoo/yahoo.c:3136
+#: ../libpurple/protocols/yahoo/yahoo.c:3212
 msgid "Appear Permanently Offline"
 msgstr "Javí sa trvale odpojený"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3072
+#: ../libpurple/protocols/yahoo/yahoo.c:3154
 msgid "Presence"
 msgstr "Prítomnosť"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3115
+#: ../libpurple/protocols/yahoo/yahoo.c:3197
 msgid "Appear Offline"
 msgstr "Javí sa odpojený"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3124
+#: ../libpurple/protocols/yahoo/yahoo.c:3206
 msgid "Don't Appear Permanently Offline"
 msgstr "Nejaví sa trvale odpojený"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3172
+#: ../libpurple/protocols/yahoo/yahoo.c:3254
 msgid "Join in Chat"
 msgstr "Spojiť sa v chate"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3178
+#: ../libpurple/protocols/yahoo/yahoo.c:3260
 msgid "Initiate Conference"
 msgstr "Založiť konferenciu"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3206
+#: ../libpurple/protocols/yahoo/yahoo.c:3288
 msgid "Presence Settings"
 msgstr "Nastavenie prítomnosti"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3212
+#: ../libpurple/protocols/yahoo/yahoo.c:3294
 msgid "Start Doodling"
 msgstr "Začať \"Doodlovať\""
 
-#. XXX Typo: This should be _("Activate which ID?") - fix after string freeze is over
-#: ../libpurple/protocols/yahoo/yahoo.c:3245
-msgid "Active which ID?"
-msgstr "Aktivovať ktoré ID?"
-
-#: ../libpurple/protocols/yahoo/yahoo.c:3256
+#: ../libpurple/protocols/yahoo/yahoo.c:3395
+msgid "Activate which ID?"
+msgstr "Aktivovať s ID?"
+
+#: ../libpurple/protocols/yahoo/yahoo.c:3406
 msgid "Join who in chat?"
 msgstr "S kým sa spojiť v chate?"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3268
+#: ../libpurple/protocols/yahoo/yahoo.c:3418
 msgid "Activate ID..."
 msgstr "Aktivovať ID..."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3272
+#: ../libpurple/protocols/yahoo/yahoo.c:3422
 msgid "Join User in Chat..."
 msgstr "Spojiť sa s používateľom v chate..."
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3779
+#: ../libpurple/protocols/yahoo/yahoo.c:3427
+msgid "Open Inbox"
+msgstr "Otvoriť schránku Inbox"
+
+#: ../libpurple/protocols/yahoo/yahoo.c:3947
 msgid "You have just sent a Buzz!"
 msgstr "Práve ste odoslali bzzz!"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3838
+#: ../libpurple/protocols/yahoo/yahoo.c:4006
 msgid "join &lt;room&gt;:  Join a chat room on the Yahoo network"
 msgstr ""
 "join &lt;miestnosť&gt;:  Vstúpiť do chatovacej miestnosti na sieti Yahoo"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3843
+#: ../libpurple/protocols/yahoo/yahoo.c:4011
 msgid "list: List rooms on the Yahoo network"
 msgstr "list: Vypísať zoznam miestností na sieti Yahoo"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3847
+#: ../libpurple/protocols/yahoo/yahoo.c:4015
 msgid "buzz: Buzz a user to get their attention"
 msgstr "buzz: Pošlite používateľovi \"bzzz\" a tým si získajte jeho pozornosť"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:3851
+#: ../libpurple/protocols/yahoo/yahoo.c:4019
 msgid "doodle: Request user to start a Doodle session"
 msgstr "doodle: Požiadať používateľa o sedenie Doodle"
 
@@ -11248,56 +11406,56 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../libpurple/protocols/yahoo/yahoo.c:4059
-#: ../libpurple/protocols/yahoo/yahoo.c:4061
+#: ../libpurple/protocols/yahoo/yahoo.c:4227
+#: ../libpurple/protocols/yahoo/yahoo.c:4229
 msgid "Yahoo Protocol Plugin"
 msgstr "Modul protokolu Yahoo"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4084
+#: ../libpurple/protocols/yahoo/yahoo.c:4252
 msgid "Yahoo Japan"
 msgstr "Yahoo Japonsko"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4087
+#: ../libpurple/protocols/yahoo/yahoo.c:4255
 msgid "Pager server"
 msgstr "Server pageru"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4090
+#: ../libpurple/protocols/yahoo/yahoo.c:4258
 msgid "Japan Pager server"
 msgstr "Server pageru pre Japonsko"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4093
+#: ../libpurple/protocols/yahoo/yahoo.c:4261
 msgid "Pager port"
 msgstr "Port pageru"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4096
+#: ../libpurple/protocols/yahoo/yahoo.c:4264
 msgid "File transfer server"
 msgstr "Server prenosu súborov"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4099
+#: ../libpurple/protocols/yahoo/yahoo.c:4267
 msgid "Japan file transfer server"
 msgstr "Japonský server prenosu súborov"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4102
+#: ../libpurple/protocols/yahoo/yahoo.c:4270
 msgid "File transfer port"
 msgstr "Port prenosu súborov"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4105
+#: ../libpurple/protocols/yahoo/yahoo.c:4273
 msgid "Chat room locale"
 msgstr "Jazyk chatovacej miestnosti"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4108
+#: ../libpurple/protocols/yahoo/yahoo.c:4276
 msgid "Ignore conference and chatroom invitations"
 msgstr "Ignorovať pozvánky na konferencie a chatovacie miestnosti"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4116
+#: ../libpurple/protocols/yahoo/yahoo.c:4284
 msgid "Chat room list URL"
 msgstr "URL zoznamu miestností chatu"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4119
+#: ../libpurple/protocols/yahoo/yahoo.c:4287
 msgid "Yahoo Chat server"
 msgstr "Server Yahoo chatu"
 
-#: ../libpurple/protocols/yahoo/yahoo.c:4122
+#: ../libpurple/protocols/yahoo/yahoo.c:4290
 msgid "Yahoo Chat port"
 msgstr "Port Yahoo chatu"
 
@@ -11388,19 +11546,19 @@
 msgstr "Nepodarilo sa založiť deskriptor súboru."
 
 #. TODO: what to do here - do we really have to disconnect?
-#: ../libpurple/protocols/yahoo/yahoo_packet.c:302
+#: ../libpurple/protocols/yahoo/yahoo_packet.c:307
 msgid "Write Error"
 msgstr "Chyba zápisu"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:773
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:797
 msgid "Yahoo! Japan Profile"
 msgstr "Profil Yahoo! Japonsko"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:774
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:798
 msgid "Yahoo! Profile"
 msgstr "Profil Yahoo!"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:814
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:838
 msgid ""
 "Sorry, profiles marked as containing adult content are not supported at this "
 "time."
@@ -11408,55 +11566,55 @@
 "Žiaľ, profily označné ako obsahujúce obsah pre dospelých nie sú zatiaľ "
 "podporované."
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:816
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:840
 msgid ""
 "If you wish to view this profile, you will need to visit this link in your "
 "web browser:"
 msgstr ""
-"Ak si chcete prezrieť tento profil, musíte navštívíť tento odkaz vo "
-"vašom internetovom prehliadači:"
-
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1010
+"Ak si chcete prezrieť tento profil, musíte navštívíť tento odkaz vo vašom "
+"internetovom prehliadači:"
+
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1034
 msgid "Yahoo! ID"
 msgstr "Yahoo! ID"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1085
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1089
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1093
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1109
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1113
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1117
 msgid "Hobbies"
 msgstr "Koníčky"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1103
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1107
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1127
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1131
 msgid "Latest News"
 msgstr "Aktuálne novinky"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1128
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1152
 msgid "Home Page"
 msgstr "Domovská stránka"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1143
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1167
 msgid "Cool Link 1"
 msgstr "Super odkaz 1"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1148
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1172
 msgid "Cool Link 2"
 msgstr "Super odkaz 2"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1152
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1176
 msgid "Cool Link 3"
 msgstr "Super odkaz 3"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1166
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1190
 msgid "Last Update"
 msgstr "Posledná aktualizácia"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1175
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1199
 #, c-format
 msgid "User information for %s unavailable"
 msgstr "Podrobnosti o používateľovi %s nie sú dostupné"
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1181
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1205
 msgid ""
 "Sorry, this profile seems to be in a language or format that is not "
 "supported at this time."
@@ -11464,7 +11622,7 @@
 "Prepáčte, ale tento profil je v jazyku alebo formáte, ktorý momentálne nie "
 "je podporovaný."
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1197
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1221
 msgid ""
 "Could not retrieve the user's profile. This most likely is a temporary "
 "server-side problem. Please try again later."
@@ -11472,7 +11630,7 @@
 "Nepodarilo sa stiahnuť profil používateľa. Toto je zrejme krádkodobý problém "
 "na strane serveru. Skúste to, prosím, neskôr."
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1200
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1224
 msgid ""
 "Could not retrieve the user's profile. This most likely means that the user "
 "does not exist; however, Yahoo! sometimes does fail to find a user's "
@@ -11483,7 +11641,7 @@
 "používateľa. Ak ste si istý, že tento používateľ existuje, skúste to znovu "
 "neskôr."
 
-#: ../libpurple/protocols/yahoo/yahoo_profile.c:1207
+#: ../libpurple/protocols/yahoo/yahoo_profile.c:1231
 msgid "The user's profile is empty."
 msgstr "Profil používateľa je prázdny."
 
@@ -11760,7 +11918,7 @@
 msgid "Unset"
 msgstr "Nenastavené"
 
-#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1057
+#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1058
 msgid "Do not disturb"
 msgstr "Nerušiť"
 
@@ -11812,12 +11970,12 @@
 msgid "%x %X"
 msgstr "%x %X"
 
-#: ../libpurple/util.c:2691
+#: ../libpurple/util.c:2702
 #, c-format
 msgid "Error Reading %s"
 msgstr "Chyba počas čítania %s"
 
-#: ../libpurple/util.c:2692
+#: ../libpurple/util.c:2703
 #, c-format
 msgid ""
 "An error was encountered reading your %s.  They have not been loaded, and "
@@ -11826,15 +11984,15 @@
 "Počas načítavania vášho %s sa vyskytla chyba. Zoznam nebol načítaný a starý "
 "súbor bol premenovaný na %s~."
 
-#: ../libpurple/util.c:3192
+#: ../libpurple/util.c:3203
 msgid "Calculating..."
 msgstr "Počíta sa..."
 
-#: ../libpurple/util.c:3195
+#: ../libpurple/util.c:3206
 msgid "Unknown."
 msgstr "Neznáme."
 
-#: ../libpurple/util.c:3221
+#: ../libpurple/util.c:3232
 #, c-format
 msgid "%d second"
 msgid_plural "%d seconds"
@@ -11842,7 +12000,7 @@
 msgstr[1] "%d sekunda"
 msgstr[2] "%d sekundy"
 
-#: ../libpurple/util.c:3233
+#: ../libpurple/util.c:3244
 #, c-format
 msgid "%d day"
 msgid_plural "%d days"
@@ -11850,7 +12008,7 @@
 msgstr[1] "%d deň"
 msgstr[2] "%d dni"
 
-#: ../libpurple/util.c:3241
+#: ../libpurple/util.c:3252
 #, c-format
 msgid "%s, %d hour"
 msgid_plural "%s, %d hours"
@@ -11858,7 +12016,7 @@
 msgstr[1] "%s, %d hodina"
 msgstr[2] "%s, %d hodiny"
 
-#: ../libpurple/util.c:3247
+#: ../libpurple/util.c:3258
 #, c-format
 msgid "%d hour"
 msgid_plural "%d hours"
@@ -11866,7 +12024,7 @@
 msgstr[1] "%d hodina"
 msgstr[2] "%d hodiny"
 
-#: ../libpurple/util.c:3255
+#: ../libpurple/util.c:3266
 #, c-format
 msgid "%s, %d minute"
 msgid_plural "%s, %d minutes"
@@ -11874,7 +12032,7 @@
 msgstr[1] "%s, %d minúta"
 msgstr[2] "%s, %d minúty"
 
-#: ../libpurple/util.c:3261
+#: ../libpurple/util.c:3272
 #, c-format
 msgid "%d minute"
 msgid_plural "%d minutes"
@@ -11882,17 +12040,17 @@
 msgstr[1] "%d minúta"
 msgstr[2] "%d minúty"
 
-#: ../libpurple/util.c:3521
+#: ../libpurple/util.c:3532
 #, c-format
 msgid "Could not open %s: Redirected too many times"
-msgstr ""
-
-#: ../libpurple/util.c:3558 ../libpurple/util.c:3853
+msgstr "Nepodarilo sa otvoriť %s: Presmerovaný príliš veľa kráť"
+
+#: ../libpurple/util.c:3569 ../libpurple/util.c:3864
 #, c-format
 msgid "Unable to connect to %s"
 msgstr "Nepodarilo sa pripojiť na %s"
 
-#: ../libpurple/util.c:3681
+#: ../libpurple/util.c:3692
 #, c-format
 msgid ""
 "Unable to allocate enough memory to hold the contents from %s.  The web "
@@ -11901,17 +12059,17 @@
 "Nebolo možné rezervovať dostatok pamäťového priestoru pre údaje z %s.  "
 "Webový server sa možno pokúša o niečo nebezpečné."
 
-#: ../libpurple/util.c:3716
+#: ../libpurple/util.c:3727
 #, c-format
 msgid "Error reading from %s: %s"
 msgstr "Chyba pri čítaní z %s: %s"
 
-#: ../libpurple/util.c:3747
+#: ../libpurple/util.c:3758
 #, c-format
 msgid "Error writing to %s: %s"
 msgstr "Chyba pri zápise do %s: %s"
 
-#: ../libpurple/util.c:3772
+#: ../libpurple/util.c:3783
 #, c-format
 msgid "Unable to connect to %s: %s"
 msgstr "Nepodarilo sa pripojiť ku %s: %s"
@@ -11922,7 +12080,7 @@
 
 #: ../pidgin.desktop.in.h:2
 msgid "Pidgin Internet Messenger"
-msgstr "Internetový komunikátor Pidžin"
+msgstr "Internetový komunikátor Pidgin"
 
 #: ../pidgin.desktop.in.h:3
 msgid "Send instant messages over multiple protocols"
@@ -12002,7 +12160,7 @@
 msgid "SOCKS 5"
 msgstr "SOCKS 5"
 
-#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1206
+#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1208
 msgid "Use Environmental Settings"
 msgstr "Použiť nastavenie prostredia"
 
@@ -12024,15 +12182,15 @@
 msgid "Proxy Options"
 msgstr "Možnosti proxy"
 
-#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1200
+#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1202
 msgid "Proxy _type:"
 msgstr "_Typ proxy:"
 
-#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1221
+#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1223
 msgid "_Host:"
 msgstr "_Hostiteľ:"
 
-#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1239
+#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1241
 msgid "_Port:"
 msgstr "_Port:"
 
@@ -12040,31 +12198,31 @@
 msgid "_Username:"
 msgstr "Po_užívateľské meno:"
 
-#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1276
+#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1278
 msgid "Pa_ssword:"
 msgstr "He_slo:"
 
-#: ../pidgin/gtkaccount.c:1473
+#: ../pidgin/gtkaccount.c:1478
 msgid "Add Account"
 msgstr "Pridať účet"
 
-#: ../pidgin/gtkaccount.c:1492
+#: ../pidgin/gtkaccount.c:1497
 msgid "_Basic"
 msgstr "_Základné"
 
-#: ../pidgin/gtkaccount.c:1503
+#: ../pidgin/gtkaccount.c:1508
 msgid "_Advanced"
 msgstr "_Pokročilé"
 
-#: ../pidgin/gtkaccount.c:1975 ../pidgin/gtkplugin.c:568
+#: ../pidgin/gtkaccount.c:1982 ../pidgin/gtkplugin.c:568
 msgid "Enabled"
-msgstr "Povolené"
-
-#: ../pidgin/gtkaccount.c:2003
+msgstr "Povolený"
+
+#: ../pidgin/gtkaccount.c:2010
 msgid "Protocol"
 msgstr "Protokol"
 
-#: ../pidgin/gtkaccount.c:2203
+#: ../pidgin/gtkaccount.c:2210
 #, c-format
 msgid ""
 "<span size='larger' weight='bold'>Welcome to %s!</span>\n"
@@ -12081,17 +12239,18 @@
 "\n"
 "Ešte nemáte nastavené žiadne IM účty. Ak sa chcete pripojiť pomocou programu "
 "%s, stlačte tlačidlo <b>Pridať</b> a vyplňte príslušné údaje o vašom "
-"internetovom účte. Ak sa chcete cez program %s pripájať na viaceré komunikačné "
-"účty, kliknite znovu <b>Pridať</b> a nakonfigurujte aj ďalšie.\n"
+"internetovom účte. Ak sa chcete cez program %s pripájať na viaceré "
+"komunikačné účty, kliknite znovu <b>Pridať</b> a nakonfigurujte aj ďalšie.\n"
 "\n"
 "Ak budete chcieť neskôr pridať, upravovať alebo odstrániť niektoré účty, "
-"toto okno otvoríte v ponuke <b>Účty->Pridať/Upraviťt</b> v okne Zoznam priateľov"
-
-#: ../pidgin/gtkblist.c:763
+"toto okno otvoríte v ponuke <b>Účty->Pridať/Upraviťt</b> v okne Zoznam "
+"priateľov"
+
+#: ../pidgin/gtkblist.c:760
 msgid "Join a Chat"
 msgstr "Pripojiť sa k chatu"
 
-#: ../pidgin/gtkblist.c:784
+#: ../pidgin/gtkblist.c:781
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
 "join.\n"
@@ -12100,65 +12259,65 @@
 "pripojiť.\n"
 
 #. Set up stuff for the account box
-#: ../pidgin/gtkblist.c:795 ../pidgin/gtkblist.c:5467
-#: ../pidgin/gtkblist.c:5834 ../pidgin/gtkpounce.c:540
+#: ../pidgin/gtkblist.c:792 ../pidgin/gtkblist.c:5478
+#: ../pidgin/gtkblist.c:5844 ../pidgin/gtkpounce.c:540
 #: ../pidgin/gtkroomlist.c:395
 msgid "_Account:"
 msgstr "_Účet:"
 
-#: ../pidgin/gtkblist.c:1084 ../pidgin/gtkprivacy.c:602
+#: ../pidgin/gtkblist.c:1081 ../pidgin/gtkprivacy.c:602
 #: ../pidgin/gtkprivacy.c:616
 msgid "_Block"
 msgstr "_Blokovať"
 
-#: ../pidgin/gtkblist.c:1084
+#: ../pidgin/gtkblist.c:1081
 msgid "Un_block"
 msgstr "Od_blokovať"
 
-#: ../pidgin/gtkblist.c:1135
+#: ../pidgin/gtkblist.c:1132
 msgid "Get _Info"
 msgstr "Zobraziťo podrobnosti"
 
-#: ../pidgin/gtkblist.c:1138 ../pidgin/pidginstock.c:84
+#: ../pidgin/gtkblist.c:1135 ../pidgin/pidginstock.c:84
 msgid "I_M"
 msgstr "I_M"
 
-#: ../pidgin/gtkblist.c:1144
+#: ../pidgin/gtkblist.c:1141
 msgid "_Send File"
 msgstr "Odoslať _súbor"
 
-#: ../pidgin/gtkblist.c:1151
+#: ../pidgin/gtkblist.c:1148
 msgid "Add Buddy _Pounce"
 msgstr "Pridať _sledovanie priatela"
 
-#: ../pidgin/gtkblist.c:1155 ../pidgin/gtkblist.c:1159
+#: ../pidgin/gtkblist.c:1153 ../pidgin/gtkblist.c:1157
 #: ../pidgin/gtkblist.c:1262 ../pidgin/gtkblist.c:1285
 msgid "View _Log"
 msgstr "Zobraziť _záznam"
 
-#: ../pidgin/gtkblist.c:1171 ../pidgin/gtkblist.c:1180
+#: ../pidgin/gtkblist.c:1170 ../pidgin/gtkblist.c:1179
 #: ../pidgin/gtkblist.c:1270 ../pidgin/gtkblist.c:1291
 msgid "_Alias..."
 msgstr "_Prezývka..."
 
-#: ../pidgin/gtkblist.c:1174 ../pidgin/gtkblist.c:1182
+#: ../pidgin/gtkblist.c:1173 ../pidgin/gtkblist.c:1181
 #: ../pidgin/gtkblist.c:1272 ../pidgin/gtkblist.c:1293
 msgid "_Remove"
 msgstr "Odst_rániť"
 
-#: ../pidgin/gtkblist.c:1232
+#: ../pidgin/gtkblist.c:1231
 msgid "Add a _Buddy"
 msgstr "Pridať priateľa"
 
-#: ../pidgin/gtkblist.c:1235
+#: ../pidgin/gtkblist.c:1234
 msgid "Add a C_hat"
 msgstr "Pridať chat"
 
-#: ../pidgin/gtkblist.c:1238
+#: ../pidgin/gtkblist.c:1237
 msgid "_Delete Group"
 msgstr "Odstrániť skupinu"
 
-#: ../pidgin/gtkblist.c:1240
+#: ../pidgin/gtkblist.c:1239
 msgid "_Rename"
 msgstr "Premenovať"
 
@@ -12172,20 +12331,20 @@
 msgid "Auto-Join"
 msgstr "Automatické prihlasovanie"
 
-#: ../pidgin/gtkblist.c:1298 ../pidgin/gtkblist.c:1321
+#: ../pidgin/gtkblist.c:1298 ../pidgin/gtkblist.c:1322
 msgid "_Collapse"
 msgstr "_Zabaliť"
 
-#: ../pidgin/gtkblist.c:1326
+#: ../pidgin/gtkblist.c:1327
 msgid "_Expand"
 msgstr "_Rozbaliť"
 
-#: ../pidgin/gtkblist.c:1571 ../pidgin/gtkblist.c:1583
-#: ../pidgin/gtkblist.c:4561 ../pidgin/gtkblist.c:4571
+#: ../pidgin/gtkblist.c:1572 ../pidgin/gtkblist.c:1584
+#: ../pidgin/gtkblist.c:4572 ../pidgin/gtkblist.c:4582
 msgid "/Tools/Mute Sounds"
 msgstr "/Nástroje/Vypnúť zvuky"
 
-#: ../pidgin/gtkblist.c:2043 ../pidgin/gtkconv.c:4602
+#: ../pidgin/gtkblist.c:2044 ../pidgin/gtkconv.c:4731
 #: ../pidgin/gtkpounce.c:429
 msgid ""
 "You are not currently signed on with an account that can add that buddy."
@@ -12194,126 +12353,126 @@
 "priateľa."
 
 #. Buddies menu
-#: ../pidgin/gtkblist.c:2838
+#: ../pidgin/gtkblist.c:2850
 msgid "/_Buddies"
 msgstr "/_Priatelia"
 
-#: ../pidgin/gtkblist.c:2839
+#: ../pidgin/gtkblist.c:2851
 msgid "/Buddies/New Instant _Message..."
 msgstr "/Priatelia/Nová _správa..."
 
-#: ../pidgin/gtkblist.c:2840
+#: ../pidgin/gtkblist.c:2852
 msgid "/Buddies/Join a _Chat..."
 msgstr "/Priatelia/Pripojiť sa k _chatu..."
 
-#: ../pidgin/gtkblist.c:2841
+#: ../pidgin/gtkblist.c:2853
 msgid "/Buddies/Get User _Info..."
-msgstr "/Priatelia/Získať _podrobnosti o používateľovi..."
-
-#: ../pidgin/gtkblist.c:2842
+msgstr "/Priatelia/_Podrobnosti o používateľovi..."
+
+#: ../pidgin/gtkblist.c:2854
 msgid "/Buddies/View User _Log..."
-msgstr "/Priatelia/Zobraziť _záznam používateľa..."
-
-#: ../pidgin/gtkblist.c:2844
+msgstr "/Priatelia/_Záznam používateľa..."
+
+#: ../pidgin/gtkblist.c:2856
 msgid "/Buddies/Show _Offline Buddies"
 msgstr "/Priatelia/Zobraziť _nepripojených priateľov"
 
-#: ../pidgin/gtkblist.c:2845
+#: ../pidgin/gtkblist.c:2857
 msgid "/Buddies/Show _Empty Groups"
 msgstr "/Priateliai/Zobraziť prázdne s_kupiny"
 
-#: ../pidgin/gtkblist.c:2846
+#: ../pidgin/gtkblist.c:2858
 msgid "/Buddies/Show Buddy _Details"
 msgstr "/Priatelia/Zobraziť _detaily priateľov"
 
-#: ../pidgin/gtkblist.c:2847
+#: ../pidgin/gtkblist.c:2859
 msgid "/Buddies/Show Idle _Times"
 msgstr "/Priatelia/Zobraziť č_asy nečinnosti"
 
-#: ../pidgin/gtkblist.c:2848
+#: ../pidgin/gtkblist.c:2860
 msgid "/Buddies/_Sort Buddies"
 msgstr "/Priatelia/Zo_radiť priateľov"
 
-#: ../pidgin/gtkblist.c:2850
+#: ../pidgin/gtkblist.c:2862
 msgid "/Buddies/_Add Buddy..."
 msgstr "/Priatelia/Pridať priat_eľa..."
 
-#: ../pidgin/gtkblist.c:2851
+#: ../pidgin/gtkblist.c:2863
 msgid "/Buddies/Add C_hat..."
 msgstr "/Priatelia/Pridať cha_t..."
 
-#: ../pidgin/gtkblist.c:2852
+#: ../pidgin/gtkblist.c:2864
 msgid "/Buddies/Add _Group..."
 msgstr "/Priatelia/Pridať sk_upinu..."
 
-#: ../pidgin/gtkblist.c:2854
+#: ../pidgin/gtkblist.c:2866
 msgid "/Buddies/_Quit"
 msgstr "/Priatelia/_Ukončiť"
 
 #. Accounts menu
-#: ../pidgin/gtkblist.c:2857
+#: ../pidgin/gtkblist.c:2869
 msgid "/_Accounts"
 msgstr "/Úč_ty"
 
-#: ../pidgin/gtkblist.c:2858 ../pidgin/gtkblist.c:6532
+#: ../pidgin/gtkblist.c:2870 ../pidgin/gtkblist.c:6542
 msgid "/Accounts/Add\\/Edit"
 msgstr "/Účty/Pri_dať a upraviť"
 
 #. Tools
-#: ../pidgin/gtkblist.c:2861
+#: ../pidgin/gtkblist.c:2873
 msgid "/_Tools"
 msgstr "/_Nástroje"
 
-#: ../pidgin/gtkblist.c:2862
+#: ../pidgin/gtkblist.c:2874
 msgid "/Tools/Buddy _Pounces"
 msgstr "/Nástroje/_Sledovanie priateľov"
 
-#: ../pidgin/gtkblist.c:2863
+#: ../pidgin/gtkblist.c:2875
 msgid "/Tools/Plu_gins"
 msgstr "/Nástroje/_Moduly"
 
-#: ../pidgin/gtkblist.c:2864
+#: ../pidgin/gtkblist.c:2876
 msgid "/Tools/Pr_eferences"
 msgstr "/Nástroje/_Nastavenia"
 
-#: ../pidgin/gtkblist.c:2865
+#: ../pidgin/gtkblist.c:2877
 msgid "/Tools/Pr_ivacy"
 msgstr "/Nástroje/_Súkromie"
 
-#: ../pidgin/gtkblist.c:2867
+#: ../pidgin/gtkblist.c:2879
 msgid "/Tools/_File Transfers"
 msgstr "/Nástroje/_Prenosy súborov"
 
-#: ../pidgin/gtkblist.c:2868
+#: ../pidgin/gtkblist.c:2880
 msgid "/Tools/R_oom List"
 msgstr "/Nástroje/Zoznam _miestností"
 
-#: ../pidgin/gtkblist.c:2869
+#: ../pidgin/gtkblist.c:2881
 msgid "/Tools/System _Log"
 msgstr "/Nástroje/Systémový _záznam"
 
-#: ../pidgin/gtkblist.c:2871
+#: ../pidgin/gtkblist.c:2883
 msgid "/Tools/Mute _Sounds"
 msgstr "/Nástroje/Vypnúť _zvuky"
 
 #. Help
-#: ../pidgin/gtkblist.c:2873
+#: ../pidgin/gtkblist.c:2885
 msgid "/_Help"
 msgstr "/_Pomocník"
 
-#: ../pidgin/gtkblist.c:2874
+#: ../pidgin/gtkblist.c:2886
 msgid "/Help/Online _Help"
 msgstr "/Pomoc/Online _pomocník"
 
-#: ../pidgin/gtkblist.c:2875
+#: ../pidgin/gtkblist.c:2887
 msgid "/Help/_Debug Window"
 msgstr "/Pomoc/_Ladiace okno"
 
-#: ../pidgin/gtkblist.c:2877 ../pidgin/gtkblist.c:2879
+#: ../pidgin/gtkblist.c:2889 ../pidgin/gtkblist.c:2891
 msgid "/Help/_About"
 msgstr "/Pomoc/O _programe"
 
-#: ../pidgin/gtkblist.c:2908
+#: ../pidgin/gtkblist.c:2920
 #, c-format
 msgid ""
 "\n"
@@ -12322,78 +12481,78 @@
 "\n"
 "<b>Účet:</b> %s"
 
-#: ../pidgin/gtkblist.c:2986
+#: ../pidgin/gtkblist.c:2998
 msgid "Buddy Alias"
 msgstr "Prezývka priateľa"
 
-#: ../pidgin/gtkblist.c:3015
+#: ../pidgin/gtkblist.c:3027
 msgid "Logged In"
 msgstr "Prihlásený"
 
-#: ../pidgin/gtkblist.c:3061
+#: ../pidgin/gtkblist.c:3073
 msgid "Last Seen"
 msgstr "Naposledy tu"
 
-#: ../pidgin/gtkblist.c:3081
+#: ../pidgin/gtkblist.c:3093
 msgid "Spooky"
 msgstr "Strašidelné"
 
-#: ../pidgin/gtkblist.c:3083
+#: ../pidgin/gtkblist.c:3095
 msgid "Awesome"
 msgstr "Hrozné"
 
-#: ../pidgin/gtkblist.c:3085
+#: ../pidgin/gtkblist.c:3097
 msgid "Rockin'"
 msgstr "Super"
 
-#: ../pidgin/gtkblist.c:3428
+#: ../pidgin/gtkblist.c:3436
 #, c-format
 msgid "Idle %dd %dh %02dm"
 msgstr "Nečinný %dd %dh %02dm"
 
-#: ../pidgin/gtkblist.c:3430
+#: ../pidgin/gtkblist.c:3438
 #, c-format
 msgid "Idle %dh %02dm"
 msgstr "Nečinný %dh %02dm"
 
-#: ../pidgin/gtkblist.c:3432
+#: ../pidgin/gtkblist.c:3440
 #, c-format
 msgid "Idle %dm"
 msgstr "Nečinný %dm"
 
-#: ../pidgin/gtkblist.c:3577
+#: ../pidgin/gtkblist.c:3585
 msgid "/Buddies/New Instant Message..."
 msgstr "/Priatelia/Nová _správa..."
 
-#: ../pidgin/gtkblist.c:3578 ../pidgin/gtkblist.c:3611
+#: ../pidgin/gtkblist.c:3586 ../pidgin/gtkblist.c:3619
 msgid "/Buddies/Join a Chat..."
 msgstr "/Priatelia/Pripojiť sa k _chatu..."
 
-#: ../pidgin/gtkblist.c:3579
+#: ../pidgin/gtkblist.c:3587
 msgid "/Buddies/Get User Info..."
 msgstr "/Priatelia/Zobraziť podrobnosti..."
 
-#: ../pidgin/gtkblist.c:3580
+#: ../pidgin/gtkblist.c:3588
 msgid "/Buddies/Add Buddy..."
 msgstr "/Priatelia/Pridať priateľa..."
 
-#: ../pidgin/gtkblist.c:3581 ../pidgin/gtkblist.c:3614
+#: ../pidgin/gtkblist.c:3589 ../pidgin/gtkblist.c:3622
 msgid "/Buddies/Add Chat..."
 msgstr "/Priatelia/Pridať chat..."
 
-#: ../pidgin/gtkblist.c:3582
+#: ../pidgin/gtkblist.c:3590
 msgid "/Buddies/Add Group..."
 msgstr "/Priatelia/Pridať skupinu..."
 
-#: ../pidgin/gtkblist.c:3617
+#: ../pidgin/gtkblist.c:3625
 msgid "/Tools/Privacy"
 msgstr "/Nástroje/_Súkromie"
 
-#: ../pidgin/gtkblist.c:3620
+#: ../pidgin/gtkblist.c:3628
 msgid "/Tools/Room List"
 msgstr "/Nástroje/Zoznam _miestností"
 
-#: ../pidgin/gtkblist.c:3717 ../pidgin/gtkdocklet.c:153
+#: ../pidgin/gtkblist.c:3725 ../pidgin/gtkdocklet.c:153
 #, c-format
 msgid "%d unread message from %s\n"
 msgid_plural "%d unread messages from %s\n"
@@ -12401,54 +12560,54 @@
 msgstr[1] "%d neprečítaná správa od používateľa %s\n"
 msgstr[2] "%d neprečítané správy od používateľa %s\n"
 
-#: ../pidgin/gtkblist.c:3797
+#: ../pidgin/gtkblist.c:3805
 msgid "Manually"
 msgstr "Ručne"
 
-#: ../pidgin/gtkblist.c:3799
+#: ../pidgin/gtkblist.c:3807
 msgid "Alphabetically"
 msgstr "Podľa abecedy"
 
-#: ../pidgin/gtkblist.c:3800
+#: ../pidgin/gtkblist.c:3808
 msgid "By status"
 msgstr "Podľa stavu"
 
-#: ../pidgin/gtkblist.c:3801
+#: ../pidgin/gtkblist.c:3809
 msgid "By log size"
 msgstr "Podľa veľkosti záznamu"
 
-#: ../pidgin/gtkblist.c:4005 ../pidgin/gtkconn.c:178
+#: ../pidgin/gtkblist.c:4014 ../pidgin/gtkconn.c:178
 #, c-format
 msgid "%s disconnected"
 msgstr "%s bol odpojený"
 
-#: ../pidgin/gtkblist.c:4015
+#: ../pidgin/gtkblist.c:4024
 msgid "Re-enable Account"
 msgstr "Znovu povoliť účet"
 
-#: ../pidgin/gtkblist.c:4039
+#: ../pidgin/gtkblist.c:4050
 #, c-format
 msgid "<span color=\"red\">%s disconnected: %s</span>"
 msgstr "<span color=\"red\">%s bol odpojený: %s</span>"
 
-#: ../pidgin/gtkblist.c:4191
+#: ../pidgin/gtkblist.c:4202
 msgid "<b>Username:</b>"
-msgstr "<b>Používateľské meno:</b>"
-
-#: ../pidgin/gtkblist.c:4198
+msgstr "<b>Prihlasovacie meno:</b>"
+
+#: ../pidgin/gtkblist.c:4209
 msgid "<b>Password:</b>"
 msgstr "<b>Heslo:</b>"
 
-#: ../pidgin/gtkblist.c:4209
+#: ../pidgin/gtkblist.c:4220
 msgid "_Login"
 msgstr "Prihlásiť"
 
-#: ../pidgin/gtkblist.c:4292
+#: ../pidgin/gtkblist.c:4303
 msgid "/Accounts"
 msgstr "/Účty"
 
 #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy
-#: ../pidgin/gtkblist.c:4306
+#: ../pidgin/gtkblist.c:4317
 #, c-format
 msgid ""
 "<span weight='bold' size='larger'>Welcome to %s!</span>\n"
@@ -12459,31 +12618,31 @@
 msgstr ""
 "<span weight='bold' size='larger'>Vitajte v programe %s!</span>\n"
 "\n"
-"Zatiaľ nemáte pridané žiadne IM účty. Môžete ich pridať v okne <b>Účty</"
-"b> ktoré nájdete v ponuke <b>Účty->Pridať a upraviť</b>. Po tom, ako "
-"pridáte váš účet, budete sa môcť prihlásiť, zmeniť svoj stav a písať si s "
-"vašimi priateľmi."
+"Zatiaľ nemáte pridané žiadne IM účty. Môžete ich pridať v okne <b>Účty</b> "
+"ktoré nájdete v ponuke <b>Účty->Pridať a upraviť</b>. Po tom, ako pridáte "
+"váš účet, budete sa môcť prihlásiť, zmeniť svoj stav a písať si s vašimi "
+"priateľmi."
 
 #. set the Show Offline Buddies option. must be done
 #. * after the treeview or faceprint gets mad. -Robot101
 #.
-#: ../pidgin/gtkblist.c:4555
+#: ../pidgin/gtkblist.c:4566
 msgid "/Buddies/Show Offline Buddies"
 msgstr "/Priatelia/Zobraziť _nepripojených priateľov"
 
-#: ../pidgin/gtkblist.c:4558
+#: ../pidgin/gtkblist.c:4569
 msgid "/Buddies/Show Empty Groups"
 msgstr "/Priatelia/Zobraziť prázdne s_kupiny"
 
-#: ../pidgin/gtkblist.c:4564
+#: ../pidgin/gtkblist.c:4575
 msgid "/Buddies/Show Buddy Details"
 msgstr "/Nástroje/Zobraziť _detaily priateľov"
 
-#: ../pidgin/gtkblist.c:4567
+#: ../pidgin/gtkblist.c:4578
 msgid "/Buddies/Show Idle Times"
 msgstr "/Priatelia/Zobraziť č_asy nečinnosti"
 
-#: ../pidgin/gtkblist.c:5444
+#: ../pidgin/gtkblist.c:5455
 msgid ""
 "Please enter the screen name of the person you would like to add to your "
 "buddy list. You may optionally enter an alias, or nickname,  for the buddy. "
@@ -12494,25 +12653,25 @@
 "v zozname priateľov namiesto mena používateľa vždy, keď to bude možné.\n"
 
 #. End of account box
-#: ../pidgin/gtkblist.c:5479
+#: ../pidgin/gtkblist.c:5490
 msgid "_Screen name:"
 msgstr "_Používateľské meno:"
 
-#: ../pidgin/gtkblist.c:5501 ../pidgin/gtkblist.c:5855
+#: ../pidgin/gtkblist.c:5512 ../pidgin/gtkblist.c:5865
 msgid "A_lias:"
 msgstr "P_rezývka:"
 
-#: ../pidgin/gtkblist.c:5767
+#: ../pidgin/gtkblist.c:5777
 msgid "This protocol does not support chat rooms."
 msgstr "Tento protokol nepodporuje miestnosti chatu."
 
-#: ../pidgin/gtkblist.c:5783
+#: ../pidgin/gtkblist.c:5793
 msgid ""
 "You are not currently signed on with any protocols that have the ability to "
 "chat."
 msgstr "Momentálne nie ste pripojený na protokole, ktorý by podporoval chat."
 
-#: ../pidgin/gtkblist.c:5824
+#: ../pidgin/gtkblist.c:5834
 msgid ""
 "Please enter an alias, and the appropriate information about the chat you "
 "would like to add to your buddy list.\n"
@@ -12520,39 +12679,39 @@
 "Prosím, zadajte prezývku a príslušné informácie o chate, ktorý chcete pridať "
 "do vášho zoznamu priateľov.\n"
 
-#: ../pidgin/gtkblist.c:5912
+#: ../pidgin/gtkblist.c:5922
 msgid "Please enter the name of the group to be added."
 msgstr "Prosím, zadajte názov skupiny ktorú chcete pridať."
 
-#: ../pidgin/gtkblist.c:6552
+#: ../pidgin/gtkblist.c:6562
 msgid "<PurpleMain>/Accounts/"
 msgstr "<PurpleMain>/Účty/"
 
-#: ../pidgin/gtkblist.c:6576
+#: ../pidgin/gtkblist.c:6586
 msgid "_Edit Account"
 msgstr "_Upraviť účet"
 
-#: ../pidgin/gtkblist.c:6589 ../pidgin/gtkconv.c:2982
+#: ../pidgin/gtkblist.c:6599 ../pidgin/gtkconv.c:3037
 msgid "No actions available"
 msgstr "Nie sú dostupné žiadne akcie"
 
-#: ../pidgin/gtkblist.c:6597
+#: ../pidgin/gtkblist.c:6607
 msgid "_Disable"
 msgstr "_Vypnúť"
 
-#: ../pidgin/gtkblist.c:6609
+#: ../pidgin/gtkblist.c:6619
 msgid "Enable Account"
 msgstr "Povoliť účet"
 
-#: ../pidgin/gtkblist.c:6615
+#: ../pidgin/gtkblist.c:6625
 msgid "<PurpleMain>/Accounts/Enable Account"
 msgstr "<PurpleMain>/Účty/Povoliť účet"
 
-#: ../pidgin/gtkblist.c:6664
+#: ../pidgin/gtkblist.c:6674
 msgid "/Tools"
 msgstr "/Nástroje"
 
-#: ../pidgin/gtkblist.c:6734
+#: ../pidgin/gtkblist.c:6744
 msgid "/Buddies/Sort Buddies"
 msgstr "/Priatelia/Zoradiť priateľov"
 
@@ -12566,29 +12725,29 @@
 msgstr ""
 "%s\n"
 "\n"
-"%s sa nebude znovu pokúšať pripojiť na tento účet, kým neopravíte chybu "
-"a znovu nepovolíte tento účet."
-
-#: ../pidgin/gtkconv.c:485
+"%s sa nebude znovu pokúšať pripojiť na tento účet, kým neopravíte chybu a "
+"znovu nepovolíte tento účet."
+
+#: ../pidgin/gtkconv.c:488
 msgid "Unknown command."
 msgstr "Neznámy príkaz."
 
-#: ../pidgin/gtkconv.c:757 ../pidgin/gtkconv.c:783
+#: ../pidgin/gtkconv.c:760 ../pidgin/gtkconv.c:786
 msgid "That buddy is not on the same protocol as this chat."
 msgstr "Priateľ nie je na tom istom protokole ako tento chat"
 
-#: ../pidgin/gtkconv.c:777
+#: ../pidgin/gtkconv.c:780
 msgid ""
 "You are not currently signed on with an account that can invite that buddy."
 msgstr ""
 "Momentálne nie ste prihlásený v účte, ktorý dokáže pozvať tohoto priateľa."
 
-#: ../pidgin/gtkconv.c:830
+#: ../pidgin/gtkconv.c:833
 msgid "Invite Buddy Into Chat Room"
 msgstr "Pozvať priateľa do miestnosti chatu"
 
 #. Put our happy label in it.
-#: ../pidgin/gtkconv.c:860
+#: ../pidgin/gtkconv.c:863
 msgid ""
 "Please enter the name of the user you wish to invite, along with an optional "
 "invite message."
@@ -12596,201 +12755,201 @@
 "Zadajte, prosím, meno používateľa, ktorého chcete pozvať, spolu s nepovinnou "
 "pozývacou správou."
 
-#: ../pidgin/gtkconv.c:881
+#: ../pidgin/gtkconv.c:884
 msgid "_Buddy:"
 msgstr "_Priateľ:"
 
-#: ../pidgin/gtkconv.c:901 ../pidgin/gtksavedstatuses.c:1193
+#: ../pidgin/gtkconv.c:904 ../pidgin/gtksavedstatuses.c:1193
 #: ../pidgin/gtksavedstatuses.c:1525
 msgid "_Message:"
 msgstr "_Správa:"
 
-#: ../pidgin/gtkconv.c:958 ../pidgin/gtkconv.c:2506 ../pidgin/gtkdebug.c:218
+#: ../pidgin/gtkconv.c:961 ../pidgin/gtkconv.c:2544 ../pidgin/gtkdebug.c:218
 #: ../pidgin/gtkft.c:542
 msgid "Unable to open file."
 msgstr "Nepodarilo sa otvoriť súbor."
 
-#: ../pidgin/gtkconv.c:964
+#: ../pidgin/gtkconv.c:967
 #, c-format
 msgid "<h1>Conversation with %s</h1>\n"
 msgstr "<h1>Rozhovor s %s</h1>\n"
 
-#: ../pidgin/gtkconv.c:1000
+#: ../pidgin/gtkconv.c:1003
 msgid "Save Conversation"
 msgstr "Uložiť konverzáciu"
 
-#: ../pidgin/gtkconv.c:1149 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742
+#: ../pidgin/gtkconv.c:1152 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742
 msgid "Find"
 msgstr "Nájsť"
 
-#: ../pidgin/gtkconv.c:1175 ../pidgin/gtkdebug.c:194
+#: ../pidgin/gtkconv.c:1178 ../pidgin/gtkdebug.c:194
 msgid "_Search for:"
 msgstr "Hľadať:"
 
-#: ../pidgin/gtkconv.c:1358
+#: ../pidgin/gtkconv.c:1361
 msgid "Logging started. Future messages in this conversation will be logged."
 msgstr ""
 "Zaznamenávanie bolo spustené. Nasledujúce správy v rozhovore budú "
 "zaznamenané."
 
-#: ../pidgin/gtkconv.c:1366
+#: ../pidgin/gtkconv.c:1369
 msgid ""
 "Logging stopped. Future messages in this conversation will not be logged."
 msgstr ""
 "Zaznamenávanie bolo zastavené. Nasledujúce správy v rozhovore už nebudú "
 "zaznamenané."
 
-#: ../pidgin/gtkconv.c:1614
+#: ../pidgin/gtkconv.c:1617
 msgid "Un-Ignore"
 msgstr "Neignorovať"
 
-#: ../pidgin/gtkconv.c:1617
+#: ../pidgin/gtkconv.c:1620
 msgid "Ignore"
 msgstr "Ignorovať"
 
-#: ../pidgin/gtkconv.c:1637
+#: ../pidgin/gtkconv.c:1640
 msgid "Get Away Message"
 msgstr "Získať správu o neprítomnosti"
 
-#: ../pidgin/gtkconv.c:1660
+#: ../pidgin/gtkconv.c:1663
 msgid "Last said"
 msgstr "Naposledy povedal"
 
-#: ../pidgin/gtkconv.c:2514
+#: ../pidgin/gtkconv.c:2552
 msgid "Unable to save icon file to disk."
 msgstr "Nepodarilo sa uložiť súbor ikony na disk."
 
-#: ../pidgin/gtkconv.c:2565
+#: ../pidgin/gtkconv.c:2603
 msgid "Save Icon"
 msgstr "Uložiť ikonu"
 
-#: ../pidgin/gtkconv.c:2617
+#: ../pidgin/gtkconv.c:2655
 msgid "Animate"
 msgstr "Animovať"
 
-#: ../pidgin/gtkconv.c:2622
+#: ../pidgin/gtkconv.c:2660
 msgid "Hide Icon"
 msgstr "Skryť ikonu"
 
-#: ../pidgin/gtkconv.c:2625
+#: ../pidgin/gtkconv.c:2663
 msgid "Save Icon As..."
 msgstr "Uložiť ikonu ako..."
 
-#: ../pidgin/gtkconv.c:2629
+#: ../pidgin/gtkconv.c:2667
 msgid "Set Custom Icon..."
 msgstr "Nastaviť vlastnú ikonu..."
 
-#: ../pidgin/gtkconv.c:2642
+#: ../pidgin/gtkconv.c:2680
 msgid "Remove Custom Icon"
 msgstr "Odstrániť vlastnú ikonu"
 
 #. Conversation menu
-#: ../pidgin/gtkconv.c:2784
+#: ../pidgin/gtkconv.c:2822
 msgid "/_Conversation"
 msgstr "/_Rozhovor"
 
-#: ../pidgin/gtkconv.c:2786
+#: ../pidgin/gtkconv.c:2824
 msgid "/Conversation/New Instant _Message..."
 msgstr "/Rozhovor/Nová správa..."
 
-#: ../pidgin/gtkconv.c:2791
+#: ../pidgin/gtkconv.c:2829
 msgid "/Conversation/_Find..."
 msgstr "/Rozhovor/_Hľadať..."
 
-#: ../pidgin/gtkconv.c:2793
+#: ../pidgin/gtkconv.c:2831
 msgid "/Conversation/View _Log"
 msgstr "/Rozhovor/Zobraziť _záznam"
 
-#: ../pidgin/gtkconv.c:2794
+#: ../pidgin/gtkconv.c:2832
 msgid "/Conversation/_Save As..."
 msgstr "/Rozhovor/_Uložiť ako..."
 
-#: ../pidgin/gtkconv.c:2796
+#: ../pidgin/gtkconv.c:2834
 msgid "/Conversation/Clea_r Scrollback"
 msgstr "/Rozhovor/Vymazať"
 
-#: ../pidgin/gtkconv.c:2800
+#: ../pidgin/gtkconv.c:2838
 msgid "/Conversation/Se_nd File..."
 msgstr "/Rozhovor/Odos_lať súbor..."
 
-#: ../pidgin/gtkconv.c:2801
+#: ../pidgin/gtkconv.c:2839
 msgid "/Conversation/Add Buddy _Pounce..."
 msgstr "/Rozhovor/Pridať _sledovanie priateľa..."
 
-#: ../pidgin/gtkconv.c:2803
+#: ../pidgin/gtkconv.c:2841
 msgid "/Conversation/_Get Info"
 msgstr "/Rozhovor/_Zobraziť podrobnosti"
 
-#: ../pidgin/gtkconv.c:2805
+#: ../pidgin/gtkconv.c:2843
 msgid "/Conversation/In_vite..."
 msgstr "/Rozhovor/Poz_vať..."
 
-#: ../pidgin/gtkconv.c:2807
+#: ../pidgin/gtkconv.c:2845
 msgid "/Conversation/M_ore"
 msgstr "/Conversation/Via_c"
 
-#: ../pidgin/gtkconv.c:2811
+#: ../pidgin/gtkconv.c:2849
 msgid "/Conversation/Al_ias..."
 msgstr "/Rozhovor/Pre_zývka..."
 
-#: ../pidgin/gtkconv.c:2813
+#: ../pidgin/gtkconv.c:2851
 msgid "/Conversation/_Block..."
 msgstr "/Rozhovor/_Blokovať..."
 
-#: ../pidgin/gtkconv.c:2815
+#: ../pidgin/gtkconv.c:2853
 msgid "/Conversation/_Unblock..."
 msgstr "/Rozhovor/_Odblokovať..."
 
-#: ../pidgin/gtkconv.c:2817
+#: ../pidgin/gtkconv.c:2855
 msgid "/Conversation/_Add..."
 msgstr "/Rozhovor/_Pridať..."
 
-#: ../pidgin/gtkconv.c:2819
+#: ../pidgin/gtkconv.c:2857
 msgid "/Conversation/_Remove..."
 msgstr "/Rozhovor/_Odstrániť..."
 
-#: ../pidgin/gtkconv.c:2824
+#: ../pidgin/gtkconv.c:2862
 msgid "/Conversation/Insert Lin_k..."
 msgstr "/Rozhovor/Vložiť od_kaz..."
 
-#: ../pidgin/gtkconv.c:2826
+#: ../pidgin/gtkconv.c:2864
 msgid "/Conversation/Insert Imag_e..."
 msgstr "/Rozhovor/Vložiť _obrázok..."
 
-#: ../pidgin/gtkconv.c:2832
+#: ../pidgin/gtkconv.c:2870
 msgid "/Conversation/_Close"
 msgstr "/Rozhovor/_Zavrieť"
 
 #. Options
-#: ../pidgin/gtkconv.c:2836
+#: ../pidgin/gtkconv.c:2874
 msgid "/_Options"
 msgstr "/_Možnosti"
 
-#: ../pidgin/gtkconv.c:2837
+#: ../pidgin/gtkconv.c:2875
 msgid "/Options/Enable _Logging"
 msgstr "/Možnosti/Povoliť zaz_namenávanie"
 
-#: ../pidgin/gtkconv.c:2838
+#: ../pidgin/gtkconv.c:2876
 msgid "/Options/Enable _Sounds"
 msgstr "/Možnosti/Povoliť _zvuky"
 
-#: ../pidgin/gtkconv.c:2839
+#: ../pidgin/gtkconv.c:2877
 msgid "/Options/Show Buddy _Icon"
 msgstr "/Možnosti/Zobraziť ikonu priateľa"
 
-#: ../pidgin/gtkconv.c:2841
+#: ../pidgin/gtkconv.c:2879
 msgid "/Options/Show Formatting _Toolbars"
 msgstr "/Možnosti/Zobraziť panely formá_tovania"
 
-#: ../pidgin/gtkconv.c:2842
+#: ../pidgin/gtkconv.c:2880
 msgid "/Options/Show Ti_mestamps"
 msgstr "/Možnosti/Zobrazovať ča_sové značky"
 
-#: ../pidgin/gtkconv.c:2918
+#: ../pidgin/gtkconv.c:3025
 msgid "/Conversation/More"
 msgstr "/Rozhovor/Viac"
 
-#: ../pidgin/gtkconv.c:3026
+#: ../pidgin/gtkconv.c:3081
 msgid "/Options"
 msgstr "/_Možnosti"
 
@@ -12799,101 +12958,101 @@
 #. Make sure the 'Conversation -> More' menuitems are regenerated whenever
 #. * the 'Conversation' menu pops up because the entries can change after the
 #. * conversation is created.
-#: ../pidgin/gtkconv.c:3061 ../pidgin/gtkconv.c:3093
+#: ../pidgin/gtkconv.c:3116 ../pidgin/gtkconv.c:3148
 msgid "/Conversation"
 msgstr "/Rozhovor"
 
-#: ../pidgin/gtkconv.c:3101
+#: ../pidgin/gtkconv.c:3156
 msgid "/Conversation/View Log"
 msgstr "/Rozhovor/Zobraziť _záznam"
 
-#: ../pidgin/gtkconv.c:3107
+#: ../pidgin/gtkconv.c:3162
 msgid "/Conversation/Send File..."
 msgstr "/Rozhovor/Odos_lať súbor..."
 
-#: ../pidgin/gtkconv.c:3111
+#: ../pidgin/gtkconv.c:3166
 msgid "/Conversation/Add Buddy Pounce..."
 msgstr "/Rozhovor/Pridať _sledovanie priateľa..."
 
-#: ../pidgin/gtkconv.c:3117
+#: ../pidgin/gtkconv.c:3172
 msgid "/Conversation/Get Info"
 msgstr "/Rozhovor/_Zobraziť podrobnosti"
 
-#: ../pidgin/gtkconv.c:3121
+#: ../pidgin/gtkconv.c:3176
 msgid "/Conversation/Invite..."
 msgstr "/Rozhovor/Poz_vať..."
 
-#: ../pidgin/gtkconv.c:3127
+#: ../pidgin/gtkconv.c:3182
 msgid "/Conversation/Alias..."
 msgstr "/Rozhovor/Pre_zývka..."
 
-#: ../pidgin/gtkconv.c:3131
+#: ../pidgin/gtkconv.c:3186
 msgid "/Conversation/Block..."
 msgstr "/Rozhovor/_Blokovať..."
 
-#: ../pidgin/gtkconv.c:3135
+#: ../pidgin/gtkconv.c:3190
 msgid "/Conversation/Unblock..."
 msgstr "/Rozhovor/_Odblokovať..."
 
-#: ../pidgin/gtkconv.c:3139
+#: ../pidgin/gtkconv.c:3194
 msgid "/Conversation/Add..."
 msgstr "/Rozhovor/_Pridať..."
 
-#: ../pidgin/gtkconv.c:3143
+#: ../pidgin/gtkconv.c:3198
 msgid "/Conversation/Remove..."
 msgstr "/Conversation/Remove..."
 
-#: ../pidgin/gtkconv.c:3149
+#: ../pidgin/gtkconv.c:3204
 msgid "/Conversation/Insert Link..."
 msgstr "/Rozhovor/Vložiť odkaz..."
 
-#: ../pidgin/gtkconv.c:3153
+#: ../pidgin/gtkconv.c:3208
 msgid "/Conversation/Insert Image..."
 msgstr "/Rozhovor/Vložiť obrázok..."
 
-#: ../pidgin/gtkconv.c:3159
+#: ../pidgin/gtkconv.c:3214
 msgid "/Options/Enable Logging"
 msgstr "/Možnosti/Povoliť zaz_namenávanie"
 
-#: ../pidgin/gtkconv.c:3162
+#: ../pidgin/gtkconv.c:3217
 msgid "/Options/Enable Sounds"
 msgstr "/Možnosti/Povoliť _zvuky"
 
-#: ../pidgin/gtkconv.c:3175
+#: ../pidgin/gtkconv.c:3230
 msgid "/Options/Show Formatting Toolbars"
 msgstr "/Možnosti/Zobraziť panely formá_tovania"
 
-#: ../pidgin/gtkconv.c:3178
+#: ../pidgin/gtkconv.c:3233
 msgid "/Options/Show Timestamps"
 msgstr "/Možnosti/Zobrazovať ča_sové značky"
 
-#: ../pidgin/gtkconv.c:3181
+#: ../pidgin/gtkconv.c:3236
 msgid "/Options/Show Buddy Icon"
 msgstr "/Možnosti/Zobraziť ikonu priateľa"
 
-#: ../pidgin/gtkconv.c:3265 ../pidgin/gtkconv.c:3307
+#: ../pidgin/gtkconv.c:3320 ../pidgin/gtkconv.c:3362
 msgid "User is typing..."
 msgstr "Používateľ píše..."
 
-#: ../pidgin/gtkconv.c:3310
+#: ../pidgin/gtkconv.c:3365
 msgid "User has typed something and stopped"
 msgstr "Používateľ niečo napísal a prestal"
 
 #. Build the Send To menu
-#: ../pidgin/gtkconv.c:3492
+#: ../pidgin/gtkconv.c:3548 ../pidgin/gtkconv.c:7812
 msgid "_Send To"
-msgstr "Odo_slať kam"
-
-#: ../pidgin/gtkconv.c:4206
+msgstr "Po_slať cez"
+
+#: ../pidgin/gtkconv.c:4261
 msgid "_Send"
 msgstr "Odo_slať"
 
 #. Setup the label telling how many people are in the room.
-#: ../pidgin/gtkconv.c:4310
+#: ../pidgin/gtkconv.c:4365
 msgid "0 people in room"
 msgstr "V miestnosti je 0 osôb"
 
-#: ../pidgin/gtkconv.c:5496 ../pidgin/gtkconv.c:5617
+#: ../pidgin/gtkconv.c:5633 ../pidgin/gtkconv.c:5754
 #, c-format
 msgid "%d person in room"
 msgid_plural "%d people in room"
@@ -12901,75 +13060,75 @@
 msgstr[1] "V miestnosti je %d osoba"
 msgstr[2] "V miestnosti sú %d osoby"
 
-#: ../pidgin/gtkconv.c:6216 ../pidgin/gtkstatusbox.c:659
+#: ../pidgin/gtkconv.c:6357 ../pidgin/gtkstatusbox.c:659
 msgid "Typing"
 msgstr "Píše"
 
-#: ../pidgin/gtkconv.c:6222
+#: ../pidgin/gtkconv.c:6361
 msgid "Stopped Typing"
 msgstr "Prestal písať"
 
-#: ../pidgin/gtkconv.c:6227
+#: ../pidgin/gtkconv.c:6364
 msgid "Nick Said"
 msgstr "Používateľ napísal"
 
-#: ../pidgin/gtkconv.c:6232 ../pidgin/gtkdocklet.c:492
+#: ../pidgin/gtkconv.c:6367 ../pidgin/gtkdocklet.c:492
 msgid "Unread Messages"
 msgstr "Neprečítané správy"
 
-#: ../pidgin/gtkconv.c:6237
+#: ../pidgin/gtkconv.c:6370
 msgid "New Event"
 msgstr "Nová udalosť"
 
-#: ../pidgin/gtkconv.c:7210
+#: ../pidgin/gtkconv.c:7362
 msgid "clear: Clears all conversation scrollbacks."
 msgstr "clear: Vyčistí všetky záznamy konverzácie."
 
-#: ../pidgin/gtkconv.c:7374
+#: ../pidgin/gtkconv.c:7526
 msgid "Confirm close"
 msgstr "Potvrdenie uzavrenia"
 
-#: ../pidgin/gtkconv.c:7406
+#: ../pidgin/gtkconv.c:7558
 msgid "You have unread messages. Are you sure you want to close the window?"
 msgstr "Máte neprečítané správy. Naozaj chcete zavrieť toto okno?"
 
-#: ../pidgin/gtkconv.c:7978
+#: ../pidgin/gtkconv.c:8144
 msgid "Close other tabs"
 msgstr "Zavrieť ostatné karty"
 
-#: ../pidgin/gtkconv.c:7984
+#: ../pidgin/gtkconv.c:8150
 msgid "Close all tabs"
 msgstr "Zavrieť všetky karty"
 
-#: ../pidgin/gtkconv.c:7992
+#: ../pidgin/gtkconv.c:8158
 msgid "Detach this tab"
 msgstr "Odpojiť túto kartu"
 
-#: ../pidgin/gtkconv.c:7998
+#: ../pidgin/gtkconv.c:8164
 msgid "Close this tab"
 msgstr "Zavrieť túto kartu"
 
-#: ../pidgin/gtkconv.c:8444
+#: ../pidgin/gtkconv.c:8662
 msgid "Close conversation"
 msgstr "Zavrieť rozhovor"
 
-#: ../pidgin/gtkconv.c:8968
+#: ../pidgin/gtkconv.c:9261
 msgid "Last created window"
 msgstr "Naposledy otvorené okno"
 
-#: ../pidgin/gtkconv.c:8970
+#: ../pidgin/gtkconv.c:9263
 msgid "Separate IM and Chat windows"
 msgstr "Oddeľovať okná pre IM a Chat"
 
-#: ../pidgin/gtkconv.c:8972 ../pidgin/gtkprefs.c:1410
+#: ../pidgin/gtkconv.c:9265 ../pidgin/gtkprefs.c:1412
 msgid "New window"
 msgstr "Nové okno"
 
-#: ../pidgin/gtkconv.c:8974
+#: ../pidgin/gtkconv.c:9267
 msgid "By group"
 msgstr "Podľa skupiny"
 
-#: ../pidgin/gtkconv.c:8976
+#: ../pidgin/gtkconv.c:9269
 msgid "By account"
 msgstr "Podľa účtu"
 
@@ -13033,25 +13192,22 @@
 msgid "Fatal Error"
 msgstr "Závažná chyba"
 
-#: ../pidgin/gtkdialogs.c:71 ../pidgin/gtkdialogs.c:117
+#: ../pidgin/gtkdialogs.c:71 ../pidgin/gtkdialogs.c:113
 msgid "lead developer"
 msgstr "vedúci vývojár"
 
 #: ../pidgin/gtkdialogs.c:72 ../pidgin/gtkdialogs.c:73
 #: ../pidgin/gtkdialogs.c:74 ../pidgin/gtkdialogs.c:75
-#: ../pidgin/gtkdialogs.c:76 ../pidgin/gtkdialogs.c:78
-#: ../pidgin/gtkdialogs.c:79 ../pidgin/gtkdialogs.c:80
-#: ../pidgin/gtkdialogs.c:81 ../pidgin/gtkdialogs.c:82
-#: ../pidgin/gtkdialogs.c:83 ../pidgin/gtkdialogs.c:84
-#: ../pidgin/gtkdialogs.c:85 ../pidgin/gtkdialogs.c:88
-#: ../pidgin/gtkdialogs.c:89 ../pidgin/gtkdialogs.c:90
+#: ../pidgin/gtkdialogs.c:76 ../pidgin/gtkdialogs.c:77
+#: ../pidgin/gtkdialogs.c:78 ../pidgin/gtkdialogs.c:79
+#: ../pidgin/gtkdialogs.c:80 ../pidgin/gtkdialogs.c:81
+#: ../pidgin/gtkdialogs.c:82 ../pidgin/gtkdialogs.c:83
+#: ../pidgin/gtkdialogs.c:84 ../pidgin/gtkdialogs.c:85
+#: ../pidgin/gtkdialogs.c:88 ../pidgin/gtkdialogs.c:89
+#: ../pidgin/gtkdialogs.c:90
 msgid "developer"
 msgstr "vývojár"
 
-#: ../pidgin/gtkdialogs.c:77
-msgid "developer & webmaster"
-msgstr "vývojár & webmaster"
-
 #: ../pidgin/gtkdialogs.c:86
 msgid "support"
 msgstr "podpora"
@@ -13060,315 +13216,321 @@
 msgid "support/QA"
 msgstr "podpora/testovanie"
 
-#: ../pidgin/gtkdialogs.c:109
+#: ../pidgin/gtkdialogs.c:104
 msgid "win32 port"
 msgstr "port na win32"
 
-#: ../pidgin/gtkdialogs.c:110 ../pidgin/gtkdialogs.c:111
+#: ../pidgin/gtkdialogs.c:105 ../pidgin/gtkdialogs.c:106
 msgid "maintainer"
 msgstr "správca"
 
-#: ../pidgin/gtkdialogs.c:112
+#: ../pidgin/gtkdialogs.c:107
 msgid "libfaim maintainer"
 msgstr "správca libfaim"
 
+#: ../pidgin/gtkdialogs.c:108
+msgid "developer & webmaster"
+msgstr "vývojár & webmaster"
+
 #. If "lazy bum" translates literally into a serious insult, use something else or omit it.
-#: ../pidgin/gtkdialogs.c:114
+#: ../pidgin/gtkdialogs.c:110
 msgid "hacker and designated driver [lazy bum]"
 msgstr "hacker a vymenovaný šofér [lenivý zadok]"
 
-#: ../pidgin/gtkdialogs.c:115
+#: ../pidgin/gtkdialogs.c:111
 msgid "XMPP developer"
 msgstr "XMPP vývojár"
 
-#: ../pidgin/gtkdialogs.c:116
+#: ../pidgin/gtkdialogs.c:112
 msgid "original author"
 msgstr "pôvodný autor"
 
-#: ../pidgin/gtkdialogs.c:123
+#: ../pidgin/gtkdialogs.c:128
 msgid "Afrikaans"
 msgstr "Afrikánsky"
 
-#: ../pidgin/gtkdialogs.c:124
+#: ../pidgin/gtkdialogs.c:129
 msgid "Arabic"
 msgstr "Arabsky"
 
-#: ../pidgin/gtkdialogs.c:125 ../pidgin/gtkdialogs.c:126
-#: ../pidgin/gtkdialogs.c:213
+#: ../pidgin/gtkdialogs.c:130 ../pidgin/gtkdialogs.c:131
+#: ../pidgin/gtkdialogs.c:218
 msgid "Bulgarian"
 msgstr "Bulharsky"
 
-#: ../pidgin/gtkdialogs.c:127 ../pidgin/gtkdialogs.c:128
-#: ../pidgin/gtkdialogs.c:129 ../pidgin/gtkdialogs.c:130
+#: ../pidgin/gtkdialogs.c:132 ../pidgin/gtkdialogs.c:133
+#: ../pidgin/gtkdialogs.c:134 ../pidgin/gtkdialogs.c:135
 msgid "Bengali"
 msgstr "Bengálsky"
 
-#: ../pidgin/gtkdialogs.c:131
+#: ../pidgin/gtkdialogs.c:136
 msgid "Bosnian"
 msgstr "Bosniansky"
 
-#: ../pidgin/gtkdialogs.c:132 ../pidgin/gtkdialogs.c:214
-#: ../pidgin/gtkdialogs.c:215
+#: ../pidgin/gtkdialogs.c:137 ../pidgin/gtkdialogs.c:219
+#: ../pidgin/gtkdialogs.c:220
 msgid "Catalan"
 msgstr "Katalánsky"
 
-#: ../pidgin/gtkdialogs.c:133 ../pidgin/gtkdialogs.c:134
+#: ../pidgin/gtkdialogs.c:138 ../pidgin/gtkdialogs.c:139
 msgid "Valencian-Catalan"
 msgstr "Valencijsky-Katalánsky"
 
-#: ../pidgin/gtkdialogs.c:135 ../pidgin/gtkdialogs.c:216
+#: ../pidgin/gtkdialogs.c:140 ../pidgin/gtkdialogs.c:221
 msgid "Czech"
 msgstr "Česky"
 
-#: ../pidgin/gtkdialogs.c:136 ../pidgin/gtkdialogs.c:137
+#: ../pidgin/gtkdialogs.c:141 ../pidgin/gtkdialogs.c:142
 msgid "Danish"
 msgstr "Dánsky"
 
-#: ../pidgin/gtkdialogs.c:138 ../pidgin/gtkdialogs.c:139
-#: ../pidgin/gtkdialogs.c:217
-msgid "German"
-msgstr "Nemecky"
-
-#: ../pidgin/gtkdialogs.c:140 ../pidgin/gtkdialogs.c:141
-#: ../pidgin/gtkdialogs.c:142
-msgid "Dzongkha"
-msgstr "Jazyk Dzonka"
-
 #: ../pidgin/gtkdialogs.c:143 ../pidgin/gtkdialogs.c:144
+#: ../pidgin/gtkdialogs.c:222
+msgid "German"
+msgstr "Nemecky"
+
+#: ../pidgin/gtkdialogs.c:145 ../pidgin/gtkdialogs.c:146
+#: ../pidgin/gtkdialogs.c:147
+msgid "Dzongkha"
+msgstr "Jazyk Dzonka"
+
+#: ../pidgin/gtkdialogs.c:148 ../pidgin/gtkdialogs.c:149
 msgid "Greek"
 msgstr "Grécky"
 
-#: ../pidgin/gtkdialogs.c:145
+#: ../pidgin/gtkdialogs.c:150
 msgid "Australian English"
 msgstr "Austrálska angličtina"
 
-#: ../pidgin/gtkdialogs.c:146
+#: ../pidgin/gtkdialogs.c:151
 msgid "Canadian English"
 msgstr "Kanadská angličtina"
 
-#: ../pidgin/gtkdialogs.c:147
+#: ../pidgin/gtkdialogs.c:152
 msgid "British English"
 msgstr "Britská angličtina"
 
-#: ../pidgin/gtkdialogs.c:148
+#: ../pidgin/gtkdialogs.c:153
 msgid "Esperanto"
 msgstr "Esperanto"
 
-#: ../pidgin/gtkdialogs.c:149 ../pidgin/gtkdialogs.c:218
-#: ../pidgin/gtkdialogs.c:219 ../pidgin/gtkdialogs.c:220
-#: ../pidgin/gtkdialogs.c:221
+#: ../pidgin/gtkdialogs.c:154 ../pidgin/gtkdialogs.c:223
+#: ../pidgin/gtkdialogs.c:224 ../pidgin/gtkdialogs.c:225
+#: ../pidgin/gtkdialogs.c:226
 msgid "Spanish"
 msgstr "Španielsky"
 
-#: ../pidgin/gtkdialogs.c:150 ../pidgin/gtkdialogs.c:151
+#: ../pidgin/gtkdialogs.c:155
+msgid "Estonian"
+msgstr "Estónsky"
+
+#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:157
 msgid "Euskera(Basque)"
 msgstr "Euskera(Baskitsky)"
 
-#: ../pidgin/gtkdialogs.c:152 ../pidgin/gtkdialogs.c:153
-#: ../pidgin/gtkdialogs.c:154
+#: ../pidgin/gtkdialogs.c:158 ../pidgin/gtkdialogs.c:159
+#: ../pidgin/gtkdialogs.c:160
 msgid "Persian"
 msgstr "Perzsky"
 
-#: ../pidgin/gtkdialogs.c:155 ../pidgin/gtkdialogs.c:222
-#: ../pidgin/gtkdialogs.c:223
+#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:227
+#: ../pidgin/gtkdialogs.c:228
 msgid "Finnish"
 msgstr "Fínsky"
 
-#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:224
-#: ../pidgin/gtkdialogs.c:225 ../pidgin/gtkdialogs.c:226
-#: ../pidgin/gtkdialogs.c:227
+#: ../pidgin/gtkdialogs.c:162 ../pidgin/gtkdialogs.c:229
+#: ../pidgin/gtkdialogs.c:230 ../pidgin/gtkdialogs.c:231
+#: ../pidgin/gtkdialogs.c:232
 msgid "French"
 msgstr "Francúzsky"
 
-#: ../pidgin/gtkdialogs.c:157 ../pidgin/gtkdialogs.c:158
+#: ../pidgin/gtkdialogs.c:163 ../pidgin/gtkdialogs.c:164
+#: ../pidgin/gtkdialogs.c:233
 msgid "Galician"
 msgstr "Galícijsky"
 
-#: ../pidgin/gtkdialogs.c:159 ../pidgin/gtkdialogs.c:160
+#: ../pidgin/gtkdialogs.c:165 ../pidgin/gtkdialogs.c:166
 msgid "Gujarati"
 msgstr "Guraratsky"
 
-#: ../pidgin/gtkdialogs.c:160
+#: ../pidgin/gtkdialogs.c:166
 msgid "Gujarati Language Team"
 msgstr "Jazykový tým Gujarati"
 
-#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:228
+#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:234
 msgid "Hebrew"
 msgstr "Hebrejsky"
 
-#: ../pidgin/gtkdialogs.c:162
+#: ../pidgin/gtkdialogs.c:168
 msgid "Hindi"
 msgstr "Hindsky"
 
-#: ../pidgin/gtkdialogs.c:163
+#: ../pidgin/gtkdialogs.c:169
 msgid "Hungarian"
 msgstr "Maďarsky"
 
-#: ../pidgin/gtkdialogs.c:164
+#: ../pidgin/gtkdialogs.c:170
 msgid "Indonesian"
 msgstr "Indonézsky"
 
-#: ../pidgin/gtkdialogs.c:165 ../pidgin/gtkdialogs.c:229
+#: ../pidgin/gtkdialogs.c:171 ../pidgin/gtkdialogs.c:235
 msgid "Italian"
 msgstr "Taliansky"
 
-#: ../pidgin/gtkdialogs.c:166 ../pidgin/gtkdialogs.c:230
-#: ../pidgin/gtkdialogs.c:231 ../pidgin/gtkdialogs.c:232
+#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:236
+#: ../pidgin/gtkdialogs.c:237 ../pidgin/gtkdialogs.c:238
 msgid "Japanese"
 msgstr "Japonsky"
 
-#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:233
+#: ../pidgin/gtkdialogs.c:173 ../pidgin/gtkdialogs.c:239
 msgid "Georgian"
 msgstr "Gruzínsky"
 
-#: ../pidgin/gtkdialogs.c:167
+#: ../pidgin/gtkdialogs.c:173
 msgid "Ubuntu Georgian Translators"
-msgstr ""
-
-#: ../pidgin/gtkdialogs.c:168
+msgstr "Ubuntu Gruzínsky prekladatelia"
+
+#: ../pidgin/gtkdialogs.c:174
 msgid "Kannada"
 msgstr "Kanada"
 
-#: ../pidgin/gtkdialogs.c:168
+#: ../pidgin/gtkdialogs.c:174
 msgid "Kannada Translation team"
 msgstr "Kanadský prekladateľský tým"
 
-#: ../pidgin/gtkdialogs.c:169 ../pidgin/gtkdialogs.c:234
-#: ../pidgin/gtkdialogs.c:235
+#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:240
+#: ../pidgin/gtkdialogs.c:241
 msgid "Korean"
 msgstr "Kórejsky"
 
-#: ../pidgin/gtkdialogs.c:170 ../pidgin/gtkdialogs.c:171
-#: ../pidgin/gtkdialogs.c:172
+#: ../pidgin/gtkdialogs.c:176 ../pidgin/gtkdialogs.c:177
+#: ../pidgin/gtkdialogs.c:178
 msgid "Kurdish"
 msgstr "Kurdsky"
 
-#: ../pidgin/gtkdialogs.c:173 ../pidgin/gtkdialogs.c:236
-#: ../pidgin/gtkdialogs.c:237
+#: ../pidgin/gtkdialogs.c:179 ../pidgin/gtkdialogs.c:242
+#: ../pidgin/gtkdialogs.c:243
 msgid "Lithuanian"
 msgstr "Litovsky"
 
-#: ../pidgin/gtkdialogs.c:174 ../pidgin/gtkdialogs.c:175
-#: ../pidgin/gtkdialogs.c:238
+#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:181
+#: ../pidgin/gtkdialogs.c:244
 msgid "Macedonian"
 msgstr "Macedónsky"
 
-#: ../pidgin/gtkdialogs.c:176
+#: ../pidgin/gtkdialogs.c:182 ../pidgin/gtkdialogs.c:245
 msgid "Bokmål Norwegian"
 msgstr "Nórsky"
 
-#: ../pidgin/gtkdialogs.c:177
+#: ../pidgin/gtkdialogs.c:183
 msgid "Nepali"
 msgstr "Nepálsky"
 
-#: ../pidgin/gtkdialogs.c:178
+#: ../pidgin/gtkdialogs.c:184
 msgid "Dutch, Flemish"
 msgstr "Holandsky, Flámsky"
 
-#: ../pidgin/gtkdialogs.c:179
-msgid "Norwegian"
-msgstr "Nórsky"
-
-#: ../pidgin/gtkdialogs.c:180
+#: ../pidgin/gtkdialogs.c:185
 msgid "Norwegian Nynorsk"
 msgstr "Nórsky"
 
-#: ../pidgin/gtkdialogs.c:181 ../pidgin/gtkdialogs.c:182
-#: ../pidgin/gtkdialogs.c:183 ../pidgin/gtkdialogs.c:239
+#: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:187
+#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:246
 msgid "Polish"
 msgstr "Poľsky"
 
-#: ../pidgin/gtkdialogs.c:184
+#: ../pidgin/gtkdialogs.c:189
 msgid "Portuguese"
 msgstr "Portugalsky"
 
-#: ../pidgin/gtkdialogs.c:185
+#: ../pidgin/gtkdialogs.c:190
 msgid "Portuguese-Brazil"
 msgstr "Portugalsky-Brazília"
 
-#: ../pidgin/gtkdialogs.c:186
+#: ../pidgin/gtkdialogs.c:191
 msgid "Pashto"
 msgstr "Pashto"
 
-#: ../pidgin/gtkdialogs.c:187
+#: ../pidgin/gtkdialogs.c:192
 msgid "Romanian"
 msgstr "Rumunsky"
 
-#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:240
-#: ../pidgin/gtkdialogs.c:241
+#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:247
+#: ../pidgin/gtkdialogs.c:248
 msgid "Russian"
 msgstr "Rusky"
 
-#: ../pidgin/gtkdialogs.c:189 ../pidgin/gtkdialogs.c:190
-#: ../pidgin/gtkdialogs.c:242 ../pidgin/gtkdialogs.c:243
-#: ../pidgin/gtkdialogs.c:244
+#: ../pidgin/gtkdialogs.c:194 ../pidgin/gtkdialogs.c:195
+#: ../pidgin/gtkdialogs.c:249 ../pidgin/gtkdialogs.c:250
+#: ../pidgin/gtkdialogs.c:251
 msgid "Slovak"
 msgstr "Slovensky"
 
-#: ../pidgin/gtkdialogs.c:191 ../pidgin/gtkdialogs.c:245
+#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:252
 msgid "Slovenian"
 msgstr "Slovinsky"
 
-#: ../pidgin/gtkdialogs.c:192
+#: ../pidgin/gtkdialogs.c:197
 msgid "Albanian"
 msgstr "Albánsky"
 
-#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:194
+#: ../pidgin/gtkdialogs.c:198 ../pidgin/gtkdialogs.c:199
 msgid "Serbian"
 msgstr "Srbsky"
 
-#: ../pidgin/gtkdialogs.c:195 ../pidgin/gtkdialogs.c:246
+#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:253
+#: ../pidgin/gtkdialogs.c:254
 msgid "Swedish"
 msgstr "Švédsky"
 
-#: ../pidgin/gtkdialogs.c:196
+#: ../pidgin/gtkdialogs.c:201
 msgid "Tamil"
 msgstr "Tamilsky"
 
-#: ../pidgin/gtkdialogs.c:197
+#: ../pidgin/gtkdialogs.c:202
 msgid "Telugu"
 msgstr "Telugština"
 
-#: ../pidgin/gtkdialogs.c:198
+#: ../pidgin/gtkdialogs.c:203
 msgid "Thai"
 msgstr "Thajština"
 
-#: ../pidgin/gtkdialogs.c:199 ../pidgin/gtkdialogs.c:247
+#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:255
 msgid "Turkish"
 msgstr "Turecký"
 
-#: ../pidgin/gtkdialogs.c:200
+#: ../pidgin/gtkdialogs.c:205
 msgid "Vietnamese"
 msgstr "Vietnamský"
 
-#: ../pidgin/gtkdialogs.c:200
+#: ../pidgin/gtkdialogs.c:205
 msgid "T.M.Thanh and the Gnome-Vi Team"
 msgstr "T.M.Thanh a Gnome-Vi tým"
 
-#: ../pidgin/gtkdialogs.c:201 ../pidgin/gtkdialogs.c:248
+#: ../pidgin/gtkdialogs.c:206 ../pidgin/gtkdialogs.c:256
 msgid "Simplified Chinese"
 msgstr "Zjednodušená Čínština"
 
-#: ../pidgin/gtkdialogs.c:202 ../pidgin/gtkdialogs.c:203
-#: ../pidgin/gtkdialogs.c:204
+#: ../pidgin/gtkdialogs.c:207 ../pidgin/gtkdialogs.c:208
+#: ../pidgin/gtkdialogs.c:209
 msgid "Hong Kong Chinese"
 msgstr "Hongkongská Čínština"
 
-#: ../pidgin/gtkdialogs.c:205 ../pidgin/gtkdialogs.c:206
-#: ../pidgin/gtkdialogs.c:249
+#: ../pidgin/gtkdialogs.c:210 ../pidgin/gtkdialogs.c:211
+#: ../pidgin/gtkdialogs.c:257
 msgid "Traditional Chinese"
 msgstr "Tradičná Čínština"
 
-#: ../pidgin/gtkdialogs.c:212
+#: ../pidgin/gtkdialogs.c:217
 msgid "Amharic"
 msgstr "Amharsky"
 
-#: ../pidgin/gtkdialogs.c:334
+#: ../pidgin/gtkdialogs.c:342
 #, c-format
 msgid "About %s"
 msgstr "O programe %s"
 
-#: ../pidgin/gtkdialogs.c:372
+#: ../pidgin/gtkdialogs.c:380
 #, c-format
 msgid ""
 "%s is a graphical modular messaging client based on libpurple which is "
@@ -13381,52 +13543,56 @@
 "contributors.  We provide no warranty for this program.<BR><BR>"
 msgstr ""
 "%s je modulárny IM klient založený na knižnici libpurple, ktorý podporuje "
-"protokoly AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, "
-"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, Gadu-Gadu, and QQ.  Je "
-"vytvorený pomocou knižnice GTK+.<BR><BR>Tento program môžete "
-"upravovať a distribuovať podľa podmienok licencie GPL (vo verzii 2 alebo "
-"novšej).  Kópia licencie GPL sa nachádza v súbore 'COPYING', ktorý je "
-"dodávaný spolu s programom %s.  Vlastníkmi autorských práv programu %s "
-"sú jeho prispievatelia.  Kompletný zoznam prispievateľov si môžete pozrieť v "
-"súbore 'COPYRIGHT'. Na tento program vám neposkytujeme žiadnu záruku.<BR><BR>"
-
-#: ../pidgin/gtkdialogs.c:387
+"protokoly AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell "
+"GroupWise, Lotus Sametime, Bonjour, Zephyr, Gadu-Gadu, and QQ.  Je vytvorený "
+"pomocou knižnice GTK+.<BR><BR>Tento program môžete upravovať a distribuovať "
+"podľa podmienok licencie GPL (vo verzii 2 alebo novšej).  Kópia licencie GPL "
+"sa nachádza v súbore 'COPYING', ktorý je dodávaný spolu s programom %s.  "
+"Vlastníkmi autorských práv programu %s sú jeho prispievatelia.  Kompletný "
+"zoznam prispievateľov si môžete pozrieť v súbore 'COPYRIGHT'. Na tento "
+"program vám neposkytujeme žiadnu záruku.<BR><BR>"
+
+#: ../pidgin/gtkdialogs.c:395
 msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>"
 msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin na irc.freenode.net<BR><BR>"
 
-#: ../pidgin/gtkdialogs.c:392
+#: ../pidgin/gtkdialogs.c:400
 msgid "Current Developers"
 msgstr "Aktívni vývojári"
 
-#: ../pidgin/gtkdialogs.c:407
+#: ../pidgin/gtkdialogs.c:415
 msgid "Crazy Patch Writers"
 msgstr "Blázniví autori patchov"
 
-#: ../pidgin/gtkdialogs.c:422
+#: ../pidgin/gtkdialogs.c:430
 msgid "Retired Developers"
 msgstr "Vývojári v ústraní"
 
-#: ../pidgin/gtkdialogs.c:437
+#: ../pidgin/gtkdialogs.c:445
+msgid "Retired Crazy Patch Writers"
+msgstr "Blázniví autori patchov v ústraní"
+
+#: ../pidgin/gtkdialogs.c:460
 msgid "Artists"
 msgstr "Umelci"
 
-#: ../pidgin/gtkdialogs.c:452
+#: ../pidgin/gtkdialogs.c:475
 msgid "Current Translators"
 msgstr "Súčasní prekladatelia"
 
-#: ../pidgin/gtkdialogs.c:472
+#: ../pidgin/gtkdialogs.c:495
 msgid "Past Translators"
 msgstr "Bývalí prekladatelia"
 
-#: ../pidgin/gtkdialogs.c:490
+#: ../pidgin/gtkdialogs.c:513
 msgid "Debugging Information"
 msgstr "Ladiace informácie"
 
-#: ../pidgin/gtkdialogs.c:859
+#: ../pidgin/gtkdialogs.c:882
 msgid "Get User Info"
 msgstr "Zobraziť podrobnosti o používateľovi"
 
-#: ../pidgin/gtkdialogs.c:861
+#: ../pidgin/gtkdialogs.c:884
 msgid ""
 "Please enter the screen name or alias of the person whose info you would "
 "like to view."
@@ -13434,11 +13600,11 @@
 "Zadajte, prosím, meno používateľa alebo prezývku osoby, ktorej chcete poslať "
 "správu."
 
-#: ../pidgin/gtkdialogs.c:951
+#: ../pidgin/gtkdialogs.c:974
 msgid "View User Log"
 msgstr "Zobraziť záznam používateľa"
 
-#: ../pidgin/gtkdialogs.c:953
+#: ../pidgin/gtkdialogs.c:976
 msgid ""
 "Please enter the screen name or alias of the person whose log you would like "
 "to view."
@@ -13446,32 +13612,32 @@
 "Zadajte, prosím, meno používateľa alebo prezývku osoby, ktorej záznam chcete "
 "zobraziť."
 
-#: ../pidgin/gtkdialogs.c:973
+#: ../pidgin/gtkdialogs.c:996
 msgid "Alias Contact"
 msgstr "Prezývka kontaktu"
 
-#: ../pidgin/gtkdialogs.c:974
+#: ../pidgin/gtkdialogs.c:997
 msgid "Enter an alias for this contact."
 msgstr "Zadajte prezývku pre tento kontakt."
 
-#: ../pidgin/gtkdialogs.c:996
+#: ../pidgin/gtkdialogs.c:1019
 #, c-format
 msgid "Enter an alias for %s."
 msgstr "Zadajte prezývku pre kontakt %s."
 
-#: ../pidgin/gtkdialogs.c:998
+#: ../pidgin/gtkdialogs.c:1021
 msgid "Alias Buddy"
 msgstr "Prezývka priateľa"
 
-#: ../pidgin/gtkdialogs.c:1019
+#: ../pidgin/gtkdialogs.c:1042
 msgid "Alias Chat"
 msgstr "Prezývka pre chat"
 
-#: ../pidgin/gtkdialogs.c:1020
+#: ../pidgin/gtkdialogs.c:1043
 msgid "Enter an alias for this chat."
 msgstr "Zadajte prezývku pre tento chat."
 
-#: ../pidgin/gtkdialogs.c:1059
+#: ../pidgin/gtkdialogs.c:1082
 #, c-format
 msgid ""
 "You are about to remove the contact containing %s and %d other buddy from "
@@ -13489,30 +13655,30 @@
 "Z vášho zoznamu priateľov sa chystáte odstrániť kontakt, ktorý obsahuje %s a "
 "%d ďalších priateľov. Chcete pokračovať?"
 
-#: ../pidgin/gtkdialogs.c:1067
+#: ../pidgin/gtkdialogs.c:1090
 msgid "Remove Contact"
 msgstr "Odstrániť kontakt"
 
-#: ../pidgin/gtkdialogs.c:1070
+#: ../pidgin/gtkdialogs.c:1093
 msgid "_Remove Contact"
 msgstr "Odst_rániť kontakt"
 
-#: ../pidgin/gtkdialogs.c:1101
+#: ../pidgin/gtkdialogs.c:1124
 #, c-format
 msgid ""
 "You are about to merge the group called %s into the group called %s. Do you "
 "want to continue?"
 msgstr "Skupinu %s sa chystáte pripojiť do skupiny %s. Chcete pokračovať?"
 
-#: ../pidgin/gtkdialogs.c:1108
+#: ../pidgin/gtkdialogs.c:1131
 msgid "Merge Groups"
 msgstr "Spojenie skupín"
 
-#: ../pidgin/gtkdialogs.c:1111
+#: ../pidgin/gtkdialogs.c:1134
 msgid "_Merge Groups"
 msgstr "_Spojiť skupiny"
 
-#: ../pidgin/gtkdialogs.c:1161
+#: ../pidgin/gtkdialogs.c:1184
 #, c-format
 msgid ""
 "You are about to remove the group %s and all its members from your buddy "
@@ -13520,15 +13686,15 @@
 msgstr ""
 "Chystáte sa odstrániť skupinu %s a všetkých jej členov. Chcete pokračovať?"
 
-#: ../pidgin/gtkdialogs.c:1164
+#: ../pidgin/gtkdialogs.c:1187
 msgid "Remove Group"
 msgstr "Odstrániť skupinu"
 
-#: ../pidgin/gtkdialogs.c:1167
+#: ../pidgin/gtkdialogs.c:1190
 msgid "_Remove Group"
 msgstr "_Odstrániť skupinu"
 
-#: ../pidgin/gtkdialogs.c:1200
+#: ../pidgin/gtkdialogs.c:1223
 #, c-format
 msgid ""
 "You are about to remove %s from your buddy list.  Do you want to continue?"
@@ -13536,15 +13702,15 @@
 "Chystáte sa odstrániť používateľa %s a všetkých jej členov. Chcete "
 "pokračovať?"
 
-#: ../pidgin/gtkdialogs.c:1203
+#: ../pidgin/gtkdialogs.c:1226
 msgid "Remove Buddy"
 msgstr "Odstrániť priateľa"
 
-#: ../pidgin/gtkdialogs.c:1206
+#: ../pidgin/gtkdialogs.c:1229
 msgid "_Remove Buddy"
 msgstr "Odstrániť _priateľa"
 
-#: ../pidgin/gtkdialogs.c:1227
+#: ../pidgin/gtkdialogs.c:1250
 #, c-format
 msgid ""
 "You are about to remove the chat %s from your buddy list.  Do you want to "
@@ -13552,11 +13718,11 @@
 msgstr ""
 "Chystáte sa odstrániť chat %s a všetkých jej členov. Chcete pokračovať?"
 
-#: ../pidgin/gtkdialogs.c:1230
+#: ../pidgin/gtkdialogs.c:1253
 msgid "Remove Chat"
 msgstr "Odstrániť chat"
 
-#: ../pidgin/gtkdialogs.c:1233
+#: ../pidgin/gtkdialogs.c:1256
 msgid "_Remove Chat"
 msgstr "Odstrániť _chat"
 
@@ -13675,43 +13841,43 @@
 msgid "_Resume"
 msgstr "_Pokračovať"
 
-#: ../pidgin/gtkimhtml.c:795
+#: ../pidgin/gtkimhtml.c:815
 msgid "Paste as Plain _Text"
 msgstr "_Vložiť ako čistý text"
 
-#: ../pidgin/gtkimhtml.c:812
+#: ../pidgin/gtkimhtml.c:832 ../pidgin/gtkimhtmltoolbar.c:1138
 msgid "_Reset formatting"
 msgstr "Vymazať formátovanie"
 
-#: ../pidgin/gtkimhtml.c:1349
+#: ../pidgin/gtkimhtml.c:1372
 msgid "Hyperlink color"
 msgstr "Farba odkazu"
 
-#: ../pidgin/gtkimhtml.c:1350
+#: ../pidgin/gtkimhtml.c:1373
 msgid "Color to draw hyperlinks."
 msgstr "Farba na vykreslenie odkazov."
 
-#: ../pidgin/gtkimhtml.c:1353
+#: ../pidgin/gtkimhtml.c:1376
 msgid "Hyperlink prelight color"
 msgstr "Farba podsvieteného odkazu"
 
-#: ../pidgin/gtkimhtml.c:1354
+#: ../pidgin/gtkimhtml.c:1377
 msgid "Color to draw hyperlinks when mouse is over them."
 msgstr "Farba na vykreslenie odkazu, nad ktorým sa nachádza kurzor myši."
 
-#: ../pidgin/gtkimhtml.c:1575
+#: ../pidgin/gtkimhtml.c:1597
 msgid "_Copy E-Mail Address"
 msgstr "_Kopírovať e-mailovu adresu"
 
-#: ../pidgin/gtkimhtml.c:1587
+#: ../pidgin/gtkimhtml.c:1609
 msgid "_Open Link in Browser"
 msgstr "_Otvoriť odkaz v prehliadači"
 
-#: ../pidgin/gtkimhtml.c:1597
+#: ../pidgin/gtkimhtml.c:1619
 msgid "_Copy Link Location"
 msgstr "_Kopírovať adresu odkazu"
 
-#: ../pidgin/gtkimhtml.c:3341
+#: ../pidgin/gtkimhtml.c:3365
 msgid ""
 "<span size='larger' weight='bold'>Unrecognized file type</span>\n"
 "\n"
@@ -13721,7 +13887,7 @@
 "\n"
 "Nastavuje sa na PNG."
 
-#: ../pidgin/gtkimhtml.c:3344
+#: ../pidgin/gtkimhtml.c:3368
 msgid ""
 "Unrecognized file type\n"
 "\n"
@@ -13731,7 +13897,7 @@
 "\n"
 "Nastavuje sa na PNG."
 
-#: ../pidgin/gtkimhtml.c:3373
+#: ../pidgin/gtkimhtml.c:3397
 #, c-format
 msgid ""
 "<span size='larger' weight='bold'>Error saving image</span>\n"
@@ -13742,7 +13908,7 @@
 "\n"
 "%s"
 
-#: ../pidgin/gtkimhtml.c:3376
+#: ../pidgin/gtkimhtml.c:3400
 #, c-format
 msgid ""
 "Error saving image\n"
@@ -13753,11 +13919,11 @@
 "\n"
 "%s"
 
-#: ../pidgin/gtkimhtml.c:3454 ../pidgin/gtkimhtml.c:3466
+#: ../pidgin/gtkimhtml.c:3478 ../pidgin/gtkimhtml.c:3490
 msgid "Save Image"
 msgstr "Uložiť obrázok"
 
-#: ../pidgin/gtkimhtml.c:3494
+#: ../pidgin/gtkimhtml.c:3518
 msgid "_Save Image..."
 msgstr "_Uložiť obrázok..."
 
@@ -13795,7 +13961,7 @@
 msgid "Insert Link"
 msgstr "Vložiť odkaz"
 
-#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1155
+#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1207
 msgid "_Insert"
 msgstr "_Vložiť"
 
@@ -13817,59 +13983,58 @@
 msgid "Smile!"
 msgstr "Smajlík!"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1064
-msgid "_Bold"
-msgstr "_Tučné"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1065
-msgid "_Italic"
-msgstr "_Kurzíva"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1066
-msgid "_Underline"
-msgstr "_Podčiarknuté"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1067
-msgid "_Larger"
-msgstr "_Väčšie"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1069
+#: ../pidgin/gtkimhtmltoolbar.c:820 ../pidgin/gtkimhtmltoolbar.c:1164
+msgid "_Font"
+msgstr "_Písmo"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1124
+msgid "<b>_Bold</b>"
+msgstr "<b>_Tučné:</b>"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1125
+msgid "<i>_Italic</i>"
+msgstr "<i>_Kurzíva</i>"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1126
+msgid "<u>_Underline</u>"
+msgstr "<u>_Podčiarknuté</u>"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1127
+msgid "<span size='larger'>_Larger</span>"
+msgstr "<span size='larger'>_Väčšie</span>"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1129
 msgid "_Normal"
 msgstr "_Normálne"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1071
-msgid "_Smaller"
-msgstr "_Menšie"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1072
+#: ../pidgin/gtkimhtmltoolbar.c:1131
+msgid "<span size='smaller'>_Smaller</span>"
+msgstr "<span size='smaller'>_Menšie</span>"
+
+#. If we want to show the formatting for the following items, we would
+#. * need to update them when formatting changes. The above items don't need
+#. * no updating nor nothin'
+#: ../pidgin/gtkimhtmltoolbar.c:1135
 msgid "_Font face"
 msgstr "Rez písma"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1073
-msgid "_Foreground color"
-msgstr "Farba _textu"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1074
-msgid "_Background color"
-msgstr "Farba _pozadia"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1100
-msgid "_Font"
-msgstr "_Písmo"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1135
-msgid "_Reset font"
-msgstr "Vymazať formátovanie"
-
-#: ../pidgin/gtkimhtmltoolbar.c:1162
+#: ../pidgin/gtkimhtmltoolbar.c:1136
+msgid "Foreground _color"
+msgstr "Farba _popredia"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1137
+msgid "Bac_kground color"
+msgstr "Farba po_zadia"
+
+#: ../pidgin/gtkimhtmltoolbar.c:1215
 msgid "_Smiley"
 msgstr "_Smajlík"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1168
+#: ../pidgin/gtkimhtmltoolbar.c:1221
 msgid "_Image"
 msgstr "Obrázok"
 
-#: ../pidgin/gtkimhtmltoolbar.c:1174
+#: ../pidgin/gtkimhtmltoolbar.c:1227
 msgid "_Link"
 msgstr "Odkaz"
 
@@ -13879,7 +14044,8 @@
 "Are you sure you want to permanently delete the log of the conversation with "
 "%s which started at %s?"
 msgstr ""
-"Naozaj chcete natrvalo odstrániť záznam konverzácie s používateľom %s, ktorá začala %s?"
+"Naozaj chcete natrvalo odstrániť záznam konverzácie s používateľom %s, ktorá "
+"začala %s?"
 
 #: ../pidgin/gtklog.c:303
 #, c-format
@@ -13960,12 +14126,12 @@
 msgid "System Log"
 msgstr "Systémový záznam"
 
-#: ../pidgin/gtkmain.c:385
+#: ../pidgin/gtkmain.c:386
 #, c-format
 msgid "%s %s. Try `%s -h' for more information.\n"
 msgstr "%s %s. `%s -h' zobrazí viac informácií.\n"
 
-#: ../pidgin/gtkmain.c:387
+#: ../pidgin/gtkmain.c:388
 #, c-format
 msgid ""
 "%s %s\n"
@@ -13987,11 +14153,12 @@
 "  -d, --debug         vkladá ladiace informácie do stdout\n"
 "  -h, --help          zobrazí túto pomoc a skončí\n"
 "  -n, --nologin       neprihlasovať automaticky\n"
-"  -l, --login[=MENO]  automatické prihlásenie (voliteľný argument MENO určuje\n"
+"  -l, --login[=MENO]  automatické prihlásenie (voliteľný argument MENO "
+"určuje\n"
 "                      účty oddeľované čiarkami)\n"
 "  -v, --version       zobrazí verziu programu a skončí\n"
 
-#: ../pidgin/gtkmain.c:511
+#: ../pidgin/gtkmain.c:512
 #, c-format
 msgid ""
 "%s has segfaulted and attempted to dump a core file.\n"
@@ -14031,19 +14198,19 @@
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
-#: ../pidgin/gtkmain.c:697 ../pidgin/pidgin.h:50
+#: ../pidgin/gtkmain.c:699 ../pidgin/pidgin.h:50
 msgid "Pidgin"
 msgstr "Pidgin"
 
-#: ../pidgin/gtknotify.c:343
+#: ../pidgin/gtknotify.c:348
 msgid "Open All Messages"
 msgstr "Otvoriť všetky správy"
 
-#: ../pidgin/gtknotify.c:395
+#: ../pidgin/gtknotify.c:401
 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Máte poštu!</span>"
 
-#: ../pidgin/gtknotify.c:515
+#: ../pidgin/gtknotify.c:521
 #, c-format
 msgid "%s has %d new message."
 msgid_plural "%s has %d new messages."
@@ -14051,30 +14218,30 @@
 msgstr[1] "Používateľ %s má %d novú správu."
 msgstr[2] "Používateľ %s má %d nové správy."
 
-#: ../pidgin/gtknotify.c:526
+#: ../pidgin/gtknotify.c:532
 #, c-format
 msgid "<b>You have %d new e-mail.</b>"
 msgid_plural "<b>You have %d new e-mails.</b>"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#: ../pidgin/gtknotify.c:965
+msgstr[0] "<b>Máte %d nových e-mailov.</b>"
+msgstr[1] "<b>Máte %d nový e-mail.</b>"
+msgstr[2] "<b>Máte %d nové e-maily.</b>"
+
+#: ../pidgin/gtknotify.c:972
 #, c-format
 msgid "The browser command \"%s\" is invalid."
 msgstr "Príkaz prehliadača \"%s\" je chybný."
 
-#: ../pidgin/gtknotify.c:967 ../pidgin/gtknotify.c:979
-#: ../pidgin/gtknotify.c:992 ../pidgin/gtknotify.c:1120
+#: ../pidgin/gtknotify.c:974 ../pidgin/gtknotify.c:986
+#: ../pidgin/gtknotify.c:999 ../pidgin/gtknotify.c:1127
 msgid "Unable to open URL"
 msgstr "Nepodarilo sa otvoriť URL"
 
-#: ../pidgin/gtknotify.c:977 ../pidgin/gtknotify.c:990
+#: ../pidgin/gtknotify.c:984 ../pidgin/gtknotify.c:997
 #, c-format
 msgid "Error launching \"%s\": %s"
 msgstr "Chyba počas spúšťania \"%s\": %s"
 
-#: ../pidgin/gtknotify.c:1121
+#: ../pidgin/gtknotify.c:1128
 msgid ""
 "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr "Vybrali ste možnosť 'Ručne', ale nenastavili ste príkaz prehliadača."
@@ -14164,7 +14331,7 @@
 
 #: ../pidgin/gtkpounce.c:608
 msgid "P_auses while typing"
-msgstr "Prestane pí_sať"
+msgstr "Preruší pís_anie"
 
 #: ../pidgin/gtkpounce.c:610
 msgid "Stops t_yping"
@@ -14219,7 +14386,7 @@
 msgstr "Cieľ sledovania"
 
 #: ../pidgin/gtkprefs.c:385
-#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:1
+#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1
 msgid "Default"
 msgstr "Predvolená"
 
@@ -14252,13 +14419,6 @@
 msgid "_Show system tray icon:"
 msgstr "_Zobraziť ikonu v oznamovacej oblasti:"
 
-#: ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908 ../pidgin/gtkprefs.c:1756
-#: ../pidgin/plugins/timestamp_format.c:42
-#: ../pidgin/plugins/timestamp_format.c:51
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:338
-msgid "Always"
-msgstr "Vždy"
-
 #: ../pidgin/gtkprefs.c:898
 msgid "On unread messages"
 msgstr "Pri neprečítaných správach"
@@ -14271,7 +14431,7 @@
 msgid "_Hide new IM conversations:"
 msgstr "_Skrývať nové rozhovory:"
 
-#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1937
+#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1939
 msgid "When away"
 msgstr "Pri neprítomnosti"
 
@@ -14325,8 +14485,8 @@
 msgstr "Zobrazovať _formátovanie v prichádzajúcich správach"
 
 #: ../pidgin/gtkprefs.c:997
-msgid "Show buddy _icons"
-msgstr "Zobrazovať _ikony priateľov"
+msgid "Show _detailed information"
+msgstr "Zobraziť detailné informácie"
 
 #: ../pidgin/gtkprefs.c:999
 msgid "Enable buddy ic_on animation"
@@ -14372,7 +14532,7 @@
 msgid "Default Formatting"
 msgstr "Štandardné formátovanie"
 
-#: ../pidgin/gtkprefs.c:1057
+#: ../pidgin/gtkprefs.c:1059
 msgid ""
 "This is how your outgoing message text will appear when you use protocols "
 "that support formatting."
@@ -14380,119 +14540,119 @@
 "Takto bude vyzerať text odchádzajúcich správ pri použití protokolu, ktorý "
 "podporuje formátovanie."
 
-#: ../pidgin/gtkprefs.c:1123
+#: ../pidgin/gtkprefs.c:1125
 msgid "ST_UN server:"
 msgstr "ST_UN server:"
 
-#: ../pidgin/gtkprefs.c:1135
+#: ../pidgin/gtkprefs.c:1137
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Príklad: stunserver.org</span>"
 
-#: ../pidgin/gtkprefs.c:1139
+#: ../pidgin/gtkprefs.c:1141
 msgid "_Autodetect IP address"
 msgstr "_Automaticky zistiť IP adresu"
 
-#: ../pidgin/gtkprefs.c:1148
+#: ../pidgin/gtkprefs.c:1150
 msgid "Public _IP:"
 msgstr "Verejná _IP adresa:"
 
-#: ../pidgin/gtkprefs.c:1177
+#: ../pidgin/gtkprefs.c:1179
 msgid "Ports"
 msgstr "Porty"
 
-#: ../pidgin/gtkprefs.c:1180
+#: ../pidgin/gtkprefs.c:1182
 msgid "_Manually specify range of ports to listen on"
 msgstr "_Ručne určiť rozsah portov, na ktorých počúvať"
 
-#: ../pidgin/gtkprefs.c:1183
+#: ../pidgin/gtkprefs.c:1185
 msgid "_Start port:"
 msgstr "_Prvý port:"
 
-#: ../pidgin/gtkprefs.c:1190
+#: ../pidgin/gtkprefs.c:1192
 msgid "_End port:"
 msgstr "Po_sledný port:"
 
-#: ../pidgin/gtkprefs.c:1198
+#: ../pidgin/gtkprefs.c:1200
 msgid "Proxy Server"
 msgstr "Proxy Server"
 
-#: ../pidgin/gtkprefs.c:1202
+#: ../pidgin/gtkprefs.c:1204
 msgid "No proxy"
 msgstr "Bez proxy"
 
-#: ../pidgin/gtkprefs.c:1258
+#: ../pidgin/gtkprefs.c:1260
 msgid "_User:"
 msgstr "Používateľ:"
 
-#: ../pidgin/gtkprefs.c:1323
+#: ../pidgin/gtkprefs.c:1325
 msgid "Seamonkey"
 msgstr "Seamonkey"
 
-#: ../pidgin/gtkprefs.c:1324
-msgid "Opera"
-msgstr "Opera"
-
-#: ../pidgin/gtkprefs.c:1325
-msgid "Netscape"
-msgstr "Netscape"
-
 #: ../pidgin/gtkprefs.c:1326
-msgid "Mozilla"
-msgstr "Mozilla"
+msgid "Opera"
+msgstr "Opera"
 
 #: ../pidgin/gtkprefs.c:1327
-msgid "Konqueror"
-msgstr "Konqueror"
+msgid "Netscape"
+msgstr "Netscape"
 
 #: ../pidgin/gtkprefs.c:1328
-msgid "GNOME Default"
-msgstr "GNOME Default"
+msgid "Mozilla"
+msgstr "Mozilla"
 
 #: ../pidgin/gtkprefs.c:1329
+msgid "Konqueror"
+msgstr "Konqueror"
+
+#: ../pidgin/gtkprefs.c:1330
+msgid "GNOME Default"
+msgstr "GNOME Default"
+
+#: ../pidgin/gtkprefs.c:1331
 msgid "Galeon"
 msgstr "Galeon"
 
-#: ../pidgin/gtkprefs.c:1330
+#: ../pidgin/gtkprefs.c:1332
 msgid "Firefox"
 msgstr "Firefox"
 
-#: ../pidgin/gtkprefs.c:1331
+#: ../pidgin/gtkprefs.c:1333
 msgid "Firebird"
 msgstr "Firebird"
 
-#: ../pidgin/gtkprefs.c:1332
+#: ../pidgin/gtkprefs.c:1334
 msgid "Epiphany"
 msgstr "Epiphany"
 
-#: ../pidgin/gtkprefs.c:1341
+#: ../pidgin/gtkprefs.c:1343
 msgid "Manual"
 msgstr "Manual"
 
-#: ../pidgin/gtkprefs.c:1394
+#: ../pidgin/gtkprefs.c:1396
 msgid "Browser Selection"
 msgstr "Výber prehliadača"
 
-#: ../pidgin/gtkprefs.c:1398
+#: ../pidgin/gtkprefs.c:1400
 msgid "_Browser:"
 msgstr "_Prehliadač:"
 
-#: ../pidgin/gtkprefs.c:1406
+#: ../pidgin/gtkprefs.c:1408
 msgid "_Open link in:"
 msgstr "_Otvoriť odkaz:"
 
-#: ../pidgin/gtkprefs.c:1408
+#: ../pidgin/gtkprefs.c:1410
 msgid "Browser default"
 msgstr "Podľa prehliadača"
 
-#: ../pidgin/gtkprefs.c:1409
+#: ../pidgin/gtkprefs.c:1411
 msgid "Existing window"
 msgstr "V otvorenom okne"
 
-#: ../pidgin/gtkprefs.c:1411
+#: ../pidgin/gtkprefs.c:1413
 msgid "New tab"
 msgstr "Na novej karte"
 
-#: ../pidgin/gtkprefs.c:1425
+#: ../pidgin/gtkprefs.c:1427
 #, c-format
 msgid ""
 "_Manual:\n"
@@ -14501,80 +14661,63 @@
 "_Ručne:\n"
 "(%s for URL)"
 
-#: ../pidgin/gtkprefs.c:1465
+#: ../pidgin/gtkprefs.c:1467
 msgid "Log _format:"
 msgstr "_Formát záznamu:"
 
-#: ../pidgin/gtkprefs.c:1470
+#: ../pidgin/gtkprefs.c:1472
 msgid "Log all _instant messages"
 msgstr "Zaznamenávať všetky _správy"
 
-#: ../pidgin/gtkprefs.c:1472
+#: ../pidgin/gtkprefs.c:1474
 msgid "Log all c_hats"
 msgstr "Zaznamenávať všetky c_haty"
 
-#: ../pidgin/gtkprefs.c:1474
+#: ../pidgin/gtkprefs.c:1476
 msgid "Log all _status changes to system log"
 msgstr "Zaznamenávať do systémového záznamu všetky zmeny _stavu"
 
-#: ../pidgin/gtkprefs.c:1582 ../pidgin/gtkprefs.c:1671
-#: ../pidgin/gtkprefs.c:1865
-msgid "(default)"
-msgstr ""
-
-#: ../pidgin/gtkprefs.c:1620
+#: ../pidgin/gtkprefs.c:1622
 msgid "Sound Selection"
 msgstr "Výber zvuku"
 
-#: ../pidgin/gtkprefs.c:1630
+#: ../pidgin/gtkprefs.c:1632
 msgid "Quietest"
 msgstr "Najtichšia"
 
-#: ../pidgin/gtkprefs.c:1632
+#: ../pidgin/gtkprefs.c:1634
 msgid "Quieter"
 msgstr "Tichšia"
 
-#: ../pidgin/gtkprefs.c:1634
+#: ../pidgin/gtkprefs.c:1636
 msgid "Quiet"
 msgstr "Tichá"
 
-#: ../pidgin/gtkprefs.c:1638
+#: ../pidgin/gtkprefs.c:1640
 msgid "Loud"
 msgstr "Hlasná"
 
-#: ../pidgin/gtkprefs.c:1640
-msgid "Louder"
-msgstr "Hlasnejšia"
-
 #: ../pidgin/gtkprefs.c:1642
+msgid "Louder"
+msgstr "Hlasnejšia"
+
+#: ../pidgin/gtkprefs.c:1644
 msgid "Loudest"
 msgstr "Najhlasnejšia"
 
-#: ../pidgin/gtkprefs.c:1705
-msgid "Sound Method"
-msgstr "Spôsob prehrávania zvukov"
-
-#: ../pidgin/gtkprefs.c:1706
+#: ../pidgin/gtkprefs.c:1708
 msgid "_Method:"
 msgstr "_Spôsob:"
 
-#: ../pidgin/gtkprefs.c:1708
+#: ../pidgin/gtkprefs.c:1710
 msgid "Console beep"
 msgstr "Pípnutie konzoly"
 
-#: ../pidgin/gtkprefs.c:1710
-msgid "Automatic"
-msgstr "Automaticky"
-
-#: ../pidgin/gtkprefs.c:1714
-msgid "Command"
-msgstr "Príkaz"
-
-#: ../pidgin/gtkprefs.c:1715
+#: ../pidgin/gtkprefs.c:1717
 msgid "No sounds"
 msgstr "Žiadne zvuky"
 
-#: ../pidgin/gtkprefs.c:1723
+#: ../pidgin/gtkprefs.c:1725
 #, c-format
 msgid ""
 "Sound c_ommand:\n"
@@ -14583,117 +14726,81 @@
 "Príkaz zvuku:\n"
 "(%s pre názov súboru)"
 
-#: ../pidgin/gtkprefs.c:1749
-msgid "Sound Options"
-msgstr "Možnosti zvuku"
-
-#: ../pidgin/gtkprefs.c:1750
+#: ../pidgin/gtkprefs.c:1752
 msgid "Sounds when conversation has _focus"
 msgstr "Prehrávať zvuky, keď je okno koverzácie _aktívne"
 
-#: ../pidgin/gtkprefs.c:1752
-msgid "Enable sounds:"
-msgstr "Povoliť zvuky:"
-
 #: ../pidgin/gtkprefs.c:1754
-msgid "Only when available"
-msgstr "Len ak sú dostupné"
-
-#: ../pidgin/gtkprefs.c:1755
-msgid "Only when not available"
-msgstr "Len ak sú nedostupné"
-
-#: ../pidgin/gtkprefs.c:1763
+msgid "Enable sounds:"
+msgstr "Povoliť zvuky:"
+
+#: ../pidgin/gtkprefs.c:1765
 msgid "Volume:"
 msgstr "Hlasitosť:"
 
-#: ../pidgin/gtkprefs.c:1791
-msgid "Sound Events"
-msgstr "Zvukové udalosti"
-
-#: ../pidgin/gtkprefs.c:1843
+#: ../pidgin/gtkprefs.c:1845
 msgid "Play"
 msgstr "Prehrať"
 
-#: ../pidgin/gtkprefs.c:1850
-msgid "Event"
-msgstr "Udalosť"
-
-#: ../pidgin/gtkprefs.c:1869
-msgid "Test"
-msgstr "Ukážka"
-
-#: ../pidgin/gtkprefs.c:1873
-msgid "Reset"
-msgstr "Obnoviť"
-
-#: ../pidgin/gtkprefs.c:1877
-msgid "Choose..."
-msgstr "Vybrať..."
-
-#: ../pidgin/gtkprefs.c:1920
+#: ../pidgin/gtkprefs.c:1922
 msgid "_Report idle time:"
 msgstr "_Oznamovať čas nečinnosti:"
 
-#: ../pidgin/gtkprefs.c:1925
+#: ../pidgin/gtkprefs.c:1927
 msgid "Based on keyboard or mouse use"
 msgstr "Podľa využitia klávesnice alebo myši"
 
-#: ../pidgin/gtkprefs.c:1934
+#: ../pidgin/gtkprefs.c:1936
 msgid "_Auto-reply:"
 msgstr "_Automatická odpoveď:"
 
-#: ../pidgin/gtkprefs.c:1938
+#: ../pidgin/gtkprefs.c:1940
 msgid "When both away and idle"
 msgstr "Pri neprítomnosti a nečinnosti"
 
 #. Auto-away stuff
-#: ../pidgin/gtkprefs.c:1944
+#: ../pidgin/gtkprefs.c:1946
 msgid "Auto-away"
 msgstr "Automatická neprítomnosť"
 
-#: ../pidgin/gtkprefs.c:1946
+#: ../pidgin/gtkprefs.c:1948
 msgid "Change status when _idle"
 msgstr "Zmeniť stav pri _nečinnosti"
 
-#: ../pidgin/gtkprefs.c:1950
-msgid "_Minutes before changing status:"
-msgstr "_Počet minút pred zmenou stavu:"
-
-#: ../pidgin/gtkprefs.c:1958
+#: ../pidgin/gtkprefs.c:1952
+msgid "_Minutes before becoming idle:"
+msgstr "_Počet minút pred nečinnosťou:"
+
+#: ../pidgin/gtkprefs.c:1960
 msgid "Change _status to:"
 msgstr "Zmeniť _stav na:"
 
 #. Signon status stuff
-#: ../pidgin/gtkprefs.c:1979
+#: ../pidgin/gtkprefs.c:1981
 msgid "Status at Startup"
 msgstr "Stav pri spustení"
 
-#: ../pidgin/gtkprefs.c:1981
+#: ../pidgin/gtkprefs.c:1983
 msgid "Use status from last _exit at startup"
 msgstr "Po spustení použiť stav ako pred odhlásením"
 
-#: ../pidgin/gtkprefs.c:1987
+#: ../pidgin/gtkprefs.c:1989
 msgid "Status to a_pply at startup:"
 msgstr "Po spustení použiť stav:"
 
-#: ../pidgin/gtkprefs.c:2025
+#: ../pidgin/gtkprefs.c:2027
 msgid "Interface"
 msgstr "Rozhranie"
 
-#: ../pidgin/gtkprefs.c:2027
+#: ../pidgin/gtkprefs.c:2029
 msgid "Smiley Themes"
 msgstr "Témy smajlíkov"
 
-#: ../pidgin/gtkprefs.c:2028
-msgid "Sounds"
-msgstr "Zvuky"
-
-#: ../pidgin/gtkprefs.c:2034
+#: ../pidgin/gtkprefs.c:2036
 msgid "Browser"
 msgstr "Prehliadač"
 
-#: ../pidgin/gtkprefs.c:2038
+#: ../pidgin/gtkprefs.c:2040
 msgid "Status / Idle"
 msgstr "Stav / nečinný"
 
@@ -14783,23 +14890,23 @@
 msgid "Apply"
 msgstr "Použiť"
 
-#: ../pidgin/gtkrequest.c:1478
+#: ../pidgin/gtkrequest.c:1504
 msgid "That file already exists"
 msgstr "Tento súbor už existuje"
 
-#: ../pidgin/gtkrequest.c:1479
+#: ../pidgin/gtkrequest.c:1505
 msgid "Would you like to overwrite it?"
 msgstr "Chcete ho prepísať?"
 
-#: ../pidgin/gtkrequest.c:1482
+#: ../pidgin/gtkrequest.c:1508
 msgid "Overwrite"
 msgstr "Prepísať"
 
-#: ../pidgin/gtkrequest.c:1483
+#: ../pidgin/gtkrequest.c:1509
 msgid "Choose New Name"
 msgstr "Vybrať iný názov"
 
-#: ../pidgin/gtkrequest.c:1621 ../pidgin/gtkrequest.c:1635
+#: ../pidgin/gtkrequest.c:1647 ../pidgin/gtkrequest.c:1661
 msgid "Select Folder..."
 msgstr "Vyberte priečinok..."
 
@@ -14858,91 +14965,43 @@
 msgid "Status for %s"
 msgstr "Stav pre %s"
 
-#: ../pidgin/gtksound.c:63
-msgid "Buddy logs in"
-msgstr "Priateľ sa prihlási"
-
-#: ../pidgin/gtksound.c:64
-msgid "Buddy logs out"
-msgstr "Priateľ sa odhlási"
-
-#: ../pidgin/gtksound.c:65
-msgid "Message received"
-msgstr "Prijatie správy"
-
-#: ../pidgin/gtksound.c:66
-msgid "Message received begins conversation"
-msgstr "Prijatá správa začína rozhovor"
-
-#: ../pidgin/gtksound.c:67
-msgid "Message sent"
-msgstr "Odoslanie správy"
-
-#: ../pidgin/gtksound.c:68
-msgid "Person enters chat"
-msgstr "Osoba vstúpi do chatu"
-
-#: ../pidgin/gtksound.c:69
-msgid "Person leaves chat"
-msgstr "Osoba opustí chat"
-
-#: ../pidgin/gtksound.c:70
-msgid "You talk in chat"
-msgstr "Vy hovoríte v chate"
-
-#: ../pidgin/gtksound.c:71
-msgid "Others talk in chat"
-msgstr "Ostatní hovoria v chate"
-
-#: ../pidgin/gtksound.c:74
-msgid "Someone says your screen name in chat"
-msgstr "Niekto v chate napíše vaše meno"
-
-#: ../pidgin/gtksound.c:310
-msgid "GStreamer Failure"
-msgstr "Zlyhanie rozhrania GStreamer"
-
-#: ../pidgin/gtksound.c:311
-msgid "GStreamer failed to initialize."
-msgstr "Nepodarilo sa inicializovať rozhranie GStreamer"
-
 #: ../pidgin/gtkstatusbox.c:663
 msgid "Waiting for network connection"
 msgstr "Čaká sa na sieťové pripojenie"
 
-#: ../pidgin/gtkutils.c:627
+#: ../pidgin/gtkutils.c:631
 msgid "Google Talk"
 msgstr "Google Talk"
 
-#: ../pidgin/gtkutils.c:1384 ../pidgin/gtkutils.c:1407
+#: ../pidgin/gtkutils.c:1388 ../pidgin/gtkutils.c:1411
 #, c-format
 msgid "The following error has occurred loading %s: %s"
 msgstr "Počas načítavania %s sa vyskytla nasledujúca chyba: %s"
 
-#: ../pidgin/gtkutils.c:1387 ../pidgin/gtkutils.c:1409
+#: ../pidgin/gtkutils.c:1391 ../pidgin/gtkutils.c:1413
 msgid "Failed to load image"
 msgstr "Nepodarilo sa načítať obrázok"
 
-#: ../pidgin/gtkutils.c:1483
+#: ../pidgin/gtkutils.c:1487
 #, c-format
 msgid "Cannot send folder %s."
 msgstr "Nepodarilo sa odoslať priečinok %s."
 
-#: ../pidgin/gtkutils.c:1484
+#: ../pidgin/gtkutils.c:1488
 #, c-format
 msgid ""
 "%s cannot transfer a folder. You will need to send the files within "
 "individually."
 msgstr ""
-"Program %s nedokáže odoslať priečinok. Skúste posielať súbory v priečinku "
-"po jednom. "
-
-#: ../pidgin/gtkutils.c:1516 ../pidgin/gtkutils.c:1528
-#: ../pidgin/gtkutils.c:1535
+"Program %s nedokáže odoslať priečinok. Skúste posielať súbory v priečinku po "
+"jednom. "
+
+#: ../pidgin/gtkutils.c:1520 ../pidgin/gtkutils.c:1532
+#: ../pidgin/gtkutils.c:1539
 msgid "You have dragged an image"
 msgstr "Vložili ste obrázok"
 
-#: ../pidgin/gtkutils.c:1517
+#: ../pidgin/gtkutils.c:1521
 msgid ""
 "You can send this image as a file transfer, embed it into this message, or "
 "use it as the buddy icon for this user."
@@ -14950,48 +15009,48 @@
 "Tento obrázok môžete odoslať cez prenos súborov, vložiť ho do správy alebo "
 "použiť ako ikonu priateľa pre tohto používateľa."
 
-#: ../pidgin/gtkutils.c:1523 ../pidgin/gtkutils.c:1543
+#: ../pidgin/gtkutils.c:1527 ../pidgin/gtkutils.c:1547
 msgid "Set as buddy icon"
 msgstr "Nastaviť ako ikonu priateľa"
 
-#: ../pidgin/gtkutils.c:1524 ../pidgin/gtkutils.c:1544
+#: ../pidgin/gtkutils.c:1528 ../pidgin/gtkutils.c:1548
 msgid "Send image file"
 msgstr "Odoslať obrázok ako súbor"
 
-#: ../pidgin/gtkutils.c:1525 ../pidgin/gtkutils.c:1544
+#: ../pidgin/gtkutils.c:1529 ../pidgin/gtkutils.c:1548
 msgid "Insert in message"
 msgstr "Vložiť do správy"
 
-#: ../pidgin/gtkutils.c:1529
+#: ../pidgin/gtkutils.c:1533
 msgid "Would you like to set it as the buddy icon for this user?"
 msgstr "Chcete nastaviť obrázok ako ikonu priateľa?"
 
-#: ../pidgin/gtkutils.c:1536
+#: ../pidgin/gtkutils.c:1540
 msgid ""
 "You can send this image as a file transfer, or use it as the buddy icon for "
 "this user."
 msgstr ""
-"Tento obrázok môžete odoslať cez prenos súborov alebo ho "
-"použiť ako ikonu pre tohto priateľa."
-
-#: ../pidgin/gtkutils.c:1537
+"Tento obrázok môžete odoslať cez prenos súborov alebo ho použiť ako ikonu "
+"pre tohto priateľa."
+
+#: ../pidgin/gtkutils.c:1541
 msgid ""
 "You can insert this image into this message, or use it as the buddy icon for "
 "this user"
 msgstr ""
-"Tento obrázok môžete vložiť do správy alebo ho použiť ako ikonu pre "
-"tohto priateľa."
+"Tento obrázok môžete vložiť do správy alebo ho použiť ako ikonu pre tohto "
+"priateľa."
 
 #. I don't know if we really want to do anything here.  Most of the desktop item types are crap like
 #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really
 #. * send.  The only logical one is "Application," but do we really want to send a binary and nothing else?
 #. * Probably not.  I'll just give an error and return.
 #. The original patch sent the icon used by the launcher.  That's probably wrong
-#: ../pidgin/gtkutils.c:1595
+#: ../pidgin/gtkutils.c:1599
 msgid "Cannot send launcher"
 msgstr "Nepodarilo sa odoslať spúšťač"
 
-#: ../pidgin/gtkutils.c:1595
+#: ../pidgin/gtkutils.c:1599
 msgid ""
 "You dragged a desktop launcher. Most likely you wanted to send whatever this "
 "launcher points to instead of this launcher itself."
@@ -14999,7 +15058,7 @@
 "Vložili ste spúšťač. Pravdepodobne ste chceli odoslať súbor, na ktorý tento "
 "spúšťač odkazuje, namiesto samotného spúšťača."
 
-#: ../pidgin/gtkutils.c:2317
+#: ../pidgin/gtkutils.c:2334
 #, c-format
 msgid ""
 "<b>File:</b> %s\n"
@@ -15010,25 +15069,25 @@
 "<b>Veľkosť súboru:</b> %s\n"
 "<b>Veľkosť obrázku:</b> %dx%d"
 
-#: ../pidgin/gtkutils.c:2613
+#: ../pidgin/gtkutils.c:2630
 #, c-format
 msgid "The file '%s' is too large for %s.  Please try a smaller image.\n"
 msgstr "Súbor '%s' je príliš veľký na %s.  Prosím, skúste menší obrázok.\n"
 
-#: ../pidgin/gtkutils.c:2615
+#: ../pidgin/gtkutils.c:2632
 msgid "Icon Error"
 msgstr "Chyba ikony"
 
-#: ../pidgin/gtkutils.c:2616
+#: ../pidgin/gtkutils.c:2633
 msgid "Could not set icon"
 msgstr "Nepodarilo sa odoslať ikonu"
 
-#: ../pidgin/gtkutils.c:2716
+#: ../pidgin/gtkutils.c:2733
 #, c-format
 msgid "Failed to open file '%s': %s"
 msgstr "Nepodarilo sa otvoriť súbor '%s': %s"
 
-#: ../pidgin/gtkutils.c:2765
+#: ../pidgin/gtkutils.c:2782
 #, c-format
 msgid ""
 "Failed to load image '%s': reason not known, probably a corrupt image file"
@@ -15068,51 +15127,51 @@
 msgid "_Open Mail"
 msgstr "_Otvoriť poštu"
 
-#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:2
+#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2
 msgid "Pidgin smileys"
-msgstr ""
+msgstr "Smajlíci programu Pidgin"
 
 #: ../pidgin/pixmaps/emotes/none/none.theme.in.h:1
 msgid "Penguin Pimps"
-msgstr ""
+msgstr "Autori Pidginu"
 
 #: ../pidgin/pixmaps/emotes/none/none.theme.in.h:2
 msgid "Selecting this disables graphical emoticons."
-msgstr ""
+msgstr "Vyberte túto možnosť, ak nechcete grafických smajlíkov."
 
 #: ../pidgin/pixmaps/emotes/none/none.theme.in.h:3
 msgid "none"
 msgstr "žiadne"
 
-#: ../pidgin/plugins/cap/cap.c:449
+#: ../pidgin/plugins/cap/cap.c:450
 msgid "Display Statistics"
 msgstr "Zobraziť štatistiky"
 
-#: ../pidgin/plugins/cap/cap.c:461 ../pidgin/plugins/cap/cap.c:464
+#: ../pidgin/plugins/cap/cap.c:462 ../pidgin/plugins/cap/cap.c:465
 msgid "Response Probability:"
 msgstr "Pravdepodobnosť odpovede:"
 
-#: ../pidgin/plugins/cap/cap.c:810
+#: ../pidgin/plugins/cap/cap.c:811
 msgid "Statistics Configuration"
 msgstr "Konfigurácia štatistík"
 
 #. msg_difference spinner
-#: ../pidgin/plugins/cap/cap.c:813
+#: ../pidgin/plugins/cap/cap.c:814
 msgid "Maximum response timeout:"
 msgstr "Najdlhší interval do odpovede:"
 
-#: ../pidgin/plugins/cap/cap.c:816 ../pidgin/plugins/cap/cap.c:823
-#: ../pidgin/plugins/cap/cap.c:830 ../pidgin/plugins/timestamp.c:150
+#: ../pidgin/plugins/cap/cap.c:817 ../pidgin/plugins/cap/cap.c:824
+#: ../pidgin/plugins/cap/cap.c:831 ../pidgin/plugins/timestamp.c:150
 msgid "minutes"
 msgstr "minút"
 
 #. last_seen spinner
-#: ../pidgin/plugins/cap/cap.c:820
+#: ../pidgin/plugins/cap/cap.c:821
 msgid "Maximum last-seen difference:"
 msgstr "Maximálny naposledy videný rozdiel:"
 
 #. threshold spinner
-#: ../pidgin/plugins/cap/cap.c:827
+#: ../pidgin/plugins/cap/cap.c:828
 msgid "Threshold:"
 msgstr "Prah:"
 
@@ -15122,18 +15181,18 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../pidgin/plugins/cap/cap.c:935
+#: ../pidgin/plugins/cap/cap.c:936
 msgid "Contact Availability Prediction"
 msgstr "Predpovedanie dostupnosti kontaktu."
 
 #. *< name
 #. *< version
-#: ../pidgin/plugins/cap/cap.c:937
+#: ../pidgin/plugins/cap/cap.c:938
 msgid "Contact Availability Prediction plugin."
 msgstr "Modul predpovedania dostupnosti kontaktu."
 
 #. *  summary
-#: ../pidgin/plugins/cap/cap.c:938
+#: ../pidgin/plugins/cap/cap.c:939
 msgid ""
 "The contact availability plugin (cap) is used to display statistical "
 "information about buddies in a users contact list."
@@ -15278,6 +15337,7 @@
 "Note: The preference for \"New conversations\" must be set to \"By "
 "conversation count\"."
 msgstr ""
+"Poznámka: Možnosť \"New conversations\" musí byť nastavená na \"Podľa počtu konverzácií\"."
 
 #: ../pidgin/plugins/extplacement.c:111
 msgid "Number of conversations per window"
@@ -15409,34 +15469,34 @@
 msgid "_Associate Buddy"
 msgstr "_Priradiť priateľa"
 
-#: ../pidgin/plugins/gevolution/gevolution.c:238
-#: ../pidgin/plugins/gevolution/gevolution.c:244
+#: ../pidgin/plugins/gevolution/gevolution.c:240
+#: ../pidgin/plugins/gevolution/gevolution.c:246
 msgid "Unable to send e-mail"
 msgstr "Nepodarilo sa odoslať e-mail"
 
-#: ../pidgin/plugins/gevolution/gevolution.c:239
+#: ../pidgin/plugins/gevolution/gevolution.c:241
 msgid "The evolution executable was not found in the PATH."
 msgstr "Spúšťač programu evolution nebol nájdený v premennej PATH."
 
-#: ../pidgin/plugins/gevolution/gevolution.c:245
+#: ../pidgin/plugins/gevolution/gevolution.c:247
 msgid "An e-mail address was not found for this buddy."
 msgstr "Nebola nájdená e-mailová adresa tohoto priateľa."
 
-#: ../pidgin/plugins/gevolution/gevolution.c:271
+#: ../pidgin/plugins/gevolution/gevolution.c:273
 msgid "Add to Address Book"
 msgstr "Pridať do adresára"
 
-#: ../pidgin/plugins/gevolution/gevolution.c:283
+#: ../pidgin/plugins/gevolution/gevolution.c:285
 msgid "Send E-Mail"
 msgstr "Odoslať E-mail"
 
 #. Configuration frame
-#: ../pidgin/plugins/gevolution/gevolution.c:410
+#: ../pidgin/plugins/gevolution/gevolution.c:412
 msgid "Evolution Integration Configuration"
 msgstr "Nastavenie integrácie s Evoulution"
 
 #. Label
-#: ../pidgin/plugins/gevolution/gevolution.c:413
+#: ../pidgin/plugins/gevolution/gevolution.c:415
 msgid "Select all accounts that buddies should be auto-added to."
 msgstr "Vyberte všetky účty, ku ktorým sa majú automaticky pridávať priatelia."
 
@@ -15446,7 +15506,7 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../pidgin/plugins/gevolution/gevolution.c:525
+#: ../pidgin/plugins/gevolution/gevolution.c:527
 msgid "Evolution Integration"
 msgstr "Integrácia s Evolution"
 
@@ -15454,8 +15514,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#: ../pidgin/plugins/gevolution/gevolution.c:528
 #: ../pidgin/plugins/gevolution/gevolution.c:530
+#: ../pidgin/plugins/gevolution/gevolution.c:532
 msgid "Provides integration with Evolution."
 msgstr "Umožňuje integráciu s programom Evolution."
 
@@ -15488,6 +15548,15 @@
 msgid "E-mail:"
 msgstr "E-mail:"
 
+#: ../pidgin/plugins/gtkbuddynote.c:34
+#, c-format
+msgid ""
+"\n"
+"<b>Buddy Note</b>: %s"
+msgstr ""
+"\n"
+"<b>Poznámka priateľa:</b> %s"
+
 #. *< type
 #. *< ui_requirement
 #. *< flags
@@ -15546,15 +15615,15 @@
 
 #: ../pidgin/plugins/markerline.c:23
 msgid "Markerline"
-msgstr ""
+msgstr "Deliaca čiara"
 
 #: ../pidgin/plugins/markerline.c:25 ../pidgin/plugins/markerline.c:26
 msgid "Draw a line to indicate new messages in a conversation."
-msgstr ""
+msgstr "Nakresliť čiaru za novými správami v rozhovore"
 
 #: ../pidgin/plugins/markerline.c:246
 msgid "Draw Markerline in "
-msgstr ""
+msgstr "Vykreslovať oddeľovaciu čiaru "
 
 #: ../pidgin/plugins/markerline.c:250 ../pidgin/plugins/notify.c:676
 msgid "_IM windows"
@@ -15869,9 +15938,9 @@
 "Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 msgstr ""
-"Umožní vám odoslať priamy vstup v textovo-založených protokoloch (Jabber, MSN, "
-"IRC, TOC). Pre odoslanie stlačte Enter vo vstupnom poli. Sledujte ladiace "
-"okno."
+"Umožní vám odoslať priamy vstup v textovo-založených protokoloch (Jabber, "
+"MSN, IRC, TOC). Pre odoslanie stlačte Enter vo vstupnom poli. Sledujte "
+"ladiace okno."
 
 #: ../pidgin/plugins/relnot.c:71
 #, c-format
@@ -15879,7 +15948,8 @@
 "You are using %s version %s.  The current version is %s.  You can get it "
 "from <a href=\"%s\">%s</a><hr>"
 msgstr ""
-"Používate program %s, verziu %s.  Aktuálna verzia je %s.  Môžete ju získať na adrese <a href=\"%s\">%s</a><hr>"
+"Používate program %s, verziu %s.  Aktuálna verzia je %s.  Môžete ju získať "
+"na adrese <a href=\"%s\">%s</a><hr>"
 
 #: ../pidgin/plugins/relnot.c:79
 #, c-format
@@ -16085,43 +16155,43 @@
 "správach konverzácií a záznamoch."
 
 #: ../pidgin/plugins/win32/transparency/win2ktrans.c:174
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:589
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:636
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:593
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:640
 msgid "Opacity:"
 msgstr "Krytie:"
 
 #. IM Convo trans options
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:553
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:557
 msgid "IM Conversation Windows"
 msgstr "Okná rozhovoru"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:554
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:558
 msgid "_IM window transparency"
 msgstr "Priehľadnosť okna správ"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:568
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:572
 msgid "_Show slider bar in IM window"
 msgstr "_Zobrazovať posuvný pruh v okne správ"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:575
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:579
 msgid "Remove IM window transparency on focus"
 msgstr "Odstrániť priehľadnosť okna správ pri fokuse"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:578
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:626
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:582
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:630
 msgid "Always on top"
 msgstr "Vždy navrchu"
 
 #. Buddy List trans options
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:610
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:614
 msgid "Buddy List Window"
 msgstr "Okno zoznamu priateľov"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:611
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:615
 msgid "_Buddy List window transparency"
 msgstr "Priehľadnosť okna _zoznamu priateľov"
 
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:624
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:628
 msgid "Remove Buddy List window transparency on focus"
 msgstr "Vypnúť priesvitnosť okna zoznamu priateľov pri aktivovaní"
 
@@ -16131,19 +16201,19 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:684
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:688
 msgid "Transparency"
 msgstr "Priehľadnosť"
 
 #. *< name
 #. *< version
 #. *  summary
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:687
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:691
 msgid "Variable Transparency for the buddy list and conversations."
 msgstr "Premenlivá priehľadnosť zoznamu priateľov a konverzácií."
 
 #. *  description
-#: ../pidgin/plugins/win32/transparency/win2ktrans.c:689
+#: ../pidgin/plugins/win32/transparency/win2ktrans.c:693
 msgid ""
 "This plugin enables variable alpha transparency on conversation windows and "
 "the buddy list.\n"
@@ -16155,51 +16225,52 @@
 "\n"
 "* Poznámka: Tento plugin vyžaduje Win2000 alebo novší."
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:307
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:303
 msgid "GTK+ Runtime Version"
 msgstr "Verzia GTK+ Runtime"
 
 #. Autostart
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:315
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:311
 msgid "Startup"
 msgstr "Spustenie"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:316
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:312
 #, c-format
 msgid "_Start %s on Windows startup"
 msgstr "_Spustiť %s pri štarte Windows"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:331
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:327
 msgid "_Dockable Buddy List"
 msgstr "_Ukotviteľný zoznam priateľov"
 
 #. Blist On Top
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:335
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:331
 msgid "_Keep Buddy List window on top:"
 msgstr "_Udržiavať okno so zoznamom priateľov navrchu:"
 
 #. XXX: Did this ever work?
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:340
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:336
 msgid "Only when docked"
 msgstr "Len ak je ukotvené"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:345
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:341
 msgid "_Flash window when chat messages are received"
 msgstr "_Blikať oknom, keď sú prijaté správy"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:375
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:371
 msgid "Windows Pidgin Options"
 msgstr "Možnosti pre Windows verziu programu Pidgin"
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:377
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:373
 msgid "Options specific to Pidgin for Windows."
 msgstr "Špecifické možnosti programu Pidgin pre Windows."
 
-#: ../pidgin/plugins/win32/winprefs/winprefs.c:378
+#: ../pidgin/plugins/win32/winprefs/winprefs.c:374
 msgid ""
 "Provides options specific to Pidgin for Windows , such as buddy list docking."
 msgstr ""
-"Poskytuje možnosti špecifické pre Pidgin pre Windows, napríklad ukotvovanie zoznamu priateľov."
+"Poskytuje možnosti špecifické pre Pidgin pre Windows, napríklad ukotvovanie "
+"zoznamu priateľov."
 
 #: ../pidgin/plugins/xmppconsole.c:667
 msgid "<font color='#777777'>Logged out.</font>"
@@ -16248,6 +16319,75 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Tento modul sa hodí na odlaďovanie XMPP serverov alebo klientov."
 
+#~ msgid "You have been signed off for an unknown reason."
+#~ msgstr "Z neznámeho dôvodu ste boli odhlásení."
+
+#~ msgid "Are you sure to exit this Qun?"
+#~ msgstr "Naozaj chcete opustiť toto Qun?"
+
+#~ msgid "Go ahead"
+#~ msgstr "Pokračovať"
+
+#~ msgid "Server ACK"
+#~ msgstr "Server ACK"
+
+#~ msgid "Keep alive error, seems connection lost!"
+#~ msgstr "Chyba spojenia, asi padlo spojenie!"
+
+#~ msgid "Request login token error!"
+#~ msgstr "Vyžiadaná chyba pri prihlasovaní do tokenu!"
+
+#~ msgid "%s Address"
+#~ msgstr "%s Adresa"
+
+#~ msgid "QQ: Available"
+#~ msgstr "QQ: Prítomný"
+
+#~ msgid "QQ: Away"
+#~ msgstr "QQ: Neprítomný"
+
+#~ msgid "QQ: Invisible"
+#~ msgstr "QQ: Neviditeľný"
+
+#~ msgid "QQ: Offline"
+#~ msgstr "QQ: Odpojený"
+
+#~ msgid "Modify My Information"
+#~ msgstr "Upraviť moje podrobnosti"
+
+#~ msgid "Login in TCP"
+#~ msgstr "Prihlásenie v TCP"
+
+#~ msgid "Login Hidden"
+#~ msgstr "Prihlasenie skryté"
+
+#~ msgid "Socket send error"
+#~ msgstr "Chyba odoslania soketu"
+
+#~ msgid "Connection refused"
+#~ msgstr "Spojenie odmietnuté"
+
+#~ msgid "%s has added you [%s]"
+#~ msgstr "%s vás pridal [%s]"
+
+#~ msgid "Norwegian"
+#~ msgstr "Nórsky"
+
+#~ msgid "_Bold"
+#~ msgstr "_Tučné"
+
+#~ msgid "_Larger"
+#~ msgstr "_Väčšie"
+
+#~ msgid "_Smaller"
+#~ msgstr "_Menšie"
+
+#~ msgid "_Reset font"
+#~ msgstr "Vymazať formátovanie"
+
+#~ msgid "Show buddy _icons"
+#~ msgstr "Zobrazovať _ikony priateľov"
+
 #~ msgid "Gaim Internet Messenger"
 #~ msgstr "Gaim, IM klient"
 
@@ -16288,13 +16428,6 @@
 
 #~ msgid ""
 #~ "\n"
-#~ "<b>Buddy Alias:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Prezývka priateľa:</b> %s"
-
-#~ msgid ""
-#~ "\n"
 #~ "<b>Nickname:</b> %s"
 #~ msgstr ""
 #~ "\n"