changeset 27449:14131ba5a07c

merge of '51d199ba5dd8a81f6276f19421c8f7e0158dcb98' and 'ac87c285c7056f86005dc157b9870745de471f74'
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Mon, 06 Jul 2009 05:27:30 +0000
parents a6d84d9de605 (current diff) b41b69e8b341 (diff)
children c374d57b3215
files ChangeLog ChangeLog.API
diffstat 49 files changed, 2125 insertions(+), 2342 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Jul 06 04:37:06 2009 +0000
+++ b/ChangeLog	Mon Jul 06 05:27:30 2009 +0000
@@ -24,6 +24,10 @@
 	  PURPLE_GNUTLS_DEBUG environment variable, which is an integer between
 	  0 and 9 (higher is more verbose). Higher values may reveal sensitive
 	  information.
+	* PURPLE_VERBOSE_DEBUG environment variable.  Currently this is an "on" or
+	  "off" variable.  Set it to any value to turn it on and unset it to turn
+	  it off.  This will optionally be used to only show less useful debug
+	  information on an as-needed basis.
 	* Add support for receiving handwritten (ink) messages on MSN.
 
 	Gadu-Gadu:
@@ -73,6 +77,9 @@
 	  client supports it).
 	* Google Talk mail notifications should now work for people for whom they
 	  inexplicably did not.  (Thanks to yukam for determining the reason)
+	* New XMPP and Google Talk accounts require SSL by default.
+	* Display kicks (and the reasons given) in chat rooms when an occupant is
+	  kicked.
 
 	Yahoo:
 	* P2P file transfers.  (Sulabh Mahajan)
--- a/ChangeLog.API	Mon Jul 06 04:37:06 2009 +0000
+++ b/ChangeLog.API	Mon Jul 06 05:27:30 2009 +0000
@@ -30,6 +30,10 @@
 		* purple_connection_set_protocol_data
 		* purple_contact_destroy
 		* purple_conv_chat_invite_user
+		* purple_debug_is_unsafe
+		* purple_debug_is_verbose
+		* purple_debug_set_unsafe
+		* purple_debug_set_verbose
 		* purple_global_proxy_set_info
 		* purple_group_destroy
 		* purple_log_get_activity_score
@@ -40,6 +44,7 @@
 		* purple_network_get_stun_ip
 		* purple_network_get_turn_ip
 		* purple_network_remove_port_mapping
+		* purple_plugins_get_search_paths
 		* purple_proxy_connect_udp
 		* purple_prpl_get_media_caps
 		* purple_prpl_got_account_actions
--- a/configure.ac	Mon Jul 06 04:37:06 2009 +0000
+++ b/configure.ac	Mon Jul 06 05:27:30 2009 +0000
@@ -1563,30 +1563,6 @@
 			AC_MSG_RESULT(no)
 		fi
 
-		if test "x$prefix" != "xNONE"; then
-			prefix=`eval echo $prefix`
-			PERL_MM_PARAMS="INSTALLDIRS=vendor PREFIX=$prefix"
-		fi
-
-		AC_ARG_WITH(perl-lib,
-		[AC_HELP_STRING([--with-perl-lib=[site|vendor|DIR]],
-			[specify where to install the Perl libraries for pidgin. Default is site.])],
-		[
-			if test "x$withval" = xsite; then
-				PERL_MM_PARAMS=""
-			elif test "x$withval" = xvendor; then
-				if test -z "`$perlpath -v | grep '5\.0'`"; then
-					PERL_MM_PARAMS="INSTALLDIRS=vendor"
-				else
-					PERL_MM_PARAMS="INSTALLDIRS=vendor PREFIX=`perl -e 'use Config; print $Config{prefix}'`"
-				fi
-			else
-				PERL_MM_PARAMS="INSTALLDIRS=vendor PREFIX=$withval"
-			fi
-		])
-
-		AC_SUBST(PERL_MM_PARAMS)
-
 		AC_MSG_CHECKING(for DynaLoader.a)
 		DYNALOADER_A=`echo $PERL_LDFLAGS | $perlpath -pe 's/^(.* )*([[^ ]]*DynaLoader\.a).*/\2/'`
 
--- a/doc/notify-signals.dox	Mon Jul 06 04:37:06 2009 +0000
+++ b/doc/notify-signals.dox	Mon Jul 06 05:27:30 2009 +0000
@@ -30,7 +30,7 @@
                                       const char *url);
   @endsignalproto
   @signaldesc
-   Emitted before email notification is handed to the UI to display.
+   Emitted before notification of a single email is handed to the UI to display.
   @param subject   Subject of email being notified of.
   @param from      Who the email is from.
   @param to        Who the email is to.
--- a/libpurple/account.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/account.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1132,29 +1132,32 @@
 purple_account_connect(PurpleAccount *account)
 {
 	PurplePlugin *prpl;
+	const char *password, *username;
 	PurplePluginProtocolInfo *prpl_info;
-	const char *password;
 
 	g_return_if_fail(account != NULL);
 
-	purple_debug_info("account", "Connecting to account %s\n",
-					purple_account_get_username(account));
-
-	if (!purple_account_get_enabled(account, purple_core_get_ui()))
+	username = purple_account_get_username(account);
+
+	if (!purple_account_get_enabled(account, purple_core_get_ui())) {
+		purple_debug_info("account",
+				  "Account %s not enabled, not connecting.\n",
+				  username);
 		return;
+	}
 
 	prpl = purple_find_prpl(purple_account_get_protocol_id(account));
-	if (prpl == NULL)
-	{
+	if (prpl == NULL) {
 		gchar *message;
 
-		message = g_strdup_printf(_("Missing protocol plugin for %s"),
-			purple_account_get_username(account));
+		message = g_strdup_printf(_("Missing protocol plugin for %s"), username);
 		purple_notify_error(account, _("Connection Error"), message, NULL);
 		g_free(message);
 		return;
 	}
 
+	purple_debug_info("account", "Connecting to account %s.\n", username);
+
 	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
 	password = purple_account_get_password(account);
 	if ((password == NULL) &&
@@ -2810,9 +2813,9 @@
 		sync_accounts();
 	}
 
+	for (; accounts; accounts = g_list_delete_link(accounts, accounts))
+		purple_account_destroy(accounts->data);
+
 	purple_signals_disconnect_by_handle(handle);
 	purple_signals_unregister_by_instance(handle);
-
-	for (; accounts; accounts = g_list_delete_link(accounts, accounts))
-		purple_account_destroy(accounts->data);
 }
--- a/libpurple/buddyicon.h	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/buddyicon.h	Mon Jul 06 05:27:30 2009 +0000
@@ -189,8 +189,6 @@
  *                  takes ownership of and will free.
  * @param icon_len  The length of the icon data.
  * @param checksum  A protocol checksum from the prpl or @c NULL.
- *
- * @return The buddy icon set, or NULL if no icon was set.
  */
 void
 purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username,
--- a/libpurple/cipher.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/cipher.c	Mon Jul 06 05:27:30 2009 +0000
@@ -61,11 +61,144 @@
 #include "signals.h"
 #include "value.h"
 
+#if GLIB_CHECK_VERSION(2,16,0)
+static void
+purple_g_checksum_init(PurpleCipherContext *context, GChecksumType type)
+{
+	GChecksum *checksum;
+
+	checksum = g_checksum_new(type);
+	purple_cipher_context_set_data(context, checksum);
+}
+
+static void
+purple_g_checksum_reset(PurpleCipherContext *context, GChecksumType type)
+{
+	GChecksum *checksum;
+
+	checksum = purple_cipher_context_get_data(context);
+	g_return_if_fail(checksum != NULL);
+
+#if GLIB_CHECK_VERSION(2,18,0)
+	g_checksum_reset(checksum);
+#else
+	g_checksum_free(checksum);
+	checksum = g_checksum_new(type);
+	purple_cipher_context_set_data(context, checksum);
+#endif
+}
+
+static void
+purple_g_checksum_uninit(PurpleCipherContext *context)
+{
+	GChecksum *checksum;
+
+	checksum = purple_cipher_context_get_data(context);
+	g_return_if_fail(checksum != NULL);
+
+	g_checksum_free(checksum);
+}
+
+static void
+purple_g_checksum_append(PurpleCipherContext *context, const guchar *data,
+                         gsize len)
+{
+	GChecksum *checksum;
+
+	checksum = purple_cipher_context_get_data(context);
+	g_return_if_fail(checksum != NULL);
+
+	while (len >= G_MAXSSIZE) {
+		g_checksum_update(checksum, data, G_MAXSSIZE);
+		len -= G_MAXSSIZE;
+		data += G_MAXSSIZE;
+	}
+
+	if (len)
+		g_checksum_update(checksum, data, len);
+}
+
+static gboolean
+purple_g_checksum_digest(PurpleCipherContext *context, GChecksumType type,
+                         gsize len, guchar *digest, gsize *out_len)
+{
+	GChecksum *checksum;
+	const gssize required_length = g_checksum_type_get_length(type);
+
+	checksum = purple_cipher_context_get_data(context);
+
+	g_return_val_if_fail(len >= required_length, FALSE);
+	g_return_val_if_fail(checksum != NULL, FALSE);
+
+	g_checksum_get_digest(checksum, digest, &len);
+
+	purple_cipher_context_reset(context, NULL);
+
+	if (out_len)
+		*out_len = len;
+
+	return TRUE;
+}
+#endif
+
+
 /*******************************************************************************
  * MD5
  ******************************************************************************/
 #define MD5_HMAC_BLOCK_SIZE	64
 
+static size_t
+md5_get_block_size(PurpleCipherContext *context)
+{
+	/* This does not change (in this case) */
+	return MD5_HMAC_BLOCK_SIZE;
+}
+
+#if GLIB_CHECK_VERSION(2,16,0)
+
+static void
+md5_init(PurpleCipherContext *context, void *extra)
+{
+	purple_g_checksum_init(context, G_CHECKSUM_MD5);
+}
+
+static void
+md5_reset(PurpleCipherContext *context, void *extra)
+{
+	purple_g_checksum_reset(context, G_CHECKSUM_MD5);
+}
+
+static gboolean
+md5_digest(PurpleCipherContext *context, gsize in_len, guchar digest[16],
+           size_t *out_len)
+{
+	return purple_g_checksum_digest(context, G_CHECKSUM_MD5, in_len,
+	                                digest, out_len);
+}
+
+static PurpleCipherOps MD5Ops = {
+	NULL,			/* Set Option		*/
+	NULL,			/* Get Option		*/
+	md5_init,		/* init				*/
+	md5_reset,		/* reset			*/
+	purple_g_checksum_uninit,	/* uninit			*/
+	NULL,			/* set iv			*/
+	purple_g_checksum_append,	/* append			*/
+	md5_digest,		/* digest			*/
+	NULL,			/* encrypt			*/
+	NULL,			/* decrypt			*/
+	NULL,			/* set salt			*/
+	NULL,			/* get salt size	*/
+	NULL,			/* set key			*/
+	NULL,			/* get key size		*/
+	NULL,			/* set batch mode */
+	NULL,			/* get batch mode */
+	md5_get_block_size,	/* get block size */
+	NULL			/* set key with len */
+};
+
+#else /* GLIB_CHECK_VERSION(2,16,0) */
+
 struct MD5Context {
 	guint32 total[2];
 	guint32 state[4];
@@ -327,13 +460,6 @@
 	return TRUE;
 }
 
-static size_t
-md5_get_block_size(PurpleCipherContext *context)
-{
-	/* This does not change (in this case) */
-	return MD5_HMAC_BLOCK_SIZE;
-}
-
 static PurpleCipherOps MD5Ops = {
 	NULL,			/* Set option */
 	NULL,			/* Get option */
@@ -355,6 +481,8 @@
 	NULL			/* set key with len */
 };
 
+#endif /* GLIB_CHECK_VERSION(2,16,0) */
+
 /*******************************************************************************
  * MD4
  ******************************************************************************/
@@ -1613,6 +1741,61 @@
  * SHA-1
  ******************************************************************************/
 #define SHA1_HMAC_BLOCK_SIZE	64
+
+static size_t
+sha1_get_block_size(PurpleCipherContext *context)
+{
+	/* This does not change (in this case) */
+	return SHA1_HMAC_BLOCK_SIZE;
+}
+
+
+#if GLIB_CHECK_VERSION(2,16,0)
+
+static void
+sha1_init(PurpleCipherContext *context, void *extra)
+{
+	purple_g_checksum_init(context, G_CHECKSUM_SHA1);
+}
+
+static void
+sha1_reset(PurpleCipherContext *context, void *extra)
+{
+	purple_g_checksum_reset(context, G_CHECKSUM_SHA1);
+}
+
+static gboolean
+sha1_digest(PurpleCipherContext *context, gsize in_len, guchar digest[20],
+            gsize *out_len)
+{
+	return purple_g_checksum_digest(context, G_CHECKSUM_SHA1, in_len,
+	                                digest, out_len);
+}
+
+static PurpleCipherOps SHA1Ops = {
+	NULL,			/* Set Option		*/
+	NULL,			/* Get Option		*/
+	sha1_init,		/* init				*/
+	sha1_reset,		/* reset			*/
+	purple_g_checksum_uninit,	/* uninit			*/
+	NULL,			/* set iv			*/
+	purple_g_checksum_append,	/* append			*/
+	sha1_digest,	/* digest			*/
+	NULL,			/* encrypt			*/
+	NULL,			/* decrypt			*/
+	NULL,			/* set salt			*/
+	NULL,			/* get salt size	*/
+	NULL,			/* set key			*/
+	NULL,			/* get key size		*/
+	NULL,			/* set batch mode */
+	NULL,			/* get batch mode */
+	sha1_get_block_size,	/* get block size */
+	NULL			/* set key with len */
+};
+
+#else /* GLIB_CHECK_VERSION(2,16,0) */
+
+#define SHA1_HMAC_BLOCK_SIZE	64
 #define SHA1_ROTL(X,n) ((((X) << (n)) | ((X) >> (32-(n)))) & 0xFFFFFFFF)
 
 struct SHA1Context {
@@ -1833,13 +2016,6 @@
 	return TRUE;
 }
 
-static size_t
-sha1_get_block_size(PurpleCipherContext *context)
-{
-	/* This does not change (in this case) */
-	return SHA1_HMAC_BLOCK_SIZE;
-}
-
 static PurpleCipherOps SHA1Ops = {
 	sha1_set_opt,	/* Set Option		*/
 	sha1_get_opt,	/* Get Option		*/
@@ -1861,10 +2037,65 @@
 	NULL			/* set key with len */
 };
 
+#endif /* GLIB_CHECK_VERSION(2,16,0) */
+
 /*******************************************************************************
  * SHA-256
  ******************************************************************************/
 #define SHA256_HMAC_BLOCK_SIZE	64
+
+static size_t
+sha256_get_block_size(PurpleCipherContext *context)
+{
+	/* This does not change (in this case) */
+	return SHA256_HMAC_BLOCK_SIZE;
+}
+
+#if GLIB_CHECK_VERSION(2,16,0)
+
+static void
+sha256_init(PurpleCipherContext *context, void *extra)
+{
+	purple_g_checksum_init(context, G_CHECKSUM_SHA256);
+}
+
+static void
+sha256_reset(PurpleCipherContext *context, void *extra)
+{
+	purple_g_checksum_reset(context, G_CHECKSUM_SHA256);
+}
+
+static gboolean
+sha256_digest(PurpleCipherContext *context, gsize in_len, guchar digest[20],
+            gsize *out_len)
+{
+	return purple_g_checksum_digest(context, G_CHECKSUM_SHA256, in_len,
+	                                digest, out_len);
+}
+
+static PurpleCipherOps SHA256Ops = {
+	NULL,			/* Set Option		*/
+	NULL,			/* Get Option		*/
+	sha256_init,	/* init				*/
+	sha256_reset,	/* reset			*/
+	purple_g_checksum_uninit,	/* uninit			*/
+	NULL,			/* set iv			*/
+	purple_g_checksum_append,	/* append			*/
+	sha256_digest,	/* digest			*/
+	NULL,			/* encrypt			*/
+	NULL,			/* decrypt			*/
+	NULL,			/* set salt			*/
+	NULL,			/* get salt size	*/
+	NULL,			/* set key			*/
+	NULL,			/* get key size		*/
+	NULL,			/* set batch mode */
+	NULL,			/* get batch mode */
+	sha256_get_block_size,	/* get block size */
+	NULL			/* set key with len */
+};
+
+#else /* GLIB_CHECK_VERSION(2,16,0) */
+
 #define SHA256_ROTR(X,n) ((((X) >> (n)) | ((X) << (32-(n)))) & 0xFFFFFFFF)
 
 static const guint32 sha256_K[64] =
@@ -2088,13 +2319,6 @@
 	return TRUE;
 }
 
-static size_t
-sha256_get_block_size(PurpleCipherContext *context)
-{
-	/* This does not change (in this case) */
-	return SHA256_HMAC_BLOCK_SIZE;
-}
-
 static PurpleCipherOps SHA256Ops = {
 	sha256_set_opt,	/* Set Option		*/
 	sha256_get_opt,	/* Get Option		*/
@@ -2116,6 +2340,8 @@
 	NULL			/* set key with len */
 };
 
+#endif /* GLIB_CHECK_VERSION(2,16,0) */
+
 /*******************************************************************************
  * RC4
  ******************************************************************************/
--- a/libpurple/debug.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/debug.c	Mon Jul 06 05:27:30 2009 +0000
@@ -36,12 +36,20 @@
  *
  * It doesn't make sense to make this a normal Purple preference
  * because it's a command line option.  This will always be FALSE,
- * unless the user explicitly started Purple with the -d flag.
+ * unless the user explicitly started the UI with the -d flag.
  * It doesn't matter what this value was the last time Purple was
  * started, so it doesn't make sense to save it in prefs.
  */
 static gboolean debug_enabled = FALSE;
 
+/*
+ * These determine whether verbose or unsafe debugging are desired.  I
+ * don't want to make these purple preferences because their values should
+ * not be remembered across instances of the UI.
+ */
+static gboolean debug_verbose = FALSE;
+static gboolean debug_unsafe = FALSE;
+
 static void
 purple_debug_vargs(PurpleDebugLevel level, const char *category,
 				 const char *format, va_list args)
@@ -175,6 +183,30 @@
 	debug_ui_ops = ops;
 }
 
+gboolean
+purple_debug_is_verbose()
+{
+	return debug_verbose;
+}
+
+void
+purple_debug_set_verbose(gboolean verbose)
+{
+	debug_verbose = verbose;
+}
+
+gboolean
+purple_debug_is_unsafe()
+{
+	return debug_unsafe;
+}
+
+void
+purple_debug_set_unsafe(gboolean unsafe)
+{
+	debug_unsafe = unsafe;
+}
+
 PurpleDebugUiOps *
 purple_debug_get_ui_ops(void)
 {
@@ -184,6 +216,13 @@
 void
 purple_debug_init(void)
 {
+	/* Read environment variables once per init */
+	if(g_getenv("PURPLE_UNSAFE_DEBUG"))
+		purple_debug_set_unsafe(TRUE);
+
+	if(g_getenv("PURPLE_VERBOSE_DEBUG"))
+		purple_debug_set_verbose(TRUE);
+
 	purple_prefs_add_none("/purple/debug");
 
 	/*
@@ -193,3 +232,4 @@
 	 */
 	purple_prefs_add_bool("/purple/debug/timestamps", TRUE);
 }
+
--- a/libpurple/debug.h	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/debug.h	Mon Jul 06 05:27:30 2009 +0000
@@ -151,10 +151,50 @@
 /**
  * Check if console debug output is enabled.
  *
- * @return TRUE if debuggin is enabled, FALSE if it is not.
+ * @return TRUE if debugging is enabled, FALSE if it is not.
  */
 gboolean purple_debug_is_enabled(void);
 
+/**
+ * Enable or disable verbose debugging.  This ordinarily should only be called
+ * by #purple_debug_init, but there are cases where this can be useful for
+ * plugins.
+ *
+ * @param verbose TRUE to enable verbose debugging or FALSE to disable it.
+ *
+ * @since 2.6.0
+ */
+void purple_debug_set_verbose(gboolean verbose);
+
+/**
+ * Check if verbose logging is enabled.
+ *
+ * @return TRUE if verbose debugging is enabled, FALSE if it is not.
+ *
+ * @since 2.6.0
+ */
+gboolean purple_debug_is_verbose(void);
+
+/**
+ * Enable or disable verbose debugging.  This ordinarily should only be called
+ * by #purple_debug_init, but there are cases where this can be useful for
+ * plugins.
+ *
+ * @param unsafe  TRUE to enable verbose debugging or FALSE to disable it.
+ *
+ * @since 2.6.0
+ */
+void purple_debug_set_unsafe(gboolean unsafe);
+
+/**
+ * Check if unsafe debugging is enabled.
+ *
+ * @return TRUE if verbose debugging is enabled, FALSE if it is not.
+ *
+ * @since 2.6.0
+ */
+gboolean purple_debug_is_unsafe(void);
+
 /*@}*/
 
 /**************************************************************************/
--- a/libpurple/dnssrv.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/dnssrv.c	Mon Jul 06 05:27:30 2009 +0000
@@ -82,7 +82,7 @@
 	GThread *resolver;
 	char *query;
 	char *error_message;
-	GSList *results;
+	GList *results;
 #else
 	int fd_in, fd_out;
 	pid_t pid;
@@ -134,8 +134,8 @@
  * @param container_ptr The PurpleSrvResponseContainer that was chosen
  *        will be returned here.
  */
-static GList *select_random_response(GList *list,
-		PurpleSrvResponseContainer **container_ptr)
+static GList *
+select_random_response(GList *list, PurpleSrvResponseContainer **container_ptr)
 {
 	GList *cur;
 	size_t runningtotal;
@@ -173,11 +173,11 @@
  * Reorder a GList of PurpleSrvResponses that have the same priority
  * (aka "pref").
  */
-static void srv_reorder(GList *list, int num)
+static void
+srv_reorder(GList *list, int num)
 {
 	int i;
-	GList *cur;
-	GList *container_list = NULL;
+	GList *cur, *container_list = NULL;
 	PurpleSrvResponseContainer *container;
 
 	if (num < 2)
@@ -206,21 +206,22 @@
 }
 
 /**
- * Sorts a GList of PurpleSrvResponse's according to the
+ * Sorts a GList of PurpleSrvResponses according to the
  * algorithm described in RFC 2782.
  *
  * @param response GList of PurpleSrvResponse's
  * @param The original list, resorted
  */
-static GList *purple_srv_sort(GList *list)
+static GList *
+purple_srv_sort(GList *list)
 {
+	int pref, count;
 	GList *cur, *start;
-	int count;
-	int pref;
 
-	if (!list || !list->next)
+	if (!list || !list->next) {
 		/* Nothing to sort */
 		return list;
+	}
 
 	list = g_list_sort(list, responsecompare);
 
@@ -255,11 +256,8 @@
 	PurpleSrvResponse *srvres;
 	PurpleTxtResponse *txtres;
 	queryans answer;
-	int size;
-	int qdcount;
-	int ancount;
-	guchar *end;
-	guchar *cp;
+	int size, qdcount, ancount;
+	guchar *end, *cp;
 	gchar name[256];
 	guint16 type, dlen, pref, weight, port;
 	PurpleSrvInternalQuery query;
@@ -348,8 +346,11 @@
 	while (ret != NULL)
 	{
 		/* TODO: Check return value */
-		if (query.type == T_SRV) write(out, ret->data, sizeof(PurpleSrvResponse));
-		if (query.type == T_TXT) write(out, ret->data, sizeof(PurpleTxtResponse));
+		if (query.type == T_SRV)
+			write(out, ret->data, sizeof(PurpleSrvResponse));
+		if (query.type == T_TXT)
+			write(out, ret->data, sizeof(PurpleTxtResponse));
+
 		g_free(ret->data);
 		ret = g_list_remove(ret, ret->data);
 	}
@@ -410,7 +411,7 @@
 
 					cb(res, size, query_data->extradata);
 				} else if (type == T_TXT) {
-					GSList *responses = NULL;
+					GList *responses = NULL;
 					PurpleTxtResponse *res;
 					PurpleTxtCallback cb = query_data->cb.txt;
 					ssize_t red;
@@ -423,8 +424,8 @@
 									"response: %s\n", g_strerror(errno));
 							size = 0;
 							g_free(res);
-							g_slist_foreach(responses, (GFunc)purple_txt_response_destroy, NULL);
-							g_slist_free(responses);
+							g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL);
+							g_list_free(responses);
 							responses = NULL;
 							break;
 						}
