changeset 30513:cb8b53a6f238

propagate from branch 'im.pidgin.pidgin' (head fd01d69465dca1c23c811963e2545236c2749d55) to branch 'im.pidgin.cpw.malu.xmpp.google_relay' (head f42dc6597e138658717b57f998be0bb8b164ca6f)
author Marcus Lundblad <ml@update.uu.se>
date Sun, 29 Nov 2009 18:53:11 +0000
parents 0b5520bf1fe3 (current diff) 8d213c65abad (diff)
children ef2c74d0ef19
files libpurple/media.c libpurple/protocols/jabber/Makefile.am libpurple/protocols/jabber/google.c libpurple/protocols/jabber/jabber.c libpurple/protocols/jabber/jabber.h
diffstat 94 files changed, 1757 insertions(+), 1612 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Nov 23 21:32:39 2009 +0000
+++ b/ChangeLog	Sun Nov 29 18:53:11 2009 +0000
@@ -4,6 +4,9 @@
 version 2.6.4 (??/??/20??):
 	libpurple:
 	* Actually emit the hold signal for media calls.
+	* Don't send Proxy-Authorization headers to HTTP proxy servers until we've
+	  received a "407 Proxy Authentication Required" response from the server.
+	  (thecrux)
 	* Added "MXit" protocol plugin, supported and maintained by the MXit folks
 	  themselves (MXit Lifestyle (Pty) Ltd.)
 
@@ -20,6 +23,7 @@
 	* The simultaneous login account option is respected when using
 	  the clientLogin authentication method.
 	* Fix offline message retrieval (broken in 2.6.3)
+	* Fix handling of markup on some messages (broken in 2.6.2)
 	* Fix SSL when clientLogin is enabled.
 	* Fix sending and receiving Unicode characters in a Direct IM
 
@@ -32,6 +36,9 @@
 	* Fix a random crash that might occur when idle.
 	* Fix a crash when logging in with some long non-ASCII passwords.
 	  (Shaun Lindsay)
+	* Cache our own friendly name as the server no longer does that for
+	  us.  Users of older versions may need to re-set their friendly name
+	  as it has probably been reset.
 
 	XMPP:
 	* Users connecting to Google Talk now have an "Initiate Chat" context menu
@@ -67,6 +74,9 @@
 	* Add a hold button to the media window.
 	* Fix a bug where the conversation backlog stops scrolling in a very busy
 	  chat room.
+	* In the Conversation "Send To" menu, offline buddies appear grayed
+	  out (but are still selectable).  Previously, only offline buddies on
+	  accounts that do not support offline messaging appeared grayed out.
 
 	Pidgin Preference and Preference Window Changes:
 	* Removed the "Use font from theme" and "Conversation Font" preferences
--- a/doc/finch.1.in	Mon Nov 23 21:32:39 2009 +0000
+++ b/doc/finch.1.in	Sun Nov 29 18:53:11 2009 +0000
@@ -114,7 +114,7 @@
 .B Ctrl \+ o \fR or \fB F10
 Bring up the menu (if there is one) for a window.
 .TP
-.B F11
+.B F11 \fR or \fB Ctrl \+ x
 Popup the context menu (if there is one) for the selected widget.
 .TP
 .B Alt \+ /
--- a/libpurple/certificate.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/certificate.c	Sun Nov 29 18:53:11 2009 +0000
@@ -26,8 +26,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-
 #include "internal.h"
 #include "certificate.h"
 #include "dbus-maybe.h"
--- a/libpurple/cmds.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/cmds.c	Sun Nov 29 18:53:11 2009 +0000
@@ -21,8 +21,6 @@
  *
  */
 
-#include <string.h>
-
 #include "internal.h"
 
 #include "account.h"
--- a/libpurple/dbus-server.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/dbus-server.c	Sun Nov 29 18:53:11 2009 +0000
@@ -25,14 +25,16 @@
 #define DBUS_API_SUBJECT_TO_CHANGE
 #endif
 
+/* Allow the code below to see deprecated functions, so we can continue to
+ * export them via DBus. */
+#undef PURPLE_DISABLE_DEPRECATED
+
+#include "internal.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
-/* Allow the code below to see deprecated functions, so we can continue to
- * export them via DBus. */
-#undef PURPLE_DISABLE_DEPRECATED
-
 #include "account.h"
 #include "blist.h"
 #include "conversation.h"
@@ -42,7 +44,6 @@
 #include "dbus-bindings.h"
 #include "debug.h"
 #include "core.h"
-#include "internal.h"
 #include "savedstatuses.h"
 #include "smiley.h"
 #include "util.h"
--- a/libpurple/debug.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/debug.c	Sun Nov 29 18:53:11 2009 +0000
@@ -23,8 +23,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "prefs.h"
 #include "util.h"
 
--- a/libpurple/desktopitem.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/desktopitem.c	Sun Nov 29 18:53:11 2009 +0000
@@ -53,12 +53,12 @@
  * Boston, MA 02111-1301, USA.
  */
 
+#include "internal.h"
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
 #include <time.h>
 #include "desktopitem.h"
-#include "internal.h"
 
 struct _PurpleDesktopItem {
 	int refcount;
--- a/libpurple/eventloop.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/eventloop.c	Sun Nov 29 18:53:11 2009 +0000
@@ -23,8 +23,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
+#include "internal.h"
 #include "eventloop.h"
-#include "internal.h"
 
 static PurpleEventLoopUiOps *eventloop_ui_ops = NULL;
 
--- a/libpurple/ft.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/ft.c	Sun Nov 29 18:53:11 2009 +0000
@@ -229,7 +229,7 @@
 	escaped = g_markup_escape_text(message, -1);
 
 	if (is_error)
-		flags = PURPLE_MESSAGE_ERROR;
+		flags |= PURPLE_MESSAGE_ERROR;
 
 	purple_conversation_write(conv, NULL, escaped, flags, time(NULL));
 	g_free(escaped);
--- a/libpurple/ft.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/ft.h	Sun Nov 29 18:53:11 2009 +0000
@@ -160,7 +160,10 @@
 
 	PurpleXferStatusType status;    /**< File Transfer's status.             */
 
-	/* I/O operations. */
+	/** I/O operations, which should be set by the prpl using
+	 *  purple_xfer_set_init_fnc() and friends.  Setting #init is
+	 *  mandatory; all others are optional.
+	 */
 	struct
 	{
 		void (*init)(PurpleXfer *xfer);
--- a/libpurple/imgstore.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/imgstore.c	Sun Nov 29 18:53:11 2009 +0000
@@ -25,7 +25,6 @@
  *
 */
 
-#include <glib.h>
 #include "internal.h"
 
 #include "dbus-maybe.h"
--- a/libpurple/media.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/media.c	Sun Nov 29 18:53:11 2009 +0000
@@ -24,8 +24,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <string.h>
-
 #include "internal.h"
 
 #include "account.h"
--- a/libpurple/mime.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/mime.c	Sun Nov 29 18:53:11 2009 +0000
@@ -21,11 +21,6 @@
  * USA.
  */
 
-#include <stdio.h>
-#include <string.h>
-
-#include <glib.h>
-
 #include "internal.h"
 
 /* this should become "util.h" if we ever get this into purple proper */
--- a/libpurple/nat-pmp.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/nat-pmp.c	Sun Nov 29 18:53:11 2009 +0000
@@ -29,8 +29,8 @@
  * OF SUCH DAMAGE.
  */
 
+#include "internal.h"
 #include "nat-pmp.h"
-#include "internal.h"
 #include "debug.h"
 #include "signals.h"
 #include "network.h"
--- a/libpurple/ntlm.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/ntlm.c	Sun Nov 29 18:53:11 2009 +0000
@@ -24,8 +24,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-#include <stdlib.h>
 #include "internal.h"
 
 #include "util.h"
--- a/libpurple/plugins/log_reader.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/plugins/log_reader.c	Sun Nov 29 18:53:11 2009 +0000
@@ -1,7 +1,7 @@
+#include "internal.h"
+
 #include <stdio.h>
 
-#include "internal.h"
-
 #include "debug.h"
 #include "log.h"
 #include "plugin.h"
--- a/libpurple/plugins/signals-test.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/plugins/signals-test.c	Sun Nov 29 18:53:11 2009 +0000
@@ -20,9 +20,10 @@
  */
 #define SIGNAL_TEST_PLUGIN_ID "core-signals-test"
 
+#include "internal.h"
+
 #include <stdio.h>
 
-#include "internal.h"
 #include "cipher.h"
 #include "connection.h"
 #include "conversation.h"
--- a/libpurple/protocols/jabber/Makefile.am	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Sun Nov 29 18:53:11 2009 +0000
@@ -5,12 +5,17 @@
 
 pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
-JABBERSOURCES = auth.c \
+JABBERSOURCES = \
+			  adhoccommands.c \
+			  adhoccommands.h \
+			  auth.c \
 			  auth.h \
 			  buddy.c \
 			  buddy.h \
 			  bosh.c \
 			  bosh.h \
+			  caps.c \
+			  caps.h \
 			  chat.c \
 			  chat.h \
 			  data.c \
@@ -43,10 +48,13 @@
 			  jutil.h \
 			  message.c \
 			  message.h \
+			  namespaces.h \
 			  oob.c \
 			  oob.h \
 			  parser.c \
 			  parser.h \
+			  pep.c \
+			  pep.h \
 			  ping.c \
 			  ping.h \
 			  presence.c \
@@ -55,14 +63,6 @@
 			  roster.h \
 			  si.c \
 			  si.h \
-			  xdata.c \
-			  xdata.h \
-			  caps.c \
-			  caps.h \
-			  adhoccommands.c \
-			  adhoccommands.h \
-			  pep.c \
-			  pep.h \
 			  useravatar.c \
 			  useravatar.h \
 			  usermood.c \
@@ -70,7 +70,9 @@
 			  usernick.c \
 			  usernick.h \
 			  usertune.c \
-			  usertune.h
+			  usertune.h \
+			  xdata.c \
+			  xdata.h
 
 AM_CFLAGS = $(st)
 
--- a/libpurple/protocols/jabber/adhoccommands.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/adhoccommands.c	Sun Nov 29 18:53:11 2009 +0000
@@ -97,7 +97,7 @@
 	if (type == JABBER_IQ_ERROR)
 		return;
 
-	query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items");
+	query = xmlnode_get_child_with_namespace(packet, "query", NS_DISCO_ITEMS);
 	if (!query)
 		return;
 	node = xmlnode_get_attrib(query, "node");
@@ -275,7 +275,8 @@
                                 JabberIqType type, const char *id,
                                 xmlnode *packet, gpointer data)
 {
-	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items");
+	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
+			NS_DISCO_ITEMS);
 
 	jabber_adhoc_got_server_list(js, from, query);
 
@@ -291,8 +292,9 @@
 }
 
 void jabber_adhoc_server_get_list(JabberStream *js) {
-	JabberIq *iq = jabber_iq_new_query(js,JABBER_IQ_GET,"http://jabber.org/protocol/disco#items");
-	xmlnode *query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items");
+	JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_ITEMS);
+	xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query",
+			NS_DISCO_ITEMS);
 
 	xmlnode_set_attrib(iq->node,"to",js->user->domain);
 	xmlnode_set_attrib(query,"node","http://jabber.org/protocol/commands");
--- a/libpurple/protocols/jabber/bosh.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/bosh.c	Sun Nov 29 18:53:11 2009 +0000
@@ -369,8 +369,8 @@
 	                "sid='%s' "
 	                "to='%s' "
 	                "xml:lang='en' "
-	                "xmlns='http://jabber.org/protocol/httpbind' "
-	                "xmlns:xmpp='urn:xmpp:xbosh'",
+	                "xmlns='" NS_BOSH "' "
+	                "xmlns:xmpp='" NS_XMPP_BOSH "'",
 	                ++conn->rid,
 	                conn->sid,
 	                conn->js->user->domain);
@@ -567,13 +567,13 @@
 	                "xml:lang='en' "
 	                "xmpp:version='1.0' "
 	                "ver='1.6' "
-	                "xmlns:xmpp='urn:xmpp:bosh' "
+	                "xmlns:xmpp='" NS_XMPP_BOSH "' "
 	                "rid='%" G_GUINT64_FORMAT "' "
 /* TODO: This should be adjusted/adjustable automatically according to
  * realtime network behavior */
 	                "wait='60' "
 	                "hold='1' "
-	                "xmlns='http://jabber.org/protocol/httpbind'/>",
+	                "xmlns='" NS_BOSH "'/>",
 	                conn->js->user->domain,
 	                ++conn->rid);
 
--- a/libpurple/protocols/jabber/buddy.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sun Nov 29 18:53:11 2009 +0000
@@ -1466,7 +1466,7 @@
 	if(!jbr->client.name)
 		return FALSE;
 
-	if(!strcmp(ns, "jabber:iq:last")) {
+	if(!strcmp(ns, NS_LAST_ACTIVITY)) {
 		if(!strcmp(jbr->client.name, "Trillian")) {
 			/* verified by nwalp 2007/05/09 */
 			if(!strcmp(jbr->client.version, "3.1.0.121") ||
@@ -1512,8 +1512,8 @@
 	 * respond (with an error or otherwise) to jabber:iq:last
 	 * requests.  There are a number of Trillian users in my
 	 * office. */
-	if(!_client_is_blacklisted(jbr, "jabber:iq:last")) {
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:last");
+	if(!_client_is_blacklisted(jbr, NS_LAST_ACTIVITY)) {
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
 		xmlnode_set_attrib(iq->node, "to", to);
 		jabber_iq_set_callback(iq, jabber_last_parse, jbi);
 		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
@@ -1522,12 +1522,12 @@
 
 	if (jbr->tz_off == PURPLE_NO_TZ_OFF &&
 			(!jbr->caps.info ||
-			 	jabber_resource_has_capability(jbr, "urn:xmpp:time"))) {
+			 	jabber_resource_has_capability(jbr, NS_ENTITY_TIME))) {
 		xmlnode *child;
 		iq = jabber_iq_new(js, JABBER_IQ_GET);
 		xmlnode_set_attrib(iq->node, "to", to);
 		child = xmlnode_new_child(iq->node, "time");
-		xmlnode_set_namespace(child, "urn:xmpp:time");
+		xmlnode_set_namespace(child, NS_ENTITY_TIME);
 		jabber_iq_set_callback(iq, jabber_time_parse, jbi);
 		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
 		jabber_iq_send(iq);
@@ -1590,7 +1590,7 @@
 
 	if (!jb->resources && is_bare_jid) {
 		/* user is offline, send a jabber:iq:last to find out last time online */
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:last");
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
 		xmlnode_set_attrib(iq->node, "to", jid);
 		jabber_iq_set_callback(iq, jabber_last_offline_parse, jbi);
 		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
--- a/libpurple/protocols/jabber/caps.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/caps.c	Sun Nov 29 18:53:11 2009 +0000
@@ -440,7 +440,7 @@
                         const char *id, xmlnode *packet, gpointer data)
 {
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-		"http://jabber.org/protocol/disco#info");
+		NS_DISCO_INFO);
 	jabber_caps_cbplususerdata *userdata = data;
 	JabberCapsClientInfo *info = NULL, *value;
 	JabberCapsTuple key;
@@ -531,7 +531,7 @@
                      const char *id, xmlnode *packet, gpointer data)
 {
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-		"http://jabber.org/protocol/disco#info");
+		NS_DISCO_INFO);
 	xmlnode *child;
 	ext_iq_data *userdata = data;
 	GList *features = NULL;
@@ -638,10 +638,9 @@
 		xmlnode *query;
 		char *nodever;
 
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-					"http://jabber.org/protocol/disco#info");
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 		query = xmlnode_get_child_with_namespace(iq->node, "query",
-					"http://jabber.org/protocol/disco#info");
+					NS_DISCO_INFO);
 		nodever = g_strdup_printf("%s#%s", node, ver);
 		xmlnode_set_attrib(query, "node", nodever);
 		g_free(nodever);
@@ -679,10 +678,9 @@
 				cbdata->name = exts[i];
 				cbdata->data = cbplususerdata_ref(userdata);
 
-				iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-				            "http://jabber.org/protocol/disco#info");
+				iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 				query = xmlnode_get_child_with_namespace(iq->node, "query",
-				            "http://jabber.org/protocol/disco#info");
+				            NS_DISCO_INFO);
 				nodeext = g_strdup_printf("%s#%s", node, exts[i]);
 				xmlnode_set_attrib(query, "node", nodeext);
 				g_free(nodeext);
@@ -771,7 +769,7 @@
 	xmlnode *child;
 	JabberCapsClientInfo *info;
 
-	if (!query || strcmp(query->xmlns, "http://jabber.org/protocol/disco#info"))
+	if (!query || strcmp(query->xmlns, NS_DISCO_INFO))
 		return 0;
 
 	info = g_new0(JabberCapsClientInfo, 1);
--- a/libpurple/protocols/jabber/chat.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/chat.c	Sun Nov 29 18:53:11 2009 +0000
@@ -825,7 +825,7 @@
 
 	purple_roomlist_set_in_progress(js->roomlist, TRUE);
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_ITEMS);
 
 	xmlnode_set_attrib(iq->node, "to", server);
 
@@ -1201,7 +1201,7 @@
 	for(x = xmlnode_get_child(query, "feature"); x; x = xmlnode_get_next_twin(x)) {
 		const char *var = xmlnode_get_attrib(x, "var");
 
-		if(var && !strcmp(var, "http://jabber.org/protocol/xhtml-im")) {
+		if(var && !strcmp(var, NS_XHTML_IM)) {
 			chat->xhtml = TRUE;
 		}
 	}
@@ -1216,8 +1216,7 @@
 
 	room_jid = g_strdup_printf("%s@%s", chat->room, chat->server);
 
-	iq = jabber_iq_new_query(chat->js, JABBER_IQ_GET,
-			"http://jabber.org/protocol/disco#info");
+	iq = jabber_iq_new_query(chat->js, JABBER_IQ_GET, NS_DISCO_INFO);
 
 	xmlnode_set_attrib(iq->node, "to", room_jid);
 
--- a/libpurple/protocols/jabber/data.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/data.c	Sun Nov 29 18:53:11 2009 +0000
@@ -18,11 +18,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
+
 #include <stdlib.h>
 #include <glib.h>
 #include <string.h>
 
-#include "internal.h"
 #include "data.h"
 #include "debug.h"
 #include "xmlnode.h"
@@ -140,7 +141,7 @@
 	xmlnode *tag = xmlnode_new("data");
 	char *base64data = purple_base64_encode(data->data, data->size);
 
-	xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
+	xmlnode_set_namespace(tag, NS_BOB);
 	xmlnode_set_attrib(tag, "cid", data->cid);
 	xmlnode_set_attrib(tag, "type", data->type);
 
@@ -169,7 +170,7 @@
 {
 	xmlnode *tag = xmlnode_new("data");
 
-	xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
+	xmlnode_set_namespace(tag, NS_BOB);
 	xmlnode_set_attrib(tag, "cid", cid);
 
 	return tag;
@@ -254,7 +255,7 @@
 	remote_data_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal,
 		g_free, jabber_data_delete);
 
-	jabber_iq_register_handler("data", XEP_0231_NAMESPACE, jabber_data_parse);
+	jabber_iq_register_handler("data", NS_BOB, jabber_data_parse);
 }
 
 void
--- a/libpurple/protocols/jabber/data.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/data.h	Sun Nov 29 18:53:11 2009 +0000
@@ -24,8 +24,6 @@
 #include "xmlnode.h"
 #include "jabber.h"
 
-#define XEP_0231_NAMESPACE "urn:xmpp:bob"
-
 #include <glib.h>
 
 typedef struct {
--- a/libpurple/protocols/jabber/disco.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/disco.c	Sun Nov 29 18:53:11 2009 +0000
@@ -60,7 +60,7 @@
 {
 	JabberBytestreamsStreamhost *sh = data;
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-		"http://jabber.org/protocol/bytestreams");
+		NS_BYTESTREAMS);
 
 	if (from && !strcmp(from, sh->jid) && query != NULL) {
 		xmlnode *sh_node = xmlnode_get_child(query, "streamhost");
@@ -109,8 +109,7 @@
 		/* create custom caps node URI */
 		node_uri = g_strconcat(CAPS0115_NODE, "#", jabber_caps_get_own_hash(js), NULL);
 
-		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT,
-				"http://jabber.org/protocol/disco#info");
+		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, NS_DISCO_INFO);
 
 		jabber_iq_set_id(iq, id);
 
@@ -152,7 +151,7 @@
 			 * advertises as 'voice-v1'.
 			 */
 			xmlnode *feature = xmlnode_new_child(query, "feature");
-			xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/voice/v1");
+			xmlnode_set_attrib(feature, "var", NS_GOOGLE_VOICE);
 		} else if (g_str_equal(node, CAPS0115_NODE "#" "video-v1")) {
 			/*
 			 * HUGE HACK! We advertise this ext (see jabber_presence_create_js
@@ -164,7 +163,7 @@
 			 * advertises as 'video-v1'.
 			 */
 			xmlnode *feature = xmlnode_new_child(query, "feature");
-			xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/video/v1");
+			xmlnode_set_attrib(feature, "var", NS_GOOGLE_VIDEO);
 		} else if (g_str_equal(node, CAPS0115_NODE "#" "camera-v1")) {
 			/*
 			 * HUGE HACK! We advertise this ext (see jabber_presence_create_js
@@ -176,7 +175,7 @@
 			 * advertises as 'camera-v1'.
 			 */
 			xmlnode *feature = xmlnode_new_child(query, "feature");
-			xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/camera/v1");
+			xmlnode_set_attrib(feature, "var", NS_GOOGLE_CAMERA);
 #endif
 		} else {
 			xmlnode *error, *inf;
@@ -189,7 +188,7 @@
 			xmlnode_set_attrib(error, "code", "404");
 			xmlnode_set_attrib(error, "type", "cancel");
 			inf = xmlnode_new_child(error, "item-not-found");
-			xmlnode_set_namespace(inf, "urn:ietf:params:xml:ns:xmpp-stanzas");
+			xmlnode_set_namespace(inf, NS_XMPP_STANZAS);
 		}
 		g_free(node_uri);
 		jabber_iq_send(iq);
@@ -204,7 +203,7 @@
 		error = xmlnode_new_child(iq->node, "error");
 		xmlnode_set_attrib(error, "type", "modify");
 		bad_request = xmlnode_new_child(error, "bad-request");
-		xmlnode_set_namespace(bad_request, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(bad_request, NS_XMPP_STANZAS);
 
 		jabber_iq_set_id(iq, id);
 		if (from)
@@ -221,8 +220,7 @@
 	struct _jabber_disco_info_cb_data *jdicd = data;
 	xmlnode *query;
 
-	query = xmlnode_get_child_with_namespace(packet, "query",
-				"http://jabber.org/protocol/disco#info");
+	query = xmlnode_get_child_with_namespace(packet, "query", NS_DISCO_INFO);
 
 	if (type == JABBER_IQ_RESULT && query) {
 		xmlnode *child;
@@ -257,7 +255,7 @@
 				} else if(!strcmp(category, "directory") && !strcmp(type, "user")) {
 					/* we found a JUD */
 					js->user_directories = g_list_prepend(js->user_directories, g_strdup(from));
-				} else if(!strcmp(category, "proxy") && !strcmp(type, "bytestreams")) {
+				} else if(!strcmp(category, "proxy") && !strcmp(type, NS_BYTESTREAMS)) {
 					/* This is a bytestream proxy */
 					JabberIq *iq;
 					JabberBytestreamsStreamhost *sh;
@@ -269,7 +267,7 @@
 					js->bs_proxies = g_list_prepend(js->bs_proxies, sh);
 
 					iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-								 "http://jabber.org/protocol/bytestreams");
+							NS_BYTESTREAMS);
 					xmlnode_set_attrib(iq->node, "to", sh->jid);
 					jabber_iq_set_callback(iq, jabber_disco_bytestream_server_cb, sh);
 					jabber_iq_send(iq);
@@ -284,20 +282,20 @@
 					capabilities |= JABBER_CAP_SI;
 				else if(!strcmp(var, "http://jabber.org/protocol/si/profile/file-transfer"))
 					capabilities |= JABBER_CAP_SI_FILE_XFER;
-				else if(!strcmp(var, "http://jabber.org/protocol/bytestreams"))
+				else if(!strcmp(var, NS_BYTESTREAMS))
 					capabilities |= JABBER_CAP_BYTESTREAMS;
 				else if(!strcmp(var, "jabber:iq:search"))
 					capabilities |= JABBER_CAP_IQ_SEARCH;
 				else if(!strcmp(var, "jabber:iq:register"))
 					capabilities |= JABBER_CAP_IQ_REGISTER;
-				else if(!strcmp(var, "urn:xmpp:ping"))
+				else if(!strcmp(var, NS_PING))
 					capabilities |= JABBER_CAP_PING;
-				else if(!strcmp(var, "http://jabber.org/protocol/disco#items"))
+				else if(!strcmp(var, NS_DISCO_ITEMS))
 					capabilities |= JABBER_CAP_ITEMS;
 				else if(!strcmp(var, "http://jabber.org/protocol/commands")) {
 					capabilities |= JABBER_CAP_ADHOC;
 				}
-				else if(!strcmp(var, "http://jabber.org/protocol/ibb")) {
+				else if(!strcmp(var, NS_IBB)) {
 					purple_debug_info("jabber", "remote supports IBB\n");
 					capabilities |= JABBER_CAP_IBB;
 				}
@@ -341,7 +339,7 @@
 {
 	if(type == JABBER_IQ_GET) {
 		JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_RESULT,
-				"http://jabber.org/protocol/disco#items");
+				NS_DISCO_ITEMS);
 
 		/* preserve node */
 		xmlnode *iq_query = xmlnode_get_child(iq->node, "query");
@@ -409,8 +407,7 @@
 			sh->jid = g_strdup(ft_proxy_list[i]);
 			js->bs_proxies = g_list_prepend(js->bs_proxies, sh);
 
-			iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-						 "http://jabber.org/protocol/bytestreams");
+			iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_BYTESTREAMS);
 			xmlnode_set_attrib(iq->node, "to", sh->jid);
 			jabber_iq_set_callback(iq, jabber_disco_bytestream_server_cb, sh);
 			jabber_iq_send(iq);
@@ -555,7 +552,7 @@
 		if (!var)
 			continue;
 
-		if (!strcmp("google:mail:notify", var)) {
+		if (!strcmp(NS_GOOGLE_MAIL_NOTIFY, var)) {
 			js->server_caps |= JABBER_CAP_GMAIL_NOTIFY;
 			jabber_gmail_init(js);
 		} else if (!strcmp("google:roster", var)) {
@@ -563,7 +560,7 @@
 			jabber_google_roster_init(js);
 		} else if (!strcmp("http://jabber.org/protocol/commands", var)) {
 			js->server_caps |= JABBER_CAP_ADHOC;
-		} else if (!strcmp("urn:xmpp:blocking", var)) {
+		} else if (!strcmp(NS_SIMPLE_BLOCKING, var)) {
 			js->server_caps |= JABBER_CAP_BLOCKING;
 		}
 	}