@@ -450,24 +451,24 @@
 res_main_thread_cb(gpointer data)
 {
 	PurpleSrvResponse *srvres = NULL;
-	int size = 0;
 	PurpleSrvQueryData *query_data = data;
 	if(query_data->error_message != NULL)
 		purple_debug_error("dnssrv", query_data->error_message);
 	else {
 		if (query_data->type == DNS_TYPE_SRV) {
 			PurpleSrvResponse *srvres_tmp = NULL;
-			GSList *lst = query_data->results;
-
-			size = g_slist_length(lst);
+			GList *lst = query_data->results;
+			int size = g_list_length(lst);
 
 			if(query_data->cb.srv && size > 0)
 				srvres_tmp = srvres = g_new0(PurpleSrvResponse, size);
 			while (lst) {
+				PurpleSrvResponse *lstdata = lst->data;
+				lst = g_list_delete_link(lst, lst);
+
 				if(query_data->cb.srv)
-					memcpy(srvres_tmp++, lst->data, sizeof(PurpleSrvResponse));
-				g_free(lst->data);
-				lst = g_slist_remove(lst, lst->data);
+					memcpy(srvres_tmp++, lstdata, sizeof(PurpleSrvResponse));
+				g_free(lstdata);
 			}
 
 			query_data->results = NULL;
@@ -476,9 +477,9 @@
 
 			if(query_data->cb.srv) query_data->cb.srv(srvres, size, query_data->extradata);
 		} else if (query_data->type == DNS_TYPE_TXT) {
-			GSList *lst = query_data->results;
+			GList *lst = query_data->results;
 
-			purple_debug_info("dnssrv", "found %d TXT entries\n", g_slist_length(lst));
+			purple_debug_info("dnssrv", "found %d TXT entries\n", g_list_length(lst));
 
 			if (query_data->cb.txt) {
 				query_data->results = NULL;
@@ -517,7 +518,7 @@
 	} else {
 		if (type == DNS_TYPE_SRV) {
 			PDNS_RECORD dr_tmp;
-			GSList *lst = NULL;
+			GList *lst = NULL;
 			DNS_SRV_DATA *srv_data;
 			PurpleSrvResponse *srvres;
 
@@ -535,14 +536,14 @@
 				srvres->port = srv_data->wPort;
 				srvres->weight = srv_data->wWeight;
 
-				lst = g_slist_prepend(lst, srvres);
+				lst = g_list_prepend(lst, srvres);
 			}
 
 			MyDnsRecordListFree(dr, DnsFreeRecordList);
 			query_data->results = purple_srv_sort(lst);
 		} else if (type == DNS_TYPE_TXT) {
 			PDNS_RECORD dr_tmp;
-			GSList *lst = NULL;
+			GList *lst = NULL;
 			DNS_TXT_DATA *txt_data;
 			PurpleTxtResponse *txtres;
 
@@ -563,7 +564,7 @@
 					s = g_string_append(s, txt_data->pStringArray[i]);
 				txtres->content = g_string_free(s, FALSE);
 
-				lst = g_slist_append(lst, txtres);
+				lst = g_list_append(lst, txtres);
 			}
 
 			MyDnsRecordListFree(dr, DnsFreeRecordList);
--- a/libpurple/dnssrv.h	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/dnssrv.h	Mon Jul 06 05:27:30 2009 +0000
@@ -52,10 +52,10 @@
 /**
  * Callback that returns the data retrieved from a DNS TXT lookup.
  *
- * @param responses   A GSList of PurpleTxtResponse objects.
+ * @param responses   A GList of PurpleTxtResponse objects.
  * @param data        The extra data passed to purple_txt_resolve.
  */
-typedef void (*PurpleTxtCallback)(GSList *responses, gpointer data);
+typedef void (*PurpleTxtCallback)(GList *responses, gpointer data);
 
 /**
  * Queries an SRV record.
--- a/libpurple/internal.h	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/internal.h	Mon Jul 06 05:27:30 2009 +0000
@@ -148,6 +148,14 @@
 #	endif
 #endif
 
+#ifndef G_MAXSSIZE
+#	if GLIB_SIZEOF_LONG == 8
+#		define G_MAXSSIZE ((gssize) 0x7fffffffffffffff)
+#	else
+#		define G_MAXSSIZE ((gssize) 0x7fffffff)
+#	endif
+#endif
+
 #if GLIB_CHECK_VERSION(2,6,0)
 #	include <glib/gstdio.h>
 #endif
--- a/libpurple/log.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/log.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1129,7 +1129,7 @@
 				/* set->buddy is always set below */
 				set->normalized_name = g_strdup(purple_normalize(account, name));
 
-				/* Chat for .chat or .system at the end of the name to determine the type. */
+				/* Check for .chat or .system at the end of the name to determine the type. */
 				if (len >= 7) {
 					gchar *tmp = &name[len - 7];
 					if (purple_strequal(tmp, ".system")) {
--- a/libpurple/plugin.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/plugin.c	Mon Jul 06 05:27:30 2009 +0000
@@ -861,6 +861,7 @@
 				}
 
 				g_list_free(loader_info->exts);
+				loader_info->exts = NULL;
 			}
 
 			plugin_loaders = g_list_remove(plugin_loaders, plugin);
@@ -1222,6 +1223,12 @@
 	search_paths = g_list_append(search_paths, g_strdup(path));
 }
 
+GList *
+purple_plugins_get_search_paths()
+{
+	return search_paths;
+}
+
 void
 purple_plugins_unload_all(void)
 {
--- a/libpurple/plugin.h	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/plugin.h	Mon Jul 06 05:27:30 2009 +0000
@@ -512,6 +512,15 @@
 void purple_plugins_add_search_path(const char *path);
 
 /**
+ * Returns a list of plugin search paths.
+ *
+ * @constreturn A list of searched paths.
+ *
+ * @since 2.6.0
+ */
+GList *purple_plugins_get_search_paths(void);
+
+/**
  * Unloads all loaded plugins.
  */
 void purple_plugins_unload_all(void);
--- a/libpurple/plugins/perl/Makefile.am	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/plugins/perl/Makefile.am	Mon Jul 06 05:27:30 2009 +0000
@@ -99,7 +99,7 @@
 			${LN_S} -f $$srcloc/$$f $$f; \
 		done; \
 	fi
-	@cd common && $(perlpath) Makefile.PL $(PERL_MM_PARAMS)
+	@cd common && $(perlpath) Makefile.PL
 
 common/Makefile.PL: common/Makefile.PL.in $(top_builddir)/config.status
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
@@ -108,7 +108,7 @@
 	@for dir in $(perl_dirs); do \
 		cd $$dir && \
 		if [ ! -f Makefile ]; then \
-			$(perlpath) Makefile.PL $(PERL_MM_PARAMS); \
+			$(perlpath) Makefile.PL; \
 		fi && \
 		($(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS) || \
 		 $(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS)) && \
@@ -164,6 +164,7 @@
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
+	-DLIBDIR=\"$(libdir)/purple-$(PURPLE_MAJOR_VERSION)\" \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(PLUGIN_CFLAGS) \
--- a/libpurple/plugins/perl/common/Makefile.PL.in	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/plugins/perl/common/Makefile.PL.in	Mon Jul 06 05:27:30 2009 +0000
@@ -13,4 +13,16 @@
     'INC'               => '-I. -I@srcdir@ -I@top_srcdir@ -I@top_srcdir@/libpurple @GLIB_CFLAGS@',
     'OBJECT'            => '$(O_FILES)', # link all the C files too
 #    'OPTIMIZE'          => '-g', # For debugging
+    'INSTALLDIRS'          => 'vendor',
+    'INSTALL_BASE'         => '$(prefix)',
+    'INSTALLVENDORARCH'    => '$(libdir)/purple-$(PURPLE_MAJOR_VERSION)/perl',
+    'INSTALLVENDORMAN3DIR' => '$(mandir)/man3',
+    'macro'                => {
+        'prefix'               => '@prefix@',
+        'exec_prefix'          => '@exec_prefix@',
+        'libdir'               => '@libdir@',
+        'mandir'               => '@mandir@',
+        'datarootdir'          => '@datarootdir@',
+        'PURPLE_MAJOR_VERSION' => '@PURPLE_MAJOR_VERSION@',
+    },
 );
--- a/libpurple/plugins/perl/perl.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/plugins/perl/perl.c	Mon Jul 06 05:27:30 2009 +0000
@@ -131,6 +131,7 @@
 #endif
 {
 	char *file = __FILE__;
+	GList *search_paths = purple_plugins_get_search_paths();
 	dXSUB_SYS;
 
 	/* This one allows dynamic loading of perl modules in perl scripts by
@@ -139,6 +140,17 @@
 #ifdef _WIN32
 	newXS("Win32CORE::bootstrap", boot_Win32CORE, file);
 #endif
+
+	while (search_paths != NULL) {
+		gchar *uselib;
+		const gchar *search_path = search_paths->data;
+		search_paths = g_list_next(search_paths);
+
+		uselib = g_strdup_printf("unshift @INC, \"%s%cperl\";",
+		                         search_path, G_DIR_SEPARATOR);
+		eval_pv(uselib, TRUE);
+		g_free(uselib);
+	}
 }
 
 static void
--- a/libpurple/protocols/jabber/buddy.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Mon Jul 06 05:27:30 2009 +0000
@@ -650,16 +650,88 @@
 	g_free(jbi);
 }
 
+static void
+add_jbr_info(JabberBuddyInfo *jbi, const char *resource,
+             JabberBuddyResource *jbr)
+{
+	JabberBuddyInfoResource *jbir;
+	PurpleNotifyUserInfo *user_info;
+
+	jbir = g_hash_table_lookup(jbi->resources, resource);
+	user_info = jbi->user_info;
+
+	if (jbr && jbr->client.name) {
+		char *tmp =
+			g_strdup_printf("%s%s%s", jbr->client.name,
+		                    (jbr->client.version ? " " : ""),
+		                    (jbr->client.version ? jbr->client.version : ""));
+		purple_notify_user_info_prepend_pair(user_info, _("Client"), tmp);
+		g_free(tmp);
+
+		if (jbr->client.os)
+			purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os);
+	}
+
+	if (jbr && jbr->tz_off != PURPLE_NO_TZ_OFF) {
+		time_t now_t;
+		struct tm *now;
+		char *timestamp;
+		time(&now_t);
+		now_t += jbr->tz_off;
+		now = gmtime(&now_t);
+
+		timestamp =
+			g_strdup_printf("%s %c%02d%02d", purple_time_format(now),
+		                    jbr->tz_off < 0 ? '-' : '+',
+		                    abs(jbr->tz_off / (60*60)),
+		                    abs((jbr->tz_off % (60*60)) / 60));
+		purple_notify_user_info_prepend_pair(user_info, _("Local Time"), timestamp);
+		g_free(timestamp);
+	}
+
+	if (jbir && jbir->idle_seconds > 0) {
+		char *idle = purple_str_seconds_to_string(jbir->idle_seconds);
+		purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle);
+		g_free(idle);
+	}
+
+	if (jbr) {
+		char *purdy = NULL;
+		char *tmp;
+		char priority[12];
+		const char *status_name = jabber_buddy_state_get_name(jbr->state);
+
+		if (jbr->status) {
+			purdy = purple_strdup_withhtml(jbr->status);
+
+			if (purple_strequal(status_name, purdy))
+				status_name = NULL;
+		}
+
+		tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""),
+						((status_name && purdy) ? ": " : ""),
+						(purdy ? purdy : ""));
+		purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp);
+
+		g_snprintf(priority, sizeof(priority), "%d", jbr->priority);
+		purple_notify_user_info_prepend_pair(user_info, _("Priority"), priority);
+
+		g_free(tmp);
+		g_free(purdy);
+	} else {
+		purple_notify_user_info_prepend_pair(user_info, _("Status"), _("Unknown"));
+	}
+}
+
 static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi)
 {
-	char *resource_name, *tmp;
+	char *resource_name;
 	JabberBuddyResource *jbr;
-	JabberBuddyInfoResource *jbir = NULL;
 	GList *resources;
 	PurpleNotifyUserInfo *user_info;
 
 	/* not yet */
-	if(jbi->ids)
+	if (jbi->ids)
 		return;
 
 	user_info = jbi->user_info;
@@ -669,377 +741,24 @@
 	if (purple_notify_user_info_get_entries(user_info))
 		purple_notify_user_info_prepend_section_break(user_info);
 
-	/* Prepend the primary buddy info to user_info so that it goes before the vcard. */
-	if(resource_name) {
+	/* Add the information about the user's resource(s) */
+	if (resource_name) {
 		jbr = jabber_buddy_find_resource(jbi->jb, resource_name);
-		jbir = g_hash_table_lookup(jbi->resources, resource_name);
-		if(jbr && jbr->client.name) {
-			tmp = g_strdup_printf("%s%s%s", jbr->client.name,
-								  (jbr->client.version ? " " : ""),
-								  (jbr->client.version ? jbr->client.version : ""));
-			purple_notify_user_info_add_pair(user_info, _("Client"), tmp);
-			g_free(tmp);
-
-			if(jbr->client.os) {
-				purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os);
-			}
-		}
-		if (jbr && jbr->tz_off != PURPLE_NO_TZ_OFF) {
-			time_t now_t;
-			struct tm *now;
-			char *timestamp;
-			time(&now_t);
-			now_t += jbr->tz_off;
-			now = gmtime(&now_t);
-
-			timestamp = g_strdup_printf("%s %c%02d%02d", purple_time_format(now),
-			                            jbr->tz_off < 0 ? '-' : '+',
-			                            abs(jbr->tz_off / (60*60)),
-			                            abs((jbr->tz_off % (60*60)) / 60));
-			purple_notify_user_info_prepend_pair(user_info, _("Local Time"), timestamp);
-			g_free(timestamp);
-		}
-		if(jbir) {
-			if(jbir->idle_seconds > 0) {
-				char *idle = purple_str_seconds_to_string(jbir->idle_seconds);
-				purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle);
-				g_free(idle);
-			}
-		}
-		if(jbr) {
-			char *purdy = NULL;
-			const char *status_name = jabber_buddy_state_get_name(jbr->state);
-			if(jbr->status)
-				purdy = purple_strdup_withhtml(jbr->status);
-			if(status_name && purdy && !strcmp(status_name, purdy))
-				status_name = NULL;
-
-			tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""),
-							((status_name && purdy) ? ": " : ""),
-							(purdy ? purdy : ""));
-			purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp);
-			g_free(tmp);
-			g_free(purdy);
-		} else {
-			purple_notify_user_info_prepend_pair(user_info, _("Status"), _("Unknown"));
-		}
-#if 0
-		/* #if 0 this for now; I think this would be far more useful if we limited this to a particular set of features
- 		 * of particular interest (-vv jumps out as one). As it is now, I don't picture people getting all excited: "Oh sweet crap!
- 		 * So-and-so supports 'jabber:x:data' AND 'Collaborative Data Objects'!"
- 		 */
-
-		if(jbr && jbr->caps) {
-			GString *tmp = g_string_new("");
-			GList *iter;
-			for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) {
-				const char *feature = iter->data;
-
-				if(!strcmp(feature, "jabber:iq:last"))
-					feature = _("Last Activity");
-				else if(!strcmp(feature, "http://jabber.org/protocol/disco#info"))
-					feature = _("Service Discovery Info");
-				else if(!strcmp(feature, "http://jabber.org/protocol/disco#items"))
-					feature = _("Service Discovery Items");
-				else if(!strcmp(feature, "http://jabber.org/protocol/address"))
-					feature = _("Extended Stanza Addressing");
-				else if(!strcmp(feature, "http://jabber.org/protocol/muc"))
-					feature = _("Multi-User Chat");
-				else if(!strcmp(feature, "http://jabber.org/protocol/muc#user"))
-					feature = _("Multi-User Chat Extended Presence Information");
-				else if(!strcmp(feature, "http://jabber.org/protocol/ibb"))
-					feature = _("In-Band Bytestreams");
-				else if(!strcmp(feature, "http://jabber.org/protocol/commands"))
-					feature = _("Ad-Hoc Commands");
-				else if(!strcmp(feature, "http://jabber.org/protocol/pubsub"))
-					feature = _("PubSub Service");
-				else if(!strcmp(feature, "http://jabber.org/protocol/bytestreams"))
-					feature = _("SOCKS5 Bytestreams");
-				else if(!strcmp(feature, "jabber:x:oob"))
-					feature = _("Out of Band Data");
-				else if(!strcmp(feature, "http://jabber.org/protocol/xhtml-im"))
-					feature = _("XHTML-IM");
-				else if(!strcmp(feature, "jabber:iq:register"))
-					feature = _("In-Band Registration");
-				else if(!strcmp(feature, "http://jabber.org/protocol/geoloc"))
-					feature = _("User Location");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0084.html"))
-					feature = _("User Avatar");
-				else if(!strcmp(feature, "http://jabber.org/protocol/chatstates"))
-					feature = _("Chat State Notifications");
-				else if(!strcmp(feature, "jabber:iq:version"))
-					feature = _("Software Version");
-				else if(!strcmp(feature, "http://jabber.org/protocol/si"))
-					feature = _("Stream Initiation");
-				else if(!strcmp(feature, "http://jabber.org/protocol/si/profile/file-transfer"))
-					feature = _("File Transfer");
-				else if(!strcmp(feature, "http://jabber.org/protocol/mood"))
-					feature = _("User Mood");
-				else if(!strcmp(feature, "http://jabber.org/protocol/activity"))
-					feature = _("User Activity");
-				else if(!strcmp(feature, "http://jabber.org/protocol/caps"))
-					feature = _("Entity Capabilities");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html"))
-					feature = _("Encrypted Session Negotiations");
-				else if(!strcmp(feature, "http://jabber.org/protocol/tune"))
-					feature = _("User Tune");
-				else if(!strcmp(feature, "http://jabber.org/protocol/rosterx"))
-					feature = _("Roster Item Exchange");
-				else if(!strcmp(feature, "http://jabber.org/protocol/reach"))
-					feature = _("Reachability Address");
-				else if(!strcmp(feature, "http://jabber.org/protocol/profile"))
-					feature = _("User Profile");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0166.html#ns"))
-					feature = _("Jingle");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0167.html#ns"))
-					feature = _("Jingle Audio");
-				else if(!strcmp(feature, "http://jabber.org/protocol/nick"))
-					feature = _("User Nickname");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-udp"))
-					feature = _("Jingle ICE UDP");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-tcp"))
-					feature = _("Jingle ICE TCP");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0177.html#ns"))
-					feature = _("Jingle Raw UDP");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0180.html#ns"))
-					feature = _("Jingle Video");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0181.html#ns"))
-					feature = _("Jingle DTMF");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0184.html#ns"))
-					feature = _("Message Receipts");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0189.html#ns"))
-					feature = _("Public Key Publishing");
-				else if(!strcmp(feature, "http://jabber.org/protocol/chatting"))
-					feature = _("User Chatting");
-				else if(!strcmp(feature, "http://jabber.org/protocol/browsing"))
-					feature = _("User Browsing");
-				else if(!strcmp(feature, "http://jabber.org/protocol/gaming"))
-					feature = _("User Gaming");
-				else if(!strcmp(feature, "http://jabber.org/protocol/viewing"))
-					feature = _("User Viewing");
-				else if(!strcmp(feature, "urn:xmpp:ping"))
-					feature = _("Ping");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0200.html#ns"))
-					feature = _("Stanza Encryption");
-				else if(!strcmp(feature, "urn:xmpp:time"))
-					feature = _("Entity Time");
-				else if(!strcmp(feature, "urn:xmpp:delay"))
-					feature = _("Delayed Delivery");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0204.html#ns"))
-					feature = _("Collaborative Data Objects");
-				else if(!strcmp(feature, "http://jabber.org/protocol/fileshare"))
-					feature = _("File Repository and Sharing");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0215.html#ns"))
-					feature = _("STUN Service Discovery for Jingle");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html#ns"))
-					feature = _("Simplified Encrypted Session Negotiation");
-				else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0219.html#ns"))
-					feature = _("Hop Check");
-				else if(g_str_has_suffix(feature, "+notify"))
-					feature = NULL;
-				if(feature)
-					g_string_append_printf(tmp, "%s<br/>", feature);
-			}
-
-			if(strlen(tmp->str) > 0)
-				purple_notify_user_info_prepend_pair(user_info, _("Capabilities"), tmp->str);
-
-			g_string_free(tmp, TRUE);
-		}
-#endif
+		add_jbr_info(jbi, resource_name, jbr);
 	} else {
-		gboolean multiple_resources = jbi->jb->resources && jbi->jb->resources->next;
-
-		for(resources = jbi->jb->resources; resources; resources = resources->next) {
-			char *purdy = NULL;
-			const char *status_name = NULL;
-
+		for (resources = jbi->jb->resources; resources; resources = resources->next) {
 			jbr = resources->data;
 
 			/* put a section break between resources, this is not needed if
 			 we are at the first, because one was already added for the vcard
 			 section */
-			if (resources != jbi->jb->resources) {
+			if (resources != jbi->jb->resources)
 				purple_notify_user_info_prepend_section_break(user_info);
-			}
-
-			if(jbr->client.name) {
-				tmp = g_strdup_printf("%s%s%s", jbr->client.name,
-									  (jbr->client.version ? " " : ""),
-									  (jbr->client.version ? jbr->client.version : ""));
-				purple_notify_user_info_prepend_pair(user_info,
-												 _("Client"), tmp);
-				g_free(tmp);
-
-				if(jbr->client.os) {
-					purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os);
-				}
-			}
-
-			if (jbr->tz_off != PURPLE_NO_TZ_OFF) {
-				time_t now_t;
-				struct tm *now;
-				char *timestamp;
-				time(&now_t);
-				now_t += jbr->tz_off;
-				now = gmtime(&now_t);
-
-				timestamp = g_strdup_printf("%s %c%02d%02d", purple_time_format(now),
-				                            jbr->tz_off < 0 ? '-' : '+',
-				                            abs(jbr->tz_off / (60*60)),
-				                            abs((jbr->tz_off % (60*60)) / 60));
-				purple_notify_user_info_prepend_pair(user_info, _("Local Time"), timestamp);
-				g_free(timestamp);
-			}
-
-			if(jbr->name && (jbir = g_hash_table_lookup(jbi->resources, jbr->name))) {
-				if(jbir->idle_seconds > 0) {
-					char *idle = purple_str_seconds_to_string(jbir->idle_seconds);
-					purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle);
-					g_free(idle);
-				}
-			}
-
-			status_name = jabber_buddy_state_get_name(jbr->state);
-			if(jbr->status)
-				purdy = purple_strdup_withhtml(jbr->status);
-			if(status_name && purdy && !strcmp(status_name, purdy))
-				status_name = NULL;
-
-			tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""),
-								  ((status_name && purdy) ? ": " : ""),
-								  (purdy ? purdy : ""));
-			purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp);
-			g_free(tmp);
-			g_free(purdy);
-
-			if(multiple_resources) {
-				tmp = g_strdup_printf("%d", jbr->priority);
-				purple_notify_user_info_prepend_pair(user_info, _("Priority"), tmp);
-				g_free(tmp);
-			}
-
-			if(jbr->name)
-				purple_notify_user_info_prepend_pair(user_info, _("Resource"), jbr->name);
-#if 0
-			if(jbr && jbr->caps) {
-				GString *tmp = g_string_new("");
-				GList *iter;
-				for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) {
-					const char *feature = iter->data;
 
-					if(!strcmp(feature, "jabber:iq:last"))
-						feature = _("Last Activity");
-					else if(!strcmp(feature, "http://jabber.org/protocol/disco#info"))
-						feature = _("Service Discovery Info");
-					else if(!strcmp(feature, "http://jabber.org/protocol/disco#items"))
-						feature = _("Service Discovery Items");
-					else if(!strcmp(feature, "http://jabber.org/protocol/address"))
-						feature = _("Extended Stanza Addressing");
-					else if(!strcmp(feature, "http://jabber.org/protocol/muc"))
-						feature = _("Multi-User Chat");
-					else if(!strcmp(feature, "http://jabber.org/protocol/muc#user"))
-						feature = _("Multi-User Chat Extended Presence Information");
-					else if(!strcmp(feature, "http://jabber.org/protocol/ibb"))
-						feature = _("In-Band Bytestreams");
-					else if(!strcmp(feature, "http://jabber.org/protocol/commands"))
-						feature = _("Ad-Hoc Commands");
-					else if(!strcmp(feature, "http://jabber.org/protocol/pubsub"))
-						feature = _("PubSub Service");
-					else if(!strcmp(feature, "http://jabber.org/protocol/bytestreams"))
-						feature = _("SOCKS5 Bytestreams");
-					else if(!strcmp(feature, "jabber:x:oob"))
-						feature = _("Out of Band Data");
-					else if(!strcmp(feature, "http://jabber.org/protocol/xhtml-im"))
-						feature = _("XHTML-IM");
-					else if(!strcmp(feature, "jabber:iq:register"))
-						feature = _("In-Band Registration");
-					else if(!strcmp(feature, "http://jabber.org/protocol/geoloc"))
-						feature = _("User Location");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0084.html"))
-						feature = _("User Avatar");
-					else if(!strcmp(feature, "http://jabber.org/protocol/chatstates"))
-						feature = _("Chat State Notifications");
-					else if(!strcmp(feature, "jabber:iq:version"))
-						feature = _("Software Version");
-					else if(!strcmp(feature, "http://jabber.org/protocol/si"))
-						feature = _("Stream Initiation");
-					else if(!strcmp(feature, "http://jabber.org/protocol/si/profile/file-transfer"))
-						feature = _("File Transfer");
-					else if(!strcmp(feature, "http://jabber.org/protocol/mood"))
-						feature = _("User Mood");
-					else if(!strcmp(feature, "http://jabber.org/protocol/activity"))
-						feature = _("User Activity");
-					else if(!strcmp(feature, "http://jabber.org/protocol/caps"))
-						feature = _("Entity Capabilities");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html"))
-						feature = _("Encrypted Session Negotiations");
-					else if(!strcmp(feature, "http://jabber.org/protocol/tune"))
-						feature = _("User Tune");
-					else if(!strcmp(feature, "http://jabber.org/protocol/rosterx"))
-						feature = _("Roster Item Exchange");
-					else if(!strcmp(feature, "http://jabber.org/protocol/reach"))
-						feature = _("Reachability Address");
-					else if(!strcmp(feature, "http://jabber.org/protocol/profile"))
-						feature = _("User Profile");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0166.html#ns"))
-						feature = _("Jingle");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0167.html#ns"))
-						feature = _("Jingle Audio");
-					else if(!strcmp(feature, "http://jabber.org/protocol/nick"))
-						feature = _("User Nickname");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-udp"))
-						feature = _("Jingle ICE UDP");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0176.html#ns-tcp"))
-						feature = _("Jingle ICE TCP");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0177.html#ns"))
-						feature = _("Jingle Raw UDP");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0180.html#ns"))
-						feature = _("Jingle Video");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0181.html#ns"))
-						feature = _("Jingle DTMF");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0184.html#ns"))
-						feature = _("Message Receipts");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0189.html#ns"))
-						feature = _("Public Key Publishing");
-					else if(!strcmp(feature, "http://jabber.org/protocol/chatting"))
-						feature = _("User Chatting");
-					else if(!strcmp(feature, "http://jabber.org/protocol/browsing"))
-						feature = _("User Browsing");
-					else if(!strcmp(feature, "http://jabber.org/protocol/gaming"))
-						feature = _("User Gaming");
-					else if(!strcmp(feature, "http://jabber.org/protocol/viewing"))
-						feature = _("User Viewing");
-					else if(!strcmp(feature, "urn:xmpp:ping"))
-						feature = _("Ping");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0200.html#ns"))
-						feature = _("Stanza Encryption");
-					else if(!strcmp(feature, "urn:xmpp:time"))
-						feature = _("Entity Time");
-					else if(!strcmp(feature, "urn:xmpp:delay"))
-						feature = _("Delayed Delivery");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0204.html#ns"))
-						feature = _("Collaborative Data Objects");
-					else if(!strcmp(feature, "http://jabber.org/protocol/fileshare"))
-						feature = _("File Repository and Sharing");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0215.html#ns"))
-						feature = _("STUN Service Discovery for Jingle");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0116.html#ns"))
-						feature = _("Simplified Encrypted Session Negotiation");
-					else if(!strcmp(feature, "http://www.xmpp.org/extensions/xep-0219.html#ns"))
-						feature = _("Hop Check");
-					else if(g_str_has_suffix(feature, "+notify"))
-						feature = NULL;
+			add_jbr_info(jbi, jbr->name, jbr);
 
-					if(feature)
-						g_string_append_printf(tmp, "%s\n", feature);
-				}
-				if(strlen(tmp->str) > 0)
-					purple_notify_user_info_prepend_pair(user_info, _("Capabilities"), tmp->str);
-
-				g_string_free(tmp, TRUE);
-			}
-#endif
+			if (jbr->name)
+				purple_notify_user_info_prepend_pair(user_info, _("Resource"), jbr->name);
 		}
 	}
 
@@ -1047,13 +766,13 @@
 		/* the buddy is offline */
 		gchar *status =
 			g_strdup_printf("%s%s%s",	_("Offline"),
-				jbi->last_message ? ": " : "",
-				jbi->last_message ? jbi->last_message : "");
+			                jbi->last_message ? ": " : "",
+			                jbi->last_message ? jbi->last_message : "");
 		if (jbi->last_seconds > 0) {
 			char *last = purple_str_seconds_to_string(jbi->last_seconds);
 			gchar *message = g_strdup_printf(_("%s ago"), last);
 			purple_notify_user_info_prepend_pair(user_info,
-				_("Logged off"), message);
+				_("Logged Off"), message);
 			g_free(last);
 			g_free(message);
 		}
@@ -1065,7 +784,7 @@
 
 	purple_notify_userinfo(jbi->js->gc, jbi->jid, user_info, NULL, NULL);
 
-	while(jbi->vcard_imgids) {
+	while (jbi->vcard_imgids) {
 		purple_imgstore_unref_by_id(GPOINTER_TO_INT(jbi->vcard_imgids->data));
 		jbi->vcard_imgids = g_slist_delete_link(jbi->vcard_imgids, jbi->vcard_imgids);
 	}
@@ -2101,45 +1820,45 @@
 	return JABBER_BUDDY_STATE_UNKNOWN;
 }
 
-JabberBuddyState jabber_buddy_show_get_state(const char *id) {
-	if(!id)
-		return JABBER_BUDDY_STATE_UNKNOWN;
-	if(!strcmp(id, "available"))
-		return JABBER_BUDDY_STATE_ONLINE;
-	if(!strcmp(id, "chat"))
-		return JABBER_BUDDY_STATE_CHAT;
-	if(!strcmp(id, "away"))
-		return JABBER_BUDDY_STATE_AWAY;
-	if(!strcmp(id, "xa"))
-		return JABBER_BUDDY_STATE_XA;
-	if(!strcmp(id, "dnd"))
-		return JABBER_BUDDY_STATE_DND;
-	if(!strcmp(id, "offline"))
-		return JABBER_BUDDY_STATE_UNAVAILABLE;
-	if(!strcmp(id, "error"))
-		return JABBER_BUDDY_STATE_ERROR;
+const struct {
+	const char *name;
+	JabberBuddyState state;
+} show_state_pairs[] = {
+	{ "available", JABBER_BUDDY_STATE_ONLINE },
+	{ "chat",      JABBER_BUDDY_STATE_CHAT },
+	{ "away",      JABBER_BUDDY_STATE_AWAY },
+	{ "xa",        JABBER_BUDDY_STATE_XA },
+	{ "dnd",       JABBER_BUDDY_STATE_DND },
+	{ "offline",   JABBER_BUDDY_STATE_UNAVAILABLE },
+	{ "error",     JABBER_BUDDY_STATE_ERROR },
+	{ NULL,        JABBER_BUDDY_STATE_UNKNOWN }
+};
 
+JabberBuddyState jabber_buddy_show_get_state(const char *id)
+{
+	int i;
+
+	g_return_val_if_fail(id != NULL, JABBER_BUDDY_STATE_UNKNOWN);
+
+	for (i = 0; show_state_pairs[i].name; ++i)
+		if (g_str_equal(id, show_state_pairs[i].name))
+			return show_state_pairs[i].state;
+
+	purple_debug_warning("jabber", "Invalid value of presence <show/> "
+	                     "attribute: %s\n", id);
 	return JABBER_BUDDY_STATE_UNKNOWN;
 }
 
-const char *jabber_buddy_state_get_show(JabberBuddyState state) {
-	switch(state) {
-		case JABBER_BUDDY_STATE_CHAT:
-			return "chat";
-		case JABBER_BUDDY_STATE_AWAY:
-			return "away";
-		case JABBER_BUDDY_STATE_XA:
-			return "xa";
-		case JABBER_BUDDY_STATE_DND:
-			return "dnd";
-		case JABBER_BUDDY_STATE_ONLINE:
-			return "available";
-		case JABBER_BUDDY_STATE_UNKNOWN:
-		case JABBER_BUDDY_STATE_ERROR:
-			return NULL;
-		case JABBER_BUDDY_STATE_UNAVAILABLE:
-			return "offline";
-	}
+const char *
+jabber_buddy_state_get_show(JabberBuddyState state)
+{
+	int i;
+
+	for (i = 0; show_state_pairs[i].name; ++i)
+		if (state == show_state_pairs[i].state)
+			return show_state_pairs[i].name;
+
+/*	purple_debug_warning("jabber", "Unknown buddy state: %d\n", state); */
 	return NULL;
 }
 
--- a/libpurple/protocols/jabber/jabber.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Mon Jul 06 05:27:30 2009 +0000
@@ -596,7 +596,7 @@
 }
 
 static void
-txt_resolved_cb(GSList *responses, gpointer data)
+txt_resolved_cb(GList *responses, gpointer data)
 {
 	JabberStream *js = data;
 
@@ -624,7 +624,7 @@
 		}
 		g_strfreev(token);
 		purple_txt_response_destroy(resp);
-		responses = g_slist_delete_link(responses, responses);
+		responses = g_list_delete_link(responses, responses);
 	}
 
 	if (js->bosh) {
@@ -634,8 +634,8 @@
 	}
 
 	if (responses) {
-		g_slist_foreach(responses, (GFunc)purple_txt_response_destroy, NULL);
-		g_slist_free(responses);
+		g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL);
+		g_list_free(responses);
 	}
 }
 
@@ -908,7 +908,7 @@
 	if (type == JABBER_IQ_RESULT) {
 		if(js->registration) {
 			buf = g_strdup_printf(_("Registration of %s@%s successful"),
-				js->user->node, js->user->domain);
+					js->user->node, js->user->domain);
 			if(account->registration_cb)
 				(account->registration_cb)(account, TRUE, account->registration_cb_user_data);
 		} else {
--- a/libpurple/protocols/jabber/libxmpp.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/jabber/libxmpp.c	Mon Jul 06 05:27:30 2009 +0000
@@ -288,7 +288,7 @@
 	purple_account_user_split_set_reverse(split, FALSE);
 	prpl_info.user_splits = g_list_append(prpl_info.user_splits, split);
 
-	option = purple_account_option_bool_new(_("Require SSL/TLS"), "require_tls", FALSE);
+	option = purple_account_option_bool_new(_("Require SSL/TLS"), "require_tls", TRUE);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
 											   option);
 
--- a/libpurple/protocols/jabber/presence.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/jabber/presence.c	Mon Jul 06 05:27:30 2009 +0000
@@ -460,9 +460,6 @@
 {
 	const char *from;
 	const char *type;
-	const char *real_jid = NULL;
-	const char *affiliation = NULL;
-	const char *role = NULL;
 	char *status = NULL;
 	int priority = 0;
 	JabberID *jid;
@@ -476,7 +473,6 @@
 	char *buddy_name;
 	JabberBuddyState state = JABBER_BUDDY_STATE_UNKNOWN;
 	xmlnode *y;
-	gboolean muc = FALSE;
 	char *avatar_hash = NULL;
 	xmlnode *caps = NULL;
 	int idle = 0;
@@ -486,34 +482,57 @@
 	from = xmlnode_get_attrib(packet, "from");
 	type = xmlnode_get_attrib(packet, "type");
 
-	if(!(jb = jabber_buddy_find(js, from, TRUE)))
-		return;
+	jb = jabber_buddy_find(js, from, TRUE);
+	g_return_if_fail(jb != NULL);
 
 	signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(jabber_plugin,
 			"jabber-receiving-presence", js->gc, type, from, packet));
 	if (signal_return)
 		return;
 
-	if(!(jid = jabber_id_new(from)))
+	jid = jabber_id_new(from);
+	if (jid == NULL) {
+		purple_debug_error("jabber", "Ignoring presence with malformed 'from' "
+		                   "JID: %s\n", from);
 		return;
+	}
 
 	if(jb->error_msg) {
 		g_free(jb->error_msg);
 		jb->error_msg = NULL;
 	}
 
-	if(type && !strcmp(type, "error")) {
+	if (type == NULL) {
+		xmlnode *show;
+		char *show_data = NULL;
+
+		state = JABBER_BUDDY_STATE_ONLINE;
+
+		show = xmlnode_get_child(packet, "show");
+		if (show) {
+			show_data = xmlnode_get_data(show);
+			if (show_data) {
+				state = jabber_buddy_show_get_state(show_data);
+				g_free(show_data);
+			} else
+				purple_debug_warning("jabber", "<show/> present on presence, "
+				                     "but no contents!\n");
+		}
+	} else if (g_str_equal(type, "error")) {
 		char *msg = jabber_parse_error(js, packet, NULL);
 
 		state = JABBER_BUDDY_STATE_ERROR;
 		jb->error_msg = msg ? msg : g_strdup(_("Unknown Error in presence"));
-	} else if(type && !strcmp(type, "subscribe")) {
+	} else if (g_str_equal(type, "subscribe")) {
 		struct _jabber_add_permit *jap = g_new0(struct _jabber_add_permit, 1);
 		gboolean onlist = FALSE;
-		PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(js->gc), from);
+		PurpleAccount *account;
+		PurpleBuddy *buddy;
 		JabberBuddy *jb = NULL;
 		xmlnode *nick;
 
+		account = purple_connection_get_account(js->gc);
+		buddy = purple_find_buddy(account, from);
 		nick = xmlnode_get_child_with_namespace(packet, "nick", "http://jabber.org/protocol/nick");
 		if (nick)
 			nickname = xmlnode_get_data(nick);
@@ -528,16 +547,17 @@
 		jap->who = g_strdup(from);
 		jap->js = js;
 
-		purple_account_request_authorization(purple_connection_get_account(js->gc), from, NULL, nickname, NULL, onlist,
-				authorize_add_cb, deny_add_cb, jap);
+		purple_account_request_authorization(account, from, NULL, nickname,
+				NULL, onlist, authorize_add_cb, deny_add_cb, jap);
+
 		g_free(nickname);
 		jabber_id_free(jid);
 		return;
-	} else if(type && !strcmp(type, "subscribed")) {
+	} else if (g_str_equal(type, "subscribed")) {
 		/* we've been allowed to see their presence, but we don't care */
 		jabber_id_free(jid);
 		return;
-	} else if(type && !strcmp(type, "unsubscribe")) {
+	} else if (g_str_equal(type, "unsubscribe")) {
 		/* XXX I'm not sure this is the right way to handle this, it
 		 * might be better to add "unsubscribe" to the presence status
 		 * if lower down, but I'm not sure. */
@@ -546,14 +566,19 @@
 		 * acknowledging this (and the others) at some point. */
 		jabber_id_free(jid);
 		return;
+	} else if (g_str_equal(type, "probe")) {
+		purple_debug_warning("jabber", "Ignoring presence probe\n");
+		jabber_id_free(jid);
+		return;
+	} else if (g_str_equal(type, "unavailable")) {
+		state = JABBER_BUDDY_STATE_UNAVAILABLE;
+	} else if (g_str_equal(type, "unsubscribed")) {
+		state = JABBER_BUDDY_STATE_UNKNOWN;
 	} else {
-		if((y = xmlnode_get_child(packet, "show"))) {
-			char *show = xmlnode_get_data(y);
-			state = jabber_buddy_show_get_state(show);
-			g_free(show);
-		} else {
-			state = JABBER_BUDDY_STATE_ONLINE;
-		}
+		purple_debug_warning("jabber", "Ignoring presence with invalid type "
+		                     "'%s'\n", type);
+		jabber_id_free(jid);
+		return;
 	}
 
 
@@ -588,49 +613,6 @@
 				/* 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");
-			} else if(!strcmp(xmlns, "http://jabber.org/protocol/muc#user")) {
-				xmlnode *z;
-
-				muc = TRUE;
-				if((z = xmlnode_get_child(y, "status"))) {
-					const char *code = xmlnode_get_attrib(z, "code");
-					if(code && !strcmp(code, "201")) {
-						if((chat = jabber_chat_find(js, jid->node, jid->domain))) {
-							chat->config_dialog_type = PURPLE_REQUEST_ACTION;
-							chat->config_dialog_handle =
-								purple_request_action(js->gc,
-										_("Create New Room"),
-										_("Create New Room"),
-										_("You are creating a new room.  Would"
-											" you like to configure it, or"
-											" accept the default settings?"),
-										/* Default Action */ 1,
-										purple_connection_get_account(js->gc), NULL, chat->conv,
-										chat, 2,
-										_("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure),
-										_("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room));
-						}
-					} else if(code && !strcmp(code, "210")) {
-						/*  server rewrote room-nick */
-						if((chat = jabber_chat_find(js, jid->node, jid->domain))) {
-							g_free(chat->handle);
-							chat->handle = g_strdup(jid->resource);
-						}
-					}
-				}
-				if((z = xmlnode_get_child(y, "item"))) {
-					real_jid = xmlnode_get_attrib(z, "jid");
-					affiliation = xmlnode_get_attrib(z, "affiliation");
-					role = xmlnode_get_attrib(z, "role");
-					if(affiliation != NULL && !strcmp(affiliation, "owner"))
-						flags |= PURPLE_CBFLAGS_FOUNDER;
-					if (role != NULL) {
-						if (!strcmp(role, "moderator"))
-							flags |= PURPLE_CBFLAGS_OP;
-						else if (!strcmp(role, "participant"))
-							flags |= PURPLE_CBFLAGS_VOICE;
-					}
-				}
 			} else if(!strcmp(xmlns, "vcard-temp:x:update")) {
 				xmlnode *photo = xmlnode_get_child(y, "photo");
 				if(photo) {
@@ -687,75 +669,12 @@
 			return;
 		}
 
-
-		if(type && !strcmp(type, "unavailable")) {
-			gboolean nick_change = FALSE;
-
-			/* If the chat nick is invalid, we haven't yet joined, or we've
-			 * already left (it was probably us leaving after we closed the
-			 * chat), we don't care.
-			 */
-			if (!jid->resource || !chat->conv || chat->left) {
-				if (chat->left &&
-						jid->resource && chat->handle && !strcmp(jid->resource, chat->handle))
-					jabber_chat_destroy(chat);
-				jabber_id_free(jid);
-				g_free(status);
-				g_free(avatar_hash);
-				g_free(nickname);
-				return;
-			}
+		if (type == NULL) {
+			xmlnode *x;
+			const char *real_jid = NULL;
+			const char *affiliation = NULL;
+			const char *role = NULL;
 
-			jabber_buddy_remove_resource(jb, jid->resource);
-			if(chat->muc) {
-				xmlnode *x;
-				for(x = xmlnode_get_child(packet, "x"); x; x = xmlnode_get_next_twin(x)) {
-					const char *xmlns, *nick, *code;
-					xmlnode *stat, *item;
-					if(!(xmlns = xmlnode_get_namespace(x)) ||
-							strcmp(xmlns, "http://jabber.org/protocol/muc#user"))
-						continue;
-					if(!(stat = xmlnode_get_child(x, "status")))
-						continue;
-					if(!(code = xmlnode_get_attrib(stat, "code")))
-						continue;
-					if(!strcmp(code, "301")) {
-						/* XXX: we got banned */
-					} else if(!strcmp(code, "303")) {
-						if(!(item = xmlnode_get_child(x, "item")))
-							continue;
-						if(!(nick = xmlnode_get_attrib(item, "nick")))
-							continue;
-						nick_change = TRUE;
-						if(!strcmp(jid->resource, chat->handle)) {
-							g_free(chat->handle);
-							chat->handle = g_strdup(nick);
-						}
-						purple_conv_chat_rename_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, nick);
-						jabber_chat_remove_handle(chat, jid->resource);
-						break;
-					} else if(!strcmp(code, "307")) {
-						/* XXX: we got kicked */
-					} else if(!strcmp(code, "321")) {
-						/* XXX: removed due to an affiliation change */
-					} else if(!strcmp(code, "322")) {
-						/* XXX: removed because room is now members-only */
-					} else if(!strcmp(code, "332")) {
-						/* XXX: removed due to system shutdown */
-					}
-				}
-			}
-			if(!nick_change) {
-				if(!g_utf8_collate(jid->resource, chat->handle)) {
-					serv_got_chat_left(js->gc, chat->id);
-					jabber_chat_destroy(chat);
-				} else {
-					purple_conv_chat_remove_user(PURPLE_CONV_CHAT(chat->conv), jid->resource,
-							status);
-					jabber_chat_remove_handle(chat, jid->resource);
-				}
-			}
-		} else {
 			/*
 			 * XEP-0045 mandates the presence to include a resource (which is
 			 * treated as the chat nick). Some non-compliant servers allow
@@ -769,10 +688,61 @@
 				return;
 			}
 
+			x = xmlnode_get_child_with_namespace(packet, "x",
+					"http://jabber.org/protocol/muc#user");
+			if (x) {
+				xmlnode *status_node;
+				xmlnode *item_node;
+
+				status_node = xmlnode_get_child(x, "status");
+				if (status_node) {
+					const char *code = xmlnode_get_attrib(status_node, "code");
+					if (purple_strequal(code, "201")) {
+						if ((chat = jabber_chat_find(js, jid->node, jid->domain))) {
+							chat->config_dialog_type = PURPLE_REQUEST_ACTION;
+							chat->config_dialog_handle =
+								purple_request_action(js->gc,
+										_("Create New Room"),
+										_("Create New Room"),
+										_("You are creating a new room.  Would"
+											" you like to configure it, or"
+											" accept the default settings?"),
+										/* Default Action */ 1,
+										purple_connection_get_account(js->gc), NULL, chat->conv,
+										chat, 2,
+										_("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure),
+										_("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room));
+						}
+					} else if (purple_strequal(code, "210")) {
+						/* server rewrote room-nick */
+						if((chat = jabber_chat_find(js, jid->node, jid->domain))) {
+							g_free(chat->handle);
+							chat->handle = g_strdup(jid->resource);
+						}
+					}
+				}
+
+				item_node = xmlnode_get_child(x, "item");
+				if (item_node) {
+					real_jid    = xmlnode_get_attrib(item_node, "jid");
+					affiliation = xmlnode_get_attrib(item_node, "affiliation");
+					role        = xmlnode_get_attrib(item_node, "role");
+
+					if (purple_strequal(affiliation, "owner"))
+						flags |= PURPLE_CBFLAGS_FOUNDER;
+					if (role) {
+						if (g_str_equal(role, "moderator"))
+							flags |= PURPLE_CBFLAGS_OP;
+						else if (g_str_equal(role, "participant"))
+							flags |= PURPLE_CBFLAGS_VOICE;
+					}
+				}
+			}
+
 			if(!chat->conv) {
 				char *room_jid = g_strdup_printf("%s@%s", jid->node, jid->domain);
 				chat->id = i++;
-				chat->muc = muc;
+				chat->muc = (x != NULL);
 				chat->conv = serv_got_joined_chat(js->gc, chat->id, room_jid);
 				purple_conv_chat_set_nick(PURPLE_CONV_CHAT(chat->conv), chat->handle);
 
@@ -791,6 +761,133 @@
 			else
 				purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(chat->conv), jid->resource,
 						flags);