@@ -604,7 +601,7 @@
 		if((node = xmlnode_get_attrib(child, "node")))
 			continue;
 
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info");
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 		xmlnode_set_attrib(iq->node, "to", jid);
 		jabber_iq_set_callback(iq, jabber_disco_info_cb, NULL);
 		jabber_iq_send(iq);
@@ -613,15 +610,14 @@
 
 void jabber_disco_items_server(JabberStream *js)
 {
-	JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-			"http://jabber.org/protocol/disco#items");
+	JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_ITEMS);
 
 	xmlnode_set_attrib(iq->node, "to", js->user->domain);
 
 	jabber_iq_set_callback(iq, jabber_disco_server_items_result_cb, NULL);
 	jabber_iq_send(iq);
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 	xmlnode_set_attrib(iq->node, "to", js->user->domain);
 	jabber_iq_set_callback(iq, jabber_disco_server_info_result_cb, NULL);
 	jabber_iq_send(iq);
@@ -650,7 +646,7 @@
 	jdicd->data = data;
 	jdicd->callback = callback;
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 	xmlnode_set_attrib(iq->node, "to", who);
 
 	jabber_iq_set_callback(iq, jabber_disco_info_cb, jdicd);
--- a/libpurple/protocols/jabber/google.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/google.c	Sun Nov 29 18:53:11 2009 +0000
@@ -37,9 +37,6 @@
 
 #ifdef USE_VV
 
-#define NS_GOOGLE_VIDEO "http://www.google.com/session/video"
-#define NS_GOOGLE_PHONE "http://www.google.com/session/phone"
-
 typedef struct {
 	char *id;
 	char *initiator;
@@ -86,7 +83,7 @@
 google_session_create_xmlnode(GoogleSession *session, const char *type)
 {
 	xmlnode *node = xmlnode_new("session");
-	xmlnode_set_namespace(node, "http://www.google.com/session");
+	xmlnode_set_namespace(node, NS_GOOGLE_SESSION);
 	xmlnode_set_attrib(node, "id", session->id.id);
 	xmlnode_set_attrib(node, "initiator", session->id.initiator);
 	xmlnode_set_attrib(node, "type", type);
@@ -215,9 +212,9 @@
 		xmlnode_insert_child(iq->node, sess);
 		desc = xmlnode_new_child(sess, "description");
 		if (session->video)
-			xmlnode_set_namespace(desc, NS_GOOGLE_VIDEO);
+			xmlnode_set_namespace(desc, NS_GOOGLE_SESSION_VIDEO);
 		else
-			xmlnode_set_namespace(desc, NS_GOOGLE_PHONE);
+			xmlnode_set_namespace(desc, NS_GOOGLE_SESSION_PHONE);
 
 		codecs = purple_media_get_codecs(media, "google-video");
 
@@ -250,7 +247,7 @@
 					purple_media_codec_get_clock_rate(codec));
 			payload = xmlnode_new_child(desc, "payload-type");
 			if (session->video)
-				xmlnode_set_namespace(payload, NS_GOOGLE_PHONE);
+				xmlnode_set_namespace(payload, NS_GOOGLE_SESSION_PHONE);
 			xmlnode_set_attrib(payload, "id", id);
 			/*
 			 * Hack to make Gmail accept speex as the codec.
@@ -613,7 +610,7 @@
 		id = xmlnode_get_attrib(codec_element, "id");
 
 		if (!session->video ||
-				(xmlns && !strcmp(xmlns, NS_GOOGLE_PHONE))) {
+				(xmlns && !strcmp(xmlns, NS_GOOGLE_SESSION_PHONE))) {
 			clock_rate = xmlnode_get_attrib(
 					codec_element, "clockrate");
 			video = FALSE;
@@ -790,7 +787,7 @@
 	GList *codecs = NULL, *video_codecs = NULL;
 	JabberIq *result = NULL;
 	const gchar *xmlns = xmlnode_get_namespace(desc_element);
-	gboolean video = (xmlns && !strcmp(xmlns, NS_GOOGLE_VIDEO));
+	gboolean video = (xmlns && !strcmp(xmlns, NS_GOOGLE_SESSION_VIDEO));
 
 	for (; codec_element; codec_element = codec_element->next) {
 		const gchar *xmlns, *encoding_name, *id,
@@ -804,7 +801,7 @@
 		encoding_name =	xmlnode_get_attrib(codec_element, "name");
 		id = xmlnode_get_attrib(codec_element, "id");
 
-		if (!video || purple_strequal(xmlns, NS_GOOGLE_PHONE))
+		if (!video || purple_strequal(xmlns, NS_GOOGLE_SESSION_PHONE))
 			clock_rate = xmlnode_get_attrib(
 					codec_element, "clockrate");
 		else {
@@ -1080,7 +1077,7 @@
 	purple_debug_misc("jabber",
 		   "Got new mail notification. Sending request for more info\n");
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "google:mail:notify");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_GOOGLE_MAIL_NOTIFY);
 	jabber_iq_set_callback(iq, jabber_gmail_parse, NULL);
 	query = xmlnode_get_child(iq->node, "query");
 
@@ -1114,7 +1111,7 @@
 	xmlnode_set_attrib(mailnotifications, "value", "true");
 	jabber_iq_send(iq);
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "google:mail:notify");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_GOOGLE_MAIL_NOTIFY);
 	jabber_iq_set_callback(iq, jabber_gmail_parse, NULL);
 	jabber_iq_send(iq);
 }
@@ -1584,7 +1581,7 @@
                              xmlnode *packet, gpointer data)
 {
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-			GOOGLE_JINGLE_INFO_NAMESPACE);
+			NS_GOOGLE_JINGLE_INFO);
 
 	if (query)
 		jabber_google_jingle_info_common(js, from, type, query);
@@ -1604,7 +1601,7 @@
 jabber_google_send_jingle_info(JabberStream *js)
 {
 	JabberIq *jingle_info =
-		jabber_iq_new_query(js, JABBER_IQ_GET, GOOGLE_JINGLE_INFO_NAMESPACE);
+		jabber_iq_new_query(js, JABBER_IQ_GET, NS_GOOGLE_JINGLE_INFO);
 
 	jabber_iq_set_callback(jingle_info, jabber_google_jingle_info_cb,
 		NULL);
--- a/libpurple/protocols/jabber/google.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/google.h	Sun Nov 29 18:53:11 2009 +0000
@@ -25,11 +25,6 @@
  * such that they don't intermingle with code for the XMPP RFCs and XEPs :) */
 
 #include "jabber.h"
-#include "media.h"
-
-#define GOOGLE_VOICE_CAP "http://www.google.com/xmpp/protocol/voice/v1"
-#define GOOGLE_VIDEO_CAP "http://www.google.com/xmpp/protocol/video/v1"
-#define GOOGLE_JINGLE_INFO_NAMESPACE "google:jingleinfo"
 
 #define GOOGLE_GROUPCHAT_SERVER "groupchat.google.com"
 
--- a/libpurple/protocols/jabber/ibb.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.c	Sun Nov 29 18:53:11 2009 +0000
@@ -228,7 +228,7 @@
 		gchar block_size[10];
 
 		xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
-		xmlnode_set_namespace(open, XEP_0047_NAMESPACE);
+		xmlnode_set_namespace(open, NS_IBB);
 		xmlnode_set_attrib(open, "sid", jabber_ibb_session_get_sid(sess));
 		g_snprintf(block_size, sizeof(block_size), "%" G_GSIZE_FORMAT,
 			jabber_ibb_session_get_block_size(sess));
@@ -256,7 +256,7 @@
 		xmlnode *close = xmlnode_new("close");
 
 		xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
-		xmlnode_set_namespace(close, XEP_0047_NAMESPACE);
+		xmlnode_set_namespace(close, NS_IBB);
 		xmlnode_set_attrib(close, "sid", jabber_ibb_session_get_sid(sess));
 		xmlnode_insert_child(set->node, close);
 		jabber_iq_send(set);
@@ -333,7 +333,7 @@
 		g_snprintf(seq, sizeof(seq), "%u", jabber_ibb_session_get_send_seq(sess));
 
 		xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
-		xmlnode_set_namespace(data_element, XEP_0047_NAMESPACE);
+		xmlnode_set_namespace(data_element, NS_IBB);
 		xmlnode_set_attrib(data_element, "sid", jabber_ibb_session_get_sid(sess));
 		xmlnode_set_attrib(data_element, "seq", seq);
 		xmlnode_insert_data(data_element, base64, -1);
@@ -361,8 +361,7 @@
 	xmlnode *error = xmlnode_new("error");
 	xmlnode *item_not_found = xmlnode_new("item-not-found");
 
-	xmlnode_set_namespace(item_not_found,
-		"urn:ietf:params:xml:ns:xmpp-stanzas");
+	xmlnode_set_namespace(item_not_found, NS_XMPP_STANZAS);
 	xmlnode_set_attrib(error, "code", "440");
 	xmlnode_set_attrib(error, "type", "cancel");
 	jabber_iq_set_id(result, id);
@@ -507,11 +506,11 @@
 {
 	jabber_ibb_sessions = g_hash_table_new(g_str_hash, g_str_equal);
 
-	jabber_add_feature(XEP_0047_NAMESPACE, NULL);
+	jabber_add_feature(NS_IBB, NULL);
 
-	jabber_iq_register_handler("close", XEP_0047_NAMESPACE, jabber_ibb_parse);
-	jabber_iq_register_handler("data", XEP_0047_NAMESPACE, jabber_ibb_parse);
-	jabber_iq_register_handler("open", XEP_0047_NAMESPACE, jabber_ibb_parse);
+	jabber_iq_register_handler("close", NS_IBB, jabber_ibb_parse);
+	jabber_iq_register_handler("data", NS_IBB, jabber_ibb_parse);
+	jabber_iq_register_handler("open", NS_IBB, jabber_ibb_parse);
 }
 
 void
--- a/libpurple/protocols/jabber/ibb.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.h	Sun Nov 29 18:53:11 2009 +0000
@@ -24,8 +24,6 @@
 #include "jabber.h"
 #include "iq.h"
 
-#define XEP_0047_NAMESPACE "http://jabber.org/protocol/ibb"
-
 typedef struct _JabberIBBSession JabberIBBSession;
 
 typedef void
--- a/libpurple/protocols/jabber/iq.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/iq.c	Sun Nov 29 18:53:11 2009 +0000
@@ -155,7 +155,7 @@
 	char *idle_time;
 
 	if(type == JABBER_IQ_GET) {
-		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, "jabber:iq:last");
+		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, NS_LAST_ACTIVITY);
 		jabber_iq_set_id(iq, id);
 		if (from)
 			xmlnode_set_attrib(iq->node, "to", from);
@@ -190,7 +190,7 @@
 			xmlnode_set_attrib(iq->node, "to", from);
 
 		child = xmlnode_new_child(iq->node, child->name);
-		xmlnode_set_namespace(child, "urn:xmpp:time");
+		xmlnode_set_namespace(child, NS_ENTITY_TIME);
 
 		/* <tzo>-06:00</tzo> */
 		tm = localtime(&now_t);
@@ -200,7 +200,7 @@
 
 		/* <utc>2006-12-19T17:58:35Z</utc> */
 		tm = gmtime(&now_t);
-		date = purple_utf8_strftime("%FT%TZ", tm);
+		date = purple_utf8_strftime("%Y-%m-%dT%H:%M:%SZ", tm);
 		utc = xmlnode_new_child(child, "utc");
 		xmlnode_insert_data(utc, date, -1);
 
@@ -332,7 +332,7 @@
 			error = xmlnode_new_child(iq->node, "error");
 			xmlnode_set_attrib(error, "type", "modify");
 			x = xmlnode_new_child(error, "bad-request");
-			xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+			xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 			jabber_iq_send(iq);
 		} else
@@ -397,7 +397,7 @@
 		xmlnode_set_attrib(error, "type", "cancel");
 		xmlnode_set_attrib(error, "code", "501");
 		x = xmlnode_new_child(error, "feature-not-implemented");
-		xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 		jabber_iq_send(iq);
 	}
@@ -458,21 +458,19 @@
 	signal_iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
 
 	jabber_iq_register_handler("jingle", JINGLE, jingle_parse);
-	jabber_iq_register_handler("mailbox", "google:mail:notify",
+	jabber_iq_register_handler("mailbox", NS_GOOGLE_MAIL_NOTIFY,
 			jabber_gmail_poke);
-	jabber_iq_register_handler("new-mail", "google:mail:notify",
+	jabber_iq_register_handler("new-mail", NS_GOOGLE_MAIL_NOTIFY,
 			jabber_gmail_poke);
-	jabber_iq_register_handler("ping", "urn:xmpp:ping", jabber_ping_parse);
-	jabber_iq_register_handler("query", GOOGLE_JINGLE_INFO_NAMESPACE,
+	jabber_iq_register_handler("ping", NS_PING, jabber_ping_parse);
+	jabber_iq_register_handler("query", NS_GOOGLE_JINGLE_INFO,
 			jabber_google_handle_jingle_info);
-	jabber_iq_register_handler("query", "http://jabber.org/protocol/bytestreams",
+	jabber_iq_register_handler("query", NS_BYTESTREAMS,
 			jabber_bytestreams_parse);
-	jabber_iq_register_handler("query", "http://jabber.org/protocol/disco#info",
-			jabber_disco_info_parse);
-	jabber_iq_register_handler("query", "http://jabber.org/protocol/disco#items",
-			jabber_disco_items_parse);
-	jabber_iq_register_handler("query", "jabber:iq:last", jabber_iq_last_parse);
-	jabber_iq_register_handler("query", "jabber:iq:oob", jabber_oob_parse);
+	jabber_iq_register_handler("query", NS_DISCO_INFO, jabber_disco_info_parse);
+	jabber_iq_register_handler("query", NS_DISCO_ITEMS, jabber_disco_items_parse);
+	jabber_iq_register_handler("query", NS_LAST_ACTIVITY, jabber_iq_last_parse);
+	jabber_iq_register_handler("query", NS_OOB_IQ_DATA, jabber_oob_parse);
 	jabber_iq_register_handler("query", "jabber:iq:register",
 			jabber_register_parse);
 	jabber_iq_register_handler("query", "jabber:iq:roster",
@@ -480,12 +478,12 @@
 	jabber_iq_register_handler("query", "jabber:iq:version",
 			jabber_iq_version_parse);
 #ifdef USE_VV
-	jabber_iq_register_handler("session", "http://www.google.com/session",
+	jabber_iq_register_handler("session", NS_GOOGLE_SESSION,
 		jabber_google_session_parse);
 #endif
-	jabber_iq_register_handler("block", "urn:xmpp:blocking", jabber_blocklist_parse_push);
-	jabber_iq_register_handler("unblock", "urn:xmpp:blocking", jabber_blocklist_parse_push);
-	jabber_iq_register_handler("time", "urn:xmpp:time", jabber_time_parse);
+	jabber_iq_register_handler("block", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push);
+	jabber_iq_register_handler("unblock", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push);
+	jabber_iq_register_handler("time", NS_ENTITY_TIME, jabber_time_parse);
 
 }
 
--- a/libpurple/protocols/jabber/jabber.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sun Nov 29 18:53:11 2009 +0000
@@ -81,8 +81,8 @@
 	char *open_stream;
 
 	open_stream = g_strdup_printf("<stream:stream to='%s' "
-				          "xmlns='jabber:client' "
-						  "xmlns:stream='http://etherx.jabber.org/streams' "
+				          "xmlns='" NS_XMPP_CLIENT "' "
+						  "xmlns:stream='" NS_XMPP_STREAMS "' "
 						  "version='1.0'>",
 						  js->user->domain);
 	/* setup the parser fresh for each stream */
@@ -116,7 +116,7 @@
 	jabber_iq_set_callback(iq, jabber_session_initialized_cb, NULL);
 
 	session = xmlnode_new_child(iq->node, "session");
-	xmlnode_set_namespace(session, "urn:ietf:params:xml:ns:xmpp-session");
+	xmlnode_set_namespace(session, NS_XMPP_SESSION);
 
 	jabber_iq_send(iq);
 }
@@ -128,7 +128,7 @@
 	xmlnode *bind;
 
 	if (type == JABBER_IQ_RESULT &&
-			(bind = xmlnode_get_child_with_namespace(packet, "bind", "urn:ietf:params:xml:ns:xmpp-bind"))) {
+			(bind = xmlnode_get_child_with_namespace(packet, "bind", NS_XMPP_BIND))) {
 		xmlnode *jid;
 		char *full_jid;
 		if((jid = xmlnode_get_child(bind, "jid")) && (full_jid = xmlnode_get_data(jid))) {
@@ -217,7 +217,7 @@
 		char *requested_resource;
 		JabberIq *iq = jabber_iq_new(js, JABBER_IQ_SET);
 		bind = xmlnode_new_child(iq->node, "bind");
-		xmlnode_set_namespace(bind, "urn:ietf:params:xml:ns:xmpp-bind");
+		xmlnode_set_namespace(bind, NS_XMPP_BIND);
 		requested_resource = jabber_prep_resource(js->user->resource);
 
 		if (requested_resource != NULL) {
@@ -272,11 +272,11 @@
 	} else if(!strcmp((*packet)->name, "stream:features")) {
 		jabber_stream_features_parse(js, *packet);
 	} else if (!strcmp((*packet)->name, "features") && xmlns &&
-		   !strcmp(xmlns, "http://etherx.jabber.org/streams")) {
+		   !strcmp(xmlns, NS_XMPP_STREAMS)) {
 		jabber_stream_features_parse(js, *packet);
 	} else if(!strcmp((*packet)->name, "stream:error") ||
 			 (!strcmp((*packet)->name, "error") && xmlns &&
-				!strcmp(xmlns, "http://etherx.jabber.org/streams")))
+				!strcmp(xmlns, NS_XMPP_STREAMS)))
 	{
 		jabber_stream_handle_error(js, *packet);
 	} else if(!strcmp((*packet)->name, "challenge")) {
@@ -385,7 +385,7 @@
 		if(js->state != JABBER_STREAM_CONNECTED &&
 				/* Either <auth> or <query><password>... */
 				(((tag_start = strstr(data, "<auth ")) &&
-					strstr(data, "xmlns='urn:ietf:params:xml:ns:xmpp-sasl'")) ||
+					strstr(data, "xmlns='" NS_XMPP_SASL "'")) ||
 				((tag_start = strstr(data, "<query ")) &&
 					strstr(data, "xmlns='jabber:iq:auth'>") &&
 					(tag_start = strstr(tag_start, "<password>"))))) {
@@ -476,12 +476,19 @@
 	if (NULL == packet)
 		return;
 
+	if (!PURPLE_CONNECTION_IS_VALID(pc))
+		return;
+
 	js = purple_connection_get_protocol_data(pc);
+
+	if (NULL == js)
+		return;
+
 	if (js->bosh)
 		if (g_str_equal((*packet)->name, "message") ||
 				g_str_equal((*packet)->name, "iq") ||
 				g_str_equal((*packet)->name, "presence"))
-			xmlnode_set_namespace(*packet, "jabber:client");
+			xmlnode_set_namespace(*packet, NS_XMPP_CLIENT);
 	txt = xmlnode_to_str(*packet, &len);
 	jabber_send_raw(js, txt, len);
 	g_free(txt);
@@ -1209,7 +1216,7 @@
 		jabber_x_data_request(js, x, jabber_register_x_data_cb, g_strdup(from));
 		return;
 
-	} else if((x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:oob"))) {
+	} else if((x = xmlnode_get_child_with_namespace(query, "x", NS_OOB_X_DATA))) {
 		xmlnode *url;
 
 		if((url = xmlnode_get_child(x, "url"))) {
@@ -1653,7 +1660,7 @@
 		error = xmlnode_new_child(result->node, "error");
 		xmlnode_set_attrib(error, "type", "cancel");
 		x = xmlnode_new_child(error, "not-allowed");
-		xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 		jabber_iq_send(result);
 		return;
@@ -1679,7 +1686,7 @@
 		error = xmlnode_new_child(result->node, "error");
 		xmlnode_set_attrib(error, "type", "modify");
 		x = xmlnode_new_child(error, "bad-request");
-		xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 		jabber_iq_send(result);
 		return;
@@ -1709,7 +1716,7 @@
 	PurpleAccount *account;
 
 	blocklist = xmlnode_get_child_with_namespace(packet,
-			"blocklist", "urn:xmpp:blocking");
+			"blocklist", NS_SIMPLE_BLOCKING);
 	account = purple_connection_get_account(js->gc);
 
 	if (type == JABBER_IQ_ERROR || blocklist == NULL)
@@ -1742,7 +1749,7 @@
 	iq = jabber_iq_new(js, JABBER_IQ_GET);
 
 	blocklist = xmlnode_new_child(iq->node, "blocklist");
-	xmlnode_set_namespace(blocklist, "urn:xmpp:blocking");
+	xmlnode_set_namespace(blocklist, NS_SIMPLE_BLOCKING);
 
 	jabber_iq_set_callback(iq, jabber_blocklist_parse, NULL);
 
@@ -1775,7 +1782,7 @@
 	iq = jabber_iq_new(js, JABBER_IQ_SET);
 
 	block = xmlnode_new_child(iq->node, "block");
-	xmlnode_set_namespace(block, "urn:xmpp:blocking");
+	xmlnode_set_namespace(block, NS_SIMPLE_BLOCKING);
 
 	item = xmlnode_new_child(block, "item");
 	xmlnode_set_attrib(item, "jid", who);
@@ -1805,7 +1812,7 @@
 	iq = jabber_iq_new(js, JABBER_IQ_SET);
 
 	unblock = xmlnode_new_child(iq->node, "unblock");
-	xmlnode_set_namespace(unblock, "urn:xmpp:blocking");
+	xmlnode_set_namespace(unblock, NS_SIMPLE_BLOCKING);
 
 	item = xmlnode_new_child(unblock, "item");
 	xmlnode_set_attrib(item, "jid", who);
@@ -2469,7 +2476,7 @@
 		} else if(xmlnode_get_child(error, "undefined-condition")) {
 			text = _("Unknown Error");
 		}
-	} else if(xmlns && !strcmp(xmlns, "urn:ietf:params:xml:ns:xmpp-sasl")) {
+	} else if(xmlns && !strcmp(xmlns, NS_XMPP_SASL)) {
 		/* Most common reason can be the default */
 		SET_REASON(PURPLE_CONNECTION_ERROR_NETWORK_ERROR);
 		if(xmlnode_get_child(packet, "aborted")) {
@@ -2497,7 +2504,7 @@
 		}
 	} else if(!strcmp(packet->name, "stream:error") ||
 			 (!strcmp(packet->name, "error") && xmlns &&
-				!strcmp(xmlns, "http://etherx.jabber.org/streams"))) {
+				!strcmp(xmlns, NS_XMPP_STREAMS))) {
 		/* Most common reason as default: */
 		SET_REASON(PURPLE_CONNECTION_ERROR_NETWORK_ERROR);
 		if(xmlnode_get_child(packet, "bad-format")) {
@@ -2853,7 +2860,7 @@
 		return FALSE;
 	}
 
-	if (jabber_resource_has_capability(jbr, XEP_0224_NAMESPACE)) {
+	if (jabber_resource_has_capability(jbr, NS_ATTENTION)) {
 		xmlnode *buzz, *msg = xmlnode_new("message");
 		gchar *to;
 
@@ -2865,7 +2872,7 @@
 		xmlnode_set_attrib(msg, "type", "headline");
 
 		buzz = xmlnode_new_child(msg, "attention");
-		xmlnode_set_namespace(buzz, XEP_0224_NAMESPACE);
+		xmlnode_set_namespace(buzz, NS_ATTENTION);
 
 		jabber_send(js, msg);
 		xmlnode_free(msg);
@@ -3203,10 +3210,9 @@
 				caps |= PURPLE_MEDIA_CAPS_MODIFY_SESSION |
 						PURPLE_MEDIA_CAPS_CHANGE_DIRECTION;
 		}
-		if (jabber_resource_has_capability(jbr, GOOGLE_VOICE_CAP)) {
+		if (jabber_resource_has_capability(jbr, NS_GOOGLE_VOICE)) {
 			caps |= PURPLE_MEDIA_CAPS_AUDIO;
-			if (jabber_resource_has_capability(jbr,
-					GOOGLE_VIDEO_CAP))
+			if (jabber_resource_has_capability(jbr, NS_GOOGLE_VIDEO))
 				caps |= PURPLE_MEDIA_CAPS_AUDIO_VIDEO;
 		}
 		return caps;
@@ -3283,9 +3289,8 @@
 				if (jabber_resource_has_capability(jbr,
 						"http://jabber.org/protocol/si/profile/file-transfer")
 			    	&& (jabber_resource_has_capability(jbr,
-			    			"http://jabber.org/protocol/bytestreams")
-			        	|| jabber_resource_has_capability(jbr,
-				           		XEP_0047_NAMESPACE))) {
+			    			NS_BYTESTREAMS)
+			        	|| jabber_resource_has_capability(jbr, NS_IBB))) {
 					return TRUE;
 				}
 			}
@@ -3496,38 +3501,38 @@
 	jabber_add_identity("client", type, NULL, ui_name);
 
 	/* initialize jabber_features list */
-	jabber_add_feature("jabber:iq:last", 0);
-	jabber_add_feature("jabber:iq:oob", 0);
-	jabber_add_feature("urn:xmpp:time", 0);
+	jabber_add_feature(NS_LAST_ACTIVITY, 0);
+	jabber_add_feature(NS_OOB_IQ_DATA, 0);
+	jabber_add_feature(NS_ENTITY_TIME, 0);
 	jabber_add_feature("jabber:iq:version", 0);
 	jabber_add_feature("jabber:x:conference", 0);
-	jabber_add_feature("http://jabber.org/protocol/bytestreams", 0);
+	jabber_add_feature(NS_BYTESTREAMS, 0);
 	jabber_add_feature("http://jabber.org/protocol/caps", 0);
 	jabber_add_feature("http://jabber.org/protocol/chatstates", 0);
-	jabber_add_feature("http://jabber.org/protocol/disco#info", 0);
-	jabber_add_feature("http://jabber.org/protocol/disco#items", 0);
-	jabber_add_feature("http://jabber.org/protocol/ibb", 0);
+	jabber_add_feature(NS_DISCO_INFO, 0);
+	jabber_add_feature(NS_DISCO_ITEMS, 0);
+	jabber_add_feature(NS_IBB, 0);
 	jabber_add_feature("http://jabber.org/protocol/muc", 0);
 	jabber_add_feature("http://jabber.org/protocol/muc#user", 0);
 	jabber_add_feature("http://jabber.org/protocol/si", 0);
 	jabber_add_feature("http://jabber.org/protocol/si/profile/file-transfer", 0);
-	jabber_add_feature("http://jabber.org/protocol/xhtml-im", 0);
-	jabber_add_feature("urn:xmpp:ping", 0);
+	jabber_add_feature(NS_XHTML_IM, 0);
+	jabber_add_feature(NS_PING, 0);
 
 	/* Buzz/Attention */
-	jabber_add_feature(XEP_0224_NAMESPACE, jabber_buzz_isenabled);
+	jabber_add_feature(NS_ATTENTION, jabber_buzz_isenabled);
 
 	/* Bits Of Binary */
-	jabber_add_feature(XEP_0231_NAMESPACE, 0);
+	jabber_add_feature(NS_BOB, 0);
 
 	/* Jingle features! */
 	jabber_add_feature(JINGLE, 0);
 
 #ifdef USE_VV
-	jabber_add_feature("http://www.google.com/xmpp/protocol/session", jabber_audio_enabled);
-	jabber_add_feature("http://www.google.com/xmpp/protocol/voice/v1", jabber_audio_enabled);
-	jabber_add_feature("http://www.google.com/xmpp/protocol/video/v1", jabber_video_enabled);
-	jabber_add_feature("http://www.google.com/xmpp/protocol/camera/v1", jabber_video_enabled);
+	jabber_add_feature(NS_GOOGLE_PROTOCOL_SESSION, jabber_audio_enabled);
+	jabber_add_feature(NS_GOOGLE_VOICE, jabber_audio_enabled);
+	jabber_add_feature(NS_GOOGLE_VIDEO, jabber_video_enabled);
+	jabber_add_feature(NS_GOOGLE_CAMERA, jabber_video_enabled);
 	jabber_add_feature(JINGLE_APP_RTP, 0);
 	jabber_add_feature(JINGLE_APP_RTP_SUPPORT_AUDIO, jabber_audio_enabled);
 	jabber_add_feature(JINGLE_APP_RTP_SUPPORT_VIDEO, jabber_video_enabled);
--- a/libpurple/protocols/jabber/jabber.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.h	Sun Nov 29 18:53:11 2009 +0000
@@ -64,6 +64,8 @@
 #include "roomlist.h"
 #include "sslconn.h"
 
+#include "namespaces.h"
+
 #include "iq.h"
 #include "jutil.h"
 #include "xmlnode.h"
--- a/libpurple/protocols/jabber/jingle/session.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/session.c	Sun Nov 29 18:53:11 2009 +0000
@@ -360,11 +360,15 @@
 JingleSession *
 jingle_session_find_by_sid(JabberStream *js, const gchar *sid)
 {
+	JingleSession *session = NULL;
+
+	if (js->sessions)
+		session = g_hash_table_lookup(js->sessions, sid);
+
 	purple_debug_info("jingle", "find_by_id %s\n", sid);
-	purple_debug_info("jingle", "lookup: %p\n", (js->sessions) ?
-			  g_hash_table_lookup(js->sessions, sid) : NULL);  
-	return (JingleSession *) (js->sessions) ?
-			  g_hash_table_lookup(js->sessions, sid) : NULL;
+	purple_debug_info("jingle", "lookup: %p\n", session);
+
+	return session;
 }
 
 #if GLIB_CHECK_VERSION(2,4,0)
--- a/libpurple/protocols/jabber/message.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/message.c	Sun Nov 29 18:53:11 2009 +0000
@@ -178,7 +178,7 @@
 	for(etc = jm->etc; etc; etc = etc->next) {
 		xmlnode *x = etc->data;
 		const char *xmlns = xmlnode_get_namespace(x);
-		if(xmlns && !strcmp(xmlns, "jabber:x:oob")) {
+		if(xmlns && !strcmp(xmlns, NS_OOB_X_DATA)) {
 			xmlnode *url, *desc;
 			char *urltxt, *desctxt;
 
@@ -460,7 +460,7 @@
 jabber_message_add_remote_smileys(const xmlnode *message)
 {
 	xmlnode *data_tag;
-	for (data_tag = xmlnode_get_child_with_namespace(message, "data", XEP_0231_NAMESPACE) ;
+	for (data_tag = xmlnode_get_child_with_namespace(message, "data", NS_BOB) ;
 		 data_tag ;
 		 data_tag = xmlnode_get_next_twin(data_tag)) {
 		const gchar *cid = xmlnode_get_attrib(data_tag, "cid");
@@ -611,22 +611,22 @@
 				jm->etc = g_list_append(jm->etc, child);
 			/* The following tests expect xmlns != NULL */
 			continue;
-		} else if(!strcmp(child->name, "subject") && !strcmp(xmlns,"jabber:client")) {
+		} else if(!strcmp(child->name, "subject") && !strcmp(xmlns, NS_XMPP_CLIENT)) {
 			if(!jm->subject) {
 				jm->subject = xmlnode_get_data(child);
 				if(!jm->subject)
 					jm->subject = g_strdup("");
 			}
-		} else if(!strcmp(child->name, "thread") && !strcmp(xmlns,"jabber:client")) {
+		} else if(!strcmp(child->name, "thread") && !strcmp(xmlns, NS_XMPP_CLIENT)) {
 			if(!jm->thread_id)
 				jm->thread_id = xmlnode_get_data(child);
-		} else if(!strcmp(child->name, "body") && !strcmp(xmlns,"jabber:client")) {
+		} else if(!strcmp(child->name, "body") && !strcmp(xmlns, NS_XMPP_CLIENT)) {
 			if(!jm->body) {
 				char *msg = xmlnode_to_str(child, NULL);
 				jm->body = purple_strdup_withhtml(msg);
 				g_free(msg);
 			}
-		} else if(!strcmp(child->name, "html") && !strcmp(xmlns,"http://jabber.org/protocol/xhtml-im")) {
+		} else if(!strcmp(child->name, "html") && !strcmp(xmlns, NS_XHTML_IM)) {
 			if(!jm->xhtml && xmlnode_get_child(child, "body")) {
 				char *c;
 
@@ -740,15 +740,15 @@
 			jm->type = JABBER_MESSAGE_EVENT;
 			for(items = xmlnode_get_child(child,"items"); items; items = items->next)
 				jm->eventitems = g_list_append(jm->eventitems, items);
-		} else if(!strcmp(child->name, "attention") && !strcmp(xmlns, XEP_0224_NAMESPACE)) {
+		} else if(!strcmp(child->name, "attention") && !strcmp(xmlns, NS_ATTENTION)) {
 			jm->hasBuzz = TRUE;
-		} else if(!strcmp(child->name, "delay") && !strcmp(xmlns,"urn:xmpp:delay")) {
+		} else if(!strcmp(child->name, "delay") && !strcmp(xmlns, NS_DELAYED_DELIVERY)) {
 			const char *timestamp = xmlnode_get_attrib(child, "stamp");
 			jm->delayed = TRUE;
 			if(timestamp)
 				jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
 		} else if(!strcmp(child->name, "x")) {
-			if(!strcmp(xmlns, "jabber:x:delay")) {
+			if(!strcmp(xmlns, NS_DELAYED_DELIVERY_LEGACY)) {
 				const char *timestamp = xmlnode_get_attrib(child, "stamp");
 				jm->delayed = TRUE;
 				if(timestamp)
@@ -800,7 +800,7 @@
 			}
 		} else if (g_str_equal(child->name, "query")) {
 			const char *node = xmlnode_get_attrib(child, "node");
-			if (purple_strequal(xmlns, "http://jabber.org/protocol/disco#items")
+			if (purple_strequal(xmlns, NS_DISCO_ITEMS)
 					&& purple_strequal(node, "http://jabber.org/protocol/commands")) {
 				jabber_adhoc_got_list(js, jm->from, child);
 			}
@@ -946,7 +946,7 @@
 		case PURPLE_CONV_TYPE_IM:
 			jb = jabber_buddy_find(js, who, FALSE);
 			if (jb) {
-				return jabber_buddy_has_capability(jb, XEP_0231_NAMESPACE);
+				return jabber_buddy_has_capability(jb, NS_BOB);
 			} else {
 				return FALSE;
 			}
@@ -958,7 +958,7 @@
 				 10 people, to avoid getting too many BoB requests */
 				return jabber_chat_get_num_participants(chat) <= 10 &&
 					jabber_chat_all_participants_have_capability(chat,
-						XEP_0231_NAMESPACE);
+						NS_BOB);
 			} else {
 				return FALSE;
 			}
@@ -1204,9 +1204,9 @@
 	 * the user's roster, allow sending XHTML-IM markup.
 	 */
 	if (!jbr || !jbr->caps.info ||
-			jabber_resource_has_capability(jbr, "http://jabber.org/protocol/xhtml-im")) {
+			jabber_resource_has_capability(jbr, NS_XHTML_IM)) {
 		if (!jabber_xhtml_plain_equal(xhtml, jm->body))
-			jm->xhtml = g_strdup_printf("<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>%s</body></html>", xhtml);
+			jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'>%s</body></html>", xhtml);
 	}
 
 	g_free(xhtml);
@@ -1249,7 +1249,7 @@
 	}
 
 	if (chat->xhtml && !jabber_xhtml_plain_equal(xhtml, jm->body))
-		jm->xhtml = g_strdup_printf("<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>%s</body></html>", xhtml);
+		jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'>%s</body></html>", xhtml);
 
 	g_free(xhtml);
 
--- a/libpurple/protocols/jabber/message.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/message.h	Sun Nov 29 18:53:11 2009 +0000
@@ -28,8 +28,6 @@
 #include "jabber.h"
 #include "xmlnode.h"
 
-#define XEP_0224_NAMESPACE "urn:xmpp:attention:0"
-
 typedef struct _JabberMessage {
 	JabberStream *js;
 	enum {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/jabber/namespaces.h	Sun Nov 29 18:53:11 2009 +0000
@@ -0,0 +1,101 @@
+/*
+ * purple - Jabber Protocol Plugin
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
+ */
+
+#ifndef PURPLE_JABBER_NAMESPACES_H_
+#define PURPLE_JABBER_NAMESPACES_H_
+
+#define NS_XMPP_BIND "urn:ietf:params:xml:ns:xmpp-bind"
+#define NS_XMPP_CLIENT "jabber:client"
+#define NS_XMPP_SASL "urn:ietf:params:xml:ns:xmpp-sasl"
+#define NS_XMPP_SESSION "urn:ietf:params:xml:ns:xmpp-session"
+#define NS_XMPP_STANZAS "urn:ietf:params:xml:ns:xmpp-stanzas"
+#define NS_XMPP_STREAMS "http://etherx.jabber.org/streams"
+
+/* XEP-0012 Last Activity (and XEP-0256 Last Activity in Presence) */
+#define NS_LAST_ACTIVITY "jabber:iq:last"
+
+/* XEP-0030 Service Discovery */
+#define NS_DISCO_INFO "http://jabber.org/protocol/disco#info"
+#define NS_DISCO_ITEMS "http://jabber.org/protocol/disco#items"
+
+/* XEP-0047 IBB (In-band bytestreams) */
+#define NS_IBB "http://jabber.org/protocol/ibb"
+
+/* XEP-0065 SOCKS5 Bytestreams */
+#define NS_BYTESTREAMS "http://jabber.org/protocol/bytestreams"
+
+/* XEP-0066 Out of Band Data (OOB) */
+#define NS_OOB_IQ_DATA "jabber:iq:oob"
+#define NS_OOB_X_DATA  "jabber:x:oob"
+
+/* XEP-0071 XHTML-IM (rich-text messages) */
+#define NS_XHTML_IM "http://jabber.org/protocol/xhtml-im"
+#define NS_XHTML "http://www.w3.org/1999/xhtml"
+
+/* XEP-0084 v0.12 User Avatar */
+#define NS_AVATAR_0_12_DATA     "http://www.xmpp.org/extensions/xep-0084.html#ns-data"
+#define NS_AVATAR_0_12_METADATA "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata"
+
+/* XEP-0084 v1.1 User Avatar */
+#define NS_AVATAR_1_1_DATA      "urn:xmpp:avatar:data"
+#define NS_AVATAR_1_1_METADATA  "urn:xmpp:avatar:metadata"
+
+/* XEP-0124 Bidirectional-streams Over Synchronous HTTP (BOSH) */
+#define NS_BOSH "http://jabber.org/protocol/httpbind"
+
+/* XEP-0191 Simple Communications Blocking */
+#define NS_SIMPLE_BLOCKING "urn:xmpp:blocking"
+
+/* XEP-0199 Ping */
+#define NS_PING "urn:xmpp:ping"
+
+/* XEP-0202 Entity Time */
+#define NS_ENTITY_TIME "urn:xmpp:time"
+
+/* XEP-0203 Delayed Delivery (and legacy delayed delivery) */
+#define NS_DELAYED_DELIVERY "urn:xmpp:delay"
+#define NS_DELAYED_DELIVERY_LEGACY "jabber:x:delay"
+
+/* XEP-0206 XMPP over BOSH */
+#define NS_XMPP_BOSH "urn:xmpp:xbosh"
+
+/* XEP-0224 Attention */
+#define NS_ATTENTION "urn:xmpp:attention:0"
+
+/* XEP-0231 BoB (Bits of Binary) */
+#define NS_BOB "urn:xmpp:bob"
+
+/* Google extensions */
+#define NS_GOOGLE_CAMERA "http://www.google.com/xmpp/protocol/camera/v1"
+#define NS_GOOGLE_VIDEO "http://www.google.com/xmpp/protocol/video/v1"
+#define NS_GOOGLE_VOICE "http://www.google.com/xmpp/protocol/voice/v1"
+#define NS_GOOGLE_JINGLE_INFO "google:jingleinfo"
+
+#define NS_GOOGLE_MAIL_NOTIFY "google:mail:notify"
+
+#define NS_GOOGLE_PROTOCOL_SESSION "http://www.google.com/xmpp/protocol/session"
+#define NS_GOOGLE_SESSION "http://www.google.com/session"
+#define NS_GOOGLE_SESSION_PHONE "http://www.google.com/session/phone"
+#define NS_GOOGLE_SESSION_VIDEO "http://www.google.com/session/video"
+
+#endif /* PURPLE_JABBER_NAMESPACES_H_ */
--- a/libpurple/protocols/jabber/oob.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/oob.c	Sun Nov 29 18:53:11 2009 +0000
@@ -170,11 +170,11 @@
 	if(!strcmp(code, "406")) {
 		z = xmlnode_new_child(y, "not-acceptable");
 		xmlnode_set_attrib(y, "type", "modify");
-		xmlnode_set_namespace(z, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(z, NS_XMPP_STANZAS);
 	} else if(!strcmp(code, "404")) {
 		z = xmlnode_new_child(y, "not-found");
 		xmlnode_set_attrib(y, "type", "cancel");
-		xmlnode_set_namespace(z, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(z, NS_XMPP_STANZAS);
 	}
 	jabber_iq_send(iq);
 
--- a/libpurple/protocols/jabber/parser.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/parser.c	Sun Nov 29 18:53:11 2009 +0000
@@ -152,6 +152,15 @@
 		 */
 		return;
 
+	if (error->level == XML_ERR_FATAL && error->message != NULL
+			&& strcmp(error->message, "Extra content at the end of the document\n") == 0)
+		/*
+		 * This is probably more annoying than the vcard-temp error; it occurs
+		 * because we disconnect in most cases without waiting for the receiving
+		 * </stream:stream> (limitations of libpurple)
+		 */
+		return;
+
 	purple_debug_error("jabber", "XML parser error for JabberStream %p: "
 								 "Domain %i, code %i, level %i: %s",
 					   js,
--- a/libpurple/protocols/jabber/ping.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/ping.c	Sun Nov 29 18:53:11 2009 +0000
@@ -74,7 +74,7 @@
 
 	iq = jabber_iq_new(js, JABBER_IQ_GET);
 	ping = xmlnode_new_child(iq->node, "ping");
-	xmlnode_set_namespace(ping, "urn:xmpp:ping");
+	xmlnode_set_namespace(ping, NS_PING);
 
 	jabber_iq_set_callback(iq, jabber_keepalive_pong_cb, NULL);
 	jabber_iq_send(iq);
@@ -90,7 +90,7 @@
 		xmlnode_set_attrib(iq->node, "to", jid);
 
 	ping = xmlnode_new_child(iq->node, "ping");
-	xmlnode_set_namespace(ping, "urn:xmpp:ping");
+	xmlnode_set_namespace(ping, NS_PING);
 
 	jabber_iq_set_callback(iq, jabber_ping_result_cb, NULL);
 	jabber_iq_send(iq);
--- a/libpurple/protocols/jabber/presence.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sun Nov 29 18:53:11 2009 +0000
@@ -297,7 +297,7 @@
 		gchar seconds[10];
 		g_snprintf(seconds, 10, "%d", (int) (time(NULL) - js->idle));
 
-		xmlnode_set_namespace(query, "jabber:iq:last");
+		xmlnode_set_namespace(query, NS_LAST_ACTIVITY);
 		xmlnode_set_attrib(query, "seconds", seconds);
 	}
 
@@ -462,8 +462,8 @@
 		goto out;
 
 	if (!jbr->commands_fetched && jabber_resource_has_capability(jbr, "http://jabber.org/protocol/commands")) {
-		JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
-		xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", "http://jabber.org/protocol/disco#items");
+		JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, NS_DISCO_ITEMS);
+		xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", NS_DISCO_ITEMS);
 		xmlnode_set_attrib(iq->node, "to", userdata->from);
 		xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands");
 		jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL);
@@ -633,7 +633,7 @@
 		} else if(xmlns == NULL) {
 			/* The rest of the cases used to check xmlns individually. */
 			continue;
-		} else if(!strcmp(y->name, "delay") && !strcmp(xmlns, "urn:xmpp:delay")) {
+		} else if(!strcmp(y->name, "delay") && !strcmp(xmlns, NS_DELAYED_DELIVERY)) {
 			/* XXX: compare the time.  jabber:x:delay can happen on presence packets that aren't really and truly delayed */
 			delayed = TRUE;
 			stamp = xmlnode_get_attrib(y, "stamp");
@@ -642,7 +642,7 @@
 		} else if (g_str_equal(y->name, "nick") && g_str_equal(xmlns, "http://jabber.org/protocol/nick")) {
 			nickname = xmlnode_get_data(y);
 		} else if(!strcmp(y->name, "x")) {
-			if(!strcmp(xmlns, "jabber:x:delay")) {
+			if(!strcmp(xmlns, NS_DELAYED_DELIVERY_LEGACY)) {
 				/* XXX: compare the time.  jabber:x:delay can happen on presence packets that aren't really and truly delayed */
 				delayed = TRUE;
 				stamp = xmlnode_get_attrib(y, "stamp");
@@ -655,7 +655,7 @@
 				}
 			}
 		} else if (!strcmp(y->name, "query") &&
-			!strcmp(xmlnode_get_namespace(y), "jabber:iq:last")) {
+			!strcmp(xmlnode_get_namespace(y), NS_LAST_ACTIVITY)) {
 			/* resource has specified idle */
 			const gchar *seconds = xmlnode_get_attrib(y, "seconds");
 			if (seconds) {
@@ -957,7 +957,7 @@
 		buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "",
 									 jid->node ? "@" : "", jid->domain);
 		if((b = purple_find_buddy(js->gc->account, buddy_name)) == NULL) {
-			if(!jid->node || strcmp(jid->node,js->user->node) || strcmp(jid->domain,js->user->domain)) {
+			if (jb != js->user_jb) {
 				purple_debug_warning("jabber", "Got presence for unknown buddy %s on account %s (%p)\n",
 									 buddy_name, purple_account_get_username(js->gc->account), js->gc->account);
 				jabber_id_free(jid);
--- a/libpurple/protocols/jabber/si.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/si.c	Sun Nov 29 18:53:11 2009 +0000
@@ -144,7 +144,7 @@
 	if(xfer->type == PURPLE_XFER_SEND)
 	{
 		xmlnode *activate;
-		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, "http://jabber.org/protocol/bytestreams");
+		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS);
 		xmlnode_set_attrib(iq->node, "to", streamhost->jid);
 		query = xmlnode_get_child(iq->node, "query");
 		xmlnode_set_attrib(query, "sid", jsx->stream_id);
@@ -155,7 +155,7 @@
 	}
 	else
 	{
-		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_RESULT, "http://jabber.org/protocol/bytestreams");
+		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_RESULT, NS_BYTESTREAMS);
 		xmlnode_set_attrib(iq->node, "to", xfer->who);
 		jabber_iq_set_id(iq, jsx->iq_id);
 		query = xmlnode_get_child(iq->node, "query");
@@ -232,7 +232,7 @@
 		xmlnode_set_attrib(error, "code", "404");
 		xmlnode_set_attrib(error, "type", "cancel");
 		inf = xmlnode_new_child(error, "item-not-found");
-		xmlnode_set_namespace(inf, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(inf, NS_XMPP_STANZAS);
 
 		jabber_iq_send(iq);
 
@@ -843,8 +843,7 @@
 
 	purple_xfer_unref(xfer);
 
-	iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET,
-			"http://jabber.org/protocol/bytestreams");
+	iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS);
 	xmlnode_set_attrib(iq->node, "to", xfer->who);
 	query = xmlnode_get_child(iq->node, "query");
 
@@ -1206,11 +1205,11 @@
 		if(var && !strcmp(var, "stream-method")) {
 			if((value = xmlnode_get_child(field, "value"))) {
 				char *val = xmlnode_get_data(value);
-				if(val && !strcmp(val, "http://jabber.org/protocol/bytestreams")) {
+				if(val && !strcmp(val, NS_BYTESTREAMS)) {
 					jabber_si_xfer_bytestreams_send_init(xfer);
 					jsx->stream_method |= STREAM_METHOD_BYTESTREAMS;
 					found_method = TRUE;
-				} else if (val && !strcmp(val, XEP_0047_NAMESPACE)) {
+				} else if (val && !strcmp(val, NS_IBB)) {
 					jsx->stream_method |= STREAM_METHOD_IBB;
 					if (!found_method) {
 						/* we haven't tried to init a bytestream session, yet
@@ -1268,10 +1267,10 @@
 		behind troublesome firewalls */
 	option = xmlnode_new_child(field, "option");
 	value = xmlnode_new_child(option, "value");
-	xmlnode_insert_data(value, "http://jabber.org/protocol/bytestreams", -1);
+	xmlnode_insert_data(value, NS_BYTESTREAMS, -1);
 	option = xmlnode_new_child(field, "option");
 	value = xmlnode_new_child(option, "value");
-	xmlnode_insert_data(value, "http://jabber.org/protocol/ibb", -1);
+	xmlnode_insert_data(value, NS_IBB, -1);
 
 	jabber_iq_set_callback(iq, jabber_si_xfer_send_method_cb, xfer);
 
@@ -1372,9 +1371,9 @@
 		error = xmlnode_new_child(iq->node, "error");
 		xmlnode_set_attrib(error, "type", "cancel");
 		child = xmlnode_new_child(error, "forbidden");
-		xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(child, NS_XMPP_STANZAS);
 		child = xmlnode_new_child(error, "text");
-		xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(child, NS_XMPP_STANZAS);
 		xmlnode_insert_data(child, "Offer Declined", -1);
 
 		jabber_iq_send(iq);
@@ -1452,7 +1451,7 @@
 	if (jbr) {
 		char *msg;
 
-		if (jabber_resource_has_capability(jbr, XEP_0047_NAMESPACE))
+		if (jabber_resource_has_capability(jbr, NS_IBB))
 			jsx->stream_method |= STREAM_METHOD_IBB;
 		if (jabber_resource_has_capability(jbr, "http://jabber.org/protocol/si/profile/file-transfer")) {
 			jabber_si_xfer_send_request(xfer);
@@ -1580,10 +1579,10 @@
 			for people who know their firewalls are very restrictive */
 		if (jsx->stream_method & STREAM_METHOD_BYTESTREAMS) {
 			value = xmlnode_new_child(field, "value");
-			xmlnode_insert_data(value, "http://jabber.org/protocol/bytestreams", -1);
+			xmlnode_insert_data(value, NS_BYTESTREAMS, -1);
 		} else if(jsx->stream_method & STREAM_METHOD_IBB) {
 			value = xmlnode_new_child(field, "value");
-			xmlnode_insert_data(value, "http://jabber.org/protocol/ibb", -1);
+			xmlnode_insert_data(value, NS_IBB, -1);
 		}
 
 		jabber_iq_send(iq);
@@ -1687,9 +1686,9 @@
 				if((value = xmlnode_get_child(option, "value"))) {
 					char *val;
 					if((val = xmlnode_get_data(value))) {
-						if(!strcmp(val, "http://jabber.org/protocol/bytestreams")) {
+						if(!strcmp(val, NS_BYTESTREAMS)) {
 							jsx->stream_method |= STREAM_METHOD_BYTESTREAMS;
-						} else if(!strcmp(val, "http://jabber.org/protocol/ibb")) {
+						} else if(!strcmp(val, NS_IBB)) {
 							jsx->stream_method |= STREAM_METHOD_IBB;
 						}
 						g_free(val);
--- a/libpurple/protocols/jabber/useravatar.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/jabber/useravatar.h	Sun Nov 29 18:53:11 2009 +0000
@@ -29,12 +29,6 @@
 
 /* Implementation of XEP-0084 */
 
-#define NS_AVATAR_0_12_DATA     "http://www.xmpp.org/extensions/xep-0084.html#ns-data"
-#define NS_AVATAR_0_12_METADATA "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata"
-
-#define NS_AVATAR_1_1_DATA      "urn:xmpp:avatar:data"
-#define NS_AVATAR_1_1_METADATA  "urn:xmpp:avatar:metadata"
-
 void jabber_avatar_init(void);
 void jabber_avatar_set(JabberStream *js, PurpleStoredImage *img);
 
--- a/libpurple/protocols/msn/contact.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/msn/contact.c	Sun Nov 29 18:53:11 2009 +0000
@@ -702,12 +702,15 @@
 		type = xmlnode_get_data(contactType);
 
 		/*setup the Display Name*/
-		if (type && !strcmp(type, "Me")){
-			char *friendly = NULL;
-			if ((displayName = xmlnode_get_child(contactInfo, "displayName")))
-				friendly = xmlnode_get_data(displayName);
-			purple_connection_set_display_name(session->account->gc, friendly ? purple_url_decode(friendly) : NULL);
-			g_free(friendly);
+		if (type && !strcmp(type, "Me")) {
+			if (purple_connection_get_display_name(pc) == NULL) {
+				char *friendly = NULL;
+				if ((displayName = xmlnode_get_child(contactInfo, "displayName")))
+					friendly = xmlnode_get_data(displayName);
+				purple_connection_set_display_name(pc,
+					friendly ? purple_url_decode(friendly) : NULL);
+				g_free(friendly);
+			}
 			continue; /* Not adding own account as buddy to buddylist */
 		}
 
--- a/libpurple/protocols/msn/msn.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/msn/msn.c	Sun Nov 29 18:53:11 2009 +0000
@@ -23,8 +23,6 @@
  */
 #define PHOTO_SUPPORT 1
 
-#include <glib.h>
-
 #include "msn.h"
 #include "accountopt.h"
 #include "contact.h"
@@ -1064,6 +1062,9 @@
 	if (strcmp(username, purple_account_get_username(account)))
 		purple_account_set_username(account, username);
 
+	username = purple_account_get_string(account, "display-name", NULL);
+	purple_connection_set_display_name(gc, username);
+
 	if (!msn_session_connect(session, host, port, http_method))
 		purple_connection_error_reason(gc,
 			PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
--- a/libpurple/protocols/msn/notification.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/msn/notification.c	Sun Nov 29 18:53:11 2009 +0000
@@ -1408,6 +1408,7 @@
 				purple_connection_set_display_name(
 					purple_account_get_connection(session->account),
 					friendlyname);
+				purple_account_set_string(session->account, "display-name", friendlyname);
 			}
 		}
 	}
--- a/libpurple/protocols/msn/object.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/msn/object.c	Sun Nov 29 18:53:11 2009 +0000
@@ -21,6 +21,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
+
+#include "msn.h"
 #include "object.h"
 #include "debug.h"
 /* Sha1 stuff */
--- a/libpurple/protocols/mxit/chunk.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/chunk.c	Sun Nov 29 18:53:11 2009 +0000
@@ -576,18 +576,17 @@
 
 	/* parse the resource chunks */
 	while ( chunklen > 0 ) {
-		struct raw_chunk* chunkhdr = ( struct raw_chunk * ) &chunkdata[pos];
-		chunkhdr->length = ntohl( chunkhdr->length );		/* host byte-order */
+		gchar* chunk = &chunkdata[pos];
 
 		/* start of chunk data */
-		pos += sizeof( struct raw_chunk );
+		pos += MXIT_CHUNK_HEADER_SIZE;
 
-		switch ( chunkhdr->type ) {
+		switch ( chunk_type( chunk ) ) {
 			case CP_CHUNK_SPLASH :			/* splash image */
 				{
 					struct splash_chunk* splash = g_new0( struct splash_chunk, 1 );
 
-					mxit_chunk_parse_splash( &chunkdata[pos], chunkhdr->length, splash );
+					mxit_chunk_parse_splash( &chunkdata[pos], chunk_length( chunk ), splash );
 
 					cr->resources = g_list_append( cr->resources, splash );
 					break;
@@ -600,12 +599,12 @@
 					break;
 				}
 			default:
-				purple_debug_info( MXIT_PLUGIN_ID, "Unsupported custom resource chunk received (%i)\n", chunkhdr->type );
+				purple_debug_info( MXIT_PLUGIN_ID, "Unsupported custom resource chunk received (%i)\n", chunk_type( chunk) );
 		}
 
 		/* skip over data to next resource chunk */
-		pos += chunkhdr->length;
-		chunklen -= ( sizeof( struct raw_chunk ) + chunkhdr->length );
+		pos += chunk_length( chunk );
+		chunklen -= ( MXIT_CHUNK_HEADER_SIZE + chunk_length( chunk ) );
 	}
 }
 
--- a/libpurple/protocols/mxit/chunk.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/chunk.h	Sun Nov 29 18:53:11 2009 +0000
@@ -31,6 +31,8 @@
 
 
 #define		MXIT_CHUNK_FILEID_LEN		8			/* bytes */
+#define		MXIT_CHUNK_HEADER_SIZE		5			/* type (1 byte) + length (4 bytes) */
+
 
 /* Multimedia chunk types */
 #define		CP_CHUNK_NONE				0x00		/* (0) no chunk */
@@ -68,13 +70,35 @@
 #define		REJECT_BAD_RECIPIENT		4
 
 /*
- * a Chunk header
+ * Chunk header manipulation functions
  */
-struct raw_chunk {
-	guint8		type;
-	guint32		length;
-	gchar		data[0];
-} __attribute__ ((packed));
+static inline guint chunk_type( gchar* chunkheader )
+{
+	return *chunkheader;
+}
+
+static inline void set_chunk_type( gchar* chunkheader, guint type )
+{
+	*chunkheader = type;
+}
+
+static inline guint32 chunk_length( gchar* chunkheader )
+{
+	guint32 length = *( (const guint32*) &chunkheader[1] );
+	return htonl( length );
+}
+
+static inline void set_chunk_length( gchar* chunkheader, guint32 size )
+{
+	size = htonl( size );
+	memcpy( &chunkheader[1], &size, sizeof( guint32 ) );
+}
+
+static inline gchar* chunk_data( gchar* chunkheader )
+{
+	return &chunkheader[MXIT_CHUNK_HEADER_SIZE];
+}
+
 
 struct offerfile_chunk {
 	char	fileid[MXIT_CHUNK_FILEID_LEN];
--- a/libpurple/protocols/mxit/formcmds.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/formcmds.c	Sun Nov 29 18:53:11 2009 +0000
@@ -239,12 +239,10 @@
 	replymsg = g_hash_table_lookup(hash, "replymsg");		/* find the reply message */
 	if ((selmsg) && (replymsg)) {
 		gchar*	seltext = g_markup_escape_text(purple_url_decode(selmsg), -1);
-		gchar*	replytext = g_markup_escape_text(purple_url_decode(replymsg), -1);
 
-		mxit_add_html_link( mx, replytext, seltext );
+		mxit_add_html_link( mx, purple_url_decode(replymsg), seltext );
 
 		g_free(seltext);
-		g_free(replytext);
 	}
 }
 
@@ -345,7 +343,6 @@
  *  @param message			The message text
  *  @return					The length of the command
  */
-//void mxit_command_received(struct MXitSession* session, const char* from, char* message, time_t timestamp)
 int mxit_parse_command(struct RXMsgData* mx, char* message)
 {
 	GHashTable* hash	= NULL;
--- a/libpurple/protocols/mxit/markup.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/markup.c	Sun Nov 29 18:53:11 2009 +0000
@@ -416,7 +416,6 @@
 	}
 	else if ( mx->chatid < 0 ) {
 		/* normal chat message */
-		//serv_got_im( mx->session->con, mx->from, mx->msg->str, mx->flags, mx->timestamp );
 		mxit_show_split_message( mx );
 	}
 	else {
--- a/libpurple/protocols/mxit/mxit.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/mxit.c	Sun Nov 29 18:53:11 2009 +0000
@@ -689,9 +689,6 @@
 
 	option = purple_account_option_bool_new( _( "Enable splash-screen popup" ), MXIT_CONFIG_SPLASHPOPUP, FALSE );
 	proto_info.protocol_options = g_list_append( proto_info.protocol_options, option );
-
-	if ( sizeof( struct raw_chunk ) != 5 )
-		g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "sizeof(struct raw_chunk) != 5!  MXit probably won't work!\n");
 }
 
 PURPLE_INIT_PLUGIN( mxit, init_plugin, plugin_info );
--- a/libpurple/protocols/mxit/mxit.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/mxit.h	Sun Nov 29 18:53:11 2009 +0000
@@ -61,7 +61,7 @@
 /* Plugin details */
 #define		MXIT_PLUGIN_ID				"prpl-loubserp-mxit"
 #define		MXIT_PLUGIN_NAME			"MXit"
-#define		MXIT_PLUGIN_VERSION			"2.2.0"
+#define		MXIT_PLUGIN_VERSION			"2.3.0"
 #define		MXIT_PLUGIN_EMAIL			"Pieter Loubser <libpurple@mxit.com>"
 #define		MXIT_PLUGIN_WWW				"http://www.mxit.com"
 #define		MXIT_PLUGIN_SUMMARY			"MXit Protocol Plugin"
--- a/libpurple/protocols/mxit/protocol.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/protocol.c	Sun Nov 29 18:53:11 2009 +0000
@@ -1035,7 +1035,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "SENDING FILE '%s' of %i bytes to user '%s'\n", filename, buflen, username );
@@ -1044,17 +1044,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_senddirect( chunk->data, username, filename, buf, buflen );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_senddirect( chunk_data( chunk ), username, filename, buf, buflen );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating senddirect chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_DIRECT_SND;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_DIRECT_SND );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1071,7 +1071,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_reject\n" );
@@ -1080,17 +1080,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_reject( chunk->data, fileid );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_reject( chunk_data( chunk ), fileid );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating reject chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_REJECT;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_REJECT );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1109,7 +1109,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_accept\n" );
@@ -1118,17 +1118,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_get( chunk->data, fileid, filesize, offset );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_get( chunk_data(chunk), fileid, filesize, offset );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating getfile chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_GET;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_GET );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1145,7 +1145,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_received\n" );
@@ -1154,17 +1154,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_received( chunk->data, fileid, status );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_received( chunk_data(chunk), fileid, status );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating received chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_RECIEVED;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_RECIEVED );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1182,7 +1182,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_set_avatar: %i bytes\n", avatarlen );
@@ -1191,17 +1191,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_set_avatar( chunk->data, avatar, avatarlen );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_set_avatar( chunk_data(chunk), avatar, avatarlen );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating set avatar chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_SET_AVATAR;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_SET_AVATAR );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1221,7 +1221,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_get_avatar: %s\n", mxitId );
@@ -1230,17 +1230,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_get_avatar( chunk->data, mxitId, avatarId, MXIT_AVATAR_SIZE );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_get_avatar( chunk_data(chunk), mxitId, avatarId, MXIT_AVATAR_SIZE );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating get avatar chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_GET_AVATAR;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_GET_AVATAR );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
--- a/libpurple/protocols/mxit/roster.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/roster.c	Sun Nov 29 18:53:11 2009 +0000
@@ -53,11 +53,11 @@
 	const char*				name;
 } const mxit_statuses[] = {
 		/*	primative,						no,							id,			name					*/
-		{	PURPLE_STATUS_OFFLINE,			MXIT_PRESENCE_OFFLINE,		"offline",	NULL				},	/* 0 */
-		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_ONLINE,		"online",	NULL				},	/* 1 */
-		{	PURPLE_STATUS_AWAY,				MXIT_PRESENCE_AWAY,			"away",		NULL				},	/* 2 */
-		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_AVAILABLE,	"chat",		N_( "Chatty" )		},	/* 3 */
-		{	PURPLE_STATUS_UNAVAILABLE,		MXIT_PRESENCE_DND,			"dnd",		NULL				}	/* 4 */
+		{	PURPLE_STATUS_OFFLINE,			MXIT_PRESENCE_OFFLINE,		"offline",	N_( "Offline" )			},	/* 0 */
+		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_ONLINE,		"online",	N_( "Available" )		},	/* 1 */
+		{	PURPLE_STATUS_AWAY,				MXIT_PRESENCE_AWAY,			"away",		N_( "Away" )			},	/* 2 */
+		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_AVAILABLE,	"chat",		N_( "Chatty" )			},	/* 3 */
+		{	PURPLE_STATUS_UNAVAILABLE,		MXIT_PRESENCE_DND,			"dnd",		N_( "Do Not Disturb" )	}	/* 4 */
 };
 
 
@@ -398,7 +398,7 @@
 		contact->statusMsg = NULL;
 	}
 	if ( statusMsg[0] != '\0' )
-		contact->statusMsg = g_strdup( statusMsg );	
+		contact->statusMsg = g_markup_escape_text( statusMsg, -1 );
 
 	/* update avatarId */
 	if ( ( contact->avatarId ) && ( g_ascii_strcasecmp( contact->avatarId, avatarId ) == 0 ) ) {
--- a/libpurple/protocols/mxit/splashscreen.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/mxit/splashscreen.c	Sun Nov 29 18:53:11 2009 +0000
@@ -43,10 +43,10 @@
 {
 	const char* splashId = purple_account_get_string(session->acc, MXIT_CONFIG_SPLASHID, NULL);
 
-	purple_debug_info(MXIT_PLUGIN_ID, "Current splashId: '%s'\n", splashId);
-
-	if ((splashId != NULL) && (*splashId != '\0'))
+	if ((splashId != NULL) && (*splashId != '\0')) {
+		purple_debug_info(MXIT_PLUGIN_ID, "Current splashId: '%s'\n", splashId);
 		return splashId;
+	}
 	else
 		return NULL;
 }
@@ -149,7 +149,7 @@
 
 	/* Get current splash ID */
 	splashId = splash_current(session);
-	if (!splashId)
+	if (splashId == NULL)		/* no splash-screen */
 		return;
 
 	/* if is clickable, then send click event */
--- a/libpurple/protocols/myspace/myspace.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/myspace/myspace.h	Sun Nov 29 18:53:11 2009 +0000
@@ -20,6 +20,8 @@
 #ifndef _MYSPACE_MYSPACE_H
 #define _MYSPACE_MYSPACE_H
 
+#include "internal.h"
+
 /* Other includes */
 #include <string.h>
 #include <errno.h>/* for EAGAIN */
@@ -36,8 +38,6 @@
 #include <sys/socket.h>
 #endif
 
-#include "internal.h"
-
 #include "notify.h"
 #include "plugin.h"
 #include "accountopt.h"
--- a/libpurple/protocols/novell/nmuser.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/novell/nmuser.c	Sun Nov 29 18:53:11 2009 +0000
@@ -18,9 +18,8 @@
  *
  */
 
-#include <glib.h>
+#include "internal.h"
 #include <string.h>
-#include "internal.h"
 #include "nmfield.h"
 #include "nmuser.h"
 #include "nmconn.h"
--- a/libpurple/protocols/oscar/oscar.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sun Nov 29 18:53:11 2009 +0000
@@ -2461,42 +2461,81 @@
 	 */
 	if (purple_markup_find_tag("body", tmp, &start, &end, &attribs))
 	{
+		int len;
+		char *tmp2, *body;
 		const char *ichattextcolor, *ichatballooncolor;
-		const char *start2, *end2;
+		const char *slash_body_start, *slash_body_end = NULL; /* </body> */
 		GData *unused;
 
 		/*
 		 * Find the ending </body> so we can strip off the outer <html/>
 		 * and <body/>
 		 */
-		if (purple_markup_find_tag("/body", end + 1, &start2, &end2, &unused))
+		if (purple_markup_find_tag("/body", end + 1, &slash_body_start, &slash_body_end, &unused))
 		{
-			gchar *tmp2;
-			tmp2 = g_strndup(end + 1, (start2 - 1) - (end + 1) + 1);
-			g_free(tmp);
-			tmp = tmp2;
+			body = g_strndup(start, slash_body_end - start + 1);
 			g_datalist_clear(&unused);
 		}
+		else
+		{
+			purple_debug_warning("oscar", "Broken message contains <body> but not </body>!\n");
+			/* Take everything after <body> */
+			body = g_strdup(start);
+		}
 
 		ichattextcolor = g_datalist_get_data(&attribs, "ichattextcolor");
 		if (ichattextcolor != NULL)
 		{
-			gchar *tmp2;
-			tmp2 = g_strdup_printf("<font color=\"%s\">%s</font>", ichattextcolor, tmp);
-			g_free(tmp);
-			tmp = tmp2;
+			tmp2 = g_strdup_printf("<font color=\"%s\">%s</font>", ichattextcolor, body);
+			g_free(body);
+			body = tmp2;
 		}
 
 		ichatballooncolor = g_datalist_get_data(&attribs, "ichatballooncolor");
 		if (ichatballooncolor != NULL)
 		{
-			gchar *tmp2;
-			tmp2 = g_strdup_printf("<font back=\"%s\">%s</font>", ichatballooncolor, tmp);
-			g_free(tmp);
-			tmp = tmp2;
+			tmp2 = g_strdup_printf("<font back=\"%s\">%s</font>", ichatballooncolor, body);
+			g_free(body);
+			body = tmp2;
 		}
 
 		g_datalist_clear(&attribs);
+
+		len = start - tmp;
+		tmp2 = g_strdup_printf("%.*s%s%s", len, tmp, body, slash_body_end ? slash_body_end + 1: "</body>");
+		g_free(tmp);
+		g_free(body);
+
+		tmp = tmp2;
+	}
+
+	/*
+	 * Are there <html/> surrounding tags? If so, strip them out, too.
+	 */
+	if (purple_markup_find_tag("html", tmp, &start, &end, &attribs))
+	{
+		gchar *tmp2;
+		int len;
+
+		g_datalist_clear(&attribs);
+
+		len = start - tmp;
+		tmp2 = g_strdup_printf("%.*s%s", len, tmp, end + 1);
+		g_free(tmp);
+		tmp = tmp2;
+	}
+
+	if (purple_markup_find_tag("/html", tmp, &start, &end, &attribs))
+	{
+		gchar *tmp2;
+		int len;
+
+		g_datalist_clear(&attribs);
+
+		len = start - tmp;
+		tmp2 = g_strdup_printf("%.*s%s", len, tmp, end + 1);
+		g_free(tmp);
+		tmp = tmp2;
 	}
 
 	serv_got_im(gc, userinfo->bn, tmp, flags,
@@ -5258,7 +5297,7 @@
 	{ /* If not in server list then prune from local list */
 		GSList *cur, *next;
 		GSList *buddies = purple_find_buddies(account, NULL);
-
+		
 		/* Buddies */
 		cur = NULL;
 
@@ -5348,28 +5387,45 @@
 
 	/* Add from server list to local list */
 	for (curitem=od->ssi.local; curitem; curitem=curitem->next) {
+	  if ((curitem->name == NULL) || (g_utf8_validate(curitem->name, -1, NULL)))
 		switch (curitem->type) {
 			case AIM_SSI_TYPE_BUDDY: { /* Buddy */
 				if (curitem->name) {
 					struct aim_ssi_item *groupitem;
-					const char *gname, *alias;
+					char *gname, *gname_utf8, *alias, *alias_utf8;
 
 					groupitem = aim_ssi_itemlist_find(od->ssi.local, curitem->gid, 0x0000);
 					gname = groupitem ? groupitem->name : NULL;
-
-					g = purple_find_group(gname ? gname : _("Orphans"));
+					if (gname != NULL) {
+						if (g_utf8_validate(gname, -1, NULL))
+							gname_utf8 = g_strdup(gname);
+						else
+							gname_utf8 = oscar_utf8_try_convert(account, gname);
+					} else
+						gname_utf8 = NULL;
+
+					g = purple_find_group(gname_utf8 ? gname_utf8 : _("Orphans"));
 					if (g == NULL) {
-						g = purple_group_new(gname ? gname : _("Orphans"));
+						g = purple_group_new(gname_utf8 ? gname_utf8 : _("Orphans"));
 						purple_blist_add_group(g, NULL);
 					}
 
 					alias = aim_ssi_getalias(od->ssi.local, gname, curitem->name);
+					if (alias != NULL) {
+						if (g_utf8_validate(alias, -1, NULL))
+							alias_utf8 = g_strdup(alias);
+						else
+							alias_utf8 = oscar_utf8_try_convert(account, alias);
+						g_free(alias);
+					} else
+						alias_utf8 = NULL;
+
 					b = purple_find_buddy_in_group(account, curitem->name, g);
 					if (b) {
 						/* Get server stored alias */
-						purple_blist_alias_buddy(b, alias);
+						purple_blist_alias_buddy(b, alias_utf8);
 					} else {
-						b = purple_buddy_new(account, curitem->name, alias);
+						b = purple_buddy_new(account, curitem->name, alias_utf8);
 
 						purple_debug_info("oscar",
 								   "ssi: adding buddy %s to group %s to local list\n", curitem->name, gname);
@@ -5393,15 +5449,30 @@
 								purple_buddy_get_name(b),
 								OSCAR_STATUS_ID_MOBILE, NULL);
 					}
+
+					g_free(gname_utf8);
+					g_free(alias_utf8);
 				}
 			} break;
 
 			case AIM_SSI_TYPE_GROUP: { /* Group */
-				const char *gname = curitem->name;
-				if (gname != NULL && purple_find_group(gname) == NULL) {
-					g = purple_group_new(gname);
+				char *gname;
+				char *gname_utf8;
+
+				gname = curitem->name;
+				if (gname != NULL) {
+					if (g_utf8_validate(gname, -1, NULL))
+						gname_utf8 = g_strdup(gname);
+					else
+						gname_utf8 = oscar_utf8_try_convert(account, gname);
+				} else
+					gname_utf8 = NULL;
+
+				if (gname_utf8 != NULL && purple_find_group(gname_utf8) == NULL) {
+					g = purple_group_new(gname_utf8);
 					purple_blist_add_group(g, NULL);
 				}
+				g_free(gname_utf8);
 			} break;
 
 			case AIM_SSI_TYPE_PERMIT: { /* Permit buddy */
@@ -5540,8 +5611,7 @@
 {
 	PurpleConnection *gc;
 	PurpleAccount *account;
-	const char *gname;
-	char *alias;
+	char *gname, *gname_utf8, *alias, *alias_utf8;
 	PurpleBuddy *b;
 	PurpleGroup *g;
 	struct aim_ssi_item *ssi_item;
@@ -5562,7 +5632,19 @@
 		return 1;
 
 	gname = aim_ssi_itemlist_findparentname(od->ssi.local, name);
+	gname_utf8 = gname ? oscar_utf8_try_convert(account, gname) : NULL;
+
 	alias = aim_ssi_getalias(od->ssi.local, gname, name);
+	if (alias != NULL)
+	{
+		if (g_utf8_validate(alias, -1, NULL))
+			alias_utf8 = g_strdup(alias);
+		else
+			alias_utf8 = oscar_utf8_try_convert(account, alias);
+	}
+	else
+		alias_utf8 = NULL;
+	g_free(alias);
 
 	b = purple_find_buddy(account, name);
 	if (b) {
@@ -5571,21 +5653,21 @@
 		 * of your buddies, so update our local buddy list with
 		 * the person's new alias.
 		 */
-		purple_blist_alias_buddy(b, alias);
+		purple_blist_alias_buddy(b, alias_utf8);
 	} else if (snac_subtype == 0x0008) {
 		/*
 		 * You're logged in somewhere else and you added a buddy to
 		 * your server list, so add them to your local buddy list.
 		 */
-		b = purple_buddy_new(account, name, alias);
-
-		if (!(g = purple_find_group(gname ? gname : _("Orphans")))) {
-			g = purple_group_new(gname ? gname : _("Orphans"));
+		b = purple_buddy_new(account, name, alias_utf8);
+
+		if (!(g = purple_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) {
+			g = purple_group_new(gname_utf8 ? gname_utf8 : _("Orphans"));
 			purple_blist_add_group(g, NULL);
 		}
 
 		purple_debug_info("oscar",
-				   "ssi: adding buddy %s to group %s to local list\n", name, gname ? gname : _("Orphans"));
+				   "ssi: adding buddy %s to group %s to local list\n", name, gname_utf8 ? gname_utf8 : _("Orphans"));
 		purple_blist_add_buddy(b, NULL, g, NULL);
 
 		/* Mobile users should always be online */
@@ -5598,8 +5680,6 @@
 
 	}
 
-	g_free(alias);
-
 	ssi_item = aim_ssi_itemlist_finditem(od->ssi.local,
 			gname, name, AIM_SSI_TYPE_BUDDY);
 	if (ssi_item == NULL)
@@ -5609,6 +5689,9 @@
 				"group %s\n", name, gname);
 	}
 
+	g_free(gname_utf8);
+	g_free(alias_utf8);
+
 	return 1;
 }
 
@@ -6311,6 +6394,7 @@
 	struct name_data *data;
 	PurpleGroup *g;
 	char *comment;
+	gchar *comment_utf8;
 	gchar *title;
 	PurpleAccount *account;
 	const char *name;
@@ -6329,6 +6413,7 @@
 	data = g_new(struct name_data, 1);
 
 	comment = aim_ssi_getcomment(od->ssi.local, purple_group_get_name(g), name);
+	comment_utf8 = comment ? oscar_utf8_try_convert(account, comment) : NULL;
 
 	data->gc = gc;
 	data->name = g_strdup(name);
@@ -6336,7 +6421,7 @@
 
 	title = g_strdup_printf(_("Buddy Comment for %s"), data->name);
 	purple_request_input(gc, title, _("Buddy Comment:"), NULL,
-					   comment, TRUE, FALSE, NULL,
+					   comment_utf8, TRUE, FALSE, NULL,
 					   _("_OK"), G_CALLBACK(oscar_ssi_editcomment),
 					   _("_Cancel"), G_CALLBACK(oscar_free_name_data),
 					   account, data->name, NULL,
@@ -6344,6 +6429,7 @@
 	g_free(title);
 
 	g_free(comment);
+	g_free(comment_utf8);
 }
 
 static void
--- a/libpurple/protocols/oscar/oscar.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.h	Sun Nov 29 18:53:11 2009 +0000
@@ -29,10 +29,10 @@
 #ifndef _OSCAR_H_
 #define _OSCAR_H_
 
+#include "internal.h"
 #include "circbuffer.h"
 #include "debug.h"
 #include "eventloop.h"
-#include "internal.h"
 #include "proxy.h"
 #include "sslconn.h"
 
--- a/libpurple/protocols/qq/buddy_list.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/buddy_list.c	Sun Nov 29 18:53:11 2009 +0000
@@ -22,8 +22,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <string.h>
-
 #include "qq.h"
 
 #include "debug.h"
--- a/libpurple/protocols/qq/buddy_opt.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/buddy_opt.c	Sun Nov 29 18:53:11 2009 +0000
@@ -22,8 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "notify.h"
 #include "request.h"
 #include "privacy.h"
--- a/libpurple/protocols/qq/char_conv.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/char_conv.c	Sun Nov 29 18:53:11 2009 +0000
@@ -22,8 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 
 #include "char_conv.h"
 #include "packet_parse.h"
--- a/libpurple/protocols/qq/qq.h	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/qq.h	Sun Nov 29 18:53:11 2009 +0000
@@ -25,7 +25,6 @@
 #ifndef _QQ_QQ_H_
 #define _QQ_QQ_H_
 
-#include <glib.h>
 #include "internal.h"
 #include "ft.h"
 #include "circbuffer.h"
--- a/libpurple/protocols/qq/qq_base.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/qq_base.c	Sun Nov 29 18:53:11 2009 +0000
@@ -22,8 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "server.h"
 #include "cipher.h"
 #include "request.h"
--- a/libpurple/protocols/qq/qq_network.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/qq_network.c	Sun Nov 29 18:53:11 2009 +0000
@@ -22,9 +22,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "cipher.h"
 #include "debug.h"
-#include "internal.h"
 
 #include "buddy_info.h"
 #include "group_info.h"
--- a/libpurple/protocols/qq/qq_process.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/qq_process.c	Sun Nov 29 18:53:11 2009 +0000
@@ -22,9 +22,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "cipher.h"
 #include "debug.h"
-#include "internal.h"
 
 #include "buddy_info.h"
 #include "buddy_list.h"
--- a/libpurple/protocols/qq/utils.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/qq/utils.c	Sun Nov 29 18:53:11 2009 +0000
@@ -22,6 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
+
 #include "limits.h"
 #include "stdlib.h"
 #include "string.h"
--- a/libpurple/protocols/sametime/sametime.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/sametime/sametime.c	Sun Nov 29 18:53:11 2009 +0000
@@ -21,6 +21,7 @@
   USA.
 */
 
+#include "internal.h"
 
 /* system includes */
 #include <stdlib.h>
@@ -30,9 +31,6 @@
 #include <glib.h>
 
 /* purple includes */
-#include "internal.h"
-#include "config.h"
-
 #include "account.h"
 #include "accountopt.h"
 #include "circbuffer.h"
--- a/libpurple/protocols/silc/buddy.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/buddy.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/chat.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/chat.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/ft.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/ft.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/ops.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/ops.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/pk.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/pk.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/silc.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/silc.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/util.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/util.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/wb.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/silc/wb.c	Sun Nov 29 18:53:11 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/yahoo/util.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/protocols/yahoo/util.c	Sun Nov 29 18:53:11 2009 +0000
@@ -656,7 +656,10 @@
 	/* Strip off the outter HTML node */
 	/* This probably isn't necessary, especially if we made the outter HTML
 	 * node an empty span.  But the HTML is simpler this way. */
-	xmlstr2 = g_strndup(xmlstr1 + 6, strlen(xmlstr1) - 13);
+	if (!purple_strequal(xmlstr1, "<html/>"))
+		xmlstr2 = g_strndup(xmlstr1 + 6, strlen(xmlstr1) - 13);
+	else
+		xmlstr2 = g_strdup("");
 	g_free(xmlstr1);
 
 	esc = g_strescape(x, NULL);
--- a/libpurple/proxy.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/proxy.c	Sun Nov 29 18:53:11 2009 +0000
@@ -1099,36 +1099,6 @@
 			connect_data->host, connect_data->port,
 			connect_data->host, connect_data->port);
 
-	if (purple_proxy_info_get_username(connect_data->gpi) != NULL)
-	{
-		char *t1, *t2, *ntlm_type1;
-		char hostname[256];
-
-		ret = gethostname(hostname, sizeof(hostname));
-		hostname[sizeof(hostname) - 1] = '\0';
-		if (ret < 0 || hostname[0] == '\0') {
-			purple_debug_warning("proxy", "gethostname() failed -- is your hostname set?");
-			strcpy(hostname, "localhost");
-		}
-
-		t1 = g_strdup_printf("%s:%s",
-			purple_proxy_info_get_username(connect_data->gpi),
-			purple_proxy_info_get_password(connect_data->gpi) ?
-				purple_proxy_info_get_password(connect_data->gpi) : "");
-		t2 = purple_base64_encode((const guchar *)t1, strlen(t1));
-		g_free(t1);
-
-		ntlm_type1 = purple_ntlm_gen_type1(hostname, "");
-
-		g_string_append_printf(request,
-			"Proxy-Authorization: Basic %s\r\n"
-			"Proxy-Authorization: NTLM %s\r\n"
-			"Proxy-Connection: Keep-Alive\r\n",
-			t2, ntlm_type1);
-		g_free(ntlm_type1);
-		g_free(t2);
-	}
-
 	g_string_append(request, "\r\n");
 
 	connect_data->write_buf_len = request->len;
--- a/libpurple/roomlist.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/roomlist.c	Sun Nov 29 18:53:11 2009 +0000
@@ -24,8 +24,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-
 #include "internal.h"
 
 #include "account.h"
--- a/libpurple/tests/test_yahoo_util.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/tests/test_yahoo_util.c	Sun Nov 29 18:53:11 2009 +0000
@@ -15,6 +15,10 @@
 
 START_TEST(test_codes_to_html)
 {
+	assert_string_equal_free("",
+			yahoo_codes_to_html(""));
+	assert_string_equal_free("",
+			yahoo_codes_to_html("\x1B[12345m"));
 	assert_string_equal_free("plain",
 			yahoo_codes_to_html("plain"));
 	assert_string_equal_free("unknown  ansi code",
--- a/libpurple/theme-manager.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/theme-manager.c	Sun Nov 29 18:53:11 2009 +0000
@@ -20,9 +20,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-#include <string.h>
-
 #include "internal.h"
 #include "theme-manager.h"
 #include "util.h"
--- a/libpurple/theme.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/theme.c	Sun Nov 29 18:53:11 2009 +0000
@@ -20,9 +20,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-#include <string.h>
-
 #include "internal.h"
 #include "theme.h"
 #include "util.h"
--- a/libpurple/whiteboard.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/whiteboard.c	Sun Nov 29 18:53:11 2009 +0000
@@ -21,8 +21,6 @@
  *
  */
 
-#include <string.h>
-
 #include "internal.h"
 #include "whiteboard.h"
 #include "prpl.h"
--- a/libpurple/xmlnode.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/libpurple/xmlnode.c	Sun Nov 29 18:53:11 2009 +0000
@@ -29,8 +29,8 @@
  * as I want to be.  Thank you libxode for giving me a good starting point */
 #define _PURPLE_XMLNODE_C_
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 
 #include <libxml/parser.h>
 #include <string.h>
--- a/pidgin/gtkcertmgr.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/pidgin/gtkcertmgr.c	Sun Nov 29 18:53:11 2009 +0000
@@ -25,10 +25,8 @@
  *
  */
 
-#include <glib.h>
-
+#include "internal.h"
 #include "core.h"
-#include "internal.h"
 #include "pidgin.h"
 #include "pidginstock.h"
 
--- a/pidgin/gtkconv.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/pidgin/gtkconv.c	Sun Nov 29 18:53:11 2009 +0000
@@ -3903,8 +3903,7 @@
 	gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 4);
 
 	if (buddy != NULL &&
-	    !purple_presence_is_online(purple_buddy_get_presence(buddy)) &&
-	    !purple_account_supports_offline_message(account, buddy))
+	    !purple_presence_is_online(purple_buddy_get_presence(buddy)))
 	{
 		gtk_widget_set_sensitive(label, FALSE);
 
--- a/pidgin/gtkmedia.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/pidgin/gtkmedia.c	Sun Nov 29 18:53:11 2009 +0000
@@ -23,9 +23,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <string.h>
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "connection.h"
 #include "media.h"
 #include "mediamanager.h"
--- a/pidgin/gtkwhiteboard.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/pidgin/gtkwhiteboard.c	Sun Nov 29 18:53:11 2009 +0000
@@ -21,8 +21,6 @@
  *
  */
 
-#include <stdlib.h>
-
 #include "internal.h"
 #include "blist.h"
 #include "debug.h"
--- a/pidgin/plugins/gtk-signals-test.c	Mon Nov 23 21:32:39 2009 +0000
+++ b/pidgin/plugins/gtk-signals-test.c	Sun Nov 29 18:53:11 2009 +0000
@@ -20,9 +20,10 @@
  */
 #define GTK_SIGNAL_TEST_PLUGIN_ID "gtk-signals-test"
 
+#include "internal.h"
+
 #include <gtk/gtk.h>
 
-#include "internal.h"
 #include "debug.h"
 #include "version.h"
 
--- a/po/ca.po	Mon Nov 23 21:32:39 2009 +0000
+++ b/po/ca.po	Sun Nov 29 18:53:11 2009 +0000
@@ -33,8 +33,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:33-0500\n"
-"PO-Revision-Date: 2009-10-26 09:20+0100\n"
+"POT-Creation-Date: 2009-11-28 18:48+0100\n"
+"PO-Revision-Date: 2009-11-28 21:57+0100\n"
 "Last-Translator: Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>\n"
 "Language-Team: Catalan <tradgnome@softcatala.net>\n"
 "MIME-Version: 1.0\n"
@@ -475,7 +475,7 @@
 msgstr "Indiqueu el nom de l'ordiador"
 
 msgid "Type the host name this certificate is for."
-msgstr "Entreu el nom de l'ordinador al qual pertany aquest certificat."
+msgstr "Introduïu el nom de l'ordinador al qual pertany aquest certificat."
 
 #, c-format
 msgid ""
@@ -880,7 +880,7 @@
 msgid ""
 "Chats will only be logged if the \"Log all chats\" preference is enabled."
 msgstr ""
-"Els xats només es registraran si s'habilita preferència «Registra tots els "
+"Els xats només es registraran si s'habilita la preferència «Registra tots els "
 "xats»."
 
 msgid "No logs were found"
@@ -1569,7 +1569,7 @@
 msgstr "Fes un TinyURL d'això d'aquí dalt: %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr "Espreu mentre TinyURL obté una URL més curta..."
+msgstr "Espereu mentre TinyURL obté una URL més curta..."
 
 msgid "Only create TinyURL for URLs of this length or greater"
 msgstr "Només crea TinyURL per a URL així de llargues o més"
@@ -1585,11 +1585,12 @@
 
 msgid "When receiving a message with URL(s), use TinyURL for easier copying"
 msgstr ""
-"En rebre missagtes amb URL, s'empra TinyURL perquè sigui més fàcil copiar"
+"En rebre missatges amb URL, s'empra TinyURL perquè sigui més fàcil copiar"
 
 msgid "Online"
 msgstr "En línia"
 
+#. primative,						no,							id,			name
 msgid "Offline"
 msgstr "Fora de línia"
 
@@ -1634,7 +1635,7 @@
 msgstr "comptes"
 
 msgid "Password is required to sign on."
-msgstr "Es necessita la contrasenya per a poder connectar."
+msgstr "Es necessita la contrasenya per poder connectar."
 
 #, c-format
 msgid "Enter password for %s (%s)"
@@ -3210,10 +3211,12 @@
 msgid "Add to chat..."
 msgstr "Afegeix al xat..."
 
+#. 0
 #. Global
 msgid "Available"
 msgstr "Disponible"
 
+#. 1
 #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
 #. Away stuff
@@ -3668,14 +3671,14 @@
 "channels, optionally providing a channel key for each if needed."
 msgstr ""
 "j &lt;sala1&gt;[,sala2][,...] [clau1[,clau2][,...]]:  entra a un o més "
-"canals, opcionalment proporcionant una clau si cal."
+"canals, proporcionant una clau opcional si cal."
 
 msgid ""
 "join &lt;room1&gt;[,room2][,...] [key1[,key2][,...]]:  Enter one or more "
 "channels, optionally providing a channel key for each if needed."
 msgstr ""
 "join &lt;sala1&gt;[,sala2][,...] [clau1[,clau2][,...]]:  entra a un o més "
-"canals, opcionalment proporcionant una clau si cal."
+"canals, proporcionant una clau opcional si cal."
 
 msgid ""
 "kick &lt;nick&gt; [message]:  Remove someone from a channel. You must be a "
@@ -4027,12 +4030,14 @@
 msgid "Log Out"
 msgstr "Desconnecta"
 
+#. 2
 msgid "Chatty"
 msgstr "Xerraire"
 
 msgid "Extended Away"
 msgstr "Absent des de fa una bona estona"
 
+#. 3
 msgid "Do Not Disturb"
 msgstr "No molesteu"
 
@@ -4297,6 +4302,7 @@
 msgid "None (To pending)"
 msgstr "Cap (a pendent)"
 
+#. 0
 msgid "None"
 msgstr "Cap"
 
@@ -5504,9 +5510,8 @@
 msgid "Unknown error (%d)"
 msgstr "Error desconegut (%d)"
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "No s'ha pogut afegir l'usuari"
+msgstr "No s'ha pogut suprimir l'usuari"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "No s'ha enviat el missatge al mòbil perquè era massa llarg."
@@ -5757,28 +5762,84 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "%s us ha suprimit de la seva llista d'amics."
 
+#. 1
+msgid "Angry"
+msgstr "Enfadat"
+
+#. 2
+msgid "Excited"
+msgstr "Excitat"
+
+#. 3
+msgid "Grumpy"
+msgstr "Rondinaire"
+
+#. 4
+msgid "Happy"
+msgstr "Content"
+
+#. 5
+msgid "In Love"
+msgstr "Enamorat"
+
+#. 6
+msgid "Invincible"
+msgstr "Invencible"
+
+#. 7
+msgid "Sad"
+msgstr "Trist"
+
+#. 8
+msgid "Hot"
+msgstr "Calent"
+
+#. 9
+msgid "Sick"
+msgstr "Malalt"
+
+#. 10
+msgid "Sleepy"
+msgstr "Endormiscat"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "El vostre estat d'ànim actual"
+msgstr "Estat d'ànim actual"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Estat d'ànim de l'usuari"
-
-#, fuzzy
+msgstr "Nou estat d'ànim"
+
 msgid "Change your Mood"
-msgstr "Canvia la contrasenya"
-
-#, fuzzy
+msgstr "Canvieu el vostre estat d'ànim"
+
 msgid "How do you feel right now?"
-msgstr "Ara mateix no sóc aquí"
+msgstr "Com us trobeu ara mateix?"
+
+msgid "The PIN you entered is invalid."
+msgstr "El PIN que heu introduït no és vàlid."
+
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "La llargada del PIN que heu introduït no és vàlida [4-10]."
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr "El PIN no és vàlid. Només pot contenir dígits [0-9]."
+
+msgid "The two PINs you entered do not match."
+msgstr "Els dos PIN que heu introduït no coincideixen."
+
+msgid "The name you entered is invalid."
+msgstr "El nom que heu introduït no és vàlid."
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr ""
+"La data de l'aniversari que heu introduït no és vàlida. El format és: 'AAAA-"
+"MM-DD'."
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "Error d'escriptura"
+msgstr "S'ha produït un error en actualitzar el perfil"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5787,356 +5848,304 @@
 
 msgid "Your profile information is not yet retrieved. Please try again later."
 msgstr ""
+"Encara no s'ha pogut recuperar la informació del vostre perfil. Torneu-ho a "
+"intentar més tard."
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "PIN"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "Verifiqueu el PIN"
 
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "Visualitza"
+msgstr "Nom que es mostrarà"
 
 #. hidden
 msgid "Hide my number"
-msgstr ""
+msgstr "Oculta el meu número"
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
-msgstr "Número del telèfon mòbil"
-
-#, fuzzy
+msgstr "Número de telèfon mòbil"
+
 msgid "Update your Profile"
-msgstr "Perfil de l'usuari"
+msgstr "Actualitzeu el vostre perfil"
 
 msgid "Here you can update your MXit profile"
-msgstr ""
+msgstr "Aquí podeu actualitzar el vostre perfil MXit"
 
 msgid "View Splash"
-msgstr ""
-
-#, fuzzy
+msgstr "Mostra la pantalla de presentació"
+
 msgid "There is no splash-screen currently available"
-msgstr "El xat no està actualment disponible"
-
-#, fuzzy
+msgstr "No hi ha cap pantalla de presentació disponible"
+
 msgid "About"
-msgstr "Quant a mi"
+msgstr "Quant a"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "Canvia la contrasenya..."
+msgstr "Canvia l'estat d'ànim..."
 
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "Canvia la contrasenya..."
+msgstr "Canvia el perfil..."
 
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "Mostra el registre..."
+msgstr "Mostra la pantalla de presentació..."
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "Quant a mi"
+msgstr "Quant a..."
 
 #. the file is too big
-#, fuzzy
 msgid "The file you are trying to send is too large!"
-msgstr "El missatge és massa llarg."
-
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
+msgstr "El fitxer que voleu enviar és massa llarg."
+
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"No s'ha pogut connectar al servidor HTTP de MXit. Comproveu la configuració "
+"del servidor."
+
 msgid "Logging In..."
-msgstr "S'està entrant"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
-msgstr ""
-"No s'ha pogut connectar al servidor. Introduïu l'adreça del servidor al qual "
-"us vulgueu connectar."
-
-#, fuzzy
+msgstr "S'està entrant..."
+
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr "No s'ha pogut connectar al servidor MXit. Comproveu la configuració."
+
 msgid "Connecting..."
-msgstr "S'està connectant"
+msgstr "S'està connectant..."
+
+msgid "The nick name you entered is invalid."
+msgstr "El sobrenom que heu introduït no és vàlid."
+
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "La llargada del PIN que heu introduït no és vàlida [4-10]."
 
 #. mxit login name
 msgid "MXit Login Name"
-msgstr ""
+msgstr "Nom d'usuari de MXit"
 
 #. nick name
-#, fuzzy
 msgid "Nick Name"
 msgstr "Sobrenom"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "Registra un compte XMPP nou"
-
-#, fuzzy
+msgstr "Crea un compte MXit nou"
+
 msgid "Please fill in the following fields:"
-msgstr "Empleneu els camps següents"
+msgstr "Empleneu aquests camps:"
 
 #. no reply from the WAP site
 msgid "Error contacting the MXit WAP site. Please try again later."
 msgstr ""
+"S'ha produït un error en connectar al lloc WAP de MXit. Intenteu-ho més tard."
 
 #. wapserver error
 #. server could not find the user
 msgid ""
 "MXit is currently unable to process the request. Please try again later."
 msgstr ""
+"Ara mateix MXit no pot processar la sol·licitud. Torneu-ho a intentar més "
+"tard."
 
 msgid "Wrong security code entered. Please try again later."
 msgstr ""
+"S'ha introduït un codi de seguretat equivocat. Torneu-ho a intentar més tard."
 
 msgid "Your session has expired. Please try again later."
-msgstr ""
+msgstr "La vostra sessió ha expirat. Torneu-ho a intentar més tard."
 
 msgid "Invalid country selected. Please try again."
-msgstr ""
+msgstr "El país seleccionat no és vàlid. Intenteu-ho de nou."
 
 msgid "Username is not registered. Please register first."
-msgstr ""
+msgstr "El nom d'usuari no està registrat, cal que primer el registreu."
 
 msgid "Username is already registered. Please choose another username."
-msgstr ""
-
-#, fuzzy
+msgstr "Aquest nom d'usuari ja està registrat, escolliu-ne un altre."
+
 msgid "Internal error. Please try again later."
-msgstr "El servidor no està disponible, proveu-ho més tard"
+msgstr "S'ha produït un error intern. Torneu-ho a provar més tard."
 
 msgid "You did not enter the security code"
-msgstr ""
-
-#, fuzzy
+msgstr "No heu introduït codi de seguretat"
+
 msgid "Security Code"
-msgstr "Seguretat habilitada"
+msgstr "Codi de seguretat"
 
 #. ask for input
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "Introduïu el codi"
-
-#, fuzzy
+msgstr "Introduïu el codi de seguretat"
+
 msgid "Your Country"
-msgstr "País"
-
-#, fuzzy
+msgstr "El vostre país"
+
 msgid "Your Language"
-msgstr "Idioma preferit"
+msgstr "La vostra llengua"
 
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "Sol·licitud d'autorització"
+msgstr "Autorització MXit"
 
 msgid "MXit account validation"
-msgstr ""
-
-#, fuzzy
+msgstr "Validació del compte MXit"
+
 msgid "Retrieving User Information..."
-msgstr "Informació del servidor"
-
-#, fuzzy
+msgstr "S'està obtenint informació de l'usuari..."
+
+msgid "Loading menu..."
+msgstr "S'està carregant el menú..."
+
 msgid "Status Message"
 msgstr "Missatge d'estat"
 
 # Segons la viquipèdia
-#, fuzzy
 msgid "Hidden Number"
-msgstr "Nom del mig"
-
-#, fuzzy
+msgstr "Nombre ocult"
+
 msgid "Your Mobile Number..."
-msgstr "Estableix el número del telèfon mòbil..."
+msgstr "El vostre telèfon mòbil..."
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
 msgid "WAP Server"
-msgstr "Servidor"
-
-#, fuzzy
+msgstr "Servidor WAP"
+
 msgid "Connect via HTTP"
-msgstr "Connecta amb TCP"
+msgstr "Connecta amb HTTP"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "Habilita la pantalla de presentació emergent"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
-#, fuzzy
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr "Heu perdut la connexió a la sala de xat %s."
+msgstr "S'ha trencat la connexió a MXit. Torneu-vos a connectar."
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "Missatge d'error de l'XMPP"
-
-#, fuzzy
+msgstr "S'ha produït un error en enviar el missatge"
+
 msgid "Unable to process your request at this time"
-msgstr "No s'ha pogut resoldre el nom de l'ordinador"
+msgstr "Ara mateix no es pot processar la sol·licitud"
 
 msgid "Timeout while waiting for a response from the MXit server."
 msgstr ""
-
-#, fuzzy
+"S'ha exhaurit el temps d'espera per obtenir una resposta del servidor MXit."
+
 msgid "Successfully Logged In..."
-msgstr "S'ha entrat al Qun"
-
-#, fuzzy
+msgstr "S'ha pogut entrar..."
+
+#, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr ""
+"%s us ha enviat un missatge xifrat, però aquest client no implementa el "
+"mètode emprat per xifrar."
+
 msgid "Message Error"
-msgstr "Missatge d'error de l'XMPP"
+msgstr "S'ha produït un error en el missatge"
 
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "No es pot redireccionar amb el protocol seleccionat"
+
+msgid "An internal MXit server error occurred."
+msgstr "S'ha produït un error intern del servidor MXit."
+
+#, c-format
+msgid "Login error: %s (%i)"
+msgstr "S'ha produït un error en entrar: %s (%i)"
+
+#, c-format
+msgid "Logout error: %s (%i)"
+msgstr "S'ha produït un error en sortir: %s (%i)"
+
 msgid "Contact Error"
-msgstr "Error de connexió"
-
-#, fuzzy
+msgstr "S'ha produït un error en un contacte"
+
 msgid "Message Sending Error"
-msgstr "Missatge d'error de l'XMPP"
-
-#, fuzzy
+msgstr "S'ha produït un error en enviar un missatge"
+
 msgid "Status Error"
-msgstr "Error de flux"
-
-#, fuzzy
+msgstr "S'ha produït un error en l'estat"
+
 msgid "Mood Error"
-msgstr "Error en la icona"
-
-#, fuzzy
+msgstr "S'ha produït un error en l'estat d'ànim"
+
 msgid "Invitation Error"
-msgstr "Error en desconnectar"
-
-#, fuzzy
+msgstr "S'ha produït un error en la invitació"
+
 msgid "Contact Removal Error"
-msgstr "Error de connexió"
-
-#, fuzzy
+msgstr "S'ha produït un error en suprimir un contacte"
+
 msgid "Subscription Error"
-msgstr "Subscripció"
-
-#, fuzzy
+msgstr "S'ha produït un error en la subscripció"
+
 msgid "Contact Update Error"
-msgstr "Error de connexió"
-
-#, fuzzy
+msgstr "S'ha produït un error en actualitzar un contacte"
+
 msgid "File Transfer Error"
-msgstr "Transferència de fitxers"
-
-#, fuzzy
+msgstr "S'ha produït un error en la transferència de fitxers"
+
 msgid "Cannot create MultiMx room"
-msgstr "No s'ha pogut crear l'avís"
-
-#, fuzzy
+msgstr "No s'ha pogut crear una sala MultiMx"
+
 msgid "MultiMx Invitation Error"
-msgstr "Error en desconnectar"
-
-#, fuzzy
+msgstr "S'ha produït un error en la invitació MultiMix"
+
 msgid "Profile Error"
-msgstr "Error d'escriptura"
+msgstr "S'ha produït un error en el perfil"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
+msgstr "S'ha rebut un paquet invàlid de MXit."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "S'ha produït un error de connexió a MXit. (read stage 0x01)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
+msgstr "S'ha produït un error de conneció a MXit. (read stage 0x02)"
 
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
+msgstr "S'ha produït un error de connexió a MXit. (read stage 0x03)"
 
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
+msgstr "S'ha produït un error de connexió a MXit. (read stage 0x04)"
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
+msgstr "S'ha produït un error de connexió a MXit. (read stage 0x05)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-msgid "Angry"
-msgstr "Enfadat"
-
-msgid "Excited"
-msgstr "Excitat"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Grup"
-
-msgid "Happy"
-msgstr "Content"
-
-msgid "In Love"
-msgstr "Enamorat"
-
-msgid "Invincible"
-msgstr "Invencible"
-
-msgid "Sad"
-msgstr "Trist"
-
-#, fuzzy
-msgid "Hot"
-msgstr "Ordinador:"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Sobrenom"
-
-msgid "Sleepy"
-msgstr "Endormiscat"
-
-#, fuzzy
+msgstr "S'ha produït un error de connexió a MXit. (read stage 0x06)"
+
 msgid "Pending"
-msgstr "S'està enviant"
-
-#, fuzzy
+msgstr "Pendent"
+
 msgid "Invited"
-msgstr "Convida"
-
-#, fuzzy
+msgstr "Convidat"
+
 msgid "Rejected"
-msgstr "Rebutja"
-
-#, fuzzy
+msgstr "Rebutjat"
+
 msgid "Deleted"
-msgstr "Suprimeix"
+msgstr "Suprimit"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "Anuncis MXit"
+
 msgid "More Information"
-msgstr "Informació de la feina"
+msgstr "Més informació"
 
 #, c-format
 msgid "No such user: %s"
@@ -6353,7 +6362,7 @@
 msgstr "No s'ha establer cap nom d'usuari"
 
 msgid "Please enter a username to check its availability:"
-msgstr "Entreu un nom d'usuari per a comprovar-ne la disponibilitat:"
+msgstr "Introduïu un nom d'usuari per a comprovar-ne la disponibilitat:"
 
 #. TODO: icons for each zap
 #. Lots of comments for translators:
@@ -6374,7 +6383,7 @@
 
 #. Whack means "to hit or strike someone with a sharp blow"
 msgid "Whack"
-msgstr "bufetejar"
+msgstr "Bufetejar"
 
 #, c-format
 msgid "%s has whacked you!"
@@ -6548,7 +6557,8 @@
 msgstr "L'arxiu mestre està desconfigurat"
 
 msgid "Could not recognize the host of the username you entered"
-msgstr "No s'ha pogut reconèixer l'ordinador del nom d'usuari que heu entrat"
+msgstr ""
+"No s'ha pogut reconèixer l'ordinador del nom d'usuari que heu introduït"
 
 msgid ""
 "Your account has been disabled because too many incorrect passwords were "
@@ -6930,47 +6940,42 @@
 msgstr "No es pot fer mentre estigui a AOL"
 
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
+msgstr "Els controls parentals no permeten que es pugui rebre MI"
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "No es poden enviar SMS si no s'accepten els termes"
+
 msgid "Cannot send SMS"
-msgstr "No s'ha pogut enviar el fitxer"
+msgstr "No s'ha pogut enviar l'SMS"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "No es pot enviar un directori."
+msgstr "No es poden enviar SMS a aquest país"
 
 #. Undocumented
-#, fuzzy
 msgid "Cannot send SMS to unknown country"
-msgstr "No es poden enviar SMS, no es coneix l'operador de telefona mòbil."
+msgstr "No es poden enviar SMS a un país desconegut"
 
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
+msgstr "Els robots no poden iniciar MI"
 
 msgid "Bot account cannot IM this user"
-msgstr ""
+msgstr "Aquest robot no pot fer MI amb aquest usuari"
 
 msgid "Bot account reached IM limit"
-msgstr ""
+msgstr "Aquest robot ha superat el límit de MI"
 
 msgid "Bot account reached daily IM limit"
-msgstr ""
+msgstr "Aquest robot ha superat el límit de MI diari"
 
 msgid "Bot account reached monthly IM limit"
-msgstr ""
-
-#, fuzzy
+msgstr "Aquest robot ha superat el límit de MI mensual"
+
 msgid "Unable to receive offline messages"
-msgstr "No s'ha pogut enviar el missatge."
-
-#, fuzzy
+msgstr "No s'han pogut rebre els missatges fora de línia"
+
 msgid "Offline message store full"
-msgstr "Missatge de fora de línia"
+msgstr "El dipòsit per a missatge de fora de línia és ple"
 
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
@@ -7143,15 +7148,14 @@
 "El servei de missatges instantanis d'AOL no està disponible temporalment."
 
 #. username connecting too frequently
-#, fuzzy
 msgid ""
 "Your username has been connecting and disconnecting too frequently. Wait ten "
 "minutes and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Heu estat connectant-vos i desconnectat-vos amb massa freqüència. Espereu "
-"deu minuts i intenteu-ho de nou. Si continueu intentant-ho, haureu d'esperar "
-"encara més temps."
+"El vostre usuari s'ha estat connectant i desconnectat amb massa freqüència. "
+"Espereu deu minuts i intenteu-ho de nou. Si continueu intentant-ho, haureu "
+"d'esperar encara més temps."
 
 #. client too old
 #, c-format
@@ -7159,18 +7163,17 @@
 msgstr "La versió del client que useu és massa antiga, actualitzeu-la a %s"
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "Your IP address has been connecting and disconnecting too frequently. Wait a "
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Heu estat connectant-vos i desconnectat-vos amb massa freqüència. Espereu un "
-"minut i intenteu-ho de nou. Si continueu intentant-ho, haureu d'esperar "
-"encara més temps."
+"La vostra adreça IP s'ha estat connectant i desconnectat amb massa "
+"freqüència. Espereu un minut i intenteu-ho de nou. Si continueu intentant-"
+"ho, haureu d'esperar encara més temps."
 
 msgid "The SecurID key entered is invalid"
-msgstr "La clau SecurID que heu entrat no és vàlida"
+msgstr "La clau SecurID que heu introduït no és vàlida"
 
 msgid "Enter SecurID"
 msgstr "Introduïu el SecureID"
@@ -7185,7 +7188,8 @@
 msgstr "No s'ha pogut inicialitzar la connexió"
 
 msgid "Please authorize me so I can add you to my buddy list."
-msgstr "Autoritzeu-me perquè us pugui afegir a la meva llista d'amics."
+msgstr ""
+"Si us plau, autoritzeu-me perquè us pugui afegir a la meva llista d'amics."
 
 msgid "No reason given."
 msgstr "No s'ha indicat cap motiu."
@@ -7305,21 +7309,21 @@
 msgstr[0] "Heu perdut %hu missatge de %s per motius desconeguts."
 msgstr[1] "Heu perdut %hu missatges de %s per motius desconeguts."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "No s'ha pogut enviar el missatge (%s)."
+msgstr "No s'ha pogut enviar el missatge: %s (%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "No s'ha pogut enviar el missatge: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "No s'ha pogut enviar el missatge a %s:"
-
-#, fuzzy, c-format
+msgstr "No s'ha pogut enviar el missatge a %s: %s (%s)"
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "No s'ha pogut enviar el missatge a %s:"
+msgstr "No s'ha pogut enviar el missatge a %s: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7348,13 +7352,12 @@
 "[No s'ha pogut mostrar el missatge d'aquest usuari perquè contenia caràcters "
 "invàlids.]"
 
-#, fuzzy
 msgid ""
 "The last action you attempted could not be performed because you are over "
 "the rate limit. Please wait 10 seconds and try again.\n"
 msgstr ""
 "No s'ha pogut realitzar la darrera acció que havíeu intentat perquè esteu "
-"per sobre del límit. Espereu 10 segons i torneu-ho a provar."
+"per sobre del límit. Espereu 10 segons i torneu-ho a provar.\n"
 
 #, c-format
 msgid "You have been disconnected from chat room %s."
@@ -8648,7 +8651,7 @@
 msgstr "ID de Sametime"
 
 msgid "An ambiguous user ID was entered"
-msgstr "S'ha entrat un ID d'usuari ambigu"
+msgstr "S'ha introduït un ID d'usuari ambigu"
 
 #, c-format
 msgid ""
@@ -10771,6 +10774,8 @@
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
+"Xategeu amb missatgeria instantània, amb AIM, Google Talk, Jabber/XMPP, MSN, "
+"Yahoo i més"
 
 msgid "Internet Messenger"
 msgstr "Missatger d'Internet"
@@ -11494,7 +11499,7 @@
 msgstr "/Amics/Ordena els amics"
 
 msgid "Type the host name for this certificate."
-msgstr "Entreu el nom de l'ordinador al qual pertany aquest certificat."
+msgstr "Introduïu el nom de l'ordinador al qual pertany aquest certificat."
 
 #. Widget creation function
 msgid "SSL Servers"
@@ -12044,6 +12049,9 @@
 msgid "Mongolian"
 msgstr "Mongol"
 
+msgid "Malay"
+msgstr "Malai"
+
 msgid "Bokmål Norwegian"
 msgstr "Noruec bokmål"
 
@@ -12115,6 +12123,9 @@
 msgid "Turkish"
 msgstr "Turc"
 
+msgid "Ukranian"
+msgstr "Ucraïnès"
+
 # FIXME?
 msgid "Urdu"
 msgstr "Urdu"
@@ -13070,8 +13081,10 @@
 msgid "(Custom)"
 msgstr "(Personalitzat)"
 
-msgid "(Default)"
-msgstr "(Predeterminat)"
+# Nom propi: http://www.penguinpimps.com/?
+# "proxenetes" no queda gens, s'hi podria posar alguna altra cosa (josep)
+msgid "Penguin Pimps"
+msgstr "Penguin Pimps"
 
 msgid "The default Pidgin sound theme"
 msgstr "El tema de sons predeterminat del pidgin"
@@ -13091,18 +13104,30 @@
 msgid "Theme failed to copy."
 msgstr "No s'ha pogut copiar el tema."
 
-msgid "Install Theme"
-msgstr "Instal·la el tema"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
-"Seleccioneu un tema d'emoticones de la llista següent. Es poden instal·lar "
-"temes nous arrossegant-los i deixant-los anar a la llista de temes."
-
-msgid "Icon"
-msgstr "Icona"
+msgid "Theme Selections"
+msgstr "Selecció del tema"
+
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"Seleccioneu el tema que vulgueu emprar de la llista d'aquí sota.\n"
+"Es poden afegir temes nous arrossegant-los i deixant-los anar a la llista de "
+"temes."
+
+msgid "Buddy List Theme:"
+msgstr "Tema de la llista d'amics:"
+
+msgid "Status Icon Theme:"
+msgstr "Tema de la icona d'estat:"
+
+msgid "Sound Theme:"
+msgstr "Tema de sons:"
+
+msgid "Smiley Theme:"
+msgstr "Tema d'emoticones:"
 
 msgid "Keyboard Shortcuts"
 msgstr "Dreceres de teclat"
@@ -13110,10 +13135,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "Tanca les converses amb la tecla d'_escapament"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "Tema de la llista d'amics"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "Icona d'estat"
@@ -13200,9 +13221,6 @@
 msgid "Font"
 msgstr "Tipus de lletra"
 
-msgid "Use document font from _theme"
-msgstr "_Empra el tipus de lletra del document del tema"
-
 msgid "Use font from _theme"
 msgstr "Empra el tipus de lletra del _tema"
 
@@ -13248,17 +13266,14 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "_Habilita la desviació automàtica de ports de l'encaminador"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "_Especifica manualment el rang de ports on escoltar"
-
-#, fuzzy
+msgstr "_Especifica manualment el rang de ports on escoltar:"
+
 msgid "_Start:"
-msgstr "E_stat:"
-
-#, fuzzy
+msgstr "_Inici:"
+
 msgid "_End:"
-msgstr "_Amplia"
+msgstr "_Final:"
 
 #. TURN server
 msgid "Relay Server (TURN)"
@@ -13267,60 +13282,11 @@
 msgid "_TURN server:"
 msgstr "Servidor _TURN:"
 
-#, fuzzy
 msgid "Use_rname:"
-msgstr "Nom d'usuari:"
-
-#, fuzzy
+msgstr "Nom d'_usuari:"
+
 msgid "Pass_word:"
-msgstr "Contrasenya:"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "Servidor intermediari i navegador"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr ""
-"<b>No s'ha pogut trobar el programa de configuració del servidor "
-"intermediari.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>No s'ha pogut trobar el programa de configuració del navegador.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"Les preferències del servidor intermediari i\n"
-"del navegador les gestiona el GNOME"
-
-msgid "Configure _Proxy"
-msgstr "Configura el _servidor intermediari"
-
-msgid "Configure _Browser"
-msgstr "Configura el _navegador"
-
-msgid "Proxy Server"
-msgstr "Servidor intermediari"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Empra DNS remot amb servidors intermediàris SOCKS4"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "_Tipus de servidor intermediari"
-
-msgid "No proxy"
-msgstr "Sense servidor intermediari"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "Port:"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Nom d'usuari:"
+msgstr "Contrasen_ya:"
 
 msgid "Seamonkey"
 msgstr "Seamonkey"
@@ -13361,6 +13327,15 @@
 msgid "Browser Selection"
 msgstr "Selecció del navegador"
 
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr "Les preferències del navegador es configuren a través del GNOME"
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>No s'ha pogut trobar el programa de configuració del navegador.</b>"
+
+msgid "Configure _Browser"
+msgstr "Configura el _navegador"
+
 msgid "_Browser:"
 msgstr "_Navegador:"
 
@@ -13384,6 +13359,38 @@
 "_Manual:\n"
 "(%s per a l'URL)"
 
+msgid "Proxy Server"
+msgstr "Servidor intermediari"
+
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr ""
+"Les preferències del servidor intermediari es configuren a través el GNOME"
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr ""
+"<b>No s'ha pogut trobar el programa de configuració del servidor "
+"intermediari.</b>"
+
+msgid "Configure _Proxy"
+msgstr "Configura el _servidor intermediari"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Empra _DNS remot amb servidors intermediàris SOCKS4"
+
+msgid "Proxy t_ype:"
+msgstr "_Tipus de servidor intermediari:"
+
+msgid "No proxy"
+msgstr "Sense servidor intermediari"
+
+msgid "P_ort:"
+msgstr "P_ort:"
+
+msgid "User_name:"
+msgstr "_Nom d'usuari:"
+
 msgid "Log _format:"
 msgstr "_Format del registre:"
 
@@ -13467,25 +13474,18 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Basat en l'ús del teclat o el ratolí"
 
+msgid "_Minutes before becoming idle:"
+msgstr "_Minuts abans de passar a inactiu:"
+
+msgid "Change to this status when _idle:"
+msgstr "_Canvia l'estat quan estigui inactiu:"
+
 msgid "_Auto-reply:"
 msgstr "Resposta _automàtica:"
 
 msgid "When both away and idle"
 msgstr "En estar absent i inactiu alhora"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Auto-absència"
-
-msgid "_Minutes before becoming idle:"
-msgstr "_Minuts abans de passar a inactiu:"
-
-msgid "Change status when _idle"
-msgstr "_Canvia l'estat quan estigui inactiu"
-
-msgid "Change _status to:"
-msgstr "Canvia l'_estat a:"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "L'estat en iniciar"
@@ -13499,15 +13499,15 @@
 msgid "Interface"
 msgstr "Interfície"
 
-msgid "Smiley Themes"
-msgstr "Temes d'emoticones"
-
 msgid "Browser"
 msgstr "Navegador"
 
 msgid "Status / Idle"
 msgstr "Estat / Inactiu"
 
+msgid "Themes"
+msgstr "Temes"
+
 msgid "Allow all users to contact me"
 msgstr "Permet a tots els usuaris contactar amb mi"
 
@@ -13854,11 +13854,6 @@
 msgid "Pidgin smileys"
 msgstr "Emoticones del Pidgin"
 
-# Nom propi: http://www.penguinpimps.com/?
-# "proxenetes" no queda gens, s'hi podria posar alguna altra cosa (josep)
-msgid "Penguin Pimps"
-msgstr "Penguin Pimps"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Si seleccioneu això s'inhabilitaran les emoticones gràfiques."
 
@@ -14505,6 +14500,9 @@
 msgid "Conversation Entry"
 msgstr "Entrada de la conversa"
 
+msgid "Conversation History"
+msgstr "Històric de converses"
+
 msgid "Request Dialog"
 msgstr "Diàleg de sol·licitud"
 
@@ -15038,6 +15036,27 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Aquest connector és útil per a depurar servidors i clients XMPP."
 
+#~ msgid "(Default)"
+#~ msgstr "(Predeterminat)"
+
+#~ msgid "Install Theme"
+#~ msgstr "Instal·la el tema"
+
+#~ msgid "Icon"
+#~ msgstr "Icona"
+
+#~ msgid "Use document font from _theme"
+#~ msgstr "_Empra el tipus de lletra del document del tema"
+
+#~ msgid "Proxy Server &amp; Browser"
+#~ msgstr "Servidor intermediari i navegador"
+
+#~ msgid "Auto-away"
+#~ msgstr "Auto-absència"
+
+#~ msgid "Change _status to:"
+#~ msgstr "Canvia l'_estat a:"
+
 #~ msgid "Send instant messages over multiple protocols"
 #~ msgstr "Envieu missatges instantanis en múltiples protocols"
 
@@ -15794,7 +15813,7 @@
 #~ msgstr "Estat desconegut"
 
 #~ msgid "You entered a group ID outside the acceptable range"
-#~ msgstr "Heu entrat un identificador de grup fora del rang"
+#~ msgstr "Heu introduït un identificador de grup fora del rang"
 
 #~ msgid "Are you sure you want to leave this Qun?"
 #~ msgstr "Esteu segur que voleu deixar aquest Qun?"
@@ -16074,9 +16093,6 @@
 #~ msgid "_Send To"
 #~ msgstr "_Envia a"
 
-#~ msgid "Conversation History"
-#~ msgstr "Històric de converses"
-
 #~ msgid "Log Viewer"
 #~ msgstr "Visualitzador del registre"
 
@@ -17344,9 +17360,6 @@
 #~ msgid "Burmese"
 #~ msgstr "Birmà"
 
-#~ msgid "Ukrainian"
-#~ msgstr "Ucraïnès"
-
 #~ msgid "Xhosa"
 #~ msgstr "Xosa"
 
--- a/po/de.po	Mon Nov 23 21:32:39 2009 +0000
+++ b/po/de.po	Sun Nov 29 18:53:11 2009 +0000
@@ -11,9 +11,9 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-23 19:22+0100\n"
-"PO-Revision-Date: 2009-11-23 19:21+0100\n"
-"Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n"
+"POT-Creation-Date: 2009-11-26 22:45+0100\n"
+"PO-Revision-Date: 2009-11-26 22:44+0100\n"
+"Last-Translator: Björn Voigt <bjoern@cs.tu-berlin.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -12083,6 +12083,9 @@
 msgid "Mongolian"
 msgstr "Mongolisch"
 
+msgid "Malay"
+msgstr "Malaiisch"
+
 msgid "Bokmål Norwegian"
 msgstr "Bokmål Norwegisch"
 
@@ -12152,6 +12155,9 @@
 msgid "Turkish"
 msgstr "Türkisch"
 
+msgid "Ukranian"
+msgstr "Ukrainisch"
+
 msgid "Urdu"
 msgstr "Urdu"
 
--- a/po/fr.po	Mon Nov 23 21:32:39 2009 +0000
+++ b/po/fr.po	Sun Nov 29 18:53:11 2009 +0000
@@ -21,8 +21,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:34-0500\n"
-"PO-Revision-Date: 2009-08-29 09:40+0200\n"
+"POT-Creation-Date: 2009-11-28 15:44+0100\n"
+"PO-Revision-Date: 2009-11-28 15:03+0100\n"
 "Last-Translator: Éric Boumaour <zongo_fr@users.sourceforge.net>\n"
 "Language-Team: fr <fr@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -644,9 +644,8 @@
 msgid "Enable Sounds"
 msgstr "Activer les sons"
 
-#, fuzzy
 msgid "You are not connected."
-msgstr "Impossible de se connecter."
+msgstr "Vous n'êtes pas connecté."
 
 msgid "<AUTO-REPLY> "
 msgstr "<Réponse automatique> "
@@ -657,9 +656,8 @@
 msgstr[0] "Liste de %d utilisateur :\n"
 msgstr[1] "Liste de %d utilisateurs :\n"
 
-#, fuzzy
 msgid "Supported debug options are: plugins version"
-msgstr "Les options de débuggage supportées sont : version"
+msgstr "Les options de débuggage supportées sont : plugins version"
 
 msgid "No such command (in this context)."
 msgstr "Cette commande n'existe pas dans ce contexte."
@@ -1545,10 +1543,10 @@
 
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr ""
+msgstr "TinyURL pour ci-dessus : %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr ""
+msgstr "Veuillez patientez pendant que TinyURL génère une URL plus courte..."
 
 msgid "Only create TinyURL for URLs of this length or greater"
 msgstr "Création de TinyURL seulement pour les liens de cette taille mini"
@@ -1570,6 +1568,7 @@
 msgid "Online"
 msgstr "En ligne"
 
+#. primative,						no,							id,			name
 msgid "Offline"
 msgstr "Déconnecté"
 
@@ -1678,6 +1677,8 @@
 "The certificate is not trusted because no certificate that can verify it is "
 "currently trusted."
 msgstr ""
+"Il n'y a pas de confiance dans ce certificat parce qu'il n'y a pas de "
+"confiance dans aucun des certificats qui le vérifient."
 
 msgid "The certificate is not valid yet."
 msgstr "Le certificat n'est pas encore valide."
@@ -1909,9 +1910,9 @@
 msgid "Resolver process exited without answering our request"
 msgstr "Le processus de résolution s'est arrêté sans répondre."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "Erreur à la résolution du nom %s : %d"
+msgstr "Erreur à la conversion de %s en punycode : %d"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -2234,17 +2235,14 @@
 msgid "A non-recoverable Farsight2 error has occurred."
 msgstr "Une erreur insurmontable de Farsight2 est survenue."
 
-#, fuzzy
 msgid "Conference error"
-msgstr "Erreur de conférence."
-
-#, fuzzy
+msgstr "Erreur de conférence"
+
 msgid "Error with your microphone"
-msgstr "Problème avec votre micro."
-
-#, fuzzy
+msgstr "Problème avec votre micro"
+
 msgid "Error with your webcam"
-msgstr "Problème avec votre webcam."
+msgstr "Problème avec votre webcam"
 
 #, c-format
 msgid "Error creating session: %s"
@@ -3199,10 +3197,12 @@
 msgid "Add to chat..."
 msgstr "Ajouter à la discussion..."
 
+#. 0
 #. Global
 msgid "Available"
 msgstr "Disponible"
 
+#. 1
 #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
 #. Away stuff
@@ -4024,12 +4024,14 @@
 msgstr "Déconnexion"
 
 # Pour avoir le même texte que « Free for Chat »
+#. 2
 msgid "Chatty"
 msgstr "Libre pour discuter"
 
 msgid "Extended Away"
 msgstr "Longue absence"
 
+#. 3
 msgid "Do Not Disturb"
 msgstr "Ne pas déranger"
 
@@ -4297,6 +4299,7 @@
 msgid "None (To pending)"
 msgstr "Aucune (Destination en attente)"
 
+#. 0
 msgid "None"
 msgstr "Aucun"
 
@@ -4606,9 +4609,8 @@
 msgid "configure:  Configure a chat room."
 msgstr "configure : Configurer un salon de discussions"
 
-#, fuzzy
 msgid "part [message]:  Leave the room."
-msgstr "part [salon] : Quitter le salon"
+msgstr "part [salon] : Quitter le salon."
 
 msgid "register:  Register with a chat room."
 msgstr "register : S'enregistrer dans un salon"
@@ -5280,7 +5282,7 @@
 "Le support de SSL est nécessaire pour MSN. Veuillez installer une "
 "bibliothèque SSL pour l'application."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
@@ -5509,9 +5511,8 @@
 msgid "Unknown error (%d)"
 msgstr "Erreur inconnue (%d)"
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "Impossible d'ajouter un utilisateur"
+msgstr "Impossible de supprimer l'utilisateur"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "Le message mobile n'a pas été envoyé parce qu'il est trop long."
@@ -5751,28 +5752,84 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "L'utilisateur %s vous a supprimé de sa liste de contacts."
 
+#. 1
+msgid "Angry"
+msgstr "En colère"
+
+#. 2
+msgid "Excited"
+msgstr "Excité"
+
+#. 3
+msgid "Grumpy"
+msgstr "Grognon"
+
+#. 4
+msgid "Happy"
+msgstr "Heureux"
+
+#. 5
+msgid "In Love"
+msgstr "Amoureux"
+
+#. 6
+msgid "Invincible"
+msgstr "Invincible"
+
+#. 7
+msgid "Sad"
+msgstr "Triste"
+
+#. 8
+msgid "Hot"
+msgstr "Chaud"
+
+#. 9
+msgid "Sick"
+msgstr "Malade"
+
+#. 10
+msgid "Sleepy"
+msgstr "Somnolant"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "Votre humeur actuelle"
+msgstr "Humeur actuelle"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Humeur de l'utilisateur"
-
-#, fuzzy
+msgstr "Nouvelle humeur"
+
 msgid "Change your Mood"
-msgstr "Changer de mot de passe"
-
-#, fuzzy
+msgstr "Changer d'humeur"
+
 msgid "How do you feel right now?"
-msgstr "Je ne suis pas là pour l'instant."
+msgstr "Comment vous sentez-vous ?"
+
+msgid "The PIN you entered is invalid."
+msgstr "Le code d'accès est non valide."
+
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "Le code d'accès n'a pas la bonne longueur [4-10]."
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr ""
+"Le code d'accès est non valide. Il doit être uniquement composé de chiffres."
+
+msgid "The two PINs you entered do not match."
+msgstr "Les nouveaux codes d'accès diffèrent."
+
+msgid "The name you entered is invalid."
+msgstr "Le nom saisi est non valide."
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr ""
+"La date de naissance saisie est non valide. Le format est : AAAA-MM-JJ."
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "Erreur d'écriture"
+msgstr "Erreur à la mise à jour du profil"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5781,353 +5838,303 @@
 
 msgid "Your profile information is not yet retrieved. Please try again later."
 msgstr ""
+"Les informations de votre profil n'ont pu être récupérées. Veuillez "
+"réessayer plus tard."
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "Code"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "Vérification code"
 
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "Nom de famille"
+msgstr "Nom affiché"
 
 #. hidden
 msgid "Hide my number"
-msgstr ""
+msgstr "Cacher mon numéro"
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
 msgstr "Téléphone portable"
 
-#, fuzzy
 msgid "Update your Profile"
-msgstr "Profil de l'utilisateur"
+msgstr "Mettre à jour votre profil"
 
 msgid "Here you can update your MXit profile"
-msgstr ""
+msgstr "Vous pouvez mettre à jour votre profil MXit ici"
 
 msgid "View Splash"
-msgstr ""
+msgstr "Voir la bannière"
 
 msgid "There is no splash-screen currently available"
-msgstr ""
-
-#, fuzzy
+msgstr "Il n'y a pas de bannière disponible pour l'instant"
+
 msgid "About"
-msgstr "À mon propos"
+msgstr "À propos"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "Changer de mot de passe..."
+msgstr "Changer d'humeur..."
 
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "Changer de mot de passe..."
+msgstr "Changer le profil..."
 
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "Voir les archives..."
+msgstr "Voir la bannière..."
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "À mon propos"
+msgstr "À propos..."
 
 #. the file is too big
-#, fuzzy
 msgid "The file you are trying to send is too large!"
-msgstr "Message trop long"
-
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
+msgstr "Le fichier que vous voulez envoyer est trop gros !"
+
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"Impossible de se connecter au serveur HTTP MXit. Veuillez vérifier votre "
+"configuration."
+
 msgid "Logging In..."
-msgstr "Connexion"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
-msgstr ""
-"Impossible de se connecter au serveur. Veuillez saisir l'adresse du serveur "
-"sur lequel vous voulez vous connecter."
-
-#, fuzzy
+msgstr "Connexion..."
+
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr ""
+"Impossible de se connecter au serveur MXit. Veuillez vérifier votre "
+"configuration."
+
 msgid "Connecting..."
-msgstr "Connexion en cours"
+msgstr "Connexion..."
+
+msgid "The nick name you entered is invalid."
+msgstr "Le pseudo saisi est non valide."
+
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "Le code d'accès saisi n'a pas la bonne taille [7-10]."
 
 #. mxit login name
 msgid "MXit Login Name"
-msgstr ""
+msgstr "Nom d'utilisateur MXit"
 
 #. nick name
-#, fuzzy
 msgid "Nick Name"
 msgstr "Pseudonyme"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "Enregistrer un nouveau compte XMPP"
-
-#, fuzzy
+msgstr "Enregistrer un nouveau compte MXit"
+
 msgid "Please fill in the following fields:"
-msgstr "Veuillez renseigner les rubriques suivantes"
+msgstr "Veuillez renseigner les rubriques suivantes :"
 
 #. no reply from the WAP site
 msgid "Error contacting the MXit WAP site. Please try again later."
 msgstr ""
+"Erreur à la connexion au site WAP de MXit. Veuillez réessayer plus tard."
 
 #. wapserver error
 #. server could not find the user
 msgid ""
 "MXit is currently unable to process the request. Please try again later."
 msgstr ""
+"MXit ne peut gérer cette requête pour l'instant. Veuillez réessayer plus "
+"tard."
 
 msgid "Wrong security code entered. Please try again later."
-msgstr ""
+msgstr "Mauvais code de sécurité saisi. Veuillez réessayer plus tard."
 
 msgid "Your session has expired. Please try again later."
-msgstr ""
+msgstr "Votre session a expirée. Veuillez réessayer plus tard."
 
 msgid "Invalid country selected. Please try again."
-msgstr ""
+msgstr "Pays choisi non valide. Veuillez réessayer plus tard."
 
 msgid "Username is not registered. Please register first."
 msgstr ""
+"Le nom d'utilisateur n'est pas enregistré. Veuillez l'enregistrer d'abord."
 
 msgid "Username is already registered. Please choose another username."
 msgstr ""
-
-#, fuzzy
+"Le nom d'utilisateur est déjà enregistré. Veuillez en choisir un autre."
+
 msgid "Internal error. Please try again later."
-msgstr "Le serveur est non disponible. Veuillez réessayer plus tard."
+msgstr "Erreur interne. Veuillez réessayer plus tard."
 
 msgid "You did not enter the security code"
-msgstr ""
-
-#, fuzzy
+msgstr "Vous n'avez pas saisi le code de sécurité"
+
 msgid "Security Code"
-msgstr "Sécurité activée"
+msgstr "Code de sécurité"
 
 #. ask for input
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "Saisissez le code"
-
-#, fuzzy
+msgstr "Saisissez le code de sécurité"
+
 msgid "Your Country"
-msgstr "Pays"
-
-#, fuzzy
+msgstr "Votre pays"
+
 msgid "Your Language"
-msgstr "Langue préférée"
+msgstr "Votre langue"
 
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "Demande d'autorisation"
+msgstr "Autorisation MXit"
 
 msgid "MXit account validation"
-msgstr ""
-
-#, fuzzy
+msgstr "Validation du compte MXit"
+
 msgid "Retrieving User Information..."
-msgstr "Informations du serveur"
-
-#, fuzzy
+msgstr "Récupération des informations de l'utilisateur..."
+
+msgid "Loading menu..."
+msgstr "Chargement du menu..."
+
 msgid "Status Message"
-msgstr "Messages envoyés"
-
-#, fuzzy
+msgstr "Messages d'état"
+
 msgid "Hidden Number"
-msgstr "Deuxième prénom"
-
-#, fuzzy
+msgstr "Numéro caché"
+
 msgid "Your Mobile Number..."
-msgstr "Changer le numéro de téléphone portable..."
+msgstr "Votre numéro de téléphone portable..."
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
 msgid "WAP Server"
-msgstr "Serveur"
-
-#, fuzzy
+msgstr "Serveur WAP"
+
 msgid "Connect via HTTP"
-msgstr "Connexion par TCP"
+msgstr "Connexion par HTTP"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "Activer l'affichage de la bannière"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr ""
+msgstr "Connexion perdue avec MXit. Veuillez vous reconnecter."
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "Erreur message XMPP"
-
-#, fuzzy
+msgstr "Erreur à l'envoi du message"
+
 msgid "Unable to process your request at this time"
-msgstr "Impossible de résoudre l'adresse internet."
+msgstr "Impossible d'effectuer votre requête en ce moment."
 
 msgid "Timeout while waiting for a response from the MXit server."
-msgstr ""
-
-#, fuzzy
+msgstr "Temps d'attente dépassé pour la réponse du serveur MXit."
+
 msgid "Successfully Logged In..."
-msgstr "Entrée réussie dans le Qun"
-
-#, fuzzy
+msgstr "Connexion réussie..."
+
+#, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr "%s vous a envoyé un message chiffré, ce qui n'est pas supporté."
+
 msgid "Message Error"
-msgstr "Erreur message XMPP"
+msgstr "Erreur de message"
 
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "Impossible de faire une redirection avec le protocole utilisé"
+
+msgid "An internal MXit server error occurred."
+msgstr "Une erreur interne au serveur MXit est survenue."
+
+#, c-format
+msgid "Login error: %s (%i)"
+msgstr "Erreur de connexion : %s (%i)"
+
+#, c-format
+msgid "Logout error: %s (%i)"
+msgstr "Erreur de déconnexion : %s (%i)"
+
 msgid "Contact Error"
-msgstr "Erreur de connexion"
-
-#, fuzzy
+msgstr "Erreur de contact"
+
 msgid "Message Sending Error"
-msgstr "Erreur message XMPP"
-
-#, fuzzy
+msgstr "Erreur à l'envoi du message"
+
 msgid "Status Error"
-msgstr "Erreur dans le flux"
-
-#, fuzzy
+msgstr "Erreur de message d'état"
+
 msgid "Mood Error"
-msgstr "Erreur d'icône"
-
-#, fuzzy
+msgstr "Erreur d'humeur"
+
 msgid "Invitation Error"
-msgstr "Erreur de désinscription"
-
-#, fuzzy
+msgstr "Erreur d'invitation"
+
 msgid "Contact Removal Error"
-msgstr "Erreur de connexion"
-
-#, fuzzy
+msgstr "Erreur de suppression de contact"
+
 msgid "Subscription Error"
-msgstr "Inscription"
-
-#, fuzzy
+msgstr "Erreur d'inscription"
+
 msgid "Contact Update Error"
-msgstr "Erreur de connexion"
-
-#, fuzzy
+msgstr "Erreur de mise à jour de contact"
+
 msgid "File Transfer Error"
-msgstr "Transfert de fichier"
-
-#, fuzzy
+msgstr "Erreur de transfert de fichier"
+
 msgid "Cannot create MultiMx room"
-msgstr "Impossible de créer l'alerte"
-
-#, fuzzy
+msgstr "Impossible de créer un salon MultiMx"
+
 msgid "MultiMx Invitation Error"
-msgstr "Erreur de désinscription"
-
-#, fuzzy
+msgstr "Erreur d'invitation MultiMx"
+
 msgid "Profile Error"
-msgstr "Erreur d'écriture"
+msgstr "Erreur de profil"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
+msgstr "Paquet de données non valide reçu du serveur MXit."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "Erreur de connexion MXit (étape de lecture 0x01)."
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
+msgstr "Erreur de connexion MXit (étape de lecture 0x02)."
 
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
+msgstr "Erreur de connexion MXit (étape de lecture 0x03)."
 
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
+msgstr "Erreur de connexion MXit (étape de lecture 0x04)."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
+msgstr "Erreur de connexion MXit (étape de lecture 0x05)."
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-msgid "Angry"
-msgstr "En colère"
-
-msgid "Excited"
-msgstr "Excité"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Groupe"
-
-msgid "Happy"
-msgstr "Heureux"
-
-msgid "In Love"
-msgstr "Amoureux"
-
-msgid "Invincible"
-msgstr "Invincible"
-
-msgid "Sad"
-msgstr "Triste"
-
-#, fuzzy
-msgid "Hot"
-msgstr "_Hôte :"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Pseudonyme"
-
-msgid "Sleepy"
-msgstr "Somnolant"
-
-#, fuzzy
+msgstr "Erreur de connexion MXit (étape de lecture 0x06)."
+
 msgid "Pending"
-msgstr "Envoi en cours"
-
-#, fuzzy
+msgstr "En attente"
+
 msgid "Invited"
-msgstr "Inviter"
-
-#, fuzzy
+msgstr "Invité"
+
 msgid "Rejected"
-msgstr "Refuser"
-
-#, fuzzy
+msgstr "Refusé"
+
 msgid "Deleted"
-msgstr "Supprimer"
+msgstr "Supprimé"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "Publicité MXit"
+
 msgid "More Information"
-msgstr "Informations professionnelles"
+msgstr "Plus d'informations"
 
 #, c-format
 msgid "No such user: %s"
@@ -6908,46 +6915,42 @@
 msgstr "Impossible sur AOL"
 
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
+msgstr "Impossible de recevoir le message à cause du contrôle parental"
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "Impossible d'envoyer de SMS sans accepter les termes"
+
 msgid "Cannot send SMS"
-msgstr "Impossible d'envoyer le fichier"
+msgstr "Impossible d'envoyer le SMS"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "Impossible d'envoyer un dossier."
+msgstr "Impossible d'envoyer le SMS vers ce pays"
 
 #. Undocumented
 msgid "Cannot send SMS to unknown country"
-msgstr ""
+msgstr "Impossible d'envoyer le SMS vers un pays inconnu"
 
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
+msgstr "Les comptes Bot ne peuvent pas commencer les conversations"
 
 msgid "Bot account cannot IM this user"
-msgstr ""
+msgstr "Le compte Bot ne peut pas envoyer de message à cette personne"
 
 msgid "Bot account reached IM limit"
-msgstr ""
+msgstr "Le compte Bot a atteint sa limite de messages"
 
 msgid "Bot account reached daily IM limit"
-msgstr ""
+msgstr "Le compte Bot a atteint sa limite de messages quotidiens"
 
 msgid "Bot account reached monthly IM limit"
-msgstr ""
-
-#, fuzzy
+msgstr "Le compte Bot a atteint sa limite de messages mensuels"
+
 msgid "Unable to receive offline messages"
-msgstr "Impossible d'envoyer le message"
-
-#, fuzzy
+msgstr "Impossible de recevoir les messages déconnectés"
+
 msgid "Offline message store full"
-msgstr "Message déconnecté"
+msgstr "Stockage des messages déconnectés plein"
 
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
@@ -7118,7 +7121,6 @@
 msgstr "Le service est temporairement indisponible."
 
 #. username connecting too frequently
-#, fuzzy
 msgid ""
 "Your username has been connecting and disconnecting too frequently. Wait ten "
 "minutes and try again. If you continue to try, you will need to wait even "
@@ -7136,13 +7138,12 @@
 "à jour sur %s."
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "Your IP address has been connecting and disconnecting too frequently. Wait a "
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Vous vous reconnectez trop rapidement. Attendez quelques minutes et "
+"Votre adresse IP se reconnecte trop rapidement. Attendez quelques minutes et "
 "réessayez. Si vous persistez maintenant, il vous faudra attendre encore plus "
 "longtemps."
 
@@ -7291,21 +7292,21 @@
 msgstr[0] "Vous avez raté %hu message de %s pour des raisons inconnues."
 msgstr[1] "Vous avez raté %hu messages de %s pour des raisons inconnues."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "Impossible d'envoyer le message (%s)"
+msgstr "Impossible d'envoyer le message : %s (%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Impossible d'envoyer le message : %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "Impossible d'envoyer le message vers %s :"
-
-#, fuzzy, c-format
+msgstr "Impossible d'envoyer le message vers %s : %s (%s)"
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "Impossible d'envoyer le message vers %s :"
+msgstr "Impossible d'envoyer le message vers %s : %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7334,13 +7335,12 @@
 "[Impossible d'afficher un message de cet utilisateur car il contient des "
 "caractères non valides.]"
 
-#, fuzzy
 msgid ""
 "The last action you attempted could not be performed because you are over "
 "the rate limit. Please wait 10 seconds and try again.\n"
 msgstr ""
 "La dernière action n'a pas pu être effectuée car vous avez dépassé le quota "
-"limite. Veuillez attendre 10 secondes et réessayer."
+"limite. Veuillez attendre 10 secondes et réessayer.\n"
 
 #, c-format
 msgid "You have been disconnected from chat room %s."
@@ -10197,12 +10197,13 @@
 
 msgid "Can't send SMS. Unable to obtain mobile carrier."
 msgstr ""
+"Impossible d'envoyer le SMS. Impossible de trouver le fournisseur mobile."
 
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
+msgstr "Impossible d'envoyer le SNS. Fournisseur mobile inconnu."
 
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "Récupération du fournisseur mobile pour l'envoi du SMS."
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
@@ -10746,6 +10747,8 @@
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
+"Conversation par messages instantanés. Supporte AIM, Google Talk, Jabber/"
+"XMPP, MSN, Yahoo et d'autres"
 
 msgid "Internet Messenger"
 msgstr "Messagerie internet"
@@ -12017,6 +12020,9 @@
 msgid "Mongolian"
 msgstr "Mongol"
 
+msgid "Malay"
+msgstr "Malaisien"
+
 msgid "Bokmål Norwegian"
 msgstr "Norvégien bokmål"
 
@@ -12086,6 +12092,9 @@
 msgid "Turkish"
 msgstr "Turc"
 
+msgid "Ukranian"
+msgstr "Ukrainien"
+
 msgid "Urdu"
 msgstr "Ourdou"
 
@@ -12724,10 +12733,10 @@
 "\n"
 
 msgid "DIR"
-msgstr ""
+msgstr "DOS"
 
 msgid "use DIR for config files"
-msgstr "utilise le dossier DIR pour les fichiers de config"
+msgstr "utilise le dossier DOS pour les fichiers de config"
 
 msgid "print debugging messages to stdout"
 msgstr "affiche les messages de debug sur la sortie standard"
@@ -12745,16 +12754,17 @@
 msgstr "ne pas se connecter automatiquement"
 
 msgid "NAME"
-msgstr ""
-
-#, fuzzy
+msgstr "NOM"
+
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
 "                      specifies account(s) to use, separated by commas.\n"
 "                      Without this only the first account will be enabled)."
 msgstr ""
-"active certains comptes (l'argument facultatif NAME\n"
-"                      spécifie ces comptes, séparés par des virgules."
+"active certains comptes (l'argument facultatif NOM\n"
+"                      spécifie ces comptes, séparés par des "
+"virgules.                      Sans cela, seul le premier compte sera "
+"activé.)"
 
 msgid "X display to use"
 msgstr "affichage X à utiliser"
@@ -13020,21 +13030,19 @@
 msgstr "Événement d'alerte inconnu. Veuillez reporter cette erreur."
 
 msgid "(Custom)"
-msgstr ""
-
-#, fuzzy
-msgid "(Default)"
-msgstr "(défaut)"
+msgstr "(Personnalisé)"
+
+msgid "Penguin Pimps"
+msgstr "Penguin Pimps"
 
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Le thème de sons par défaut Pidgin"
+
 msgid "The default Pidgin buddy list theme"
-msgstr "Éditeur de thème de liste de contacts Pidgin"
+msgstr "Le thème de liste de contacts par défaut Pidgin"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "Le thème d'icônes par défaut Pidgin"
 
 msgid "Theme failed to unpack."
 msgstr "Le thème de frimousses n'a pas pu être déballé."
@@ -13045,19 +13053,30 @@
 msgid "Theme failed to copy."
 msgstr "Le thème de frimousses n'a pas pu être copié."
 
-msgid "Install Theme"
-msgstr "Installer un thème"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
-"Choisissez un thème de frimousses que vous voulez utiliser dans la liste ci-"
-"dessous.  De nouveau thèmes peuvent être installés en les faisant glisser "
-"dans la liste des thèmes."
-
-msgid "Icon"
-msgstr "Icône"
+msgid "Theme Selections"
+msgstr "Choix des thèmes"
+
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"Choisissez un thème que vous voulez utiliser dans la liste ci-dessous.\n"
+"De nouveau thèmes peuvent être installés en les faisant glisser dans la "
+"liste des thèmes."
+
+msgid "Buddy List Theme:"
+msgstr "Thème de liste de contacts :"
+
+msgid "Status Icon Theme:"
+msgstr "Thème d'icônes d'état :"
+
+msgid "Sound Theme:"
+msgstr "Thème de sons :"
+
+msgid "Smiley Theme:"
+msgstr "Thèmes de frimousses :"
 
 msgid "Keyboard Shortcuts"
 msgstr "Raccourcis clavier"
@@ -13065,10 +13084,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "Fermer les conversations avec la touche _Echap"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "Thème de liste de contacts"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "Icône de notification"
@@ -13155,9 +13170,6 @@
 msgid "Font"
 msgstr "Police"
 
-msgid "Use document font from _theme"
-msgstr "Utiliser la police de document du _thème"
-
 msgid "Use font from _theme"
 msgstr "Utiliser la police du thème"
 
@@ -13180,15 +13192,13 @@
 msgid "Cannot start browser configuration program."
 msgstr "Impossible de lancer le programme de configuration du navigateur."
 
-#, fuzzy
 msgid "Disabled"
-msgstr "_Désactiver"
+msgstr "Désactivé"
 
 #, c-format
 msgid "Use _automatically detected IP address: %s"
 msgstr "_Détection auto de l'adresse IP : %s"
 
-#, fuzzy
 msgid "ST_UN server:"
 msgstr "Serveur ST_UN :"
 
@@ -13204,78 +13214,27 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "_Activer la redirection automatique des ports du routeur"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "Spécifier _manuellement la plage de ports à écouter"
-
-#, fuzzy
+msgstr "Spécifier _manuellement la plage de ports à écouter :"
+
 msgid "_Start:"
-msgstr "É_tat :"
-
-#, fuzzy
+msgstr "_Début :"
+
 msgid "_End:"
-msgstr "_Etendre"
+msgstr "_Fin :"
 
 #. TURN server
 msgid "Relay Server (TURN)"
 msgstr "Serveur relai (TURN)"
 
-#, fuzzy
 msgid "_TURN server:"
-msgstr "Serveur ST_UN :"
-
-#, fuzzy
+msgstr "Serveur _TURN :"
+
 msgid "Use_rname:"
-msgstr "Utilisateur :"
-
-#, fuzzy
+msgstr "Utilisateu_r :"
+
 msgid "Pass_word:"
-msgstr "Mot de passe :"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "Serveur proxy &amp; navigateur"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>Le programme de configuration de proxy n'a pas été trouvé.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>Le programme de configuration du navigateur n'a pas été trouvé.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"Le choix du serveur proxy & navigateur\n"
-"est géré par les options de GNOME"
-
-msgid "Configure _Proxy"
-msgstr "_Configurer le proxy"
-
-msgid "Configure _Browser"
-msgstr "_Configurer le navigateur"
-
-msgid "Proxy Server"
-msgstr "Serveur proxy"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Utiliser une DNS distantes avec SOCKS4"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "_Type :"
-
-msgid "No proxy"
-msgstr "Aucun"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "_Port :"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Utilisateur :"
+msgstr "Mot de _passe :"
 
 msgid "Seamonkey"
 msgstr "Seamonkey"
@@ -13316,6 +13275,15 @@
 msgid "Browser Selection"
 msgstr "Choix du navigateur"
 
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr "Le choix du navigateur est géré par les options de GNOME"
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>Le programme de configuration du navigateur n'a pas été trouvé.</b>"
+
+msgid "Configure _Browser"
+msgstr "_Configurer le navigateur"
+
 msgid "_Browser:"
 msgstr "_Navigateur :"
 
@@ -13339,6 +13307,35 @@
 "_Manuel :\n"
 "(%s pour l'URL)"
 
+msgid "Proxy Server"
+msgstr "Serveur proxy"
+
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr "Le choix du serveur proxy est géré par les options de GNOME"
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>Le programme de configuration de proxy n'a pas été trouvé.</b>"
+
+msgid "Configure _Proxy"
+msgstr "_Configurer le proxy"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Utiliser une _DNS distantes avec SOCKS4"
+
+msgid "Proxy t_ype:"
+msgstr "_Typede proxy :"
+
+msgid "No proxy"
+msgstr "Aucun"
+
+msgid "P_ort:"
+msgstr "_Port :"
+
+msgid "User_name:"
+msgstr "Utilisateur :"
+
 msgid "Log _format:"
 msgstr "_Format des archives :"
 
@@ -13422,25 +13419,18 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Selon l'activité du clavier ou de la souris"
 
+msgid "_Minutes before becoming idle:"
+msgstr "_Minutes avant de passer inactif :"
+
+msgid "Change to this status when _idle:"
+msgstr "Changer vers cet état lorsque _inactif :"
+
 msgid "_Auto-reply:"
 msgstr "_Réponse automatique :"
 
 msgid "When both away and idle"
 msgstr "Lorsque absent et inactif"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Absence automatique"
-
-msgid "_Minutes before becoming idle:"
-msgstr "_Minutes avant de passer inactif :"
-
-msgid "Change status when _idle"
-msgstr "Changer d'état lorsque _inactif"
-
-msgid "Change _status to:"
-msgstr "_Changer l'état en :"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "État au démarrage"
@@ -13454,15 +13444,15 @@
 msgid "Interface"
 msgstr "Interface"
 
-msgid "Smiley Themes"
-msgstr "Thèmes des frimousses"
-
 msgid "Browser"
 msgstr "Navigateur"
 
 msgid "Status / Idle"
 msgstr "État / Inactivité"
 
+msgid "Themes"
+msgstr "Thèmes"
+
 msgid "Allow all users to contact me"
 msgstr "Permettre à tous les utilisateurs de me contacter"
 
@@ -13809,9 +13799,6 @@
 msgid "Pidgin smileys"
 msgstr "Frimousses de Pidgin"
 
-msgid "Penguin Pimps"
-msgstr "Penguin Pimps"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Ce choix désactive les frimousses graphiques."
 
@@ -14462,6 +14449,9 @@
 msgid "Conversation Entry"
 msgstr "Ligne de conversation"
 
+msgid "Conversation History"
+msgstr "Historique des conversations"
+
 msgid "Request Dialog"
 msgstr "Boite de message pour requête"
 
@@ -14925,9 +14915,8 @@
 msgid "_Start %s on Windows startup"
 msgstr "_Démarrer %s au lancement de Windows"
 
-#, fuzzy
 msgid "Allow multiple instances"
-msgstr "autoriser plusieurs instances du logiciel"
+msgstr "Autoriser plusieurs instances"
 
 msgid "_Dockable Buddy List"
 msgstr "Liste de contacts _accrochable"
@@ -14990,6 +14979,22 @@
 msgstr "Ce plugin est utile pour débugger les clients ou serveurs XMPP."
 
 #, fuzzy
+#~ msgid "(Default)"
+#~ msgstr "(défaut)"
+
+#~ msgid "Install Theme"
+#~ msgstr "Installer un thème"
+
+#~ msgid "Icon"
+#~ msgstr "Icône"
+
+#~ msgid "Auto-away"
+#~ msgstr "Absence automatique"
+
+#~ msgid "Change _status to:"
+#~ msgstr "_Changer l'état en :"
+
+#, fuzzy
 #~ msgid "The root certificate this one claims to be issued by is unknown."
 #~ msgstr ""
 #~ "Le certificat racine dont est prétendu issu ce certificat est inconnu de "
@@ -15010,9 +15015,6 @@
 #~ msgid "GTK+ Runtime Version"
 #~ msgstr "Version des bibliothèques GTK+"
 
-#~ msgid "Without this only the first account will be enabled)."
-#~ msgstr "Sans cela, seul le premier compte sera activé.)"
-
 #~ msgid "Calling ... "
 #~ msgstr "Appel... "
 
@@ -15507,9 +15509,6 @@
 #~ msgid "Burmese"
 #~ msgstr "Birman"
 
-#~ msgid "Ukrainian"
-#~ msgstr "Ukrainien"
-
 #~ msgid "Xhosa"
 #~ msgstr "Xhosa"
 
--- a/po/hu.po	Mon Nov 23 21:32:39 2009 +0000
+++ b/po/hu.po	Sun Nov 29 18:53:11 2009 +0000
@@ -10,8 +10,8 @@
 msgstr ""
 "Project-Id-Version: pidgin 2.5\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:34-0500\n"
-"PO-Revision-Date: 2009-08-29 00:59+0200\n"
+"POT-Creation-Date: 2009-11-26 13:07+0100\n"
+"PO-Revision-Date: 2009-11-26 13:06+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
 "Language-Team: Hungarian <gnome at fsf dot hu>\n"
 "MIME-Version: 1.0\n"
@@ -633,9 +633,8 @@
 msgid "Enable Sounds"
 msgstr "Hangok engedélyezése"
 
-#, fuzzy
 msgid "You are not connected."
-msgstr "Lezárta a kapcsolatot."
+msgstr "Nincs csatlakozva."
 
 msgid "<AUTO-REPLY> "
 msgstr "<AUTOMATIKUS VÁLASZ> "
@@ -646,9 +645,8 @@
 msgstr[0] "%d felhasználó listája:\n"
 msgstr[1] "%d felhasználó listája:\n"
 
-#, fuzzy
 msgid "Supported debug options are: plugins version"
-msgstr "A támogatott hibakeresési parancsok:  version"
+msgstr "A támogatott hibakeresési parancsok: plugins version"
 
 msgid "No such command (in this context)."
 msgstr "Nincs ilyen parancs (ebben a kontextusban)."
@@ -800,7 +798,7 @@
 
 #, c-format
 msgid "%.2f KiB/s"
-msgstr "%.2f KiB/mp"
+msgstr "%.2f KiB/s"
 
 msgid "Sent"
 msgstr "Elküldött"
@@ -1530,10 +1528,10 @@
 
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr ""
+msgstr "TinyURL a fentihez: %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr ""
+msgstr "Kis türelmet, a TinyURL rövidebb URL címet készít…"
 
 msgid "Only create TinyURL for URLs of this length or greater"
 msgstr "TinyURL készítése csak a legalább ilyen hosszú URL-címekhez"
@@ -1663,6 +1661,8 @@
 "The certificate is not trusted because no certificate that can verify it is "
 "currently trusted."
 msgstr ""
+"A tanúsítvány nem megbízható, mivel az ellenőrzésére képes egyik tanúsítvány "
+"sem megbízható."
 
 msgid "The certificate is not valid yet."
 msgstr "A tanúsítvány még nem érvényes."
@@ -1894,9 +1894,9 @@
 msgid "Resolver process exited without answering our request"
 msgstr "A feloldó folyamat a kérés megválaszolása nélkül lépett ki"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "Hiba %s feloldásakor: %d"
+msgstr "Hiba %s átalakításakor punycode-ra: %d"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -2215,17 +2215,14 @@
 msgid "A non-recoverable Farsight2 error has occurred."
 msgstr "Helyrehozhatatlan Farsight2 hiba történt."
 
-#, fuzzy
 msgid "Conference error"
 msgstr "Konferenciahiba"
 
-#, fuzzy
 msgid "Error with your microphone"
-msgstr "Hiba történt a mikrofonnal."
-
-#, fuzzy
+msgstr "Hiba történt a mikrofonnal"
+
 msgid "Error with your webcam"
-msgstr "Hiba történt a webkamerával."
+msgstr "Hiba történt a webkamerával"
 
 #, c-format
 msgid "Error creating session: %s"
@@ -3993,6 +3990,10 @@
 msgid "Log Out"
 msgstr "Kijelentkezés"
 
+#. primative,						no,							id,			name
+#. 0
+#. 1
+#. 2
 msgid "Chatty"
 msgstr "Beszédes"
 
@@ -4261,6 +4262,7 @@
 msgid "None (To pending)"
 msgstr "Senki (Címzett függőben)"
 
+#. 0
 msgid "None"
 msgstr "Nincs"
 
@@ -4571,9 +4573,8 @@
 msgid "configure:  Configure a chat room."
 msgstr "configure:  Csevegőszoba beállítása."
 
-#, fuzzy
 msgid "part [message]:  Leave the room."
-msgstr "part [szoba]:  A szoba elhagyása."
+msgstr "part [üzenet]:  A szoba elhagyása."
 
 msgid "register:  Register with a chat room."
 msgstr "register:  Regisztráció csevegőszobánál."
@@ -5242,7 +5243,7 @@
 "Az MSN használatához SSL támogatás szükséges. Telepítsen egy támogatott SSL "
 "könyvtárat."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
@@ -5472,9 +5473,8 @@
 msgid "Unknown error (%d)"
 msgstr "Ismeretlen hiba (%d)"
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "Nem vehető fel a felhasználó"
+msgstr "Nem törölhető a felhasználó"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "A mobilüzenet nem küldhető el, mert túl hosszú."
@@ -5712,28 +5712,82 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "%s eltávolította Önt a partnerlistájáról."
 
+#. 1
+msgid "Angry"
+msgstr "Dühös"
+
+#. 2
+msgid "Excited"
+msgstr "Érdeklődő"
+
+#. 3
+msgid "Grumpy"
+msgstr "Rosszkedvű"
+
+#. 4
+msgid "Happy"
+msgstr "Boldog"
+
+#. 5
+msgid "In Love"
+msgstr "Szerelmes"
+
+#. 6
+msgid "Invincible"
+msgstr "Legyőzhetetlen"
+
+#. 7
+msgid "Sad"
+msgstr "Szomorú"
+
+#. 8
+msgid "Hot"
+msgstr "Forró"
+
+#. 9
+msgid "Sick"
+msgstr "Beteg"
+
+#. 10
+msgid "Sleepy"
+msgstr "Álmos"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "Az Ön jelenlegi hangulata"
+msgstr "Jelenlegi hangulat"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Hangulat"
-
-#, fuzzy
+msgstr "Új hangulat"
+
 msgid "Change your Mood"
-msgstr "Jelszó módosítása"
-
-#, fuzzy
+msgstr "Hangulat módosítása"
+
 msgid "How do you feel right now?"
-msgstr "Nem vagyok itt"
+msgstr "Hogy érzi magát?"
+
+msgid "The PIN you entered is invalid."
+msgstr "A megadott PIN érvénytelen."
+
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "A megadott PIN hossza érvénytelen [4-10]."
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr "A PIN érvénytelen. Csak számokból állhat [0-9]."
+
+msgid "The two PINs you entered do not match."
+msgstr "A megadott két PIN nem egyezik."
+
+msgid "The name you entered is invalid."
+msgstr "A megadott név érvénytelen."
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr "A megadott születésnap érvénytelen. A helyes formátum: „ÉÉÉÉ-HH-NN”."
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "Írási hiba"
+msgstr "Profilfrissítési hiba"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5741,354 +5795,298 @@
 msgstr "Profil"
 
 msgid "Your profile information is not yet retrieved. Please try again later."
-msgstr ""
+msgstr "A profilinformációi még nincsenek lekérve. Próbálja újra később."
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "PIN"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "PIN ellenőrzése"
 
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "Vezetéknév"
+msgstr "Megjelenő név"
 
 #. hidden
 msgid "Hide my number"
-msgstr ""
+msgstr "Rejtsd el a számom"
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
 msgstr "Mobiltelefonszám"
 
-#, fuzzy
 msgid "Update your Profile"
-msgstr "Yahoo! profil"
+msgstr "Profil frissítése"
 
 msgid "Here you can update your MXit profile"
-msgstr ""
+msgstr "Itt frissítheti MXit profilját"
 
 msgid "View Splash"
-msgstr ""
+msgstr "Indítókép megjelenítése"
 
 msgid "There is no splash-screen currently available"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem érhető el indítókép"
+
 msgid "About"
-msgstr "A névjegyem"
+msgstr "Névjegy"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "Jelszó módosítása…"
+msgstr "Hangulat módosítása…"
 
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "Jelszó módosítása…"
+msgstr "Profil módosítása…"
 
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "Napló megtekintése…"
+msgstr "Indítókép megtekintése…"
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "A névjegyem"
+msgstr "Névjegy…"
 
 #. the file is too big
-#, fuzzy
 msgid "The file you are trying to send is too large!"
-msgstr "Az üzenet túl nagy."
-
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
+msgstr "A küldeni kívánt fájl túl nagy."
+
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"Nem lehet kapcsolódni a Mxit HTTP kiszolgálóhoz. Ellenőrizze a kiszolgáló "
+"beállításait."
+
 msgid "Logging In..."
-msgstr "Bejelentkezés"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
-msgstr ""
-"Nem lehet kapcsolódni a kiszolgálóhoz. Adja meg a kiszolgáló címét, amelyhez "
-"kapcsolódni szeretne."
-
-#, fuzzy
+msgstr "Bejelentkezés…"
+
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr ""
+"Nem lehet kapcsolódni a MXit kiszolgálóhoz. Ellenőrizze a kiszolgáló "
+"beállításait."
+
 msgid "Connecting..."
-msgstr "Kapcsolódás"
+msgstr "Kapcsolódás…"
+
+msgid "The nick name you entered is invalid."
+msgstr "A megadott becenév érvénytelen."
+
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "A megadott PIN érvénytelen hosszúságú [7-10]."
 
 #. mxit login name
 msgid "MXit Login Name"
-msgstr ""
+msgstr "MXit bejelentkezési név"
 
 #. nick name
-#, fuzzy
 msgid "Nick Name"
 msgstr "Becenév"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "Új XMPP fiók regisztrálása"
-
-#, fuzzy
+msgstr "Új MXit fiók regisztrálása"
+
 msgid "Please fill in the following fields:"
-msgstr "Töltse ki az alábbi mezőket"
+msgstr "Töltse ki az alábbi mezőket:"
 
 #. no reply from the WAP site
 msgid "Error contacting the MXit WAP site. Please try again later."
-msgstr ""
+msgstr "Hiba a MXit WAP oldalhoz kapcsolódáskor. Próbálja újra később."
 
 #. wapserver error
 #. server could not find the user
 msgid ""
 "MXit is currently unable to process the request. Please try again later."
-msgstr ""
+msgstr "A MXit jelenleg nem képes feldolgozni a kérést. Próbálja újra később."
 
 msgid "Wrong security code entered. Please try again later."
-msgstr ""
+msgstr "A megadott biztonsági kód hibás. Próbálja újra később."
 
 msgid "Your session has expired. Please try again later."
-msgstr ""
+msgstr "A munkamenet lejárt. Próbálja újra később."
 
 msgid "Invalid country selected. Please try again."
-msgstr ""
+msgstr "Érvénytelen országot választott. Próbálja újra később."
 
 msgid "Username is not registered. Please register first."
-msgstr ""
+msgstr "A felhasználónév nincs regisztrálva. Először regisztráljon."
 
 msgid "Username is already registered. Please choose another username."
 msgstr ""
-
-#, fuzzy
+"A felhasználónév már használatban van. Válasszon másik felhasználónevet."
+
 msgid "Internal error. Please try again later."
-msgstr "A kiszolgáló nem érhető el, próbálkozzon később"
+msgstr "Belső hiba. Próbálja újra később."
 
 msgid "You did not enter the security code"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem adta meg a biztonsági kódot."
+
 msgid "Security Code"
-msgstr "Biztonság engedélyezve"
+msgstr "Biztonsági kód"
 
 #. ask for input
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "Adja meg a kódot"
-
-#, fuzzy
+msgstr "Adja meg a biztonsági kódot"
+
 msgid "Your Country"
 msgstr "Ország"
 
-#, fuzzy
 msgid "Your Language"
-msgstr "Előnyben részesített nyelv"
+msgstr "Nyelv"
 
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "Engedélyezés kérése"
+msgstr "MXit engedélyezés"
 
 msgid "MXit account validation"
-msgstr ""
-
-#, fuzzy
+msgstr "Mxit fiókellenőrzés"
+
 msgid "Retrieving User Information..."
-msgstr "Kiszolgálóinformációk"
-
-#, fuzzy
+msgstr "Felhasználóinformációk lekérése…"
+
+msgid "Loading menu..."
+msgstr "Menü betöltése…"
+
 msgid "Status Message"
-msgstr "Elküldött üzenetek"
-
-#, fuzzy
+msgstr "Állapotüzenet"
+
 msgid "Hidden Number"
-msgstr "Középső név"
-
-#, fuzzy
+msgstr "Rejtett szám"
+
 msgid "Your Mobile Number..."
-msgstr "Mobiltelefonszám beállítása…"
+msgstr "Az Ön mobiltelefonszáma…"
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
 msgid "WAP Server"
-msgstr "Kiszolgáló"
-
-#, fuzzy
+msgstr "WAP kiszolgáló"
+
 msgid "Connect via HTTP"
-msgstr "Kapcsolódás TCP segítségével"
+msgstr "Kapcsolódás HTTP segítségével"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "Felugró indítókép engedélyezése"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr ""
+msgstr "A kapcsolat elveszett a MXithez. Csatlakozzon újra."
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "XMPP üzenethiba"
-
-#, fuzzy
+msgstr "Üzenetküldési hiba"
+
 msgid "Unable to process your request at this time"
-msgstr "Nem oldható fel a gépnév"
+msgstr "Nem dolgozható fel a kérés"
 
 msgid "Timeout while waiting for a response from the MXit server."
-msgstr ""
-
-#, fuzzy
+msgstr "Időtúllépés a MXit kiszolgáló válaszára várakozás közben."
+
 msgid "Successfully Logged In..."
-msgstr "Sikeresen csatlakozott a Qun-hoz"
-
-#, fuzzy
+msgstr "Sikeres bejelentkezés…"
+
+#, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr "%s titkosított üzenetet küldött, de ez még nem támogatott."
+
 msgid "Message Error"
-msgstr "XMPP üzenethiba"
+msgstr "Üzenethiba"
 
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem végezhető átirányítás a megadott protokoll használatával"
+
+msgid "An internal MXit server error occurred."
+msgstr "Belső MXit kiszolgálóhiba történt."
+
+#, c-format
+msgid "Login error: %s (%i)"
+msgstr "Bejelentkezési hiba: %s (%i)"
+
+#, c-format
+msgid "Logout error: %s (%i)"
+msgstr "Kijelentkezési hiba: %s (%i)"
+
 msgid "Contact Error"
-msgstr "Kapcsolódási hiba"
-
-#, fuzzy
+msgstr "Partnerhiba"
+
 msgid "Message Sending Error"
-msgstr "XMPP üzenethiba"
-
-#, fuzzy
+msgstr "Üzenetküldési hiba"
+
 msgid "Status Error"
-msgstr "Folyamhiba"
-
-#, fuzzy
+msgstr "Állapothiba"
+
 msgid "Mood Error"
-msgstr "Ikonhiba"
-
-#, fuzzy
+msgstr "Hangulathiba"
+
 msgid "Invitation Error"
-msgstr "Regisztrációtörlési hiba"
-
-#, fuzzy
+msgstr "Meghívási hiba"
+
 msgid "Contact Removal Error"
-msgstr "Kapcsolódási hiba"
-
-#, fuzzy
+msgstr "Partnereltávolítási hiba"
+
 msgid "Subscription Error"
-msgstr "Feliratkozás"
-
-#, fuzzy
+msgstr "Feliratkozási hiba"
+
 msgid "Contact Update Error"
-msgstr "Kapcsolódási hiba"
-
-#, fuzzy
+msgstr "Partnerfrissítési hiba"
+
 msgid "File Transfer Error"
-msgstr "Fájlátvitel"
-
-#, fuzzy
+msgstr "Fájlátviteli hiba"
+
 msgid "Cannot create MultiMx room"
-msgstr "Nem hozható létre figyelmeztetés"
-
-#, fuzzy
+msgstr "Nem hozható létre MultiMx szoba"
+
 msgid "MultiMx Invitation Error"
-msgstr "Regisztrációtörlési hiba"
-
-#, fuzzy
+msgstr "MultiMx meghívási hiba"
+
 msgid "Profile Error"
-msgstr "Írási hiba"
+msgstr "Profilhiba"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
+msgstr "Érvénytelen csomag érkezett a MXit-től."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x01)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x02)"
 
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x03)"
 
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x04)"
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x05)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-msgid "Angry"
-msgstr "Dühös"
-
-msgid "Excited"
-msgstr "Érdeklődő"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Csoport"
-
-msgid "Happy"
-msgstr "Boldog"
-
-msgid "In Love"
-msgstr "Szerelmes"
-
-msgid "Invincible"
-msgstr "Legyőzhetetlen"
-
-msgid "Sad"
-msgstr "Szomorú"
-
-#, fuzzy
-msgid "Hot"
-msgstr "_Gépnév:"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Becenév"
-
-msgid "Sleepy"
-msgstr "Álmos"
-
-#, fuzzy
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x06)"
+
 msgid "Pending"
-msgstr "Küldés"
-
-#, fuzzy
+msgstr "Függőben"
+
 msgid "Invited"
-msgstr "Meghívás"
-
-#, fuzzy
+msgstr "Meghívva"
+
 msgid "Rejected"
-msgstr "Visszautasítás"
-
-#, fuzzy
+msgstr "Visszautasítva"
+
 msgid "Deleted"
-msgstr "Törlés"
+msgstr "Törölve"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit hirdetés"
+
 msgid "More Information"
-msgstr "Munkahelyi adatok"
+msgstr "További információk"
 
 #, c-format
 msgid "No such user: %s"
@@ -6866,46 +6864,42 @@
 msgstr "Nem, amíg az AOL-on tartózkodik"
 
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
+msgstr "Nem fogadható üzenet a szülői felügyelet miatt"
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem küldhető SMS a feltételek elfogadása nélkül"
+
 msgid "Cannot send SMS"
-msgstr "A fájl nem küldhető el"
+msgstr "Nem küldhető SMS"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "Könyvtár nem küldhető."
+msgstr "Nem küldhető SMS ebbe az országba"
 
 #. Undocumented
 msgid "Cannot send SMS to unknown country"
-msgstr ""
+msgstr "Nem küldhető SMS ismeretlen országba"
 
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
+msgstr "Botfiókok nem kezdeményezhetnek azonnali üzenetküldést"
 
 msgid "Bot account cannot IM this user"
-msgstr ""
+msgstr "Botfiókok nem küldhetnek azonnali üzenetet a felhasználónak"
 
 msgid "Bot account reached IM limit"
-msgstr ""
+msgstr "A botfiók elérte az azonnali üzenetek korlátját"
 
 msgid "Bot account reached daily IM limit"
-msgstr ""
+msgstr "A botfiók elérte a napi azonnali üzenetek korlátját"
 
 msgid "Bot account reached monthly IM limit"
-msgstr ""
-
-#, fuzzy
+msgstr "A botfiók elérte a havi azonnali üzenetek korlátját"
+
 msgid "Unable to receive offline messages"
-msgstr "Az üzenetet nem lehet elküldeni."
-
-#, fuzzy
+msgstr "Nem lehet offline üzeneteket fogadni"
+
 msgid "Offline message store full"
-msgstr "Offline üzenet"
+msgstr "Az offline üzenetek tárolója megtelt"
 
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
@@ -7076,14 +7070,13 @@
 msgstr "Az AOL azonnali üzenő szolgáltatás átmenetileg nem érhető el."
 
 #. username connecting too frequently
-#, fuzzy
 msgid ""
 "Your username has been connecting and disconnecting too frequently. Wait ten "
 "minutes and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Ön túl gyakran jelentkezik ki/be. Várjon tíz percet és próbálja meg újra. Ha "
-"tovább folytatja, még többet kell majd várnia."
+"A felhasználóneve túl gyakran jelentkezik ki/be. Várjon tíz percet és "
+"próbálja meg újra. Ha tovább próbálkozik, még többet kell majd várnia."
 
 #. client too old
 #, c-format
@@ -7093,14 +7086,13 @@
 "következő helyről: %s"
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "Your IP address has been connecting and disconnecting too frequently. Wait a "
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Ön túl gyakran jelentkezik ki/be. Várjon egy percet és próbálja meg újra. Ha "
-"tovább folytatja, még többet kell majd várnia."
+"Az IP-címe túl gyakran jelentkezik ki/be. Várjon egy percet és próbálja meg "
+"újra. Ha tovább próbálkozik, még többet kell majd várnia."
 
 msgid "The SecurID key entered is invalid"
 msgstr "A megadott SecurID kulcs érvénytelen"
@@ -7254,21 +7246,21 @@
 msgstr[0] "Nem kapott meg %hu üzenetet a következőtől: %s, ismeretlen okból."
 msgstr[1] "Nem kapott meg %hu üzenetet a következőtől: %s, ismeretlen okból."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "Az üzenetet nem lehet elküldeni (%s)."
+msgstr "Az üzenetet nem lehet elküldeni: %s (%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Az üzenetet nem lehet elküldeni: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s:"
-
-#, fuzzy, c-format
+msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s: %s (%s)"
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s:"
+msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7297,13 +7289,12 @@
 "[Nem lehet megjeleníteni az üzenetet ettől a felhasználótól, mert az "
 "érvénytelen karaktereket tartalmazott.]"
 
-#, fuzzy
 msgid ""
 "The last action you attempted could not be performed because you are over "
 "the rate limit. Please wait 10 seconds and try again.\n"
 msgstr ""
-"Az utolsó művelet nem hajtható végre, mert a túllépte a sebességkorlátot. "
-"Kérem várjon 10 másodpercet és próbálja meg újra."
+"Az utolsó művelet nem hajtható végre, mert túllépte a sebességkorlátot. "
+"Kérem várjon 10 másodpercet és próbálja meg újra.\n"
 
 #, c-format
 msgid "You have been disconnected from chat room %s."
@@ -10169,13 +10160,13 @@
 msgstr "Bejövő levelek megnyitása"
 
 msgid "Can't send SMS. Unable to obtain mobile carrier."
-msgstr ""
+msgstr "Nem küldhető SMS. Nem található mobilszolgáltató."
 
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
+msgstr "Nem küldhető SMS. Ismeretlen mobilszolgáltató."
 
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "Mobilszolgáltató keresése az SMS elküldéséhez."
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
@@ -10717,6 +10708,8 @@
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
+"Azonnali üzenetküldés AIM, Google Talk, Jabber/XMPP, MSN, Yahoo és más "
+"protokollok támogatásával"
 
 msgid "Internet Messenger"
 msgstr "Azonnali üzenetküldés"
@@ -11986,6 +11979,9 @@
 msgid "Mongolian"
 msgstr "Mongol"
 
+msgid "Malay"
+msgstr "Maláj"
+
 msgid "Bokmål Norwegian"
 msgstr "Norvég Bokmål"
 
@@ -12055,6 +12051,9 @@
 msgid "Turkish"
 msgstr "török"
 
+msgid "Ukranian"
+msgstr "Ukrán"
+
 msgid "Urdu"
 msgstr "urdu"
 
@@ -12688,7 +12687,7 @@
 "\n"
 
 msgid "DIR"
-msgstr ""
+msgstr "KÖNYVTÁR"
 
 msgid "use DIR for config files"
 msgstr "a KÖNYVTÁR használata a beállítófájlokhoz"
@@ -12709,16 +12708,16 @@
 msgstr "ne jelentkezzen be automatikusan"
 
 msgid "NAME"
-msgstr ""
-
-#, fuzzy
+msgstr "NÉV"
+
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
 "                      specifies account(s) to use, separated by commas.\n"
 "                      Without this only the first account will be enabled)."
 msgstr ""
-"automatikus bejelentkezés (a NÉV paraméter megadja a\n"
-"                      használandó fiókok vesszőkkel tagolt listáját."
+"adott fiókok engedélyezése (a NÉV paraméter megadja a\n"
+"                      használandó fiókok vesszőkkel tagolt listáját.\n"
+"                      Enélkül csak az első fiók lesz engedélyezve."
 
 msgid "X display to use"
 msgstr "Használandó X-megjelenítő"
@@ -12981,21 +12980,19 @@
 msgstr "Ismeretlen… Kérjük jelentse ezt!"
 
 msgid "(Custom)"
-msgstr ""
-
-#, fuzzy
-msgid "(Default)"
-msgstr "(alapértelmezett)"
+msgstr "(Egyéni)"
+
+msgid "Penguin Pimps"
+msgstr "Penguin Pimps"
 
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Az alapértelmezett Pidgin hangtéma"
+
 msgid "The default Pidgin buddy list theme"
-msgstr "Pidgin partnerlistatéma-szerkesztő"
+msgstr "Az alapértelmezett Pidgin partnerlistatéma"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "Az alapértelmezett Pidgin állapotikon-téma"
 
 msgid "Theme failed to unpack."
 msgstr "A téma kicsomagolása meghiúsult."
@@ -13006,18 +13003,29 @@
 msgid "Theme failed to copy."
 msgstr "A téma másolása meghiúsult."
 
-msgid "Install Theme"
-msgstr "Téma telepítése"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
-"Válassza ki a használni kívánt hangulatjel-témát az alábbi listából. Új "
-"témák a témalistába dobással telepíthetők."
-
-msgid "Icon"
-msgstr "Ikon"
+msgid "Theme Selections"
+msgstr "Témaválasztás"
+
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"Válassza ki a használni kívánt témát az alábbi listákból.\n"
+"Új témák a témalistába húzva telepíthetők."
+
+msgid "Buddy List Theme:"
+msgstr "Partnerlistatéma:"
+
+msgid "Status Icon Theme:"
+msgstr "Állapotikon-téma:"
+
+msgid "Sound Theme:"
+msgstr "Hangtéma:"
+
+msgid "Smiley Theme:"
+msgstr "Hangulatjel-téma:"
 
 msgid "Keyboard Shortcuts"
 msgstr "Gyorsbillentyűk"
@@ -13025,10 +13033,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "Társalgások bezárása az _Escape billentyűvel"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "Partnerlista-téma"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "Rendszertálca-ikon"
@@ -13115,9 +13119,6 @@
 msgid "Font"
 msgstr "Betűkészlet"
 
-msgid "Use document font from _theme"
-msgstr "A _téma dokumentum-betűkészletének használata"
-
 msgid "Use font from _theme"
 msgstr "A téma _betűkészletének használata"
 
@@ -13140,17 +13141,15 @@
 msgid "Cannot start browser configuration program."
 msgstr "Nem indítható a böngészőkonfigurációs program."
 
-#, fuzzy
 msgid "Disabled"
-msgstr "_Tiltás"
+msgstr "Tiltva"
 
 #, c-format
 msgid "Use _automatically detected IP address: %s"
 msgstr "Automatikusan felismert _IP cím használata: %s"
 
-#, fuzzy
 msgid "ST_UN server:"
-msgstr "_Kiszolgáló:"
+msgstr "ST_UN kiszolgáló:"
 
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Például: stunserver.org</span>"
@@ -13164,78 +13163,27 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "A_utomatikus útválasztóport-átirányítás"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "A figyelendő porttartomány _kézi megadása"
-
-#, fuzzy
+msgstr "A figyelendő porttartomány _kézi megadása:"
+
 msgid "_Start:"
-msgstr "Áll_apot:"
-
-#, fuzzy
+msgstr "Ke_zdete:"
+
 msgid "_End:"
-msgstr "_Kibontás"
+msgstr "_Vége:"
 
 #. TURN server
 msgid "Relay Server (TURN)"
 msgstr "Továbbító kiszolgáló (TURN)"
 
-#, fuzzy
 msgid "_TURN server:"
-msgstr "_Kiszolgáló:"
-
-#, fuzzy
+msgstr "_TURN kiszolgáló:"
+
 msgid "Use_rname:"
-msgstr "Felhasználónév:"
-
-#, fuzzy
+msgstr "_Felhasználónév:"
+
 msgid "Pass_word:"
-msgstr "Jelszó:"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "Proxy-kiszolgáló és böngésző"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>A proxykonfigurációs program nem található.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>A böngészőkonfigurációs program nem található.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"A proxy és böngésző a GNOME beállításaiban\n"
-"vannak konfigurálva"
-
-msgid "Configure _Proxy"
-msgstr "_Proxy beállítása"
-
-msgid "Configure _Browser"
-msgstr "Bö_ngésző beállítása"
-
-msgid "Proxy Server"
-msgstr "Proxy-kiszolgáló"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Távoli DNS használata SOCKS4 proxykkal"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "Proxy _típusa:"
-
-msgid "No proxy"
-msgstr "Nincs Proxy"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "_Port:"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Felhasználónév:"
+msgstr "_Jelszó:"
 
 msgid "Seamonkey"
 msgstr "Seamonkey"
@@ -13276,6 +13224,15 @@
 msgid "Browser Selection"
 msgstr "Böngészőválasztás"
 
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr "A böngésző beállításai a GNOME beállításaiban vannak megadva"
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>A böngészőkonfigurációs program nem található.</b>"
+
+msgid "Configure _Browser"
+msgstr "Bö_ngésző beállítása"
+
 msgid "_Browser:"
 msgstr "_Böngésző:"
 
@@ -13299,6 +13256,35 @@
 "_Kézi:\n"
 "(%s az URL-hez)"
 
+msgid "Proxy Server"
+msgstr "Proxy-kiszolgáló"
+
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr "A proxy beállításai a GNOME beállításaiban vannak megadva"
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>A proxykonfigurációs program nem található.</b>"
+
+msgid "Configure _Proxy"
+msgstr "_Proxy beállítása"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Távoli _DNS használata SOCKS4 proxykkal"
+
+msgid "Proxy t_ype:"
+msgstr "Proxy _típusa:"
+
+msgid "No proxy"
+msgstr "Nincs Proxy"
+
+msgid "P_ort:"
+msgstr "P_ort:"
+
+msgid "User_name:"
+msgstr "_Felhasználónév:"
+
 msgid "Log _format:"
 msgstr "Napló_formátum:"
 
@@ -13382,25 +13368,18 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Billentyűzet vagy egér használata alapján"
 
+msgid "_Minutes before becoming idle:"
+msgstr "Üresjárat ennyi _perc után:"
+
+msgid "Change to this status when _idle:"
+msgstr "Állapot módosítása erre, _ha inaktív:"
+
 msgid "_Auto-reply:"
 msgstr "_Automatikus válasz:"
 
 msgid "When both away and idle"
 msgstr "Ha távol van és inaktív"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Automatikus távollét"
-
-msgid "_Minutes before becoming idle:"
-msgstr "Üresjárat ennyi _perc után:"
-
-msgid "Change status when _idle"
-msgstr "Állapot módosítása, _ha inaktív"
-
-msgid "Change _status to:"
-msgstr "Állap_ot módosítása a következőre:"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "Állapot induláskor"
@@ -13414,15 +13393,15 @@
 msgid "Interface"
 msgstr "Felület"
 
-msgid "Smiley Themes"
-msgstr "Hangulatjel-témák"
-
 msgid "Browser"
 msgstr "Böngésző"
 
 msgid "Status / Idle"
 msgstr "Állapot / Inaktív"
 
+msgid "Themes"
+msgstr "Témák"
+
 msgid "Allow all users to contact me"
 msgstr "Mindenki kapcsolatba léphet velem"
 
@@ -13770,9 +13749,6 @@
 msgid "Pidgin smileys"
 msgstr "Pidgin hangulatjelek"
 
-msgid "Penguin Pimps"
-msgstr "Penguin Pimps"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Ennek kiválasztása letiltja a grafikus hangulatjeleket."
 
@@ -14414,6 +14390,9 @@
 msgid "Conversation Entry"
 msgstr "Társalgás beviteli mező"
 
+msgid "Conversation History"
+msgstr "Társalgáselőzmények"
+
 msgid "Request Dialog"
 msgstr "Kérdés párbeszédablak"
 
@@ -14879,9 +14858,8 @@
 msgid "_Start %s on Windows startup"
 msgstr "A %s indítá_sa a Windows indulásakor"
 
-#, fuzzy
 msgid "Allow multiple instances"
-msgstr "több példány engedélyezése"
+msgstr "Több példány engedélyezése"
 
 msgid "_Dockable Buddy List"
 msgstr "_Dokkolható partnerlista"
@@ -14944,25 +14922,3 @@
 msgstr ""
 "Ez a bővítmény XMPP kiszolgálókban vagy kliensekben végzett hibakereséshez "
 "hasznos."
-
-#, fuzzy
-#~ msgid "The root certificate this one claims to be issued by is unknown."
-#~ msgstr "A tanúsítványt kiadó gyökértanúsítványt a Pidgin nem ismeri."
-
-#~ msgid "Send instant messages over multiple protocols"
-#~ msgstr "Azonnali üzenetek küldése több protokoll használatával"
-
-#~ msgid "_Start port:"
-#~ msgstr "_Első port:"
-
-#~ msgid "_End port:"
-#~ msgstr "_Utolsó port:"
-
-#~ msgid "_User:"
-#~ msgstr "_Felhasználó:"
-
-#~ msgid "GTK+ Runtime Version"
-#~ msgstr "GTK+ runtime verzió"
-
-#~ msgid "Without this only the first account will be enabled)."
-#~ msgstr "Enélkül csak az első fiók lesz engedélyezve)."