+		} else if (g_str_equal(type, "unavailable")) {
+			gboolean nick_change = FALSE;
+			gboolean kick = FALSE;
+			gboolean is_our_resource = FALSE; /* Is the presence about us? */
+
+			/* If the chat nick is invalid, we haven't yet joined, or we've
+			 * already left (it was probably us leaving after we closed the
+			 * chat), we don't care.
+			 */
+			if (!jid->resource || !chat->conv || chat->left) {
+				if (chat->left &&
+						jid->resource && chat->handle && !strcmp(jid->resource, chat->handle))
+					jabber_chat_destroy(chat);
+				jabber_id_free(jid);
+				g_free(status);
+				g_free(avatar_hash);
+				g_free(nickname);
+				return;
+			}
+
+			is_our_resource = (0 == g_utf8_collate(jid->resource, chat->handle));
+
+			jabber_buddy_remove_resource(jb, jid->resource);
+			if(chat->muc) {
+				xmlnode *x;
+				for(x = xmlnode_get_child(packet, "x"); x; x = xmlnode_get_next_twin(x)) {
+					const char *xmlns, *nick, *code;
+					xmlnode *stat, *item;
+					if(!(xmlns = xmlnode_get_namespace(x)) ||
+							strcmp(xmlns, "http://jabber.org/protocol/muc#user"))
+						continue;
+					if(!(stat = xmlnode_get_child(x, "status")))
+						continue;
+					if(!(code = xmlnode_get_attrib(stat, "code")))
+						continue;
+
+					item = xmlnode_get_child(x, "item");
+
+					if(!strcmp(code, "301")) {
+						/* XXX: we got banned */
+					} else if(!strcmp(code, "303")) {
+						if (!item)
+							continue;
+						if(!(nick = xmlnode_get_attrib(item, "nick")))
+							continue;
+						nick_change = TRUE;
+						if(!strcmp(jid->resource, chat->handle)) {
+							g_free(chat->handle);
+							chat->handle = g_strdup(nick);
+						}
+						purple_conv_chat_rename_user(PURPLE_CONV_CHAT(chat->conv), jid->resource, nick);
+						jabber_chat_remove_handle(chat, jid->resource);
+						break;
+					} else if(!strcmp(code, "307")) {
+						/* Someone was kicked from the room */
+						xmlnode *reason = NULL, *actor = NULL;
+						const char *actor_name = NULL;
+						char *reason_text = NULL;
+						char *tmp;
+
+						kick = TRUE;
+
+						if (item) {
+							reason = xmlnode_get_child(item, "reason");
+							actor = xmlnode_get_child(item, "actor");
+
+							if (reason != NULL)
+								reason_text = xmlnode_get_data(reason);
+							if (actor != NULL)
+								actor_name = xmlnode_get_attrib(actor, "jid");
+						}
+
+						if (reason_text == NULL)
+							reason_text = g_strdup(_("No reason"));
+
+						if (is_our_resource) {
+							if (actor_name != NULL)
+								tmp = g_strdup_printf(_("You have been kicked by %s: (%s)"),
+										actor_name, reason_text);
+							else
+								tmp = g_strdup_printf(_("You have been kicked: (%s)"),
+										reason_text);
+						} else {
+							if (actor_name != NULL)
+								tmp = g_strdup_printf(_("Kicked by %s (%s)"),
+										actor_name, reason_text);
+							else
+								tmp = g_strdup_printf(_("Kicked (%s)"),
+										reason_text);
+						}
+
+						g_free(reason_text);
+						g_free(status);
+						status = tmp;
+					} else if(!strcmp(code, "321")) {
+						/* XXX: removed due to an affiliation change */
+					} else if(!strcmp(code, "322")) {
+						/* XXX: removed because room is now members-only */
+					} else if(!strcmp(code, "332")) {
+						/* XXX: removed due to system shutdown */
+					}
+				}
+			}
+			if(!nick_change) {
+				if (is_our_resource) {
+					if (kick)
+						purple_conv_chat_write(PURPLE_CONV_CHAT(chat->conv), jid->resource,
+								status, PURPLE_MESSAGE_SYSTEM, time(NULL));
+
+					serv_got_chat_left(js->gc, chat->id);
+					jabber_chat_destroy(chat);
+				} else {
+					purple_conv_chat_remove_user(PURPLE_CONV_CHAT(chat->conv), jid->resource,
+							status);
+					jabber_chat_remove_handle(chat, jid->resource);
+				}
+			}
+		} else {
+			/* A type that isn't available or unavailable */
+			purple_debug_error("jabber", "MUC presence with bad type: %s\n",
+			                   type);
+
+			jabber_id_free(jid);
+			g_free(avatar_hash);
+			g_free(status);
+			g_free(nickname);
+			g_return_if_reached();
 		}
 	} else {
 		buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "",
@@ -837,8 +934,8 @@
 		}
 
 		if(state == JABBER_BUDDY_STATE_ERROR ||
-				(type && (!strcmp(type, "unavailable") ||
-						  !strcmp(type, "unsubscribed")))) {
+				(type && (g_str_equal(type, "unavailable") ||
+				          g_str_equal(type, "unsubscribed")))) {
 			PurpleConversation *conv;
 
 			jabber_buddy_remove_resource(jb, jid->resource);
@@ -867,7 +964,7 @@
 		g_free(buddy_name);
 	}
 
-	if (caps && (!type || g_str_equal(type, "available"))) {
+	if (caps && !type) {
 		/* handle Entity Capabilities (XEP-0115) */
 		const char *node = xmlnode_get_attrib(caps, "node");
 		const char *ver  = xmlnode_get_attrib(caps, "ver");
--- a/libpurple/protocols/msn/soap.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/msn/soap.c	Mon Jul 06 05:27:30 2009 +0000
@@ -80,7 +80,7 @@
 	conn->session = session;
 	conn->host = g_strdup(host);
 	conn->queue = g_queue_new();
-	conn->unsafe_debug = g_getenv("PURPLE_UNSAFE_DEBUG") != NULL;
+	conn->unsafe_debug = purple_debug_is_unsafe();
 	return conn;
 }
 
--- a/libpurple/protocols/myspace/message.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/myspace/message.c	Mon Jul 06 05:27:30 2009 +0000
@@ -19,9 +19,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include "internal.h"
+#include "myspace.h"
 #include "message.h"
-#include "myspace.h"
 
 static void msim_msg_debug_string_element(gpointer data, gpointer user_data);
 
--- a/libpurple/protocols/oscar/oscar.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1548,9 +1548,8 @@
 	 * authenticate.
 	 *
 	 * AIM 5.9 and lower use an MD5-based login procedure called "BUCP".
-	 * Note that some people were unable to log in to ICQ using the MD5
-	 * method, and so ICQ, when not using clientLogin, is still using a
-	 * very insecure XOR-based login scheme.
+	 * This authentication method is used for both ICQ and AIM when
+	 * clientLogin is not enabled.
 	 */
 	if (purple_account_get_bool(account, "use_clientlogin", OSCAR_DEFAULT_USE_CLIENTLOGIN)) {
 		send_client_login(od, purple_account_get_username(account));
--- a/libpurple/protocols/yahoo/util.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/yahoo/util.c	Mon Jul 06 05:27:30 2009 +0000
@@ -354,7 +354,7 @@
 					else if ((match = (char *) g_hash_table_lookup(ht, tmp->str)))
 						g_string_append(s, match);
 					else {
-						purple_debug(PURPLE_DEBUG_ERROR, "yahoo",
+						purple_debug_error("yahoo",
 							"Unknown ansi code 'ESC[%sm'.\n", tmp->str);
 						g_string_free(tmp, TRUE);
 						break;
@@ -423,7 +423,7 @@
 
 	ret = s->str;
 	g_string_free(s, FALSE);
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "yahoo_codes_to_html:  Returning string: '%s'.\n", ret);
+	purple_debug_misc("yahoo", "yahoo_codes_to_html:  Returning string: '%s'.\n", ret);
 	return ret;
 }
 
@@ -822,7 +822,7 @@
 	g_string_free(dest, FALSE);
 
 	esc = g_strescape(ret, NULL);
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "yahoo_html_to_codes:  Returning string: '%s'.\n", esc);
+	purple_debug_misc("yahoo", "yahoo_html_to_codes:  Returning string: '%s'.\n", esc);
 	g_free(esc);
 
 	yahoo_htc_queue_cleanup(colors);
--- a/libpurple/protocols/yahoo/yahoo.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Mon Jul 06 05:27:30 2009 +0000
@@ -390,7 +390,7 @@
 		b = i->data;
 		g = purple_buddy_get_group(b);
 		if (!purple_utf8_strcasecmp(group, purple_group_get_name(g))) {
-			purple_debug(PURPLE_DEBUG_MISC, "yahoo",
+			purple_debug_misc("yahoo",
 				"Oh good, %s is in the right group (%s).\n", name, group);
 			list = g_slist_delete_link(list, i);
 			onlist = 1;
@@ -399,7 +399,7 @@
 	}
 
 	if (!onlist) {
-		purple_debug(PURPLE_DEBUG_MISC, "yahoo",
+		purple_debug_misc("yahoo",
 			"Uhoh, %s isn't on the list (or not in this group), adding him to group %s.\n", name, group);
 		if (!(g = purple_find_group(group))) {
 			g = purple_group_new(group);
@@ -427,7 +427,7 @@
 	for (i = list; i; i = i->next) {
 		b = i->data;
 		g = purple_buddy_get_group(b);
-		purple_debug(PURPLE_DEBUG_MISC, "yahoo", "Deleting Buddy %s from group %s.\n", name,
+		purple_debug_misc("yahoo", "Deleting Buddy %s from group %s.\n", name,
 				purple_group_get_name(g));
 		purple_blist_remove_buddy(b);
 	}
@@ -801,9 +801,8 @@
 		PurpleBuddy *bud = purple_find_buddy(account, from);
 
 		if (!bud) {
-			purple_debug(PURPLE_DEBUG_WARNING, "yahoo",
-					   "%s is playing a game, and doesn't want "
-					   "you to know.\n", from);
+			purple_debug_warning("yahoo",
+					   "%s is playing a game, and doesn't want you to know.\n", from);
 		}
 
 		f = yahoo_friend_find(gc, from);
@@ -1943,8 +1942,7 @@
 	name = g_strdup(purple_buddy_get_name(buddy));
 	account = purple_buddy_get_account(buddy);
 
-	purple_debug(PURPLE_DEBUG_INFO, "blist",
-		"Removing '%s' from buddy list.\n", name);
+	purple_debug_info("yahoo", "blist: Removing '%s' from buddy list.\n", name);
 	purple_account_remove_buddy(account, buddy, group);
 	purple_blist_remove_buddy(buddy);
 
@@ -2382,14 +2380,14 @@
 	pos += 2;
 
 	pktlen = yahoo_get16(buf + pos); pos += 2;
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "p2p: %d bytes to read\n", len);
+	purple_debug_misc("yahoo", "p2p: %d bytes to read\n", len);
 
 	pkt = yahoo_packet_new(0, 0, 0);
 	pkt->service = yahoo_get16(buf + pos); pos += 2;
 	pkt->status = yahoo_get32(buf + pos); pos += 4;
 	pkt->id = yahoo_get32(buf + pos); pos += 4;
 
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "p2p: Yahoo Service: 0x%02x Status: %d\n",pkt->service, pkt->status);
+	purple_debug_misc("yahoo", "p2p: Yahoo Service: 0x%02x Status: %d\n",pkt->service, pkt->status);
 	yahoo_packet_read(pkt, buf + pos, pktlen);
 
 	/* packet processing */
@@ -2909,8 +2907,7 @@
 		break;
 
 	default:
-		purple_debug(PURPLE_DEBUG_ERROR, "yahoo",
-				   "Unhandled service 0x%02x\n", pkt->service);
+		purple_debug_error("yahoo", "Unhandled service 0x%02x\n", pkt->service);
 		break;
 	}
 }
@@ -2979,8 +2976,7 @@
 		pos += 2;
 
 		pktlen = yahoo_get16(yd->rxqueue + pos); pos += 2;
-		purple_debug(PURPLE_DEBUG_MISC, "yahoo",
-				   "%d bytes to read, rxlen is %d\n", pktlen, yd->rxlen);
+		purple_debug_misc("yahoo", "%d bytes to read, rxlen is %d\n", pktlen, yd->rxlen);
 
 		if (yd->rxlen < (YAHOO_PACKET_HDRLEN + pktlen))
 			return;
@@ -2991,8 +2987,7 @@
 
 		pkt->service = yahoo_get16(yd->rxqueue + pos); pos += 2;
 		pkt->status = yahoo_get32(yd->rxqueue + pos); pos += 4;
-		purple_debug(PURPLE_DEBUG_MISC, "yahoo",
-				   "Yahoo Service: 0x%02x Status: %d\n",
+		purple_debug_misc("yahoo", "Yahoo Service: 0x%02x Status: %d\n",
 				   pkt->service, pkt->status);
 		pkt->id = yahoo_get32(yd->rxqueue + pos); pos += 4;
 
@@ -4882,8 +4877,7 @@
 	gc = purple_conversation_get_gc(conv);
 	yd = gc->proto_data;
 	id = yd->conf_id;
-	purple_debug(PURPLE_DEBUG_INFO, "yahoo",
-	           "Trying to join %s \n", args[0]);
+	purple_debug_info("yahoo", "Trying to join %s \n", args[0]);
 
 	comp = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
 	g_hash_table_replace(comp, g_strdup("room"), g_ascii_strdown(args[0], -1));
@@ -4920,8 +4914,8 @@
 
 	g_return_val_if_fail(c != NULL, FALSE);
 
-	purple_debug(PURPLE_DEBUG_INFO, "yahoo",
-	           "Sending <ding> on account %s to buddy %s.\n", username, c->name);
+	purple_debug_info("yahoo", "Sending <ding> on account %s to buddy %s.\n",
+			username, c->name);
 	purple_conv_im_send_with_flags(PURPLE_CONV_IM(c), "<ding>", PURPLE_MESSAGE_INVISIBLE);
 
 	return TRUE;
--- a/libpurple/protocols/yahoo/yahoo_filexfer.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_filexfer.c	Mon Jul 06 05:27:30 2009 +0000
@@ -156,8 +156,8 @@
 	PurpleXfer *xfer;
 	struct yahoo_xfer_data *xd;
 
-	purple_debug(PURPLE_DEBUG_INFO, "yahoo",
-			   "AAA - in yahoo_receivefile_connected\n");
+	purple_debug_info("yahoo", "in yahoo_receivefile_connected\n");
+
 	if (!(xfer = data))
 		return;
 	if (!(xd = xfer->data))
@@ -235,8 +235,8 @@
 	PurpleAccount *account;
 	struct yahoo_data *yd;
 
-	purple_debug(PURPLE_DEBUG_INFO, "yahoo",
-			   "AAA - in yahoo_sendfile_connected\n");
+	purple_debug_info("yahoo", "in yahoo_sendfile_connected\n");
+
 	if (!(xfer = data))
 		return;
 	if (!(xd = xfer->data))
--- a/libpurple/protocols/yahoo/yahoo_packet.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_packet.c	Mon Jul 06 05:27:30 2009 +0000
@@ -187,15 +187,12 @@
 			pos = x;
 			pkt->hash = g_slist_prepend(pkt->hash, pair);
 
-#ifdef DEBUG
-			{
+			if (purple_debug_is_verbose()) {
 				char *esc;
 				esc = g_strescape(pair->value, NULL);
-				purple_debug(PURPLE_DEBUG_MISC, "yahoo",
-						   "Key: %d  \tValue: %s\n", pair->key, esc);
+				purple_debug_misc("yahoo", "Key: %d  \tValue: %s\n", pair->key, esc);
 				g_free(esc);
 			}
-#endif /* DEBUG */
 		} else {
 			g_free(pair);
 		}
@@ -253,35 +250,35 @@
 #ifdef YAHOO_DEBUG
 	int i;
 
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+	purple_debug_misc("yahoo", "");
 
 	for (i = 0; i + 1 < len; i += 2) {
 		if ((i % 16 == 0) && i) {
-			purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
-			purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+			purple_debug_misc(NULL, "\n");
+			purple_debug_misc("yahoo", "");
 		}
 
-		purple_debug(PURPLE_DEBUG_MISC, NULL, "%02x%02x ", data[i], data[i + 1]);
+		purple_debug_misc(NULL, "%02x%02x ", data[i], data[i + 1]);
 	}
 	if (i < len)
-		purple_debug(PURPLE_DEBUG_MISC, NULL, "%02x", data[i]);
+		purple_debug_misc(NULL, "%02x", data[i]);
 
-	purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+	purple_debug_misc(NULL, "\n");
+	purple_debug_misc("yahoo", "");
 
 	for (i = 0; i < len; i++) {
 		if ((i % 16 == 0) && i) {
-			purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
-			purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+			purple_debug_misc(NULL, "\n");
+			purple_debug_misc("yahoo", "");
 		}
 
 		if (g_ascii_isprint(data[i]))
-			purple_debug(PURPLE_DEBUG_MISC, NULL, "%c ", data[i]);
+			purple_debug_misc(NULL, "%c ", data[i]);
 		else
-			purple_debug(PURPLE_DEBUG_MISC, NULL, ". ");
+			purple_debug_misc(NULL, ". ");
 	}
 
-	purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
+	purple_debug_misc(NULL, "\n");
 #endif /* YAHOO_DEBUG */
 }
 
--- a/libpurple/protocols/yahoo/yahoochat.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoochat.c	Mon Jul 06 05:27:30 2009 +0000
@@ -648,7 +648,7 @@
 	}
 
 	if (!msg) {
-		purple_debug(PURPLE_DEBUG_MISC, "yahoo", "Got a message packet with no message.\nThis probably means something important, but we're ignoring it.\n");
+		purple_debug_misc("yahoo", "Got a message packet with no message.\nThis probably means something important, but we're ignoring it.\n");
 		return;
 	}
 	msg2 = yahoo_string_decode(gc, msg, utf8);
--- a/libpurple/protocols/yahoo/ycht.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/protocols/yahoo/ycht.c	Mon Jul 06 05:27:30 2009 +0000
@@ -196,35 +196,35 @@
 #ifdef YAHOO_YCHT_DEBUG
 	int i;
 
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+	purple_debug_misc("yahoo", "");
 
 	for (i = 0; i + 1 < len; i += 2) {
 		if ((i % 16 == 0) && i) {
-			purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
-			purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+			purple_debug_misc(NULL, "\n");
+			purple_debug_misc("yahoo", "");
 		}
 
-		purple_debug(PURPLE_DEBUG_MISC, NULL, "%02hhx%02hhx ", data[i], data[i + 1]);
+		purple_debug_misc(NULL, "%02hhx%02hhx ", data[i], data[i + 1]);
 	}
 	if (i < len)
-		purple_debug(PURPLE_DEBUG_MISC, NULL, "%02hhx", data[i]);
+		purple_debug_misc(NULL, "%02hhx", data[i]);
 
-	purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
-	purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+	purple_debug_misc(NULL, "\n");
+	purple_debug_misc("yahoo", "");
 
 	for (i = 0; i < len; i++) {
 		if ((i % 16 == 0) && i) {
-			purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
-			purple_debug(PURPLE_DEBUG_MISC, "yahoo", "");
+			purple_debug_misc(NULL, "\n");
+			purple_debug_misc("yahoo", "");
 		}
 
 		if (g_ascii_isprint(data[i]))
-			purple_debug(PURPLE_DEBUG_MISC, NULL, "%c ", data[i]);
+			purple_debug_misc(NULL, "%c ", data[i]);
 		else
-			purple_debug(PURPLE_DEBUG_MISC, NULL, ". ");
+			purple_debug_misc(NULL, ". ");
 	}
 
-	purple_debug(PURPLE_DEBUG_MISC, NULL, "\n");
+	purple_debug_misc(NULL, "\n");
 #endif /* YAHOO_YCHT_DEBUG */
 }
 
@@ -507,16 +507,15 @@
 		service = yahoo_get32(ycht->rxqueue + pos); pos += 4;
 		status = yahoo_get16(ycht->rxqueue + pos); pos += 2;
 		pktlen  = yahoo_get16(ycht->rxqueue + pos); pos += 2;
-		purple_debug(PURPLE_DEBUG_MISC, "yahoo",
-				   "ycht: %d bytes to read, rxlen is %d\n", pktlen, ycht->rxlen);
+		purple_debug_misc("yahoo", "ycht: %d bytes to read, rxlen is %d\n",
+				pktlen, ycht->rxlen);
 
 		if (ycht->rxlen < (YCHT_HEADER_LEN + pktlen))
 			return;
 
 		purple_debug_misc("yahoo", "--==Incoming YCHT packet==--\n");
-		purple_debug(PURPLE_DEBUG_MISC, "yahoo",
-			   "YCHT Service: 0x%02x Version: 0x%02x Status: 0x%02x\n",
-			   service, version, status);
+		purple_debug_misc("yahoo", "YCHT Service: 0x%02x Version: 0x%02x Status: 0x%02x\n",
+				service, version, status);
 		ycht_packet_dump(ycht->rxqueue, YCHT_HEADER_LEN + pktlen);
 
 		pkt = ycht_packet_new(version, service, status);
--- a/libpurple/prpl.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/prpl.c	Mon Jul 06 05:27:30 2009 +0000
@@ -282,7 +282,8 @@
 
 	g_slist_free(list);
 
-	/* we get to re-use the last status we found */
+	/* The buddy is no longer online, they are therefore by definition not
+	 * still typing to us. */
 	if (!purple_status_is_online(status))
 		serv_got_typing_stopped(purple_account_get_connection(account), name);
 }
--- a/libpurple/purple-remote	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/purple-remote	Mon Jul 06 05:27:30 2009 +0000
@@ -161,7 +161,6 @@
                 purple.PurpleSavedstatusSetSubstatus(current, account, type, message)
                 purple.PurpleSavedstatusActivateForAccount(current, account)
         else:
-            accounts = purple.PurpleAccountsGetAllActive()
             saved = purple.PurpleSavedstatusNew("", status_type)
             purple.PurpleSavedstatusSetMessage(saved, message)
             purple.PurpleSavedstatusActivate(saved)
--- a/libpurple/tests/test_cipher.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/tests/test_cipher.c	Mon Jul 06 05:27:30 2009 +0000
@@ -168,6 +168,11 @@
 	purple_cipher_context_destroy(context); \
 }
 
+START_TEST(test_sha1_empty_string) {
+	SHA1_TEST("", "da39a3ee5e6b4b0d3255bfef95601890afd80709");
+}
+END_TEST
+
 START_TEST(test_sha1_a) {
 	SHA1_TEST("a", "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8");
 }
@@ -190,6 +195,66 @@
 END_TEST
 
 /******************************************************************************
+ * SHA-256 Tests
+ *****************************************************************************/
+#define SHA256_TEST(data, digest) { \
+	PurpleCipher *cipher = NULL; \
+	PurpleCipherContext *context = NULL; \
+	gchar cdigest[65]; \
+	gboolean ret = FALSE; \
+	\
+	cipher = purple_ciphers_find_cipher("sha256"); \
+	context = purple_cipher_context_new(cipher, NULL); \
+	\
+	if((data)) { \
+		purple_cipher_context_append(context, (guchar *)(data), strlen((data))); \
+	} else { \
+		gint j; \
+		guchar buff[1000]; \
+		\
+		memset(buff, 'a', 1000); \
+		\
+		for(j = 0; j < 1000; j++) \
+			purple_cipher_context_append(context, buff, 1000); \
+	} \
+	\
+	ret = purple_cipher_context_digest_to_str(context, sizeof(cdigest), cdigest, \
+	                                        NULL); \
+	\
+	fail_unless(ret == TRUE, NULL); \
+	\
+	fail_unless(strcmp((digest), cdigest) == 0, NULL); \
+	\
+	purple_cipher_context_destroy(context); \
+}
+
+START_TEST(test_sha256_empty_string) {
+	SHA256_TEST("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
+}
+END_TEST
+
+START_TEST(test_sha256_a) {
+	SHA256_TEST("a", "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb");
+}
+END_TEST
+
+START_TEST(test_sha256_abc) {
+	SHA256_TEST("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad");
+}
+END_TEST
+
+START_TEST(test_sha256_abcd_gibberish) {
+	SHA256_TEST("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+			  "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
+}
+END_TEST
+
+START_TEST(test_sha256_1000_as_1000_times) {
+	SHA256_TEST(NULL, "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0");
+}
+END_TEST
+
+/******************************************************************************
  * DES Tests
  *****************************************************************************/
 #define DES_TEST(in, keyz, out, len) { \
@@ -726,12 +791,22 @@
 
 	/* sha1 tests */
 	tc = tcase_create("SHA1");
+	tcase_add_test(tc, test_sha1_empty_string);
 	tcase_add_test(tc, test_sha1_a);
 	tcase_add_test(tc, test_sha1_abc);
 	tcase_add_test(tc, test_sha1_abcd_gibberish);
 	tcase_add_test(tc, test_sha1_1000_as_1000_times);
 	suite_add_tcase(s, tc);
 
+	/* sha256 tests */
+	tc = tcase_create("SHA256");
+	tcase_add_test(tc, test_sha256_empty_string);
+	tcase_add_test(tc, test_sha256_a);
+	tcase_add_test(tc, test_sha256_abc);
+	tcase_add_test(tc, test_sha256_abcd_gibberish);
+	tcase_add_test(tc, test_sha256_1000_as_1000_times);
+	suite_add_tcase(s, tc);
+
 	/* des tests */
 	tc = tcase_create("DES");
 	tcase_add_test(tc, test_des_12345678);
--- a/libpurple/util.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/libpurple/util.c	Mon Jul 06 05:27:30 2009 +0000
@@ -979,8 +979,8 @@
 		buf[buflen] = '\0';
 		pln = buf;
 
-		len = 2;
-		while(isdigit((gint) text[len])) len++;
+		len = (*(text+2) == 'x' ? 3 : 2);
+		while(isxdigit((gint) text[len])) len++;
 		if(text[len] == ';') len++;
 	}
 	else
@@ -4042,7 +4042,7 @@
 		}
 	}
 
-	if(g_getenv("PURPLE_UNSAFE_DEBUG"))
+	if(purple_debug_is_unsafe())
 		purple_debug_misc("util", "Request: '%s'\n", gfud->request);
 	else
 		purple_debug_misc("util", "request constructed\n");
@@ -4159,7 +4159,7 @@
 	g_return_val_if_fail(url      != NULL, NULL);
 	g_return_val_if_fail(callback != NULL, NULL);
 
-	if(g_getenv("PURPLE_UNSAFE_DEBUG"))
+	if(purple_debug_is_unsafe())
 		purple_debug_info("util",
 				 "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n",
 				 url, full, user_agent?user_agent:"(null)", http11);
--- a/pidgin/gtkaccount.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/gtkaccount.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1990,8 +1990,9 @@
 				/* This is for when set_account() is called for a single account */
 				const char *path;
 				path = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon");
-				if (path != NULL && *path != '\0')
+				if ((path != NULL) && (*path != '\0')) {
 					img = purple_imgstore_new_from_file(path);
+				}
 			}
 		} else {
 			img = purple_buddy_icons_find_account_icon(account);
--- a/pidgin/gtkblist.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/gtkblist.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1575,7 +1575,7 @@
 
 	if (!(purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE)) {
 		show_offline = purple_blist_node_get_bool(node, "show_offline");
-		pidgin_new_item_from_stock(menu, show_offline ? _("Hide when offline") : _("Show when offline"),
+		pidgin_new_item_from_stock(menu, show_offline ? _("Hide When Offline") : _("Show When Offline"),
 				NULL, G_CALLBACK(gtk_blist_menu_showoffline_cb), node, 0, 0, NULL);
 	}
 
@@ -1759,7 +1759,7 @@
 				 G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL);
 	if (!(purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE)) {
 		gboolean show_offline = purple_blist_node_get_bool(node, "show_offline");
-		pidgin_new_item_from_stock(menu, show_offline ? _("Hide when offline") : _("Show when offline"),
+		pidgin_new_item_from_stock(menu, show_offline ? _("Hide When Offline") : _("Show When Offline"),
 				NULL, G_CALLBACK(gtk_blist_menu_showoffline_cb), node, 0, 0, NULL);
 	}
 
@@ -6300,7 +6300,7 @@
 	selected = (gnode == selected_node);
 
 	if (!expanded) {
-		g_snprintf(group_count, sizeof(group_count), " (%d/%d)",
+		g_snprintf(group_count, sizeof(group_count), "%d/%d",
 		           purple_blist_get_group_online_count(group),
 		           purple_blist_get_group_size(group, FALSE));
 	}
@@ -6319,11 +6319,18 @@
 
 	esc = g_markup_escape_text(group->name, -1);
 	if (text_color) {
-		mark = g_strdup_printf("<span foreground='%s' font_desc='%s'><b>%s</b>%s</span>",
-							text_color, text_font, esc ? esc : "", group_count);
+		mark = g_strdup_printf("<span foreground='%s' font_desc='%s'><b>%s</b>%s%s%s</span>",
+		                       text_color, text_font,
+		                       esc ? esc : "",
+		                       !expanded ? " <span font_weight='light'>(</span>" : "",
+		                       group_count,
+		                       !expanded ? "<span font_weight='light'>)</span>" : "");
 	} else {
-		mark = g_strdup_printf("<span font_desc='%s'><b>%s</b>%s</span>",
-							text_font, esc ? esc : "", group_count);
+		mark = g_strdup_printf("<span font_desc='%s'><b>%s</b>%s%s%s</span>",
+		                       text_font, esc ? esc : "",
+		                       !expanded ? " <span font_weight='light'>(</span>" : "",
+		                       group_count,
+		                       !expanded ? "<span font_weight='light'>)</span>" : "");
 	}
 
 	g_free(esc);
--- a/pidgin/gtkconv.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/gtkconv.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1770,7 +1770,7 @@
 			g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
 	}
 
-	button = pidgin_new_item_from_stock(menu, _("Last said"), GTK_STOCK_INDEX,
+	button = pidgin_new_item_from_stock(menu, _("Last Said"), GTK_STOCK_INDEX,
 						G_CALLBACK(menu_last_said_cb), PIDGIN_CONVERSATION(conv), 0, 0, NULL);
 	g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
 	if (!get_mark_for_user(PIDGIN_CONVERSATION(conv), who))
@@ -8196,15 +8196,11 @@
 static void
 build_warn_close_dialog(PidginWindow *gtkwin)
 {
-	GtkWidget *label;
-	GtkWidget *vbox, *hbox;
-	GtkWidget *img;
+	GtkWidget *label, *vbox, *hbox, *img;
 
 	g_return_if_fail(warn_close_dialog == NULL);
 
-
-	warn_close_dialog = gtk_dialog_new_with_buttons(
-							_("Confirm close"),
+	warn_close_dialog = gtk_dialog_new_with_buttons(_("Confirm close"),
 							GTK_WINDOW(gtkwin->window), GTK_DIALOG_MODAL,
 							GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 							GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL);
--- a/pidgin/gtkdialogs.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/gtkdialogs.c	Mon Jul 06 05:27:30 2009 +0000
@@ -231,7 +231,7 @@
 	{N_("Turkish"),             "tr", "Serdar Soytetir", "tulliana@gmail.com"},
 	{N_("Urdu"),                "ur", "RKVS Raman", "rkvsraman@gmail.com"},
 	{N_("Vietnamese"),          "vi", N_("T.M.Thanh and the Gnome-Vi Team"), "gnomevi-list@lists.sf.net"},
-	{N_("Simplified Chinese"),  "zh_CN", "Funda Wang", "fundawang@linux.net.cn"},
+	{N_("Simplified Chinese"),  "zh_CN", "Aron Xu", "aronmalache@163.com"},
 	{N_("Hong Kong Chinese"),   "zh_HK", "Abel Cheung", "abelindsay@gmail.com"},
 	{N_("Hong Kong Chinese"),   "zh_HK", "Ambrose C. Li", "acli@ada.dhs.org"},
 	{N_("Hong Kong Chinese"),   "zh_HK", "Paladin R. Liu", "paladin@ms1.hinet.net"},
@@ -294,6 +294,7 @@
 	{N_("Swedish"),             "sv", "Christian Rose", NULL},
 	{N_("Turkish"),             "tr", "Ahmet Alp BALKAN", NULL},
 	{N_("Simplified Chinese"),  "zh_CN", "Hashao, Rocky S. Lee", NULL},
+	{N_("Simplified Chinese"),  "zh_CN", "Funda Wang", "fundawang@linux.net.cn"},
 	{N_("Traditional Chinese"), "zh_TW", "Hashao, Rocky S. Lee", NULL},
 	{NULL, NULL, NULL, NULL}
 };
--- a/pidgin/gtkprefs.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/gtkprefs.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1457,7 +1457,7 @@
 	gtk_size_group_add_widget(sg, label);
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 
-	vbox = pidgin_make_frame(ret, _("Conversation Window Hiding"));
+	vbox = pidgin_make_frame(ret, _("Conversation Window"));
 	label = pidgin_prefs_dropdown(vbox, _("_Hide new IM conversations:"),
 					PURPLE_PREF_STRING, PIDGIN_PREFS_ROOT "/conversations/im/hide_new",
 					_("Never"), "never",
@@ -1467,6 +1467,9 @@
 	gtk_size_group_add_widget(sg, label);
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 
+#ifdef _WIN32
+	pidgin_prefs_checkbox(_("Minimi_ze new conversation windows"), PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", vbox);
+#endif
 
 	/* All the tab options! */
 	vbox = pidgin_make_frame(ret, _("Tabs"));
@@ -1575,8 +1578,6 @@
 
 #ifdef _WIN32
 	pidgin_prefs_checkbox(_("F_lash window when IMs are received"), PIDGIN_PREFS_ROOT "/win32/blink_im", vbox);
-
-	pidgin_prefs_checkbox(_("Minimi_ze new conversation windows"), PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", vbox);
 #endif
 
 	pidgin_prefs_labeled_spin_button(vbox,
@@ -1584,7 +1585,6 @@
 		PIDGIN_PREFS_ROOT "/conversations/minimum_entry_lines",
 		1, 8, NULL);
 
-
 #if GTK_CHECK_VERSION(2,4,0)
 	vbox = pidgin_make_frame(ret, _("Font"));
 	if (purple_running_gnome())
@@ -1593,7 +1593,11 @@
 		fontpref = pidgin_prefs_checkbox(_("Use font from _theme"), PIDGIN_PREFS_ROOT "/conversations/use_theme_font", vbox);
 
 	font_name = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/custom_font");
-	font_button = gtk_font_button_new_with_font(font_name ? font_name : NULL);
+	if ((font_name == NULL) || (*font_name == '\0')) {
+		font_button = gtk_font_button_new();
+	} else {
+		font_button = gtk_font_button_new_with_font(font_name);
+	}
 
 	gtk_font_button_set_show_style(GTK_FONT_BUTTON(font_button), TRUE);
 	hbox = pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("Conversation _font:"), NULL, font_button, FALSE, NULL);
@@ -2777,9 +2781,7 @@
 }
 
 static int
-prefs_notebook_add_page(const char *text,
-  		                GtkWidget *page,
-                        int ind)
+prefs_notebook_add_page(const char *text, GtkWidget *page, int ind)
 {
 #if GTK_CHECK_VERSION(2,4,0)
 	return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text));
--- a/pidgin/plugins/perl/Makefile.am	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/plugins/perl/Makefile.am	Mon Jul 06 05:27:30 2009 +0000
@@ -44,7 +44,7 @@
 			${LN_S} -f $$srcloc/$$f $$f; \
 		done; \
 	fi
-	@cd common && $(perlpath) Makefile.PL $(PERL_MM_PARAMS)
+	@cd common && $(perlpath) Makefile.PL
 
 common/Makefile.PL: common/Makefile.PL.in $(top_builddir)/config.status
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
@@ -53,7 +53,7 @@
 	@for dir in $(perl_dirs); do \
 		cd $$dir && \
 		if [ ! -f Makefile ]; then \
-			$(perlpath) Makefile.PL $(PERL_MM_PARAMS); \
+			$(perlpath) Makefile.PL; \
 		fi && \
 		($(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS) || \
 		$(MAKE) CC="$(CC)" CCFLAGS="$(PERL_CFLAGS) $(CFLAGS)" $(PERL_EXTRA_OPTS)) && \
--- a/pidgin/plugins/perl/common/Makefile.PL.in	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/plugins/perl/common/Makefile.PL.in	Mon Jul 06 05:27:30 2009 +0000
@@ -13,4 +13,15 @@
     'OBJECT'        => '$(O_FILES)', # link all the C files too
     'TYPEMAPS'      => ["@top_srcdir@/libpurple/plugins/perl/common/typemap"],
 #    'OPTIMIZE'      => '-g', # For debugging.
+    'INSTALLDIRS'          => 'vendor',
+    'INSTALL_BASE'         => '$(prefix)',
+    'INSTALLVENDORARCH'    => '$(libdir)/pidgin/perl',
+    'INSTALLVENDORMAN3DIR' => '$(mandir)/man3',
+    'macro'                => {
+        'prefix'      => '@prefix@',
+        'exec_prefix' => '@exec_prefix@',
+        'libdir'      => '@libdir@',
+        'mandir'      => '@mandir@',
+        'datarootdir' => '@datarootdir@',
+    },
 );
--- a/pidgin/plugins/pidginrc.c	Mon Jul 06 04:37:06 2009 +0000
+++ b/pidgin/plugins/pidginrc.c	Mon Jul 06 05:27:30 2009 +0000
@@ -1,7 +1,13 @@
 /**
- * @file purplerc.c Purple gtk resource control plugin.
+ * @file pidginrc.c Pidgin GTK+ resource control plugin.
+ * @ingroup pidgin
+ */
+
+/* pidgin
  *
- * Copyright (C) 2005 Etan Reisner <deryni@eden.rutgers.edu>
+ * Pidgin 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
@@ -612,7 +618,7 @@
 	DISPLAY_VERSION,
 	N_("Provides access to commonly used gtkrc settings."),
 	N_("Provides access to commonly used gtkrc settings."),
-	"Etan Reisner <deryni@eden.rutgers.edu>",
+	"Etan Reisner <deryni@pidgin.im>",
 	PURPLE_WEBSITE,
 	purplerc_plugin_load,
 	purplerc_plugin_unload,
--- a/po/ChangeLog	Mon Jul 06 04:37:06 2009 +0000
+++ b/po/ChangeLog	Mon Jul 06 05:27:30 2009 +0000
@@ -2,9 +2,13 @@
 
 version 2.6.0
 	* Armenian translation added (David Avsharyan)
+	* Catalan translation updated (Josep Puigdemont)
+	* Finnish translation updated (Timo Jyrinki)
+	* German translation updated (Jochen Kemnade and Björn Voigt)
 	* Lao translation updated (Anousak Souphavah)
 	* Slovenian translation updated (Martin Srebotnjak)
 	* Swahili translation added (Paul Msegeya)
+	* Simplified Chinese translation updated under new translator (Aron Xu)
 
 version 2.5.8
 	* No changes
--- a/po/ca.po	Mon Jul 06 04:37:06 2009 +0000
+++ b/po/ca.po	Mon Jul 06 05:27:30 2009 +0000
@@ -33,8 +33,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-02 01:34-0700\n"
-"PO-Revision-Date: 2009-06-29 08:37+0200\n"
+"POT-Creation-Date: 2009-07-06 00:17+0200\n"
+"PO-Revision-Date: 2009-07-06 00:19+0200\n"
 "Last-Translator: Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>\n"
 "Language-Team: Catalan <tradgnome@softcatala.net>\n"
 "MIME-Version: 1.0\n"
@@ -2215,9 +2215,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <RESPOSTA-AUTOMÀTICA>: %s\n"
 
-#, fuzzy
 msgid "Error creating conference."
-msgstr "S'ha produït un error en crear la connexió"
+msgstr "S'ha produït un error en crear la conferència."
 
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
@@ -2624,14 +2623,14 @@
 #. * description
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
-"Currently, this includes Adium, MSN Messenger, and Trillian.\n"
+"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
 "\n"
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
 msgstr ""
 "Quan es visualitzin els registres, aquest connector inclourà registres "
 "d'altres clients de MI. De moment, es poden incloure els d'Adium, MSN "
-"Messenger, i Trillian.\n"
+"Messenger, aMSN, i Trillian.\n"
 "\n"
 "Avís: aquest connector encara està en desenvolupament i pot ser que es pengi."
 
@@ -2680,7 +2679,7 @@
 "Desa els missatges que s'hagin enviat a un usuari fora de línia com a avís"
 
 msgid ""
-"The rest of the messages will be saved as pounce. You can edit/delete the "
+"The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
 "La resta de missatges es desaran com a un avís. Podeu editar o suprimir "
@@ -3882,172 +3881,6 @@
 msgid "Local Time"
 msgstr "Hora local"
 
-msgid "Last Activity"
-msgstr "Darrera activitat"
-
-msgid "Service Discovery Info"
-msgstr "Informació del servei de descoberta"
-
-msgid "Service Discovery Items"
-msgstr "Elements del servei de descoberta"
-
-# http://xmpp.org/extensions/xep-0033.html
-msgid "Extended Stanza Addressing"
-msgstr "Bloc d'adreçament estès"
-
-msgid "Multi-User Chat"
-msgstr "Xat multi-usuari"
-
-msgid "Multi-User Chat Extended Presence Information"
-msgstr "Informació de presència estesa per a xats multi-usuari"
-
-msgid "In-Band Bytestreams"
-msgstr ""
-
-msgid "Ad-Hoc Commands"
-msgstr "Ordres Ad-Hoc"
-
-msgid "PubSub Service"
-msgstr "Servei PubSub"
-
-msgid "SOCKS5 Bytestreams"
-msgstr "Flux de bits SOCK5"
-
-msgid "Out of Band Data"
-msgstr ""
-
-msgid "XHTML-IM"
-msgstr "XHTML-IM"
-
-msgid "In-Band Registration"
-msgstr ""
-
-msgid "User Location"
-msgstr "Ubicació de l'usuari"
-
-msgid "User Avatar"
-msgstr "Avatar de l'usuari"
-
-msgid "Chat State Notifications"
-msgstr "Notificacions de l'estat del xat"
-
-msgid "Software Version"
-msgstr "Versió del programari"
-
-msgid "Stream Initiation"
-msgstr "Iniciació del flux"
-
-msgid "File Transfer"
-msgstr "Transferència de fitxers"
-
-msgid "User Mood"
-msgstr "Estat d'ànim de l'usuari"
-
-msgid "User Activity"
-msgstr "Activitat de l'usuari"
-
-msgid "Entity Capabilities"
-msgstr "Capacitats de l'entitat"
-
-msgid "Encrypted Session Negotiations"
-msgstr "Negociacions de la sessió xifrada"
-
-# Pot ser també música, cançó... (josep)
-# Vegeu: http://xmpp.org/extensions/xep-0118.html
-msgid "User Tune"
-msgstr "Melodia de l'usuari"
-
-# Nota: "Roster" en XMPP és la llista de contactes (josep)
-msgid "Roster Item Exchange"
-msgstr "Intercanvi d'element de la llista de contactes"
-
-# Vegeu: http://xmpp.org/extensions/xep-0152.html (josep)
-# Nota: codi mort
-msgid "Reachability Address"
-msgstr "Adreça de localització"
-
-msgid "User Profile"
-msgstr "Perfil de l'usuari"
-
-# Nota: Jingle és una extensió d'XMPP i ho considerem nom propi (josep)
-# http://www.xmpp.org/extensions/xep-0166.html
-msgid "Jingle"
-msgstr "Jingle"
-
-# FIXME
-msgid "Jingle Audio"
-msgstr "Àudio amb Jingle"
-
-msgid "User Nickname"
-msgstr "Sobrenom de l'usuari"
-
-msgid "Jingle ICE UDP"
-msgstr "Jingle ICE UDP"
-
-msgid "Jingle ICE TCP"
-msgstr "Jingle ICE TCP"
-
-msgid "Jingle Raw UDP"
-msgstr "Jingle Raw UDP"
-
-msgid "Jingle Video"
-msgstr "Vídeo amb Jingle"
-
-msgid "Jingle DTMF"
-msgstr "Jingle DTMF"
-
-msgid "Message Receipts"
-msgstr "Recepció de missatges"
-
-msgid "Public Key Publishing"
-msgstr "Publicació de claus públiques"
-
-msgid "User Chatting"
-msgstr "Converses d'usuari"
-
-msgid "User Browsing"
-msgstr "Navegació d'usuaris"
-
-msgid "User Gaming"
-msgstr "Jocs d'usuari"
-
-msgid "User Viewing"
-msgstr "Visualització d'usuaris"
-
-msgid "Ping"
-msgstr "Ping"
-
-# Vegeu: http://xmpp.org/extensions/xep-0200.html
-# Nota: Això es refereix a les capabilitats de l'altre interlocutor
-# No apareix a l'aplicació final, és codi mort dins un #if 0 ... #endif (josep)
-msgid "Stanza Encryption"
-msgstr "Blocs xifrats"
-
-msgid "Entity Time"
-msgstr "Hora de l'entitat"
-
-msgid "Delayed Delivery"
-msgstr "Lliurament endarrerit"
-
-msgid "Collaborative Data Objects"
-msgstr "Objectes de dades col·laboratius"
-
-msgid "File Repository and Sharing"
-msgstr "Dipòsit de fitxers i compartició"
-
-msgid "STUN Service Discovery for Jingle"
-msgstr "Servei de descoberta STUN per al Jingle"
-
-msgid "Simplified Encrypted Session Negotiation"
-msgstr "Negociació simple del xifratge de la sessió"
-
-# Mireu l'RFC (josep)
-msgid "Hop Check"
-msgstr "Comprovació dels salts"
-
-msgid "Capabilities"
-msgstr "Capacitats"
-
 msgid "Priority"
 msgstr "Prioritat"
 
@@ -4058,7 +3891,7 @@
 msgid "%s ago"
 msgstr "fa %s"
 
-msgid "Logged off"
+msgid "Logged Off"
 msgstr "Desconnectat"
 
 # Segons la viquipèdia
@@ -4840,7 +4673,7 @@
 msgid "Error in chat %s"
 msgstr "S'ha produït un error en el xat %s"
 
-msgid "An error occured on the in-band bytestream transfer\n"
+msgid "An error occurred on the in-band bytestream transfer\n"
 msgstr ""
 
 msgid "Transfer was closed."
@@ -5175,11 +5008,11 @@
 msgid "Non-IM Contacts"
 msgstr "Contactes que no són de MI"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
 msgstr ""
-"%s us ha enviat una invitació a la seva càmera web, però això encara no està "
-"implementat."
+"%s us ha enviat una invitació per fer una conversa de veu, però això encara "
+"no està implementat."
 
 msgid "Nudge"
 msgstr "Donar un cop de colze"
@@ -5657,10 +5490,10 @@
 msgid "Retrieving buddy list"
 msgstr "S'està recuperant la llista d'amics"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s requests to view your webcam, but this request is not yet supported."
 msgstr ""
-"%s us ha enviat una invitació a la seva càmera web, però això encara no està "
+"%s ha sol·licitat poder veure la vostra càmera web, però això encara no està "
 "implementat."
 
 #, c-format
@@ -6399,8 +6232,8 @@
 "acabeu d'enviar."
 
 msgid ""
-"Unable to connect to server. Please enter the address of the server you wish "
-"to connect to."
+"Unable to connect to server. Please enter the address of the server to which "
+"you wish to connect."
 msgstr ""
 "No s'ha pogut connectar al servidor. Introduïu l'adreça del servidor al qual "
 "us vulgueu connectar."
@@ -6430,9 +6263,8 @@
 msgid "Server port"
 msgstr "Port en el servidor"
 
-#, fuzzy
 msgid "Received unexpected response from "
-msgstr "S'ha rebut una resposta HTTP inesperada del servidor."
+msgstr "S'ha rebut una resposta inesperada de "
 
 #. username connecting too frequently
 msgid ""
@@ -6443,15 +6275,16 @@
 "deu minuts i intenteu-ho de nou. Si continueu intentant-ho, haureu d'esperar "
 "encara més temps."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting "
-msgstr "S'ha produït un error en resoldre %s"
+msgstr "S'ha produït en sol·licitar "
 
 msgid "Incorrect password."
 msgstr "La contrasenya no és correcta."
 
 msgid "AOL does not allow your screen name to authenticate via this site."
 msgstr ""
+"AOL no permet que autentiqueu aquest nom d'usuari a través d'aquest web."
 
 msgid "Could not join chat room"
 msgstr "No s'ha pogut entrar a la sala de xat"
@@ -6784,9 +6617,9 @@
 msgstr "S'ha rebut l'autorització"
 
 #. Unregistered username
-#. uid is not exist
-msgid "Invalid username."
-msgstr "El nom d'usuari no és vàlid"
+#. the username does not exist
+msgid "Username does not exist"
+msgstr "L'usuari no existeix"
 
 #. Suspended account
 msgid "Your account is currently suspended."
@@ -6980,6 +6813,9 @@
 msgid "Member Since"
 msgstr "Membre des de"
 
+msgid "Capabilities"
+msgstr "Capacitats"
+
 msgid "Profile"
 msgstr "Perfil"
 
@@ -8026,6 +7862,10 @@
 msgid "Enter the text from the image"
 msgstr "Introduïu el text de la imatge"
 
+#. uid is not exist
+msgid "Invalid username."
+msgstr "El nom d'usuari no és vàlid"
+
 #, c-format
 msgid "Unknown reply when checking password (0x%02X)"
 msgstr ""
@@ -8225,6 +8065,9 @@
 msgid "Video Camera"
 msgstr "Càmera de vídeo"
 
+msgid "File Transfer"
+msgstr "Transferència de fitxers"
+
 msgid "Supports"
 msgstr "Permet"
 
@@ -9043,6 +8886,9 @@
 msgid "Network Statistics"
 msgstr "Estadístiques de xarxa"
 
+msgid "Ping"
+msgstr "Ping"
+
 msgid "Ping failed"
 msgstr "Ha fallat el ping"
 
@@ -9670,7 +9516,6 @@
 msgid "Received invalid data"
 msgstr "S'han rebut dades invàlides"
 
-#. Password incorrect
 msgid "Incorrect Password"
 msgstr "La contrasenya no és correcta"
 
@@ -9682,10 +9527,6 @@
 "El compte està blocat perquè s'ha intentat entrar massa cops.\n"
 "Això es pot solucionar entrant al web de Yahoo!"
 
-#. the username does not exist
-msgid "Username does not exist"
-msgstr "L'usuari no existeix"
-
 #. indicates a lock of some description
 msgid ""
 "Account locked: Unknown reason.\n"
@@ -10659,9 +10500,12 @@
 msgid "View _Log"
 msgstr "_Visualitza el registre"
 
-msgid "Hide when offline"
+msgid "Hide When Offline"
 msgstr "Amaga quan estigui fora de línia"
 
+msgid "Show When Offline"
+msgstr "Mostra quan estigui fora de línia"
+
 msgid "_Alias..."
 msgstr "À_lies..."
 
@@ -11063,112 +10907,98 @@
 msgstr "Color de fons"
 
 msgid "The background color for the buddy list"
-msgstr ""
-
-#, fuzzy
+msgstr "El color de fons de la llista d'amics"
+
 msgid "Layout"
-msgstr "Lasià"
+msgstr "Format"
 
 msgid "The layout of icons, name, and status of the blist"
-msgstr ""
-
+msgstr "El format de les icones, el nom, i l'estat de la llista d'amics"
+
+# Color de fons quan la blist està expandida
 #. Group
-#, fuzzy
 msgid "Expanded Background Color"
-msgstr "Color de fons"
-
-#, fuzzy
+msgstr "Color de fons expandit"
+
 msgid "The background color of an expanded group"
-msgstr "Nom del color de fons"
-
-#, fuzzy
+msgstr "El color de fons d'un grup expandit"
+
 msgid "Expanded Text"
-msgstr "Mida de l'expansor"
+msgstr "Text expandit"
 
 msgid "The text information for when a group is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "Text informatiu d'un grup expandit"
+
 msgid "Collapsed Background Color"
-msgstr "Selecciona el color de fons"
-
-#, fuzzy
+msgstr "Color de fons col·lapsat"
+
 msgid "The background color of a collapsed group"
-msgstr "El color de fons com a GdkColor"
-
-#, fuzzy
+msgstr "El color de fons d'un grup col·lapsat"
+
 msgid "Collapsed Text"
-msgstr "_Redueix"
+msgstr "Text col·lapsat"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "Text informatiu d'un grup col·lapsat"
 
 #. Buddy
-#, fuzzy
 msgid "Contact/Chat Background Color"
-msgstr "Selecciona el color de fons"
-
-#, fuzzy
+msgstr "Color de fons dels contactes i xats"
+
 msgid "The background color of a contact or chat"
-msgstr "El color de fons com a GdkColor"
-
-#, fuzzy
+msgstr "El color de fons d'un contacte o un xat"
+
 msgid "Contact Text"
-msgstr "Drecera"
+msgstr "Text del contacte"
 
 msgid "The text information for when a contact is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "Text informatiu quan un contacte s'expandeix"
+
 msgid "On-line Text"
-msgstr "En línia"
-
-#, fuzzy
+msgstr "Text en línia"
+
 msgid "The text information for when a buddy is online"
-msgstr "Aconsegueix dades sobre l'amic seleccionat"
-
-#, fuzzy
+msgstr "Text informatiu per quan un amic estigui en línia"
+
 msgid "Away Text"
-msgstr "Absent"
-
-#, fuzzy
+msgstr "Text d'absència"
+
 msgid "The text information for when a buddy is away"
-msgstr "Aconsegueix dades sobre l'amic seleccionat"
-
-#, fuzzy
+msgstr "Text informatiu per quan un amic estigui absent"
+
 msgid "Off-line Text"
-msgstr "Fora de línia"
-
-#, fuzzy
+msgstr "Text de fora de línia"
+
 msgid "The text information for when a buddy is off-line"
-msgstr "Aconsegueix dades sobre l'amic seleccionat"
-
-#, fuzzy
+msgstr "Text informatiu per quan un amic estigui fora de línia"
+
 msgid "Idle Text"
-msgstr "Text sobre l'estat d'ànim"
-
-#, fuzzy
+msgstr "Text d'inactivitat"
+
 msgid "The text information for when a buddy is idle"
-msgstr "Aconsegueix dades sobre l'amic seleccionat"
+msgstr "Text informatiu per quan un amic estigui inactiu"
 
 msgid "Message Text"
 msgstr "Text del missatge"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr ""
-
-#, fuzzy
+msgstr "Text informatiu per quan un amic tingui un missatge per llegir"
+
 msgid "Message (Nick Said) Text"
-msgstr "Text del missatge"
+msgstr "Text del missatge (on s'hi ha dit el sobrenom)"
 
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nick"
 msgstr ""
-
-#, fuzzy
+"Text informatiu quan hi ha un missatge per llegir que conté el vostre "
+"sobrenom en un xat"
+
 msgid "The text information for a buddy's status"
-msgstr "Canvia la informació d'usuari de %s"
+msgstr "Text informatiu per l'estat d'un amic"
+
+msgid "Type the host name for this certificate."
+msgstr "Entreu el nom de l'ordinador al qual pertany aquest certificat."
 
 #. Widget creation function
 msgid "SSL Servers"
@@ -11215,7 +11045,7 @@
 msgid "Get Away Message"
 msgstr "Aconsegueix el missatge d'absència"
 
-msgid "Last said"
+msgid "Last Said"
 msgstr "El darrer que es digué"
 
 msgid "Unable to save icon file to disk."
@@ -12110,7 +11940,7 @@
 msgid "Hyperlink visited color"
 msgstr "Color dels enllaços visitats"
 
-msgid "Color to draw hyperlinks after it has been visited (or activated)."
+msgid "Color to draw hyperlink after it has been visited (or activated)."
 msgstr ""
 "El color amb el qual es pintaran els enllaços que ja s'hagin visitat (o "
 "activat)."
@@ -12152,15 +11982,21 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr "Color del nom del missatge d'acció per a missatges xiuxiuejats"
 
+msgid "Color to draw the name of a whispered action message."
+msgstr "Color amb el qual es pintaran els missatges d'acció xiuxiuejats."
+
 msgid "Whisper Message Name Color"
 msgstr "Color dels missatges xiuxiuejats enviats"
 
+msgid "Color to draw the name of a whispered message."
+msgstr "Color amb el qual es pintaran els missatges xiuxiuejats."
+
 msgid "Typing notification color"
 msgstr "Color per a les notificacions de quan s'escriu"
 
-msgid "The color to use for the typing notification font"
-msgstr ""
-"El color que s'emprarà per a les notificacions indicant que s'està escrivint"
+msgid "The color to use for the typing notification"
+msgstr ""
+"El color que s'emprarà per a les notificacions indicant que s'està teclejant"
 
 msgid "Typing notification font"
 msgstr "Tipus de lletra de les notificacions quan s'escriu"
@@ -12574,6 +12410,9 @@
 msgstr ""
 "S'ha triat l'ordre per al navegador «manualment», però no se n'ha indicat cap."
 
+msgid "No message"
+msgstr "Cap missatge"
+
 msgid "Open All Messages"
 msgstr "Obre tots els missatges"
 
@@ -12591,9 +12430,6 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Us han envestit!</span>"
 
-msgid "No message"
-msgstr "Cap missatge"
-
 msgid "The following plugins will be unloaded."
 msgstr "Es descarregaran els connectors següents."
 
@@ -12809,9 +12645,8 @@
 msgid "On unread messages"
 msgstr "Si hi ha missatges sense llegir"
 
-# REVIEW
-msgid "Conversation Window Hiding"
-msgstr "Ocultació de les finestres"
+msgid "Conversation Window"
+msgstr "Finestra de conversa"
 
 msgid "_Hide new IM conversations:"
 msgstr "_Amaga noves converses de MI:"
@@ -12819,6 +12654,9 @@
 msgid "When away"
 msgstr "En estar absent"
 
+msgid "Minimi_ze new conversation windows"
+msgstr "_Minimitza les finestres de conversa noves"
+
 #. All the tab options!
 msgid "Tabs"
 msgstr "Pestanyes"
@@ -12877,9 +12715,6 @@
 msgid "F_lash window when IMs are received"
 msgstr "_Fes que la finestra faci un flaix quan hi arribin missatges"
 
-msgid "Minimi_ze new conversation windows"
-msgstr "_Minimitza les finestres de conversa noves"
-
 msgid "Minimum input area height in lines:"
 msgstr "Alçada mínima en línies de l'àrea d'entrada:"
 
@@ -12915,8 +12750,9 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Exemple: stunserver.org</span>"
 
-msgid "_Autodetect IP address"
-msgstr "Detecta l'_adreça IP automàticament"
+#, c-format
+msgid "Use _automatically detected IP address: %s"
+msgstr "Empra l'_adreça IP detectada automàticament: %s"
 
 msgid "Public _IP:"
 msgstr "IP _pública:"
@@ -13286,33 +13122,18 @@
 msgid "Status for %s"
 msgstr "Estat per a %s"
 
-#.
-#. * TODO: We should enable/disable the add button based on
-#. *       whether the user has entered all required data.  That
-#. *       would eliminate the need for this check and provide a
-#. *       better user experience.
-#.
-msgid "Custom Smiley"
-msgstr "Emoticona personalitzada"
-
-msgid "More Data needed"
-msgstr "Calen més dades"
-
-msgid "Please provide a shortcut to associate with the smiley."
-msgstr "Especifiqueu una drecera associada a l'emoticona."
-
 #, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
 msgstr ""
 "Ja hi ha una emoticona personalitzada per a «%s». Indiqueu-ne una de diferent."
 
+msgid "Custom Smiley"
+msgstr "Emoticona personalitzada"
+
 msgid "Duplicate Shortcut"
 msgstr "Drecera duplicada"
 
-msgid "Please select an image for the smiley."
-msgstr "Seleccioneu una imatge per a l'emoticona."
-
 msgid "Edit Smiley"
 msgstr "Edita l'emoticona"
 
@@ -13423,8 +13244,8 @@
 msgstr "No es pot enviar el llançador"
 
 msgid ""
-"You dragged a desktop launcher. Most likely you wanted to send whatever this "
-"launcher points to instead of this launcher itself."
+"You dragged a desktop launcher. Most likely you wanted to send the target of "
+"this launcher instead of this launcher itself."
 msgstr ""
 "Heu arrossegat un llançador de l'escriptori. Segurament voleu enviar allò a "
 "què aquest llançador apunta i no pas el llançador."
@@ -13565,79 +13386,67 @@
 msgstr ""
 "Mostra informació estadística sobre la disponibilitat dels vostres amics"
 
-#, fuzzy
 msgid "Server name request"
-msgstr "Adreça del servidor"
-
-#, fuzzy
+msgstr "Sol·licitud del nom del servidor"
+
 msgid "Enter an XMPP Server"
-msgstr "Introduïu un servidor de conferències"
-
-#, fuzzy
+msgstr "Introduïu un servidor XMPP"
+
 msgid "Select an XMPP server to query"
-msgstr "Seleccioneu a quin servidor de conferències consultar"
-
-#, fuzzy
+msgstr "Seleccioneu el servidor XMPP a consultar"
+
 msgid "Find Services"
-msgstr "Serveis en línia"
-
-#, fuzzy
+msgstr "Cerca serveis"
+
 msgid "Add to Buddy List"
-msgstr "Envia la llista d'amics"
-
-#, fuzzy
+msgstr "Afegeix a la llista d'amics"
+
 msgid "Gateway"
-msgstr "Passi a absent"
-
-#, fuzzy
+msgstr "Passarel·la"
+
 msgid "Directory"
-msgstr "Directori dels registres"
-
-#, fuzzy
+msgstr "Directori"
+
 msgid "PubSub Collection"
-msgstr "Selecció de sons"
-
-#, fuzzy
+msgstr "Col·lecció PubSub"
+
+# Mes info a xep-0060
 msgid "PubSub Leaf"
-msgstr "Servei PubSub"
-
-#, fuzzy
+msgstr "Fulla PubSub"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
 msgstr ""
 "\n"
-"<b>Descripció:</b> Xerraire"
+"<b>Descripció:</b> "
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "Informació del servei de descoberta"
-
-#, fuzzy
+msgstr "Servei de descoberta"
+
 msgid "_Browse"
-msgstr "_Navegador:"
-
-#, fuzzy
+msgstr "_Navega"
+
 msgid "Server does not exist"
-msgstr "L'usuari no existeix."
-
-#, fuzzy
+msgstr "El servidor no existeix"
+
 msgid "Server does not support service discovery"
-msgstr "El servidor no permet blocar"
-
-#, fuzzy
+msgstr "El servidor no permet la descoberta de serveis"
+
+# xep-0060
 msgid "XMPP Service Discovery"
-msgstr "Informació del servei de descoberta"
+msgstr "Servei de descoberta XMPP"
 
 msgid "Allows browsing and registering services."
-msgstr ""
-
-#, fuzzy
+msgstr "Permet navegar i registrar-se a serveis."
+
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
-msgstr "Aquest connector és útil per a depurar servidors i clients XMPP."
+msgstr ""
+"Aquest servei és útil per registrar-vos a transports antics o altres serveis "
+"XMPP."
 
 msgid "Buddy is idle"
 msgstr "L'amic està inactiu"
@@ -14034,7 +13843,7 @@
 #. *  summary
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
-"on a piece of music by editting a common score in real-time."
+"on a piece of music by editing a common score in real-time."
 msgstr ""
 "El connector per a missatgeria de música permet que diferents usuaris puguin "
 "treballar en una mateixa peça de música, editant la mateixa partitura en "
@@ -14292,7 +14101,7 @@
 #. *< summary
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
-"for when no physical keyboard is present."
+"for use when no physical keyboard is present."
 msgstr ""
 "Afegeix un botó d'Enviar a l'àrea d'entrada de la finestra de conversa. Està "
 "pensat per situacions en què no hi ha cap teclat."
@@ -14348,96 +14157,78 @@
 "Substitueix el text dels missatges que s'envien emprant les regles que hàgiu "
 "establert."
 
-#, fuzzy
 msgid "Just logged in"
-msgstr "No està connectat"
-
-#, fuzzy
+msgstr "Acabat de connectar"
+
 msgid "Just logged out"
-msgstr "%s ha sortit."
+msgstr "Acabat de desconnectar"
 
 msgid ""
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
-
-#, fuzzy
+"Icona per a un contacte/\n"
+"Icona per a una persona desconeguda"
+
 msgid "Icon for Chat"
-msgstr "Entra a un xat"
-
-#, fuzzy
+msgstr "Icona per un xat"
+
 msgid "Ignored"
-msgstr "Ignora"
-
-#, fuzzy
+msgstr "Ignorat"
+
 msgid "Founder"
-msgstr "Més alt"
-
-#, fuzzy
+msgstr "Fundador"
+
 msgid "Operator"
-msgstr "Opera"
+msgstr "Operador"
 
 msgid "Half Operator"
-msgstr ""
-
-#, fuzzy
+msgstr "Mig operador"
+
 msgid "Authorization dialog"
-msgstr "S'ha donat l'autorització"
-
-#, fuzzy
+msgstr "Diàleg d'autorització"
+
 msgid "Error dialog"
-msgstr "Error"
-
-#, fuzzy
+msgstr "Diàleg d'error"
+
 msgid "Information dialog"
-msgstr "Informació"
+msgstr "Diàleg d'informació"
 
 msgid "Mail dialog"
-msgstr ""
-
-#, fuzzy
+msgstr "Diàleg del correu"
+
 msgid "Question dialog"
-msgstr "Diàleg de sol·licitud"
-
-#, fuzzy
+msgstr "Diàleg de pregunta"
+
 msgid "Warning dialog"
-msgstr "Nivell d'avís"
+msgstr "Diàleg d'avís"
 
 msgid "What kind of dialog is this?"
-msgstr ""
-
-#, fuzzy
+msgstr "Quin tipus de diàleg és aquest?"
+
 msgid "Status Icons"
-msgstr "Estat per a %s"
-
-# FIXME: no poso localització perquè l'usuari ho podria
-#        confondre amb "ubicació" (josep)
-#, fuzzy
+msgstr "Icona d'estat"
+
 msgid "Chatroom Emblems"
-msgstr "Característiques locals de la sala de xat"
-
-#, fuzzy
+msgstr "Distintius de les sales de xat"
+
 msgid "Dialog Icons"
-msgstr "Canvia la icona"
-
-#, fuzzy
+msgstr "Icones dels quadres de diàleg"
+
 msgid "Pidgin Icon Theme Editor"
-msgstr "Control de temes GTK+ del Pidgin"
-
-#, fuzzy
+msgstr "Editor de temes d'icona del Pidgin"
+
 msgid "Contact"
-msgstr "Informació del contacte"
-
-#, fuzzy
+msgstr "Contacte"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "Tema de la llista d'amics"
-
-#, fuzzy
+msgstr "Editor de temes per a la llista d'amics del Pidgin"
+
 msgid "Edit Buddylist Theme"
-msgstr "Tema de la llista d'amics"
+msgstr "Edita el tema de la llista d'amics"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "Edita el tema d'icones"
 
 #. *< type
 #. *< ui_requirement
@@ -14446,16 +14237,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "Control de temes GTK+ del Pidgin"
+msgstr "Editor de temes del Pidgin"
 
 #. *< name
 #. *< version
 #. *  summary
-#, fuzzy
 msgid "Pidgin Theme Editor."
-msgstr "Control de temes GTK+ del Pidgin"
+msgstr "Editor de temes del Pidgin"
 
 # FIXME (josep)
 #. *< type
@@ -14627,7 +14416,7 @@
 msgstr "Opcions específiques de la versió del Pidgin per al Windows"
 
 msgid ""
-"Provides options specific to Pidgin for Windows , such as buddy list docking."
+"Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
 "Proporciona opcions específiques per a la versió Windows del Pidgin, com ara "
 "l'acoblament de la llista d'amics."
@@ -14670,6 +14459,167 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Aquest connector és útil per a depurar servidors i clients XMPP."
 
+#~ msgid "Last Activity"
+#~ msgstr "Darrera activitat"
+
+#~ msgid "Service Discovery Info"
+#~ msgstr "Informació del servei de descoberta"
+
+#~ msgid "Service Discovery Items"
+#~ msgstr "Elements del servei de descoberta"
+
+# http://xmpp.org/extensions/xep-0033.html
+#~ msgid "Extended Stanza Addressing"
+#~ msgstr "Bloc d'adreçament estès"
+
+#~ msgid "Multi-User Chat"
+#~ msgstr "Xat multi-usuari"
+
+#~ msgid "Multi-User Chat Extended Presence Information"
+#~ msgstr "Informació de presència estesa per a xats multi-usuari"
+
+#~ msgid "Ad-Hoc Commands"
+#~ msgstr "Ordres Ad-Hoc"
+
+#~ msgid "PubSub Service"
+#~ msgstr "Servei PubSub"
+
+#~ msgid "SOCKS5 Bytestreams"
+#~ msgstr "Flux de bits SOCK5"
+
+#~ msgid "XHTML-IM"
+#~ msgstr "XHTML-IM"
+
+#~ msgid "User Location"
+#~ msgstr "Ubicació de l'usuari"
+
+#~ msgid "User Avatar"
+#~ msgstr "Avatar de l'usuari"
+
+#~ msgid "Chat State Notifications"
+#~ msgstr "Notificacions de l'estat del xat"
+
+#~ msgid "Software Version"
+#~ msgstr "Versió del programari"
+
+#~ msgid "Stream Initiation"
+#~ msgstr "Iniciació del flux"
+
+#~ msgid "User Mood"
+#~ msgstr "Estat d'ànim de l'usuari"
+
+#~ msgid "User Activity"
+#~ msgstr "Activitat de l'usuari"
+
+#~ msgid "Entity Capabilities"
+#~ msgstr "Capacitats de l'entitat"
+
+#~ msgid "Encrypted Session Negotiations"
+#~ msgstr "Negociacions de la sessió xifrada"
+
+# Pot ser també música, cançó... (josep)
+# Vegeu: http://xmpp.org/extensions/xep-0118.html
+#~ msgid "User Tune"
+#~ msgstr "Melodia de l'usuari"
+
+# Nota: "Roster" en XMPP és la llista de contactes (josep)
+#~ msgid "Roster Item Exchange"
+#~ msgstr "Intercanvi d'element de la llista de contactes"
+
+# Vegeu: http://xmpp.org/extensions/xep-0152.html (josep)
+# Nota: codi mort
+#~ msgid "Reachability Address"
+#~ msgstr "Adreça de localització"
+
+#~ msgid "User Profile"
+#~ msgstr "Perfil de l'usuari"
+
+# Nota: Jingle és una extensió d'XMPP i ho considerem nom propi (josep)
+# http://www.xmpp.org/extensions/xep-0166.html
+#~ msgid "Jingle"
+#~ msgstr "Jingle"
+
+# FIXME
+#~ msgid "Jingle Audio"
+#~ msgstr "Àudio amb Jingle"
+
+#~ msgid "User Nickname"
+#~ msgstr "Sobrenom de l'usuari"
+
+#~ msgid "Jingle ICE UDP"
+#~ msgstr "Jingle ICE UDP"
+
+#~ msgid "Jingle ICE TCP"
+#~ msgstr "Jingle ICE TCP"
+
+#~ msgid "Jingle Raw UDP"
+#~ msgstr "Jingle Raw UDP"
+
+#~ msgid "Jingle Video"
+#~ msgstr "Vídeo amb Jingle"
+
+#~ msgid "Jingle DTMF"
+#~ msgstr "Jingle DTMF"
+
+#~ msgid "Message Receipts"
+#~ msgstr "Recepció de missatges"
+
+#~ msgid "Public Key Publishing"
+#~ msgstr "Publicació de claus públiques"
+
+#~ msgid "User Chatting"
+#~ msgstr "Converses d'usuari"
+
+#~ msgid "User Browsing"
+#~ msgstr "Navegació d'usuaris"
+
+#~ msgid "User Gaming"
+#~ msgstr "Jocs d'usuari"
+
+#~ msgid "User Viewing"
+#~ msgstr "Visualització d'usuaris"
+
+# Vegeu: http://xmpp.org/extensions/xep-0200.html
+# Nota: Això es refereix a les capabilitats de l'altre interlocutor
+# No apareix a l'aplicació final, és codi mort dins un #if 0 ... #endif (josep)
+#~ msgid "Stanza Encryption"
+#~ msgstr "Blocs xifrats"
+
+#~ msgid "Entity Time"
+#~ msgstr "Hora de l'entitat"
+
+#~ msgid "Delayed Delivery"
+#~ msgstr "Lliurament endarrerit"
+
+#~ msgid "Collaborative Data Objects"
+#~ msgstr "Objectes de dades col·laboratius"
+
+#~ msgid "File Repository and Sharing"
+#~ msgstr "Dipòsit de fitxers i compartició"
+
+#~ msgid "STUN Service Discovery for Jingle"
+#~ msgstr "Servei de descoberta STUN per al Jingle"
+
+#~ msgid "Simplified Encrypted Session Negotiation"
+#~ msgstr "Negociació simple del xifratge de la sessió"
+
+# Mireu l'RFC (josep)
+#~ msgid "Hop Check"
+#~ msgstr "Comprovació dels salts"
+
+# REVIEW
+#~ msgid "Conversation Window Hiding"
+#~ msgstr "Ocultació de les finestres"
+
+#~ msgid "More Data needed"
+#~ msgstr "Calen més dades"
+
+#~ msgid "Please provide a shortcut to associate with the smiley."
+#~ msgstr "Especifiqueu una drecera associada a l'emoticona."
+
+#~ msgid "Please select an image for the smiley."
+#~ msgstr "Seleccioneu una imatge per a l'emoticona."
+
 #~ msgid "Activate which ID?"
 #~ msgstr "Quin ID voleu activar?"
 
--- a/po/de.po	Mon Jul 06 04:37:06 2009 +0000
+++ b/po/de.po	Mon Jul 06 05:27:30 2009 +0000
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-02 01:34-0700\n"
-"PO-Revision-Date: 2009-06-28 11:42+0200\n"
+"POT-Creation-Date: 2009-07-05 13:02+0200\n"
+"PO-Revision-Date: 2009-07-05 13:02+0200\n"
 "Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -1562,7 +1562,6 @@
 msgid "Lastlog plugin."
 msgstr "Verlauf-Plugin."
 
-#, c-format
 msgid ""
 "\n"
 "Fetching TinyURL..."
@@ -1892,7 +1891,6 @@
 "Fehler beim Lesen vom Auflösungsprozess:\n"
 "%s"
 
-#, c-format
 msgid "Resolver process exited without answering our request"
 msgstr "Auflösungsprozess hat sich beendet ohne die Anfrage zu beantworten"
 
@@ -2193,9 +2191,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <AUTO-REPLY>: %s\n"
 
-#, fuzzy
 msgid "Error creating conference."
-msgstr "Fehler beim Herstellen der Verbindung"
+msgstr "Fehler beim Erstellen der Konferenz"
 
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
@@ -2604,14 +2601,14 @@
 #. * description
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
-"Currently, this includes Adium, MSN Messenger, and Trillian.\n"
+"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
 "\n"
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
 msgstr ""
 "Dieses Plugin zeigt auch die Mitschnitte anderer Sofortnachrichtenprogramme "
-"im Mitschnittsbetrachter an. Momentan sind das Adium, MSN Messenger und "
-"Trillian.\n"
+"im Mitschnittsbetrachter an. Momentan sind das Adium, MSN Messenger, aMSN "
+"und Trillian.\n"
 "WARNUNG: Dieses Plugin ist immer noch im Alpha-Stadium und kann oft "
 "abstürzen. Benutzung auf eigene Gefahr!"
 
@@ -2659,10 +2656,10 @@
 msgstr "Sichert Nachrichten an einen Offline-Benutzer als Alarm."
 
 msgid ""
-"The rest of the messages will be saved as pounce. You can edit/delete the "
+"The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
-"Die folgenden Nachrichten werden als Alarm gesichert. Sie können den Alarm "
+"Die folgenden Nachrichten werden als Alarme gesichert. Sie können den Alarm "
 "im `Buddy-Alarm'-Dialog ändern oder löschen."
 
 #, c-format
@@ -3863,159 +3860,6 @@
 msgid "Local Time"
 msgstr "Lokale Zeit"
 
-msgid "Last Activity"
-msgstr "Letzte Aktivität"
-
-msgid "Service Discovery Info"
-msgstr "Information zur Dienstsuche"
-
-msgid "Service Discovery Items"
-msgstr "Elemente der Dienstsuche"
-
-msgid "Extended Stanza Addressing"
-msgstr "Erweiterte Blockadressierung"
-
-msgid "Multi-User Chat"
-msgstr "Mehrbenutzer-Chat"
-
-msgid "Multi-User Chat Extended Presence Information"
-msgstr "Erweiterte Anwesenheitsinformation im Mehrbenutzer-Chat"
-
-msgid "In-Band Bytestreams"
-msgstr "Bandinterner Bytestrom("
-
-msgid "Ad-Hoc Commands"
-msgstr "Ad Hoc-Kommando"
-
-msgid "PubSub Service"
-msgstr "PubSub-Dienst"
-
-msgid "SOCKS5 Bytestreams"
-msgstr "SOCKS5-Bytestrom"
-
-msgid "Out of Band Data"
-msgstr "Bandexterne Daten"
-
-msgid "XHTML-IM"
-msgstr "XHTML-IM"
-
-msgid "In-Band Registration"
-msgstr "Bandinterne Registrierung"
-
-msgid "User Location"
-msgstr "Benutzerort"
-
-msgid "User Avatar"
-msgstr "Benutzer-Avatar"
-
-msgid "Chat State Notifications"
-msgstr "Chat-Status-Benachrichtigung"
-
-msgid "Software Version"
-msgstr "Software-Version"
-
-msgid "Stream Initiation"
-msgstr "Strom-Initialisierung"
-
-msgid "File Transfer"
-msgstr "Dateiübertragung"
-
-msgid "User Mood"
-msgstr "Benutzerstimmung"
-
-msgid "User Activity"
-msgstr "Benutzeraktivität"
-
-msgid "Entity Capabilities"
-msgstr "Instanz-Fähigkeiten"
-
-msgid "Encrypted Session Negotiations"
-msgstr "Aushandlung einer verschlüsselten Sitzung"
-
-msgid "User Tune"
-msgstr "Benutzer anpassen"
-
-msgid "Roster Item Exchange"
-msgstr "Mitgliedsverzeichnis-Eintragsaustausch"
-
-msgid "Reachability Address"
-msgstr "Erreichbare Adresse"
-
-msgid "User Profile"
-msgstr "Benutzerprofil"
-
-msgid "Jingle"
-msgstr "Jingle"
-
-msgid "Jingle Audio"
-msgstr "Jingle-Klang"
-
-msgid "User Nickname"
-msgstr "Benutzer-Spitzname"
-
-msgid "Jingle ICE UDP"
-msgstr "Jingle ICE UDP"
-
-msgid "Jingle ICE TCP"
-msgstr "Jingle ICE TCP"
-
-msgid "Jingle Raw UDP"
-msgstr "Jingle Raw UDP"
-
-msgid "Jingle Video"
-msgstr "Jingle-Video"
-
-msgid "Jingle DTMF"
-msgstr "Jingle DTMF"
-
-msgid "Message Receipts"
-msgstr "Nachrichtempfänge"
-
-msgid "Public Key Publishing"
-msgstr "Öffentliche Schlüssel-Veröffentlichung"
-
-msgid "User Chatting"
-msgstr "Benutzer, die chatten"
-
-msgid "User Browsing"
-msgstr "Benutzer, die im Web surfen"
-
-msgid "User Gaming"
-msgstr "Benutzer, die spielen"
-
-msgid "User Viewing"
-msgstr "Benutzer, die schauen"
-
-msgid "Ping"
-msgstr "Ping"
-
-msgid "Stanza Encryption"
-msgstr "Blockverschlüsselung"
-
-msgid "Entity Time"
-msgstr "Instanzzeit"
-
-msgid "Delayed Delivery"
-msgstr "Verzögerte Lieferung"
-
-msgid "Collaborative Data Objects"
-msgstr "Kooperative Datenobjekte"
-
-msgid "File Repository and Sharing"
-msgstr "Speicherbereich und gemeinsame Benutzung von Dateien"
-
-msgid "STUN Service Discovery for Jingle"
-msgstr "STUN-Dienstsuche für Jingle"
-
-msgid "Simplified Encrypted Session Negotiation"
-msgstr "Vereinfachte Aushandlung der verschlüsselten Sitzung"
-
-msgid "Hop Check"
-msgstr "Hop-Überprüfung"
-
-msgid "Capabilities"
-msgstr "Fähigkeiten"
-
 msgid "Priority"
 msgstr "Priorität"
 
@@ -4026,7 +3870,7 @@
 msgid "%s ago"
 msgstr "vor %s"
 
-msgid "Logged off"
+msgid "Logged Off"
 msgstr "Abgemeldet"
 
 msgid "Middle Name"
@@ -4215,7 +4059,6 @@
 msgid "Read Error"
 msgstr "Fehler beim Lesen"
 
-#, c-format
 msgid ""
 "Could not find alternative XMPP connection methods after failing to connect "
 "directly.\n"
@@ -4812,7 +4655,8 @@
 msgid "Error in chat %s"
 msgstr "Fehler im Chat %s"
 
-msgid "An error occured on the in-band bytestream transfer\n"
+#, fuzzy
+msgid "An error occurred on the in-band bytestream transfer\n"
 msgstr "Beim Übertragen der Datei trat ein Fehler auf\n"
 
 msgid "Transfer was closed."
@@ -4918,219 +4762,166 @@
 "%s ist auf der lokalen Liste, aber nicht auf der Serverliste. Möchten Sie, "
 "dass der Buddy hinzugefügt wird?"
 
-#, c-format
 msgid "Unable to parse message"
 msgstr "Kann die Nachricht nicht parsen"
 
-#, c-format
 msgid "Syntax Error (probably a client bug)"
 msgstr "Syntaxfehler (wahrscheinlich ein Client-Bug)"
 
-#, c-format
 msgid "Invalid email address"
 msgstr "Ungültige E-Mail-Adresse"
 
-#, c-format
 msgid "User does not exist"
 msgstr "Benutzer existiert nicht"
 
-#, c-format
 msgid "Fully qualified domain name missing"
 msgstr "Der Fully Qualified Domain Name fehlt"
 
-#, c-format
 msgid "Already logged in"
 msgstr "Schon angemeldet"
 
-#, c-format
 msgid "Invalid username"
 msgstr "Ungültiger Benutzername"
 
-#, c-format
 msgid "Invalid friendly name"
 msgstr "Ungültiger Freundesname"
 
-#, c-format
 msgid "List full"
 msgstr "Liste voll"
 
-#, c-format
 msgid "Already there"
 msgstr "Schon da"
 
-#, c-format
 msgid "Not on list"
 msgstr "Nicht auf der Liste"
 
-#, c-format
 msgid "User is offline"
 msgstr "Benutzer ist offline"
 
-#, c-format
 msgid "Already in the mode"
 msgstr "Bereits in diesem Modus"
 
-#, c-format
 msgid "Already in opposite list"
 msgstr "Bereits in der „Gegenteil-Liste“"
 
-#, c-format
 msgid "Too many groups"
 msgstr "Zu viele Gruppen"
 
-#, c-format
 msgid "Invalid group"
 msgstr "Ungültige Gruppe"
 
-#, c-format
 msgid "User not in group"
 msgstr "Benutzer ist nicht in der Gruppe"
 
-#, c-format
 msgid "Group name too long"
 msgstr "Name der Gruppe ist zu lang"
 
-#, c-format
 msgid "Cannot remove group zero"
 msgstr "Kann die Gruppe „Null“ nicht entfernen"
 
-#, c-format
 msgid "Tried to add a user to a group that doesn't exist"
 msgstr ""
 "Versuchte einen Benutzer zu einer nichtexistierenden Gruppe hinzuzufügen"
 
-#, c-format
 msgid "Switchboard failed"
 msgstr "Vermittlung gescheitert"
 
-#, c-format
 msgid "Notify transfer failed"
 msgstr "Übertragung der Benachrichtigung gescheitert"
 
-#, c-format
 msgid "Required fields missing"
 msgstr "Notwendige Felder fehlen"
 
-#, c-format
 msgid "Too many hits to a FND"
 msgstr "Zu viele Treffer zu einem FND"
 
-#, c-format
 msgid "Not logged in"
 msgstr "Nicht angemeldet"
 
-#, c-format
 msgid "Service temporarily unavailable"
 msgstr "Dienst momentan nicht verfügbar"
 
-#, c-format
 msgid "Database server error"
 msgstr "Fehler des Datenbank-Servers"
 
-#, c-format
 msgid "Command disabled"
 msgstr "Kommando abgeschaltet"
 
-#, c-format
 msgid "File operation error"
 msgstr "Dateiverarbeitungsfehler"
 
-#, c-format
 msgid "Memory allocation error"
 msgstr "Fehler bei der Speicheranforderung"
 
-#, c-format
 msgid "Wrong CHL value sent to server"
 msgstr "Falscher CHL-Wert zum Server gesendet"
 
-#, c-format
 msgid "Server busy"
 msgstr "Server beschäftigt"
 
-#, c-format
 msgid "Server unavailable"
 msgstr "Server unerreichbar"
 
-#, c-format
 msgid "Peer notification server down"
 msgstr "Peer-Benachrichtigungsserver nicht erreichbar"
 
-#, c-format
 msgid "Database connect error"
 msgstr "Datenbank-Verbindungsfehler"
 
-#, c-format
 msgid "Server is going down (abandon ship)"
 msgstr "Server fährt runter (melden Sie sich ab)"
 
-#, c-format
 msgid "Error creating connection"
 msgstr "Fehler beim Herstellen der Verbindung"
 
-#, c-format
 msgid "CVR parameters are either unknown or not allowed"
 msgstr "CVR-Parameter sind entweder unbekannt oder nicht erlaubt"
 
-#, c-format
 msgid "Unable to write"
 msgstr "Schreiben nicht möglich"
 
-#, c-format
 msgid "Session overload"
 msgstr "Sitzung überlastet"
 
-#, c-format
 msgid "User is too active"
 msgstr "Benutzer ist zu aktiv"
 
-#, c-format
 msgid "Too many sessions"
 msgstr "Zu viele Sitzungen"
 
-#, c-format
 msgid "Passport not verified"
 msgstr "Passport (MSN Benutzerausweis) wurde nicht überprüft"
 
-#, c-format
 msgid "Bad friend file"
 msgstr "Falsche Friends-Datei"
 
-#, c-format
 msgid "Not expected"
 msgstr "Nicht erwartet"
 
-#, c-format
 msgid "Friendly name changes too rapidly"
 msgstr "Benutzernamen werden zu oft geändert"
 
-#, c-format
 msgid "Server too busy"
 msgstr "Server ist zu beschäftigt"
 
-#, c-format
 msgid "Authentication failed"
 msgstr "Authentifizierung fehlgeschlagen"
 
-#, c-format
 msgid "Not allowed when offline"
 msgstr "Nicht erlaubt im Offline-Modus"
 
-#, c-format
 msgid "Not accepting new users"
 msgstr "Akzeptiert keine neuen Benutzer"
 
-#, c-format
 msgid "Kids Passport without parental consent"
 msgstr "Kinder-Passwort ohne die Zustimmung der Eltern"
 
-#, c-format
 msgid "Passport account not yet verified"
 msgstr "Passport-Konto wurde noch nicht überprüft"
 
 msgid "Passport account suspended"
 msgstr "Passport-Konto gesperrt"
 
-#, c-format
 msgid "Bad ticket"
 msgstr "Falsches Ticket"
 
@@ -5148,10 +4939,11 @@
 msgid "Non-IM Contacts"
 msgstr "Nicht-IM-Kontakte"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
 msgstr ""
-"%s hat Ihnen eine Webcam-Einladung gesendet, die noch nicht unterstützt wird."
+"%s hat Ihnen eine Audiochat-Einladung gesendet, die noch nicht unterstützt "
+"wird."
 
 msgid "Nudge"
 msgstr "Anstoßen"
@@ -6371,8 +6163,8 @@
 "haben, nicht empfangen."
 
 msgid ""
-"Unable to connect to server. Please enter the address of the server you wish "
-"to connect to."
+"Unable to connect to server. Please enter the address of the server to which "
+"you wish to connect."
 msgstr ""
 "Kann keine Verbindung zum Server herstellen. Bitte geben Sie die Adresse des "
 "Servers ein, mit dem Sie sich verbinden wollen."
@@ -6404,9 +6196,8 @@
 msgid "Server port"
 msgstr "Server-Port"
 
-#, fuzzy
 msgid "Received unexpected response from "
-msgstr "Ungültige HTTP-Antwort vom Server empfangen."
+msgstr "Unerwartete Antwort erhalten von"
 
 #. username connecting too frequently
 msgid ""
@@ -6417,7 +6208,7 @@
 "versuchen Sie es noch einmal. Wenn Sie es weiterversuchen, müssen Sie sogar "
 "noch länger warten."
 
-#, fuzzy, c-format
+#, fuzzy
 msgid "Error requesting "
 msgstr "Fehler beim Auflösen von %s"
 
@@ -6757,9 +6548,9 @@
 msgstr "Autorisierung empfangen"
 
 #. Unregistered username
-#. uid is not exist
-msgid "Invalid username."
-msgstr "Ungültiger Benutzername."
+#. the username does not exist
+msgid "Username does not exist"
+msgstr "Benutzername existiert nicht"
 
 #. Suspended account
 msgid "Your account is currently suspended."
@@ -6968,6 +6759,9 @@
 msgid "Member Since"
 msgstr "Mitglied seit"
 
+msgid "Capabilities"
+msgstr "Fähigkeiten"
+
 msgid "Profile"
 msgstr "Profil"
 
@@ -8018,6 +7812,10 @@
 msgid "Enter the text from the image"
 msgstr "Bitte geben Sie den Text aus dem Bild ein"
 
+#. uid is not exist
+msgid "Invalid username."
+msgstr "Ungültiger Benutzername."
+
 #, c-format
 msgid "Unknown reply when checking password (0x%02X)"
 msgstr "Unbekannte Antwort bei Überprüfungen des Passwortes (0x%02X)"
@@ -8215,6 +8013,9 @@
 msgid "Video Camera"
 msgstr "Videokamera"
 
+msgid "File Transfer"
+msgstr "Dateiübertragung"
+
 msgid "Supports"
 msgstr "Unterstützt"
 
@@ -8725,7 +8526,6 @@
 msgid "<br><b>Channel Topic:</b><br>%s"
 msgstr "<br><b>Thema des Kanals:</b><br>%s"
 
-#, c-format
 msgid "<br><b>Channel Modes:</b> "
 msgstr "<br><b>Kanal-Modi:</b> "
 
@@ -8750,7 +8550,6 @@
 msgid "Channel Public Keys List"
 msgstr "Liste der öffentlichen Schlüssel des Kanals"
 
-#, c-format
 msgid ""
 "Channel authentication is used to secure the channel from unauthorized "
 "access. The authentication may be based on passphrase and digital "
@@ -9042,6 +8841,9 @@
 msgid "Network Statistics"
 msgstr "Netzwerkstatistik"
 
+msgid "Ping"
+msgstr "Ping"
+
 msgid "Ping failed"
 msgstr "Ping fehlgeschlagen"
 
@@ -9152,7 +8954,6 @@
 msgid "Your Current Mood"
 msgstr "Ihre momentane Stimmung"
 
-#, c-format
 msgid "Normal"
 msgstr "Normal"
 
@@ -9538,47 +9339,37 @@
 msgid "No server statistics available"
 msgstr "Keine Serverstatistik verfügbar"
 
-#, c-format
 msgid "Failure: Version mismatch, upgrade your client"
 msgstr "Fehler: Unterschiedliche Version, aktualisieren Sie Ihren Client"
 
-#, c-format
 msgid "Failure: Remote does not trust/support your public key"
 msgstr ""
 "Fehler: Die entfernte Seite vertraut Ihrem öffentlichen Schlüssel nicht"
 
-#, c-format
 msgid "Failure: Remote does not support proposed KE group"
 msgstr ""
 "Fehler: Entferntes Programm unterstützt nicht die vorgeschlagen KE-Gruppe"
 
-#, c-format
 msgid "Failure: Remote does not support proposed cipher"
 msgstr ""
 "Fehler: Entferntes Programm unterstützt die vorgeschlagene Cipher nicht"
 
-#, c-format
 msgid "Failure: Remote does not support proposed PKCS"
 msgstr "Fehler: Entferntes Programm unterstützt die vorgeschlagene PKCS nicht"
 
-#, c-format
 msgid "Failure: Remote does not support proposed hash function"
 msgstr ""
 "Fehler: Entferntes Programm unterstützt die vorgeschlagen Hashfunktion nicht"
 
-#, c-format
 msgid "Failure: Remote does not support proposed HMAC"
 msgstr "Fehler: Entferntes Programm unterstützt das vorgeschlagene HMAC nicht"
 
-#, c-format
 msgid "Failure: Incorrect signature"
 msgstr "Fehler: Falsche Signatur"
 
-#, c-format
 msgid "Failure: Invalid cookie"
 msgstr "Fehler: Ungültiger Cookie"
 
-#, c-format
 msgid "Failure: Authentication failed"
 msgstr "Fehler: Authentifizierung fehlgeschlagen"
 
@@ -9677,7 +9468,6 @@
 msgid "Received invalid data"
 msgstr "Ungültige Daten empfangen"
 
-#. Password incorrect
 msgid "Incorrect Password"
 msgstr "Falsches Passwort"
 
@@ -9690,10 +9480,6 @@
 "Eventuell können Sie dies beheben, wenn Sie sich auf der Yahoo!-Webseite "
 "anmelden."
 
-#. the username does not exist
-msgid "Username does not exist"
-msgstr "Benutzername existiert nicht"
-
 #. indicates a lock of some description
 msgid ""
 "Account locked: Unknown reason.\n"
@@ -10423,29 +10209,24 @@
 msgstr " (%s)"
 
 #. 10053
-#, c-format
 msgid "Connection interrupted by other software on your computer."
 msgstr ""
 "Die Verbindung wurde von einer anderen Software auf ihrem Computer "
 "unterbrochen."
 
 #. 10054
-#, c-format
 msgid "Remote host closed connection."
 msgstr "Der entfernte Host hat die Verbindung beendet."
 
 #. 10060
-#, c-format
 msgid "Connection timed out."
 msgstr "Verbindungsabbruch wegen Zeitüberschreitung."
 
 #. 10061
-#, c-format
 msgid "Connection refused."
 msgstr "Verbindung abgelehnt."
 
 #. 10048
-#, c-format
 msgid "Address already in use."
 msgstr "Adresse wird bereits benutzt."
 
@@ -11075,7 +10856,7 @@
 msgstr "Hintergrundfarbe"
 
 msgid "The background color for the buddy list"
-msgstr ""
+msgstr "Die Hintergrundfarbe für die Buddy-Liste"
 
 #, fuzzy
 msgid "Layout"
@@ -11090,28 +10871,28 @@
 msgstr "Hintergrundfarbe"
 
 msgid "The background color of an expanded group"
-msgstr ""
+msgstr "Die Hintergrundfarbe für eine ausgeklappte Gruppe"
 
 #, fuzzy
 msgid "Expanded Text"
 msgstr "A_usklappen"
 
 msgid "The text information for when a group is expanded"
-msgstr ""
+msgstr "Die Textinformation für eine ausgeklappte Gruppe"
 
 #, fuzzy
 msgid "Collapsed Background Color"
 msgstr "Hintergrundfarbe auswählen"
 
 msgid "The background color of a collapsed group"
-msgstr ""
+msgstr "Die Hintergrundfarbe für eine zusammengeklappte Gruppe"
 
 #, fuzzy
 msgid "Collapsed Text"
 msgstr "_Zusammenklappen"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "Die Textinformation für eine zusammengeklappte Gruppe"
 
 #. Buddy
 #, fuzzy
@@ -11126,42 +10907,41 @@
 msgstr "Verknüpfter Text"
 
 msgid "The text information for when a contact is expanded"
-msgstr ""
+msgstr "Die Textinformation für einen ausgeklappten Kontakt"
 
 #, fuzzy
 msgid "On-line Text"
 msgstr "Online"
 
 msgid "The text information for when a buddy is online"
-msgstr ""
+msgstr "Die Textinformation für einen Online-Buddy"
 
 #, fuzzy
 msgid "Away Text"
 msgstr "Abwesend"
 
 msgid "The text information for when a buddy is away"
-msgstr ""
+msgstr "Die Textinformation für einen abwesenden Buddy"
 
 #, fuzzy
 msgid "Off-line Text"
 msgstr "Offline"
 
 msgid "The text information for when a buddy is off-line"
-msgstr ""
+msgstr "Die Textinformation für einen Offline-Buddy"
 
 #, fuzzy
 msgid "Idle Text"
 msgstr "Stimmungstext"
 
 msgid "The text information for when a buddy is idle"
-msgstr ""
-
-#, fuzzy
+msgstr "Die Textinformation für einen untätigen Buddy"
+
 msgid "Message Text"
-msgstr "Nachricht gesendet"
+msgstr "Nachrichtentext"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr ""
+msgstr "Die Textinformation für einen Buddy mit ungelesenen Nachrichten"
 
 msgid "Message (Nick Said) Text"
 msgstr ""
@@ -11170,10 +10950,14 @@
 "The text information for when a chat has an unread message that mentions "
 "your nick"
 msgstr ""
-
-#, fuzzy
+"Die Textinformation für einen Chat mit einer ungelesenen Nachricht, in der "
+"Ihr Nickname vorkommt"
+
 msgid "The text information for a buddy's status"
-msgstr "Ändere die Benutzerinformation für %s"
+msgstr "Die Textinformation für den Status eines Buddys"
+
+msgid "Type the host name for this certificate."
+msgstr "Geben Sie einen Hostnamen für dieses Zertifikat an."
 
 #. Widget creation function
 msgid "SSL Servers"
@@ -11832,7 +11616,6 @@
 "geschützt.  Die Datei 'COPYRIGHT' enthält die komplette Liste der "
 "Mitwirkenden.  Wir übernehmen keine Haftung für dieses Programm.<BR><BR>"
 
-#, c-format
 msgid ""
 "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
 "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
@@ -11840,7 +11623,6 @@
 "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
 "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
 
-#, c-format
 msgid ""
 "<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im"
 "\">support@pidgin.im</A><BR/><BR/>"
@@ -11848,13 +11630,11 @@
 "<FONT SIZE=\"4\">Hilfe per E-Mail:</FONT> <A HREF=\"mailto:support@pidgin.im"
 "\">support@pidgin.im</A><BR/><BR/>"
 
-#, c-format
 msgid ""
 "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
 msgstr ""
 "<FONT SIZE=\"4\">IRC-Kanal:</FONT> #pidgin auf irc.freenode.net<BR><BR>"
 
-#, c-format
 msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
 msgstr "<FONT SIZE=\"4\">XMPP-MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
 
@@ -12109,10 +11889,9 @@
 msgid "Hyperlink visited color"
 msgstr "Farbe für besuchte Hyperlinks"
 
-msgid "Color to draw hyperlinks after it has been visited (or activated)."
-msgstr ""
-"Farbe zum Darstellen von Hyperlinks, wenn sie besucht (oder aktiviert) "
-"wurden."
+msgid "Color to draw hyperlink after it has been visited (or activated)."
+msgstr ""
+"Farbe zum Darstellen von Hyperlinks, wenn sie besucht (oder aktiviert) wurden"
 
 msgid "Hyperlink prelight color"
 msgstr "Hyperlink-Farbe"
@@ -12152,13 +11931,22 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr "Farbe des Absendernamens für geflüsterte Aktions-Nachrichten"
 
+msgid "Color to draw the name of a whispered action message."
+msgstr ""
+"Farbe, mit der der Name in einer geflüsterten Aktions-Nachricht dargestellt "
+"wird"
+
 msgid "Whisper Message Name Color"
 msgstr "Farbe des Absendernamens für Flüster-Nachrichten"
 
+msgid "Color to draw the name of a whispered message."
+msgstr ""
+"Farbe, mit der der Name in einer geflüsterten Nachricht dargestellt wird"
+
 msgid "Typing notification color"
 msgstr "Farbe der Tipp-Benachrichtigung"
 
-msgid "The color to use for the typing notification font"
+msgid "The color to use for the typing notification"
 msgstr ""
 "Die Farbe, die für die Tipp-Benachrichtigungsmeldung benutzt werden soll"
 
@@ -12512,7 +12300,6 @@
 msgid "Pidgin"
 msgstr "Pidgin"
 
-#, c-format
 msgid "Exiting because another libpurple client is already running.\n"
 msgstr "Wird geschlossen, da bereits ein anderer libpurple-Client läuft\n"
 
@@ -12561,6 +12348,9 @@
 msgstr ""
 "Das benutzerdefinierte Browserkommando wurde ausgewählt, aber nicht gesetzt."
 
+msgid "No message"
+msgstr "Keine Nachricht"
+
 msgid "Open All Messages"
 msgstr "Alle Nachrichten öffnen"
 
@@ -12576,9 +12366,6 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Sie haben geklopft!</span>"
 
-msgid "No message"
-msgstr "Keine Nachricht"
-
 msgid "The following plugins will be unloaded."
 msgstr "Die folgenden Plugins werden entladen."
 
@@ -12703,47 +12490,36 @@
 msgid "Pounce Target"
 msgstr "Alarm-Ziel"
 
-#, c-format
 msgid "Started typing"
 msgstr "Beginnt zu tippen"
 
-#, c-format
 msgid "Paused while typing"
 msgstr "Hat beim Tippen angehalten"
 
-#, c-format
 msgid "Signed on"
 msgstr "Hat sich anmeldet"
 
-#, c-format
 msgid "Returned from being idle"
 msgstr "Ist nicht mehr inaktiv"
 
-#, c-format
 msgid "Returned from being away"
 msgstr "Ist wieder anwesend"
 
-#, c-format
 msgid "Stopped typing"
 msgstr "Hat das Tippen gestoppt"
 
-#, c-format
 msgid "Signed off"
 msgstr "Hat sich abmeldet"
 
-#, c-format
 msgid "Became idle"
 msgstr "Wurde untätig"
 
-#, c-format
 msgid "Went away"
 msgstr "Ging hinaus"
 
-#, c-format
 msgid "Sent a message"
 msgstr "Eine Nachricht senden"
 
-#, c-format
 msgid "Unknown.... Please report this!"
 msgstr "Unbekannt.... Bitte berichten Sie dieses Problem!"
 
@@ -12753,9 +12529,8 @@
 msgid "Theme failed to load."
 msgstr "Thema konnte nicht geladen werden."
 
-#, fuzzy
 msgid "Theme failed to copy."
-msgstr "Thema konnte nicht geladen werden."
+msgstr "Thema konnte nicht kopiert werden."
 
 msgid "Install Theme"
 msgstr "Thema installieren"
@@ -12894,8 +12669,9 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Beispiel: stunserver.org</span>"
 
-msgid "_Autodetect IP address"
-msgstr "IP-Adresse _automatisch erkennen"
+#, c-format
+msgid "Use _automatically detected IP address: %s"
+msgstr "Benutze _automatisch erkannte IP-Adresse: %s"
 
 msgid "Public _IP:"
 msgstr "Öffentliche _IP:"
@@ -13031,27 +12807,21 @@
 msgid "Sound Selection"
 msgstr "Klang-Auswahl"
 
-#, c-format
 msgid "Quietest"
 msgstr "Am leisesten"
 
-#, c-format
 msgid "Quieter"
 msgstr "Leiser"
 
-#, c-format
 msgid "Quiet"
 msgstr "Leise"
 
-#, c-format
 msgid "Loud"
 msgstr "Laut"
 
-#, c-format
 msgid "Louder"
 msgstr "Lauter"
 
-#, c-format
 msgid "Loudest"
 msgstr "Am lautesten"
 
@@ -13271,21 +13041,6 @@
 msgid "Status for %s"
 msgstr "Status für %s"
 
-#.
-#. * TODO: We should enable/disable the add button based on
-#. *       whether the user has entered all required data.  That
-#. *       would eliminate the need for this check and provide a
-#. *       better user experience.
-#.
-msgid "Custom Smiley"
-msgstr "Benutzerdefinierter Smiley"
-
-msgid "More Data needed"
-msgstr "Weitere Daten benötigt"
-
-msgid "Please provide a shortcut to associate with the smiley."
-msgstr "Bitte geben Sie eine Tastenkombination für den Smiley an."
-
 #, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
@@ -13293,12 +13048,12 @@
 "Für '%s' existiert bereits ein benutzerdefinierter Smiley. Bitten wählen Sie "
 "eine andere Tastenkombination."
 
+msgid "Custom Smiley"
+msgstr "Benutzerdefinierter Smiley"
+
 msgid "Duplicate Shortcut"
 msgstr "Doppelte Tastenkombination"
 
-msgid "Please select an image for the smiley."
-msgstr "Bitte wählen Sie ein Bild für den Smiley."
-
 msgid "Edit Smiley"
 msgstr "Smiley bearbeiten"
 
@@ -13408,8 +13163,8 @@
 msgstr "Kann Verknüpfung nicht senden"
 
 msgid ""
-"You dragged a desktop launcher. Most likely you wanted to send whatever this "
-"launcher points to instead of this launcher itself."
+"You dragged a desktop launcher. Most likely you wanted to send the target of "
+"this launcher instead of this launcher itself."
 msgstr ""
 "Sie haben eine Verknüpfung gewählt. Wahrscheinlich wollten sie das Ziel der "
 "Verknüpfung senden und nicht die Verknüpfung selbst."
@@ -13549,64 +13304,53 @@
 msgid "Server name request"
 msgstr "Server-Adresse"
 
-#, fuzzy
 msgid "Enter an XMPP Server"
-msgstr "Geben Sie einen Konferenzserver ein"
-
-#, fuzzy
+msgstr "Geben Sie einen XMPP-Server ein"
+
 msgid "Select an XMPP server to query"
-msgstr "Wählen Sie einen Konferenz-Server zur Abfrage"
-
-#, fuzzy
+msgstr "Wählen Sie einen XMPP-Server zur Abfrage"
+
 msgid "Find Services"
-msgstr "Online-Dienste"
-
-#, fuzzy
+msgstr "Dienste suchen"
+
 msgid "Add to Buddy List"
-msgstr "Buddy-Liste senden"
-
-#, fuzzy
+msgstr "Zur Buddy-Liste hinzufügen"
+
 msgid "Gateway"
-msgstr "hinausgeht"
-
-#, fuzzy
+msgstr "Gateway"
+
 msgid "Directory"
-msgstr "Mitschnittverzeichnis"
-
-#, fuzzy
+msgstr "Verzeichnis"
+
 msgid "PubSub Collection"
-msgstr "Klang-Auswahl"
-
-#, fuzzy
+msgstr "PubSub-Sammlung"
+
 msgid "PubSub Leaf"
-msgstr "PubSub-Dienst"
-
-#, fuzzy
+msgstr "PubSub-Blatt"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
-msgstr "Beschreibung"
+msgstr ""
+"\n"
+"<b>Beschreibung:</b>"
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "Information zur Dienstsuche"
+msgstr "Dienstsuche"
 
 #, fuzzy
 msgid "_Browse"
 msgstr "_Browser:"
 
-#, fuzzy
 msgid "Server does not exist"
-msgstr "Benutzer existiert nicht"
-
-#, fuzzy
+msgstr "Server existiert nicht"
+
 msgid "Server does not support service discovery"
-msgstr "Server unterstützt kein Blockieren"
-
-#, fuzzy
+msgstr "Server unterstützt keine Dienstsuche"
+
 msgid "XMPP Service Discovery"
-msgstr "Information zur Dienstsuche"
+msgstr "XMPP-Dienstsuche"
 
 msgid "Allows browsing and registering services."
 msgstr ""
@@ -14017,7 +13761,7 @@
 #. *  summary
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
-"on a piece of music by editting a common score in real-time."
+"on a piece of music by editing a common score in real-time."
 msgstr ""
 "Das Musik-Nachrichtenübermittlungsplugin erlaubt es einer Menge von "
 "Benutzern, simultan an einem Musikstück in Echtzeit zu arbeiten."
@@ -14161,7 +13905,6 @@
 msgid "Select Color"
 msgstr "Farbe auswählen"
 
-#, c-format
 msgid "Select Interface Font"
 msgstr "Schriftart wählen"
 
@@ -14175,9 +13918,8 @@
 msgid "GTK+ Text Shortcut Theme"
 msgstr "GTK+ Text Shortcut-Thema"
 
-#, fuzzy
 msgid "Disable Typing Notification Text"
-msgstr "Tipp-Benachrichtigung aktivieren"
+msgstr "Tipp-Benachrichtigungstext deaktivieren"
 
 msgid "GTK+ Theme Control Settings"
 msgstr "Themenkontroll-Einstellungen für GTK+"
@@ -14276,7 +14018,7 @@
 #. *< summary
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
-"for when no physical keyboard is present."
+"for use when no physical keyboard is present."
 msgstr ""
 "Fügt einen Senden-Knopf zum Eingabefeld des Gesprächsfensters hinzu. Die ist "
 "für Fälle gedacht, wo keine Tastatur vorhanden ist."
@@ -14332,13 +14074,11 @@
 msgstr ""
 "Ersetzt Text in ausgehenden Nachrichten durch benutzerdefinierte Regeln."
 
-#, fuzzy
 msgid "Just logged in"
-msgstr "Nicht angemeldet"
-
-#, fuzzy
+msgstr "Gerade angemeldet"
+
 msgid "Just logged out"
-msgstr "Nicht angemeldet"
+msgstr "Gerade abgemeldet"
 
 msgid ""
 "Icon for Contact/\n"
@@ -14349,9 +14089,8 @@
 msgid "Icon for Chat"
 msgstr "Chat betreten"
 
-#, fuzzy
 msgid "Ignored"
-msgstr "Ignorieren"
+msgstr "Ignoriert"
 
 #, fuzzy
 msgid "Founder"
@@ -14364,63 +14103,52 @@
 msgid "Half Operator"
 msgstr ""
 
-#, fuzzy
 msgid "Authorization dialog"
-msgstr "Autorisierung wurde gegeben"
-
-#, fuzzy
+msgstr "Autorisierungsdialog"
+
 msgid "Error dialog"
-msgstr "Fehler "
-
-#, fuzzy
+msgstr "Fehlerdialog"
+
 msgid "Information dialog"
-msgstr "Information"
+msgstr "Informationsdialog"
 
 msgid "Mail dialog"
-msgstr ""
+msgstr "Mail-Dialog"
 
 #, fuzzy
 msgid "Question dialog"
 msgstr "Anfrage-Dialog"
 
-#, fuzzy
 msgid "Warning dialog"
-msgstr "Warnstufe"
+msgstr "Warnungdialog"
 
 msgid "What kind of dialog is this?"
-msgstr ""
-
-#
-#, fuzzy
+msgstr "Welche Art von Dialog ist dies?"
+
 msgid "Status Icons"
-msgstr "Status für %s"
+msgstr "Status-Icons"
 
 #, fuzzy
 msgid "Chatroom Emblems"
 msgstr "Chatraum-Gebiet"
 
-#, fuzzy
 msgid "Dialog Icons"
-msgstr "Icon ändern"
-
-#, fuzzy
+msgstr "Dialog-Icons"
+
 msgid "Pidgin Icon Theme Editor"
-msgstr "Pidgin GTK+ Themenkontrolle"
-
-#, fuzzy
+msgstr "Pidgin Icon-Themen-Editor"
+
 msgid "Contact"
-msgstr "Kontakt-Info"
-
-#, fuzzy
+msgstr "Kontakt"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "Buddy-Listen-Thema"
-
-#, fuzzy
+msgstr "Pidgin Buddy-Listen-Thema-Editor"
+
 msgid "Edit Buddylist Theme"
-msgstr "Buddy-Listen-Thema"
+msgstr "Buddy-Listen-Thema bearbeiten"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "Icon-Thema bearbeiten"
 
 #. *< type
 #. *< ui_requirement
@@ -14429,16 +14157,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "Pidgin GTK+ Themenkontrolle"
+msgstr "Pidgin Themen-Editor"
 
 #. *< name
 #. *< version
 #. *  summary
-#, fuzzy
 msgid "Pidgin Theme Editor."
-msgstr "Pidgin GTK+ Themenkontrolle"
+msgstr "Pidgin Themen-Editor"
 
 #. *< type
 #. *< ui_requirement
@@ -14481,7 +14207,6 @@
 msgid "Timestamp Format Options"
 msgstr "Zeitstempelformat-Optionen"
 
-#, c-format
 msgid "_Force 24-hour time format"
 msgstr "_Erzwinge 24-Stunden Zeitformat"
 
@@ -14608,7 +14333,7 @@
 msgstr "Optionen für Pidgin unter Windows."
 
 msgid ""
-"Provides options specific to Pidgin for Windows , such as buddy list docking."
+"Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
 "Bietet spezielle Optionen für Windows-Pidgin, wie Buddy-Listen-Docking."
 
--- a/po/fi.po	Mon Jul 06 04:37:06 2009 +0000
+++ b/po/fi.po	Mon Jul 06 05:27:30 2009 +0000
@@ -1,4 +1,4 @@
-# Pidgin Finnish translation
+# Piidgin Finnish translation
 # Copyright (C) 2002 Tero Kuusela <teroajk@subdimension.com>
 # Copyright (C) 2003-2005 Arto Alakulju <arto@alakulju.net>
 # Copyright (C) 2005-2009 Timo Jyrinki <timo.jyrinki@iki.fi>
@@ -10,8 +10,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-02 01:34-0700\n"
-"PO-Revision-Date: 2009-04-28 16:31+0300\n"
+"POT-Creation-Date: 2009-07-05 01:14+0300\n"
+"PO-Revision-Date: 2009-07-05 01:14+0300\n"
 "Last-Translator: Timo Jyrinki <timo.jyrinki@iki.fi>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -2176,9 +2176,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <AUTOMAATTIVASTAUS>: %s\n"
 
-#, fuzzy
 msgid "Error creating conference."
-msgstr "Virhe luotaessa yhteyttä"
+msgstr "Virhe luotaessa konferenssia."
 
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
@@ -2581,16 +2580,17 @@
 #. * description
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
-"Currently, this includes Adium, MSN Messenger, and Trillian.\n"
+"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
 "\n"
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
 msgstr ""
 "Katsottaessa lokeja tämä liitännäinen sisällyttää niihin myös muiden "
 "pikaviestinohjelmien lokit. Tällä hetkellä tuettuina ovat Adium, MSN "
-"Messenger ja Trillian.\n"
-"\n"
-"Varoitus: Tämä liitännäinen on vielä kehitysasteella ja voi kaatua usein."
+"Messenger, aMSN ja Trillian.\n"
+"\n"
+"Varoitus: Tämä liitännäinen on vielä kehitysasteella ja voi kaatua usein. "
+"Käytä sitä omalla vastuulla!"
 
 msgid "Mono Plugin Loader"
 msgstr "Mono-liitännäisen lataaja"
@@ -2638,11 +2638,11 @@
 "tuttavailmoittimen avulla."
 
 msgid ""
-"The rest of the messages will be saved as pounce. You can edit/delete the "
+"The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
-"Loput viesteistä tallennetaan ilmoittimeen. Voit muokata/poistaa sen "
-"\"Tuttavailmoittimet\"-valintaikkunasta."
+"Loput viesteistä tallennetaan ilmoittimina. Voit muokata/poistaa sen "
+"ilmoittimen ”Tuttavailmoittimet”-valintaikkunasta."
 
 #, c-format
 msgid ""
@@ -2696,6 +2696,9 @@
 "are only used in a single successful connection.\n"
 "Note: The account password must not be saved for this to work."
 msgstr ""
+"Mahdollistaa tilikohtaisen tallentamattomien salasanojen käytön vain yhteen "
+"onnistuneeseen yhteyteen.\n"
+"Huomioitavaa: Tilin salasanaa ei tule tallentaa, jotta tämä toimisi."
 
 #. *< type
 #. *< ui_requirement
@@ -3156,9 +3159,8 @@
 msgstr "Keskustelunimi:"
 
 #. should this be a settings error?
-#, fuzzy
 msgid "Unable to resolve server"
-msgstr "Ei kyetty selvittämään isännän nimeä."
+msgstr "Ei kyetty selvittämään palvelimen nimeä."
 
 msgid "Chat error"
 msgstr "Keskusteluvirhe"
@@ -3208,9 +3210,8 @@
 msgid "Gadu-Gadu User"
 msgstr "Gadu-Gadu-käyttäjä"
 
-#, fuzzy
 msgid "GG server"
-msgstr "Haetaan palvelinta"
+msgstr "GG-palvelin"
 
 #, c-format
 msgid "Unknown command: %s"
@@ -3254,9 +3255,8 @@
 msgid "_Password:"
 msgstr "_Salasana:"
 
-#, fuzzy
 msgid "IRC nick and server may not contain whitespace"
-msgstr "IRC-kutsumanimissä ei tule olla välilyöntejä"
+msgstr "IRC-kutsumanimissä ja -palvelimissa ei saa olla välilyöntejä"
 
 #. 1. connect to server
 #. connect to the server
@@ -3737,21 +3737,16 @@
 msgstr "SASL-virhe"
 
 msgid "The BOSH connection manager terminated your session."
-msgstr ""
-
-#, fuzzy
+msgstr "BOSH-yhteyshallinta lopetti istunnon."
+
 msgid "No session ID given"
-msgstr "Syytä ei annettu"
-
-#, fuzzy
+msgstr "Istuntotunnistetta ei annettu"
+
 msgid "Unsupported version of BOSH protocol"
-msgstr "Versiota ei tueta"
-
-#, fuzzy
+msgstr "Tukematon versio BOSH-yhteyskäytännöstä"
+
 msgid "Unable to establish a connection with the server"
-msgstr ""
-"Yhteyttä palvelimeen ei voi muodostaa:\n"
-"%s"
+msgstr "Yhteyttä palvelimeen ei voi muodostaa"
 
 #, c-format
 msgid ""
@@ -3761,9 +3756,8 @@
 "Yhteyttä palvelimeen ei voi muodostaa:\n"
 "%s"
 
-#, fuzzy
 msgid "Unable to establish SSL connection"
-msgstr "Yhteyden luominen epäonnistui"
+msgstr "SSL-yhteyden muodostaminen ei onnistu"
 
 msgid "Unable to create socket"
 msgstr "Pistokkeen luonti epäonnistui"
@@ -4001,11 +3995,10 @@
 
 #, c-format
 msgid "%s ago"
-msgstr ""
-
-#, fuzzy
+msgstr "%s sitten"
+
 msgid "Logged off"
-msgstr "Kirjautumisesta aikaa"
+msgstr "Kirjautunut ulos"
 
 msgid "Middle Name"
 msgstr "Muut etunimet"
@@ -4173,17 +4166,14 @@
 msgid "Find Rooms"
 msgstr "Etsi huoneita"
 
-#, fuzzy
 msgid "Affiliations:"
-msgstr "Lempinimi:"
-
-#, fuzzy
+msgstr "Kytkökset:"
+
 msgid "No users found"
-msgstr "Käyttäjistä ei löytynyt osumia"
-
-#, fuzzy
+msgstr "Käyttäjiä ei löytynyt"
+
 msgid "Roles:"
-msgstr "Asema"
+msgstr "Roolit:"
 
 msgid "Ping timeout"
 msgstr "Pingin aikakatkaisu"
@@ -4196,6 +4186,8 @@
 "Could not find alternative XMPP connection methods after failing to connect "
 "directly.\n"
 msgstr ""
+"Vaihtoehtoisia XMPP-yhteystapoja ei löytynyt suoran yhdistämisen "
+"epäonnistumisen jälkeen.\n"
 
 msgid "Invalid XMPP ID"
 msgstr "Epäkelpo XMPP-ID"
@@ -4203,9 +4195,8 @@
 msgid "Invalid XMPP ID. Domain must be set."
 msgstr "Epäkelpo XMPP-ID. Verkkoalue pitää olla asetettu."
 
-#, fuzzy
 msgid "Malformed BOSH URL"
-msgstr "Palvelimeen ei saatu yhteyttä."
+msgstr "Viallisesti muodostettu BOSH-URL"
 
 #, c-format
 msgid "Registration of %s@%s successful"
@@ -4273,9 +4264,8 @@
 msgid "Change Registration"
 msgstr "Muuta rekisteröitymistä"
 
-#, fuzzy
 msgid "Malformed BOSH Connect Server"
-msgstr "Palvelimeen ei saatu yhteyttä."
+msgstr "Virheellisesti muodostettu BOSH-yhteyspalvein"
 
 msgid "Error unregistering account"
 msgstr "Virhe poistettaessa käyttäjätilin rekisteröitymistä"
@@ -4642,20 +4632,18 @@
 msgid "ban &lt;user&gt; [reason]:  Ban a user from the room."
 msgstr "ban &lt;käyttäjä&gt; [syy]: Estä käyttäjä huoneesta."
 
-#, fuzzy
 msgid ""
 "affiliate &lt;owner|admin|member|outcast|none&gt; [nick1] [nick2] ...: Get "
 "the users with an affiliation or set users' affiliation with the room."
 msgstr ""
-"affiliate &lt;user&gt; &lt;owner|admin|member|outcast|none&gt;: Aseta "
+"affiliate &lt;owner|admin|member|outcast|none&gt; [nimi1] [nimi2] ...: Aseta "
 "käyttäjän käyttäjäluokka tälle huoneelle."
 
-#, fuzzy
 msgid ""
 "role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: Get the "
 "users with an role or set users' role with the room."
 msgstr ""
-"role &lt;user&gt; &lt;moderator|participant|visitor|none&gt;: Aseta "
+"role &lt;moderator|participant|visitor|none&gt; [nimi1] [nimi2] ...: Aseta "
 "käyttäjän rooli huoneessa."
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
@@ -4718,7 +4706,7 @@
 msgstr "Tiedostonsiirron välipalvelimet"
 
 msgid "BOSH URL"
-msgstr ""
+msgstr "BOSH-URL"
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
@@ -4782,7 +4770,7 @@
 msgid "Error in chat %s"
 msgstr "Virhe ryhmäkeskustelussa: %s"
 
-msgid "An error occured on the in-band bytestream transfer\n"
+msgid "An error occurred on the in-band bytestream transfer\n"
 msgstr "Kaistansisäisessä tavuvirtasiirrossa tapahtui virhe\n"
 
 msgid "Transfer was closed."
@@ -5115,9 +5103,9 @@
 msgid "Non-IM Contacts"
 msgstr "Pikaviestittömät yhteystiedot"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
-msgstr "%s on lähettänyt webkamera-kutsun, mikä ei ole vielä tuettuna."
+msgstr "%s on lähettänyt puhekeskustelukutsun, mitä ei vielä tueta."
 
 msgid "Nudge"
 msgstr "Tönäise"
@@ -5465,9 +5453,9 @@
 msgid "%s just sent you a Nudge!"
 msgstr "Käyttäjä %s lähetti sinulle juuri tönäisyn!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown error (%d): %s"
-msgstr "Tuntematon virhe (%d)"
+msgstr "Tuntematon virhe (%d): %s"
 
 msgid "Unable to add user"
 msgstr "Käyttäjää ei voi lisätä"
@@ -5589,9 +5577,9 @@
 msgid "Retrieving buddy list"
 msgstr "Noudetaan tuttavia"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s requests to view your webcam, but this request is not yet supported."
-msgstr "%s on lähettänyt webkamera-kutsun, mikä ei ole vielä tuettuna."
+msgstr "%s on lähettänyt pyynnön nähdä webkamerasi, mutta tätä ei vielä tueta."
 
 #, c-format
 msgid "%s has sent you a webcam invite, which is not yet supported."
@@ -5789,16 +5777,15 @@
 msgid "Protocol error, code %d: %s"
 msgstr "Yhteyskäytäntövirhe, virhekoodi %d: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s Your password is %zu characters, which is longer than the maximum length "
 "of %d.  Please shorten your password at http://profileedit.myspace.com/index."
 "cfm?fuseaction=accountSettings.changePassword and try again."
 msgstr ""
-"%s Salasanasi on %d merkkiä, mikä on enemmän kuin MySpaceIM:n odottama "
-"suurin mahdollinen %d merkkiä. Lyhennä salasanaasi osoitteessa http://"
-"profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword "
-"ja yritä uudelleen."
+"%s Salasanasi on %zu merkkiä, mikä on enemmän kuin suurin mahdollinen %d. "
+"Lyhennä salasanaasi osoitteessa http://profileedit.myspace.com/index.cfm?"
+"fuseaction=accountSettings.changePassword ja yritä uudelleen."
 
 msgid "Incorrect username or password"
 msgstr "Virheellinen käyttäjänimi tai salasana"
@@ -6302,8 +6289,8 @@
 "%s näyttää olevan poissa linjoilta eikä saanut viestiä jonka juuri lähetit."
 
 msgid ""
-"Unable to connect to server. Please enter the address of the server you wish "
-"to connect to."
+"Unable to connect to server. Please enter the address of the server to which "
+"you wish to connect."
 msgstr ""
 "Palvelimeen ei voi yhdistää. Ole hyvä, syötä palvelimen osoite jolle haluat "
 "yhdistää."
@@ -6333,9 +6320,8 @@
 msgid "Server port"
 msgstr "Palvelimen portti"
 
-#, fuzzy
 msgid "Received unexpected response from "
-msgstr "Odottamaton HTTP-vastaus palvelimelta."
+msgstr "Odottamaton vastaus palvelimelta "
 
 #. username connecting too frequently
 msgid ""
@@ -6346,15 +6332,15 @@
 "ja yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä "
 "pidempään."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting "
-msgstr "Virhe pyydettäessä kirjautumispolettia"
+msgstr "Virhe pyydettäessä "
 
 msgid "Incorrect password."
 msgstr "Virheellinen salasana."
 
 msgid "AOL does not allow your screen name to authenticate via this site."
-msgstr ""
+msgstr "AOL ei salli näyttönimen todentamista tämän sivuston kautta."
 
 msgid "Could not join chat room"
 msgstr "Keskusteluhuoneeseen ei voi liittyä"
@@ -6682,9 +6668,9 @@
 msgstr "Saatiin lupa"
 
 #. Unregistered username
-#. uid is not exist
-msgid "Invalid username."
-msgstr "Epäkelpo käyttäjänimi."
+#. the username does not exist
+msgid "Username does not exist"
+msgstr "Käyttäjänimeä ei ole"
 
 #. Suspended account
 msgid "Your account is currently suspended."
@@ -6699,14 +6685,12 @@
 msgstr "Asiakasohjelmasi versio on liian vanha. Päivitä osoitteessa %s"
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "You have 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 ""
-"Olet ottanut ja katkaissut yhteyden liian tiheästi. Odota kymmenen minuuttia "
-"ja yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä "
-"pidempään."
+"Olet ottanut ja katkaissut yhteyden liian tiheästi. Odota jonkin aikaa ja "
+"yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä pidempään."
 
 msgid "The SecurID key entered is invalid."
 msgstr "Syötetty SecurID-avain on virheellinen."
@@ -7256,9 +7240,8 @@
 msgid "Search for Buddy by Information"
 msgstr "Etsi tuttavaa tietojen perusteella"
 
-#, fuzzy
 msgid "Use clientLogin"
-msgstr "Käyttäjä ei ole kirjautuneena sisään"
+msgstr "Käytä clientLoginia"
 
 msgid ""
 "Always use AIM/ICQ proxy server for\n"
@@ -7916,6 +7899,10 @@
 msgid "Enter the text from the image"
 msgstr "Syötä teksti kuvasta"
 
+#. uid is not exist
+msgid "Invalid username."
+msgstr "Epäkelpo käyttäjänimi."
+
 #, c-format
 msgid "Unknown reply when checking password (0x%02X)"
 msgstr "Tuntematon vastaus tarkistettaessa salasanaa (0x%02X)"
@@ -9542,42 +9529,31 @@
 msgstr "Tuttavan lisääminen estetty"
 
 #. Some error in the received stream
-#, fuzzy
 msgid "Received invalid data"
-msgstr "Palvelimeen yhdistettäessä vastaanotettiin virheellisiä tietoja."
-
-#. Password incorrect
-#, fuzzy
+msgstr "Vastaanotettiin virheellisiä tietoja"
+
 msgid "Incorrect Password"
 msgstr "Virheellinen salasana"
 
 #. security lock from too many failed login attempts
-#, fuzzy
 msgid ""
 "Account locked: Too many failed login attempts.\n"
 "Logging into the Yahoo! website may fix this."
 msgstr ""
-"Tuntematon viesti numero %d. Kirjautumalla Yahoo! verkkosivuille saattaa "
-"korjata tämän."
-
-#. the username does not exist
-#, fuzzy
-msgid "Username does not exist"
-msgstr "Käyttäjää ei ole"
+"Käyttäjätili lukittu: liian monta epäonnistuttu kirjautumisyritystä.\n"
+"Yahoo!-WWW-sivustolle kirjautuminen saatta korjata tämän."
 
 #. indicates a lock of some description
-#, fuzzy
 msgid ""
 "Account locked: Unknown reason.\n"
 "Logging into the Yahoo! website may fix this."
 msgstr ""
-"Tuntematon viesti numero %d. Kirjautumalla Yahoo! verkkosivuille saattaa "
-"korjata tämän."
+"Käyttäjätili lukittu: tuntematon syy.\n"
+"Yahoo!-WWW-sivustolle kirjautuminen saatta korjata tämän."
 
 #. username or password missing
-#, fuzzy
 msgid "Username or password missing"
-msgstr "Virheellinen käyttäjänimi tai salasana"
+msgstr "Puuttuva käyttäjänimi tai salasana"
 
 #, c-format
 msgid ""
@@ -9693,7 +9669,7 @@
 msgstr "Aloita piirtely"
 
 msgid "Select the ID you want to activate"
-msgstr ""
+msgstr "Valitse aktivoitava tunnus (ID)"
 
 msgid "Join whom in chat?"
 msgstr "Kenen seuraan liitytään ryhmäkeskustelussa?"
@@ -10478,9 +10454,8 @@
 msgid "Please update the necessary fields."
 msgstr "Päivitä tarvittavat kentät."
 
-#, fuzzy
 msgid "A_ccount"
-msgstr "_Käyttäjätili:"
+msgstr "_Käyttäjätili"
 
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
@@ -10929,114 +10904,98 @@
 msgid "Background Color"
 msgstr "Taustaväri"
 
-#, fuzzy
 msgid "The background color for the buddy list"
-msgstr "Tämä ryhmä on lisätty tuttaviisi"
-
-#, fuzzy
+msgstr "Tuttavaluettelon taustaväri"
+
 msgid "Layout"
-msgstr "lao"
+msgstr "Asettelu"
 
 msgid "The layout of icons, name, and status of the blist"
-msgstr ""
+msgstr "Tuttavien kuvakkeiden, nimien ja tilojen asettelu"
 
 #. Group
-#, fuzzy
 msgid "Expanded Background Color"
-msgstr "Taustaväri"
-
-#, fuzzy
+msgstr "Laajennettu taustaväri"
+
 msgid "The background color of an expanded group"
-msgstr "Taustavärin nimi"
-
-#, fuzzy
+msgstr "Laajennetun ryhmän taustavärin"
+
 msgid "Expanded Text"
-msgstr "Laajentajan koko"
+msgstr "Laajennettu teksti"
 
 msgid "The text information for when a group is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "Tekstitieto ryhmää laajennettaessa"
+
 msgid "Collapsed Background Color"
-msgstr "Valitse taustaväri"
-
-#, fuzzy
+msgstr "Supistettu taustaväri"
+
 msgid "The background color of a collapsed group"
-msgstr "Taustaväri GdkColor-tyyppisenä"
-
-#, fuzzy
+msgstr "Supistetun ryhmän taustaväri"
+
 msgid "Collapsed Text"
-msgstr "_Pienennä"
+msgstr "Supistettu teksti"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "Tekstitieto ryhmää supistettaessa"
 
 #. Buddy
-#, fuzzy
 msgid "Contact/Chat Background Color"
-msgstr "Valitse taustaväri"
-
-#, fuzzy
+msgstr "Yhteystiedon/keskustelun taustaväri"
+
 msgid "The background color of a contact or chat"
-msgstr "Taustaväri GdkColor-tyyppisenä"
-
-#, fuzzy
+msgstr "Yhteystiedon tai keskustelun taustaväri"
+
 msgid "Contact Text"
-msgstr "Oikotien teksti"
+msgstr "Yhteystiedon teksti"
 
 msgid "The text information for when a contact is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "Tekstitieto yhteystietoa laajennettaessa"
+
 msgid "On-line Text"
-msgstr "Linjoilla"
-
-#, fuzzy
+msgstr "Linjoilla-teksti"
+
 msgid "The text information for when a buddy is online"
-msgstr "Hae tietoja valitusta tuttavasta"
-
-#, fuzzy
+msgstr "Tekstitieto tuttavan ollessa linjoilla"
+
 msgid "Away Text"
-msgstr "Poissa"
-
-#, fuzzy
+msgstr "Poissa-teksti"
+
 msgid "The text information for when a buddy is away"
-msgstr "Hae tietoja valitusta tuttavasta"
-
-#, fuzzy
+msgstr "Tekstitieto tuttavan ollessa poissa"
+
 msgid "Off-line Text"
-msgstr "Poissa linjoilta"
-
-#, fuzzy
+msgstr "Poissa linjoilta -teksti"
+
 msgid "The text information for when a buddy is off-line"
-msgstr "Hae tietoja valitusta tuttavasta"
-
-#, fuzzy
+msgstr "Tekstitieto tuttavan ollessa poissa linjoilta"
+
 msgid "Idle Text"
-msgstr "Mielialan teksti"
-
-#, fuzzy
+msgstr "Joutenoloteksti"
+
 msgid "The text information for when a buddy is idle"
-msgstr "Hae tietoja valitusta tuttavasta"
+msgstr "Tekstitieto tuttavan ollessa jouten"
 
 msgid "Message Text"
 msgstr "Viestin teksti"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr ""
-
-#, fuzzy
+msgstr "Tekstitieto kun tuttavalla on lukematon viesti"
+
 msgid "Message (Nick Said) Text"
-msgstr "Viestin teksti"
+msgstr "Viestin (henkilö sanoi) teksti"
 
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nick"
 msgstr ""
-
-#, fuzzy
+"Tekstitieto kun keskustelussa on lukematon viesti, jossa mainitaan "
+"kutsumanimesi"
+
 msgid "The text information for a buddy's status"
-msgstr "Vaihda käyttäjätietoja - %s"
+msgstr "Tekstitieto tuttavan tilalle"
+
+msgid "Type the host name for this certificate."
+msgstr "Kirjoita isäntänimi tälle varmenteelle."
 
 #. Widget creation function
 msgid "SSL Servers"
@@ -11534,9 +11493,8 @@
 msgid "Hungarian"
 msgstr "unkari"
 
-#, fuzzy
 msgid "Armenian"
-msgstr "romania"
+msgstr "armenia"
 
 msgid "Indonesian"
 msgstr "indonesia"
@@ -11635,7 +11593,7 @@
 msgstr "ruotsi"
 
 msgid "Swahili"
-msgstr ""
+msgstr "swahili"
 
 msgid "Tamil"
 msgstr "tamil"
@@ -11969,7 +11927,7 @@
 msgid "Hyperlink visited color"
 msgstr "Vieraillun hyperlinkin väri"
 
-msgid "Color to draw hyperlinks after it has been visited (or activated)."
+msgid "Color to draw hyperlink after it has been visited (or activated)."
 msgstr "Väri jolla piirretään vierailtu (tai aktivoitu) hyperlinkki."
 
 msgid "Hyperlink prelight color"
@@ -12005,14 +11963,20 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr "Toimintoviestin nimen väri kuiskatulle viestille"
 
+msgid "Color to draw the name of a whispered action message."
+msgstr "Väri jolla näytetään kuiskatun toimintoviestin nimi."
+
 msgid "Whisper Message Name Color"
 msgstr "Kuiskatun viestin nimen väri"
 
+msgid "Color to draw the name of a whispered message."
+msgstr "Väri jolla näytetään kuiskatun viestin nimi."
+
 msgid "Typing notification color"
 msgstr "Kirjoittamishuomautuksen väri"
 
-msgid "The color to use for the typing notification font"
-msgstr "Väri jota käytetään kirjoittamishuomautuksen kirjasimessa"
+msgid "The color to use for the typing notification"
+msgstr "Väri jota käytetään kirjoittamishuomautuksessa"
 
 msgid "Typing notification font"
 msgstr "Kirjoittamishuomautuksen kirjasin"
@@ -12405,6 +12369,9 @@
 "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr "Oma selainkomento -asetus valittu, mutta komentoa ei ole asetettu."
 
+msgid "No message"
+msgstr "Ei viestiä"
+
 msgid "Open All Messages"
 msgstr "Avaa kaikki viestit"
 
@@ -12420,9 +12387,6 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Uusi ilmoitus</span>"
 
-msgid "No message"
-msgstr "Ei viestiä"
-
 msgid "The following plugins will be unloaded."
 msgstr "Seuraavat liitännäiset otetaan pois käytöstä."
 
@@ -12591,17 +12555,14 @@
 msgid "Unknown.... Please report this!"
 msgstr "Tuntematon... Raportoi tästä!"
 
-#, fuzzy
 msgid "Theme failed to unpack."
-msgstr "Hymiöteeman purkaminen epäonnistui."
-
-#, fuzzy
+msgstr "Teeman purkaminen epäonnistui."
+
 msgid "Theme failed to load."
-msgstr "Hymiöteeman purkaminen epäonnistui."
-
-#, fuzzy
+msgstr "Teeman lataaminen epäonnistui."
+
 msgid "Theme failed to copy."
-msgstr "Hymiöteeman purkaminen epäonnistui."
+msgstr "Teeman kopioiminen epäonnistui."
 
 msgid "Install Theme"
 msgstr "Asenna teema"
@@ -12740,8 +12701,9 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Esimerkki: stunserver.org</span>"
 
-msgid "_Autodetect IP address"
-msgstr "_Hae IP-osoite automaattisesti"
+#, c-format
+msgid "Use _automatically detected IP address: %s"
+msgstr "Käytä _automaattisesti tunnistettua IP-osoitetta: %s"
 
 msgid "Public _IP:"
 msgstr "Julkinen _IP:"
@@ -13108,32 +13070,17 @@
 msgid "Status for %s"
 msgstr "%s:n tila"
 
-#.
-#. * TODO: We should enable/disable the add button based on
-#. *       whether the user has entered all required data.  That
-#. *       would eliminate the need for this check and provide a
-#. *       better user experience.
-#.
+#, c-format
+msgid ""
+"A custom smiley for '%s' already exists.  Please use a different shortcut."
+msgstr "Oikotielle ”%s” on jo oma hymiö. Valitse toinen oikotie."
+
 msgid "Custom Smiley"
 msgstr "Oma hymiö"
 
-msgid "More Data needed"
-msgstr "Lisää tietoja tarvitaan"
-
-msgid "Please provide a shortcut to associate with the smiley."
-msgstr "Syötä hymiöön liitettävä oikotie."
-
-#, fuzzy, c-format
-msgid ""
-"A custom smiley for '%s' already exists.  Please use a different shortcut."
-msgstr "Valitulle oikotielle on jo oma hymiö. Valitse toisenlainen oikotie."
-
 msgid "Duplicate Shortcut"
 msgstr "Monista oikotie"
 
-msgid "Please select an image for the smiley."
-msgstr "Valitse hymiölle kuva."
-
 msgid "Edit Smiley"
 msgstr "Muokkaa hymiötä"
 
@@ -13156,9 +13103,8 @@
 msgid "Custom Smiley Manager"
 msgstr "Omien hymiöiden hallinta"
 
-#, fuzzy
 msgid "Select Buddy Icon"
-msgstr "Valitse tuttava"
+msgstr "Valitse tuttavakuvake"
 
 msgid "Click to change your buddyicon for this account."
 msgstr "Napsauta muuttaaksesi tämän käyttäjätilin tuttavakuvaketta."
@@ -13245,10 +13191,10 @@
 msgstr "Käynnistintä ei voi lähettää"
 
 msgid ""
-"You dragged a desktop launcher. Most likely you wanted to send whatever this "
-"launcher points to instead of this launcher itself."
-msgstr ""
-"Raahasit työpöytäkäynnistimen. Luultavasti halusit lähettää tiedoston johon "
+"You dragged a desktop launcher. Most likely you wanted to send the target of "
+"this launcher instead of this launcher itself."
+msgstr ""
+"Raahasit työpöytäkäynnistimen. Luultavasti halusit lähettää kohteen johon "
 "käynnistin osoittaa, käynnistimen itsensä sijaan."
 
 #, c-format
@@ -13381,81 +13327,65 @@
 msgid "Displays statistical information about your buddies' availability"
 msgstr "Näyttää tilastotietoja tuttavien läsnäolosta"
 
-#, fuzzy
 msgid "Server name request"
-msgstr "Palvelimen osoite"
-
-#, fuzzy
+msgstr "Palvelinnimen pyyntö"
+
 msgid "Enter an XMPP Server"
-msgstr "Syötä konferenssipalvelin"
-
-#, fuzzy
+msgstr "Syötä XMPP-palvelin"
+
 msgid "Select an XMPP server to query"
-msgstr "Valitse konferenssipalvelin"
-
-#, fuzzy
+msgstr "Valitse XMPP-palvelin johon kysely lähetetään"
+
 msgid "Find Services"
-msgstr "Online-palvelut"
-
-#, fuzzy
+msgstr "Etsi palveluita"
+
 msgid "Add to Buddy List"
-msgstr "Lähetä tuttavat"
-
-#, fuzzy
+msgstr "Lisää tuttaviin"
+
 msgid "Gateway"
-msgstr "poistuu"
-
-#, fuzzy
+msgstr "Yhdyskäytävä"
+
 msgid "Directory"
-msgstr "Lokihakemisto"
-
-#, fuzzy
+msgstr "Hakemisto"
+
 msgid "PubSub Collection"
-msgstr "Äänivalinta"
-
-#, fuzzy
+msgstr "PubSub-kokoelma"
+
 msgid "PubSub Leaf"
-msgstr "PubSub-palvelu"
-
-#, fuzzy
+msgstr "PubSub-lehti"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
 msgstr ""
 "\n"
-"<b>Kuvaus:</b> Aavemainen"
+"<b>Kuvaus:</b> "
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "Palvelulöytötiedot"
-
-#, fuzzy
+msgstr "Palveluiden löytö"
+
 msgid "_Browse"
-msgstr "_Selain:"
-
-#, fuzzy
+msgstr "_Selaa"
+
 msgid "Server does not exist"
-msgstr "Käyttäjää ei ole"
-
-#, fuzzy
+msgstr "Palvelinta ei ole"
+
 msgid "Server does not support service discovery"
-msgstr "Palvelin ei tue estämistä"
-
-#, fuzzy
+msgstr "Palvelin ei palveluiden löytämistä"
+
 msgid "XMPP Service Discovery"
-msgstr "Palvelulöytötiedot"
+msgstr "XMPP-palveluiden löytö"
 
 msgid "Allows browsing and registering services."
-msgstr ""
-
-#, fuzzy
+msgstr "Sallii palveluiden selaamisen ja rekisteröimisen."
+
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
 msgstr ""
-"Tätä liitännäistä voidaan käyttää XMPP-palvelimien tai -asiakasohjelmien "
-"virheenjäljitykseen."
+"Tätä liitännäistä voidaan käyttää vanhojen siirtotapojen tai muiden XMPP-"
+"palveluiden rekisteröimiseen."
 
 msgid "Buddy is idle"
 msgstr "Tuttava on jouten"
@@ -13845,7 +13775,7 @@
 #. *  summary
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
-"on a piece of music by editting a common score in real-time."
+"on a piece of music by editing a common score in real-time."
 msgstr ""
 "Musiikkiviestintäliitännäinen sallii usean käyttäjän työskennellä yhtä aikaa "
 "musiikkikappaleen parissa, muokkaamalla samaa sävellystä yhdessä, "
@@ -13968,7 +13898,6 @@
 msgid "Highlighted Message Name Color"
 msgstr "Korostetun viestin nimen väri"
 
-#, fuzzy
 msgid "Typing Notification Color"
 msgstr "Kirjoittamishuomautuksen väri"
 
@@ -14001,23 +13930,20 @@
 msgid "GTK+ Text Shortcut Theme"
 msgstr "GTK+-tekstioikopolkuteema"
 
-#, fuzzy
 msgid "Disable Typing Notification Text"
-msgstr "Ota kirjoittamishuomautus käyttöön"
-
-#, fuzzy
+msgstr "Ota kirjoittamishuomautus pois käytöstä"
+
 msgid "GTK+ Theme Control Settings"
-msgstr "Pidgin GTK+-teemanhallinta"
-
-#, fuzzy
+msgstr "GTK+-teemanhallinta"
+
 msgid "Colors"
-msgstr "Sulje"
+msgstr "Värit"
 
 msgid "Fonts"
 msgstr "Kirjasimet"
 
 msgid "Miscellaneous"
-msgstr ""
+msgstr "Sekalaiset"
 
 msgid "Gtkrc File Tools"
 msgstr "Gtkrc-tiedostotyökalut"
@@ -14106,7 +14032,7 @@
 #. *< summary
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
-"for when no physical keyboard is present."
+"for use when no physical keyboard is present."
 msgstr ""
 "Lisää keskusteluikkunan kirjoitusalueelle Lähetä-painikkeen. Tarkoitettu "
 "käytettäväksi, kun fyysistä näppäimistöä ei ole käytettävissä."
@@ -14162,94 +14088,78 @@
 msgid "Replaces text in outgoing messages according to user-defined rules."
 msgstr "Korvaa lähetettävän tekstin käyttäjän määritelmän mukaan."
 
-#, fuzzy
 msgid "Just logged in"
-msgstr "Et ole kirjautunut sisään."
-
-#, fuzzy
+msgstr "Juuri kirjautunut sisään"
+
 msgid "Just logged out"
-msgstr "%s kirjautui ulos."
+msgstr "Juuri kirjautunus ulos"
 
 msgid ""
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
-
-#, fuzzy
+"Kuvake yhteystiedolle/\n"
+"kuvake tuntemattomalle henkilölle"
+
 msgid "Icon for Chat"
-msgstr "Liity ryhmäkeskusteluun"
-
-#, fuzzy
+msgstr "Kuvake ryhmäkeskustelulle"
+
 msgid "Ignored"
-msgstr "Jätä huomiotta"
-
-#, fuzzy
+msgstr "Jätetty huomiotta"
+
 msgid "Founder"
-msgstr "Äänekkäämpi"
-
-#, fuzzy
+msgstr "Perustaja"
+
 msgid "Operator"
-msgstr "Opera"
+msgstr "Operaattori"
 
 msgid "Half Operator"
-msgstr ""
-
-#, fuzzy
+msgstr "Puolioperaattori"
+
 msgid "Authorization dialog"
-msgstr "Valtuutus annettu"
-
-#, fuzzy
+msgstr "Valtuutusvalintaikkuna"
+
 msgid "Error dialog"
-msgstr "Virheet "
-
-#, fuzzy
+msgstr "Virhevalintaikkuna"
+
 msgid "Information dialog"
-msgstr "Tiedot"
+msgstr "Tietovalintaikkuna"
 
 msgid "Mail dialog"
-msgstr ""
-
-#, fuzzy
+msgstr "Sähköpostin valintaikkuna"
+
 msgid "Question dialog"
-msgstr "Pyyntövalintaikkuna"
-
-#, fuzzy
+msgstr "Kysymysvalintaikkuna"
+
 msgid "Warning dialog"
-msgstr "Varoitustaso"
+msgstr "Varoitusvalintaikkuna"
 
 msgid "What kind of dialog is this?"
-msgstr ""
-
-#, fuzzy
+msgstr "Minkä tyyppinen valintaikkuna tämä on?"
+
 msgid "Status Icons"
-msgstr "%s:n tila"
-
-#, fuzzy
+msgstr "Tilakuvakkeet"
+
 msgid "Chatroom Emblems"
-msgstr "Keskusteluhuoneen paikallisasetus"
-
-#, fuzzy
+msgstr "Keskusteluhuoneiden tunnuskuvat"
+
 msgid "Dialog Icons"
-msgstr "Vaihda kuvake"
-
-#, fuzzy
+msgstr "Valintaikkunan kuvakkeet"
+
 msgid "Pidgin Icon Theme Editor"
-msgstr "Pidgin GTK+-teemanhallinta"
-
-#, fuzzy
+msgstr "Pidginin kuvaketeemaeditori"
+
 msgid "Contact"
-msgstr "Yhteystiedot"
-
-#, fuzzy
+msgstr "Yhteystieto"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "Tuttavaluettelon teema"
-
-#, fuzzy
+msgstr "Pidginin tuttavaluettelon teemaeditori"
+
 msgid "Edit Buddylist Theme"
-msgstr "Tuttavaluettelon teema"
+msgstr "Muokkaa tuttavaluettelon teemaa"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "Muokkaa kuvaketeemaa"
 
 #. *< type
 #. *< ui_requirement
@@ -14258,16 +14168,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "Pidgin GTK+-teemanhallinta"
+msgstr "Pidginin teemaeditori"
 
 #. *< name
 #. *< version
 #. *  summary
-#, fuzzy
 msgid "Pidgin Theme Editor."
-msgstr "Pidgin GTK+-teemanhallinta"
+msgstr "Pidginin teemaeditori."
 
 #. *< type
 #. *< ui_requirement
@@ -14442,9 +14350,9 @@
 msgstr "Asetukset jotka liittyvät erityisesti Pidginin Windows-versioon "
 
 msgid ""
-"Provides options specific to Pidgin for Windows , such as buddy list docking."
-msgstr ""
-"Tarjoaa Windows Pidgin -sidonnaisia valintoja, kuten tuttavat-ikkunan "
+"Provides options specific to Pidgin for Windows, such as buddy list docking."
+msgstr ""
+"Tarjoaa Windows Pidgin -sidonnaisia valintoja, kuten Tuttavat-ikkunan "
 "telakoinnin."
 
 msgid "<font color='#777777'>Logged out.</font>"
@@ -14486,6 +14394,15 @@
 "Tätä liitännäistä voidaan käyttää XMPP-palvelimien tai -asiakasohjelmien "
 "virheenjäljitykseen."
 
+#~ msgid "More Data needed"
+#~ msgstr "Lisää tietoja tarvitaan"
+
+#~ msgid "Please provide a shortcut to associate with the smiley."
+#~ msgstr "Syötä hymiöön liitettävä oikotie."
+
+#~ msgid "Please select an image for the smiley."
+#~ msgstr "Valitse hymiölle kuva."
+
 #~ msgid "Activate which ID?"
 #~ msgstr "Mikä tunnus (ID) aktivoidaan?"
 
--- a/po/sl.po	Mon Jul 06 04:37:06 2009 +0000
+++ b/po/sl.po	Mon Jul 06 05:27:30 2009 +0000
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Pidgin 2.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-02 01:34-0700\n"
+"POT-Creation-Date: 2009-07-04 15:07-0700\n"
 "PO-Revision-Date: 2009-05-02 16:54+0100\n"
 "Last-Translator: Martin Srebotnjak  <miles@filmsi.net>\n"
 "Language-Team: Martin Srebotnjak <miles@filmsi.net>\n"
@@ -2611,9 +2611,10 @@
 "dnevnika."
 
 #. * description
+#, fuzzy
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
-"Currently, this includes Adium, MSN Messenger, and Trillian.\n"
+"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
 "\n"
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
@@ -2667,8 +2668,9 @@
 msgid "Save messages sent to an offline user as pounce."
 msgstr "Shrani sporočila, poslana neprijavljenemu uporabniku, kot opozorilo."
 
-msgid ""
-"The rest of the messages will be saved as pounce. You can edit/delete the "
+#, fuzzy
+msgid ""
+"The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
 "Preostanek sporočila bo shranjen kot opozorilo. Opozorilo lahko uredite/"
@@ -4809,7 +4811,8 @@
 msgid "Error in chat %s"
 msgstr "Napaka v pomenku %s"
 
-msgid "An error occured on the in-band bytestream transfer\n"
+#, fuzzy
+msgid "An error occurred on the in-band bytestream transfer\n"
 msgstr "V notranje pasovnem zlogovnem pretoku je prišlo do napake\n"
 
 msgid "Transfer was closed."
@@ -6347,9 +6350,10 @@
 "%s appears to be offline and did not receive the message that you just sent."
 msgstr "%s ni na zvezi in ni sprejel sporočila, ki ste ga pravkar poslali."
 
-msgid ""
-"Unable to connect to server. Please enter the address of the server you wish "
-"to connect to."
+#, fuzzy
+msgid ""
+"Unable to connect to server. Please enter the address of the server to which "
+"you wish to connect."
 msgstr ""
 "Ni se mogoče povezati na strežnik. Vnesite naslov strežnika, na katerega se "
 "želite povezati."
@@ -6727,9 +6731,10 @@
 msgstr "Ponovno zahtevaj pooblastitev"
 
 #. Unregistered username
-#. uid is not exist
-msgid "Invalid username."
-msgstr "Neveljavno uporabniško ime."
+#. the username does not exist
+#, fuzzy
+msgid "Username does not exist"
+msgstr "Uporabnik ne obstaja"
 
 #. Suspended account
 msgid "Your account is currently suspended."
@@ -7998,6 +8003,10 @@
 msgid "Enter the text from the image"
 msgstr "Vnesite besedilo s slike"
 
+#. uid is not exist
+msgid "Invalid username."
+msgstr "Neveljavno uporabniško ime."
+
 #, c-format
 msgid "Unknown reply when checking password (0x%02X)"
 msgstr "Neznan odgovor pri preverjanju gesla (0x%02X)"
@@ -9625,7 +9634,6 @@
 msgid "Received invalid data"
 msgstr "Na povezavi s strežnikom prejeti neveljavni podatki."
 
-#. Password incorrect
 #, fuzzy
 msgid "Incorrect Password"
 msgstr "Neveljavno geslo"
@@ -9639,11 +9647,6 @@
 "Neznana številka napake %d. Prijavljanje v spletno stran Yahoo! lahko to "
 "odpravi."
 
-#. the username does not exist
-#, fuzzy
-msgid "Username does not exist"
-msgstr "Uporabnik ne obstaja"
-
 #. indicates a lock of some description
 #, fuzzy
 msgid ""
@@ -11132,6 +11135,10 @@
 msgid "The text information for a buddy's status"
 msgstr "Spremeni podatke za uporabika %s"
 
+#, fuzzy
+msgid "Type the host name for this certificate."
+msgstr "Vnesite ime gostitelja, kateremu je namenjeno to digitalno potrdilo."
+
 #. Widget creation function
 msgid "SSL Servers"
 msgstr "Strežniki SSL"
@@ -12067,7 +12074,8 @@
 msgid "Hyperlink visited color"
 msgstr "Barva obiskane povezave"
 
-msgid "Color to draw hyperlinks after it has been visited (or activated)."
+#, fuzzy
+msgid "Color to draw hyperlink after it has been visited (or activated)."
 msgstr "Barva za izpis hiperpovezav, ki ste jih že obiskali (ali aktivirali)."
 
 msgid "Hyperlink prelight color"
@@ -12104,13 +12112,22 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr "Ime barve sporočila dejanja za šepetano sporočilo"
 
+#, fuzzy
+msgid "Color to draw the name of a whispered action message."
+msgstr "Barva izrisa imena na sporočilo dejanja."
+
 msgid "Whisper Message Name Color"
 msgstr "Barva imena šepetanega sporočila"
 
+#, fuzzy
+msgid "Color to draw the name of a whispered message."
+msgstr "Barva izrisa imena na sporočilo dejanja."
+
 msgid "Typing notification color"
 msgstr "Barva obvestila o tipkanju"
 
-msgid "The color to use for the typing notification font"
+#, fuzzy
+msgid "The color to use for the typing notification"
 msgstr "Barva pisave za obvestilo o tipkanju"
 
 msgid "Typing notification font"
@@ -12510,6 +12527,9 @@
 "Vašega brskalnika ni bilo mogoče zagnati, ker ste v nastavitvah izbrali "
 "poljuben brskalnik, a niste nastavili ukaza."
 
+msgid "No message"
+msgstr "Ni sporočil"
+
 msgid "Open All Messages"
 msgstr "Odpri vsa sporočila"
 
@@ -12526,9 +12546,6 @@
 msgstr ""
 "<span weight=\"bold\" size=\"larger\">Dobili ste opozorilo prijatelja!</span>"
 
-msgid "No message"
-msgstr "Ni sporočil"
-
 msgid "The following plugins will be unloaded."
 msgstr "Odloženi bodo naslednji vtičniki."
 
@@ -12846,7 +12863,8 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Primer: stunserver.org</span>"
 
-msgid "_Autodetect IP address"
+#, fuzzy, c-format
+msgid "Use _automatically detected IP address: %s"
 msgstr "_Samozaznaj naslov IP"
 
 msgid "Public _IP:"
@@ -13216,32 +13234,17 @@
 msgid "Status for %s"
 msgstr "Stanje za %s"
 
-#.
-#. * TODO: We should enable/disable the add button based on
-#. *       whether the user has entered all required data.  That
-#. *       would eliminate the need for this check and provide a
-#. *       better user experience.
-#.
-msgid "Custom Smiley"
-msgstr "Smejček po meri"
-
-msgid "More Data needed"
-msgstr "Potrebnih je več podatkov"
-
-msgid "Please provide a shortcut to associate with the smiley."
-msgstr "Podajte tipke za bližnjico, ki bodo povezane s smejčkom."
-
 #, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
 msgstr "Smejček po meri za '%s' že obstaja. Navedite druge tipke za bližnjico."
 
+msgid "Custom Smiley"
+msgstr "Smejček po meri"
+
 msgid "Duplicate Shortcut"
 msgstr "Podvojena tipka za bližnjico"
 
-msgid "Please select an image for the smiley."
-msgstr "Izberite sliko smejčka."
-
 msgid "Edit Smiley"
 msgstr "Uredi smejčka"
 
@@ -13350,9 +13353,10 @@
 msgid "Cannot send launcher"
 msgstr "Ni mogoče poslati zaganjalnika"
 
-msgid ""
-"You dragged a desktop launcher. Most likely you wanted to send whatever this "
-"launcher points to instead of this launcher itself."
+#, fuzzy
+msgid ""
+"You dragged a desktop launcher. Most likely you wanted to send the target of "
+"this launcher instead of this launcher itself."
 msgstr ""
 "Povlekli ste namizni zaganjalnik. Najverjetneje ste želeli namesto samega "
 "zaganjalnika poslati tisto, na kar ta zaganjalnik kaže."
@@ -13947,9 +13951,10 @@
 msgstr "Vtičnik za glasbeno sporočanje - za skupinsko skladanje."
 
 #. *  summary
+#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
-"on a piece of music by editting a common score in real-time."
+"on a piece of music by editing a common score in real-time."
 msgstr ""
 "Vtičnik za glasbeno sporočanje omogoča več uporabnikom hkratno sodelovanju "
 "pri glasbenem ustvarjanju kompozicije v resničnem času."
@@ -14212,9 +14217,10 @@
 msgstr "Gumb Pošlji okna pogovora"
 
 #. *< summary
+#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
-"for when no physical keyboard is present."
+"for use when no physical keyboard is present."
 msgstr ""
 "Doda gumb Pošlji v vnosno območje pogovornega okna. Namenjeno za primere, ko "
 "fizična tipkovnica ni prisotna."
@@ -14544,8 +14550,9 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "Nastavitve, specifične za %s v okolju Windows."
 
-msgid ""
-"Provides options specific to Pidgin for Windows , such as buddy list docking."
+#, fuzzy
+msgid ""
+"Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
 "Ponuja nastavitve, specifične za %s v okolju Windows, kot je sidranje "
 "seznama prijateljev."
@@ -14591,6 +14598,15 @@
 #~ msgid "Activate which ID?"
 #~ msgstr "Kateri ID naj bo aktiviran?"
 
+#~ msgid "More Data needed"
+#~ msgstr "Potrebnih je več podatkov"
+
+#~ msgid "Please provide a shortcut to associate with the smiley."
+#~ msgstr "Podajte tipke za bližnjico, ki bodo povezane s smejčkom."
+
+#~ msgid "Please select an image for the smiley."
+#~ msgstr "Izberite sliko smejčka."
+
 #~ msgid "Cursor Color"
 #~ msgstr "Barva kazalke"
 
--- a/po/zh_CN.po	Mon Jul 06 04:37:06 2009 +0000
+++ b/po/zh_CN.po	Mon Jul 06 05:27:30 2009 +0000
@@ -1,20 +1,21 @@
-# pidgin 软件包的简体中文翻译。
-# Copyright (C) 2003 pidgin team.
+# Pidgin 软件包的简体中文翻译。
+# Copyright (C) 2009 pidgin team.
 # This file is distributed under the same license as the pidgin package.
 # Funda Wang <fundawang@linux.net.cn>, 2003, 2004.
+# liyuekui <liyuekui@gmail.com>, 2009.
+# Aron Xu <aronmalache@163.com>, 2009.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: pidgin HEAD\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-02 01:34-0700\n"
-"PO-Revision-Date: 2007-05-20 20:22+0800\n"
-"Last-Translator: Funda Wang <fundawang@linux.net.cn>\n"
-"Language-Team: zh_CN <i18n-translation@lists.linux.net.cn>\n"
+"POT-Creation-Date: 2009-07-04 15:17-0700\n"
+"PO-Revision-Date: 2009-04-23 00:32+0800\n"
+"Last-Translator: Aron Xu <aronmalache@163.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -25,7 +26,7 @@
 msgid "%s. Try `%s -h' for more information.\n"
 msgstr "%s。试试“%s -h”查看帮助。\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s\n"
 "Usage: %s [OPTION]...\n"
@@ -60,7 +61,6 @@
 msgid "Account was not added"
 msgstr "账户未添加"
 
-#, fuzzy
 msgid "Username of an account must be non-empty."
 msgstr "账户的用户名必须非空。"
 
@@ -70,7 +70,6 @@
 msgid "Remember password"
 msgstr "记住密码"
 
-#, fuzzy
 msgid "There are no protocol plugins installed."
 msgstr "未安装协议插件。"
 
@@ -86,9 +85,8 @@
 msgid "Protocol:"
 msgstr "协议:"
 
-#, fuzzy
 msgid "Username:"
-msgstr "用户名(_U):"
+msgstr "用户名:"
 
 msgid "Password:"
 msgstr "密码:"
@@ -97,7 +95,6 @@
 msgstr "别名:"
 
 #. Register checkbox
-#, fuzzy
 msgid "Create this account on the server"
 msgstr "在服务器上创建此新帐户"
 
@@ -179,7 +176,6 @@
 msgid "Default"
 msgstr "默认"
 
-#, fuzzy
 msgid "You must provide a username for the buddy."
 msgstr "您必须提供好友的用户名。"
 
@@ -198,13 +194,11 @@
 msgid "Username"
 msgstr "用户名"
 
-#, fuzzy
 msgid "Alias (optional)"
-msgstr "给联系人起名"
-
-#, fuzzy
+msgstr "联系人别名(可选)"
+
 msgid "Add in group"
-msgstr "添加组"
+msgstr "添加到组"
 
 msgid "Account"
 msgstr "账户"
@@ -346,9 +340,8 @@
 msgid "Plugins"
 msgstr "插件"
 
-#, fuzzy
 msgid "Block/Unblock"
-msgstr "取消屏蔽"
+msgstr "屏蔽/取消屏蔽"
 
 msgid "Block"
 msgstr "屏蔽"
@@ -356,11 +349,10 @@
 msgid "Unblock"
 msgstr "取消屏蔽"
 
-#, fuzzy
 msgid ""
 "Please enter the username or alias of the person you would like to Block/"
 "Unblock."
-msgstr "您想要跟谁聊?请输入他/她的用户名或别名。"
+msgstr "清输入你想要屏蔽/解除屏蔽的用户名活别名。"
 
 #. Not multiline
 #. Not masked?
@@ -371,7 +363,6 @@
 msgid "New Instant Message"
 msgstr "新即时消息"
 
-#, fuzzy
 msgid "Please enter the username or alias of the person you would like to IM."
 msgstr "您想要跟谁聊?请输入他/她的用户名或别名。"
 
@@ -387,11 +378,10 @@
 msgid "Join"
 msgstr "加入"
 
-#, fuzzy
 msgid ""
 "Please enter the username or alias of the person whose log you would like to "
 "view."
-msgstr "您想要查看谁的日志?请输入他/她的用户名或别名。"
+msgstr "您想要查看和谁聊天的日志?请输入他/她的用户名或别名。"
 
 #. Create the "Options" frame.
 msgid "Options"
@@ -400,20 +390,17 @@
 msgid "Send IM..."
 msgstr "发送消息..."
 
-#, fuzzy
 msgid "Block/Unblock..."
-msgstr "取消屏蔽"
+msgstr "屏蔽/取消屏蔽..."
 
 msgid "Join Chat..."
 msgstr "加入聊天..."
 
-#, fuzzy
 msgid "View Log..."
-msgstr "查看日志"
-
-#, fuzzy
+msgstr "查看日志..."
+
 msgid "View All Logs"
-msgstr "查看日志"
+msgstr "查看全部日志"
 
 msgid "Show"
 msgstr "显示"
@@ -436,19 +423,17 @@
 msgid "By Log Size"
 msgstr "按日志大小"
 
-#, fuzzy
 msgid "Buddy"
-msgstr "好友(_B):"
+msgstr "好友"
 
 msgid "Chat"
 msgstr "聊天"
 
-#, fuzzy
 msgid "Grouping"
-msgstr "组"
+msgstr "分组"
 
 msgid "Certificate Import"
-msgstr "证书导入"
+msgstr "导入证书"
 
 msgid "Specify a hostname"
 msgstr "指定主机名"
@@ -503,17 +488,17 @@
 msgstr ""
 
 msgid "SSL Host Certificate"
-msgstr ""
+msgstr "SSL 主机证书"
 
 #, c-format
 msgid "Really delete certificate for %s?"
-msgstr ""
+msgstr "确实要删除 %s 的证书吗?"
 
 msgid "Confirm certificate delete"
-msgstr ""
+msgstr "确认删除证书"
 
 msgid "Certificate Manager"
-msgstr ""
+msgstr "证书管理器"
 
 #. Creating the user splits
 msgid "Hostname"
@@ -615,7 +600,6 @@
 msgid "Add Buddy Pounce..."
 msgstr "添加好友千里眼..."
 
-#, fuzzy
 msgid "Invite..."
 msgstr "邀请"
 
@@ -631,7 +615,8 @@
 #, fuzzy, c-format
 msgid "List of %d user:\n"
 msgid_plural "List of %d users:\n"
-msgstr[0] "用户列表:\n"
+msgstr[0] "%d 个用户的列表:\n"
+msgstr[1] "%d 个用户的列表:\n"
 
 msgid "Supported debug options are:  version"
 msgstr "支持的调试选项有: version"
@@ -650,7 +635,7 @@
 msgid ""
 "%s is not a valid message class. See '/help msgcolor' for valid message "
 "classes."
-msgstr ""
+msgstr "%s 不是有效的信息类型。查看'/help msgcolor' 已查找有效的信息"
 
 #, c-format
 msgid "%s is not a valid color. See '/help msgcolor' for valid colors."
@@ -727,6 +712,7 @@
 msgid "File Transfers - %d%% of %d file"
 msgid_plural "File Transfers - %d%% of %d files"
 msgstr[0] "文件传送 - 已完成 %d%%,共 %d 个文件"
+msgstr[1] "文件传送 - 已完成 %d%%,共 %d 个文件"
 
 #. Create the window.
 msgid "File Transfers"
@@ -773,13 +759,11 @@
 msgid "%.2f KiB/s"
 msgstr "%.2f KB/秒"
 
-#, fuzzy
 msgid "Sent"
-msgstr "设置(_S)"
-
-#, fuzzy
+msgstr "已发送"
+
 msgid "Received"
-msgstr "收到的消息"
+msgstr "已收到"
 
 msgid "Finished"
 msgstr "已完成"
@@ -788,21 +772,20 @@
 msgid "The file was saved as %s."
 msgstr "文件已另存为 %s。"
 
-#, fuzzy
 msgid "Sending"
-msgstr "发送"
-
-#, fuzzy
+msgstr "正在发送"
+
 msgid "Receiving"
-msgstr "剩余"
-
-#, fuzzy, c-format
+msgstr "正在接收"
+
+# c-format
+#, c-format
 msgid "Conversation in %s on %s"
-msgstr "与 %s 的对话"
-
-#, fuzzy, c-format
+msgstr "在 %s 中与 %s 的对话"
+
+#, c-format
 msgid "Conversation with %s on %s"
-msgstr "与 %s 的对话"
+msgstr "与 %s 在 %s 的对话"
 
 msgid "%B %Y"
 msgstr "%Y年%m月"
@@ -839,16 +822,14 @@
 msgid "Conversations with %s"
 msgstr "与 %s 的对话"
 
-#, fuzzy
 msgid "All Conversations"
-msgstr "对话"
+msgstr "全部对话"
 
 msgid "System Log"
 msgstr "系统日志"
 
-#, fuzzy
 msgid "Calling ... "
-msgstr "正在计算..."
+msgstr "正在呼叫..."
 
 msgid "Hangup"
 msgstr ""
@@ -874,12 +855,11 @@
 msgid "%s is trying to start an unsupported media session type with you."
 msgstr ""
 
-#, fuzzy
 msgid "You have rejected the call."
-msgstr "您已经参与了频道%s%s"
+msgstr "您已经拒绝呼叫"
 
 msgid "call: Make an audio call."
-msgstr ""
+msgstr "呼叫:音频呼叫。"
 
 msgid "Emails"
 msgstr "电子邮件"
@@ -893,10 +873,11 @@
 msgid "Subject"
 msgstr "主题"
 
-#, c-format
+#, fuzzy, c-format
 msgid "%s (%s) has %d new message."
 msgid_plural "%s (%s) has %d new messages."
 msgstr[0] "%s(%s) 有 %d 封新邮件。"
+msgstr[1] "%s(%s) 有 %d 封新邮件。"
 
 msgid "New Mail"
 msgstr "新邮件"
@@ -920,16 +901,14 @@
 msgid "(none)"
 msgstr "(无)"
 
-#, fuzzy
 msgid "URI"
-msgstr "UIN"
+msgstr "URI"
 
 msgid "ERROR"
-msgstr ""
-
-#, fuzzy
+msgstr "错误"
+
 msgid "loading plugin failed"
-msgstr "Ping 失败"
+msgstr "载入插件失败"
 
 msgid "unloading plugin failed"
 msgstr ""
@@ -966,9 +945,8 @@
 "Please open the debug window and try again to see the exact error message."
 msgstr ""
 
-#, fuzzy
 msgid "Select plugin to install"
-msgstr "选择文件"
+msgstr "选择插件以安装"
 
 msgid "You can (un)load plugins from the following list."
 msgstr "您可以卸载以下列表中的插件。"
@@ -1059,16 +1037,14 @@
 msgid "Play a sound"
 msgstr "播放声音"
 
-#, fuzzy
 msgid "Pounce only when my status is not Available"
-msgstr "仅当我的状态不可用时才监视(_O)"
+msgstr "仅当我的状态不可用时才监视"
 
 msgid "Recurring"
 msgstr "再现"
 
-#, fuzzy
 msgid "Cannot create pounce"
-msgstr "无法更改昵称"
+msgstr "无法创建监视"
 
 msgid "You do not have any accounts."
 msgstr "您没有帐户。"
@@ -1174,13 +1150,11 @@
 msgid "Logging"
 msgstr "日志"
 
-#, fuzzy
 msgid "You must fill all the required fields."
-msgstr "填入注册字段。"
-
-#, fuzzy
+msgstr "您必须填入注册字段。"
+
 msgid "The required fields are underlined."
-msgstr "所需插件 %s 无法装入。"
+msgstr "所需区域已用下划线标出。"
 
 msgid "Not implemented yet."
 msgstr "未实现。"
@@ -1191,16 +1165,14 @@
 msgid "Open File..."
 msgstr "打开文件..."
 
-#, fuzzy
 msgid "Choose Location..."
-msgstr "位置"
+msgstr "选择位置..."
 
 msgid "Hit 'Enter' to find more rooms of this category."
-msgstr ""
-
-#, fuzzy
+msgstr "按'Enter'以寻找更多此分类下的聊天室。"
+
 msgid "Get"
-msgstr "设置(_S)"
+msgstr "获取"
 
 #. Create the window.
 msgid "Room List"
@@ -1233,9 +1205,8 @@
 msgid "Others talk in chat"
 msgstr "别人在聊天中发言"
 
-#, fuzzy
 msgid "Someone says your username in chat"
-msgstr "别人在聊天中提到您的名字"
+msgstr "有人在聊天中提到您的名字"
 
 msgid "GStreamer Failure"
 msgstr "GStreamer 失败"
@@ -1273,7 +1244,7 @@
 msgid "Method: "
 msgstr "方式:"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Sound Command\n"
 "(%s for filename)"
@@ -1297,9 +1268,8 @@
 msgid "Only when not available"
 msgstr "仅当不可用时"
 
-#, fuzzy
 msgid "Volume(0-100):"
-msgstr "音量:"
+msgstr "音量(0-100):"
 
 #. Sound events
 msgid "Sound Events"
@@ -1492,24 +1462,20 @@
 msgid "Offline"
 msgstr "离线"
 
-#, fuzzy
 msgid "Online Buddies"
-msgstr "离线好友"
-
-#, fuzzy
+msgstr "在线好友"
+
 msgid "Offline Buddies"
 msgstr "离线好友"
 
-#, fuzzy
 msgid "Online/Offline"
-msgstr "上线时间"
+msgstr "在线/离线"
 
 msgid "Meebo"
 msgstr ""
 
-#, fuzzy
 msgid "No Grouping"
-msgstr "无声音"
+msgstr "未分组"
 
 msgid "Nested Subgroup"
 msgstr ""
@@ -1517,12 +1483,11 @@
 msgid "Nested Grouping (experimental)"
 msgstr ""
 
-#, fuzzy
 msgid "Provides alternate buddylist grouping options."
-msgstr "提供与 Evolution 的集成。"
+msgstr "提供其他分组选项。"
 
 msgid "Lastlog"
-msgstr "Lastlog"
+msgstr "最近日志"
 
 #. Translator Note: The "backlog" is the conversation buffer/history.
 msgid "lastlog: Searches for a substring in the backlog."
@@ -1547,12 +1512,11 @@
 msgid "TinyURL (or other) address prefix"
 msgstr ""
 
-#, fuzzy
 msgid "TinyURL"
-msgstr "URL"
+msgstr "TinyURL"
 
 msgid "TinyURL plugin"
-msgstr ""
+msgstr "TinyURL 插件"
 
 msgid "When receiving a message with URL(s), TinyURL for easier copying"
 msgstr ""
@@ -1647,13 +1611,13 @@
 msgstr ""
 
 #. Make messages
-#, fuzzy, c-format
+#, c-format
 msgid "Accept certificate for %s?"
-msgstr "接受聊天邀请吗?"
+msgstr "接受 %s 的聊天邀请吗?"
 
 #. TODO: Find what the handle ought to be
 msgid "SSL Certificate Verification"
-msgstr ""
+msgstr "SSL 证书验证"
 
 msgid "_View Certificate..."
 msgstr "查看证书(_V)..."
@@ -1725,16 +1689,14 @@
 msgstr ""
 
 #. TODO: Find what the handle ought to be
-#, fuzzy
 msgid "Certificate Information"
-msgstr "服务器信息"
+msgstr "证书信息"
 
 msgid "Registration Error"
 msgstr "注册错误"
 
-#, fuzzy
 msgid "Unregistration Error"
-msgstr "注册错误"
+msgstr "解除注册错误"
 
 #, c-format
 msgid "+++ %s signed on"
@@ -1792,7 +1754,6 @@
 msgid "%s left the room (%s)."
 msgstr "%s 离开了聊天室(%s)。"
 
-#, fuzzy
 msgid "Invite to chat"
 msgstr "邀请会议"
 
@@ -2166,9 +2127,9 @@
 msgid "Unable to load your plugin."
 msgstr "无法装入您的插件。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s requires %s, but it failed to unload."
-msgstr "依赖的插件 %s 装入失败。"
+msgstr "%s 依赖的插件 %s 卸载失败。"
 
 msgid "Autoaccept"
 msgstr "自动接受"
@@ -2224,9 +2185,8 @@
 "(only when there's no conversation with the sender)"
 msgstr ""
 
-#, fuzzy
 msgid "Create a new directory for each user"
-msgstr "选择要搜索的用户目录"
+msgstr "为每个用户创建新目录"
 
 msgid "Notes"
 msgstr "备注"
@@ -2516,9 +2476,10 @@
 msgstr "在日志查看器中包含其它即时通讯客户的日志。"
 
 #. * description
+#, fuzzy
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
-"Currently, this includes Adium, MSN Messenger, and Trillian.\n"
+"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
 "\n"
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
@@ -2571,7 +2532,7 @@
 msgstr ""
 
 msgid ""
-"The rest of the messages will be saved as pounce. You can edit/delete the "
+"The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
 
@@ -2856,9 +2817,8 @@
 msgstr "Purple 联系人"
 
 #. Creating the options for the protocol
-#, fuzzy
 msgid "Local Port"
-msgstr "地区"
+msgstr "本地端口"
 
 msgid "Bonjour"
 msgstr "Bonjour"
@@ -2879,9 +2839,8 @@
 msgid "Could not listen on socket"
 msgstr "无法在套接字上监听"
 
-#, fuzzy
 msgid "Error communicating with local mDNSResponder."
-msgstr "与服务器通讯出错"
+msgstr "与本地 DNS 服务通讯出错"
 
 msgid "Invalid proxy settings"
 msgstr "无效的代理设置"
@@ -2906,9 +2865,9 @@
 msgid "Buddylist saved successfully!"
 msgstr "好友列表成功保存!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't write buddy list for %s to %s"
-msgstr "无法装入好友列表"
+msgstr "无法为 %s 写入 %s 好友列表"
 
 msgid "Couldn't load buddylist"
 msgstr "无法装入好友列表"
@@ -3246,13 +3205,12 @@
 msgid "Ban on %s by %s, set %s ago"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Ban on %s"
-msgstr "原因: %s"
-
-#, fuzzy
+msgstr "屏蔽: %s"
+
 msgid "End of ban list"
-msgstr "未列出"
+msgstr "屏蔽列表结束"
 
 #, c-format
 msgid "You are banned from %s."
@@ -3373,13 +3331,12 @@
 #. We only want to do the following dance if the connection
 #. has not been successfully completed.  If it has, just
 #. notify the user that their /nick command didn't go.
-#, fuzzy, c-format
+#, c-format
 msgid "The nickname \"%s\" is already being used."
-msgstr "此聊天名已经在使用中"
-
-#, fuzzy
+msgstr "昵称 \"%s\" 已被使用。"
+
 msgid "Nickname in use"
-msgstr "昵称"
+msgstr "昵称已被使用"
 
 msgid "Cannot change nick"
 msgstr "无法更改昵称"
@@ -3398,9 +3355,9 @@
 msgid "PING reply -- Lag: %lu seconds"
 msgstr "PING 响应 -- 延后: %lu 秒"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Cannot join %s: Registration is required."
-msgstr "需要注册"
+msgstr "无法加入 %s:需要注册"
 
 msgid "Cannot join channel"
 msgstr "无法加入频道"
@@ -3597,9 +3554,8 @@
 msgid "Server requires TLS/SSL for login.  No TLS/SSL support found."
 msgstr "服务器需要 TLS/SSL 才能登录。没有找到 TLS/SSL 支持。"
 
-#, fuzzy
 msgid "You require encryption, but no TLS/SSL support found."
-msgstr "服务器需要 TLS/SSL 才能登录。没有找到 TLS/SSL 支持。"
+msgstr "您要求 TLS/SSL 登录,但没有找到 TLS/SSL 支持。"
 
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "服务器需要在不加密流上使用纯文本验证"
@@ -3631,19 +3587,14 @@
 msgid "The BOSH connection manager terminated your session."
 msgstr ""
 
-#, fuzzy
 msgid "No session ID given"
-msgstr "没有给出理由。"
-
-#, fuzzy
+msgstr "没有给出会话 ID"
+
 msgid "Unsupported version of BOSH protocol"
-msgstr "不支持的版本"
-
-#, fuzzy
+msgstr "不支持 BOSH 协议的版本"
+
 msgid "Unable to establish a connection with the server"
-msgstr ""
-"无法建立与服务器:\n"
-"%s"
+msgstr "无法与服务器建立连接"
 
 #, c-format
 msgid ""
@@ -3653,9 +3604,8 @@
 "无法建立与服务器:\n"
 "%s"
 
-#, fuzzy
 msgid "Unable to establish SSL connection"
-msgstr "无法初始化连接"
+msgstr "无法建立 SSL 连接"
 
 msgid "Unable to create socket"
 msgstr "无法创建套接字"
@@ -3727,12 +3677,11 @@
 msgid "Operating System"
 msgstr "操作系统"
 
-#, fuzzy
 msgid "Local Time"
-msgstr "本地文件:"
+msgstr "本地时间"
 
 msgid "Last Activity"
-msgstr ""
+msgstr "最近活动"
 
 msgid "Service Discovery Info"
 msgstr "服务目录信息"
@@ -3744,9 +3693,8 @@
 msgid "Extended Stanza Addressing"
 msgstr "额外地址"
 
-#, fuzzy
 msgid "Multi-User Chat"
-msgstr "给聊天起名"
+msgstr "多用户聊天"
 
 #, fuzzy
 msgid "Multi-User Chat Extended Presence Information"
@@ -3775,17 +3723,15 @@
 msgid "In-Band Registration"
 msgstr "注册错误"
 
-#, fuzzy
 msgid "User Location"
-msgstr "位置"
+msgstr "用户位置"
 
 #, fuzzy
 msgid "User Avatar"
 msgstr "用户搜索"
 
-#, fuzzy
 msgid "Chat State Notifications"
-msgstr "好友状态通知"
+msgstr "聊天状态通知"
 
 msgid "Software Version"
 msgstr "软件版本"
@@ -3822,9 +3768,8 @@
 msgid "Reachability Address"
 msgstr "电子邮件地址"
 
-#, fuzzy
 msgid "User Profile"
-msgstr "个人资料"
+msgstr "用户资料"
 
 #, fuzzy
 msgid "Jingle"
@@ -3833,9 +3778,8 @@
 msgid "Jingle Audio"
 msgstr ""
 
-#, fuzzy
 msgid "User Nickname"
-msgstr "用户名"
+msgstr "用户昵称"
 
 msgid "Jingle ICE UDP"
 msgstr ""
@@ -3956,13 +3900,11 @@
 msgid "Unsubscribe"
 msgstr "退订"
 
-#, fuzzy
 msgid "Log In"
-msgstr "已登入"
-
-#, fuzzy
+msgstr "登录"
+
 msgid "Log Out"
-msgstr "记录聊天"
+msgstr "退出"
 
 msgid "Chatty"
 msgstr "唠叨"
@@ -4009,9 +3951,8 @@
 msgid "Email Address"
 msgstr "电子邮件地址"
 
-#, fuzzy
 msgid "Search for XMPP users"
-msgstr "搜索用户"
+msgstr "搜索 XMPP 用户"
 
 #. "Search"
 msgid "Search"
@@ -4096,17 +4037,14 @@
 msgid "Affiliations:"
 msgstr "别名:"
 
-#, fuzzy
 msgid "No users found"
 msgstr "未找到匹配的用户"
 
-#, fuzzy
 msgid "Roles:"
-msgstr "职务"
-
-#, fuzzy
+msgstr "角色:"
+
 msgid "Ping timeout"
-msgstr "纯文本"
+msgstr "Ping 超时"
 
 msgid "Read Error"
 msgstr "读取错误"
@@ -4131,9 +4069,9 @@
 msgid "Registration of %s@%s successful"
 msgstr "%s@%s 注册成功"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Registration to %s successful"
-msgstr "%s@%s 注册成功"
+msgstr "%s 注册成功"
 
 msgid "Registration Successful"
 msgstr "注册成功"
@@ -4141,17 +4079,15 @@
 msgid "Registration Failed"
 msgstr "注册失败"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Registration from %s successfully removed"
-msgstr "%s@%s 注册成功"
-
-#, fuzzy
+msgstr "%s 取消注册成功"
+
 msgid "Unregistration Successful"
-msgstr "注册成功"
-
-#, fuzzy
+msgstr "取消注册成功"
+
 msgid "Unregistration Failed"
-msgstr "注册失败"
+msgstr "取消注册失败"
 
 msgid "State"
 msgstr "州/省"
@@ -4171,7 +4107,6 @@
 msgid "Unregister"
 msgstr "取消注册"
 
-#, fuzzy
 msgid ""
 "Please fill out the information below to change your account registration."
 msgstr "请在下面填入信息以注册您新的账户。"
@@ -4179,24 +4114,22 @@
 msgid "Please fill out the information below to register your new account."
 msgstr "请在下面填入信息以注册您新的账户。"
 
-#, fuzzy
 msgid "Register New XMPP Account"
-msgstr "注册新的 Jabber 账户"
+msgstr "注册新的 XMPP 账户"
 
 msgid "Register"
 msgstr "注册"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Change Account Registration at %s"
-msgstr "更改 %s 的用户信息"
-
-#, fuzzy, c-format
+msgstr "更改在 %s 的用户信息"
+
+#, c-format
 msgid "Register New Account at %s"
-msgstr "注册新的 Jabber 账户"
-
-#, fuzzy
+msgstr "在 %s 注册新账户"
+
 msgid "Change Registration"
-msgstr "注册错误"
+msgstr "更改帐户"
 
 #, fuzzy
 msgid "Malformed BOSH Connect Server"
@@ -4206,16 +4139,14 @@
 msgid "Error unregistering account"
 msgstr "更改账户信息出错"
 
-#, fuzzy
 msgid "Account successfully unregistered"
-msgstr "您成功创建了一个群"
+msgstr "取消帐户注册成功"
 
 msgid "Initializing Stream"
 msgstr "初始化流"
 
-#, fuzzy
 msgid "Initializing SSL/TLS"
-msgstr "初始化流"
+msgstr "初始化 SSL/TLS"
 
 msgid "Authenticating"
 msgstr "正在认证"
@@ -4306,9 +4237,8 @@
 msgid "Password (again)"
 msgstr "再次输入新密码"
 
-#, fuzzy
 msgid "Change XMPP Password"
-msgstr "更改密码"
+msgstr "更改 XMPP 密码"
 
 msgid "Please enter your new password"
 msgstr "请输入您的新密码"
@@ -4496,9 +4426,9 @@
 msgid "Unable to kick user %s"
 msgstr "无法踢出用户 %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to ping user %s"
-msgstr "无法屏蔽用户 %s"
+msgstr "无法 ping 用户 %s"
 
 #, fuzzy, c-format
 msgid "Unable to buzz, because there is nothing known about %s."
@@ -4620,14 +4550,12 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "XMPP Protocol Plugin"
-msgstr "MSN 协议插件"
+msgstr "XMPP 协议插件"
 
 #. Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im
-#, fuzzy
 msgid "Domain"
-msgstr "罗马尼亚语"
+msgstr "域"
 
 msgid "Require SSL/TLS"
 msgstr ""
@@ -4647,22 +4575,20 @@
 msgid "Connect server"
 msgstr "连接服务器"
 
-#, fuzzy
 msgid "File transfer proxies"
-msgstr "文件传送端口"
+msgstr "文件传送代理"
 
 msgid "BOSH URL"
 msgstr ""
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
-#, fuzzy
 msgid "Show Custom Smileys"
-msgstr "显示自定义如下:"
-
-#, fuzzy, c-format
+msgstr "显示自定义表情"
+
+#, c-format
 msgid "%s has left the conversation."
-msgstr "%s 已经关闭了对话。"
+msgstr "%s 已经离开了对话。"
 
 #, c-format
 msgid "Message from %s"
@@ -4680,11 +4606,10 @@
 msgid "Message delivery to %s failed: %s"
 msgstr "投递到 %s 的消息失败: %s"
 
-#, fuzzy
 msgid "XMPP Message Error"
-msgstr "Jabber 消息错误"
-
-#, fuzzy, c-format
+msgstr "XMPP 消息错误"
+
+#, c-format
 msgid "(Code %s)"
 msgstr " (代码 %s)"
 
@@ -4717,7 +4642,7 @@
 msgstr "聊天 %s 出错"
 
 #, fuzzy
-msgid "An error occured on the in-band bytestream transfer\n"
+msgid "An error occurred on the in-band bytestream transfer\n"
 msgstr "打开文件时发生了错误。"
 
 #, fuzzy
@@ -5437,7 +5362,7 @@
 msgid "Mobile message was not sent because it was too long."
 msgstr "消息未发出,因为您尚未登入。"
 
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "The MSN server will shut down for maintenance in %d minute. You will "
 "automatically be signed out at that time.  Please finish any conversations "
@@ -5457,6 +5382,11 @@
 "现在进行中的对话。\n"
 "\n"
 "维护完成后,您将能够成功登入。"
+msgstr[1] ""
+"MSN 服务器即将于 %d 分钟后关闭进行维护。到那时,您将会被自动登出。请尽快关闭"
+"现在进行中的对话。\n"
+"\n"
+"维护完成后,您将能够成功登入。"
 
 msgid ""
 "Message was not sent because the system is unavailable. This normally "
@@ -6260,9 +6190,10 @@
 "%s appears to be offline and did not receive the message that you just sent."
 msgstr "%s 显示为离线,因此未接受到您刚刚发出的消息。"
 
-msgid ""
-"Unable to connect to server. Please enter the address of the server you wish "
-"to connect to."
+#, fuzzy
+msgid ""
+"Unable to connect to server. Please enter the address of the server to which "
+"you wish to connect."
 msgstr "无法连接到服务器。请输入您想要连接的服务器的地址。"
 
 msgid "Error. SSL support is not installed."
@@ -6482,7 +6413,7 @@
 
 #. Label
 msgid "Buddy Icon"
-msgstr "好友图标"
+msgstr "用户头像"
 
 msgid "Voice"
 msgstr "语音"
@@ -6629,10 +6560,10 @@
 msgstr "收到的认证"
 
 #. Unregistered username
-#. uid is not exist
-#, fuzzy
-msgid "Invalid username."
-msgstr "名称无效"
+#. the username does not exist
+#, fuzzy
+msgid "Username does not exist"
+msgstr "用户不存在"
 
 #. Suspended account
 msgid "Your account is currently suspended."
@@ -6757,40 +6688,46 @@
 msgid "_Decline"
 msgstr "拒绝(_D)"
 
-#, c-format
+#, fuzzy, c-format
 msgid "You missed %hu message from %s because it was invalid."
 msgid_plural "You missed %hu messages from %s because they were invalid."
 msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息无效。"
-
-#, c-format
+msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息无效。"
+
+#, fuzzy, c-format
 msgid "You missed %hu message from %s because it was too large."
 msgid_plural "You missed %hu messages from %s because they were too large."
 msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息太大。"
-
-#, c-format
+msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是这些消息太大。"
+
+#, fuzzy, c-format
 msgid ""
 "You missed %hu message from %s because the rate limit has been exceeded."
 msgid_plural ""
 "You missed %hu messages from %s because the rate limit has been exceeded."
 msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是达到了等级限制。"
+msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是达到了等级限制。"
 
 #, fuzzy, c-format
 msgid ""
 "You missed %hu message from %s because his/her warning level is too high."
 msgid_plural ""
 "You missed %hu messages from %s because his/her warning level is too high."
-msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是他/她太可恶了。"
+msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是他/她的警告级别过高。"
+msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是他/她的警告级别过高。"
 
 #, fuzzy, c-format
 msgid "You missed %hu message from %s because your warning level is too high."
 msgid_plural ""
 "You missed %hu messages from %s because your warning level is too high."
-msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是您太可恶了。"
-
-#, c-format
+msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因是您的警告级别过高。"
+msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因是您的警告级别过高。"
+
+#, fuzzy, c-format
 msgid "You missed %hu message from %s for an unknown reason."
 msgid_plural "You missed %hu messages from %s for an unknown reason."
 msgstr[0] "您错过了 %2$s 的 %1$hu 条消息,原因未知。"
+msgstr[1] "您错过了 %2$s 的 %1$hu 条消息,原因未知。"
 
 #. Data is assumed to be the destination bn
 #, c-format
@@ -6945,7 +6882,7 @@
 "您在登录过程完成之前请求设定配置文件。您的配置文件尚未设定;请在您完全连接后"
 "再试一次。"
 
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "The maximum profile length of %d byte has been exceeded.  It has been "
 "truncated for you."
@@ -6953,11 +6890,12 @@
 "The maximum profile length of %d bytes has been exceeded.  It has been "
 "truncated for you."
 msgstr[0] "已经超过了配置文件的最大长度 %d 字节。程序为您自动截断了。"
+msgstr[1] "已经超过了配置文件的最大长度 %d 字节。程序为您自动截断了。"
 
 msgid "Profile too long."
 msgstr "配置文件太长。"
 
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "The maximum away message length of %d byte has been exceeded.  It has been "
 "truncated for you."
@@ -6965,6 +6903,7 @@
 "The maximum away message length of %d bytes has been exceeded.  It has been "
 "truncated for you."
 msgstr[0] "已经超过了离开消息的最大长度 %d 字节。程序自动为您截断了消息。"
+msgstr[1] "已经超过了离开消息的最大长度 %d 字节。程序自动为您截断了消息。"
 
 msgid "Away message too long."
 msgstr "离开消息太长。"
@@ -7904,6 +7843,11 @@
 msgid "Enter the text from the image"
 msgstr "请输入组名称"
 
+#. uid is not exist
+#, fuzzy
+msgid "Invalid username."
+msgstr "名称无效"
+
 #, c-format
 msgid "Unknown reply when checking password (0x%02X)"
 msgstr ""
@@ -9489,7 +9433,6 @@
 msgid "Received invalid data"
 msgstr "在与服务器的连接中收到了无效的数据。"
 
-#. Password incorrect
 #, fuzzy
 msgid "Incorrect Password"
 msgstr "密码不对"
@@ -9501,11 +9444,6 @@
 "Logging into the Yahoo! website may fix this."
 msgstr "位置错误号 %d。登录到 Yahoo! 网站可能修复。"
 
-#. the username does not exist
-#, fuzzy
-msgid "Username does not exist"
-msgstr "用户不存在"
-
 #. indicates a lock of some description
 #, fuzzy
 msgid ""
@@ -10124,35 +10062,41 @@
 msgid "Unknown."
 msgstr "未知。"
 
-#, c-format
+#, fuzzy, c-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "%d 秒"
-
-#, c-format
+msgstr[1] "%d 秒"
+
+#, fuzzy, c-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "%d 天"
-
-#, c-format
+msgstr[1] "%d 天"
+
+#, fuzzy, c-format
 msgid "%s, %d hour"
 msgid_plural "%s, %d hours"
 msgstr[0] "%s %d 小时"
-
-#, c-format
+msgstr[1] "%s %d 小时"
+
+#, fuzzy, c-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "%d 小时"
-
-#, c-format
+msgstr[1] "%d 小时"
+
+#, fuzzy, c-format
 msgid "%s, %d minute"
 msgid_plural "%s, %d minutes"
 msgstr[0] "%s %d 分"
-
-#, c-format
+msgstr[1] "%s %d 分"
+
+#, fuzzy, c-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "%d 分"
+msgstr[1] "%d 分"
 
 #, c-format
 msgid "Could not open %s: Redirected too many times"
@@ -10273,7 +10217,7 @@
 
 #. Buddy icon
 msgid "Use this buddy _icon for this account:"
-msgstr "此账户使用此好友图标(_I):"
+msgstr "用作当前账户头像(_I):"
 
 msgid "_Advanced"
 msgstr "高级(_A)"
@@ -10370,11 +10314,12 @@
 "如果您想要回到此窗口以便添加、编辑或删除帐户,可以从好友列表中窗口中选择<b>帐"
 "户->添加/编辑</b>"
 
-#, c-format
+#, fuzzy, c-format
 msgid "You have %d contact named %s. Would you like to merge them?"
 msgid_plural ""
 "You currently have %d contacts named %s. Would you like to merge them?"
 msgstr[0] "您已经有名为 %2$s 的 %1$d 位联系人。您是否想要合并?"
+msgstr[1] "您已经有名为 %2$s 的 %1$d 位联系人。您是否想要合并?"
 
 msgid ""
 "Merging these contacts will cause them to share a single entry on the buddy "
@@ -10384,11 +10329,9 @@
 "合并联系人将会使得这些联系人在好友列表中只显示单一的一项,并且使用单一的对话"
 "窗口。如果您想再解散合并后的联系人,可以从联系人的快捷菜单中选择“展开”"
 
-#, fuzzy
 msgid "Please update the necessary fields."
 msgstr "请更新必要的字段。"
 
-#, fuzzy
 msgid "A_ccount"
 msgstr "账户(_C):"
 
@@ -10687,10 +10630,11 @@
 msgid "/Tools/Room List"
 msgstr "/工具(T)/房间列表(O)"
 
-#, c-format
+#, fuzzy, c-format
 msgid "%d unread message from %s\n"
 msgid_plural "%d unread messages from %s\n"
 msgstr[0] "来自 %2$s 的 %1$d 条未读消息\n"
+msgstr[1] "来自 %2$s 的 %1$d 条未读消息\n"
 
 msgid "Manually"
 msgstr "手动"
@@ -10949,6 +10893,10 @@
 msgid "The text information for a buddy's status"
 msgstr "更改 %s 的用户信息"
 
+#, fuzzy
+msgid "Type the host name for this certificate."
+msgstr "输入此证书所适用的主机名。"
+
 #. Widget creation function
 msgid "SSL Servers"
 msgstr "SSL 服务器"
@@ -11206,10 +11154,11 @@
 msgid "0 people in room"
 msgstr "聊天室里没有人"
 
-#, c-format
+#, fuzzy, c-format
 msgid "%d person in room"
 msgid_plural "%d people in room"
 msgstr[0] "聊天室里有 %d 个人"
+msgstr[1] "聊天室里有 %d 个人"
 
 msgid "Typing"
 msgstr "正打字"
@@ -11691,7 +11640,7 @@
 msgid "Enter an alias for this chat."
 msgstr "请输入此聊天的别名。"
 
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "You are about to remove the contact containing %s and %d other buddy from "
 "your buddy list.  Do you want to continue?"
@@ -11701,6 +11650,9 @@
 msgstr[0] ""
 "您即将从您的好友列表中删除包含 %s 及 %d 个其它好友的联系人。您真的要这么做"
 "吗?"
+msgstr[1] ""
+"您即将从您的好友列表中删除包含 %s 及 %d 个其它好友的联系人。您真的要这么做"
+"吗?"
 
 msgid "Remove Contact"
 msgstr "删除联系人"
@@ -11884,7 +11836,7 @@
 msgstr "超级链接颜色"
 
 #, fuzzy
-msgid "Color to draw hyperlinks after it has been visited (or activated)."
+msgid "Color to draw hyperlink after it has been visited (or activated)."
 msgstr "绘制超级链接悬停时的颜色。"
 
 msgid "Hyperlink prelight color"
@@ -11922,15 +11874,22 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr ""
 
+msgid "Color to draw the name of a whispered action message."
+msgstr ""
+
 msgid "Whisper Message Name Color"
 msgstr ""
 
+msgid "Color to draw the name of a whispered message."
+msgstr ""
+
 #, fuzzy
 msgid "Typing notification color"
 msgstr "通知删除"
 
-msgid "The color to use for the typing notification font"
-msgstr ""
+#, fuzzy
+msgid "The color to use for the typing notification"
+msgstr "新邮件通知"
 
 #, fuzzy
 msgid "Typing notification font"
@@ -12275,15 +12234,17 @@
 msgid "%s wishes to start a video session with you."
 msgstr ""
 
-#, c-format
+#, fuzzy, c-format
 msgid "%s has %d new message."
 msgid_plural "%s has %d new messages."
 msgstr[0] "%s 有 %d 封新邮件。"
-
-#, c-format
+msgstr[1] "%s 有 %d 封新邮件。"
+
+#, fuzzy, c-format
 msgid "<b>%d new email.</b>"
 msgid_plural "<b>%d new emails.</b>"
 msgstr[0] "<b>%d 封新邮件。</b>"
+msgstr[1] "<b>%d 封新邮件。</b>"
 
 #, c-format
 msgid "The browser command \"%s\" is invalid."
@@ -12300,6 +12261,10 @@
 "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr "选择了“手动”浏览器命令,但未设置命令。"
 
+#, fuzzy
+msgid "No message"
+msgstr "未知信息"
+
 msgid "Open All Messages"
 msgstr "打开全部消息"
 
@@ -12317,10 +12282,6 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">您有新邮件了!</span>"
 
-#, fuzzy
-msgid "No message"
-msgstr "未知信息"
-
 msgid "The following plugins will be unloaded."
 msgstr "下列插件将会被卸载。"
 
@@ -12642,7 +12603,8 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">例:stunserver.org</span>"
 
-msgid "_Autodetect IP address"
+#, fuzzy, c-format
+msgid "Use _automatically detected IP address: %s"
 msgstr "自动检测 IP 地址(_A)"
 
 msgid "Public _IP:"
@@ -12822,31 +12784,26 @@
 "声音命令(_O):\n"
 "(%s 代表文件名)"
 
-#, fuzzy
 msgid "M_ute sounds"
-msgstr "静音"
+msgstr "静音(_U)"
 
 msgid "Sounds when conversation has _focus"
 msgstr "对话获得焦点后发声(_F)"
 
-#, fuzzy
 msgid "_Enable sounds:"
-msgstr "启用声音:"
-
-#, fuzzy
+msgstr "开启声音(_E):"
+
 msgid "V_olume:"
-msgstr "音量:"
+msgstr "音量(_O):"
 
 msgid "Play"
 msgstr "播放"
 
-#, fuzzy
 msgid "_Browse..."
-msgstr "浏览(_E)..."
-
-#, fuzzy
+msgstr "浏览(_B)..."
+
 msgid "_Reset"
-msgstr "重置"
+msgstr "重置(_R)"
 
 msgid "_Report idle time:"
 msgstr "报告发呆时间(_R):"
@@ -12920,9 +12877,8 @@
 msgstr "设置隐私的账户:"
 
 #. Remove All button
-#, fuzzy
 msgid "Remove Al_l"
-msgstr "删除"
+msgstr "全部删除(_L)"
 
 msgid "Permit User"
 msgstr "允许用户"
@@ -13018,46 +12974,26 @@
 msgid "Status for %s"
 msgstr "%s 的状态"
 
-#.
-#. * TODO: We should enable/disable the add button based on
-#. *       whether the user has entered all required data.  That
-#. *       would eliminate the need for this check and provide a
-#. *       better user experience.
-#.
-#, fuzzy
-msgid "Custom Smiley"
-msgstr "插入表情"
-
-msgid "More Data needed"
-msgstr ""
-
-msgid "Please provide a shortcut to associate with the smiley."
-msgstr ""
-
 #, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
 msgstr ""
 
+msgid "Custom Smiley"
+msgstr "自定义表情"
+
 #, fuzzy
 msgid "Duplicate Shortcut"
 msgstr "重复更正"
 
-#, fuzzy
-msgid "Please select an image for the smiley."
-msgstr "请输入 %s 的新名称"
-
-#, fuzzy
 msgid "Edit Smiley"
-msgstr "插入表情"
-
-#, fuzzy
+msgstr "修改表情"
+
 msgid "Add Smiley"
-msgstr "表情"
-
-#, fuzzy
+msgstr "添加表情"
+
 msgid "_Image:"
-msgstr "图像(_I)"
+msgstr "图像(_I):"
 
 #. Shortcut text
 #, fuzzy
@@ -13079,22 +13015,18 @@
 msgid "Select Buddy Icon"
 msgstr "选择好友"
 
-#, fuzzy
 msgid "Click to change your buddyicon for this account."
-msgstr "此账户使用此好友图标(_I):"
-
-#, fuzzy
+msgstr "点此修改当前账户所用图标。"
+
 msgid "Click to change your buddyicon for all accounts."
-msgstr "此账户使用此好友图标(_I):"
+msgstr "点此修改所有账户所用图标。"
 
 msgid "Waiting for network connection"
 msgstr "正在等待网络连接"
 
-#, fuzzy
 msgid "New status..."
-msgstr "新消息..."
-
-#, fuzzy
+msgstr "新状态..."
+
 msgid "Saved statuses..."
 msgstr "已存状态"
 
@@ -13132,7 +13064,7 @@
 "您可以通过文件传送发送此图像,将其嵌入到此消息中,或者将其用作此用户的头像。"
 
 msgid "Set as buddy icon"
-msgstr "设置为好友头像"
+msgstr "设置为用户头像"
 
 msgid "Send image file"
 msgstr "发送图像文件"
@@ -13146,12 +13078,12 @@
 msgid ""
 "You can send this image as a file transfer, or use it as the buddy icon for "
 "this user."
-msgstr "您可以通过文件传送发送此图像,或者将其用作此用户的头像。"
+msgstr "您可以通过文件传送发送该图片,或者将其用作此用户的头像。"
 
 msgid ""
 "You can insert this image into this message, or use it as the buddy icon for "
 "this user"
-msgstr "您可以通过文件传送发送此图像,或者将其用作此用户的头像。"
+msgstr "您可以在消息中插入该图片,或者将其用作此用户的头像。"
 
 #. I don't know if we really want to do anything here.  Most of the desktop item types are crap like
 #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really
@@ -13161,9 +13093,10 @@
 msgid "Cannot send launcher"
 msgstr "无法发送启动器"
 
-msgid ""
-"You dragged a desktop launcher. Most likely you wanted to send whatever this "
-"launcher points to instead of this launcher itself."
+#, fuzzy
+msgid ""
+"You dragged a desktop launcher. Most likely you wanted to send the target of "
+"this launcher instead of this launcher itself."
 msgstr ""
 "您拖曳的是桌面启动器。在大多数情况下,您可能想要发送此启动器所指向的文件,而"
 "非启动器自身。"
@@ -13199,7 +13132,7 @@
 
 #, fuzzy
 msgid "_Open Link"
-msgstr "打开链接的方式(_O):"
+msgstr "打开链接(_O):"
 
 msgid "_Copy Link Location"
 msgstr "复制链接地址(_C)"
@@ -13225,24 +13158,20 @@
 msgid "_Invite"
 msgstr "邀请(_I)"
 
-#, fuzzy
 msgid "_Modify..."
-msgstr "修改(_M)"
-
-#, fuzzy
+msgstr "修改(_M)..."
+
 msgid "_Add..."
-msgstr "添加(_A)"
+msgstr "添加(_A)..."
 
 msgid "_Open Mail"
 msgstr "打开邮件(_O)"
 
-#, fuzzy
 msgid "_Edit"
-msgstr "编辑"
-
-#, fuzzy
+msgstr "编辑(_E)"
+
 msgid "Pidgin Tooltip"
-msgstr "Pidgin"
+msgstr "Pidgin 工具提示"
 
 msgid "Pidgin smileys"
 msgstr "Pidgin 表情"
@@ -13256,9 +13185,8 @@
 msgid "none"
 msgstr "无"
 
-#, fuzzy
 msgid "Small"
-msgstr "电子邮件"
+msgstr "小"
 
 msgid "Smaller versions of the default smilies"
 msgstr ""
@@ -13528,7 +13456,6 @@
 msgstr "提供鼠标手势的支持"
 
 #. *  description
-#, fuzzy
 msgid ""
 "Allows support for mouse gestures in conversation windows. Drag the middle "
 "mouse button to perform certain actions:\n"
@@ -13539,9 +13466,9 @@
 "允许在对话窗口中支持鼠标手势。\n"
 "拖曳鼠标中键可执行特定操作:\n"
 "\n"
-"向下再向右可关闭对话。\n"
-"向上再向左可切换到上个对话。\n"
-"向上再向右可切换到下个对话。"
+"·向下再向右可关闭对话。\n"
+"·向上再向左可切换到上个对话。\n"
+"·向上再向右可切换到下个对话。"
 
 msgid "Instant Messaging"
 msgstr "即时通讯"
@@ -13617,7 +13544,6 @@
 msgid "Please enter the person's information below."
 msgstr "请在下面输入联系人的信息。"
 
-#, fuzzy
 msgid "Please enter the buddy's username and account type below."
 msgstr "请在下面输入好友的用户名和账户类型。"
 
@@ -13653,11 +13579,13 @@
 msgid "Test to see that all ui signals are working properly."
 msgstr "测试看看所有的 UI 信号是否都工作正确。"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "\n"
 "<b>Buddy Note</b>: %s"
-msgstr "好友备注"
+msgstr ""
+"\n"
+"<b>好友备注</b>: %s"
 
 msgid "History"
 msgstr "历史"
@@ -13687,20 +13615,17 @@
 msgid "Adds a small box to the buddy list that shows if you have new mail."
 msgstr "在好友列表旁显示一个小方块,标明您是否有新邮件。"
 
-#, fuzzy
 msgid "Markerline"
-msgstr "下划线"
-
-#, fuzzy
+msgstr "分割线"
+
 msgid "Draw a line to indicate new messages in a conversation."
-msgstr "对话时显示通知消息"
-
-#, fuzzy
+msgstr "在对话中以分割线突出显示新消息。"
+
 msgid "Jump to markerline"
-msgstr "下划线"
+msgstr "跳至分割线"
 
 msgid "Draw Markerline in "
-msgstr ""
+msgstr "分割线使用在"
 
 msgid "_IM windows"
 msgstr "即时消息窗口(_I)"
@@ -13750,18 +13675,18 @@
 msgstr "合作作曲的音乐信使插件。"
 
 #. *  summary
+#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
-"on a piece of music by editting a common score in real-time."
+"on a piece of music by editing a common score in real-time."
 msgstr "音乐信使插件允许多个用户同时在同一份曲谱上工作。"
 
 #. ---------- "Notify For" ----------
 msgid "Notify For"
 msgstr "提醒"
 
-#, fuzzy
 msgid "\t_Only when someone says your username"
-msgstr "\t仅当别人在聊天中提到您的名字(_O)"
+msgstr "\t仅当别人提到您的名字时(_O)"
 
 msgid "_Focused windows"
 msgstr "聚焦窗口(_F)"
@@ -13785,18 +13710,16 @@
 msgid "Set window manager \"_URGENT\" hint"
 msgstr "设置窗口管理器“紧急”提示(_U)"
 
-#, fuzzy
 msgid "_Flash window"
-msgstr "聊天窗口(_H)"
+msgstr "闪烁窗口(_F)"
 
 #. Raise window method button
 msgid "R_aise conversation window"
 msgstr "升起对话窗口(_A)"
 
 #. Present conversation method button
-#, fuzzy
 msgid "_Present conversation window"
-msgstr "升起对话窗口(_A)"
+msgstr "当前对话窗口(_P)"
 
 #. ---------- "Notification Removals" ----------
 msgid "Notification Removal"
@@ -13868,9 +13791,8 @@
 msgid "Hyperlink Color"
 msgstr "超级链接颜色"
 
-#, fuzzy
 msgid "Visited Hyperlink Color"
-msgstr "超级链接颜色"
+msgstr "访问过的超级链接颜色"
 
 #, fuzzy
 msgid "Highlighted Message Name Color"
@@ -13963,13 +13885,11 @@
 msgid "New Version Available"
 msgstr "新版本可用"
 
-#, fuzzy
 msgid "Later"
-msgstr "日期"
-
-#, fuzzy
+msgstr "稍后"
+
 msgid "Download Now"
-msgstr "%s 上的用户数: %s"
+msgstr "立即下载"
 
 #. *< type
 #. *< ui_requirement
@@ -14000,21 +13920,20 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#, fuzzy
 msgid "Send Button"
-msgstr "发送到"
+msgstr "发送按钮"
 
 #. *< name
 #. *< version
-#, fuzzy
 msgid "Conversation Window Send Button."
-msgstr "对话窗口隐藏"
+msgstr "对话窗口的发送按钮"
 
 #. *< summary
+#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
-"for when no physical keyboard is present."
-msgstr ""
+"for use when no physical keyboard is present."
+msgstr "在对话窗口的输入栏添加一个发送按钮,适用于非键盘输入。"
 
 msgid "Duplicate Correction"
 msgstr "重复更正"
@@ -14336,8 +14255,9 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "Pidgin for Windows 特定的选项。"
 
-msgid ""
-"Provides options specific to Pidgin for Windows , such as buddy list docking."
+#, fuzzy
+msgid ""
+"Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr "提供 Pidgin for Windows 特定的选项,比如好友列表停靠。"
 
 msgid "<font color='#777777'>Logged out.</font>"
@@ -14380,6 +14300,9 @@
 #~ msgid "Activate which ID?"
 #~ msgstr "激活哪个 ID?"
 
+#~ msgid "Please select an image for the smiley."
+#~ msgstr "请给这个表情选择一个图片"
+
 #~ msgid "Cursor Color"
 #~ msgstr "光标颜色"