changeset 28311:1f329bdc91ab

propagate from branch 'im.pidgin.pidgin' (head 566ce451dc4c5c20f90b1d1f53b83a85aae04c34) to branch 'im.pidgin.cpw.darkrain42.2.6.1' (head beade7ac68d86ade412871d5d4aeb805b3952afb)
author Paul Aurich <paul@darkrain42.org>
date Sat, 18 Jul 2009 07:26:04 +0000
parents f95bcb5eb047 (diff) a7eac81575e7 (current diff)
children d5e2dbce5864
files libpurple/protocols/oscar/oscar.c
diffstat 46 files changed, 2449 insertions(+), 1939 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Jul 18 04:31:38 2009 +0000
+++ b/ChangeLog	Sat Jul 18 07:26:04 2009 +0000
@@ -7,7 +7,7 @@
 	* Voice & Video framework in libpurple, thanks to Mike Ruprecht's summer
 	  of code project in 2008.
 	* It should no longer be possible to end up with duplicates of buddies
-	  in a group on the buddy list. (Paul Aurich)
+	  in a group on the buddy list.
 	* Removed the unmaintained and unneeded toc protocol plugin.
 	* Fixed NTLM authentication on big-endian systems.
 	* Various memory cleanups when unloading libpurple. (Nick Hebner)
@@ -20,10 +20,16 @@
 	  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
+	* 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.
+	* PURPLE_LEAKCHECK_HELP 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 be used to perform various actions that are
+	  useful when running libpurple inside of Valgrind or similar programs.
+	  Currently, it keeps plugins in memory, allowing Valgrind to perform
+	  symbol resolution of leak traces at shutdown.
 	* Add support for receiving handwritten (ink) messages on MSN.
 	* Don't do IPv6 address lookups if the computer does not have an IPv6
 	  address configured.
@@ -35,6 +41,9 @@
 	  from you on MSN.
 	* Support sending an invite message to buddies when requesting authorization
 	  from them on MSN.
+	* Better handling of corrupt certificates in the TLS Peers cache.
+	* More efficient purple_find_buddies() and purple_find_group() functions.
+	  (Jan Kaluza and Aman Gupta)
 
 	AIM and ICQ:
 	* Preliminary support for a new authentication scheme called
@@ -102,6 +111,10 @@
 	  markup if they support it.
 	* Removed support for obsoleted XEP-0022 (Message Events) and XEP-0091
 	  (Legacy Entity Time).
+	* When the GNU IDN library (libidn) is available, it is used for
+	  normalization of Jabber IDs and support for internationalized domain
+	  names (IDNA).  When unavailable, internal routines are used (as in
+	  previous versions) for normalization and IDNA is unavailable.
 
 	Yahoo!/Yahoo! JAPAN:
 	* P2P file transfers.  (Sulabh Mahajan)
@@ -113,6 +126,8 @@
 	* Yahoo! and Yahoo! JAPAN are now two separate protocol plugins that share
 	  common protocol code.  You can now have the same account on both
 	  networks.
+	* Ability to set personal details for an account and for buddies in the
+	  buddylist.
 
 	Pidgin:
 	* Added -f command line option to tell Pidgin to ignore NetworkManager
@@ -148,6 +163,8 @@
 	  (Kosta Arvanitis)
 	* When file transfers are complete, the received file name written to the
 	  conversation window is now linked to the file.
+	* Fix a crash when closing a conversation tab that has unread messages
+	  when the Message Notification plugin is loaded.
 
 	Finch:
 	* The hardware cursor is updated correctly. This will be useful
--- a/ChangeLog.API	Sat Jul 18 04:31:38 2009 +0000
+++ b/ChangeLog.API	Sat Jul 18 07:26:04 2009 +0000
@@ -56,6 +56,7 @@
 		* purple_request_field_get_group
 		* purple_request_field_get_ui_data
 		* purple_request_field_set_ui_data
+		* purple_ssl_connect_with_ssl_cn
 		* purple_strequal
 		* purple_utf8_strip_unprintables
 		* purple_util_fetch_url_request_len_with_account
@@ -79,6 +80,9 @@
 		* Added a client_type field in the get_ui_info core UI op. See
 		  core.h for details.
 		* Added introspection of signals exposed via the D-Bus API.
+		* purple_find_buddies is now more efficient in the case where
+		  it is enumerating all the buddies for an account.
+		* purple_find_group is now more efficient for large numbers of groups.
 
 		Deprecated:
 		* buddy-added and buddy-removed blist signals
--- a/configure.ac	Sat Jul 18 04:31:38 2009 +0000
+++ b/configure.ac	Sat Jul 18 07:26:04 2009 +0000
@@ -604,7 +604,7 @@
 ])
 			fi])
 	fi
-        
+
 
 else # GTK
 	enable_cap=no
@@ -808,6 +808,25 @@
 	fi
 fi
 
+AC_ARG_ENABLE(idn,
+	[AC_HELP_STRING([--disable-idn], [compile without IDN support])],
+	[enable_idn="$enableval" force_idn=$enableval], [enable_idn="yes" force_idn=no])
+if test "x$enable_idn" != "xno"; then
+	PKG_CHECK_MODULES(IDN, libidn >= 0.0.0, [
+		AC_DEFINE(USE_IDN, 1, [Use GNU Libidn for stringprep and IDN])
+		AC_SUBST(IDN_CFLAGS)
+		AC_SUBST(IDN_LIBS)
+	], [
+		AC_MSG_RESULT(no)
+		if test "x$force_deps" = "xyes" ; then
+			AC_MSG_ERROR([
+GNU Libidn development headers not found.
+Use --disable-idn if you do not need it.
+])
+		fi
+	])
+fi
+
 dnl #######################################################################
 dnl # Check for Meanwhile headers (for Sametime)
 dnl #######################################################################
@@ -1984,7 +2003,7 @@
 
 				if test "x$ac_cv_moz_nss_libs" = "xno"; then
 					nsslibs="-lssl3 -lsmime3 -lnss3 -lsoftokn3"
-					LDFLAGS="$LDFLAGS -L$with_nspr_libs -L$with_nss_libs" 
+					LDFLAGS="$LDFLAGS -L$with_nspr_libs -L$with_nss_libs"
 					LIBS="$LIBS $nsslibs"
 					AC_TRY_LINK_FUNC(NSS_Init,
 						[ac_cv_moz_nss_libs="yes"],
@@ -2026,7 +2045,7 @@
 	AC_SUBST(NSS_CFLAGS)
 	AC_SUBST(NSS_LIBS)
 fi
- 
+
 if test "x$enable_nss" = "xyes"; then
 	AC_MSG_CHECKING(for NSS_SetAlgorithmPolicy)
 	LIBS_save="$LIBS"
@@ -2546,6 +2565,7 @@
 if test "x$enable_dbus" = "xyes" ; then
 	eval eval echo D-Bus services directory...... : $DBUS_SERVICES_DIR
 fi
+echo Build with GNU Libidn......... : $enable_idn
 echo Build with NetworkManager..... : $enable_nm
 echo SSL Library/Libraries......... : $msg_ssl
 if test "x$SSL_CERTIFICATES_DIR" != "x" ; then
--- a/finch/gntrequest.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/finch/gntrequest.c	Sat Jul 18 07:26:04 2009 +0000
@@ -317,6 +317,8 @@
 		{
 			PurpleRequestField *field = fields->data;
 			PurpleRequestFieldType type = purple_request_field_get_type(field);
+			if (!purple_request_field_is_visible(field))
+				continue;
 			if (type == PURPLE_REQUEST_FIELD_BOOLEAN)
 			{
 				GntWidget *check = FINCH_GET_DATA(field);
@@ -598,11 +600,13 @@
 
 		for (; fields ; fields = fields->next)
 		{
-			/* XXX: Break each of the fields into a separate function? */
 			PurpleRequestField *field = fields->data;
 			PurpleRequestFieldType type = purple_request_field_get_type(field);
 			const char *label = purple_request_field_get_label(field);
 
+			if (!purple_request_field_is_visible(field))
+				continue;
+
 			hbox = gnt_hbox_new(TRUE);   /* hrm */
 			gnt_box_add_widget(GNT_BOX(box), hbox);
 
--- a/libpurple/blist.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/blist.c	Sat Jul 18 07:26:04 2009 +0000
@@ -48,6 +48,12 @@
  */
 static GHashTable *buddies_cache = NULL;
 
+/**
+ * A hash table used for efficient lookups of groups by name.
+ * UTF-8 collate-key => PurpleGroup*.
+ */
+static GHashTable *groups_cache = NULL;
+
 static guint          save_timer = 0;
 static gboolean       blist_loaded = FALSE;
 
@@ -86,13 +92,15 @@
 /* This function must not use purple_normalize */
 static guint _purple_blist_hbuddy_hash(struct _purple_hbuddy *hb)
 {
-	return g_str_hash(hb->name);
+	return g_str_hash(hb->name) ^ g_direct_hash(hb->group) ^ g_direct_hash(hb->account);
 }
 
 /* This function must not use purple_normalize */
 static guint _purple_blist_hbuddy_equal(struct _purple_hbuddy *hb1, struct _purple_hbuddy *hb2)
 {
-	return (purple_strequal(hb1->name, hb2->name) && hb1->account == hb2->account && hb1->group == hb2->group);
+	return (hb1->group == hb2->group &&
+	        hb1->account == hb2->account &&
+	        g_str_equal(hb1->name, hb2->name));
 }
 
 static void _purple_blist_hbuddy_free_key(struct _purple_hbuddy *hb)
@@ -704,6 +712,10 @@
 	buddies_cache = g_hash_table_new_full(g_direct_hash, g_direct_equal,
 					 NULL, (GDestroyNotify)g_hash_table_destroy);
 
+	groups_cache = g_hash_table_new_full((GHashFunc)g_str_hash,
+					 (GEqualFunc)g_str_equal,
+					 (GDestroyNotify)g_free, NULL);
+
 	for (account = purple_accounts_get_all(); account != NULL; account = account->next)
 	{
 		purple_blist_buddies_cache_add_account(account->data);
@@ -938,15 +950,14 @@
 	g_return_if_fail(buddy != NULL);
 
 	hb = g_new(struct _purple_hbuddy, 1);
-	hb->name = g_strdup(purple_normalize(buddy->account, buddy->name));
+	hb->name = (gchar *)purple_normalize(buddy->account, buddy->name);
 	hb->account = buddy->account;
 	hb->group = ((PurpleBlistNode *)buddy)->parent->parent;
 	g_hash_table_remove(purplebuddylist->buddies, hb);
-	
+
 	account_buddies = g_hash_table_lookup(buddies_cache, buddy->account);
 	g_hash_table_remove(account_buddies, hb);
 
-	g_free(hb->name);
 	hb->name = g_strdup(purple_normalize(buddy->account, name));
 	g_hash_table_replace(purplebuddylist->buddies, hb, buddy);
 
@@ -1203,6 +1214,7 @@
 	} else {
 		/* A simple rename */
 		PurpleBlistNode *cnode, *bnode;
+		gchar* key;
 
 		/* Build a GList of all buddies in this group */
 		for (cnode = ((PurpleBlistNode *)source)->child; cnode != NULL; cnode = cnode->next) {
@@ -1213,6 +1225,13 @@
 
 		old_name = source->name;
 		source->name = new_name;
+
+		key = g_utf8_collate_key(old_name, -1);
+		g_hash_table_remove(groups_cache, key);
+		g_free(key);
+
+		key = g_utf8_collate_key(new_name, -1);
+		g_hash_table_insert(groups_cache, key, source);
 	}
 
 	/* Save our changes */
@@ -1585,17 +1604,14 @@
 		purple_blist_schedule_save();
 
 		if (bnode->parent->parent != (PurpleBlistNode*)g) {
-			hb = g_new(struct _purple_hbuddy, 1);
-			hb->name = g_strdup(purple_normalize(buddy->account, buddy->name));
-			hb->account = buddy->account;
-			hb->group = bnode->parent->parent;
-			g_hash_table_remove(purplebuddylist->buddies, hb);
+			struct _purple_hbuddy hb;
+			hb.name = (gchar *)purple_normalize(buddy->account, buddy->name);
+			hb.account = buddy->account;
+			hb.group = bnode->parent->parent;
+			g_hash_table_remove(purplebuddylist->buddies, &hb);
 
 			account_buddies = g_hash_table_lookup(buddies_cache, buddy->account);
-			g_hash_table_remove(account_buddies, hb);
-
-			g_free(hb->name);
-			g_free(hb);
+			g_hash_table_remove(account_buddies, &hb);
 		}
 
 		if (!bnode->parent->child) {
@@ -1813,7 +1829,7 @@
 				GHashTable *account_buddies;
 
 				struct _purple_hbuddy *hb, *hb2;
-				
+
 				hb = g_new(struct _purple_hbuddy, 1);
 				hb->name = g_strdup(purple_normalize(b->account, b->name));
 				hb->account = b->account;
@@ -1946,6 +1962,7 @@
 {
 	PurpleBlistUiOps *ops;
 	PurpleBlistNode *gnode = (PurpleBlistNode*)group;
+	gchar* key;
 
 	g_return_if_fail(group != NULL);
 	g_return_if_fail(PURPLE_BLIST_NODE_IS_GROUP((PurpleBlistNode *)group));
@@ -1989,6 +2006,9 @@
 		purplebuddylist->root = gnode;
 	}
 
+	key = g_utf8_collate_key(group->name, -1);
+	g_hash_table_insert(groups_cache, key, group);
+
 	purple_blist_schedule_save();
 
 	if (ops && ops->update) {
@@ -2099,7 +2119,7 @@
 	purple_blist_schedule_save();
 
 	/* Remove this buddy from the buddies hash table */
-	hb.name = g_strdup(purple_normalize(buddy->account, buddy->name));
+	hb.name = (gchar *)purple_normalize(buddy->account, buddy->name);
 	hb.account = buddy->account;
 	hb.group = gnode;
 	g_hash_table_remove(purplebuddylist->buddies, &hb);
@@ -2107,8 +2127,6 @@
 	account_buddies = g_hash_table_lookup(buddies_cache, buddy->account);
 	g_hash_table_remove(account_buddies, &hb);
 
-	g_free(hb.name);
-
 	/* Update the UI */
 	if (ops && ops->remove)
 		ops->remove(purplebuddylist, node);
@@ -2174,6 +2192,7 @@
 	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
 	PurpleBlistNode *node;
 	GList *l;
+	gchar* key;
 
 	g_return_if_fail(group != NULL);
 
@@ -2191,6 +2210,10 @@
 	if (node->next)
 		node->next->prev = node->prev;
 
+	key = g_utf8_collate_key(group->name, -1);
+	g_hash_table_remove(groups_cache, key);
+	g_free(key);
+
 	purple_blist_schedule_save();
 
 	/* Update the UI */
@@ -2370,20 +2393,16 @@
 		PurpleGroup *group)
 {
 	struct _purple_hbuddy hb;
-	PurpleBuddy *ret;
 
 	g_return_val_if_fail(purplebuddylist != NULL, NULL);
 	g_return_val_if_fail(account != NULL, NULL);
 	g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
 
-	hb.name = g_strdup(purple_normalize(account, name));
+	hb.name = (gchar *)purple_normalize(account, name);
 	hb.account = account;
 	hb.group = (PurpleBlistNode*)group;
 
-	ret = g_hash_table_lookup(purplebuddylist->buddies, &hb);
-	g_free(hb.name);
-
-	return ret;
+	return g_hash_table_lookup(purplebuddylist->buddies, &hb);
 }
 
 static void find_acct_buddies(gpointer key, gpointer value, gpointer data)
@@ -2406,7 +2425,7 @@
 	if ((name != NULL) && (*name != '\0')) {
 		struct _purple_hbuddy hb;
 
-		hb.name = g_strdup(purple_normalize(account, name));
+		hb.name = (gchar *)purple_normalize(account, name);
 		hb.account = account;
 
 		for (node = purplebuddylist->root; node != NULL; node = node->next) {
@@ -2414,7 +2433,6 @@
 			if ((buddy = g_hash_table_lookup(purplebuddylist->buddies, &hb)) != NULL)
 				ret = g_slist_prepend(ret, buddy);
 		}
-		g_free(hb.name);
 	} else {
 		GSList *list = NULL;
 		GHashTable *buddies = g_hash_table_lookup(buddies_cache, account);
@@ -2427,17 +2445,17 @@
 
 PurpleGroup *purple_find_group(const char *name)
 {
-	PurpleBlistNode *node;
+	gchar* key;
+	PurpleGroup *group;
 
 	g_return_val_if_fail(purplebuddylist != NULL, NULL);
 	g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
 
-	for (node = purplebuddylist->root; node != NULL; node = node->next) {
-		if (!purple_utf8_strcasecmp(((PurpleGroup *)node)->name, name))
-			return (PurpleGroup *)node;
-	}
-
-	return NULL;
+	key = g_utf8_collate_key(name, -1);
+	group = g_hash_table_lookup(groups_cache, key);
+	g_free(key);
+
+	return group;
 }
 
 PurpleChat *
@@ -3117,6 +3135,10 @@
 
 	g_hash_table_destroy(purplebuddylist->buddies);
 	g_hash_table_destroy(buddies_cache);
+	g_hash_table_destroy(groups_cache);
+
+	buddies_cache = NULL;
+	groups_cache = NULL;
 
 	PURPLE_DBUS_UNREGISTER_POINTER(purplebuddylist);
 	g_free(purplebuddylist);
--- a/libpurple/certificate.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/certificate.c	Sat Jul 18 07:26:04 2009 +0000
@@ -1218,20 +1218,6 @@
 }
 
 static void
-x509_tls_cached_peer_cert_changed(PurpleCertificateVerificationRequest *vrq)
-{
-	/* TODO: Prompt the user, etc. */
-
-	purple_debug_info("certificate/x509/tls_cached",
-			  "Certificate for %s does not match cached. "
-			  "Auto-rejecting!\n",
-			  vrq->subject_name);
-
-	purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_INVALID);
-	return;
-}
-
-static void
 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq);
 
 static void
@@ -1254,12 +1240,11 @@
 	cached_crt = purple_certificate_pool_retrieve(
 		tls_peers, vrq->subject_name);
 	if ( !cached_crt ) {
-		purple_debug_error("certificate/x509/tls_cached",
+		purple_debug_warning("certificate/x509/tls_cached",
 				   "Lookup failed on cached certificate!\n"
-				   "It was here just a second ago. Forwarding "
-				   "to cert_changed.\n");
-		/* vrq now becomes the problem of cert_changed */
-		x509_tls_cached_peer_cert_changed(vrq);
+				   "Falling back to full verification.\n");
+		/* vrq now becomes the problem of unknown_peer */
+		x509_tls_cached_unknown_peer(vrq);
 		return;
 	}
 
--- a/libpurple/plugin.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/plugin.c	Sat Jul 18 07:26:04 2009 +0000
@@ -870,8 +870,16 @@
 		if (plugin->info != NULL && plugin->info->destroy != NULL)
 			plugin->info->destroy(plugin);
 
-		if (plugin->handle != NULL)
-			g_module_close(plugin->handle);
+		/*
+		 * I find it extremely useful to do this when using valgrind, as
+		 * it keeps all the plugins open, meaning that valgrind is able to
+		 * resolve symbol names in leak traces from plugins.
+		 */
+		if (!g_getenv("PURPLE_LEAKCHECK_HELP"))
+		{
+			if (plugin->handle != NULL)
+				g_module_close(plugin->handle);
+		}
 	}
 	else
 	{
--- a/libpurple/plugins/ssl/ssl-nss.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/plugins/ssl/ssl-nss.c	Sat Jul 18 07:26:04 2009 +0000
@@ -546,12 +546,12 @@
 	CERTCertificate *crt_dat;
 	PurpleCertificate *crt;
 
-	g_return_val_if_fail(filename, NULL);
+	g_return_val_if_fail(filename != NULL, NULL);
 
 	purple_debug_info("nss/x509",
 			  "Loading certificate from %s\n",
 			  filename);
-	
+
 	/* Load the raw data up */
 	if (!g_file_get_contents(filename,
 				 &rawcert, &len,
@@ -560,12 +560,20 @@
 		return NULL;
 	}
 
+	if (len == 0) {
+		purple_debug_error("nss/x509",
+				"Certificate file has no contents!\n");
+		if (rawcert)
+			g_free(rawcert);
+		return NULL;
+	}
+
 	/* Decode the certificate */
 	crt_dat = CERT_DecodeCertFromPackage(rawcert, len);
 	g_free(rawcert);
 
-	g_return_val_if_fail(crt_dat, NULL);
-	
+	g_return_val_if_fail(crt_dat != NULL, NULL);
+
 	crt = g_new0(PurpleCertificate, 1);
 	crt->scheme = &x509_nss;
 	crt->data = crt_dat;
--- a/libpurple/prefs.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/prefs.h	Sat Jul 18 07:26:04 2009 +0000
@@ -315,6 +315,15 @@
 
 /**
  * Add a callback to a pref (and its children)
+ *
+ * @param handle   The handle of the receiver.
+ * @param name     The name of the preference
+ * @param cb       The callback function
+ * @param data     The data to pass to the callback function.
+ *
+ * @return An id to disconnect the callback
+ *
+ * @see purple_prefs_disconnect_callback
  */
 guint purple_prefs_connect_callback(void *handle, const char *name, PurplePrefCallback cb,
 		gpointer data);
--- a/libpurple/privacy.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/privacy.h	Sat Jul 18 07:26:04 2009 +0000
@@ -29,7 +29,7 @@
 /**
  * Privacy data types.
  */
-typedef enum
+typedef enum _PurplePrivacyType
 {
 	PURPLE_PRIVACY_ALLOW_ALL = 1,
 	PURPLE_PRIVACY_DENY_ALL,
--- a/libpurple/protocols/jabber/Makefile.am	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Sat Jul 18 07:26:04 2009 +0000
@@ -88,7 +88,7 @@
 st =
 pkg_LTLIBRARIES      = libjabber.la libxmpp.la
 libjabber_la_SOURCES = $(JABBERSOURCES)
-libjabber_la_LIBADD  = $(GLIB_LIBS) $(SASL_LIBS) $(LIBXML_LIBS)
+libjabber_la_LIBADD  = $(GLIB_LIBS) $(SASL_LIBS) $(LIBXML_LIBS) $(IDN_LIBS)
 
 libxmpp_la_SOURCES = libxmpp.c
 libxmpp_la_LIBADD = libjabber.la
@@ -100,4 +100,5 @@
 	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
+	$(IDN_CFLAGS) \
 	$(LIBXML_CFLAGS)
--- a/libpurple/protocols/jabber/bosh.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/bosh.c	Sat Jul 18 07:26:04 2009 +0000
@@ -51,8 +51,13 @@
 	PurpleHTTPConnection *connections[MAX_HTTP_CONNECTIONS];
 	unsigned short failed_connections;
 
-	gboolean ready;
+	enum {
+		BOSH_CONN_OFFLINE,
+		BOSH_CONN_BOOTING,
+		BOSH_CONN_ONLINE
+	} state;
 	gboolean ssl;
+	gboolean needs_restart;
 
 	/* decoded URL */
 	char *host;
@@ -84,7 +89,11 @@
 
 	PurpleCircBuffer *write_buffer;
 
-	gboolean ready;
+	enum {
+		HTTP_CONN_OFFLINE,
+		HTTP_CONN_CONNECTING,
+		HTTP_CONN_CONNECTED
+	} state;
 	int requests; /* number of outstanding HTTP requests */
 
 	GString *buf;
@@ -129,7 +138,7 @@
 	PurpleHTTPConnection *conn = g_new0(PurpleHTTPConnection, 1);
 	conn->bosh = bosh;
 	conn->fd = -1;
-	conn->ready = FALSE;
+	conn->state = HTTP_CONN_OFFLINE;
 
 	conn->write_buffer = purple_circ_buffer_new(0 /* default grow size */);
 
@@ -176,6 +185,7 @@
 	conn->path = g_strdup_printf("/%s", path);
 	g_free(path);
 	conn->pipelining = TRUE;
+	conn->needs_restart = FALSE;
 
 	if ((user && user[0] != '\0') || (passwd && passwd[0] != '\0')) {
 		purple_debug_info("jabber", "Ignoring unexpected username and password "
@@ -198,7 +208,7 @@
 
 	conn->pending = purple_circ_buffer_new(0 /* default grow size */);
 
-	conn->ready = FALSE;
+	conn->state = BOSH_CONN_OFFLINE;
 	if (purple_strcasestr(url, "https://") != NULL)
 		conn->ssl = TRUE;
 	else
@@ -243,18 +253,28 @@
 	/* Easy solution: Does everyone involved support pipelining? Hooray! Just use
 	 * one TCP connection! */
 	if (conn->pipelining)
-		return conn->connections[0]->ready ? conn->connections[0] : NULL;
+		return conn->connections[0]->state == HTTP_CONN_CONNECTED ?
+				conn->connections[0] : NULL;
 
 	/* First loop, look for a connection that's ready */
 	for (i = 0; i < MAX_HTTP_CONNECTIONS; ++i) {
-		if (conn->connections[i] && conn->connections[i]->ready &&
-		                            conn->connections[i]->requests == 0)
+		if (conn->connections[i] &&
+				conn->connections[i]->state == HTTP_CONN_CONNECTED &&
+				conn->connections[i]->requests == 0)
 			return conn->connections[i];
 	}
 
-	/* Second loop, look for one that's NULL and create a new connection */
+	/* Second loop, is something currently connecting? If so, just queue up. */
+	for (i = 0; i < MAX_HTTP_CONNECTIONS; ++i) {
+		if (conn->connections[i] &&
+				conn->connections[i]->state == HTTP_CONN_CONNECTING)
+			return NULL;
+	}
+
+	/* Third loop, look for one that's NULL and create a new connection */
 	for (i = 0; i < MAX_HTTP_CONNECTIONS; ++i) {
 		if (!conn->connections[i]) {
+			purple_debug_info("jabber", "bosh: Creating and connecting new httpconn\n");
 			conn->connections[i] = jabber_bosh_http_connection_init(conn);
 
 			http_connection_connect(conn->connections[i]);
@@ -268,7 +288,7 @@
 
 static void
 jabber_bosh_connection_send(PurpleBOSHConnection *conn,
-                            PurpleBOSHPacketType type, const char *data)
+                            const PurpleBOSHPacketType type, const char *data)
 {
 	PurpleHTTPConnection *chosen;
 	GString *packet = NULL;
@@ -277,12 +297,12 @@
 
 	if (type != PACKET_NORMAL && !chosen) {
 		/*
-		 * For non-ordinary traffic, we don't want to 'buffer' it, so use the
+		 * For non-ordinary traffic, we can't 'buffer' it, so use the
 		 * first connection.
 		 */
 		chosen = conn->connections[0];
 
-		if (!chosen->ready) {
+		if (chosen->state != HTTP_CONN_CONNECTED) {
 			purple_debug_info("jabber", "Unable to find a ready BOSH "
 					"connection. Ignoring send of type 0x%02x.\n", type);
 			return;
@@ -300,6 +320,7 @@
 			int len = data ? strlen(data) : 0;
 			purple_circ_buffer_append(conn->pending, data, len);
 		}
+
 		return;
 	}
 
@@ -316,9 +337,11 @@
 	                conn->sid,
 	                conn->js->user->domain);
 
-	if (type == PACKET_STREAM_RESTART)
+	if (type == PACKET_STREAM_RESTART) {
 		packet = g_string_append(packet, " xmpp:restart='true'/>");
-	else {
+		/* TODO: Do we need to wait for a response? */
+		conn->needs_restart = FALSE;
+	} else {
 		gsize read_amt;
 		if (type == PACKET_TERMINATE)
 			packet = g_string_append(packet, " type='terminate'");
@@ -343,7 +366,9 @@
 	jabber_bosh_connection_send(conn, PACKET_TERMINATE, NULL);
 }
 
-static void jabber_bosh_connection_stream_restart(PurpleBOSHConnection *conn) {
+static void jabber_bosh_connection_stream_restart(PurpleBOSHConnection *conn)
+{
+	conn->needs_restart = TRUE;
 	jabber_bosh_connection_send(conn, PACKET_STREAM_RESTART, NULL);
 }
 
@@ -353,7 +378,7 @@
 	type = xmlnode_get_attrib(node, "type");
 
 	if (type != NULL && !strcmp(type, "terminate")) {
-		conn->ready = FALSE;
+		conn->state = BOSH_CONN_OFFLINE;
 		purple_connection_error_reason(conn->js->gc,
 			PURPLE_CONNECTION_ERROR_OTHER_ERROR,
 			_("The BOSH connection manager terminated your session."));
@@ -384,11 +409,6 @@
 		/* jabber_process_packet might free child */
 		xmlnode *next = child->next;
 		if (child->type == XMLNODE_TYPE_TAG) {
-			if (!strcmp(child->name, "iq")) {
-				if (xmlnode_get_child(child, "session"))
-					conn->ready = TRUE;
-			}
-
 			jabber_process_packet(js, &child);
 		}
 
@@ -476,9 +496,13 @@
 			conn->max_inactivity = 0;
 		} else {
 			/* TODO: Integrate this with jabber.c keepalive checks... */
-			conn->inactivity_timer = purple_timeout_add_seconds(
-					conn->max_inactivity - 2 /* rounding */, bosh_inactivity_cb,
-					conn);
+			if (conn->inactivity_timer == 0) {
+				purple_debug_misc("jabber", "Starting BOSH inactivity timer for %d secs (compensating for rounding)\n",
+						conn->max_inactivity - 5);
+				conn->inactivity_timer = purple_timeout_add_seconds(
+						conn->max_inactivity - 5 /* rounding */,
+						bosh_inactivity_cb, conn);
+			}
 		}
 	}
 
@@ -487,6 +511,7 @@
 
 	/* FIXME: Depending on receiving features might break with some hosts */
 	packet = xmlnode_get_child(node, "features");
+	conn->state = BOSH_CONN_ONLINE;
 	conn->js->use_bosh = TRUE;
 	conn->receive_cb = auth_response_cb;
 	jabber_stream_features_parse(conn->js, packet);
@@ -511,6 +536,8 @@
 	                conn->js->user->domain,
 	                ++conn->rid);
 
+	purple_debug_misc("jabber", "SendBOSH Boot %s(%" G_GSIZE_FORMAT "): %s\n",
+	                  conn->ssl ? "(ssl)" : "", buf->len, buf->str);
 	conn->receive_cb = boot_response_cb;
 	http_connection_send_request(conn->connections[0], buf);
 	g_string_free(buf, TRUE);
@@ -550,7 +577,7 @@
 connection_common_established_cb(PurpleHTTPConnection *conn)
 {
 	/* Indicate we're ready and reset some variables */
-	conn->ready = TRUE;
+	conn->state = HTTP_CONN_CONNECTED;
 	conn->requests = 0;
 	if (conn->buf) {
 		g_string_free(conn->buf, TRUE);
@@ -559,9 +586,11 @@
 	conn->headers_done = FALSE;
 	conn->handled_len = conn->body_len = 0;
 
-	if (conn->bosh->ready) {
+	if (conn->bosh->needs_restart)
+		jabber_bosh_connection_stream_restart(conn->bosh);
+	else if (conn->bosh->state == BOSH_CONN_ONLINE) {
 		purple_debug_info("jabber", "BOSH session already exists. Trying to reuse it.\n");
-		if (conn->bosh->pending->bufused > 0) {
+		if (conn->bosh->requests == 0 || conn->bosh->pending->bufused > 0) {
 			/* Send the pending data */
 			jabber_bosh_connection_send(conn->bosh, PACKET_NORMAL, NULL);
 		}
@@ -585,7 +614,7 @@
 	 * Well, then. Fine! I never liked you anyway, server! I was cheating on you
 	 * with AIM!
 	 */
-	conn->ready = FALSE;
+	conn->state = HTTP_CONN_OFFLINE;
 	if (conn->psc) {
 		purple_ssl_close(conn->psc);
 		conn->psc = NULL;
@@ -620,6 +649,10 @@
 
 void jabber_bosh_connection_connect(PurpleBOSHConnection *bosh) {
 	PurpleHTTPConnection *conn = bosh->connections[0];
+
+	g_return_if_fail(bosh->state == BOSH_CONN_OFFLINE);
+	bosh->state = BOSH_CONN_BOOTING;
+
 	http_connection_connect(conn);
 }
 
@@ -679,10 +712,10 @@
 	http_received_cb(conn->buf->str + conn->handled_len, conn->body_len,
 	                 conn->bosh);
 
-	if (conn->bosh->ready &&
+	if (conn->bosh->state == BOSH_CONN_ONLINE &&
 			(conn->bosh->requests == 0 || conn->bosh->pending->bufused > 0)) {
+		purple_debug_misc("jabber", "BOSH: Sending an empty request\n");
 		jabber_bosh_connection_send(conn->bosh, PACKET_NORMAL, NULL);
-		purple_debug_misc("jabber", "BOSH: Sending an empty request\n");
 	}
 
 	g_string_free(conn->buf, TRUE);
@@ -802,6 +835,8 @@
 	PurpleConnection *gc = bosh->js->gc;
 	PurpleAccount *account = purple_connection_get_account(gc);
 
+	conn->state = HTTP_CONN_CONNECTING;
+
 	if (bosh->ssl) {
 		if (purple_ssl_is_supported()) {
 			conn->psc = purple_ssl_connect(account, bosh->host, bosh->port,
--- a/libpurple/protocols/jabber/buddy.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sat Jul 18 07:26:04 2009 +0000
@@ -702,7 +702,7 @@
 		const char *status_name = jabber_buddy_state_get_name(jbr->state);
 
 		if (jbr->status) {
-			purdy = g_markup_escape_text(jbr->status, -1);
+			purdy = purple_strdup_withhtml(jbr->status);
 
 			if (purple_strequal(status_name, purdy))
 				status_name = NULL;
--- a/libpurple/protocols/jabber/jabber.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat Jul 18 07:26:04 2009 +0000
@@ -701,14 +701,17 @@
 }
 
 static gboolean jabber_login_connect(JabberStream *js, const char *domain, const char *host, int port,
-				 gboolean fatal_failure)
+				 gboolean fatal_failure, gboolean use_domain)
 {
 	/* host should be used in preference to domain to
 	 * allow SASL authentication to work with FQDN of the server,
 	 * but we use domain as fallback for when users enter IP address
-	 * in connect server */
+	 * in connect server.
+	 * We also want to use the domain if the hostname is the result of the
+	 * IDNA ToASCII operation.
+	 */
 	g_free(js->serverFQDN);
-	if (purple_ip_address_is_valid(host))
+	if (use_domain || purple_ip_address_is_valid(host))
 		js->serverFQDN = g_strdup(domain);
 	else
 		js->serverFQDN = g_strdup(host);
@@ -729,18 +732,23 @@
 
 static void try_srv_connect(JabberStream *js)
 {
+	char *ascii_domain;
+
 	while (js->srv_rec != NULL && js->srv_rec_idx < js->max_srv_rec_idx) {
 		PurpleSrvResponse *tmp_resp = js->srv_rec + (js->srv_rec_idx++);
-		if (jabber_login_connect(js, tmp_resp->hostname, tmp_resp->hostname, tmp_resp->port, FALSE))
+		if (jabber_login_connect(js, tmp_resp->hostname, tmp_resp->hostname, tmp_resp->port, FALSE, FALSE))
 			return;
 	}
 
 	g_free(js->srv_rec);
 	js->srv_rec = NULL;
 
+	ascii_domain = jabber_try_idna_to_ascii(js->user->domain);
 	/* Fall back to the defaults (I'm not sure if we should actually do this) */
-	jabber_login_connect(js, js->user->domain, js->user->domain,
-		purple_account_get_int(js->gc->account, "port", 5222), TRUE);
+	jabber_login_connect(js, js->user->domain, ascii_domain,
+			purple_account_get_int(js->gc->account, "port", 5222),
+			TRUE, TRUE);
+	g_free(ascii_domain);
 }
 
 static void srv_resolved_cb(PurpleSrvResponse *resp, int results, gpointer data)
@@ -754,36 +762,71 @@
 		js->max_srv_rec_idx = results;
 		try_srv_connect(js);
 	} else {
-		jabber_login_connect(js, js->user->domain, js->user->domain,
-			purple_account_get_int(js->gc->account, "port", 5222), TRUE);
+		char *ascii_domain = jabber_try_idna_to_ascii(js->user->domain);
+		jabber_login_connect(js, js->user->domain, ascii_domain,
+				purple_account_get_int(js->gc->account, "port", 5222),
+				TRUE, TRUE);
+		g_free(ascii_domain);
 	}
 }
 
-void
-jabber_login(PurpleAccount *account)
+static JabberStream *
+jabber_stream_new(PurpleAccount *account)
 {
 	PurpleConnection *gc = purple_account_get_connection(account);
-	const char *connect_server = purple_account_get_string(account,
-			"connect_server", "");
-	const char *bosh_url = purple_account_get_string(account,
-			"bosh_url", "");
 	JabberStream *js;
+	JabberBuddy *my_jb;
 	PurplePresence *presence;
-	PurpleStoredImage *image;
-	JabberBuddy *my_jb = NULL;
-
-	gc->flags |= PURPLE_CONNECTION_HTML |
-		PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY;
+	gchar *user;
+	gchar *slash;
+
 	js = gc->proto_data = g_new0(JabberStream, 1);
 	js->gc = gc;
 	js->fd = -1;
-	js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
-			g_free, g_free);
+
+	user = g_strdup(purple_account_get_username(account));
+	/* jabber_id_new doesn't accept "user@domain/" as valid */
+	slash = strchr(user, '/');
+	if (slash && *(slash + 1) == '\0')
+		*slash = '\0';
+	js->user = jabber_id_new(user);
+
+	if (!js->user) {
+		purple_connection_error_reason(gc,
+			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
+			_("Invalid XMPP ID"));
+		/* Destroying the connection will free the JabberStream */
+		return NULL;
+	}
+
+	if (!js->user->domain || *(js->user->domain) == '\0') {
+		purple_connection_error_reason(gc,
+			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
+			_("Invalid XMPP ID. Domain must be set."));
+		/* Destroying the connection will free the JabberStream */
+		return NULL;
+	}
+
 	js->buddies = g_hash_table_new_full(g_str_hash, g_str_equal,
 			g_free, (GDestroyNotify)jabber_buddy_free);
+
+	my_jb = jabber_buddy_find(js, user, TRUE);
+	g_free(user);
+	if (!my_jb) {
+		/* This basically *can't* fail, but for good measure... */
+		purple_connection_error_reason(gc,
+			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
+			_("Invalid XMPP ID"));
+		/* Destroying the connection will free the JabberStream */
+		g_return_val_if_reached(NULL);
+	}
+
+	my_jb->subscription |= JABBER_SUB_BOTH;
+
+	js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
+			g_free, g_free);
 	js->chats = g_hash_table_new_full(g_str_hash, g_str_equal,
 			g_free, (GDestroyNotify)jabber_chat_free);
-	js->user = jabber_id_new(purple_account_get_username(account));
 	js->next_id = g_random_int();
 	js->write_buffer = purple_circ_buffer_new(512);
 	js->old_length = 0;
@@ -802,37 +845,22 @@
 	if (purple_presence_is_idle(presence))
 		js->idle = purple_presence_get_idle_time(presence);
 
-	if(!js->user) {
-		purple_connection_error_reason(gc,
-			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
-			_("Invalid XMPP ID"));
-		return;
-	}
-
-	if (!js->user->domain || *(js->user->domain) == '\0') {
-		purple_connection_error_reason(gc,
-			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
-			_("Invalid XMPP ID. Domain must be set."));
-		return;
-	}
-
-	/*
-	 * Calculate the avatar hash for our current image so we know (when we
-	 * fetch our vCard and PEP avatar) if we should send our avatar to the
-	 * server.
-	 */
-	if ((image = purple_buddy_icons_find_account_icon(account))) {
-		js->initial_avatar_hash = jabber_calculate_data_sha1sum(purple_imgstore_get_data(image),
-					purple_imgstore_get_size(image));
-		purple_imgstore_unref(image);
-	}
-
-	if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE)))
-		my_jb->subscription |= JABBER_SUB_BOTH;
+	return js;
+}
+
+static void
+jabber_stream_connect(JabberStream *js)
+{
+	PurpleConnection *gc = js->gc;
+	PurpleAccount *account = purple_connection_get_account(gc);
+	const char *connect_server = purple_account_get_string(account,
+			"connect_server", "");
+	const char *bosh_url = purple_account_get_string(account,
+			"bosh_url", "");
+	char *ascii_domain;
 
 	jabber_stream_set_state(js, JABBER_STREAM_CONNECTING);
 
-	/* TODO: Just use purple_url_parse? */
 	/* If both BOSH and a Connect Server are specified, we prefer BOSH. I'm not
 	 * attached to that choice, though.
 	 */
@@ -842,7 +870,7 @@
 		if (js->bosh)
 			jabber_bosh_connection_connect(js->bosh);
 		else {
-			purple_connection_error_reason(js->gc,
+			purple_connection_error_reason(gc,
 				PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
 				_("Malformed BOSH URL"));
 		}
@@ -852,35 +880,79 @@
 
 	js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user->domain);
 
+	ascii_domain = jabber_try_idna_to_ascii(js->certificate_CN);
+	if (ascii_domain == NULL) {
+		/* TODO: Change this for 2.6.1 */
+		purple_connection_error_reason(gc,
+				PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
+				_("Invalid XMPP ID"));
+		return;
+	}
+
 	/* if they've got old-ssl mode going, we probably want to ignore SRV lookups */
-	if(purple_account_get_bool(js->gc->account, "old_ssl", FALSE)) {
+	if(purple_account_get_bool(account, "old_ssl", FALSE)) {
 		if(purple_ssl_is_supported()) {
-			js->gsc = purple_ssl_connect(js->gc->account,
-					js->certificate_CN,
-					purple_account_get_int(account, "port", 5223), jabber_login_callback_ssl,
-					jabber_ssl_connect_failure, js->gc);
+			js->gsc = purple_ssl_connect_with_ssl_cn(account, ascii_domain,
+					purple_account_get_int(account, "port", 5223),
+					jabber_login_callback_ssl, jabber_ssl_connect_failure,
+					js->certificate_CN, gc);
+			g_free(ascii_domain);
 			if (!js->gsc) {
-				purple_connection_error_reason(js->gc,
+				purple_connection_error_reason(gc,
 					PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
 					_("Unable to establish SSL connection"));
 			}
 		} else {
-			purple_connection_error_reason(js->gc,
+			purple_connection_error_reason(gc,
 				PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
 				_("SSL support unavailable"));
 		}
 
+		g_free(ascii_domain);
 		return;
 	}
 
 	/* no old-ssl, so if they've specified a connect server, we'll use that, otherwise we'll
 	 * invoke the magic of SRV lookups, to figure out host and port */
 	if(connect_server[0]) {
-		jabber_login_connect(js, js->user->domain, connect_server, purple_account_get_int(account, "port", 5222), TRUE);
+		jabber_login_connect(js, js->user->domain, ascii_domain,
+				purple_account_get_int(account, "port", 5222),
+				TRUE, TRUE);
 	} else {
 		js->srv_query_data = purple_srv_resolve("xmpp-client",
-				"tcp", js->user->domain, srv_resolved_cb, js);
+				"tcp", ascii_domain, srv_resolved_cb, js);
 	}
+
+	g_free(ascii_domain);
+}
+
+void
+jabber_login(PurpleAccount *account)
+{
+	PurpleConnection *gc = purple_account_get_connection(account);
+	JabberStream *js;
+	PurpleStoredImage *image;
+
+	gc->flags |= PURPLE_CONNECTION_HTML |
+		PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY;
+	js = jabber_stream_new(account);
+	if (js == NULL)
+		return;
+
+	/*
+	 * Calculate the avatar hash for our current image so we know (when we
+	 * fetch our vCard and PEP avatar) if we should send our avatar to the
+	 * server.
+	 */
+	image = purple_buddy_icons_find_account_icon(account);
+	if (image != NULL) {
+		js->initial_avatar_hash =
+			jabber_calculate_data_sha1sum(purple_imgstore_get_data(image),
+					purple_imgstore_get_size(image));
+		purple_imgstore_unref(image);
+	}
+
+	jabber_stream_connect(js);
 }
 
 
@@ -1293,90 +1365,14 @@
 
 void jabber_register_account(PurpleAccount *account)
 {
-	PurpleConnection *gc = purple_account_get_connection(account);
 	JabberStream *js;
-	JabberBuddy *my_jb = NULL;
-	const char *connect_server = purple_account_get_string(account,
-			"connect_server", "");
-	const char *server;
-
-	js = gc->proto_data = g_new0(JabberStream, 1);
-	js->gc = gc;
-	js->registration = TRUE;
-	js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
-			g_free, g_free);
-	js->user = jabber_id_new(purple_account_get_username(account));
-	js->next_id = g_random_int();
-	js->old_length = 0;
-	js->keepalive_timeout = 0;
-
-	if(!js->user) {
-		purple_connection_error_reason(gc,
-			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
-			_("Invalid XMPP ID"));
+
+	js = jabber_stream_new(account);
+	if (js == NULL)
 		return;
-	}
-
-	js->write_buffer = purple_circ_buffer_new(512);
-
-	if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE)))
-		my_jb->subscription |= JABBER_SUB_BOTH;
-
-	server = connect_server[0] ? connect_server : js->user->domain;
-	js->certificate_CN = g_strdup(server);
-
-	js->stun_ip = NULL;
-	js->stun_port = 0;
-	js->stun_query = NULL;
-
-	jabber_stream_set_state(js, JABBER_STREAM_CONNECTING);
-
-	/* TODO: Just use purple_url_parse? */
-	if (!g_ascii_strncasecmp(connect_server, "http://", 7) || !g_ascii_strncasecmp(connect_server, "https://", 8)) {
-		js->use_bosh = TRUE;
-		js->bosh = jabber_bosh_connection_init(js, connect_server);
-		if (!js->bosh) {
-			purple_connection_error_reason(js->gc,
-				PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
-				_("Malformed BOSH Connect Server"));
-			return;
-		}
-		jabber_bosh_connection_connect(js->bosh);
-		return;
-	} else {
-		js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user->domain);
-	}
-
-	if(purple_account_get_bool(account, "old_ssl", FALSE)) {
-		if(purple_ssl_is_supported()) {
-			js->gsc = purple_ssl_connect(account, server,
-					purple_account_get_int(account, "port", 5222),
-					jabber_login_callback_ssl, jabber_ssl_connect_failure, gc);
-			if (!js->gsc) {
-				purple_connection_error_reason(js->gc,
-					PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-					_("Unable to establish SSL connection"));
-			}
-		} else {
-			purple_connection_error_reason(gc,
-				PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-				_("SSL support unavailable"));
-		}
-
-		return;
-	}
-
-	if (connect_server[0]) {
-		jabber_login_connect(js, js->user->domain, server,
-		                     purple_account_get_int(account,
-		                                            "port", 5222), TRUE);
-	} else {
-		js->srv_query_data = purple_srv_resolve("xmpp-client",
-		                                        "tcp",
-		                                        js->user->domain,
-		                                        srv_resolved_cb,
-		                                        js);
-	}
+
+	js->registration = TRUE;
+	jabber_stream_connect(js);
 }
 
 static void
@@ -1466,7 +1462,7 @@
 	if (!gc->disconnect_timeout) {
 		if (js->use_bosh)
 			jabber_bosh_connection_close(js->bosh);
-		else
+		else if ((js->gsc && js->gsc->fd > 0) || js->fd > 0)
 			jabber_send_raw(js, "</stream:stream>", -1);
 	}
 
--- a/libpurple/protocols/jabber/jutil.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/jutil.c	Sat Jul 18 07:26:04 2009 +0000
@@ -31,9 +31,165 @@
 #include "presence.h"
 #include "jutil.h"
 
+#ifdef USE_IDN
+#include <idna.h>
+#include <stringprep.h>
+static char idn_buffer[1024];
+#endif
+
+gchar *jabber_try_idna_to_ascii(const char *input)
+{
+#ifndef USE_IDN
+	return g_strdup(input);
+#else
+	gchar *out;
+	char *tmp;
+
+	g_return_val_if_fail(input != NULL, NULL);
+	g_return_val_if_fail(*input != '\0', NULL);
+
+	if (idna_to_ascii_8z(input, &tmp, IDNA_USE_STD3_ASCII_RULES) != IDNA_SUCCESS) {
+		return NULL;
+	}
+
+	out = g_strdup(tmp);
+	/* This *MUST* be freed with free, not g_free */
+	free(tmp);
+	return out;
+#endif
+}
+
+#ifdef USE_IDN
+static gboolean jabber_nodeprep(char *str, size_t buflen)
+{
+	return stringprep_xmpp_nodeprep(str, buflen) == STRINGPREP_OK;
+}
+
+static gboolean jabber_resourceprep(char *str, size_t buflen)
+{
+	return stringprep_xmpp_resourceprep(str, buflen) == STRINGPREP_OK;
+}
+
+static JabberID*
+jabber_idn_validate(const char *str, const char *at, const char *slash,
+                    const char *null)
+{
+	const char *node = NULL;
+	const char *domain = NULL;
+	const char *resource = NULL;
+	int node_len = 0;
+	int domain_len = 0;
+	int resource_len = 0;
+	char *out;
+	JabberID *jid;
+
+	/* Ensure no parts are > 1023 bytes */
+	if (at) {
+		node = str;
+		node_len = at - str;
+
+		domain = at + 1;
+		if (slash) {
+			domain_len = slash - (at + 1);
+			resource = slash + 1;
+			resource_len = null - (slash + 1);
+		} else {
+			domain_len = null - (at + 1);
+		}
+	} else {
+		domain = str;
+
+		if (slash) {
+			domain_len = slash - str;
+			resource = slash;
+			resource_len = null - (slash + 1);
+		} else {
+			domain_len = null - (str + 1);
+		}
+	}
+
+	if (node && node_len > 1023)
+		return NULL;
+	if (domain_len > 1023)
+		return NULL;
+	if (resource && resource_len > 1023)
+		return NULL;
+
+	jid = g_new0(JabberID, 1);
+
+	if (node) {
+		strncpy(idn_buffer, node, node_len);
+		idn_buffer[node_len] = '\0';
+
+		if (!jabber_nodeprep(idn_buffer, sizeof(idn_buffer))) {
+			jabber_id_free(jid);
+			jid = NULL;
+			goto out;
+		}
+
+		jid->node = g_strdup(idn_buffer);
+	}
+
+	/* domain *must* be here */
+	strncpy(idn_buffer, domain, domain_len);
+	idn_buffer[domain_len] = '\0';
+	if (domain[0] == '[') { /* IPv6 address */
+		gboolean valid = FALSE;
+
+		if (idn_buffer[domain_len - 1] == ']') {
+			idn_buffer[domain_len - 1] = '\0';
+			valid = purple_ipv6_address_is_valid(idn_buffer + 1);
+		}
+
+		if (!valid) {
+			jabber_id_free(jid);
+			jid = NULL;
+			goto out;
+		}
+	} else {
+		/* Apply nameprep */
+		if (stringprep_nameprep(idn_buffer, sizeof(idn_buffer)) != STRINGPREP_OK) {
+			jabber_id_free(jid);
+			jid = NULL;
+			goto out;
+		}
+
+		/* And now ToASCII */
+		if (idna_to_ascii_8z(idn_buffer, &out, IDNA_USE_STD3_ASCII_RULES) != IDNA_SUCCESS) {
+			jabber_id_free(jid);
+			jid = NULL;
+			goto out;
+		}
+
+		/* This *MUST* be freed using 'free', not 'g_free' */
+		free(out);
+		jid->domain = g_strdup(idn_buffer);
+	}
+
+	if (resource) {
+		strncpy(idn_buffer, resource, resource_len);
+		idn_buffer[resource_len] = '\0';
+
+		if (!jabber_resourceprep(idn_buffer, sizeof(idn_buffer))) {
+			jabber_id_free(jid);
+			jid = NULL;
+			/* goto out; */
+		}
+	}
+
+out:
+	return jid;
+}
+
+#endif /* USE_IDN */
+
 gboolean jabber_nodeprep_validate(const char *str)
 {
+#ifdef USE_IDN
+	gboolean result;
+#else
 	const char *c;
+#endif
 
 	if(!str)
 		return TRUE;
@@ -41,6 +197,12 @@
 	if(strlen(str) > 1023)
 		return FALSE;
 
+#ifdef USE_IDN
+	strncpy(idn_buffer, str, sizeof(idn_buffer) - 1);
+	idn_buffer[sizeof(idn_buffer) - 1] = '\0';
+	result = jabber_nodeprep(idn_buffer, sizeof(idn_buffer));
+	return result;
+#else /* USE_IDN */
 	c = str;
 	while(c && *c) {
 		gunichar ch = g_utf8_get_char(c);
@@ -52,6 +214,7 @@
 	}
 
 	return TRUE;
+#endif /* USE_IDN */
 }
 
 gboolean jabber_domain_validate(const char *str)
@@ -101,7 +264,11 @@
 
 gboolean jabber_resourceprep_validate(const char *str)
 {
+#ifdef USE_IDN
+	gboolean result;
+#else
 	const char *c;
+#endif
 
 	if(!str)
 		return TRUE;
@@ -109,6 +276,12 @@
 	if(strlen(str) > 1023)
 		return FALSE;
 
+#ifdef USE_IDN
+	strncpy(idn_buffer, str, sizeof(idn_buffer) - 1);
+	idn_buffer[sizeof(idn_buffer) - 1] = '\0';
+	result = jabber_resourceprep(idn_buffer, sizeof(idn_buffer));
+	return result;
+#else /* USE_IDN */
 	c = str;
 	while(c && *c) {
 		gunichar ch = g_utf8_get_char(c);
@@ -119,9 +292,9 @@
 	}
 
 	return TRUE;
+#endif /* USE_IDN */
 }
 
-
 JabberID*
 jabber_id_new(const char *str)
 {
@@ -132,8 +305,10 @@
 #if 0
 	gboolean node_is_required = FALSE;
 #endif
+#ifndef USE_IDN
 	char *node = NULL;
 	char *domain;
+#endif
 	JabberID *jid;
 
 	if (!str)
@@ -253,33 +428,37 @@
 	if (!g_utf8_validate(str, -1, NULL))
 		return NULL;
 
+#ifdef USE_IDN
+	return jabber_idn_validate(str, at, slash, c /* points to the null */);
+#else /* USE_IDN */
+
 	jid = g_new0(JabberID, 1);
 
 	/* normalization */
 	if(at) {
-		node = g_utf8_normalize(str, at-str, G_NORMALIZE_NFKC);
+		node = g_utf8_casefold(str, at-str);
 		if(slash) {
-			domain = g_utf8_normalize(at+1, slash-(at+1), G_NORMALIZE_NFKC);
+			domain = g_utf8_casefold(at+1, slash-(at+1));
 			jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC);
 		} else {
-			domain = g_utf8_normalize(at+1, -1, G_NORMALIZE_NFKC);
+			domain = g_utf8_casefold(at+1, -1);
 		}
 	} else {
 		if(slash) {
-			domain = g_utf8_normalize(str, slash-str, G_NORMALIZE_NFKC);
+			domain = g_utf8_casefold(str, slash-str);
 			jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC);
 		} else {
-			domain = g_utf8_normalize(str, -1, G_NORMALIZE_NFKC);
+			domain = g_utf8_casefold(str, -1);
 		}
 	}
 
 	if (node) {
-		jid->node = g_utf8_strdown(node, -1);
+		jid->node = g_utf8_normalize(node, -1, G_NORMALIZE_NFKC);
 		g_free(node);
 	}
 
 	if (domain) {
-		jid->domain = g_utf8_strdown(domain, -1);
+		jid->domain = g_utf8_normalize(domain, -1, G_NORMALIZE_NFKC);
 		g_free(domain);
 	}
 
@@ -292,6 +471,7 @@
 	}
 
 	return jid;
+#endif /* USE_IDN */
 }
 
 void
--- a/libpurple/protocols/jabber/jutil.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/jutil.h	Sat Jul 18 07:26:04 2009 +0000
@@ -44,6 +44,11 @@
 /* Returns true if JID is the bare JID of our account. */
 gboolean jabber_is_own_account(JabberStream *js, const char *jid);
 
+/* Try to convert an IDNA domain name to something we can pass to a DNS lookup.
+ * If IDN support is not available, returns a copy of the input string.
+ */
+gchar *jabber_try_idna_to_ascii(const gchar *input);
+
 gboolean jabber_nodeprep_validate(const char *);
 gboolean jabber_domain_validate(const char *);
 gboolean jabber_resourceprep_validate(const char *);
--- a/libpurple/protocols/jabber/message.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/message.c	Sat Jul 18 07:26:04 2009 +0000
@@ -742,7 +742,12 @@
 			if(timestamp)
 				jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
 		} else if(!strcmp(child->name, "x")) {
-			if(!strcmp(xmlns, "jabber:x:conference") &&
+			if(!strcmp(xmlns, "jabber:x:delay")) {
+				const char *timestamp = xmlnode_get_attrib(child, "stamp");
+				jm->delayed = TRUE;
+				if(timestamp)
+					jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
+			} else if(!strcmp(xmlns, "jabber:x:conference") &&
 					jm->type != JABBER_MESSAGE_GROUPCHAT_INVITE &&
 					jm->type != JABBER_MESSAGE_ERROR) {
 				const char *jid = xmlnode_get_attrib(child, "jid");
--- a/libpurple/protocols/jabber/presence.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sat Jul 18 07:26:04 2009 +0000
@@ -67,7 +67,7 @@
 	g_return_if_fail(js->user != NULL);
 
 	account = purple_connection_get_account(js->gc);
-	username = purple_account_get_username(account);
+	username = purple_connection_get_display_name(js->gc);
 	if (status == NULL)
 		status = purple_account_get_active_status(account);
 
@@ -91,9 +91,9 @@
 		}
 
 		if ((jbr = jabber_buddy_find_resource(jb, NULL))) {
-			purple_prpl_got_user_status(js->gc->account, username, jabber_buddy_state_get_status_id(jbr->state), "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status, NULL);
+			purple_prpl_got_user_status(account, username, jabber_buddy_state_get_status_id(jbr->state), "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status, NULL);
 		} else {
-			purple_prpl_got_user_status(js->gc->account, username, "offline", msg ? "message" : NULL, msg, NULL);
+			purple_prpl_got_user_status(account, username, "offline", msg ? "message" : NULL, msg, NULL);
 		}
 		g_free(msg);
 	}
@@ -613,7 +613,7 @@
 			/* The rest of the cases used to check xmlns individually. */
 			continue;
 		} else if(!strcmp(y->name, "delay") && !strcmp(xmlns, "urn:xmpp:delay")) {
-			/* XXX: compare the time.  urn:xmpp:delay can happen on presence packets that aren't really and truly delayed */
+			/* 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(y->name, "c") && !strcmp(xmlns, "http://jabber.org/protocol/caps")) {
@@ -621,7 +621,11 @@
 		} else if (g_str_equal(y->name, "nick") && g_str_equal(xmlns, "http://jabber.org/protocol/nick")) {
 			nickname = xmlnode_get_data(y);
 		} else if(!strcmp(y->name, "x")) {
-			if(!strcmp(xmlns, "http://jabber.org/protocol/muc#user")) {
+			if(!strcmp(xmlns, "jabber:x:delay")) {
+				/* 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")) {
 			} else if(!strcmp(xmlns, "vcard-temp:x:update")) {
 				xmlnode *photo = xmlnode_get_child(y, "photo");
 				if(photo) {
@@ -801,6 +805,7 @@
 				const char *nick;
 				const char *code = NULL;
 				const char *item_jid = NULL;
+				const char *to;
 				xmlnode *stat;
 				xmlnode *item;
 
@@ -808,7 +813,6 @@
 				if (item)
 					item_jid = xmlnode_get_attrib(item, "jid");
 
-
 				stat = xmlnode_get_child(x, "status");
 
 				if (stat)
@@ -885,7 +889,8 @@
 				 * Also possibly works around bits of an Openfire bug. See
 				 * #8319.
 				 */
-				if (is_our_resource && !purple_strequal(from, item_jid)) {
+				to = xmlnode_get_attrib(packet, "to");
+				if (is_our_resource && item_jid && !purple_strequal(to, item_jid)) {
 					/* TODO: When the above is a loop, this needs to still act
 					 * sanely for all cases (this code is a little fragile). */
 					if (!kick && !nick_change)
@@ -1065,7 +1070,7 @@
 
 			/* if the message is blank, then there really isn't a message */
 			if(formatted_msg && *formatted_msg)
-				*msg = g_strdup(formatted_msg);
+				*msg = purple_markup_strip_html(formatted_msg);
 		}
 
 		if(priority)
--- a/libpurple/protocols/jabber/si.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/jabber/si.c	Sat Jul 18 07:26:04 2009 +0000
@@ -51,9 +51,9 @@
 	char *iq_id;
 
 	enum {
-		STREAM_METHOD_UNKNOWN = 0,
+		STREAM_METHOD_UNKNOWN     = 0,
 		STREAM_METHOD_BYTESTREAMS = 2 << 1,
-		STREAM_METHOD_IBB = 2 << 2,
+		STREAM_METHOD_IBB         = 2 << 2,
 		STREAM_METHOD_UNSUPPORTED = 2 << 31
 	} stream_method;
 
@@ -1379,6 +1379,31 @@
 
 static void jabber_si_xfer_request_denied(PurpleXfer *xfer)
 {
+	JabberSIXfer *jsx = (JabberSIXfer *) xfer->data;
+	JabberStream *js = jsx->js;
+
+	/*
+	 * TODO: It's probably an error if jsx->iq_id == NULL. g_return_if_fail
+	 * might be warranted.
+	 */
+	if (jsx->iq_id && !jsx->accepted) {
+		JabberIq *iq;
+		xmlnode *error, *child;
+		iq = jabber_iq_new(js, JABBER_IQ_ERROR);
+		xmlnode_set_attrib(iq->node, "to", xfer->who);
+		jabber_iq_set_id(iq, jsx->iq_id);
+
+		error = xmlnode_new_child(iq->node, "error");
+		xmlnode_set_attrib(error, "type", "cancel");
+		child = xmlnode_new_child(error, "forbidden");
+		xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		child = xmlnode_new_child(error, "text");
+		xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_insert_data(child, "Offer Declined", -1);
+
+		jabber_iq_send(iq);
+	}
+
 	jabber_si_xfer_free(xfer);
 	purple_debug(PURPLE_DEBUG_INFO, "jabber", "in jabber_si_xfer_request_denied\n");
 }
@@ -1421,6 +1446,7 @@
 		purple_notify_error(js->gc, _("File Send Failed"),
 				_("File Send Failed"), msg);
 		g_free(msg);
+		purple_xfer_cancel_local(xfer);
 	}
 }
 
@@ -1434,13 +1460,38 @@
 	JabberSIXfer *jsx = xfer->data;
 	char **who_v = g_strsplit(xfer->who, "/", 2);
 	char *who;
+	JabberBuddy *jb;
+	JabberBuddyResource *jbr = NULL;
+
+	jb = jabber_buddy_find(jsx->js, who_v[0], FALSE);
+	if (jb) {
+		jbr = jabber_buddy_find_resource(jb, resource);
+	}
 
 	who = g_strdup_printf("%s/%s", who_v[0], resource);
 	g_strfreev(who_v);
 	g_free(xfer->who);
 	xfer->who = who;
-	jabber_disco_info_do(jsx->js, who,
-			jabber_si_xfer_send_disco_cb, xfer);
+
+	if (jbr) {
+		char *msg;
+
+		if (jabber_resource_has_capability(jbr, XEP_0047_NAMESPACE))
+			jsx->stream_method |= STREAM_METHOD_IBB;
+		if (jabber_resource_has_capability(jbr, "http://jabber.org/protocol/si/profile/file-transfer")) {
+			jabber_si_xfer_send_request(xfer);
+			return;
+		}
+
+		msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who);
+		purple_notify_error(jsx->js->gc, _("File Send Failed"),
+				_("File Send Failed"), msg);
+		g_free(msg);
+		purple_xfer_cancel_local(xfer);
+	} else {
+		jabber_disco_info_do(jsx->js, who,
+				jabber_si_xfer_send_disco_cb, xfer);
+	}
 }
 
 static void resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestFields *fields)
@@ -1529,6 +1580,8 @@
 		xmlnode_set_attrib(iq->node, "to", xfer->who);
 		if(jsx->iq_id)
 			jabber_iq_set_id(iq, jsx->iq_id);
+		else
+			purple_debug_error("jabber", "Sending SI result with new IQ id.\n");
 
 		jsx->accepted = TRUE;
 
--- a/libpurple/protocols/oscar/flap_connection.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/oscar/flap_connection.c	Sat Jul 18 07:26:04 2009 +0000
@@ -505,7 +505,6 @@
 
 	g_free(conn->error_message);
 	g_free(conn->cookie);
-	g_free(conn->ssl_cert_cn);
 
 	/*
 	 * Free conn->internal, if necessary
--- a/libpurple/protocols/oscar/oscar.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sat Jul 18 07:26:04 2009 +0000
@@ -1246,32 +1246,6 @@
 }
 
 static void
-ssl_proxy_conn_established_cb(gpointer data, gint source, const gchar *error_message)
-{
-	OscarData *od;
-	PurpleConnection *gc;
-	PurpleAccount *account;
-	FlapConnection *conn;
-
-	conn = data;
-	od = conn->od;
-	gc = od->gc;
-	account = purple_connection_get_account(gc);
-
-	conn->connect_data = NULL;
-
-	if (source < 0)
-	{
-		connection_common_error_cb(conn, error_message);
-		return;
-	}
-
-	conn->gsc = purple_ssl_connect_with_host_fd(account, source,
-			ssl_connection_established_cb, ssl_connection_error_cb,
-			conn->ssl_cert_cn, conn);
-}
-
-static void
 flap_connection_established_bos(OscarData *od, FlapConnection *conn)
 {
 	PurpleConnection *gc = od->gc;
@@ -1943,12 +1917,13 @@
 	if (od->use_ssl)
 	{
 		/*
-		 * This shouldn't be hardcoded except that the server isn't sending
-		 * us a name to use for comparing the certificate common name.
+		 * This shouldn't be hardcoded to "bos.oscar.aol.com" except that
+		 * the server isn't sending us a name to use for comparing the
+		 * certificate common name.
 		 */
-		newconn->ssl_cert_cn = g_strdup("bos.oscar.aol.com");
-		newconn->connect_data = purple_proxy_connect(NULL, account, host, port,
-				ssl_proxy_conn_established_cb, newconn);
+		newconn->gsc = purple_ssl_connect_with_ssl_cn(account, host, port,
+				ssl_connection_established_cb, ssl_connection_error_cb,
+				"bos.oscar.aol.com", newconn);
 	}
 	else
 	{
@@ -1957,7 +1932,7 @@
 	}
 
 	g_free(host);
-	if (newconn->connect_data == NULL)
+	if (newconn->gsc == NULL && newconn->connect_data == NULL)
 	{
 		purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Unable to connect"));
 		return 0;
@@ -2114,15 +2089,9 @@
 
 	if (redir->use_ssl)
 	{
-		/*
-		 * TODO: It should be possible to specify a certificate common name
-		 * distinct from the host we're passing to purple_ssl_connect. The
-		 * way to work around that is to use purple_proxy_connect +
-		 * purple_ssl_connect_with_host_fd
-		 */
-		newconn->ssl_cert_cn = g_strdup(redir->ssl_cert_cn);
-		newconn->connect_data = purple_proxy_connect(NULL, account, host, port,
-				ssl_proxy_conn_established_cb, newconn);
+		newconn->gsc = purple_ssl_connect_with_ssl_cn(account, host, port,
+				ssl_connection_established_cb, ssl_connection_error_cb,
+				redir->ssl_cert_cn, newconn);
 	}
 	else
 	{
--- a/libpurple/protocols/oscar/oscar.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.h	Sat Jul 18 07:26:04 2009 +0000
@@ -429,7 +429,6 @@
 	guint16 cookielen;
 	guint8 *cookie;
 	gpointer new_conn_data;
-	gchar *ssl_cert_cn;
 
 	int fd;
 	PurpleSslConnection *gsc;
--- a/libpurple/protocols/oscar/peer.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/oscar/peer.c	Sat Jul 18 07:26:04 2009 +0000
@@ -710,9 +710,18 @@
 	}
 	else if (conn->type == OSCAR_CAPABILITY_SENDFILE)
 	{
+		const guchar *ip_atoi = purple_network_ip_atoi(listener_ip);
+		if (ip_atoi == NULL) {
+			purple_debug_error("oscar", "Cannot send file. IP %s failed atoi.\n"
+					"Other possibly useful information: fd = %d, port = %d\n",
+			                   listener_ip ? listener_ip : "(null!)", conn->listenerfd,
+							   listener_port);
+			purple_xfer_cancel_local(conn->xfer);
+			return;
+		}
 		aim_im_sendch2_sendfile_requestdirect(od,
 				conn->cookie, conn->bn,
-				purple_network_ip_atoi(listener_ip),
+				ip_atoi,
 				listener_port, ++conn->lastrequestnumber,
 				(const gchar *)conn->xferdata.name,
 				conn->xferdata.size, conn->xferdata.totfiles);
--- a/libpurple/protocols/yahoo/libymsg.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/libymsg.c	Sat Jul 18 07:26:04 2009 +0000
@@ -1143,7 +1143,7 @@
 	if (add_req->protocol == 2)
 		who += 4;
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash(pkt, "ssiii",
 					  1, add_req->id,
 					  5, who,
@@ -1172,7 +1172,7 @@
 		encoded_msg = yahoo_string_encode(add_req->gc, msg, NULL);
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15,
-			YAHOO_STATUS_AVAILABLE, 0);
+			YAHOO_STATUS_AVAILABLE, yd->session_id);
 
 	yahoo_packet_hash(pkt, "ssiiiis",
 			1, add_req->id,
@@ -1623,28 +1623,18 @@
 
 	purple_debug_info("yahoo", "yahoo status: %d\n", yd->current_status);
 	pkt = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, yd->current_status, yd->session_id);
-	if(yd->jp) {
-		yahoo_packet_hash(pkt, "ssssssss",
-					1, name,
-					0, name,
-					277, yd->cookie_y,
-					278, yd->cookie_t,
-					307, base64_string,
-					2, name,
-					2, "1",
-					135, YAHOOJP_CLIENT_VERSION);
-	} else	{
-		yahoo_packet_hash(pkt, "sssssssss",
-					1, name,
-					0, name,
-					277, yd->cookie_y,
-					278, yd->cookie_t,
-					307, base64_string,
-					244, YAHOO_CLIENT_VERSION_ID,
-					2, name,
-					2, "1",
-					135, YAHOO_CLIENT_VERSION);
-	}
+	
+	yahoo_packet_hash(pkt, "sssssssss",
+				1, name,
+				0, name,
+				277, yd->cookie_y,
+				278, yd->cookie_t,
+				307, base64_string,
+				244, yd->jp ? YAHOOJP_CLIENT_VERSION_ID : YAHOO_CLIENT_VERSION_ID,
+				2, name,
+				2, "1",
+				135, yd->jp ? YAHOOJP_CLIENT_VERSION : YAHOO_CLIENT_VERSION);
+
 	if (yd->picture_checksum)
 		yahoo_packet_hash_int(pkt, 192, yd->picture_checksum);
 	yahoo_packet_send_and_free(pkt, yd);
@@ -2087,6 +2077,10 @@
 		msg = g_strdup(_("Your account is locked, please log in to the Yahoo! website."));
 		reason = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED;
 		break;
+	case 1013:
+		msg = g_strdup(_("Invalid username"));
+		reason = PURPLE_CONNECTION_ERROR_INVALID_USERNAME;
+		break;
 	default:
 		msg = g_strdup_printf(_("Unknown error number %d. Logging into the Yahoo! website may fix this."), err);
 	}
@@ -2898,6 +2892,9 @@
 	case YAHOO_SERVICE_AUDIBLE:
 		yahoo_process_audible(gc, pkt);
 		break;
+	case YAHOO_SERVICE_CONTACT_DETAILS:
+		yahoo_process_contact_details(gc, pkt);
+		break;
 	case YAHOO_SERVICE_FILETRANS_15:
 		yahoo_process_filetrans_15(gc, pkt);
 		break;
@@ -3031,7 +3028,7 @@
 	yd = gc->proto_data;
 	yd->fd = source;
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH, yd->current_status, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH, yd->current_status, yd->session_id);
 
 	yahoo_packet_hash_str(pkt, 1, purple_normalize(gc->account, purple_account_get_username(purple_connection_get_account(gc))));
 	yahoo_packet_send_and_free(pkt, yd);
@@ -3057,7 +3054,7 @@
 	yd = gc->proto_data;
 	yd->fd = source;
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_WEBLOGIN, YAHOO_STATUS_WEBLOGIN, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_WEBLOGIN, YAHOO_STATUS_WEBLOGIN, yd->session_id);
 
 	yahoo_packet_hash(pkt, "sss", 0,
 	                  purple_normalize(gc->account, purple_account_get_username(purple_connection_get_account(gc))),
@@ -3405,6 +3402,9 @@
 	PurpleConnection *gc = purple_account_get_connection(account);
 	struct yahoo_data *yd = gc->proto_data = g_new0(struct yahoo_data, 1);
 	PurpleStatus *status = purple_account_get_active_status(account);
+	const char *server = NULL;
+	int pager_port = 0;
+
 	gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC;
 
 	purple_connection_update_progress(gc, _("Connecting"), 1, 2);
@@ -3420,41 +3420,30 @@
 	yd->friends = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, yahoo_friend_free);
 	yd->imvironments = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
 	yd->xfer_peer_idstring_map = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
-	yd->peers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, yahoo_p2p_disconnect_destroy_data);
+	yd->peers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
+					yahoo_p2p_disconnect_destroy_data);
 	yd->sms_carrier = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
-	yd->yahoo_p2p_timer = purple_timeout_add_seconds(YAHOO_P2P_KEEPALIVE_SECS, yahoo_p2p_keepalive, gc);
+	yd->yahoo_p2p_timer = purple_timeout_add_seconds(YAHOO_P2P_KEEPALIVE_SECS,
+					yahoo_p2p_keepalive, gc);
 	yd->confs = NULL;
 	yd->conf_id = 2;
 	yd->last_keepalive = yd->last_ping = time(NULL);
 
 	yd->current_status = get_yahoo_status_from_purple_status(status);
+	yd->jp = yahoo_is_japan(account);
 
 	yahoo_server_check(account);
 	yahoo_picture_check(account);
 
-	if (yahoo_is_japan(account)) {
-		yd->jp = TRUE;
-		if (purple_proxy_connect(gc, account,
-		                       purple_account_get_string(account, "server",  YAHOOJP_PAGER_HOST),
-		                       purple_account_get_int(account, "port", YAHOO_PAGER_PORT),
-		                       yahoo_got_connected, gc) == NULL)
-		{
-			purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
-			                               _("Unable to connect"));
-			return;
-		}
-	} else {
-		yd->jp = FALSE;
-		if (purple_proxy_connect(gc, account,
-		                       purple_account_get_string(account, "server",  YAHOO_PAGER_HOST),
-		                       purple_account_get_int(account, "port", YAHOO_PAGER_PORT),
-		                       yahoo_got_connected, gc) == NULL)
-		{
-			purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
-			                               _("Unable to connect"));
-			return;
-		}
-	}
+	server = purple_account_get_string(account, "server",
+					yd->jp ? YAHOOJP_PAGER_HOST : YAHOO_PAGER_HOST);
+	pager_port = purple_account_get_int(account, "port", YAHOO_PAGER_PORT);
+
+	if (purple_proxy_connect(gc, account, server, pager_port, yahoo_got_connected, gc) == NULL)
+		purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
+						_("Unable to connect"));
+
+	return;
 }
 
 void yahoo_close(PurpleConnection *gc) {
@@ -3539,7 +3528,7 @@
 	g_free(yd->pending_chat_goto);
 	g_strfreev(yd->profiles);
 
-	yahoo_personal_details_reset(&yd->ypd);
+	yahoo_personal_details_reset(&yd->ypd, TRUE);
 
 	g_free(yd->current_list15_grp);
 
@@ -3772,6 +3761,26 @@
 
 	if (presence != NULL)
 		purple_notify_user_info_add_pair(user_info, _("Presence"), presence);
+
+	if (full) {
+		YahooPersonalDetails *ypd = &f->ypd;
+		int i;
+		struct {
+			char *id;
+			char *text;
+			char *value;
+		} yfields[] = {
+			{"hp", N_("Home Phone Number"), ypd->phone.home},
+			{"wp", N_("Work Phone Number"), ypd->phone.work},
+			{"mo", N_("Mobile Phone Number"), ypd->phone.mobile},
+			{NULL, NULL, NULL}
+		};
+		for (i = 0; yfields[i].id; i++) {
+			if (!yfields[i].value || !*yfields[i].value)
+				continue;
+			purple_notify_user_info_add_pair(user_info, _(yfields[i].text), yfields[i].value);
+		}
+	}
 }
 
 static void yahoo_addbuddyfrommenu_cb(PurpleBlistNode *node, gpointer data)
@@ -3848,6 +3857,16 @@
 	yahoo_doodle_initiate(gc, purple_buddy_get_name(b));
 }
 
+static void
+yahoo_userinfo_blist_node(PurpleBlistNode *node, gpointer data)
+{
+	PurpleBuddy *b = (PurpleBuddy *)node;
+	PurpleAccount *account = purple_buddy_get_account(b);
+	PurpleConnection *gc = purple_account_get_connection(account);
+
+	yahoo_set_userinfo_for_buddy(gc, b);
+}
+
 static GList *yahoo_buddy_menu(PurpleBuddy *buddy)
 {
 	GList *m = NULL;
@@ -3909,13 +3928,16 @@
 		act = purple_menu_action_new(_("Presence Settings"), NULL, NULL,
 		                           build_presence_submenu(f, gc));
 		m = g_list_append(m, act);
-	}
-
-	if (f) {
+
 		act = purple_menu_action_new(_("Start Doodling"),
 		                           PURPLE_CALLBACK(yahoo_doodle_blist_node),
 		                           NULL, NULL);
 		m = g_list_append(m, act);
+
+		act = purple_menu_action_new(_("Set User Info..."),
+		                           PURPLE_CALLBACK(yahoo_userinfo_blist_node),
+		                           NULL, NULL);
+		m = g_list_append(m, act);
 	}
 
 	return m;
@@ -3935,7 +3957,7 @@
 	struct yahoo_data *yd = gc->proto_data;
 	const char *name = yd->profiles[purple_request_fields_get_choice(fields, "id")];
 
-	struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_IDACT, YAHOO_STATUS_AVAILABLE, 0);
+	struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_IDACT, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash_str(pkt, 3, name);
 	yahoo_packet_send_and_free(pkt, yd);
 
@@ -4271,7 +4293,7 @@
 		}
 
 		alias = purple_account_get_alias(account);
-		pkt = yahoo_packet_new(YAHOO_SERVICE_SMS_MSG, YAHOO_STATUS_AVAILABLE, 0);
+		pkt = yahoo_packet_new(YAHOO_SERVICE_SMS_MSG, YAHOO_STATUS_AVAILABLE, yd->session_id);
 		yahoo_packet_hash(pkt, "sssss",
 			1, purple_connection_get_display_name(gc),
 			69, alias,
@@ -4286,7 +4308,7 @@
 		return ret;
 	}
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_MESSAGE, YAHOO_STATUS_OFFLINE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_MESSAGE, YAHOO_STATUS_OFFLINE, yd->session_id);
 	if(msn) {
 		yahoo_packet_hash(pkt, "ss", 1, purple_connection_get_display_name(gc), 5, who+4);
 		yahoo_packet_hash_int(pkt, 241, 2);
@@ -4368,7 +4390,7 @@
 	if( strncmp(who, "+", 1) == 0 )
 		return 0;
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_NOTIFY, YAHOO_STATUS_TYPING, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_NOTIFY, YAHOO_STATUS_TYPING, yd->session_id);
 
 	/* check to see if p2p link exists, send through it */
 	if( (p2p_data = g_hash_table_lookup(yd->peers, who)) && !msn ) {
@@ -4440,14 +4462,14 @@
 	}
 
 	if (yd->current_status == YAHOO_STATUS_INVISIBLE) {
-		pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_VISIBLE_TOGGLE, YAHOO_STATUS_AVAILABLE, 0);
+		pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_VISIBLE_TOGGLE, YAHOO_STATUS_AVAILABLE, yd->session_id);
 		yahoo_packet_hash_str(pkt, 13, "2");
 		yahoo_packet_send_and_free(pkt, yd);
 
 		return;
 	}
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash_int(pkt, 10, yd->current_status);
 
 	if (yd->current_status == YAHOO_STATUS_CUSTOM) {
@@ -4467,7 +4489,7 @@
 	yahoo_packet_send_and_free(pkt, yd);
 
 	if (old_status == YAHOO_STATUS_INVISIBLE) {
-		pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_VISIBLE_TOGGLE, YAHOO_STATUS_AVAILABLE, 0);
+		pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_VISIBLE_TOGGLE, YAHOO_STATUS_AVAILABLE, yd->session_id);
 		yahoo_packet_hash_str(pkt, 13, "1");
 		yahoo_packet_send_and_free(pkt, yd);
 
@@ -4491,7 +4513,7 @@
 		yd->current_status = get_yahoo_status_from_purple_status(status);
 	}
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id);
 
 	yahoo_packet_hash_int(pkt, 10, yd->current_status);
 	if (yd->current_status == YAHOO_STATUS_CUSTOM) {
@@ -4597,19 +4619,19 @@
 			if (yd->wm) {
 				ycht_chat_send_keepalive(yd->ycht);
 			} else {
-				pkt = yahoo_packet_new(YAHOO_SERVICE_CHATPING, YAHOO_STATUS_AVAILABLE, 0);
+				pkt = yahoo_packet_new(YAHOO_SERVICE_CHATPING, YAHOO_STATUS_AVAILABLE, yd->session_id);
 				yahoo_packet_hash_str(pkt, 109, purple_connection_get_display_name(gc));
 				yahoo_packet_send_and_free(pkt, yd);
 			}
 		} else {
-			pkt = yahoo_packet_new(YAHOO_SERVICE_PING, YAHOO_STATUS_AVAILABLE, 0);
+			pkt = yahoo_packet_new(YAHOO_SERVICE_PING, YAHOO_STATUS_AVAILABLE, yd->session_id);
 			yahoo_packet_send_and_free(pkt, yd);
 		}
 	}
 
 	if ((now - yd->last_keepalive) >= KEEPALIVE_TIMEOUT) {
 		yd->last_keepalive = now;
-		pkt = yahoo_packet_new(YAHOO_SERVICE_KEEPALIVE, YAHOO_STATUS_AVAILABLE, 0);
+		pkt = yahoo_packet_new(YAHOO_SERVICE_KEEPALIVE, YAHOO_STATUS_AVAILABLE, yd->session_id);
 		yahoo_packet_hash_str(pkt, 0, purple_connection_get_display_name(gc));
 		yahoo_packet_send_and_free(pkt, yd);
 	}
@@ -4643,7 +4665,7 @@
 		group = "Buddies";
 
 	group2 = yahoo_string_encode(gc, group, NULL);
-	pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	if(msn) {
 		yahoo_packet_hash(pkt, "sssssssssss",
 			14, "",
@@ -4715,7 +4737,7 @@
 		g_hash_table_remove(yd->friends, bname);
 
 	cg = yahoo_string_encode(gc, gname, NULL);
-	pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, yd->session_id);
 
 	if(msn)
 		yahoo_packet_hash(pkt, "sss", 1, purple_connection_get_display_name(gc),
@@ -4739,7 +4761,7 @@
 	if (!who || who[0] == '\0')
 		return;
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_IGNORECONTACT, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_IGNORECONTACT, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash(pkt, "sss", 1, purple_connection_get_display_name(gc),
 	                  7, who, 13, "1");
 	yahoo_packet_send_and_free(pkt, yd);
@@ -4755,7 +4777,7 @@
 	if (!who || who[0] == '\0')
 		return;
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_IGNORECONTACT, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_IGNORECONTACT, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash(pkt, "sss", 1, purple_connection_get_display_name(gc), 7, who, 13, "2");
 	yahoo_packet_send_and_free(pkt, yd);
 }
@@ -4818,7 +4840,7 @@
 		return;
 	}
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_CHGRP_15, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_CHGRP_15, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	if(f->protocol)
 		yahoo_packet_hash(pkt, "ssssissss", 1, purple_connection_get_display_name(gc),
 	                  302, "240", 300, "240", 7, temp, 241, f->protocol, 224, gpo, 264, gpn, 301,
@@ -4848,7 +4870,7 @@
 		return;
 	}
 
-	pkt = yahoo_packet_new(YAHOO_SERVICE_GROUPRENAME, YAHOO_STATUS_AVAILABLE, 0);
+	pkt = yahoo_packet_new(YAHOO_SERVICE_GROUPRENAME, YAHOO_STATUS_AVAILABLE, yd->session_id);
 	yahoo_packet_hash(pkt, "sss", 1, purple_connection_get_display_name(gc),
 	                  65, gpo, 67, gpn);
 	yahoo_packet_send_and_free(pkt, yd);
--- a/libpurple/protocols/yahoo/libymsg.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/libymsg.h	Sat Jul 18 07:26:04 2009 +0000
@@ -88,10 +88,10 @@
 #define YAHOO_STATUS_TYPE_MOBILE "mobile"
 
 #define YAHOO_CLIENT_VERSION_ID "4194239"
-#define YAHOO_CLIENT_VERSION "9.0.0.2152"
+#define YAHOO_CLIENT_VERSION "9.0.0.2162"
 
 #define YAHOOJP_CLIENT_VERSION_ID "4194239"
-#define YAHOOJP_CLIENT_VERSION "9.0.0.2152"
+#define YAHOOJP_CLIENT_VERSION "9.0.0.2162"
 
 #define YAHOO_CLIENT_USERAGENT "Mozilla/5.0"
 
--- a/libpurple/protocols/yahoo/yahoo_aliases.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_aliases.c	Sat Jul 18 07:26:04 2009 +0000
@@ -53,9 +53,10 @@
 	gchar *who;
 };
 
-void yahoo_personal_details_reset(YahooPersonalDetails *ypd)
+void yahoo_personal_details_reset(YahooPersonalDetails *ypd, gboolean all)
 {
-	g_free(ypd->id);
+	if (all)
+		g_free(ypd->id);
 	g_free(ypd->names.first);
 	g_free(ypd->names.last);
 	g_free(ypd->names.middle);
@@ -104,6 +105,7 @@
 		for(item = xmlnode_get_child(contacts, "ct"); item; item = xmlnode_get_next_twin(item)) {
 			/* Yahoo replies with two types of contact (ct) record, we are only interested in the alias ones */
 			if ((yid = xmlnode_get_attrib(item, "yi"))) {
+				YahooPersonalDetails *ypd = NULL;
 				/* Grab all the bits of information we can */
 				fn = xmlnode_get_attrib(item, "fn");
 				ln = xmlnode_get_attrib(item, "ln");
@@ -148,23 +150,29 @@
 						yahoo_update_alias(gc, yid, buddy_alias);
 						purple_debug_info("yahoo", "Sent updated alias '%s'\n", buddy_alias);
 					}
-				} else {
+				}
+				
+				if (f != NULL)
+					ypd = &f->ypd;
+				else {
 					/* May be the alias is for the account? */
 					const char *yidn = purple_normalize(account, yid);
 					if (purple_strequal(yidn, purple_connection_get_display_name(gc))) {
-						yahoo_personal_details_reset(&yd->ypd);
-
-						yd->ypd.id = g_strdup(id);
+						ypd = &yd->ypd;
+					}
+				}
 
-						yd->ypd.names.first = g_strdup(fn);
-						yd->ypd.names.middle = g_strdup(mn);
-						yd->ypd.names.last = g_strdup(ln);
-						yd->ypd.names.nick = g_strdup(nn);
+				if (ypd) {
+					yahoo_personal_details_reset(ypd, TRUE);
+					ypd->id = g_strdup(id);
+					ypd->names.first = g_strdup(fn);
+					ypd->names.middle = g_strdup(mn);
+					ypd->names.last = g_strdup(ln);
+					ypd->names.nick = g_strdup(nn);
 
-						yd->ypd.phone.work = g_strdup(wp);
-						yd->ypd.phone.home = g_strdup(hp);
-						yd->ypd.phone.mobile = g_strdup(mo);
-					}
+					ypd->phone.work = g_strdup(wp);
+					ypd->phone.home = g_strdup(hp);
+					ypd->phone.mobile = g_strdup(mo);
 				}
 
 				g_free(full_name);
@@ -388,6 +396,57 @@
  * User Info Update Functions
  **************************************************************************/
 
+#if 0
+/* This block of code can be used to send our contact details to
+ * everyone in the buddylist. But with the official messenger,
+ * doing this pops a conversation window at the receiver's end,
+ * which is stupid, and thus not really surprising. */
+
+struct yahoo_userinfo {
+	struct yahoo_data *yd;
+	char *xml;
+};
+
+static void
+yahoo_send_userinfo_to_user(struct yahoo_userinfo *yui, const char *who)
+{
+	struct yahoo_packet *pkt;
+	PurpleConnection *gc;
+
+	gc = yui->yd->gc;
+	pkt = yahoo_packet_new(YAHOO_SERVICE_CONTACT_DETAILS, 0, 0);
+	yahoo_packet_hash(pkt, "siisis",
+			1, purple_connection_get_display_name(gc),
+			13, 1,    /* This creates a conversation window in the official client */
+			302, 5,
+			5, who,
+			303, 5,
+			280, yui->xml);
+	yahoo_packet_send_and_free(pkt, yui->yd);
+}
+
+static void
+yahoo_send_userinfo_foreach(gpointer key, gpointer value, gpointer data)
+{
+	const char *who = key;
+	YahooFriend *f = value;
+
+	if (f->status != YAHOO_STATUS_OFFLINE) {
+		yahoo_send_userinfo_to_user(data, who);
+	}
+}
+
+static void
+yahoo_sent_userinfo_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, size_t len, const gchar *error_message)
+{
+	struct yahoo_userinfo *yui = user_data;
+	yahoo_fetch_aliases_cb(url_data, yui->yd->gc, url_text, len, error_message);
+	g_hash_table_foreach(yui->yd->friends, yahoo_send_userinfo_foreach, yui);
+	g_free(yui->xml);
+	g_free(yui);
+}
+#endif
+
 static void
 yahoo_set_userinfo_cb(PurpleConnection *gc, PurpleRequestFields *fields)
 {
@@ -408,8 +467,8 @@
 	xmlnode_set_attrib(node, "cc", "1");		/* XXX: ? */
 
 	xmlnode_set_attrib(ct, "e", "1");
-	xmlnode_set_attrib(ct, "yi", purple_connection_get_display_name(gc));
-	xmlnode_set_attrib(ct, "id", yd->ypd.id);
+	xmlnode_set_attrib(ct, "yi", purple_request_fields_get_string(fields, "yname"));
+	xmlnode_set_attrib(ct, "id", purple_request_fields_get_string(fields, "yid"));
 	xmlnode_set_attrib(ct, "pr", "0");
 
 	for (i = 0; yfields[i]; i++) {
@@ -418,6 +477,7 @@
 	}
 
 	content = xmlnode_to_formatted_str(node, &len);
+	xmlnode_free(node);
 	purple_url_parse(yd->jp ? YAHOOJP_USERINFO_URL : YAHOO_USERINFO_URL, &webaddress, NULL, &webpage, NULL, NULL);
 
 	request = g_strdup_printf("POST %s HTTP/1.1\r\n"
@@ -433,6 +493,30 @@
 				  len + 4,
 				  content);
 
+#if 0
+	{
+		/* This is if we wanted to send our contact details to everyone
+		 * in the buddylist. But this cannot be done now, because in the
+		 * official messenger, doing this pops a conversation window at
+		 * the receiver's end, which is stupid, and thus not really
+		 * surprising. */
+		struct yahoo_userinfo *ui = g_new(struct yahoo_userinfo, 1);
+		node = xmlnode_new("contact");
+
+		for (i = 0; yfields[i]; i++) {
+			const char *v = purple_request_fields_get_string(fields, yfields[i]);
+			if (v) {
+				xmlnode *nd = xmlnode_new_child(node, yfields[i]);
+				xmlnode_insert_data(nd, v, -1);
+			}
+		}
+
+		ui->yd = yd;
+		ui->xml = xmlnode_to_str(node, NULL);
+		xmlnode_free(node);
+	}
+#endif
+
 	url_data = purple_util_fetch_url_request_len_with_account(account, webaddress, FALSE,
 			YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1,
 			yahoo_fetch_aliases_cb, gc);
@@ -443,28 +527,27 @@
 	g_free(webpage);
 	g_free(content);
 	g_free(request);
-	xmlnode_free(node);
 }
 
-void yahoo_set_userinfo(PurpleConnection *gc)
+static PurpleRequestFields *
+request_fields_from_personal_details(YahooPersonalDetails *ypd, const char *id)
 {
 	PurpleRequestFields *fields;
 	PurpleRequestFieldGroup *group;
 	PurpleRequestField *field;
-	struct yahoo_data *yd = purple_connection_get_protocol_data(gc);
 	int i;
 	struct {
 		char *id;
 		char *text;
 		char *value;
 	} yfields[] = {
-		{"fn", N_("First Name"), yd->ypd.names.first},
-		{"ln", N_("Last Name"), yd->ypd.names.last},
-		{"nn", N_("Nickname"), yd->ypd.names.nick},
-		{"mn", N_("Middle Name"), yd->ypd.names.middle},
-		{"hp", N_("Home Phone Number"), yd->ypd.phone.home},
-		{"wp", N_("Work Phone Number"), yd->ypd.phone.work},
-		{"mo", N_("Mobile Phone Number"), yd->ypd.phone.mobile},
+		{"fn", N_("First Name"), ypd->names.first},
+		{"ln", N_("Last Name"), ypd->names.last},
+		{"nn", N_("Nickname"), ypd->names.nick},
+		{"mn", N_("Middle Name"), ypd->names.middle},
+		{"hp", N_("Home Phone Number"), ypd->phone.home},
+		{"wp", N_("Work Phone Number"), ypd->phone.work},
+		{"mo", N_("Mobile Phone Number"), ypd->phone.mobile},
 		{NULL, NULL, NULL}
 	};
 
@@ -472,15 +555,164 @@
 	group = purple_request_field_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
+	field = purple_request_field_string_new("yname", "", id, FALSE);
+	purple_request_field_set_visible(field, FALSE);
+	purple_request_field_group_add_field(group, field);
+
+	field = purple_request_field_string_new("yid", "", ypd->id, FALSE);
+	purple_request_field_set_visible(field, FALSE);
+	purple_request_field_group_add_field(group, field);
+
 	for (i = 0; yfields[i].id; i++) {
 		field = purple_request_field_string_new(yfields[i].id, _(yfields[i].text),
 				yfields[i].value, FALSE);
 		purple_request_field_group_add_field(group, field);
 	}
 
+	return fields;
+}
+
+void yahoo_set_userinfo_for_buddy(PurpleConnection *gc, PurpleBuddy *buddy)
+{
+	PurpleRequestFields *fields;
+	YahooFriend *f;
+	const char *name;
+
+	name = purple_buddy_get_name(buddy);
+	f = yahoo_friend_find(gc, name);
+	if (!f)
+		return;
+
+	fields = request_fields_from_personal_details(&f->ypd, name);
+	purple_request_fields(gc, NULL, _("Set User Info"), NULL, fields,
+			_("OK"), G_CALLBACK(yahoo_set_userinfo_cb),
+			_("Cancel"), NULL,
+			purple_connection_get_account(gc), NULL, NULL, gc);
+}
+
+void yahoo_set_userinfo(PurpleConnection *gc)
+{
+	struct yahoo_data *yd = purple_connection_get_protocol_data(gc);
+	PurpleRequestFields *fields = request_fields_from_personal_details(&yd->ypd,
+					purple_connection_get_display_name(gc));
 	purple_request_fields(gc, NULL, _("Set User Info"), NULL, fields,
 			_("OK"), G_CALLBACK(yahoo_set_userinfo_cb),
 			_("Cancel"), NULL,
 			purple_connection_get_account(gc), NULL, NULL, gc);
 }
 
+static gboolean
+parse_contact_details(struct yahoo_data *yd, const char *who, const char *xml)
+{
+	xmlnode *node, *nd;
+	YahooFriend *f;
+	char *yid;
+
+	node = xmlnode_from_str(xml, -1);
+	if (!node) {
+		purple_debug_info("yahoo", "Received malformed XML for contact details from '%s':\n%s\n",
+				who, xml);
+		return FALSE;
+	}
+
+	nd = xmlnode_get_child(node, "yi");
+	if (!nd || !(yid = xmlnode_get_data(nd))) {
+		xmlnode_free(node);
+		return FALSE;
+	}
+
+	if (!purple_strequal(yid, who)) {
+		/* The user may not want to set the contact details about folks in the buddylist
+		   to what some random dude might have sent. So it would be good if we popped
+		   up a prompt requiring the user to confirm the details before we set them.
+		   However, someone could send details about hundreds of users at the same time,
+		   which would make things really bad. So for now, until we have a better way of
+		   dealing with this, ignore this details. */
+		purple_debug_info("yahoo", "Ignoring contact details sent by %s about %s\n",
+				who, yid);
+		g_free(yid);
+		xmlnode_free(node);
+		return FALSE;
+	}
+
+	f = yahoo_friend_find(yd->gc, yid);
+	if (!f) {
+		g_free(yid);
+		xmlnode_free(node);
+		return FALSE;
+	} else {
+		int i;
+		YahooPersonalDetails *ypd = &f->ypd;
+		char *alias = NULL;
+		struct {
+			char *id;
+			char **field;
+		} details[] = {
+			{"fn", &ypd->names.first},
+			{"mn", &ypd->names.middle},
+			{"ln", &ypd->names.last},
+			{"nn", &ypd->names.nick},
+			{"wp", &ypd->phone.work},
+			{"hp", &ypd->phone.home},
+			{"mo", &ypd->phone.mobile},
+			{NULL, NULL}
+		};
+
+		yahoo_personal_details_reset(ypd, FALSE);
+
+		for (i = 0; details[i].id; i++) {
+			nd = xmlnode_get_child(node, details[i].id);
+			*details[i].field = nd ? xmlnode_get_data(nd) : NULL;
+		}
+
+		if (ypd->names.nick)
+			alias = ypd->names.nick;
+		else if (ypd->names.first || ypd->names.last) {
+			alias = g_strstrip(g_strdup_printf("%s %s",
+						ypd->names.first ? ypd->names.first : "",
+						ypd->names.last ? ypd->names.last : ""));
+		}
+
+		if (alias) {
+			serv_got_alias(yd->gc, yid, alias);
+			if (alias != ypd->names.nick)
+				g_free(alias);
+		}
+	}
+
+	xmlnode_free(node);
+	g_free(yid);
+	return TRUE;
+}
+
+/* I don't think this happens for MSN buddies. -- sad */
+void yahoo_process_contact_details(PurpleConnection *gc, struct yahoo_packet *pkt)
+{
+	GSList *l = pkt->hash;
+	const char *who = NULL, *xml = NULL;
+	struct yahoo_data *yd = purple_connection_get_protocol_data(gc);
+
+	for (; l; l = l->next) {
+		struct yahoo_pair *pair = l->data;
+		switch (pair->key) {
+			case 4:
+				who = pair->value;	/* This is the person who sent us the details.
+									   But not necessarily about himself. */
+				break;
+			case 5:
+				break;
+			case 13:
+				/* This is '1' if 'who' is sending the contact details about herself,
+				   '0' if 'who' is sending the contact details she has about buddies
+				   in her list. However, in all cases, the xml in key 280 always seems
+				   to contain the yid of the person, so we may as well ignore this field
+				   and look into the xml instead to see who the information is about. */
+				break;
+			case 280:
+				xml = pair->value;
+				parse_contact_details(yd, who, xml);
+				break;
+		}
+	}
+}
+
--- a/libpurple/protocols/yahoo/yahoo_aliases.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_aliases.h	Sat Jul 18 07:26:04 2009 +0000
@@ -36,5 +36,6 @@
 void yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias);
 void yahoo_fetch_aliases(PurpleConnection *gc);
 void yahoo_set_userinfo(PurpleConnection *gc);
-void yahoo_personal_details_reset(YahooPersonalDetails *ypd);
-
+void yahoo_set_userinfo_for_buddy(PurpleConnection *gc, PurpleBuddy *buddy);
+void yahoo_personal_details_reset(YahooPersonalDetails *ypd, gboolean all);
+void yahoo_process_contact_details(PurpleConnection *gc, struct yahoo_packet *pkt);
--- a/libpurple/protocols/yahoo/yahoo_friend.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_friend.c	Sat Jul 18 07:26:04 2009 +0000
@@ -27,6 +27,7 @@
 #include "debug.h"
 
 #include "yahoo_friend.h"
+#include "yahoo_aliases.h"
 
 static YahooFriend *yahoo_friend_new(void)
 {
@@ -124,13 +125,13 @@
 
 void yahoo_friend_set_alias_id(YahooFriend *f, const char *alias_id)
 {
-	g_free(f->alias_id);
-	f->alias_id = g_strdup(alias_id);
+	g_free(f->ypd.id);
+	f->ypd.id = g_strdup(alias_id);
 }
 
 const char *yahoo_friend_get_alias_id(YahooFriend *f)
 {
-	return f->alias_id;
+	return f->ypd.id;
 }
 
 void yahoo_friend_free(gpointer p)
@@ -139,7 +140,7 @@
 	g_free(f->msg);
 	g_free(f->game);
 	g_free(f->ip);
-	g_free(f->alias_id);
+	yahoo_personal_details_reset(&f->ypd, TRUE);
 	g_free(f);
 }
 
--- a/libpurple/protocols/yahoo/yahoo_friend.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_friend.h	Sat Jul 18 07:26:04 2009 +0000
@@ -56,7 +56,7 @@
 	YahooPresenceVisibility presence;
 	int protocol; /* 1=LCS, 2=MSN*/
 	long int version_id;
-	gchar *alias_id;		/* XXX: stick in a YahooPersonalDetails instead? */
+	YahooPersonalDetails ypd;
 	YahooP2PStatus p2p_status;
 	gboolean p2p_packet_sent;	/* 0:not sent, 1=sent */
 	gint session_id;	/* session id of friend */
--- a/libpurple/protocols/yahoo/yahoo_packet.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_packet.h	Sat Jul 18 07:26:04 2009 +0000
@@ -98,6 +98,7 @@
 	YAHOO_SERVICE_AVATAR_UPDATE = 0xc7,
 	YAHOO_SERVICE_VERIFY_ID_EXISTS = 0xc8,
 	YAHOO_SERVICE_AUDIBLE = 0xd0,
+	YAHOO_SERVICE_CONTACT_DETAILS = 0xd3,
 	/* YAHOO_SERVICE_CHAT_SESSION = 0xd4,?? Reports start of chat session, gets an id from server */
 	YAHOO_SERVICE_AUTH_REQ_15 = 0xd6,
 	YAHOO_SERVICE_FILETRANS_15 = 0xdc,
--- a/libpurple/protocols/yahoo/yahoochat.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoochat.c	Sat Jul 18 07:26:04 2009 +0000
@@ -121,12 +121,29 @@
 	char *msg = NULL;
 	GString *members = NULL;
 	GHashTable *components;
+	PurpleConversation *c = NULL;
 
-	if (pkt->status == 2)
-		return; /* XXX */
+	if ( (pkt->status == 2) || (pkt->status == 11) )
+		return; /* Status is 11 when we are being notified about invitation being sent to someone else */
 
 	account = purple_connection_get_account(gc);
 
+	for (l = pkt->hash; l; l = l->next) {
+		struct yahoo_pair *pair = l->data;
+		if (pair->key == 57)
+		{
+			room = yahoo_string_decode(gc, pair->value, FALSE);
+			if((c = yahoo_find_conference(gc, room)))
+			{
+				/* Looks like we got invited to an already open conference. */
+				/* Laters: Should we accept this conference rather than ignoring the invitation ? */
+				purple_debug_info("yahoo","Ignoring invitation for an already existing chat, room:%s\n",room);
+				g_free(room);
+				return;
+			}
+		}
+	}
+
 	members = g_string_sized_new(512);
 
 	for (l = pkt->hash; l; l = l->next) {
@@ -143,8 +160,11 @@
 			who = pair->value;
 			g_string_append_printf(members, "%s\n", who);
 			break;
-		case 52: /* invitee (me) */
-		case 53: /* members */
+		case 51: /* This user is being invited to the conference. Comes with status = 11, so we wont reach here */
+			break;
+		case 52: /* Invited users. Assuming us invited, since we got this packet */
+			break; /* break needed, or else we add the users to the conference before they accept the invitation */
+		case 53: /* members who have already joined the conference */
 			g_string_append_printf(members, "%s\n", pair->value);
 			break;
 		case 58:
@@ -254,7 +274,10 @@
 	if (who && room) {
 		c = yahoo_find_conference(gc, room);
 		if (c)
-			yahoo_chat_add_user(PURPLE_CONV_CHAT(c), who, NULL);
+		{	/* Prevent duplicate users in the chat */
+			if( !purple_conv_chat_find_user(PURPLE_CONV_CHAT(c), who) )
+				yahoo_chat_add_user(PURPLE_CONV_CHAT(c), who, NULL);
+		}
 		g_free(room);
 	}
 }
--- a/libpurple/sslconn.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/sslconn.c	Sat Jul 18 07:26:04 2009 +0000
@@ -100,6 +100,15 @@
 				 PurpleSslInputFunction func, PurpleSslErrorFunction error_func,
 				 void *data)
 {
+	return purple_ssl_connect_with_ssl_cn(account, host, port, func, error_func,
+	                                  NULL, data);
+}
+
+PurpleSslConnection *
+purple_ssl_connect_with_ssl_cn(PurpleAccount *account, const char *host, int port,
+				 PurpleSslInputFunction func, PurpleSslErrorFunction error_func,
+				 const char *ssl_cn, void *data)
+{
 	PurpleSslConnection *gsc;
 
 	g_return_val_if_fail(host != NULL,            NULL);
@@ -116,7 +125,7 @@
 	gsc = g_new0(PurpleSslConnection, 1);
 
 	gsc->fd              = -1;
-	gsc->host            = g_strdup(host);
+	gsc->host            = ssl_cn ? g_strdup(ssl_cn) : g_strdup(host);
 	gsc->port            = port;
 	gsc->connect_cb_data = data;
 	gsc->connect_cb      = func;
--- a/libpurple/sslconn.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/sslconn.h	Sat Jul 18 07:26:04 2009 +0000
@@ -186,6 +186,31 @@
 									PurpleSslErrorFunction error_func,
 									void *data);
 
+/**
+ * Makes a SSL connection to the specified host and port, using the separate
+ * name to verify with the certificate.  The caller should keep track of the
+ * returned value and use it to cancel the connection, if needed.
+ *
+ * @param account    The account making the connection.
+ * @param host       The destination host.
+ * @param port       The destination port.
+ * @param func       The SSL input handler function.
+ * @param error_func The SSL error handler function.  This function
+ *                   should <strong>NOT</strong> call purple_ssl_close().  In
+ *                   the event of an error the #PurpleSslConnection will be
+ *                   destroyed for you.
+ * @param ssl_host   The hostname of the other peer (to verify the CN)
+ * @param data       User-defined data.
+ *
+ * @return The SSL connection handle.
+ * @since 2.6.0
+ */
+PurpleSslConnection *purple_ssl_connect_with_ssl_cn(PurpleAccount *account, const char *host,
+									int port, PurpleSslInputFunction func,
+									PurpleSslErrorFunction error_func,
+									const char *ssl_host,
+									void *data);
+
 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_SSLCONN_C_)
 /**
  * Makes a SSL connection using an already open file descriptor.
--- a/libpurple/tests/test_jabber_jutil.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/tests/test_jabber_jutil.c	Sat Jul 18 07:26:04 2009 +0000
@@ -44,6 +44,10 @@
 	longnode = g_strnfill(1023, 'a');
 	fail_unless(jabber_nodeprep_validate(longnode));
 	g_free(longnode);
+
+	longnode = g_strnfill(1024, 'a');
+	fail_if(jabber_nodeprep_validate(longnode));
+	g_free(longnode);
 }
 END_TEST
 
@@ -80,6 +84,17 @@
 	jabber_id_free(jid); \
 }
 
+#define assert_jid_parts(expect_node, expect_domain, str) { \
+	JabberID *jid = jabber_id_new(str); \
+	fail_if(jid == NULL, "JID '%s' is valid but jabber_id_new() rejected it", str); \
+	fail_if(jid->node == NULL,     "JID '%s' is valid but jabber_id_new() didn't return a node", str); \
+	fail_if(jid->domain == NULL,   "JID '%s' is valid but jabber_id_new() didn't return a domain", str); \
+	fail_if(jid->resource != NULL, "JID '%s' doesn't contain a resource", str); \
+	assert_string_equal(expect_node, jid->node); \
+	assert_string_equal(expect_domain, jid->domain); \
+	jabber_id_free(jid); \
+}
+
 START_TEST(test_jabber_id_new)
 {
 	assert_valid_jid("gmail.com");
@@ -117,6 +132,24 @@
 	assert_invalid_jid("mark.doliner@gmail\\stuff.org");
 	assert_invalid_jid("paul@[::1]124");
 	assert_invalid_jid("paul@2[::1]124/as");
+
+	/* Ensure that jabber_id_new is properly lowercasing node and domains */
+	assert_jid_parts("paul", "darkrain42.org", "PaUL@darkrain42.org");
+	assert_jid_parts("paul", "darkrain42.org", "paul@DaRkRaIn42.org");
+
+	/* These case-mapping tests culled from examining RFC3454 B.2 */
+
+	/* Cyrillic capital EF (U+0424) maps to lowercase EF (U+0444) */
+	assert_jid_parts("ф", "darkrain42.org", "Ф@darkrain42.org");
+	/*
+	 * These character (U+A664 and U+A665) are not mapped to anything in
+	 * RFC3454 B.2. This first test *fails* when not using IDN because glib's
+	 * case-folding/utf8_strdown improperly lowercases the character.
+	 */
+	assert_jid_parts("Ꙥ", "darkrain42.org", "Ꙥ@darkrain42.org");
+	assert_jid_parts("ꙥ", "darkrain42.org", "ꙥ@darkrain42.org");
+	/* U+04E9 to U+04E9 */
+	assert_jid_parts("paul", "өarkrain42.org", "paul@Өarkrain42.org");
 }
 END_TEST
 
--- a/libpurple/win32/libc_internal.h	Sat Jul 18 04:31:38 2009 +0000
+++ b/libpurple/win32/libc_internal.h	Sat Jul 18 07:26:04 2009 +0000
@@ -120,10 +120,14 @@
 # define ifc_req ifc_ifcu.ifcu_req /* Array of structures.  */
 
 /* sys/time.h */
+#if __MINGW32_MAJOR_VERSION < 3 || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION < 10)
 struct timezone {
 	int tz_minuteswest;
 	int tz_dsttime;
 };
+#else
+#    include <sys/time.h>
+#endif
 int wpurple_gettimeofday(struct timeval *p, struct timezone *z);
 
 /* time.h */
--- a/pidgin/gtkdialogs.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/pidgin/gtkdialogs.c	Sat Jul 18 07:26:04 2009 +0000
@@ -76,7 +76,7 @@
 	{"Paul 'darkrain42' Aurich",	NULL, NULL },
 	{"John 'rekkanoryo' Bailey",	N_("bug master"), NULL},
 	{"Ethan 'Paco-Paco' Blanton",	NULL, NULL},
-	{"Hylke Bons",			N_("artist"), "h.bons@student.rug.nl"},
+	{"Hylke Bons",			N_("artist"), "hylkebons@gmail.com"},
 	{"Thomas Butter",				NULL, NULL},
 	/* feel free to not translate this */
 	{N_("Ka-Hing Cheung"),			NULL, NULL},
--- a/pidgin/gtkutils.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/pidgin/gtkutils.c	Sat Jul 18 07:26:04 2009 +0000
@@ -3736,10 +3736,9 @@
 		return;
 	}
 
-	if (!g_file_set_contents(file, contents, length, &error)) {
-		purple_debug_error("gtkutils", "Unable to write contents to %s: %s\n",
-		                   file, error->message);
-		g_error_free(error);
+	if (!purple_util_write_data_to_file_absolute(file, contents, length)) {
+		purple_debug_error("gtkutils", "Unable to write contents to %s\n",
+		                   file);
 	}
 }
 
--- a/pidgin/plugins/notify.c	Sat Jul 18 04:31:38 2009 +0000
+++ b/pidgin/plugins/notify.c	Sat Jul 18 07:26:04 2009 +0000
@@ -572,6 +572,9 @@
 static void
 handle_present(PurpleConversation *conv)
 {
+	if (pidgin_conv_is_hidden(PIDGIN_CONVERSATION(conv)))
+		return;
+
 	purple_conversation_present(conv);
 }
 
--- a/pidgin/win32/nsis/pidgin-installer.nsi	Sat Jul 18 04:31:38 2009 +0000
+++ b/pidgin/win32/nsis/pidgin-installer.nsi	Sat Jul 18 07:26:04 2009 +0000
@@ -714,13 +714,16 @@
     Delete "$INSTDIR\ca-certs\CAcert_Class3.pem"
     Delete "$INSTDIR\ca-certs\CAcert_Root.pem"
     Delete "$INSTDIR\ca-certs\Equifax_Secure_CA.pem"
+    Delete "$INSTDIR\ca-certs\Equifax_Secure_Global_eBusiness_CA-1.pem"
     Delete "$INSTDIR\ca-certs\GTE_CyberTrust_Global_Root.pem"
     Delete "$INSTDIR\ca-certs\Microsoft_Internet_Authority.pem"
     Delete "$INSTDIR\ca-certs\Microsoft_Secure_Server_Authority.pem"
     Delete "$INSTDIR\ca-certs\StartCom_Certification_Authority.pem"
     Delete "$INSTDIR\ca-certs\StartCom_Free_SSL_CA.pem"
+	Delete "$INSTDIR\ca-certs\VeriSign_Class3_Extended_Validation_CA.pem"
     Delete "$INSTDIR\ca-certs\Verisign_Class3_Primary_CA.pem"
     Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem"
+	Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem"
     Delete "$INSTDIR\ca-certs\VeriSign_International_Server_Class_3_CA.pem"
     Delete "$INSTDIR\ca-certs\Verisign_RSA_Secure_Server_CA.pem"
     RMDir "$INSTDIR\ca-certs"
--- a/po/fi.po	Sat Jul 18 04:31:38 2009 +0000
+++ b/po/fi.po	Sat Jul 18 07:26:04 2009 +0000
@@ -10,8 +10,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-06 15:04-0700\n"
-"PO-Revision-Date: 2009-07-05 01:14+0300\n"
+"POT-Creation-Date: 2009-07-16 21:37+0300\n"
+"PO-Revision-Date: 2009-07-16 21:36+0300\n"
 "Last-Translator: Timo Jyrinki <timo.jyrinki@iki.fi>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -1776,7 +1776,6 @@
 msgstr "+++ %s kirjautui ulos"
 
 #. Unknown error
-#. Unknown error!
 msgid "Unknown error"
 msgstr "Tuntematon virhe"
 
@@ -1964,6 +1963,10 @@
 msgstr "Aloitetaan tiedoston %s siirto käyttäjältä %s"
 
 #, c-format
+msgid "Transfer of file <A HREF=\"file://%s\">%s</A> complete"
+msgstr "Tiedoston <A HREF=\"file://%s\">%s</A> siirto valmis"
+
+#, c-format
 msgid "Transfer of file %s complete"
 msgstr "Tiedoston %s siirto valmis"
 
@@ -2893,18 +2896,15 @@
 "ActiveTCL-asennusta ei havaittu. Jos haluat käyttää TCL-liitännäisiä, asenna "
 "ActiveTCL osoitteesta http://www.activestate.com\n"
 
-#, fuzzy
 msgid ""
 "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin."
 "im/BonjourWindows for more information."
 msgstr ""
-"Apple Bonjour for Windows -työkalupakettia ei löytynyt, tarkista usein "
-"kysytyt kysymykset osoitteessa http://developer.pidgin.im/wiki/Using%"
-"20Pidgin#CanIusePidginforBonjourLink-LocalMessaging ."
-
-#, fuzzy
+"Applen ”Bonjour for Windows” -työkalupakettia ei löytynyt, katso lisätietoja "
+"osoitteesta http://d.pidgin.im/BonjourWindows."
+
 msgid "Unable to listen for incoming IM connections"
-msgstr "Sisääntulevia pikaviestintäyhteyksiä ei voi kuunnella\n"
+msgstr "Sisääntulevia pikaviestintäyhteyksiä ei voi kuunnella"
 
 msgid ""
 "Unable to establish connection with the local mDNS server.  Is it running?"
@@ -2956,21 +2956,17 @@
 msgid "Unable to send the message, the conversation couldn't be started."
 msgstr "Viestiä ei voi lähettää, keskustelua ei voi aloittaa."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to create socket: %s"
-msgstr ""
-"Pistokkeen luonti epäonnistui:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Pistokkeen luonti epäonnistui: %s"
+
+#, c-format
 msgid "Unable to bind socket to port: %s"
-msgstr "Pistoketta ei voi liittää porttiin"
-
-#, fuzzy, c-format
+msgstr "Pistoketta ei voi liittää porttiin: %s"
+
+#, c-format
 msgid "Unable to listen on socket: %s"
-msgstr ""
-"Pistokkeen luonti epäonnistui:\n"
-"%s"
+msgstr "Pistokkeen kuuntelu epäonnistui: %s"
 
 msgid "Error communicating with local mDNSResponder."
 msgstr "Virhe viestittäessä paikallisen mDNSResponderin kanssa."
@@ -3018,17 +3014,15 @@
 msgid "Load buddylist from file..."
 msgstr "Tuo tuttavat tiedostosta..."
 
-#, fuzzy
 msgid "You must fill in all registration fields"
-msgstr "Täytä rekisteröitymiskentät."
-
-#, fuzzy
+msgstr "Täytä kaikki rekisteröitymiskentät"
+
 msgid "Passwords do not match"
-msgstr "Salasanat eivät täsmää."
-
-#, fuzzy
+msgstr "Salasanat eivät täsmää"
+
 msgid "Unable to register new account.  An unknown error occurred."
-msgstr "Uuden käyttäjätilin rekisteröinti epäonnistui virheen takia.\n"
+msgstr ""
+"Uuden käyttäjätilin rekisteröinti epäonnistui tuntemattoman virheen takia."
 
 msgid "New Gadu-Gadu Account Registered"
 msgstr "Uusi Gadu-Gadu-käyttäjätili rekisteröity"
@@ -3043,11 +3037,10 @@
 msgstr "Salasana (uudelleen)"
 
 msgid "Enter captcha text"
-msgstr ""
-
-#, fuzzy
+msgstr "Syötä captcha-teksti"
+
 msgid "Captcha"
-msgstr "Captcha-kuva"
+msgstr "Captcha"
 
 msgid "Register New Gadu-Gadu Account"
 msgstr "Rekisteröi uusi Gadu-Gadu-käyttäjätili"
@@ -3186,9 +3179,9 @@
 msgid "Chat _name:"
 msgstr "Keskustelunimi:"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to resolve hostname '%s': %s"
-msgstr "Ei kyetty selvittämään palvelimen nimeä."
+msgstr "Ei kyetty selvittämään palvelimen nimeä ”%s”: %s"
 
 #. 1. connect to server
 #. connect to the server
@@ -3201,9 +3194,8 @@
 msgid "This chat name is already in use"
 msgstr "Tämä keskustelunimi on jo käytössä"
 
-#, fuzzy
 msgid "Not connected to the server"
-msgstr "Ei yhdistettynä palvelimeen."
+msgstr "Ei yhdistettynä palvelimeen"
 
 msgid "Find buddies..."
 msgstr "Etsi tuttavia..."
@@ -3261,7 +3253,6 @@
 msgid "File Transfer Failed"
 msgstr "Tiedostonsiirto epäonnistui"
 
-#, fuzzy
 msgid "Unable to open a listening port."
 msgstr "Kuuntelevaa porttia ei voi avata."
 
@@ -3285,11 +3276,9 @@
 #.
 #. TODO: what to do here - do we really have to disconnect?
 #. TODO: do we really want to disconnect on a failure to write?
-#, fuzzy, c-format
+#, c-format
 msgid "Lost connection with server: %s"
-msgstr ""
-"Yhteys palvelimeen katkesi:\n"
-"%s"
+msgstr "Yhteys palvelimeen katkesi: %s"
 
 msgid "View MOTD"
 msgstr "Näytä MOTD"
@@ -3310,13 +3299,13 @@
 msgstr "Yhteyden muodostaminen epäonnistui"
 
 #. this is a regular connect, error out
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect: %s"
-msgstr "Kohteeseen %s ei kyetty muodostamaan yhteyttä"
-
-#, fuzzy, c-format
+msgstr "Ei voi yhdistää: %s"
+
+#, c-format
 msgid "Server closed the connection"
-msgstr "Palvelin on katkaissut yhteyden."
+msgstr "Palvelin on katkaissut yhteyden"
 
 msgid "Users"
 msgstr "Käyttäjät"
@@ -3743,11 +3732,9 @@
 msgid "execute"
 msgstr "suorita"
 
-#, fuzzy
 msgid "Server requires TLS/SSL, but no TLS/SSL support was found."
-msgstr "Palvelin vaatii TSL/SSL-tuen kirjautumiseen. TLS/SSL-tukea ei löydy."
-
-#, fuzzy
+msgstr "Palvelin vaatii TSL/SSL-tuen, mutta TLS/SSL-tukea ei löydy."
+
 msgid "You require encryption, but no TLS/SSL support was found."
 msgstr "Salausta vaadittu, mutta TLS/SSL-tukea ei löydy."
 
@@ -3766,13 +3753,11 @@
 msgid "Plaintext Authentication"
 msgstr "Tekstipohjainen tunnistus"
 
-#, fuzzy
 msgid "SASL authentication failed"
-msgstr "Todennus epäonnistui"
-
-#, fuzzy
+msgstr "SASL-todennus epäonnistui"
+
 msgid "Invalid response from server"
-msgstr "Kelvoton vastaus palvelimelta."
+msgstr "Kelvoton vastaus palvelimelta"
 
 msgid "Server does not use any supported authentication method"
 msgstr "Palvelin ei käytä mitään tuetuista tunnistautumismenetelmistä"
@@ -3783,9 +3768,9 @@
 msgid "Invalid challenge from server"
 msgstr "Virheellinen tunnistushaaste palvelimelta"
 
-#, fuzzy, c-format
+#, c-format
 msgid "SASL error: %s"
-msgstr "SASL-virhe"
+msgstr "SASL-virhe: %s"
 
 msgid "The BOSH connection manager terminated your session."
 msgstr "BOSH-yhteyshallinta lopetti istunnon."
@@ -3799,9 +3784,9 @@
 msgid "Unable to establish a connection with the server"
 msgstr "Yhteyttä palvelimeen ei voi muodostaa"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to establish a connection with the server: %s"
-msgstr "Yhteyttä palvelimeen ei voi muodostaa"
+msgstr "Yhteyttä palvelimeen ei voi muodostaa: %s"
 
 msgid "Unable to establish SSL connection"
 msgstr "SSL-yhteyden muodostaminen ei onnistu"
@@ -3885,7 +3870,6 @@
 msgid "%s ago"
 msgstr "%s sitten"
 
-#, fuzzy
 msgid "Logged Off"
 msgstr "Kirjautunut ulos"
 
@@ -4064,17 +4048,15 @@
 msgid "Roles:"
 msgstr "Roolit:"
 
-#, fuzzy
 msgid "Ping timed out"
 msgstr "Pingin aikakatkaisu"
 
-#, fuzzy
 msgid ""
 "Unable to find alternative XMPP connection methods after failing to connect "
 "directly."
 msgstr ""
 "Vaihtoehtoisia XMPP-yhteystapoja ei löytynyt suoran yhdistämisen "
-"epäonnistumisen jälkeen.\n"
+"epäonnistumisen jälkeen."
 
 msgid "Invalid XMPP ID"
 msgstr "Epäkelpo XMPP-ID"
@@ -4654,17 +4636,16 @@
 msgid "_Accept Defaults"
 msgstr "_Hyväksy oletusasetukset"
 
-#, fuzzy
 msgid "No reason"
 msgstr "Syytä ei annettu"
 
-#, fuzzy, c-format
+#, c-format
 msgid "You have been kicked: (%s)"
-msgstr "%s on poistanut sinut kanavalta: (%s)"
-
-#, fuzzy, c-format
+msgstr "Sinut on potkaistu kanavalta: (%s)"
+
+#, c-format
 msgid "Kicked (%s)"
-msgstr "%s potkaisi (%s)"
+msgstr "Potkaisi (%s)"
 
 msgid "An error occurred on the in-band bytestream transfer\n"
 msgstr "Kaistansisäisessä tavuvirtasiirrossa tapahtui virhe\n"
@@ -5000,6 +4981,26 @@
 msgstr "Pikaviestittömät yhteystiedot"
 
 #, c-format
+msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>"
+msgstr ""
+"%s lähetti animoidun hymiön. <a href='msn-wink://%s'>Napsauta tästä "
+"toistaaksesi sen</a>"
+
+#, c-format
+msgid "%s sent a wink, but it could not be saved"
+msgstr "%s lähetti animoidun hymiön, mutta sitä ei voi tallentaa"
+
+#, c-format
+msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>"
+msgstr ""
+"%s lähetti äänipätkän. <a href='audio://%s'>Napsauta tässä toistaaksesi sen</"
+"a>"
+
+#, c-format
+msgid "%s sent a voice clip, but it could not be saved"
+msgstr "%s on lähettänyt äänipätkän, mutta sitä ei voi tallentaa"
+
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
 msgstr "%s on lähettänyt puhekeskustelukutsun, mitä ei vielä tueta."
 
@@ -5155,6 +5156,29 @@
 msgid "SSL support is needed for MSN. Please install a supported SSL library."
 msgstr "MSN vaatii SSL-tuen. Asenna tuettu SSL-kirjasto."
 
+#, c-format
+msgid ""
+"Unable to add the buddy %s because the username is invalid.  Usernames must "
+"be a valid email address."
+msgstr ""
+"Tuttavaa %s ei voi lisätä koska käyttäjänimi on virheellinen. Käyttäjänimen "
+"tulee olla oikea sähköpostiosoite."
+
+msgid "Unable to Add"
+msgstr "Lisääminen epäonnistui"
+
+msgid "Authorization Request Message:"
+msgstr "Valtuutuksen pyyntöviesti:"
+
+msgid "Please authorize me!"
+msgstr "Voisitko valtuuttaa minut?"
+
+#. *
+#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
+#.
+msgid "_OK"
+msgstr "_OK"
+
 msgid "Error retrieving profile"
 msgstr "Virhe haettaessa profiilia"
 
@@ -5353,6 +5377,7 @@
 msgid "Unable to add user"
 msgstr "Käyttäjää ei voi lisätä"
 
+#. Unknown error!
 #, c-format
 msgid "Unknown error (%d)"
 msgstr "Tuntematon virhe (%d)"
@@ -5421,26 +5446,22 @@
 "Yhteysvirhe palvelimelta %s:\n"
 "%s"
 
-#, fuzzy
 msgid "Our protocol is not supported by the server"
-msgstr "Palvelin ei tue yhteyskäytäntöä."
-
-#, fuzzy
+msgstr "Palvelin ei tue tämän ohjelman yhteyskäytäntöä."
+
 msgid "Error parsing HTTP"
-msgstr "Virhe jäsennettäessä HTTP:tä."
-
-#, fuzzy
+msgstr "Virhe jäsennettäessä HTTP:tä"
+
 msgid "You have signed on from another location"
-msgstr "Olet kirjautunut sisään toisesta paikasta."
+msgstr "Olet kirjautunut sisään toisesta paikasta"
 
 msgid "The MSN servers are temporarily unavailable. Please wait and try again."
 msgstr ""
 "MSN-palvelimet ovat väliaikaisesti tavoittamattomissa. Odota ja yritä "
 "uudelleen."
 
-#, fuzzy
 msgid "The MSN servers are going down temporarily"
-msgstr "MSN-palvelimet ajetaan alas väliaikaisesti."
+msgstr "MSN-palvelimet ajetaan alas väliaikaisesti"
 
 #, c-format
 msgid "Unable to authenticate: %s"
@@ -5767,15 +5788,14 @@
 msgid "Client Version"
 msgstr "Asiakasohjelman versio"
 
-#, fuzzy
 msgid ""
 "An error occurred while trying to set the username.  Please try again, or "
 "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
 "to set your username."
 msgstr ""
-"Mene osoitteeseen http://editprofile.myspace.com/index.cfm?"
-"fuseaction=profile.username ja valitse käyttäjänimesi. Kirjaudu sitten "
-"uudestaan."
+"Virhe asetettaessa käyttäjänimeä. Yritä uudelleen tai mene osoitteeseen "
+"http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
+"valitaksesi käyttäjänimen."
 
 msgid "MySpaceIM - Username Available"
 msgstr "MySpaceIM - Käyttäjänimi saatavilla"
@@ -6035,9 +6055,9 @@
 msgid "Unknown error: 0x%X"
 msgstr "Tuntematon virhe: 0x%X"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "Ei voi kirjautua"
+msgstr "Kirjautuminen ei onnistu: %s"
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
@@ -6214,9 +6234,8 @@
 msgid "Error requesting "
 msgstr "Virhe pyydettäessä "
 
-#, fuzzy
 msgid "AOL does not allow your screen name to authenticate here"
-msgstr "AOL ei salli näyttönimen todentamista tämän sivuston kautta."
+msgstr "AOL ei salli näyttönimen todentamista tätä kautta"
 
 msgid "Could not join chat room"
 msgstr "Keskusteluhuoneeseen ei voi liittyä"
@@ -6224,9 +6243,8 @@
 msgid "Invalid chat room name"
 msgstr "Epäkelpo keskusteluhuoneen nimi"
 
-#, fuzzy
 msgid "Received invalid data on connection with server"
-msgstr "Palvelimeen yhdistettäessä vastaanotettiin virheellisiä tietoja."
+msgstr "Palvelimeen yhdistettäessä vastaanotettiin virheellisiä tietoja"
 
 #. *< type
 #. *< ui_requirement
@@ -6273,9 +6291,8 @@
 msgid "Received invalid data on connection with remote user."
 msgstr "Vastaanotettiin virheellisiä tietoja luotaessa yhteyttä käyttäjään."
 
-#, fuzzy
 msgid "Unable to establish a connection with the remote user."
-msgstr "Yhteyttä käyttäjän kanssa ei voi muodostaa."
+msgstr "Yhteyttä etäkäyttäjän kanssa ei voi muodostaa."
 
 msgid "Direct IM established"
 msgstr "Suora pikaviestiyhteys muodostettu"
@@ -6476,15 +6493,13 @@
 msgid "Buddy Comment"
 msgstr "Tuttavakommentti"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect to authentication server: %s"
-msgstr ""
-"Ei saatu yhteyttä todentamispalvelimeen:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Ei saatu yhteyttä todentamispalvelimeen: %s"
+
+#, c-format
 msgid "Unable to connect to BOS server: %s"
-msgstr "Palvelimeen ei kyetty muodostamaan yhteyttä."
+msgstr "BOS-palvelimeen ei kyetty muodostamaan yhteyttä: %s"
 
 msgid "Username sent"
 msgstr "Käyttäjänimi lähetetty"
@@ -6496,16 +6511,16 @@
 msgid "Finalizing connection"
 msgstr "Viimeistellään yhteyttä"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to sign on as %s because the username is invalid.  Usernames must be "
 "a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-"Kirjautuminen epäonnistui: käyttäjänä %s ei voi kirjautua koska käyttäjänimi "
-"on virheellinen. Käyttäjänimen tulee olla oikea sähköpostiosoite, tai alkaa "
-"kirjaimella ja sisältää vain kirjaimia, numeroita ja välilyöntejä, tai "
-"sisältää vain numeroita."
+"Kirjautuminen epäonnistui käyttäjänä %s, koska käyttäjänimi on virheellinen. "
+"Käyttäjänimen tulee olla oikea sähköpostiosoite, tai alkaa kirjaimella ja "
+"sisältää vain kirjaimia, numeroita ja välilyöntejä, tai sisältää vain "
+"numeroita."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -6528,14 +6543,14 @@
 msgstr "Käyttäjänimeä ei ole"
 
 #. Suspended account
-#, fuzzy
 msgid "Your account is currently suspended"
-msgstr "Käyttäjätilisi palvelu on parhaillaan keskeytetty."
+msgstr "Käyttäjätilisi palvelu on parhaillaan keskeytetty"
 
 #. service temporarily unavailable
 msgid "The AOL Instant Messenger service is temporarily unavailable."
 msgstr "AOL-pikaviestipalvelu ei tilapäisesti ole käytössä."
 
+#. client too old
 #, c-format
 msgid "The client version you are using is too old. Please upgrade at %s"
 msgstr "Asiakasohjelmasi versio on liian vanha. Päivitä osoitteessa %s"
@@ -6548,9 +6563,8 @@
 "Olet ottanut ja katkaissut yhteyden liian tiheästi. Odota jonkin aikaa ja "
 "yritä uudelleen. Jos jatkat yrittämistä, joudut odottamaan vielä pidempään."
 
-#, fuzzy
 msgid "The SecurID key entered is invalid"
-msgstr "Syötetty SecurID-avain on virheellinen."
+msgstr "Syötetty SecurID-avain on virheellinen"
 
 msgid "Enter SecurID"
 msgstr "Syötä SecurID"
@@ -6558,12 +6572,6 @@
 msgid "Enter the 6 digit number from the digital display."
 msgstr "Syötä 6 numeroinen luku digitaaliselta näytöltä."
 
-#. *
-#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
-#.
-msgid "_OK"
-msgstr "_OK"
-
 msgid "Password sent"
 msgstr "Salasana lähetetty"
 
@@ -6573,12 +6581,6 @@
 msgid "Please authorize me so I can add you to my buddy list."
 msgstr "Valtuuttaisitko minut, jotta voin lisätä sinut tuttaviini?"
 
-msgid "Authorization Request Message:"
-msgstr "Valtuutuksen pyyntöviesti:"
-
-msgid "Please authorize me!"
-msgstr "Voisitko valtuuttaa minut?"
-
 msgid "No reason given."
 msgstr "Syytä ei annettu."
 
@@ -6900,7 +6902,7 @@
 msgid "Away message too long."
 msgstr "Poissaoloviesti on liian pitkä."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be a valid email address, or start with a letter and contain only letters, "
@@ -6910,9 +6912,6 @@
 "tulee olla oikea sähköpostiosoite, tai alkaa kirjaimella ja sisältää vain "
 "kirjaimia, numeroita ja välilyöntejä, tai sisältää vain numeroita."
 
-msgid "Unable to Add"
-msgstr "Lisääminen epäonnistui"
-
 msgid "Unable to Retrieve Buddy List"
 msgstr "Tuttavien noutaminen ei onnistunut"
 
@@ -6927,18 +6926,18 @@
 msgid "Orphans"
 msgstr "Orvot"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because you have too many buddies in your buddy "
 "list.  Please remove one and try again."
 msgstr ""
-"Tuttavaa %s ei voi lisätä koska tuttaviasi on liian monta. Ole hyvä ja "
-"poista joku ja yritä uudelleen."
+"Tuttavaa %s ei voi lisätä koska tuttavia on liian monta. Ole hyvä ja poista "
+"joku ja yritä uudelleen."
 
 msgid "(no name)"
 msgstr "(nimetön)"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add the buddy %s for an unknown reason."
 msgstr "Tuttavaa %s ei voi lisätä tuntemattomasta syystä."
 
@@ -7710,7 +7709,6 @@
 msgid "Update interval (seconds)"
 msgstr "Päivitysten aikaväli (sekunneissa)"
 
-#, fuzzy
 msgid "Unable to decrypt server reply"
 msgstr "Palvelinvastauksen salausta ei voi purkaa"
 
@@ -7778,9 +7776,8 @@
 msgid "Requesting token"
 msgstr "Pyydetään polettia"
 
-#, fuzzy
 msgid "Unable to resolve hostname"
-msgstr "Ei kyetty selvittämään palvelimen nimeä."
+msgstr "Ei kyetty selvittämään palvelimen nimeä"
 
 msgid "Invalid server or port"
 msgstr "Epäkelpo palvelin tai portti"
@@ -7833,7 +7830,6 @@
 msgid "QQ Qun Command"
 msgstr "QQ-Qun-komento"
 
-#, fuzzy
 msgid "Unable to decrypt login reply"
 msgstr "Kirjautumisvastauksen salausta ei voi purkaa"
 
@@ -8814,7 +8810,6 @@
 msgid "Disconnected by server"
 msgstr "Palvelin katkaisi yhteyden"
 
-#, fuzzy
 msgid "Error connecting to SILC Server"
 msgstr "Virhe luotaessa yhteyttä SILC-palvelimelle"
 
@@ -8830,7 +8825,6 @@
 msgid "Performing key exchange"
 msgstr "Suoritetaan avaintenvaihto"
 
-#, fuzzy
 msgid "Unable to load SILC key pair"
 msgstr "SILC-avainparia ei voi ladata"
 
@@ -8838,14 +8832,12 @@
 msgid "Connecting to SILC Server"
 msgstr "Yhdistetään SILC-palvelimelle"
 
-#, fuzzy
 msgid "Unable to not load SILC key pair"
-msgstr "SILC-avainparia ei voi ladata"
+msgstr "SILC-avainparin lataamatta jättäminen ei onnistu"
 
 msgid "Out of memory"
 msgstr "Muisti loppu"
 
-#, fuzzy
 msgid "Unable to initialize SILC protocol"
 msgstr "SILC-yhteyskäytäntöä ei voi alustaa"
 
@@ -9138,9 +9130,8 @@
 msgid "Creating SILC key pair..."
 msgstr "Luodaan SILC-avainpari..."
 
-#, fuzzy
 msgid "Unable to create SILC key pair"
-msgstr "SILC-avainparia ei voi luoda\n"
+msgstr "SILC-avainparia ei voi luoda"
 
 #. Hint for translators: Please check the tabulator width here and in
 #. the next strings (short strings: 2 tabs, longer strings 1 tab,
@@ -9279,27 +9270,24 @@
 msgid "Failure: Authentication failed"
 msgstr "Virhe: Todennus epäonnistui"
 
-#, fuzzy
 msgid "Unable to initialize SILC Client connection"
 msgstr "SILC-asiakasyhteyttä ei voi alustaa"
 
 msgid "John Noname"
 msgstr "Pertti Perusnimi"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to load SILC key pair: %s"
 msgstr "SILC-avainparia ei voi ladata: %s"
 
 msgid "Unable to create connection"
 msgstr "Yhteyden luominen epäonnistui"
 
-#, fuzzy
 msgid "Unknown server response"
-msgstr "Tuntematon palvelinvastaus."
-
-#, fuzzy
+msgstr "Tuntematon palvelinvastaus"
+
 msgid "Unable to create listen socket"
-msgstr "Pistokkeen luonti epäonnistui"
+msgstr "Kuuntelupistokkeen luonti epäonnistui"
 
 msgid "SIP usernames may not contain whitespaces or @ symbols"
 msgstr "SIP-käyttäjänimissä ei tule olla välilyöntejä tai @-merkkejä"
@@ -9362,9 +9350,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! Protocol Plugin"
-msgstr "Yahoo-yhteyskäytäntöliitännäinen"
+msgstr "Yahoo!-yhteyskäytäntöliitännäinen"
 
 msgid "Pager server"
 msgstr "Hakulaitepalvelin"
@@ -9393,9 +9380,8 @@
 msgid "Yahoo Chat port"
 msgstr "Yahoo-ryhmäkeskustelupalvelimen portti"
 
-#, fuzzy
 msgid "Yahoo JAPAN ID..."
-msgstr "Yahoo ID..."
+msgstr "Yahoo JAPAN ID..."
 
 #. *< type
 #. *< ui_requirement
@@ -9407,9 +9393,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! JAPAN Protocol Plugin"
-msgstr "Yahoo-yhteyskäytäntöliitännäinen"
+msgstr "Yahoo! JAPAN -yhteyskäytäntöliitännäinen"
 
 msgid "Your SMS was not delivered"
 msgstr "Tekstiviestiä (SMS) ei välitetty"
@@ -9442,22 +9427,20 @@
 msgstr "Vastaanotettiin virheellisiä tietoja"
 
 #. security lock from too many failed login attempts
-#, fuzzy
 msgid ""
 "Account locked: Too many failed login attempts.  Logging into the Yahoo! "
 "website may fix this."
 msgstr ""
-"Käyttäjätili lukittu: liian monta epäonnistuttu kirjautumisyritystä.\n"
-"Yahoo!-WWW-sivustolle kirjautuminen saatta korjata tämän."
+"Käyttäjätili lukittu: liian monta epäonnistuttu kirjautumisyritystä. Yahoo!-"
+"WWW-sivustolle kirjautuminen saatta korjata tämän."
 
 #. indicates a lock of some description
-#, fuzzy
 msgid ""
 "Account locked: Unknown reason.  Logging into the Yahoo! website may fix "
 "this."
 msgstr ""
-"Käyttäjätili lukittu: tuntematon syy.\n"
-"Yahoo!-WWW-sivustolle kirjautuminen saatta korjata tämän."
+"Käyttäjätili lukittu: tuntematon syy. Yahoo!-WWW-sivustolle kirjautuminen "
+"saatta korjata tämän."
 
 #. username or password missing
 msgid "Username or password missing"
@@ -9497,12 +9480,11 @@
 "Tuntematon viesti numero %d. Kirjautumalla Yahoo! verkkosivuille saattaa "
 "korjata tämän."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add buddy %s to group %s to the server list on account %s."
 msgstr ""
 "Tuttavaa %s ei voi lisätä ryhmään %s palvelimen tuttavissa, tilillä %s."
 
-#, fuzzy
 msgid "Unable to add buddy to server list"
 msgstr "Tuttavaa ei voi lisätä palvelimen tuttaviin"
 
@@ -9510,19 +9492,16 @@
 msgid "[ Audible %s/%s/%s.swf ] %s"
 msgstr "[ Ääniäinen %s/%s/%s.swf ] %s"
 
-#, fuzzy
 msgid "Received unexpected HTTP response from server"
-msgstr "Odottamaton HTTP-vastaus palvelimelta."
-
-#, fuzzy, c-format
+msgstr "Odottamaton HTTP-vastaus palvelimelta"
+
+#, c-format
 msgid "Lost connection with %s: %s"
-msgstr ""
-"Yhteys palvelimeen %s katkesi:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Yhteys palvelimeen %s katkesi: %s"
+
+#, c-format
 msgid "Unable to establish a connection with %s: %s"
-msgstr "Yhteyttä palvelimeen ei voi muodostaa"
+msgstr "Yhteyttä palvelimeen %s ei voi muodostaa: %s"
 
 msgid "Not at Home"
 msgstr "Poissa kotoa"
@@ -9730,7 +9709,6 @@
 msgid "User Rooms"
 msgstr "Käyttäjän huoneet"
 
-#, fuzzy
 msgid "Connection problem with the YCHT server"
 msgstr "Yhteysvirhe YCHT-palvelimen kanssa"
 
@@ -9860,17 +9838,17 @@
 msgid "Exposure"
 msgstr "Altistus"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to parse response from HTTP proxy: %s"
-msgstr "Vastausta HTTP-välipalvelimelta ei voi jäsentää: %s\n"
+msgstr "Vastausta HTTP-välipalvelimelta ei voi jäsentää: %s"
 
 #, c-format
 msgid "HTTP proxy connection error %d"
 msgstr "HTTP-välipalvelimen yhteysvirhe %d"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Access denied: HTTP proxy server forbids port %d tunneling"
-msgstr "Pääsy evätty: HTTP-välipalvelin estää portin %d tunneloinnin."
+msgstr "Pääsy evätty: HTTP-välipalvelin estää portin %d tunneloinnin"
 
 #, c-format
 msgid "Error resolving %s"
@@ -10164,7 +10142,7 @@
 msgid "Use this buddy _icon for this account:"
 msgstr "Käytä tätä tuttavakuvaketta tälle käyttäjät_ilille:"
 
-msgid "_Advanced"
+msgid "Ad_vanced"
 msgstr "_Lisäasetukset"
 
 msgid "Use GNOME Proxy Settings"
@@ -10227,8 +10205,8 @@
 msgid "Create _this new account on the server"
 msgstr "Luo _tämä uusi käyttäjätili palvelimelle"
 
-msgid "_Proxy"
-msgstr "_Välipalvelin"
+msgid "P_roxy"
+msgstr "Vä_lipalvelin"
 
 msgid "Enabled"
 msgstr "Käytössä"
@@ -10321,11 +10299,9 @@
 msgid "View _Log"
 msgstr "Näytä _loki"
 
-#, fuzzy
 msgid "Hide When Offline"
 msgstr "Piilota kun poissa linjoilta"
 
-#, fuzzy
 msgid "Show When Offline"
 msgstr "Näytä kun poissa linjoilta"
 
@@ -10872,7 +10848,6 @@
 msgid "Get Away Message"
 msgstr "Hae poissaoloviesti"
 
-#, fuzzy
 msgid "Last Said"
 msgstr "Viimeksi sanottu"
 
@@ -12426,9 +12401,8 @@
 msgid "On unread messages"
 msgstr "Kun lukemattomia viestejä"
 
-#, fuzzy
 msgid "Conversation Window"
-msgstr "Pikaviesti-ikkunat"
+msgstr "Keskusteluikkuna"
 
 msgid "_Hide new IM conversations:"
 msgstr "_Piilota uudet pikaviestikeskustelut:"
@@ -13067,9 +13041,21 @@
 msgid "_Copy Email Address"
 msgstr "_Kopioi sähköpostiosoite"
 
+msgid "_Open File"
+msgstr "_Avaa tiedosto..."
+
+msgid "Open _Containing Directory"
+msgstr "Avaa kansio joka _sisältää tämän"
+
 msgid "Save File"
 msgstr "Tallenna tiedosto"
 
+msgid "_Play Sound"
+msgstr "_Toista ääni"
+
+msgid "_Save File"
+msgstr "_Tallenna tiedosto"
+
 msgid "Select color"
 msgstr "Valitse väri"
 
@@ -14224,6 +14210,9 @@
 "Tätä liitännäistä voidaan käyttää XMPP-palvelimien tai -asiakasohjelmien "
 "virheenjäljitykseen."
 
+#~ msgid "_Proxy"
+#~ msgstr "_Välipalvelin"
+
 #~ msgid "Cannot open socket"
 #~ msgstr "Pistoketta ei voi avata"
 
--- a/po/fr.po	Sat Jul 18 04:31:38 2009 +0000
+++ b/po/fr.po	Sat Jul 18 07:26:04 2009 +0000
@@ -21,8 +21,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-06 15:04-0700\n"
-"PO-Revision-Date: 2009-02-23 01:25+0100\n"
+"POT-Creation-Date: 2009-07-15 09:51+0200\n"
+"PO-Revision-Date: 2009-07-16 13:07+0200\n"
 "Last-Translator: Éric Boumaour <zongo_fr@users.sourceforge.net>\n"
 "Language-Team: fr <fr@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -884,12 +884,11 @@
 msgid "System Log"
 msgstr "Archives des messages système"
 
-#, fuzzy
 msgid "Calling ... "
-msgstr "Calcul en cours"
+msgstr "Appel... "
 
 msgid "Hangup"
-msgstr ""
+msgstr "Raccrocher"
 
 #. Number of actions
 msgid "Accept"
@@ -899,25 +898,24 @@
 msgstr "Refuser"
 
 msgid "Call in progress."
-msgstr ""
+msgstr "Appel en cours."
 
 msgid "The call has been terminated."
-msgstr ""
+msgstr "L'appel s'est terminé."
 
 #, c-format
 msgid "%s wishes to start an audio session with you."
-msgstr ""
+msgstr "%s veut engager une session audio."
 
 #, c-format
 msgid "%s is trying to start an unsupported media session type with you."
-msgstr ""
-
-#, fuzzy
+msgstr "%s essaie d'engager une session audio de type non supportée."
+
 msgid "You have rejected the call."
-msgstr "Vous avez quitté le salon %s%s"
+msgstr "Vous avez refusé l'appel."
 
 msgid "call: Make an audio call."
-msgstr ""
+msgstr "call : appel audio."
 
 msgid "Emails"
 msgstr "Courriers électroniques"
@@ -1573,22 +1571,25 @@
 "\n"
 "Fetching TinyURL..."
 msgstr ""
+"\n"
+"Récupération TinyURL..."
 
 msgid "Only create TinyURL for urls of this length or greater"
-msgstr ""
+msgstr "Création de TinyURL seulement pour les liens de cette taille mini"
 
 msgid "TinyURL (or other) address prefix"
-msgstr ""
-
-#, fuzzy
+msgstr "Préfixe d'adresse TinyURL (ou autre)"
+
 msgid "TinyURL"
-msgstr "URL musicale"
+msgstr "TinyURL"
 
 msgid "TinyURL plugin"
-msgstr ""
+msgstr "Plugin TinyURL"
 
 msgid "When receiving a message with URL(s), TinyURL for easier copying"
 msgstr ""
+"À la réception d'un message avec un ou plusieurs liens hypertextes, utilise "
+"TinyURL pour les copier plus facilement."
 
 msgid "accounts"
 msgstr "Comptes"
@@ -1793,7 +1794,6 @@
 msgstr "+++ %s a quitté"
 
 #. Unknown error
-#. Unknown error!
 msgid "Unknown error"
 msgstr "Erreur inconnue"
 
@@ -1840,9 +1840,8 @@
 msgid "%s left the room (%s)."
 msgstr "%s a quitté le salon (%s)"
 
-#, fuzzy
 msgid "Invite to chat"
-msgstr "Inviter à une conférence"
+msgstr "Inviter à une discussion"
 
 #. Put our happy label in it.
 msgid ""
@@ -1985,6 +1984,10 @@
 msgstr "Démarrage du transfert de %s depuis %s."
 
 #, c-format
+msgid "Transfer of file <A HREF=\"file://%s\">%s</A> complete"
+msgstr "Transfert du fichier <A HREF=\"file://%s\">%s</A> terminé"
+
+#, c-format
 msgid "Transfer of file %s complete"
 msgstr "Transfert du fichier « %s » terminé"
 
@@ -2200,9 +2203,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <Réponse automatique> : %s\n"
 
-#, fuzzy
 msgid "Error creating conference."
-msgstr "Erreur à l'ouverture de la connexion"
+msgstr "Erreur à la création de la conférence."
 
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
@@ -2611,7 +2613,6 @@
 "d'archives."
 
 #. * description
-#, fuzzy
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
 "Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
@@ -2621,7 +2622,7 @@
 msgstr ""
 "Quand les archives sont consultés, ce plugin ajoute les archives d'autres "
 "clients de messagerie instantanée. Cela inclut actuellement Adium, MSN "
-"Messenger et Trillian.\n"
+"Messenger, aMSN et Trillian.\n"
 "\n"
 "ATTENTION : ce plugin est encore en phase de développement précoce et peut "
 "planter fréquemment. Utilisez le à vos risques et périls !"
@@ -2671,12 +2672,11 @@
 "Enregistre les messages envoyés à un utilisateur déconnecté en tant "
 "qu'alerte."
 
-#, fuzzy
 msgid ""
 "The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
-"Les messages seront enregistrés en tant qu'alerte. Vous pouvez modifier ou "
+"Les messages seront enregistrés en tant qu'alertes. Vous pouvez modifier ou "
 "supprimer l'alerte dans la fenêtre « Alerte »."
 
 #, c-format
@@ -2705,9 +2705,8 @@
 msgid "Do not ask. Always save in pounce."
 msgstr "Ne jamais demander. Toujours créer une alerte."
 
-#, fuzzy
 msgid "One Time Password"
-msgstr "Saisissez le mot de passe"
+msgstr "Mot de passe jetable"
 
 #. *< type
 #. *< ui_requirement
@@ -2716,13 +2715,13 @@
 #. *< priority
 #. *< id
 msgid "One Time Password Support"
-msgstr ""
+msgstr "Support de mot de passe à usage unique"
 
 #. *< name
 #. *< version
 #. *  summary
 msgid "Enforce that passwords are used only once."
-msgstr ""
+msgstr "S'assure que les mots de passe ne peuvent être utilisés qu'une fois."
 
 #. *  description
 msgid ""
@@ -2730,6 +2729,10 @@
 "are only used in a single successful connection.\n"
 "Note: The account password must not be saved for this to work."
 msgstr ""
+"Permet de s'assurer pour certains comptes que les mot de passe n'est pas "
+"sauvegardé et qu'il n'est utilisé que pour une seule connexion validée.\n"
+"NB : le mot de passe ne doit pas déjà être sauvegardé pour que cela "
+"fonctionne."
 
 #. *< type
 #. *< ui_requirement
@@ -2883,10 +2886,10 @@
 msgstr "Notification quand"
 
 msgid "Buddy Goes _Away"
-msgstr "L'utilisateur s'absente"
+msgstr "L'utilisateur s'_absente"
 
 msgid "Buddy Goes _Idle"
-msgstr "L'utilisateur passe inactif"
+msgstr "L'utilisateur passe _inactif"
 
 msgid "Buddy _Signs On/Off"
 msgstr "_Connexion/déconnexion d'un contact"
@@ -2925,18 +2928,15 @@
 "utiliser les plugins TCL, veuillez installer ActiveTCL depuis http://www."
 "activestate.com\n"
 
-#, fuzzy
 msgid ""
 "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin."
 "im/BonjourWindows for more information."
 msgstr ""
-"Le kit Apple Bonjour pour Windows n'a pas été trouvé. Veuillez consulter la "
-"FAQ disponible sur : http://d.pidgin.im/wiki/BonjourWindows pour plus "
-"d'informations."
-
-#, fuzzy
+"Impossible de trouver le kit Apple Bonjour pour Windows. Veuillez consulter "
+"http://d.pidgin.im/wiki/BonjourWindows pour plus d'informations."
+
 msgid "Unable to listen for incoming IM connections"
-msgstr "Impossible d'attendre des connexions rentrantes de messages.\n"
+msgstr "Impossible d'attendre des connexions rentrantes de messages"
 
 msgid ""
 "Unable to establish connection with the local mDNS server.  Is it running?"
@@ -2990,21 +2990,17 @@
 msgstr ""
 "Impossible d'envoyer le message, la conversation n'a pas pu être commencée."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to create socket: %s"
-msgstr ""
-"Impossible de créer le socket :\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Impossible de créer le socket : %s"
+
+#, c-format
 msgid "Unable to bind socket to port: %s"
-msgstr "Impossible d'affecter un port à la connexion."
-
-#, fuzzy, c-format
+msgstr "Impossible d'affecter un port à la connexion : %s"
+
+#, c-format
 msgid "Unable to listen on socket: %s"
-msgstr ""
-"Impossible de créer le socket :\n"
-"%s"
+msgstr "Impossible de se mettre en écoute sur la connexion : %s"
 
 msgid "Error communicating with local mDNSResponder."
 msgstr "Erreur de communication avec le mDNSResponder local."
@@ -3051,17 +3047,14 @@
 msgid "Load buddylist from file..."
 msgstr "Charger la liste de contacts depuis un fichier..."
 
-#, fuzzy
 msgid "You must fill in all registration fields"
-msgstr "Renseignez les rubriques d'inscription."
-
-#, fuzzy
+msgstr "Vous devez renseignez toutes les rubriques d'inscription"
+
 msgid "Passwords do not match"
-msgstr "Les mots de passe diffèrent."
-
-#, fuzzy
+msgstr "Les mots de passe diffèrent"
+
 msgid "Unable to register new account.  An unknown error occurred."
-msgstr "Une erreur est survenue. Impossible d'inscrire un nouveau compte.\n"
+msgstr "Une erreur est survenue. Impossible d'inscrire un nouveau compte."
 
 msgid "New Gadu-Gadu Account Registered"
 msgstr "Nouveau compte Gadu-Gadu créé."
@@ -3076,11 +3069,10 @@
 msgstr "Mot de passe (confirmation)"
 
 msgid "Enter captcha text"
-msgstr ""
-
-#, fuzzy
+msgstr "Saisissez le texte captcha"
+
 msgid "Captcha"
-msgstr "Image captcha"
+msgstr "Captcha"
 
 msgid "Register New Gadu-Gadu Account"
 msgstr "Créer un nouveau compte Gadu-Gadu"
@@ -3220,9 +3212,9 @@
 msgid "Chat _name:"
 msgstr "_Nom de la discussion :"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to resolve hostname '%s': %s"
-msgstr "Impossible de se connecter au serveur"
+msgstr "Impossible de résoudre le nom internet « %s » : %s"
 
 #. 1. connect to server
 #. connect to the server
@@ -3235,9 +3227,8 @@
 msgid "This chat name is already in use"
 msgstr "Ce nom de discussion est déjà utilisé."
 
-#, fuzzy
 msgid "Not connected to the server"
-msgstr "Vous n'êtes pas connecté au serveur."
+msgstr "Vous n'êtes pas connecté au serveur"
 
 msgid "Find buddies..."
 msgstr "Trouver des contacts..."
@@ -3278,9 +3269,8 @@
 msgid "Gadu-Gadu User"
 msgstr "Utilisateur Gadu-Gadu"
 
-#, fuzzy
 msgid "GG server"
-msgstr "Récupération du serveur"
+msgstr "Serveur GG"
 
 #, c-format
 msgid "Unknown command: %s"
@@ -3296,7 +3286,6 @@
 msgid "File Transfer Failed"
 msgstr "Échec du transfert de fichier."
 
-#, fuzzy
 msgid "Unable to open a listening port."
 msgstr "Impossible d'ouvrir un port en écoute."
 
@@ -3320,11 +3309,9 @@
 #.
 #. TODO: what to do here - do we really have to disconnect?
 #. TODO: do we really want to disconnect on a failure to write?
-#, fuzzy, c-format
+#, c-format
 msgid "Lost connection with server: %s"
-msgstr ""
-"Connexion perdue avec le serveur :\n"
-"%s"
+msgstr "Connexion perdue avec le serveur : %s"
 
 msgid "View MOTD"
 msgstr "Voir le message du jour"
@@ -3335,9 +3322,8 @@
 msgid "_Password:"
 msgstr "Mot de _passe :"
 
-#, fuzzy
 msgid "IRC nick and server may not contain whitespace"
-msgstr "Les pseudonymes IRC ne doivent pas avoir d'espace"
+msgstr "Le pseudonyme et le serveur IRC ne doivent pas avoir d'espace"
 
 msgid "SSL support unavailable"
 msgstr "Support SSL non disponible"
@@ -3346,11 +3332,11 @@
 msgstr "Impossible de se connecter"
 
 #. this is a regular connect, error out
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect: %s"
-msgstr "Impossible de se connecter à %s."
-
-#, fuzzy, c-format
+msgstr "Impossible de se connecter : %s"
+
+#, c-format
 msgid "Server closed the connection"
 msgstr "Le serveur a fermé la connexion."
 
@@ -3536,19 +3522,18 @@
 #. 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 "Ce nom de discussion est déjà utilisé."
-
-#, fuzzy
+msgstr "Le pseudonyme « %s » est déjà utilisé."
+
 msgid "Nickname in use"
-msgstr "Pseudonyme"
+msgstr "Pseudonyme utilisé"
 
 msgid "Cannot change nick"
-msgstr "Impossible de changer de surnom"
+msgstr "Impossible de changer de pseudonyme"
 
 msgid "Could not change nick"
-msgstr "Impossible de changer de surnom"
+msgstr "Impossible de changer de pseudonyme"
 
 #, c-format
 msgid "You have parted the channel%s%s"
@@ -3786,13 +3771,11 @@
 msgid "execute"
 msgstr "execute"
 
-#, fuzzy
 msgid "Server requires TLS/SSL, but no TLS/SSL support was found."
 msgstr ""
 "TLS/SSL est nécessaire pour la connexion au serveur. Aucun support de TLS/"
 "SSL n'a pu être trouvé."
 
-#, fuzzy
 msgid "You require encryption, but no TLS/SSL support was found."
 msgstr ""
 "Vous demandez un chiffrement mais aucun support de TLS/SSL n'a pu être "
@@ -3814,11 +3797,9 @@
 msgid "Plaintext Authentication"
 msgstr "Authentification en texte non chiffré"
 
-#, fuzzy
 msgid "SASL authentication failed"
-msgstr "Échec de l'authentification"
-
-#, fuzzy
+msgstr "Échec de l'authentification SASL"
+
 msgid "Invalid response from server"
 msgstr "Réponse non valide du serveur"
 
@@ -3832,36 +3813,28 @@
 msgid "Invalid challenge from server"
 msgstr "Demande d'accès non valide du serveur"
 
-#, fuzzy, c-format
+#, c-format
 msgid "SASL error: %s"
-msgstr "Erreur SASL"
+msgstr "Erreur SASL : %s"
 
 msgid "The BOSH connection manager terminated your session."
-msgstr ""
-
-#, fuzzy
+msgstr "Le gestionnaire de connexion BOSH a interrompu votre session."
+
 msgid "No session ID given"
-msgstr "Pas de raison donnée"
-
-#, fuzzy
+msgstr "Pas d'ID de session"
+
 msgid "Unsupported version of BOSH protocol"
-msgstr "Version non supportée"
-
-#, fuzzy
+msgstr "Version non supportée du protocole BOSH"
+
 msgid "Unable to establish a connection with the server"
-msgstr ""
-"Impossible de se connecter au serveur :\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Impossible de se connecter au serveur"
+
+#, c-format
 msgid "Unable to establish a connection with the server: %s"
-msgstr ""
-"Impossible de se connecter au serveur :\n"
-"%s"
-
-#, fuzzy
+msgstr "Impossible de se connecter au serveur : %s"
+
 msgid "Unable to establish SSL connection"
-msgstr "Impossible de créer une connexion."
+msgstr "Impossible de créer une connexion SSL"
 
 msgid "Full Name"
 msgstr "Nom complet"
@@ -3929,9 +3902,8 @@
 msgid "Operating System"
 msgstr "Système d'exploitation"
 
-#, fuzzy
 msgid "Local Time"
-msgstr "Fichier local :"
+msgstr "Heure locale"
 
 msgid "Priority"
 msgstr "Priorité"
@@ -3941,11 +3913,10 @@
 
 #, c-format
 msgid "%s ago"
-msgstr ""
-
-#, fuzzy
+msgstr "il y a %s"
+
 msgid "Logged Off"
-msgstr "Connecté"
+msgstr "Deconnecté"
 
 msgid "Middle Name"
 msgstr "Deuxième prénom"
@@ -3987,9 +3958,9 @@
 msgid "Log Out"
 msgstr "Déconnexion"
 
-# Repris du fr.po de gabber
+# Pour avoir le même texte que « Free for Chat »
 msgid "Chatty"
-msgstr "Bavard"
+msgstr "Libre pour discuter"
 
 msgid "Extended Away"
 msgstr "Longue absence"
@@ -4116,19 +4087,15 @@
 msgid "Find Rooms"
 msgstr "Chercher un salon de discussions"
 
-#, fuzzy
 msgid "Affiliations:"
-msgstr "Alias :"
-
-#, fuzzy
+msgstr "Affiliations :"
+
 msgid "No users found"
-msgstr "Aucun utilisateur correspondant trouvé."
-
-#, fuzzy
+msgstr "Aucun utilisateur trouvé."
+
 msgid "Roles:"
-msgstr "Rôle"
-
-#, fuzzy
+msgstr "Rôles :"
+
 msgid "Ping timed out"
 msgstr "Pas de réponse au ping"
 
@@ -4136,6 +4103,8 @@
 "Unable to find alternative XMPP connection methods after failing to connect "
 "directly."
 msgstr ""
+"Impossible de trouver une autre méthode de connexion XMPP après l'échec de "
+"connexion directe."
 
 msgid "Invalid XMPP ID"
 msgstr "Identifiant XMPP non valide."
@@ -4143,9 +4112,8 @@
 msgid "Invalid XMPP ID. Domain must be set."
 msgstr "Identifiant XMPP non valide. Le domaine doit être saisi."
 
-#, fuzzy
 msgid "Malformed BOSH URL"
-msgstr "Impossible de se connecter au serveur."
+msgstr "URL BOSH mal formée"
 
 #, c-format
 msgid "Registration of %s@%s successful"
@@ -4217,9 +4185,8 @@
 msgid "Change Registration"
 msgstr "Changer l'enregistrement"
 
-#, fuzzy
 msgid "Malformed BOSH Connect Server"
-msgstr "Impossible de se connecter au serveur."
+msgstr "Serveur de connexion BOSH non valide"
 
 msgid "Error unregistering account"
 msgstr "Erreur à la désinscription du compte"
@@ -4506,19 +4473,21 @@
 msgid "Unable to ping user %s"
 msgstr "Impossible d'envoyer un ping à l'utilisateur %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to buzz, because there is nothing known about %s."
 msgstr "Impossible de buzzer, rien n'est connu sur l'utilisateur %s."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to buzz, because %s might be offline."
 msgstr "Impossible de buzzer, l'utilisateur %s est peut-être déconnecté."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to buzz, because %s does not support it or does not wish to receive "
 "buzzes now."
-msgstr "Impossible de buzzer, l'utilisateur %s l'interdit."
+msgstr ""
+"Impossible de buzzer, l'utilisateur %s l'interdit ou n'est pas capable de le "
+"recevoir."
 
 #, c-format
 msgid "Buzzing %s..."
@@ -4533,38 +4502,38 @@
 msgid "%s has buzzed you!"
 msgstr "%s vient de vous buzzer !"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to initiate media with %s: invalid JID"
-msgstr "Impossible d'envoyer le fichier à %s, JID non valide"
-
-#, fuzzy, c-format
+msgstr "Impossible d'engager une session média avec %s : JID non valide"
+
+#, c-format
 msgid "Unable to initiate media with %s: user is not online"
-msgstr "Impossible d'envoyer le fichier à %s, l'utilisateur n'est pas en ligne"
-
-#, fuzzy, c-format
+msgstr ""
+"Impossible d'engager une session média avec %s : l'utilisateur n'est pas en "
+"ligne"
+
+#, c-format
 msgid "Unable to initiate media with %s: not subscribed to user presence"
 msgstr ""
-"Impossible d'envoyer le fichier à %s, pas d'inscription à la présence de "
-"l'utilisateur"
-
-#, fuzzy
+"Impossible d'engager une session média avec %s : pas d'inscription à la "
+"présence de l'utilisateur"
+
 msgid "Media Initiation Failed"
-msgstr "Erreur d'enregistrement"
-
-#, fuzzy, c-format
+msgstr "Échec de la session média"
+
+#, c-format
 msgid ""
 "Please select the resource of %s with which you would like to start a media "
 "session."
 msgstr ""
-"Veuillez sélectionner parmi les ressources de %s, à laquelle vous voulez "
-"envoyer un fichier"
+"Veuillez choisir parmi les ressources de %s, avec laquelle vous voulez "
+"engager une session média"
 
 msgid "Select a Resource"
 msgstr "Choisissez une ressource"
 
-#, fuzzy
 msgid "Initiate Media"
-msgstr "Lancer une _discussion"
+msgstr "Session média"
 
 msgid "config:  Configure a chat room."
 msgstr "config : Configurer un salon de discussions"
@@ -4584,21 +4553,21 @@
 msgid "ban &lt;user&gt; [reason]:  Ban a user from the room."
 msgstr "ban &lt;utilisateur&gt; [salon] : Bannir un utilisateur d'un salon"
 
-#, 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;utilisateur&gt; &lt;owner|admin|member|outcast|none&gt; : "
-"Change l'affiliation d'un utilisateur dans le salon."
-
-#, fuzzy
+"affiliate &lt;owner|admin|member|outcast|none&gt; [pseudo1] [pseudo2] ... : "
+"Récupère les utilisateurs avec une certaine affiliation ou change "
+"l'affiliation d'utilisateurs dans le salon."
+
 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;utilisateur&gt; &lt;moderator|participant|visitor|none&gt; : "
-"Assigne à un utilisateur un rôle dans le salon."
+"role &lt;moderator|participant|visitor|none&gt; [pseudo1] [pseudo2] ... : "
+"Récupère les utilisateurs avec un certain rôle ou change le rôle "
+"d'utilisateurs dans le salon."
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
 msgstr ""
@@ -4661,7 +4630,7 @@
 msgstr "Serveur mandataire de transfert de fichiers"
 
 msgid "BOSH URL"
-msgstr ""
+msgstr "URL BOSH"
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
@@ -4725,32 +4694,28 @@
 msgid "_Accept Defaults"
 msgstr "_Accepter les paramètres par défaut"
 
-#, fuzzy
 msgid "No reason"
-msgstr "Pas de raison donnée"
-
-#, fuzzy, c-format
+msgstr "Pas de raison"
+
+#, c-format
 msgid "You have been kicked: (%s)"
-msgstr "Vous avez été expulsé par %s (%s)"
-
-#, fuzzy, c-format
+msgstr "Vous avez été expulsé : (%s)"
+
+#, c-format
 msgid "Kicked (%s)"
-msgstr "Expulsé par %s (%s)"
-
-#, fuzzy
+msgstr "Expulsé (%s)"
+
 msgid "An error occurred on the in-band bytestream transfer\n"
-msgstr "Erreur lors de l'ouverture du fichier."
-
-#, fuzzy
+msgstr "Erreur lors du transfert dans le flux de données in-band.\n"
+
 msgid "Transfer was closed."
-msgstr "Échec du transfert de fichier."
-
-#, fuzzy
+msgstr "Le transfert a été interrompu."
+
 msgid "Failed to open the file"
-msgstr "Impossible d'ouvrir le fichier « %s » : %s"
+msgstr "Impossible d'ouvrir le fichier"
 
 msgid "Failed to open in-band bytestream"
-msgstr ""
+msgstr "Impossible d'ouvrir le flux de données in-band"
 
 #, c-format
 msgid "Unable to send file to %s, user does not support file transfers"
@@ -5077,10 +5042,30 @@
 msgid "Non-IM Contacts"
 msgstr "Contacts non instantanés"
 
-#, fuzzy, c-format
+#, c-format
+msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>"
+msgstr ""
+"%s a envoyé un clin d'œil. <a href='msn-wink://%s'>Cliquez ici pour le jouer."
+"</a>"
+
+#, c-format
+msgid "%s sent a wink, but it could not be saved"
+msgstr "%s a envoyé un clin d'œil, mais il n'a pas pu être sauvé."
+
+#, c-format
+msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>"
+msgstr ""
+"%s a envoyé un clip audio. <a href='audio://%s'>Cliquez ici pour le jouer.</"
+"a>"
+
+#, c-format
+msgid "%s sent a voice clip, but it could not be saved"
+msgstr "%s a envoyé un clip audio, mais il n'a pas pu être sauvé."
+
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
 msgstr ""
-"%s vous a envoyé une invitation webcam, ce qui n'est pas encore supporté."
+"%s vous a envoyé une invitation voix, ce qui n'est pas encore supporté."
 
 msgid "Nudge"
 msgstr "Nudge"
@@ -5236,6 +5221,29 @@
 "Le support de SSL est nécessaire pour MSN. Veuillez installer une "
 "bibliothèque SSL pour l'application."
 
+#, c-format
+msgid ""
+"Unable to add the buddy %s because the username is invalid.  Usernames must "
+"be a valid email address."
+msgstr ""
+"Impossible d'ajouter le contact %s car son nom d'utilisateur est non valide. "
+"Les noms des contacts doivent être une adresse électronique valide."
+
+msgid "Unable to Add"
+msgstr "Impossible d'ajouter"
+
+msgid "Authorization Request Message:"
+msgstr "Message pour la demande d'autorisation :"
+
+msgid "Please authorize me!"
+msgstr "Autorise moi, s'il te plaît !"
+
+#. *
+#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
+#.
+msgid "_OK"
+msgstr "_OK"
+
 msgid "Error retrieving profile"
 msgstr "Erreur à la récupération du profil."
 
@@ -5427,13 +5435,14 @@
 msgid "%s just sent you a Nudge!"
 msgstr "%s vient de vous envoyer un « Nudge. »"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown error (%d): %s"
-msgstr "Erreur inconnue (%d)"
+msgstr "Erreur inconnue (%d) : %s"
 
 msgid "Unable to add user"
 msgstr "Impossible d'ajouter un utilisateur"
 
+#. Unknown error!
 #, c-format
 msgid "Unknown error (%d)"
 msgstr "Erreur inconnue (%d)"
@@ -5504,24 +5513,20 @@
 "Erreur de connexion du serveur %s :\n"
 "%s"
 
-#, fuzzy
 msgid "Our protocol is not supported by the server"
-msgstr "Notre protocole n'est pas supportés par le serveur."
-
-#, fuzzy
+msgstr "Notre protocole n'est pas supporté par le serveur."
+
 msgid "Error parsing HTTP"
 msgstr "Erreur à l'analyse du HTTP"
 
-#, fuzzy
 msgid "You have signed on from another location"
-msgstr "Vous venez de vous connecter depuis un autre endroit."
+msgstr "Vous vous êtes connecté depuis un autre endroit."
 
 msgid "The MSN servers are temporarily unavailable. Please wait and try again."
 msgstr ""
 "Les serveurs MSN ne sont pas disponibles pour l'instant. Veuillez attendre "
 "un peu puis réessayer."
 
-#, fuzzy
 msgid "The MSN servers are going down temporarily"
 msgstr "Les serveurs MSN sont coupés temporairement."
 
@@ -5553,10 +5558,9 @@
 msgid "Retrieving buddy list"
 msgstr "Récupération de la liste de contacts"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s requests to view your webcam, but this request is not yet supported."
-msgstr ""
-"%s vous a envoyé une invitation webcam, ce qui n'est pas encore supporté."
+msgstr "%s demande à voir votre webcam, ce qui n'est pas encore supporté."
 
 #, c-format
 msgid "%s has sent you a webcam invite, which is not yet supported."
@@ -5756,16 +5760,16 @@
 msgid "Protocol error, code %d: %s"
 msgstr "Erreur de protocole, code %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, votre mot de passe fait %d caractères, ce qui est supérieur à la "
-"longueur maximale de %d attendue par MySpaceIM. Veuillez raccourcir votre "
-"mot de passe à http://profileedit.myspace.com/index.cfm?"
-"fuseaction=accountSettings.changePassword puis réessayer."
+"%s, votre mot de passe fait %zu caractères, ce qui est supérieur à la "
+"longueur maximale de %d. Veuillez raccourcir votre mot de passe à http://"
+"profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword "
+"puis réessayer."
 
 msgid "Incorrect username or password"
 msgstr "Nom d'utilisateur ou mot de passe incorrect"
@@ -5864,6 +5868,9 @@
 "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
 "to set your username."
 msgstr ""
+"Une erreur est survenue en essayant de changer le nom d'utilisateur. "
+"Veuillez réessayer ou aller sur http://editprofile.myspace.com/index.cfm?"
+"fuseaction=profile.username pour changer de nom d'utilisateur."
 
 msgid "MySpaceIM - Username Available"
 msgstr "MySpaceIM - Nom d'utilisateur disponible"
@@ -6123,9 +6130,9 @@
 msgid "Unknown error: 0x%X"
 msgstr "Erreur inconnue :0x%X"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "Impossible d'envoyer un ping à l'utilisateur %s"
+msgstr "Impossible de s'authentifier : %s"
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
@@ -6259,7 +6266,6 @@
 "%s appears to be offline and did not receive the message that you just sent."
 msgstr "%s est déconnecté et n'a pas reçu le message que vous venez d'envoyer."
 
-#, fuzzy
 msgid ""
 "Unable to connect to server. Please enter the address of the server to which "
 "you wish to connect."
@@ -6289,9 +6295,8 @@
 msgid "Server port"
 msgstr "Port du serveur"
 
-#, fuzzy
 msgid "Received unexpected response from "
-msgstr "Réception d'un message HTTP non attendu du serveur."
+msgstr "Réception d'un message non attendu de "
 
 #. username connecting too frequently
 msgid ""
@@ -6302,12 +6307,12 @@
 "réessayez. Si vous persistez maintenant, il vous faudra attendre encore plus "
 "longtemps."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting "
-msgstr "Erreur à la résolution du nom %s."
+msgstr "Erreur à la demande de "
 
 msgid "AOL does not allow your screen name to authenticate here"
-msgstr ""
+msgstr "AOL n'autorise pas votre nom d'utilisateur pour authentification ici."
 
 msgid "Could not join chat room"
 msgstr "Impossible de rejoindre le salon de discussions"
@@ -6315,9 +6320,8 @@
 msgid "Invalid chat room name"
 msgstr "Nom de salon non valide"
 
-#, fuzzy
 msgid "Received invalid data on connection with server"
-msgstr "Données non valides reçues sur la connexion du serveur."
+msgstr "Données non valides reçues à la connexion sur le serveur."
 
 #. *< type
 #. *< ui_requirement
@@ -6364,7 +6368,6 @@
 msgid "Received invalid data on connection with remote user."
 msgstr "Données non valides reçues sur la connexion avec l'interlocuteur."
 
-#, fuzzy
 msgid "Unable to establish a connection with the remote user."
 msgstr "Impossible de se connecter à l'interlocuteur."
 
@@ -6567,15 +6570,13 @@
 msgid "Buddy Comment"
 msgstr "Commentaire"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect to authentication server: %s"
-msgstr ""
-"Impossible de se connecter au serveur d'authentification :\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Impossible de se connecter au serveur d'authentification : %s"
+
+#, c-format
 msgid "Unable to connect to BOS server: %s"
-msgstr "Impossible de se connecter au serveur"
+msgstr "Impossible de se connecter au serveur BOS : %s"
 
 msgid "Username sent"
 msgstr "Nom d'utilisateur envoyé"
@@ -6587,16 +6588,16 @@
 msgid "Finalizing connection"
 msgstr "Finalisation de la connexion"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to sign on as %s because the username is invalid.  Usernames must be "
 "a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-"Impossible de se connecter : le nom d'utilisateur %s est non valide. Les "
-"noms doivent soit être une adresse électronique valide, soit commencer par "
-"une lettre et contenir uniquement des lettres, des chiffres et des espaces, "
-"soit contenir uniquement des chiffres."
+"Impossible de se connecter en tant que %s, ce nom n'est pas valide. Les noms "
+"doivent soit être une adresse électronique valide, soit commencer par une "
+"lettre et contenir uniquement des lettres, des chiffres et des espaces, soit "
+"contenir uniquement des chiffres."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -6616,12 +6617,10 @@
 #. Unregistered username
 #. uid is not exist
 #. the username does not exist
-#, fuzzy
 msgid "Username does not exist"
 msgstr "Cet utilisateur n'existe pas"
 
 #. Suspended account
-#, fuzzy
 msgid "Your account is currently suspended"
 msgstr "Votre compte est actuellement suspendu."
 
@@ -6629,6 +6628,7 @@
 msgid "The AOL Instant Messenger service is temporarily unavailable."
 msgstr "Le service est temporairement indisponible."
 
+#. client too old
 #, c-format
 msgid "The client version you are using is too old. Please upgrade at %s"
 msgstr ""
@@ -6636,16 +6636,14 @@
 "à jour sur %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 ""
-"Vous vous êtes connecté/déconnecté trop rapidement. Attendez 10 minutes et "
+"Vous vous reconnectez trop rapidement. Attendez quelques minutes et "
 "réessayez. Si vous persistez maintenant, il vous faudra attendre encore plus "
 "longtemps."
 
-#, fuzzy
 msgid "The SecurID key entered is invalid"
 msgstr "La clé SecurID saisie est non valide."
 
@@ -6655,12 +6653,6 @@
 msgid "Enter the 6 digit number from the digital display."
 msgstr "Saisissez les 6 chiffres de l'affichage numérique."
 
-#. *
-#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
-#.
-msgid "_OK"
-msgstr "_OK"
-
 msgid "Password sent"
 msgstr "Mot de passe envoyé"
 
@@ -6670,12 +6662,6 @@
 msgid "Please authorize me so I can add you to my buddy list."
 msgstr "Autorise moi pour que je t'ajoute à ma liste de contacts."
 
-msgid "Authorization Request Message:"
-msgstr "Message pour la demande d'autorisation :"
-
-msgid "Please authorize me!"
-msgstr "Autorise moi, s'il te plaît !"
-
 msgid "No reason given."
 msgstr "Pas de raison"
 
@@ -7011,7 +6997,7 @@
 msgid "Away message too long."
 msgstr "Message d'absence trop long"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be a valid email address, or start with a letter and contain only letters, "
@@ -7022,9 +7008,6 @@
 "soit commencer par une lettre et contenir uniquement des lettres, des "
 "chiffres et des espaces, soit contenir uniquement des chiffres."
 
-msgid "Unable to Add"
-msgstr "Impossible d'ajouter"
-
 msgid "Unable to Retrieve Buddy List"
 msgstr "Impossible de récupérer la liste de contacts"
 
@@ -7039,7 +7022,7 @@
 msgid "Orphans"
 msgstr "Orphelins"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because you have too many buddies in your buddy "
 "list.  Please remove one and try again."
@@ -7050,7 +7033,7 @@
 msgid "(no name)"
 msgstr "(pas de nom)"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add the buddy %s for an unknown reason."
 msgstr "Impossible d'ajouter le contact %s pour une raison inconnue."
 
@@ -7215,9 +7198,8 @@
 msgid "Search for Buddy by Information"
 msgstr "Chercher d'après les informations..."
 
-#, fuzzy
 msgid "Use clientLogin"
-msgstr "Utilisateur non connecté"
+msgstr "Utiliser clientLogin"
 
 msgid ""
 "Always use AIM/ICQ proxy server for\n"
@@ -7415,30 +7397,26 @@
 msgstr "Commentaire"
 
 #. callback
-#, fuzzy
 msgid "Buddy Memo"
-msgstr "Icône du contact"
+msgstr "Mémo du contact"
 
 msgid "Change his/her memo as you like"
-msgstr ""
-
-#, fuzzy
+msgstr "Vous pouvez changer son mémo à votre convenance"
+
 msgid "_Modify"
-msgstr "Modifier"
-
-#, fuzzy
+msgstr "_Modifier"
+
 msgid "Memo Modify"
-msgstr "Modifier"
-
-#, fuzzy
+msgstr "Changer mémo"
+
 msgid "Server says:"
-msgstr "Serveur occupé"
+msgstr "Message du serveur :"
 
 msgid "Your request was accepted."
-msgstr ""
+msgstr "Votre requête a été acceptée."
 
 msgid "Your request was rejected."
-msgstr ""
+msgstr "Votre requête a été rejetée."
 
 #, c-format
 msgid "%u requires verification"
@@ -7748,18 +7726,17 @@
 msgid "<p><b>Acknowledgement</b>:<br>\n"
 msgstr "<p><b>Remerciements :</b><br>\n"
 
-#, fuzzy
 msgid "<p><b>Scrupulous Testers</b>:<br>\n"
-msgstr "<p><b>Auteur original :</b><br>\n"
+msgstr "<p><b>Testeurs scrupuleux :</b><br>\n"
 
 msgid "and more, please let me know... thank you!))"
-msgstr ""
+msgstr "et d'autres, faites-nous le savoir... merci !"
 
 msgid "<p><i>And, all the boys in the backroom...</i><br>\n"
-msgstr "<p><i>et tous les personnes dans les coulisses...</i><br>\n"
+msgstr "<p><i>et toutes les personnes dans les coulisses...</i><br>\n"
 
 msgid "<i>Feel free to join us!</i> :)"
-msgstr "<i>N'hésitez pas à mous rejoindre !</i> :)"
+msgstr "<i>N'hésitez pas à nous rejoindre !</i> :)"
 
 #, c-format
 msgid "About OpenQ %s"
@@ -7780,9 +7757,8 @@
 msgid "About OpenQ"
 msgstr "À propos de OpenQ"
 
-#, fuzzy
 msgid "Modify Buddy Memo"
-msgstr "Modifier l'adresse"
+msgstr "Changer le mémo de l'utilisateur"
 
 #. *< type
 #. *< ui_requirement
@@ -7830,7 +7806,6 @@
 msgid "Update interval (seconds)"
 msgstr "Délai de mise à jour (en secondes)"
 
-#, fuzzy
 msgid "Unable to decrypt server reply"
 msgstr "Impossible de déchiffrer la réponse du serveur"
 
@@ -7898,9 +7873,8 @@
 msgid "Requesting token"
 msgstr "Requête d'un token"
 
-#, fuzzy
 msgid "Unable to resolve hostname"
-msgstr "Impossible de se connecter au serveur"
+msgstr "Impossible de résoudre l'adresse internet."
 
 msgid "Invalid server or port"
 msgstr "Serveur ou port non valide"
@@ -7953,7 +7927,6 @@
 msgid "QQ Qun Command"
 msgstr "Commande Qun QQ"
 
-#, fuzzy
 msgid "Unable to decrypt login reply"
 msgstr "Impossible de déchiffrer la réponse de connexion"
 
@@ -8935,7 +8908,6 @@
 msgid "Disconnected by server"
 msgstr "Déconnexion par le serveur"
 
-#, fuzzy
 msgid "Error connecting to SILC Server"
 msgstr "Erreur à la connexion au serveur SILC"
 
@@ -8951,7 +8923,6 @@
 msgid "Performing key exchange"
 msgstr "Échange de clé en cours"
 
-#, fuzzy
 msgid "Unable to load SILC key pair"
 msgstr "Impossible de charger la paire de clés SILC"
 
@@ -8959,16 +8930,14 @@
 msgid "Connecting to SILC Server"
 msgstr "Connexion au serveur SILC"
 
-#, fuzzy
 msgid "Unable to not load SILC key pair"
-msgstr "Impossible de charger la paire de clés SILC"
+msgstr "Impossible de ne pas charger la paire de clés SILC"
 
 msgid "Out of memory"
 msgstr "Pas assez de mémoire"
 
-#, fuzzy
 msgid "Unable to initialize SILC protocol"
-msgstr "Impossible d'initialiser le protocole SILC."
+msgstr "Impossible d'initialiser le protocole SILC"
 
 msgid "Error loading SILC key pair"
 msgstr "Erreur de chargement de la paire de clés SILC"
@@ -9267,9 +9236,8 @@
 msgid "Creating SILC key pair..."
 msgstr "Création de la paire de clés SILC..."
 
-#, fuzzy
 msgid "Unable to create SILC key pair"
-msgstr "Impossible de créer la paire de clés SILC\n"
+msgstr "Impossible de créer la paire de clés SILC"
 
 #. Hint for translators: Please check the tabulator width here and in
 #. the next strings (short strings: 2 tabs, longer strings 1 tab,
@@ -9411,27 +9379,24 @@
 msgid "Failure: Authentication failed"
 msgstr "Échec de l'authentification"
 
-#, fuzzy
 msgid "Unable to initialize SILC Client connection"
 msgstr "Impossible d'initialiser la connexion client SILC"
 
 msgid "John Noname"
 msgstr "Anne Onyme"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to load SILC key pair: %s"
 msgstr "Impossible de charger la paire de clés SILC : %s"
 
 msgid "Unable to create connection"
 msgstr "Impossible de créer une connexion."
 
-#, fuzzy
 msgid "Unknown server response"
-msgstr "Réponse du serveur inconnue."
-
-#, fuzzy
+msgstr "Réponse du serveur inconnue"
+
 msgid "Unable to create listen socket"
-msgstr "Impossible de créer le socket."
+msgstr "Impossible de se mettre en écoute sur la connexion"
 
 msgid "SIP usernames may not contain whitespaces or @ symbols"
 msgstr ""
@@ -9495,7 +9460,6 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! Protocol Plugin"
 msgstr "Plugin pour le protocole Yahoo"
 
@@ -9526,9 +9490,8 @@
 msgid "Yahoo Chat port"
 msgstr "Port Yahoo Chat"
 
-#, fuzzy
 msgid "Yahoo JAPAN ID..."
-msgstr "ID Yahoo..."
+msgstr "ID Yahoo Japon..."
 
 #. *< type
 #. *< ui_requirement
@@ -9540,12 +9503,11 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! JAPAN Protocol Plugin"
-msgstr "Plugin pour le protocole Yahoo"
+msgstr "Plugin pour le protocole Yahoo Japon"
 
 msgid "Your SMS was not delivered"
-msgstr ""
+msgstr "Votre SMS n'a pas été transmis"
 
 msgid "Your Yahoo! message did not get sent."
 msgstr "Votre message Yahoo! n'a pas été envoyé"
@@ -9572,32 +9534,28 @@
 msgstr "Ajout du contact refusé"
 
 #. Some error in the received stream
-#, fuzzy
 msgid "Received invalid data"
-msgstr "Données non valides reçues sur la connexion du serveur."
+msgstr "Données reçues non valides"
 
 #. security lock from too many failed login attempts
-#, fuzzy
 msgid ""
 "Account locked: Too many failed login attempts.  Logging into the Yahoo! "
 "website may fix this."
 msgstr ""
-"Erreur inconnue n°%d. Se connecter sur le site web Yahoo! peut corriger le "
-"problème."
+"Compte bloqué : trop de mauvais mots de passe. Se connecter sur le site web "
+"Yahoo! peut corriger le problème."
 
 #. indicates a lock of some description
-#, fuzzy
 msgid ""
 "Account locked: Unknown reason.  Logging into the Yahoo! website may fix "
 "this."
 msgstr ""
-"Erreur inconnue n°%d. Se connecter sur le site web Yahoo! peut corriger le "
-"problème."
+"Compte bloqué : raison inconnue. Se connecter sur le site web Yahoo! peut "
+"corriger le problème."
 
 #. username or password missing
-#, fuzzy
 msgid "Username or password missing"
-msgstr "Nom d'utilisateur ou mot de passe incorrect"
+msgstr "Nom d'utilisateur ou mot de passe manquant"
 
 #, c-format
 msgid ""
@@ -9634,35 +9592,29 @@
 "Erreur inconnue n°%d. Se connecter sur le site web Yahoo! peut corriger le "
 "problème."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add buddy %s to group %s to the server list on account %s."
 msgstr ""
 "Impossible d'ajouter le contact %s au groupe %s sur la liste du serveur pour "
 "le compte %s."
 
-#, fuzzy
 msgid "Unable to add buddy to server list"
-msgstr "Impossible d'ajouter le contact sur la liste du serveur."
+msgstr "Impossible d'ajouter le contact sur la liste du serveur"
 
 #, c-format
 msgid "[ Audible %s/%s/%s.swf ] %s"
 msgstr "[ Audible %s/%s/%s.swf ] %s"
 
-#, fuzzy
 msgid "Received unexpected HTTP response from server"
-msgstr "Réception d'un message HTTP non attendu du serveur."
-
-#, fuzzy, c-format
+msgstr "Réception d'un message HTTP non attendu du serveur"
+
+#, c-format
 msgid "Lost connection with %s: %s"
-msgstr ""
-"Connexion perdue avec %s :\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Connexion perdue avec %s : %s"
+
+#, c-format
 msgid "Unable to establish a connection with %s: %s"
-msgstr ""
-"Impossible de se connecter au serveur :\n"
-"%s"
+msgstr "Impossible de se connecter à %s : %s"
 
 msgid "Not at Home"
 msgstr "Pas à la maison"
@@ -9710,7 +9662,7 @@
 msgstr "Commencer à griffonner"
 
 msgid "Select the ID you want to activate"
-msgstr ""
+msgstr "Choisissez l'ID que vous voulez activer"
 
 msgid "Join whom in chat?"
 msgstr "Qui rejoindre dans une discussion ?"
@@ -9872,7 +9824,6 @@
 msgid "User Rooms"
 msgstr "Salon de discussions utilisateur"
 
-#, fuzzy
 msgid "Connection problem with the YCHT server"
 msgstr "Problème de connexion avec le serveur YCHT"
 
@@ -10006,19 +9957,19 @@
 msgid "Exposure"
 msgstr "Exposition"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to parse response from HTTP proxy: %s"
-msgstr "Impossible de reconnaître la réponse du serveur mandataire HTTP : %s\n"
+msgstr "Impossible de reconnaître la réponse du serveur mandataire HTTP : %s"
 
 #, c-format
 msgid "HTTP proxy connection error %d"
 msgstr "Erreur de connexion au serveur mandataire HTTP %d."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Access denied: HTTP proxy server forbids port %d tunneling"
 msgstr ""
 "Accès interdit : le serveur mandataire n'autorise pas le passage par le port "
-"%d."
+"%d"
 
 #, c-format
 msgid "Error resolving %s"
@@ -10262,7 +10213,7 @@
 msgid "Error Reading %s"
 msgstr "Erreur à la lecture de « %s »."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "An error was encountered reading your %s.  The file has not been loaded, and "
 "the old file has been renamed to %s~."
@@ -10312,7 +10263,7 @@
 msgid "Use this buddy _icon for this account:"
 msgstr "Utiliser cette _icône pour ce compte :"
 
-msgid "_Advanced"
+msgid "Ad_vanced"
 msgstr "_Avancé"
 
 msgid "Use GNOME Proxy Settings"
@@ -10375,9 +10326,8 @@
 msgid "Create _this new account on the server"
 msgstr "Créer ce _nouveau compte sur le serveur"
 
-#, fuzzy
-msgid "_Proxy"
-msgstr "Serveur mandataire"
+msgid "P_roxy"
+msgstr "Serveur _mandataire"
 
 msgid "Enabled"
 msgstr "Activé"
@@ -10412,8 +10362,8 @@
 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] ""
-msgstr[1] ""
+msgstr[0] "Vous avez %d contact nommé %s. Voulez-vous le fusionner ?"
+msgstr[1] "Vous avez %d contacts nommé %s. Voulez-vous les fusionner ?"
 
 msgid ""
 "Merging these contacts will cause them to share a single entry on the buddy "
@@ -10428,9 +10378,8 @@
 msgid "Please update the necessary fields."
 msgstr "Veuillez mettre à jour les rubriques nécessaires."
 
-#, fuzzy
 msgid "A_ccount"
-msgstr "_Compte :"
+msgstr "_Compte"
 
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
@@ -10457,16 +10406,14 @@
 msgid "I_M"
 msgstr "_Message"
 
-#, fuzzy
 msgid "_Audio Call"
-msgstr "_Ajouter une discussion"
+msgstr "Appel _audio"
 
 msgid "Audio/_Video Call"
-msgstr ""
-
-#, fuzzy
+msgstr "Appel audio/_vidéo"
+
 msgid "_Video Call"
-msgstr "Visioconférence"
+msgstr "Appel _vidéo"
 
 msgid "_Send File..."
 msgstr "Envoyer un _fichier..."
@@ -10477,11 +10424,9 @@
 msgid "View _Log"
 msgstr "_Voir les archives"
 
-#, fuzzy
 msgid "Hide When Offline"
 msgstr "Cacher si déconnecté"
 
-#, fuzzy
 msgid "Show When Offline"
 msgstr "Afficher si déconnecté"
 
@@ -10607,9 +10552,8 @@
 msgid "/Tools/_Certificates"
 msgstr "/Outils/_Certificats"
 
-#, fuzzy
 msgid "/Tools/Custom Smile_ys"
-msgstr "/Outils/Frim_ousses"
+msgstr "/Outils/Frimo_usses personnalisée"
 
 msgid "/Tools/Plu_gins"
 msgstr "/Outils/Plu_gins"
@@ -10738,7 +10682,7 @@
 msgstr "Par état"
 
 msgid "By recent log activity"
-msgstr ""
+msgstr "Par discussions récentes"
 
 #, c-format
 msgid "%s disconnected"
@@ -10755,7 +10699,7 @@
 msgstr "Réactiver"
 
 msgid "SSL FAQs"
-msgstr ""
+msgstr "FAQs SSL"
 
 msgid "Welcome back!"
 msgstr "Content de vous revoir !"
@@ -10890,107 +10834,95 @@
 msgstr "Couleur de fond"
 
 msgid "The background color for the buddy list"
-msgstr ""
-
-#, fuzzy
+msgstr "La couleur de fond pour la liste de contacts"
+
 msgid "Layout"
-msgstr "Lao"
+msgstr "Arrangement"
 
 msgid "The layout of icons, name, and status of the blist"
-msgstr ""
+msgstr "L'arrangement des icônes, noms et états dans la liste"
 
 #. Group
-#, fuzzy
 msgid "Expanded Background Color"
-msgstr "Couleur de fond"
+msgstr "Couleur de fond déplié"
 
 msgid "The background color of an expanded group"
-msgstr ""
-
-#, fuzzy
+msgstr "La couleur de fond pour un groupe de contacts déplié"
+
 msgid "Expanded Text"
-msgstr "_Etendre"
+msgstr "Texte déplié"
 
 msgid "The text information for when a group is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "L'information textuelle pour un groupe de contacts déplié"
+
 msgid "Collapsed Background Color"
-msgstr "Changer la couleur du fond"
+msgstr "Couleur de fond replié"
 
 msgid "The background color of a collapsed group"
-msgstr ""
-
-#, fuzzy
+msgstr "La couleur de fond pour un groupe de contacts replié"
+
 msgid "Collapsed Text"
-msgstr "Re_plier"
+msgstr "Texte replié"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "L'information textuelle pour un groupe de contacts replié"
 
 #. Buddy
-#, fuzzy
 msgid "Contact/Chat Background Color"
-msgstr "Changer la couleur du fond"
+msgstr "Couleur du fond des contacts et salons"
 
 msgid "The background color of a contact or chat"
-msgstr ""
-
-#, fuzzy
+msgstr "La couleur de fond pour un contact ou un salon de discussions"
+
 msgid "Contact Text"
-msgstr "Raccourci"
+msgstr "Texte des contacts"
 
 msgid "The text information for when a contact is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "L'information textuelle pour un contact déplié"
+
 msgid "On-line Text"
-msgstr "En ligne"
+msgstr "Texte des contacts connectés"
 
 msgid "The text information for when a buddy is online"
-msgstr ""
-
-#, fuzzy
+msgstr "L'information textuelle pour un contact connecté"
+
 msgid "Away Text"
-msgstr "Absent"
+msgstr "Texte des contacts absents"
 
 msgid "The text information for when a buddy is away"
-msgstr ""
-
-#, fuzzy
+msgstr "L'information textuelle pour un contact absent"
+
 msgid "Off-line Text"
-msgstr "Déconnecté"
+msgstr "Texte des contacts déconnectés"
 
 msgid "The text information for when a buddy is off-line"
-msgstr ""
-
-#, fuzzy
+msgstr "L'information textuelle pour un contact déconnecté"
+
 msgid "Idle Text"
-msgstr "Texte d'humeur"
+msgstr "Texte des contacts inactifs"
 
 msgid "The text information for when a buddy is idle"
-msgstr ""
-
-#, fuzzy
+msgstr "L'information textuelle pour un contact inactif"
+
 msgid "Message Text"
-msgstr "Envoi d'un message"
+msgstr "Texte des messages non-lus"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr ""
+msgstr "L'information textuelle pour les messages non-lus d'un contact"
 
 msgid "Message (Nick Said) Text"
-msgstr ""
+msgstr "Texte des messages avec pseudo"
 
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nick"
 msgstr ""
-
-#, fuzzy
+"L'information textuelle pour les messages dans lesquels apparaissent votre "
+"pseudo"
+
 msgid "The text information for a buddy's status"
-msgstr "Changer les informations pour %s"
-
-#, fuzzy
+msgstr "L'information textuelle pour l'état des contacts"
+
 msgid "Type the host name for this certificate."
 msgstr "Saisissez le nom d'hôte correspondant à ce certificat."
 
@@ -11040,7 +10972,6 @@
 msgid "Get Away Message"
 msgstr "Récupérer le message d'absence"
 
-#, fuzzy
 msgid "Last Said"
 msgstr "Dernières paroles"
 
@@ -11087,21 +11018,17 @@
 msgid "/Conversation/Clea_r Scrollback"
 msgstr "/Conversation/_Effacer la conversation"
 
-#, fuzzy
 msgid "/Conversation/M_edia"
-msgstr "/Conversation/_Plus"
-
-#, fuzzy
+msgstr "/Conversation/Mé_dia"
+
 msgid "/Conversation/Media/_Audio Call"
-msgstr "/Conversation/_Plus"
-
-#, fuzzy
+msgstr "/Conversation/Média/Appel _audio"
+
 msgid "/Conversation/Media/_Video Call"
-msgstr "/Conversation/_Plus"
-
-#, fuzzy
+msgstr "/Conversation/Média/Appel _vidéo"
+
 msgid "/Conversation/Media/Audio\\/Video _Call"
-msgstr "/Conversation/_Voir les archives"
+msgstr "/Conversation/Média/A_ppel audio\\/vidéo"
 
 msgid "/Conversation/Se_nd File..."
 msgstr "/Conversation/Envoyer un _fichier..."
@@ -11175,17 +11102,14 @@
 msgid "/Conversation/View Log"
 msgstr "/Conversation/Voir les archives"
 
-#, fuzzy
 msgid "/Conversation/Media/Audio Call"
-msgstr "/Conversation/Plus"
-
-#, fuzzy
+msgstr "/Conversation/Média/Appel audio"
+
 msgid "/Conversation/Media/Video Call"
-msgstr "/Conversation/Voir les archives"
-
-#, fuzzy
+msgstr "/Conversation/Média/Appel vidéo"
+
 msgid "/Conversation/Media/Audio\\/Video Call"
-msgstr "/Conversation/Plus"
+msgstr "/Conversation/Média/Appel audio\\/vidéo"
 
 msgid "/Conversation/Send File..."
 msgstr "/Conversation/Envoyer un fichier..."
@@ -11372,7 +11296,7 @@
 msgstr ""
 
 msgid "voice and video"
-msgstr ""
+msgstr "voix et vidéo"
 
 msgid "support"
 msgstr "support"
@@ -11498,9 +11422,8 @@
 msgid "Hungarian"
 msgstr "Hongrois"
 
-#, fuzzy
 msgid "Armenian"
-msgstr "Roumain"
+msgstr "Arménien"
 
 msgid "Indonesian"
 msgstr "Indonésien"
@@ -11517,9 +11440,8 @@
 msgid "Ubuntu Georgian Translators"
 msgstr "Traducteurs géorgiens d'Ubuntu"
 
-#, fuzzy
 msgid "Khmer"
-msgstr "Autre"
+msgstr "Khmer"
 
 msgid "Kannada"
 msgstr "Kannara"
@@ -11600,7 +11522,7 @@
 msgstr "Suédois"
 
 msgid "Swahili"
-msgstr ""
+msgstr "Swahili"
 
 msgid "Tamil"
 msgstr "Tamoul"
@@ -11937,7 +11859,6 @@
 msgid "Hyperlink visited color"
 msgstr "Couleur des liens visités"
 
-#, fuzzy
 msgid "Color to draw hyperlink after it has been visited (or activated)."
 msgstr ""
 "Couleur pour afficher les liens hypertextes une fois visités (ou activés)."
@@ -11974,23 +11895,20 @@
 msgstr "Couleur pour afficher le nom pour les messages d'action."
 
 msgid "Action Message Name Color for Whispered Message"
-msgstr "Nom de la couleur des messages chuchotés."
-
-#, fuzzy
+msgstr "Nom de la couleur des messages d'action chuchotés."
+
 msgid "Color to draw the name of a whispered action message."
-msgstr "Couleur pour afficher le nom pour les messages d'action."
+msgstr "Couleur pour afficher le nom pour les messages d'actions chuchotés."
 
 msgid "Whisper Message Name Color"
-msgstr "Nom de la couleur pour les messages envoyés"
-
-#, fuzzy
+msgstr "Nom de la couleur des messages chuchotés."
+
 msgid "Color to draw the name of a whispered message."
-msgstr "Couleur pour afficher le nom pour les messages d'action."
+msgstr "Couleur pour afficher le nom pour les messages chuchotés."
 
 msgid "Typing notification color"
 msgstr "Couleur de la notification de saisie"
 
-#, fuzzy
 msgid "The color to use for the typing notification"
 msgstr ""
 "Couleur pour afficher que quelqu'un est en train de vous écrire un message"
@@ -12246,7 +12164,7 @@
 msgid "%s %s. Try `%s -h' for more information.\n"
 msgstr "%s %s. « %s -h » pour plus d'informations.\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s %s\n"
 "Usage: %s [OPTION]...\n"
@@ -12264,11 +12182,12 @@
 "  -v, --version       display the current version and exit\n"
 msgstr ""
 "%s %s\n"
-"Usage : %s [option] ...\n"
+"Usage : %s [option]...\n"
 "\n"
 "  -c, --config=DOS    lit les fichiers de configuration depuis le dossier "
 "DOS\n"
 "  -d, --debug         affiche les messages de debug sur la sortie standard\n"
+"  -f, --force-online  force online, quelque soit l'état du réseau\n"
 "  -h, --help          affiche ce texte d'aide\n"
 "  -m, --multiple      ne vérifie pas la présence d'une seule instance du "
 "programme\n"
@@ -12280,7 +12199,7 @@
 "  --display=DISPLAY   affichage X à utiliser\n"
 "  -v, --version       affiche le numéro de la version actuelle\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s %s\n"
 "Usage: %s [OPTION]...\n"
@@ -12302,6 +12221,7 @@
 "  -c, --config=REP    lit les fichiers de configuration depuis le dossier "
 "REP\n"
 "  -d, --debug         affiche les messages de debug sur la sortie standard\n"
+"  -f, --force-online  force online, quelque soit l'état du réseau\n"
 "  -h, --help          affiche ce texte d'aide\n"
 "  -m, --multiple      ne vérifie pas la présence d'une seule instance du "
 "programme\n"
@@ -12351,22 +12271,21 @@
 msgstr "Arrêt à cause d'un autre client libpurple existant.\n"
 
 msgid "/_Media"
-msgstr ""
+msgstr "/_Média"
 
 msgid "/Media/_Hangup"
-msgstr ""
-
-#, fuzzy
+msgstr "/Média/_Raccrocher"
+
 msgid "Calling..."
-msgstr "Calcul en cours"
+msgstr "Appel..."
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
-msgstr ""
+msgstr "%s veut engager une session audio/vidéo."
 
 #, c-format
 msgid "%s wishes to start a video session with you."
-msgstr ""
+msgstr "%s veut engager une session vidéo."
 
 #, c-format
 msgid "%s has %d new message."
@@ -12397,9 +12316,8 @@
 "Un navigateur « Manuel » a été choisi choisi mais la ligne de commande est "
 "vide."
 
-#, fuzzy
 msgid "No message"
-msgstr "Message inconnu"
+msgstr "Pas de message"
 
 msgid "Open All Messages"
 msgstr "Ouvrir tous les messages"
@@ -12407,16 +12325,14 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Vous avez du courrier !</span>"
 
-#, fuzzy
 msgid "New Pounces"
-msgstr "Nouvelle alerte"
+msgstr "Nouvelles alertes"
 
 msgid "Dismiss"
-msgstr ""
-
-#, fuzzy
+msgstr "Fermer"
+
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
-msgstr "<span weight=\"bold\" size=\"larger\">Vous avez du courrier !</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Vous avez des alertes !</span>"
 
 msgid "The following plugins will be unloaded."
 msgstr "Les plugins suivants vont être déchargés."
@@ -12466,7 +12382,6 @@
 msgid "Select a file"
 msgstr "Choisissez un fichier"
 
-#, fuzzy
 msgid "Modify Buddy Pounce"
 msgstr "Modifier une alerte"
 
@@ -12543,61 +12458,58 @@
 msgid "Pounce Target"
 msgstr "Cible de l'alerte"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Started typing"
 msgstr "Commence à écrire"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Paused while typing"
 msgstr "Pause pendant la saisie"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Signed on"
 msgstr "Se connecte"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Returned from being idle"
-msgstr "%s n'est plus inactif (%s)"
-
-#, fuzzy, c-format
+msgstr "N'est plus inactif"
+
+#, c-format
 msgid "Returned from being away"
 msgstr "Revient d'absence"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Stopped typing"
 msgstr "S'arrête d'écrire"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Signed off"
 msgstr "Se déconnecte"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Became idle"
 msgstr "Devient inactif"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Went away"
-msgstr "Lorsque absent"
-
-#, fuzzy, c-format
+msgstr "Devient absent"
+
+#, c-format
 msgid "Sent a message"
-msgstr "Envoyer un message"
-
-#, fuzzy, c-format
+msgstr "Envoi un message"
+
+#, c-format
 msgid "Unknown.... Please report this!"
 msgstr "Événement d'alerte inconnu. Veuillez reporter cette erreur."
 
-#, fuzzy
 msgid "Theme failed to unpack."
 msgstr "Le thème de frimousses n'a pas pu être déballé."
 
-#, fuzzy
 msgid "Theme failed to load."
-msgstr "Le thème de frimousses n'a pas pu être déballé."
-
-#, fuzzy
+msgstr "Le thème de frimousses n'a pas pu être chargé."
+
 msgid "Theme failed to copy."
-msgstr "Le thème de frimousses n'a pas pu être déballé."
+msgstr "Le thème de frimousses n'a pas pu être copié."
 
 msgid "Install Theme"
 msgstr "Installer un thème"
@@ -12620,9 +12532,8 @@
 msgstr "Fermer les conversations avec la touche _Echap"
 
 #. Buddy List Themes
-#, fuzzy
 msgid "Buddy List Theme"
-msgstr "Liste de contacts"
+msgstr "Thème de liste de contacts"
 
 #. System Tray
 msgid "System Tray Icon"
@@ -12634,9 +12545,8 @@
 msgid "On unread messages"
 msgstr "Quand des messages sont non lus"
 
-#, fuzzy
 msgid "Conversation Window"
-msgstr "Fenêtres de conversation"
+msgstr "Fenêtre de conversation"
 
 msgid "_Hide new IM conversations:"
 msgstr "_Cacher les nouvelles conversations :"
@@ -12739,9 +12649,9 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Exemple : stunserver.org</span>"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Use _automatically detected IP address: %s"
-msgstr "_Détection auto de l'adresse IP"
+msgstr "_Détection auto de l'adresse IP : %s"
 
 msgid "Public _IP:"
 msgstr "Adresse _IP publique :"
@@ -12763,7 +12673,7 @@
 
 #. TURN server
 msgid "Relay Server (TURN)"
-msgstr ""
+msgstr "Serveur relai (TURN)"
 
 msgid "Proxy Server &amp; Browser"
 msgstr "Serveur mandataire &amp; navigateur"
@@ -13110,11 +13020,11 @@
 msgid "Status for %s"
 msgstr "État pour %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
 msgstr ""
-"Une frimousse spécialisée pour ce raccourci existe déjà. Veuillez choisir un "
+"Une frimousse personnalisée pour « %s » existe déjà. Veuillez choisir un "
 "autre raccourci."
 
 msgid "Custom Smiley"
@@ -13129,28 +13039,24 @@
 msgid "Add Smiley"
 msgstr "Ajouter la frimousse"
 
-#, fuzzy
 msgid "_Image:"
-msgstr "_Image"
+msgstr "_Image :"
 
 #. Shortcut text
-#, fuzzy
 msgid "S_hortcut text:"
-msgstr "Raccourci"
+msgstr "Texte de _raccourci :"
 
 msgid "Smiley"
 msgstr "Frimousse"
 
-#, fuzzy
 msgid "Shortcut Text"
-msgstr "Raccourci"
+msgstr "Texte de raccourci"
 
 msgid "Custom Smiley Manager"
 msgstr "Gestionnaire de frimousses personnalisée"
 
-#, fuzzy
 msgid "Select Buddy Icon"
-msgstr "Choisir contact"
+msgstr "Choisir l'icône de contact"
 
 msgid "Click to change your buddyicon for this account."
 msgstr "Cliquer pour changer votre icône pour ce compte."
@@ -13234,9 +13140,8 @@
 #. * Probably not.  I'll just give an error and return.
 #. The original patch sent the icon used by the launcher.  That's probably wrong
 msgid "Cannot send launcher"
-msgstr "Impossible d'envoyer ce lien."
-
-#, fuzzy
+msgstr "Impossible d'envoyer ce lien"
+
 msgid ""
 "You dragged a desktop launcher. Most likely you wanted to send the target of "
 "this launcher instead of this launcher itself."
@@ -13277,9 +13182,8 @@
 "Impossible de charger l'image « %s » : la raison est inconnue, le fichier est "
 "peut-être endommagé."
 
-#, fuzzy
 msgid "_Open Link"
-msgstr "_Ouvrir les liens :"
+msgstr "_Ouvrir le lien"
 
 msgid "_Copy Link Location"
 msgstr "_Copier l'adresse du lien"
@@ -13287,9 +13191,21 @@
 msgid "_Copy Email Address"
 msgstr "_Copier l'adresse électronique"
 
+msgid "_Open File"
+msgstr "Ouvrir le _fichier"
+
+msgid "Open _Containing Directory"
+msgstr "Ouvrir le _dossier du fichier"
+
 msgid "Save File"
 msgstr "Sauver le fichier"
 
+msgid "_Play Sound"
+msgstr "_Jouer le son"
+
+msgid "_Save File"
+msgstr "_Sauver le fichier"
+
 msgid "Select color"
 msgstr "Choisir la couleur"
 
@@ -13377,77 +13293,65 @@
 msgid "Displays statistical information about your buddies' availability"
 msgstr "Affiche des statistiques sur la disponibilité de vos contacts"
 
-#, fuzzy
 msgid "Server name request"
-msgstr "Hôte du serveur"
-
-#, fuzzy
+msgstr "Demande du nom du serveur"
+
 msgid "Enter an XMPP Server"
-msgstr "Rejoindre un serveur de conférences"
-
-#, fuzzy
+msgstr "Saisissez l'adresse d'un serveur XMPP"
+
 msgid "Select an XMPP server to query"
-msgstr "Choisissez un serveur de conférences"
-
-#, fuzzy
+msgstr "Choisissez un serveur XMPP à consulter"
+
 msgid "Find Services"
-msgstr "Services en ligne"
-
-#, fuzzy
+msgstr "Trouver des services"
+
 msgid "Add to Buddy List"
-msgstr "Envoyer sa liste de contacts"
-
-#, fuzzy
+msgstr "Ajouter à la liste de contacts"
+
 msgid "Gateway"
-msgstr "S'absente"
-
-#, fuzzy
+msgstr "Portail"
+
 msgid "Directory"
-msgstr "Dossier des archives"
-
-#, fuzzy
+msgstr "Annuaire"
+
 msgid "PubSub Collection"
-msgstr "Choix des sons"
-
-#, fuzzy
+msgstr "Ensemble PubSub"
+
 msgid "PubSub Leaf"
-msgstr "Service PubSub"
-
-#, fuzzy
+msgstr "Feuillet PubSub"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
-msgstr "Description"
+msgstr ""
+"\n"
+"<b>Description :</b> "
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "Informations du service de découverte"
-
-#, fuzzy
+msgstr "Découverte de services"
+
 msgid "_Browse"
-msgstr "_Navigateur :"
-
-#, fuzzy
+msgstr "_Parcourir"
+
 msgid "Server does not exist"
-msgstr "Cet utilisateur n'existe pas"
-
-#, fuzzy
+msgstr "Le serveur n'existe pas"
+
 msgid "Server does not support service discovery"
-msgstr "Le serveur ne supporte pas le blocage"
-
-#, fuzzy
+msgstr "Le serveur ne supporte pas la découverte de services"
+
 msgid "XMPP Service Discovery"
-msgstr "Informations du service de découverte"
+msgstr "Découverte de services XMPP"
 
 msgid "Allows browsing and registering services."
-msgstr ""
-
-#, fuzzy
+msgstr "Permet la visualisation et l'enregistrement de services."
+
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
-msgstr "Ce plugin est utile pour débugger les clients ou serveurs XMPP."
+msgstr ""
+"Ce plugin est utile pour s'abonner avec d'anciens transports ou d'autres "
+"services XMPP."
 
 msgid "Buddy is idle"
 msgstr "L'utilisateur est inactif"
@@ -13854,7 +13758,6 @@
 msgstr "Plugin de messagerie musicale pour la composition collaborative."
 
 #. *  summary
-#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
 "on a piece of music by editing a common score in real-time."
@@ -13978,7 +13881,6 @@
 msgid "Highlighted Message Name Color"
 msgstr "Nom de la couleur des messages en surbrillance"
 
-#, fuzzy
 msgid "Typing Notification Color"
 msgstr "Couleur de la notification de saisie"
 
@@ -14011,23 +13913,20 @@
 msgid "GTK+ Text Shortcut Theme"
 msgstr "Raccourci du thème GTK+"
 
-#, fuzzy
 msgid "Disable Typing Notification Text"
-msgstr "Activer la notification de saise"
-
-#, fuzzy
+msgstr "Désactiver le texte de notification de saisie"
+
 msgid "GTK+ Theme Control Settings"
-msgstr "Contrôle Pidgin du thème GTK+"
-
-#, fuzzy
+msgstr "Contrôle des paramètres du thème GTK+"
+
 msgid "Colors"
-msgstr "Fermer"
+msgstr "Couleurs"
 
 msgid "Fonts"
 msgstr "Polices"
 
 msgid "Miscellaneous"
-msgstr ""
+msgstr "Divers"
 
 msgid "Gtkrc File Tools"
 msgstr "Outils du fichier Gtkrc"
@@ -14112,7 +14011,6 @@
 msgstr "Bouton Envoyer dans la fenêtre de conversation."
 
 #. *< summary
-#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
 "for use when no physical keyboard is present."
@@ -14171,94 +14069,78 @@
 "Remplace le texte dans les messages envoyés grâce à des règles de "
 "substitution."
 
-#, fuzzy
 msgid "Just logged in"
-msgstr "Non connecté"
-
-#, fuzzy
+msgstr "Vient de se connecter"
+
 msgid "Just logged out"
-msgstr "Non connecté"
+msgstr "Vient de se déconnecter"
 
 msgid ""
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
-
-#, fuzzy
+"Icône pour le contact/\n"
+"Icône pour une personne inconnue"
+
 msgid "Icon for Chat"
-msgstr "Rejoindre une discussion"
-
-#, fuzzy
+msgstr "Icône pour un salon de discussions"
+
 msgid "Ignored"
-msgstr "Ignorer"
-
-#, fuzzy
+msgstr "Ignoré"
+
 msgid "Founder"
-msgstr "Très fort"
-
-#, fuzzy
+msgstr "Fondateur"
+
 msgid "Operator"
-msgstr "Opéra"
+msgstr "Opérateur"
 
 msgid "Half Operator"
-msgstr ""
-
-#, fuzzy
+msgstr "Demi-opérateur"
+
 msgid "Authorization dialog"
-msgstr "Autorisation donnée"
-
-#, fuzzy
+msgstr "Boite de message pour autorisation"
+
 msgid "Error dialog"
-msgstr "Erreur "
-
-#, fuzzy
+msgstr "Boite de message pour erreur"
+
 msgid "Information dialog"
-msgstr "Informations"
+msgstr "Boite de message pour informations"
 
 msgid "Mail dialog"
-msgstr ""
-
-#, fuzzy
+msgstr "Boite de message pour courrier"
+
 msgid "Question dialog"
-msgstr "Boite de message pour requête"
-
-#, fuzzy
+msgstr "Boite de message pour demande"
+
 msgid "Warning dialog"
-msgstr "Niveau d'avertissement"
+msgstr "Boite de message pour avertissement"
 
 msgid "What kind of dialog is this?"
-msgstr ""
-
-#, fuzzy
+msgstr "Quel genre de boite de message est-ce là ?"
+
 msgid "Status Icons"
-msgstr "État pour %s"
-
-#, fuzzy
+msgstr "Icônes d'état"
+
 msgid "Chatroom Emblems"
-msgstr "Langue du salon de discussions"
-
-#, fuzzy
+msgstr "Emblêmes de salon de discussions"
+
 msgid "Dialog Icons"
-msgstr "Changer l'icône"
-
-#, fuzzy
+msgstr "Icônes des boites de message"
+
 msgid "Pidgin Icon Theme Editor"
-msgstr "Contrôle Pidgin du thème GTK+"
-
-#, fuzzy
+msgstr "Éditeur de thème d'icônes Pidgin"
+
 msgid "Contact"
-msgstr "Infos du contact"
-
-#, fuzzy
+msgstr "Contact"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "Liste de contacts"
-
-#, fuzzy
+msgstr "Éditeur de thème de liste de contacts Pidgin"
+
 msgid "Edit Buddylist Theme"
-msgstr "Liste de contacts"
+msgstr "Permet de modifier le thème de la liste de contacts"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "Permet de modifier le thème des icônes"
 
 #. *< type
 #. *< ui_requirement
@@ -14267,16 +14149,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "Contrôle Pidgin du thème GTK+"
+msgstr "Éditeur de thème Pidgin"
 
 #. *< name
 #. *< version
 #. *  summary
-#, fuzzy
 msgid "Pidgin Theme Editor."
-msgstr "Contrôle Pidgin du thème GTK+"
+msgstr "Permet de modifier le thème de Pidgin"
 
 #. *< type
 #. *< ui_requirement
@@ -14445,7 +14325,6 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "Options spécifiques à Pidgin Windows"
 
-#, fuzzy
 msgid ""
 "Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
@@ -14526,9 +14405,6 @@
 #~ msgid "Last Activity"
 #~ msgstr "Dernière activité"
 
-#~ msgid "Service Discovery Info"
-#~ msgstr "Informations du service de découverte"
-
 #~ msgid "Service Discovery Items"
 #~ msgstr "Items du service de découverte"
 
@@ -14547,9 +14423,6 @@
 #~ msgid "Ad-Hoc Commands"
 #~ msgstr "Commandes ad-hoc"
 
-#~ msgid "PubSub Service"
-#~ msgstr "Service PubSub"
-
 #~ msgid "SOCKS5 Bytestreams"
 #~ msgstr "Flux de données SOCKS5"
 
@@ -14676,9 +14549,6 @@
 #~ msgid "Error. SSL support is not installed."
 #~ msgstr "Support SSL non installé"
 
-#~ msgid "Incorrect password."
-#~ msgstr "Mot de passe incorrect."
-
 #~ msgid ""
 #~ "Could not connect to BOS server:\n"
 #~ "%s"
@@ -14686,17 +14556,20 @@
 #~ "Impossible de se connecter au serveur BOS :\n"
 #~ "%s"
 
+#~ msgid "Invalid username."
+#~ msgstr "Nom d'utilisateur non valide."
+
+#~ msgid "Incorrect password."
+#~ msgstr "Mot de passe incorrect."
+
+#~ msgid "Could Not Connect"
+#~ msgstr "Impossible de se connecter."
+
 #~ msgid "You may be disconnected shortly.  Check %s for updates."
 #~ msgstr ""
 #~ "Vous risquez être déconnecté sous peu. Consultez %s pour plus "
 #~ "d'informations."
 
-#~ msgid "Could Not Connect"
-#~ msgstr "Impossible de se connecter."
-
-#~ msgid "Invalid username."
-#~ msgstr "Nom d'utilisateur non valide."
-
 #~ msgid "Could not decrypt server reply"
 #~ msgstr "Impossible de déchiffrer la réponse du serveur"
 
@@ -14727,12 +14600,14 @@
 #~ msgid "Could not create listen socket"
 #~ msgstr "Impossible de créer le socket d'écoute."
 
-#~ msgid "Could not resolve hostname"
-#~ msgstr "Impossible de résoudre le nom de l'hôte."
-
-#, fuzzy
 #~ msgid "Incorrect Password"
-#~ msgstr "Mot de passe incorrect."
+#~ msgstr "Mot de passe incorrect"
+
+#~ msgid "Account locked: Too many failed login attempts"
+#~ msgstr "Compte bloqué : trop de mauvais mots de passe"
+
+#~ msgid "Account locked: See the debug log"
+#~ msgstr "Compte bloqué : regarder le journal de debug"
 
 #~ msgid ""
 #~ "Could not establish a connection with %s:\n"
@@ -14741,6 +14616,9 @@
 #~ "Impossible de se connecter avec %s :\n"
 #~ "%s"
 
+#~ msgid "Activate which ID?"
+#~ msgstr "Activer quelle identité ?"
+
 #~ msgid "Yahoo Japan"
 #~ msgstr "Yahoo Japon"
 
@@ -14760,13 +14638,15 @@
 #~ msgid "Could not resolve host name"
 #~ msgstr "Impossible de résoudre le nom de l'hôte."
 
-#, fuzzy
 #~ msgid ""
 #~ "Unable to connect to %s: Server requires TLS/SSL, but no TLS/SSL support "
 #~ "was found."
 #~ msgstr ""
-#~ "TLS/SSL est nécessaire pour la connexion au serveur. Aucun support de TLS/"
-#~ "SSL n'a pu être trouvé."
+#~ "Impossible de se connecter à %s : TLS/SSL est nécessaire mais aucun "
+#~ "support n'est disponible."
+
+#~ msgid "_Proxy"
+#~ msgstr "Serveur _mandataire"
 
 #~ msgid "Conversation Window Hiding"
 #~ msgstr "Quand la fenêtre de conversation est cachée"
@@ -14780,9 +14660,6 @@
 #~ msgid "Please select an image for the smiley."
 #~ msgstr "Veuillez choisir une image pour cette frimousse."
 
-#~ msgid "Activate which ID?"
-#~ msgstr "Activer quelle identité ?"
-
 #~ msgid "Cursor Color"
 #~ msgstr "Couleur du curseur"
 
--- a/po/sv.po	Sat Jul 18 04:31:38 2009 +0000
+++ b/po/sv.po	Sat Jul 18 07:26:04 2009 +0000
@@ -9,8 +9,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-06 15:04-0700\n"
-"PO-Revision-Date: 2009-02-25 23:14+0100\n"
+"POT-Creation-Date: 2009-07-15 18:36+0200\n"
+"PO-Revision-Date: 2009-07-15 18:36+0100\n"
 "Last-Translator: Peter Hjalmarsson <xake@rymdraket.net>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -863,12 +863,11 @@
 msgid "System Log"
 msgstr "Systemlogg"
 
-#, fuzzy
 msgid "Calling ... "
-msgstr "Beräknar..."
+msgstr "Ringer..."
 
 msgid "Hangup"
-msgstr ""
+msgstr "La på"
 
 #. Number of actions
 msgid "Accept"
@@ -878,25 +877,24 @@
 msgstr "Avslå"
 
 msgid "Call in progress."
-msgstr ""
+msgstr "Samtal pågår."
 
 msgid "The call has been terminated."
-msgstr ""
+msgstr "Samtalet avslutat."
 
 #, c-format
 msgid "%s wishes to start an audio session with you."
-msgstr ""
+msgstr "%s önskar påbörja en ljudsession med dig."
 
 #, c-format
 msgid "%s is trying to start an unsupported media session type with you."
-msgstr ""
-
-#, fuzzy
+msgstr "%s försöker påbörja en ej stödd mediasession med dig."
+
 msgid "You have rejected the call."
-msgstr "Du har lämnat kanalen%s%s"
+msgstr "Du har nekat samtalet."
 
 msgid "call: Make an audio call."
-msgstr ""
+msgstr "call: Påbörja ett ljudsamtal"
 
 msgid "Emails"
 msgstr "Mejl"
@@ -1552,22 +1550,23 @@
 "\n"
 "Fetching TinyURL..."
 msgstr ""
+"\n"
+"Hämtar TinyURL..."
 
 msgid "Only create TinyURL for urls of this length or greater"
-msgstr ""
+msgstr "Skapa enbart TinyURL om url:en är av denna längd eller större"
 
 msgid "TinyURL (or other) address prefix"
-msgstr ""
-
-#, fuzzy
+msgstr "TinyURL (eller annan) adressprefix"
+
 msgid "TinyURL"
-msgstr "LåtURL"
+msgstr "TinyURL"
 
 msgid "TinyURL plugin"
-msgstr ""
+msgstr "TinyURL modul"
 
 msgid "When receiving a message with URL(s), TinyURL for easier copying"
-msgstr ""
+msgstr "När du får en/flera URL/URLer, TinyURL för att lättare hantering"
 
 msgid "accounts"
 msgstr "konton"
@@ -1772,7 +1771,6 @@
 msgstr "+++ %s har kopplat ifrån"
 
 #. Unknown error
-#. Unknown error!
 msgid "Unknown error"
 msgstr "Okänt fel"
 
@@ -1819,9 +1817,8 @@
 msgid "%s left the room (%s)."
 msgstr "%s lämnade rummet (%s)."
 
-#, fuzzy
 msgid "Invite to chat"
-msgstr "Bjud in till konferens"
+msgstr "Bjud in till chatt"
 
 #. Put our happy label in it.
 msgid ""
@@ -1964,6 +1961,10 @@
 msgstr "Inleder filöverföring av %s från %s"
 
 #, c-format
+msgid "Transfer of file <A HREF=\"file://%s\">%s</A> complete"
+msgstr "Överföringen av filen <A HREF=\"file://%s\">%s</A> är färdig"
+
+#, c-format
 msgid "Transfer of file %s complete"
 msgstr "Överföringen av filen %s är färdig"
 
@@ -2160,9 +2161,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <AUTO-SVAR>: %s\n"
 
-#, fuzzy
 msgid "Error creating conference."
-msgstr "Fel vid skapandet av anslutning"
+msgstr "Fel vid skapandet av konferens."
 
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
@@ -2564,7 +2564,6 @@
 msgstr "Inkludera andra IM-klienters loggfiler i loggfilsvisaren."
 
 #. * description
-#, fuzzy
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
 "Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
@@ -2572,8 +2571,8 @@
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
 msgstr ""
-"Vid visning av loggfiler inkluderar denna modul loggar från andra IM-"
-"klienter. För närvarande inkluderar detta Adium, MSN Messenger, och "
+"Vid visning av loggfiler kommer denna modul inkludera loggar från andra IM-"
+"klienter. För närvarande inkluderar detta Adium, MSN Messenger, aMSN, och "
 "Trillian.\n"
 "\n"
 "VARNING: Denna modul är fortfarande alpha-kod och kan krasha ofta. Använd på "
@@ -2623,7 +2622,6 @@
 msgstr ""
 "Spara meddelandet skickat till en frånkopplad användare som en notifiering"
 
-#, fuzzy
 msgid ""
 "The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
@@ -2658,9 +2656,8 @@
 msgid "Do not ask. Always save in pounce."
 msgstr "Fråga inte. Spara alltid som notifiering."
 
-#, fuzzy
 msgid "One Time Password"
-msgstr "Ange lösenordet"
+msgstr "Engångslösenord"
 
 #. *< type
 #. *< ui_requirement
@@ -2669,13 +2666,13 @@
 #. *< priority
 #. *< id
 msgid "One Time Password Support"
-msgstr ""
+msgstr "Support för Engångslösenord"
 
 #. *< name
 #. *< version
 #. *  summary
 msgid "Enforce that passwords are used only once."
-msgstr ""
+msgstr "Tvinga att lösenordet enbart används en gång."
 
 #. *  description
 msgid ""
@@ -2683,6 +2680,9 @@
 "are only used in a single successful connection.\n"
 "Note: The account password must not be saved for this to work."
 msgstr ""
+"Tillåter dig att välja per konto om lösenorden som inte sparas bara ska "
+"användas till en lyckad anslutning.\n"
+"Notering: Kontolösenordet får inte sparas om dettta ska fungera."
 
 #. *< type
 #. *< ui_requirement
@@ -2878,17 +2878,15 @@
 "Kunde inte finna en installation av ActiveTCL. Om du tänker använda TCL-"
 "modulen måste du installera ActiveTCL från http://www.activestate.com\n"
 
-#, fuzzy
 msgid ""
 "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin."
 "im/BonjourWindows for more information."
 msgstr ""
-"Apples Bonjour För Windows hittades inte, läs FAQen: http://d.pidgin.im/"
+"Kunde inte hitta Apples \"Bonjour För Windows\", läs på http://d.pidgin.im/"
 "BonjourWindows för mer information"
 
-#, fuzzy
 msgid "Unable to listen for incoming IM connections"
-msgstr "Kan inte lyssna efter inkommande IM anslutningar\n"
+msgstr "Kan inte lyssna efter inkommande IM anslutningar"
 
 msgid ""
 "Unable to establish connection with the local mDNS server.  Is it running?"
@@ -2939,21 +2937,17 @@
 msgid "Unable to send the message, the conversation couldn't be started."
 msgstr "Kan inte skicka meddelandet, konversationen kunde inte startas."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to create socket: %s"
-msgstr ""
-"Kan inte skapa uttag:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Kan inte skapa uttag %s"
+
+#, c-format
 msgid "Unable to bind socket to port: %s"
-msgstr "Kunde inte binda uttag till port"
-
-#, fuzzy, c-format
+msgstr "Kunde inte binda uttag till port: %s"
+
+#, c-format
 msgid "Unable to listen on socket: %s"
-msgstr ""
-"Kan inte skapa uttag:\n"
-"%s"
+msgstr "Kan intelyssna på uttag: %s"
 
 msgid "Error communicating with local mDNSResponder."
 msgstr "Fel vid kommunikation med den lokala mDNSRespondern."
@@ -3005,17 +2999,14 @@
 msgid "Load buddylist from file..."
 msgstr "Läs in kompislista från fil..."
 
-#, fuzzy
 msgid "You must fill in all registration fields"
-msgstr "Fyll i registreringsfälten."
-
-#, fuzzy
+msgstr "Du måste fylla i alla registreringsfälten"
+
 msgid "Passwords do not match"
-msgstr "Lösenorden stämmer inte överens."
-
-#, fuzzy
+msgstr "Lösenorden stämmer inte överens"
+
 msgid "Unable to register new account.  An unknown error occurred."
-msgstr "Kunde inte registrera nytt konto. Ett fel uppstod.\n"
+msgstr "Kunde inte registrera nytt konto. Ett okänt fel uppstod."
 
 msgid "New Gadu-Gadu Account Registered"
 msgstr "Nytt Gadu-gadu-konto registrerat"
@@ -3030,11 +3021,10 @@
 msgstr "Lösenord (igen)"
 
 msgid "Enter captcha text"
-msgstr ""
-
-#, fuzzy
+msgstr "Ange captcha-text"
+
 msgid "Captcha"
-msgstr "Captcha-bild"
+msgstr "Captcha"
 
 msgid "Register New Gadu-Gadu Account"
 msgstr "Registrera nytt Gadu-Gadu-konto"
@@ -3173,9 +3163,9 @@
 msgid "Chat _name:"
 msgstr "Chatt_namn:"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to resolve hostname '%s': %s"
-msgstr "Kan inte ansluta till servern."
+msgstr "Kan inte slå upp värdnamn '%s': %s"
 
 #. 1. connect to server
 #. connect to the server
@@ -3188,9 +3178,8 @@
 msgid "This chat name is already in use"
 msgstr "Det chattnamnet används redan"
 
-#, fuzzy
 msgid "Not connected to the server"
-msgstr "Inte ansluten till servern."
+msgstr "Inte ansluten till servern"
 
 msgid "Find buddies..."
 msgstr "Hitta kompisar..."
@@ -3231,9 +3220,8 @@
 msgid "Gadu-Gadu User"
 msgstr "Gadu-Gadu-användare"
 
-#, fuzzy
 msgid "GG server"
-msgstr "Hämtar server"
+msgstr "GG server"
 
 #, c-format
 msgid "Unknown command: %s"
@@ -3249,9 +3237,8 @@
 msgid "File Transfer Failed"
 msgstr "Filöverföringen misslyckades"
 
-#, fuzzy
 msgid "Unable to open a listening port."
-msgstr "Kunde inte öppna en lyssnande port."
+msgstr "Kunde inte öppna en lyssnningsport."
 
 msgid "Error displaying MOTD"
 msgstr "Fel vid visning av MOTD"
@@ -3273,11 +3260,9 @@
 #.
 #. TODO: what to do here - do we really have to disconnect?
 #. TODO: do we really want to disconnect on a failure to write?
-#, fuzzy, c-format
+#, c-format
 msgid "Lost connection with server: %s"
-msgstr ""
-"Tappade anslutningen med servern:\n"
-"%s"
+msgstr "Tappade anslutningen med servern: %s"
 
 msgid "View MOTD"
 msgstr "Visa MOTD"
@@ -3288,9 +3273,8 @@
 msgid "_Password:"
 msgstr "_Lösenord:"
 
-#, fuzzy
 msgid "IRC nick and server may not contain whitespace"
-msgstr "IRC-nickar får inte innehålla blanksteg"
+msgstr "IRC-nsmeknamn och server får inte innehålla blanksteg"
 
 msgid "SSL support unavailable"
 msgstr "SSL-stöd ej tillgängligt"
@@ -3299,13 +3283,13 @@
 msgstr "Kan inte ansluta"
 
 #. this is a regular connect, error out
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect: %s"
-msgstr "Kan inte ansluta till %s"
-
-#, fuzzy, c-format
+msgstr "Kan inte ansluta: %s"
+
+#, c-format
 msgid "Server closed the connection"
-msgstr "Servern stängde konversationen."
+msgstr "Servern stängde anslutningen"
 
 msgid "Users"
 msgstr "Användare"
@@ -3489,13 +3473,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 "Det chattnamnet används redan"
-
-#, fuzzy
+msgstr "Smeknamnet \"%s\" används redan."
+
 msgid "Nickname in use"
-msgstr "Smeknamn"
+msgstr "Smeknamnet används"
 
 msgid "Cannot change nick"
 msgstr "Kan inte ändra nick"
@@ -3740,11 +3723,9 @@
 msgid "execute"
 msgstr "utför"
 
-#, fuzzy
 msgid "Server requires TLS/SSL, but no TLS/SSL support was found."
-msgstr "Servern kräver TLS/SSL vid inloggning. Hittade inget stöd för TLS/SSL."
-
-#, fuzzy
+msgstr "Servern kräver TLS/SSL, men inget stöd för TLS/SSL kunde hittades."
+
 msgid "You require encryption, but no TLS/SSL support was found."
 msgstr "Du kräver kryptering, men inget stöd för TLS/SSL hittades."
 
@@ -3762,13 +3743,11 @@
 msgid "Plaintext Authentication"
 msgstr "Klartextautentisering"
 
-#, fuzzy
 msgid "SASL authentication failed"
-msgstr "Autentisering misslyckades"
-
-#, fuzzy
+msgstr "SASL Autentisering misslyckades"
+
 msgid "Invalid response from server"
-msgstr "Ogiltigt svar från servern."
+msgstr "Ogiltigt svar från server"
 
 msgid "Server does not use any supported authentication method"
 msgstr "Servern använder inga autentiseringsmetoder som stöds"
@@ -3779,36 +3758,28 @@
 msgid "Invalid challenge from server"
 msgstr "Ogiltigt utmaning från servern"
 
-#, fuzzy, c-format
+#, c-format
 msgid "SASL error: %s"
-msgstr "SASL fel"
+msgstr "SASL fel: %s"
 
 msgid "The BOSH connection manager terminated your session."
-msgstr ""
-
-#, fuzzy
+msgstr "BOSH anslutningshanterare avslutade din session."
+
 msgid "No session ID given"
-msgstr "Ingen motivering angavs."
-
-#, fuzzy
+msgstr "Inget sessions ID angavs"
+
 msgid "Unsupported version of BOSH protocol"
-msgstr "Ej stöd version"
-
-#, fuzzy
+msgstr "Ej stödd version av BOSH-protokollet"
+
 msgid "Unable to establish a connection with the server"
-msgstr ""
-"Kunde inte skapa en anslutning med servern:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Kunde inte skapa en anslutning med servern"
+
+#, c-format
 msgid "Unable to establish a connection with the server: %s"
-msgstr ""
-"Kunde inte skapa en anslutning med servern:\n"
-"%s"
-
-#, fuzzy
+msgstr "Kunde inte skapa en anslutning med servern: %s"
+
 msgid "Unable to establish SSL connection"
-msgstr "Kan inte skapa anslutning"
+msgstr "Kan inte skapa SSL-anslutning"
 
 msgid "Full Name"
 msgstr "Fullständigt namn"
@@ -3879,9 +3850,8 @@
 msgid "Operating System"
 msgstr "Operativsystem"
 
-#, fuzzy
 msgid "Local Time"
-msgstr "Lokal fil:"
+msgstr "Lokal tid"
 
 msgid "Priority"
 msgstr "Prioritet"
@@ -3896,11 +3866,10 @@
 
 #, c-format
 msgid "%s ago"
-msgstr ""
-
-#, fuzzy
+msgstr "%s sedan"
+
 msgid "Logged Off"
-msgstr "Ansluten"
+msgstr "Frånkopplad"
 
 msgid "Middle Name"
 msgstr "Andranamn"
@@ -4069,26 +4038,24 @@
 msgid "Find Rooms"
 msgstr "Sök rum"
 
-#, fuzzy
 msgid "Affiliations:"
-msgstr "Alias:"
-
-#, fuzzy
+msgstr "Anknytningar:"
+
 msgid "No users found"
-msgstr "Inga matchande användare funna"
-
-#, fuzzy
+msgstr "Inga användare funna"
+
 msgid "Roles:"
-msgstr "Roll"
-
-#, fuzzy
+msgstr "Roller:"
+
 msgid "Ping timed out"
-msgstr "Ping överskred en tidsgräns"
+msgstr "Ping överskred sin tidsgräns"
 
 msgid ""
 "Unable to find alternative XMPP connection methods after failing to connect "
 "directly."
 msgstr ""
+"Kunde inte hitta en alternativ XMPP-anslutningsmetod efter direktanslutning "
+"misslyckades."
 
 msgid "Invalid XMPP ID"
 msgstr "Ogiltigt XMPP ID"
@@ -4096,9 +4063,8 @@
 msgid "Invalid XMPP ID. Domain must be set."
 msgstr "Ogiltigt XMPP IP. Domän måste anges."
 
-#, fuzzy
 msgid "Malformed BOSH URL"
-msgstr "Kunde inte ansluta till servern."
+msgstr "Felutformad BOSH-URAL"
 
 #, c-format
 msgid "Registration of %s@%s successful"
@@ -4166,9 +4132,8 @@
 msgid "Change Registration"
 msgstr "Ändra registrering"
 
-#, fuzzy
 msgid "Malformed BOSH Connect Server"
-msgstr "Kunde inte ansluta till servern."
+msgstr "Felutformad BOSH anslutningsserver"
 
 msgid "Error unregistering account"
 msgstr "Fel vid avregistrering av konto"
@@ -4455,19 +4420,21 @@
 msgid "Unable to ping user %s"
 msgstr "Kan inte pinga användaren %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to buzz, because there is nothing known about %s."
-msgstr "Kunde inte surra eftersom det inte finns något känt om användaren %s."
-
-#, fuzzy, c-format
+msgstr "Kunde inte surra eftersom det inte finns något känt om %s."
+
+#, c-format
 msgid "Unable to buzz, because %s might be offline."
-msgstr "Kunde inte surra eftersom användaren %s kanske är frånkopplad."
-
-#, fuzzy, c-format
+msgstr "Kunde inte surra eftersom %s kanske är frånkopplad."
+
+#, c-format
 msgid ""
 "Unable to buzz, because %s does not support it or does not wish to receive "
 "buzzes now."
-msgstr "Kan inte surra, användaren %s stödjer inte det."
+msgstr ""
+"Kan inte surra eftersom %s stödjer inte det eller önskar ta emot surr just "
+"nu."
 
 #, c-format
 msgid "Buzzing %s..."
@@ -4482,35 +4449,35 @@
 msgid "%s has buzzed you!"
 msgstr "%s har surrat dig!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to initiate media with %s: invalid JID"
-msgstr "Kan inte skicka filen till %s, ogiltig JID"
-
-#, fuzzy, c-format
+msgstr "Kan inte påbörja media med %s: ogiltig JID"
+
+#, c-format
 msgid "Unable to initiate media with %s: user is not online"
-msgstr "Kan inte skicka filen till %s, användaren är inte ansluten"
-
-#, fuzzy, c-format
+msgstr "Kan inte påbörja media med %s: användaren är inte ansluten"
+
+#, c-format
 msgid "Unable to initiate media with %s: not subscribed to user presence"
 msgstr ""
-"Kan inte skicka filen till %s, prenumererar inte på användartillgänglighet"
-
-#, fuzzy
+"Kan inte påbörja media med %s: prenumererar inte på användartillgänglighet"
+
 msgid "Media Initiation Failed"
-msgstr "Registreringen misslyckades"
-
-#, fuzzy, c-format
+msgstr "Initiering av media misslyckades"
+
+#, c-format
 msgid ""
 "Please select the resource of %s with which you would like to start a media "
 "session."
-msgstr "Var god välj vilken tillflykt för %s du vill sända filen till"
+msgstr ""
+"Var god välj vilken tillflykt för %s med vilken du vill påbörja en "
+"mediasession."
 
 msgid "Select a Resource"
 msgstr "Välj en tillflykt"
 
-#, fuzzy
 msgid "Initiate Media"
-msgstr "Starta _chatt"
+msgstr "Påbörja Media"
 
 msgid "config:  Configure a chat room."
 msgstr "config: Konfigurera ett chattrum."
@@ -4530,21 +4497,19 @@
 msgid "ban &lt;user&gt; [reason]:  Ban a user from the room."
 msgstr "ban &lt;användare&gt; [anledning]:  Bannlys en användare från rummet."
 
-#, 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;användare&gt; &lt;ägare|admin|medlem|utstött|ingen&gt;: Ange "
-"en användares koppling till rummet."
-
-#, fuzzy
+"affiliate &lt;ägare|admin|medlem|utstött|ingen&gt;: [nick1] [nick2] ...: "
+"Hämta eller ange användarnas anknytning till rummet."
+
 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;användare&gt; &lt;moderator|deltagare|besökare|inget&gt;: Ange en "
-"användares roll i rummet."
+"role &lt;moderator|deltagare|besökare|inget&gt;: [nick1] [nick2] ...: Hämta "
+"eller ange användarnas roll i rummet."
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
 msgstr ""
@@ -4609,7 +4574,7 @@
 msgstr "Filetransports proxies"
 
 msgid "BOSH URL"
-msgstr ""
+msgstr "BOSH URL"
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
@@ -4673,29 +4638,25 @@
 msgid "_Accept Defaults"
 msgstr "_Acceptera förval"
 
-#, fuzzy
 msgid "No reason"
-msgstr "Ingen motivering angavs."
-
-#, fuzzy, c-format
+msgstr "Ingen anledning"
+
+#, c-format
 msgid "You have been kicked: (%s)"
-msgstr "Du har sparkats ut av %s: (%s)"
-
-#, fuzzy, c-format
+msgstr "Du har sparkats ut: (%s)"
+
+#, c-format
 msgid "Kicked (%s)"
-msgstr "Utsparkad av %s (%s)"
-
-#, fuzzy
+msgstr "Utsparkad (%s)"
+
 msgid "An error occurred on the in-band bytestream transfer\n"
-msgstr "Ett fel uppstod när filen öppnades."
-
-#, fuzzy
+msgstr ""
+
 msgid "Transfer was closed."
-msgstr "Filöverföringen misslyckades"
-
-#, fuzzy
+msgstr "Överföringen stängdes inte."
+
 msgid "Failed to open the file"
-msgstr "Kunde inte öppna filen '%s': %s"
+msgstr "Kunde inte öppna filen"
 
 msgid "Failed to open in-band bytestream"
 msgstr ""
@@ -4766,7 +4727,7 @@
 msgstr "Kunde inte lägga till \"%s\"."
 
 msgid "Buddy Add error"
-msgstr ""
+msgstr "Fel vid tillläggning av kompis"
 
 msgid "The username specified does not exist."
 msgstr "Den angivna användarnamnet finns inte."
@@ -5023,9 +4984,29 @@
 msgid "Non-IM Contacts"
 msgstr "Icke-IM kontakter"
 
-#, fuzzy, c-format
+#, c-format
+msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>"
+msgstr ""
+"%s skickade en vink. <a href='msn-wink://%s'>Klicka här för att spela upp "
+"den</a>"
+
+#, c-format
+msgid "%s sent a wink, but it could not be saved"
+msgstr "%s skickade en vink, men den kunde inte sparas"
+
+#, c-format
+msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>"
+msgstr ""
+"%s skickade ett röstmeddelande. <a href='audio://%s'>Klicka här för att "
+"spela upp det</a>"
+
+#, c-format
+msgid "%s sent a voice clip, but it could not be saved"
+msgstr "%s skickade ett röstmeddelande, men det kunde inte sparas"
+
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
-msgstr "%s har skickat dig en webbkamerainbjudan, vilket ännu inte stöds."
+msgstr "%s har skickat dig en inbjudan till en röstchatt vilken inte stöds än."
 
 msgid "Nudge"
 msgstr "Vibba"
@@ -5179,6 +5160,29 @@
 msgstr ""
 "SSL-stöd krävs för att använda MSN. Installera ett SSL-bibliotek som stöds."
 
+#, c-format
+msgid ""
+"Unable to add the buddy %s because the username is invalid.  Usernames must "
+"be a valid email address."
+msgstr ""
+"Kunde inte lägga till kompisen %s eftersom användarnamnet är ogiltigt. "
+"Användarnamnet måste vara en giltig epost-adress."
+
+msgid "Unable to Add"
+msgstr "Kunde inte lägga till"
+
+msgid "Authorization Request Message:"
+msgstr "Meddelande om auktoriseringsbegäran:"
+
+msgid "Please authorize me!"
+msgstr "Snälla auktorisera mig!"
+
+#. *
+#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
+#.
+msgid "_OK"
+msgstr "_OK"
+
 msgid "Error retrieving profile"
 msgstr "Fel vid hämtning av profil"
 
@@ -5371,13 +5375,14 @@
 msgid "%s just sent you a Nudge!"
 msgstr "%s skickade just en vibb!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown error (%d): %s"
-msgstr "Okänt fel (%d)"
+msgstr "Okänt fel (%d): %s"
 
 msgid "Unable to add user"
 msgstr "Kan inte lägga till användaren"
 
+#. Unknown error!
 #, c-format
 msgid "Unknown error (%d)"
 msgstr "Okänt fel (%d)"
@@ -5449,24 +5454,20 @@
 "Anslutningsfel från %s servern:\n"
 "%s"
 
-#, fuzzy
 msgid "Our protocol is not supported by the server"
-msgstr "Vårt protokoll stöds inte av servern."
-
-#, fuzzy
+msgstr "Vårt protokoll stöds inte av servern"
+
 msgid "Error parsing HTTP"
-msgstr "Fel vid avkodning av HTTP."
-
-#, fuzzy
+msgstr "Fel vid avkodning av HTTP"
+
 msgid "You have signed on from another location"
-msgstr "Du har loggat in från en annan plats."
+msgstr "Du har loggat in från en annan plats"
 
 msgid "The MSN servers are temporarily unavailable. Please wait and try again."
 msgstr "MSN-sernvern är temporärt otillgänglig. Var god försök igen senare."
 
-#, fuzzy
 msgid "The MSN servers are going down temporarily"
-msgstr "MSN-servern går ner temporärt."
+msgstr "MSN-servern går ner temporärt"
 
 #, c-format
 msgid "Unable to authenticate: %s"
@@ -5495,9 +5496,11 @@
 msgid "Retrieving buddy list"
 msgstr "Tar emot kompislista"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s requests to view your webcam, but this request is not yet supported."
-msgstr "%s har skickat dig en webbkamerainbjudan, vilket ännu inte stöds."
+msgstr ""
+"%s har frågar efter att få se fin webbkamera, men denna förfrågan stöds inte "
+"än."
 
 #, c-format
 msgid "%s has sent you a webcam invite, which is not yet supported."
@@ -5692,14 +5695,14 @@
 msgid "Protocol error, code %d: %s"
 msgstr "Protokollfel, gav felkod %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 Ditt lösenord är %d tecken, längre än den förväntade max-gränsen på %d "
-"för MySpaceIM. Var vänlig förkorta ditt lösenord på följande adress http://"
+"%s Ditt lösenord är %zu tecken vilket är längre än den förväntade max-"
+"gränsen på %d. Var vänlig förkorta ditt lösenord på följande adress http://"
 "profileedit.myspace.com/index.cfm?fuseaction=accountSettings.changePassword "
 "och försök sedan igen."
 
@@ -5804,6 +5807,9 @@
 "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
 "to set your username."
 msgstr ""
+"Ett fel uppstod vid försök att ange ditt användarnamn. Försök igen, eller gå "
+"till http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
+"för att ange ditt användarnamn."
 
 msgid "MySpaceIM - Username Available"
 msgstr "MySpaceIM - Användarnamnet är tillgänglig"
@@ -5958,15 +5964,15 @@
 #. * connotation.  It is generally used in a playful tone
 #. * with friends.
 msgid "Raspberry"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "Pruttljud"
+
+#, c-format
 msgid "%s has raspberried you!"
-msgstr "%s har surrat dig!"
+msgstr "%s har gjort pruttljud mot dig!"
 
 #, c-format
 msgid "Raspberrying %s..."
-msgstr ""
+msgstr "Gör pruttljud mot %s..."
 
 msgid "Required parameters not passed in"
 msgstr "Nödvändiga parametrar skickades inte"
@@ -6064,9 +6070,9 @@
 msgid "Unknown error: 0x%X"
 msgstr "Okänt fel: 0x%X"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "Kunde inte logga in."
+msgstr "Kunde inte logga in: %s"
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
@@ -6198,12 +6204,11 @@
 "%s appears to be offline and did not receive the message that you just sent."
 msgstr "%s verkar vara frånkopplad och fick inte meddelandet du just skickade."
 
-#, fuzzy
 msgid ""
 "Unable to connect to server. Please enter the address of the server to which "
 "you wish to connect."
 msgstr ""
-"Kunde inte ansluta till servern. Var god ange serveradressen som du vill "
+"Kunde inte ansluta till servern. Var god ange adressen till servern du vill "
 "ansluta till."
 
 msgid "This conference has been closed. No more messages can be sent."
@@ -6228,9 +6233,8 @@
 msgid "Server port"
 msgstr "Serverport"
 
-#, fuzzy
 msgid "Received unexpected response from "
-msgstr "Mottog oväntat HTTP-svar från servern."
+msgstr "Mottog oväntat svar från"
 
 #. username connecting too frequently
 msgid ""
@@ -6240,12 +6244,12 @@
 "Du har anslutit och kopplat ifrån för många gånger. Vänta tio minuter och "
 "prova igen. Om du fortsätter att försöka kommer du att få vänta ännu längre."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting "
-msgstr "Problem att efterfråga inloggningsmarkör"
+msgstr "Fel vid efterfrågan av"
 
 msgid "AOL does not allow your screen name to authenticate here"
-msgstr ""
+msgstr "AOL tillåter inte ditt skärmnamn att autentisera här"
 
 msgid "Could not join chat room"
 msgstr "Kunde inte ansluta till chatrummet"
@@ -6253,9 +6257,8 @@
 msgid "Invalid chat room name"
 msgstr "Ogiltigt namn på chatrum"
 
-#, fuzzy
 msgid "Received invalid data on connection with server"
-msgstr "Tog emot felaktig data vid anslutning till server."
+msgstr "Tog emot felaktig data vid anslutning till server"
 
 #. *< type
 #. *< ui_requirement
@@ -6303,7 +6306,6 @@
 msgid "Received invalid data on connection with remote user."
 msgstr "Tog emot felaktig data över anslutningen till motparten."
 
-#, fuzzy
 msgid "Unable to establish a connection with the remote user."
 msgstr "Kunde inte skapa en anslutning till motparten."
 
@@ -6505,15 +6507,13 @@
 msgstr "Kompiskommentar"
 
 # Osäker!!!
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect to authentication server: %s"
-msgstr ""
-"Kunde inte ansluta till autentiseringsserver:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Kunde inte ansluta till autentiseringsserver: %s"
+
+#, c-format
 msgid "Unable to connect to BOS server: %s"
-msgstr "Kan inte ansluta till servern."
+msgstr "Kan inte ansluta till BOS server: %s"
 
 msgid "Username sent"
 msgstr "Användarnamnet är skickat"
@@ -6525,16 +6525,16 @@
 msgid "Finalizing connection"
 msgstr "Avsluta anslutning"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to sign on as %s because the username is invalid.  Usernames must be "
 "a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-"Kan inte logga in: Kunde inte ansluta som %s eftersom användarnamnet är "
-"ogiltigt.  Användarnamnet måste vara en giltig mejladress eller starta med "
-"en bokstav och får endast innehålla bokstäver, nummer och mellanslag, eller "
-"enbart innehålla nummer."
+"Kan inte logga in som %s eftersom användarnamnet är ogiltigt.  "
+"Användarnamnet måste vara en giltig epost-adress eller starta med en bokstav "
+"och får endast innehålla bokstäver, nummer och mellanslag, eller enbart "
+"innehålla nummer."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -6554,35 +6554,32 @@
 #. Unregistered username
 #. uid is not exist
 #. the username does not exist
-#, fuzzy
 msgid "Username does not exist"
-msgstr "Användaren finns inte"
+msgstr "Användarnamn finns inte"
 
 #. Suspended account
-#, fuzzy
 msgid "Your account is currently suspended"
-msgstr "Ditt konto är avstängt för tillfället."
+msgstr "Ditt konto är avstängt för tillfället"
 
 #. service temporarily unavailable
 msgid "The AOL Instant Messenger service is temporarily unavailable."
 msgstr "Tjänsten är tillfälligt onåbar."
 
+#. client too old
 #, c-format
 msgid "The client version you are using is too old. Please upgrade at %s"
 msgstr "Versionen av klienten du använder är för gammal. Uppgradera på %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 ""
-"Du har anslutit och kopplat ifrån för många gånger. Vänta tio minuter och "
-"prova igen. Om du fortsätter att försöka kommer du att få vänta ännu längre."
-
-#, fuzzy
+"Du har anslutit och kopplat ifrån för ofta. Vänta tio minuter och prova "
+"igen. Om du fortsätter att försöka kommer du att få vänta ännu längre."
+
 msgid "The SecurID key entered is invalid"
-msgstr "SecurID-nyckeln som är angiven är ogiltig."
+msgstr "SecurID-nyckeln som angavs är ogiltig"
 
 msgid "Enter SecurID"
 msgstr "Ange SecurID"
@@ -6590,12 +6587,6 @@
 msgid "Enter the 6 digit number from the digital display."
 msgstr "Slå in de 6 siffrorna från den digitala skärmen."
 
-#. *
-#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
-#.
-msgid "_OK"
-msgstr "_OK"
-
 msgid "Password sent"
 msgstr "Lösenord skickat"
 
@@ -6605,12 +6596,6 @@
 msgid "Please authorize me so I can add you to my buddy list."
 msgstr "Snälla godkänn mig så jag kan lägga till dig till min kompislista."
 
-msgid "Authorization Request Message:"
-msgstr "Meddelande om auktoriseringsbegäran:"
-
-msgid "Please authorize me!"
-msgstr "Snälla auktorisera mig!"
-
 msgid "No reason given."
 msgstr "Ingen motivering angiven."
 
@@ -6941,20 +6926,17 @@
 msgid "Away message too long."
 msgstr "Frånvaromeddelandet är för långt."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-"Kunde inte lägga till kompisen %s eftersom användarnamnet är ogiltigt. "
-"Användarnamnet måste antingen vara en giltig mejladress, börja med en "
+"Kunde inte lägga till kompisen %s eftersom användarnamnet är ogiltigt.  "
+"Användarnamnet måste antingen vara en giltig epost-adress, börja med en "
 "bokstav och endast innehålla bokstäver, siffror och mellanslag eller bara "
 "innehålla siffror."
 
-msgid "Unable to Add"
-msgstr "Kunde inte lägga till"
-
 msgid "Unable to Retrieve Buddy List"
 msgstr "Kunde inte hämta kompislista"
 
@@ -6969,7 +6951,7 @@
 msgid "Orphans"
 msgstr "Föräldralösa"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because you have too many buddies in your buddy "
 "list.  Please remove one and try again."
@@ -6980,7 +6962,7 @@
 msgid "(no name)"
 msgstr "(inget namn)"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add the buddy %s for an unknown reason."
 msgstr "Kunde inte lägga till kompisen %s av okänd anledning."
 
@@ -7145,9 +7127,8 @@
 msgid "Search for Buddy by Information"
 msgstr "Sök efter kompis via information"
 
-#, fuzzy
 msgid "Use clientLogin"
-msgstr "Användaren är inte inloggad"
+msgstr "Använd klientLogin"
 
 msgid ""
 "Always use AIM/ICQ proxy server for\n"
@@ -7345,30 +7326,26 @@
 msgstr "Notering"
 
 #. callback
-#, fuzzy
 msgid "Buddy Memo"
-msgstr "Ändra Kompismemo"
+msgstr "Kompismemo"
 
 msgid "Change his/her memo as you like"
-msgstr ""
-
-#, fuzzy
+msgstr "Ändra hans/hennes memo som du vill"
+
 msgid "_Modify"
-msgstr "Ändra"
-
-#, fuzzy
+msgstr "_Ändra"
+
 msgid "Memo Modify"
-msgstr "Ändra"
-
-#, fuzzy
+msgstr "Ändra Memo"
+
 msgid "Server says:"
-msgstr "Servern upptagen"
+msgstr "Servern säger:"
 
 msgid "Your request was accepted."
-msgstr ""
+msgstr "Din förfrågan accepterades."
 
 msgid "Your request was rejected."
-msgstr ""
+msgstr "Din förfrågan avvisades."
 
 #, c-format
 msgid "%u requires verification"
@@ -7683,7 +7660,7 @@
 msgstr "<p><b>Nogräknade testare</b>:<br>\n"
 
 msgid "and more, please let me know... thank you!))"
-msgstr ""
+msgstr "och fler, snälla berätta för mig... Tack!))"
 
 msgid "<p><i>And, all the boys in the backroom...</i><br>\n"
 msgstr "<p><i>Och alla pojkarna i bakrummet...</i><br>\n"
@@ -7759,7 +7736,6 @@
 msgid "Update interval (seconds)"
 msgstr "Uppdateringsintervall (seconds)"
 
-#, fuzzy
 msgid "Unable to decrypt server reply"
 msgstr "Kan inte dekryptera serversvaret"
 
@@ -7827,9 +7803,8 @@
 msgid "Requesting token"
 msgstr "Efterfrågar polett"
 
-#, fuzzy
 msgid "Unable to resolve hostname"
-msgstr "Kan inte ansluta till servern."
+msgstr "Kunde ej slå upp värdnamnet"
 
 msgid "Invalid server or port"
 msgstr "Ogiltig server eller port"
@@ -7882,9 +7857,8 @@
 msgid "QQ Qun Command"
 msgstr "QQ Qun Kommand"
 
-#, fuzzy
 msgid "Unable to decrypt login reply"
-msgstr "Kan inte avkryptera inloggningssvaret"
+msgstr "Kunde inte avkryptera inloggningssvaret"
 
 msgid "Unknown LOGIN CMD"
 msgstr "Okänd LOGIN CMD"
@@ -8865,7 +8839,6 @@
 msgid "Disconnected by server"
 msgstr "Frånkopplad av server"
 
-#, fuzzy
 msgid "Error connecting to SILC Server"
 msgstr "Fel vid anslutning till SILC-server"
 
@@ -8881,7 +8854,6 @@
 msgid "Performing key exchange"
 msgstr "Utför nyckelutbyte"
 
-#, fuzzy
 msgid "Unable to load SILC key pair"
 msgstr "Kunde inte ladda SILC nyckelpar"
 
@@ -8889,16 +8861,14 @@
 msgid "Connecting to SILC Server"
 msgstr "Ansluter till SILC-server"
 
-#, fuzzy
 msgid "Unable to not load SILC key pair"
 msgstr "Kunde inte ladda SILC nyckelpar"
 
 msgid "Out of memory"
 msgstr "Slut på minne"
 
-#, fuzzy
 msgid "Unable to initialize SILC protocol"
-msgstr "Kan inte inleda SILC-klientanslutning"
+msgstr "Kan inte initiera SILC-protokollet"
 
 msgid "Error loading SILC key pair"
 msgstr "Fel vid inläsning av SILC-nyckelpar"
@@ -9194,9 +9164,8 @@
 msgid "Creating SILC key pair..."
 msgstr "Skapa SILC-nyckelpar..."
 
-#, fuzzy
 msgid "Unable to create SILC key pair"
-msgstr "Kunde inte skapa SILC-nyckelpar\n"
+msgstr "Kunde inte skapa SILC-nyckelpar"
 
 #. Hint for translators: Please check the tabulator width here and in
 #. the next strings (short strings: 2 tabs, longer strings 1 tab,
@@ -9335,27 +9304,24 @@
 msgid "Failure: Authentication failed"
 msgstr "Misslyckande: Autentisering misslyckades"
 
-#, fuzzy
 msgid "Unable to initialize SILC Client connection"
-msgstr "Kan inte inleda SILC-klientanslutning"
+msgstr "Kan inte initiera SILC-klientanslutning"
 
 msgid "John Noname"
 msgstr "John Namnlös"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to load SILC key pair: %s"
 msgstr "Kunde inte ladda SILC nyckelpar: %s"
 
 msgid "Unable to create connection"
 msgstr "Kan inte skapa anslutning"
 
-#, fuzzy
 msgid "Unknown server response"
-msgstr "Okänt serversvar."
-
-#, fuzzy
+msgstr "Okänt serversvar"
+
 msgid "Unable to create listen socket"
-msgstr "Kan inte skapa socket"
+msgstr "Kunde inte skapa lyssningsuttag"
 
 msgid "SIP usernames may not contain whitespaces or @ symbols"
 msgstr "SIP-användarnamnet får inte innehålla mellanslag eller symbolen @"
@@ -9418,7 +9384,6 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! Protocol Plugin"
 msgstr "Insticksmodul för Yahoo-protokoll"
 
@@ -9449,9 +9414,8 @@
 msgid "Yahoo Chat port"
 msgstr "Yahoo Chatt port"
 
-#, fuzzy
 msgid "Yahoo JAPAN ID..."
-msgstr "Yahoo-ID..."
+msgstr "Yahoo JAPAN ID..."
 
 #. *< type
 #. *< ui_requirement
@@ -9463,12 +9427,11 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! JAPAN Protocol Plugin"
-msgstr "Insticksmodul för Yahoo-protokoll"
+msgstr "Insticksmodul för Yahoo JAPAN protokoll"
 
 msgid "Your SMS was not delivered"
-msgstr ""
+msgstr "Ditt SMS levererades inte"
 
 msgid "Your Yahoo! message did not get sent."
 msgstr "Ditt Yahoo!-meddelande skickades inte."
@@ -9495,28 +9458,27 @@
 msgstr "Lägg till kompisavvisning"
 
 #. Some error in the received stream
-#, fuzzy
 msgid "Received invalid data"
-msgstr "Tog emot felaktig data vid anslutning till server."
+msgstr "Tog emot felaktig data"
 
 #. security lock from too many failed login attempts
-#, fuzzy
 msgid ""
 "Account locked: Too many failed login attempts.  Logging into the Yahoo! "
 "website may fix this."
-msgstr "Okänt felnummer %d. Logga in på Yahoo!s hemsida kan fixa detta."
+msgstr ""
+"Kontot låst: För många inloggningsförsök.  Logga in på Yahoo!s hemsida kan "
+"fixa detta."
 
 #. indicates a lock of some description
-#, fuzzy
 msgid ""
 "Account locked: Unknown reason.  Logging into the Yahoo! website may fix "
 "this."
-msgstr "Okänt felnummer %d. Logga in på Yahoo!s hemsida kan fixa detta."
+msgstr ""
+"Kontot låst: Okänd anledning.  Logga in på Yahoo!s hemsida kan fixa detta."
 
 #. username or password missing
-#, fuzzy
 msgid "Username or password missing"
-msgstr "Felaktigt användarnamn eller lösenord"
+msgstr "Användarnamn eller lösenord saknas"
 
 #, c-format
 msgid ""
@@ -9549,33 +9511,27 @@
 msgid "Unknown error number %d. Logging into the Yahoo! website may fix this."
 msgstr "Okänt felnummer %d. Logga in på Yahoo!s hemsida kan fixa detta."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add buddy %s to group %s to the server list on account %s."
-msgstr "Kan inte lägga till kompis %s i grupp %s på serverlistan för konto %s."
-
-#, fuzzy
+msgstr "Kan inte lägga till kompis %s i grupp %s på serverlistan för konto %s "
+
 msgid "Unable to add buddy to server list"
-msgstr "Kunde inte lägga till kompis i listan på servern"
+msgstr "Kunde inte lägga till kompis i serverlistan"
 
 #, c-format
 msgid "[ Audible %s/%s/%s.swf ] %s"
 msgstr "[ Hörbar %s/%s/%s.swf ] %s"
 
-#, fuzzy
 msgid "Received unexpected HTTP response from server"
-msgstr "Mottog oväntat HTTP-svar från servern."
-
-#, fuzzy, c-format
+msgstr "Mottog oväntat HTTP-svar från servern"
+
+#, c-format
 msgid "Lost connection with %s: %s"
-msgstr ""
-"Tappade anslutningen med %s:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Tappade anslutningen med %s: %s"
+
+#, c-format
 msgid "Unable to establish a connection with %s: %s"
-msgstr ""
-"Kunde inte skapa en anslutning med servern:\n"
-"%s"
+msgstr "Kunde inte skapa en anslutning med %s: %s"
 
 msgid "Not at Home"
 msgstr "Inte hemma"
@@ -9623,7 +9579,7 @@
 msgstr "Starta kladda"
 
 msgid "Select the ID you want to activate"
-msgstr ""
+msgstr "Välj det ID du vill aktivera"
 
 msgid "Join whom in chat?"
 msgstr "Gå med vem in i chatten?"
@@ -9776,9 +9732,8 @@
 msgid "User Rooms"
 msgstr "Användarrum"
 
-#, fuzzy
 msgid "Connection problem with the YCHT server"
-msgstr "Problem med anslutning till YCHT-server."
+msgstr "Anslutningsproblem till YCHT-server"
 
 msgid ""
 "(There was an error converting this message.\t Check the 'Encoding' option "
@@ -9908,17 +9863,17 @@
 msgid "Exposure"
 msgstr "Exponering"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to parse response from HTTP proxy: %s"
-msgstr "Kan inte tolka svaret från HTTP-proxyn: %s\n"
+msgstr "Kan inte tolka svaret från HTTP-proxyn: %s"
 
 #, c-format
 msgid "HTTP proxy connection error %d"
 msgstr "HTTP-proxyanslutningsfel %d"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Access denied: HTTP proxy server forbids port %d tunneling"
-msgstr "Åtkomst nekad: HTTP-proxyservern tillåter inte tunnel på port %d."
+msgstr "Åtkomst nekad: HTTP-proxyservern tillåter inte tunnel på port %d"
 
 #, c-format
 msgid "Error resolving %s"
@@ -10163,12 +10118,12 @@
 msgid "Error Reading %s"
 msgstr "Fel vid läsning av %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "An error was encountered reading your %s.  The file has not been loaded, and "
 "the old file has been renamed to %s~."
 msgstr ""
-"Ett fel upptäcktes vid inläsandet av din %s. De har inte laddats och den "
+"Ett fel upptäcktes vid inläsandet av din %s. Filen har inte laddats och den "
 "gamla har blivit flyttad till %s~."
 
 msgid "Internet Messenger"
@@ -10213,8 +10168,8 @@
 msgid "Use this buddy _icon for this account:"
 msgstr "Använd denna kompis_ikon för detta konto:"
 
-msgid "_Advanced"
-msgstr "_Avancerat"
+msgid "Ad_vanced"
+msgstr "A_vancerat"
 
 msgid "Use GNOME Proxy Settings"
 msgstr "Använd GNOME proxyinställningar"
@@ -10276,9 +10231,8 @@
 msgid "Create _this new account on the server"
 msgstr "Skapa detta _nya kontot på servern"
 
-#, fuzzy
-msgid "_Proxy"
-msgstr "Proxy"
+msgid "P_roxy"
+msgstr "P_roxy"
 
 msgid "Enabled"
 msgstr "Aktiverad"
@@ -10328,9 +10282,8 @@
 msgid "Please update the necessary fields."
 msgstr "Var vänlig uppdatera de nödvändiga fälten."
 
-#, fuzzy
 msgid "A_ccount"
-msgstr "Konto"
+msgstr "_Konto"
 
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
@@ -10355,16 +10308,14 @@
 msgid "I_M"
 msgstr "_Meddelande"
 
-#, fuzzy
 msgid "_Audio Call"
-msgstr "_Lägg till chatt"
+msgstr "_Ljudsamtal"
 
 msgid "Audio/_Video Call"
-msgstr ""
-
-#, fuzzy
+msgstr "Ljud/_Videosamtal"
+
 msgid "_Video Call"
-msgstr "Videochatt"
+msgstr "_Videosamtal"
 
 msgid "_Send File..."
 msgstr "_Skicka fil..."
@@ -10375,13 +10326,11 @@
 msgid "View _Log"
 msgstr "Visa _logg"
 
-#, fuzzy
 msgid "Hide When Offline"
-msgstr "Dölj om frånkopplade"
-
-#, fuzzy
+msgstr "Dölj när frånkopplad"
+
 msgid "Show When Offline"
-msgstr "Visa om frånkopplade"
+msgstr "Visa när frånkopplade"
 
 msgid "_Alias..."
 msgstr "_Alias..."
@@ -10507,9 +10456,8 @@
 msgid "/Tools/_Certificates"
 msgstr "/Verktyg/_Certifikat"
 
-#, fuzzy
 msgid "/Tools/Custom Smile_ys"
-msgstr "/Verktyg/Smile_y"
+msgstr "/Verktyg/Egna Smile_ys"
 
 msgid "/Tools/Plu_gins"
 msgstr "/Verktyg/Insticksmodu_ler"
@@ -10638,7 +10586,7 @@
 msgstr "Efter status"
 
 msgid "By recent log activity"
-msgstr ""
+msgstr "Efter nylig aktivitet i loggen"
 
 #, c-format
 msgid "%s disconnected"
@@ -10655,7 +10603,7 @@
 msgstr "Återaktivera konto"
 
 msgid "SSL FAQs"
-msgstr ""
+msgstr "SSL FAQs"
 
 msgid "Welcome back!"
 msgstr "Välkommen tillbaka"
@@ -10786,111 +10734,98 @@
 msgid "Background Color"
 msgstr "Bakgrundsfärg"
 
-#, fuzzy
 msgid "The background color for the buddy list"
-msgstr "Denna gruppen har lagst till i din kompislista."
-
-#, fuzzy
+msgstr "Bakgrundsfärgen för kompislistan"
+
 msgid "Layout"
-msgstr "Lao"
+msgstr "Utseende"
 
 msgid "The layout of icons, name, and status of the blist"
-msgstr ""
+msgstr "Utseendet på ikoner, namn och status i kompislistan"
 
 #. Group
-#, fuzzy
 msgid "Expanded Background Color"
-msgstr "Bakgrundsfärg"
+msgstr "Expanderad bakgrundsfärg"
 
 msgid "The background color of an expanded group"
-msgstr ""
-
-#, fuzzy
+msgstr "Bakgrundsfärgen på en expanderad grupp"
+
 msgid "Expanded Text"
-msgstr "_Expandera"
+msgstr "Expanderad text"
 
 msgid "The text information for when a group is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "Textinformationen för när en grupp är expanderad"
+
 msgid "Collapsed Background Color"
-msgstr "Välj bakgrundsfärg"
+msgstr "Ihopfälld bakgrundsfärg"
 
 msgid "The background color of a collapsed group"
-msgstr ""
-
-#, fuzzy
+msgstr "Bakgrundfärgen för en ihopfälld grupp"
+
 msgid "Collapsed Text"
-msgstr "_Fäll ihop"
+msgstr "Ihopfälld text"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "Textinformationen för när en grupp är ihopfälld"
 
 #. Buddy
-#, fuzzy
 msgid "Contact/Chat Background Color"
-msgstr "Välj bakgrundsfärg"
+msgstr "Kontakt/Chatt-bakgrundsfärg"
 
 msgid "The background color of a contact or chat"
-msgstr ""
-
-#, fuzzy
+msgstr "Bakgrundsfärgen för en kontakt eller chatt"
+
 msgid "Contact Text"
-msgstr "Genväg"
+msgstr "Kontakttext"
 
 msgid "The text information for when a contact is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "Textinformationen för när en kontakt är expanderad"
+
 msgid "On-line Text"
-msgstr "Ansluten"
+msgstr "Ansluten-text"
 
 msgid "The text information for when a buddy is online"
-msgstr ""
-
-#, fuzzy
+msgstr "Textinformationen för när en kompis är ansluten"
+
 msgid "Away Text"
-msgstr "Frånvarande"
+msgstr "Frånvarotext"
 
 msgid "The text information for when a buddy is away"
-msgstr ""
-
-#, fuzzy
+msgstr "Textinformationen för när en kompis är borta"
+
 msgid "Off-line Text"
-msgstr "Frånkopplad"
+msgstr "Frånkopplad-text"
 
 msgid "The text information for when a buddy is off-line"
-msgstr ""
-
-#, fuzzy
+msgstr "Textinformationen för när en kompis är frånkopplad"
+
 msgid "Idle Text"
-msgstr "Humörstext"
+msgstr "Vilotext"
 
 msgid "The text information for when a buddy is idle"
-msgstr ""
-
-#, fuzzy
+msgstr "Textinformationen för när en kompis är vilande"
+
 msgid "Message Text"
-msgstr "Meddelande skickas"
+msgstr "Meddelandetext"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr ""
+msgstr "Textinformationen för när en kompis har ett oläst meddelande"
 
 msgid "Message (Nick Said) Text"
-msgstr ""
+msgstr "Meddelande (Smeknamn nämnt) Text"
 
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nick"
 msgstr ""
-
-#, fuzzy
+"Textinformationen för när en chatt har ett oläst meddelande som nämner ditt "
+"namn"
+
 msgid "The text information for a buddy's status"
-msgstr "Ändra användarinformationen för %s"
-
-#, fuzzy
+msgstr "Textinformationen för en kompis status"
+
 msgid "Type the host name for this certificate."
-msgstr "Ange värden detta certifikatet är för."
+msgstr "Ange värdnamnet för detta certifikatet."
 
 #. Widget creation function
 msgid "SSL Servers"
@@ -10939,7 +10874,6 @@
 msgid "Get Away Message"
 msgstr "Hämta frånvaromeddelande"
 
-#, fuzzy
 msgid "Last Said"
 msgstr "Senast sagt"
 
@@ -10986,21 +10920,17 @@
 msgid "/Conversation/Clea_r Scrollback"
 msgstr "/Konversation/_Rensa tillbakablick"
 
-#, fuzzy
 msgid "/Conversation/M_edia"
-msgstr "/Konversation/_Mer"
-
-#, fuzzy
+msgstr "/Konversation/M_er"
+
 msgid "/Conversation/Media/_Audio Call"
-msgstr "/Konversation/_Mer"
-
-#, fuzzy
+msgstr "/Konversation/Media/_Ljudsamtal"
+
 msgid "/Conversation/Media/_Video Call"
-msgstr "/Konversation/_Mer"
-
-#, fuzzy
+msgstr "/Konversation/Media/_Videosamtal"
+
 msgid "/Conversation/Media/Audio\\/Video _Call"
-msgstr "/Konversation/Visa _Logg"
+msgstr "/Konversation/Media/Ljud\\/Video _Samtal"
 
 msgid "/Conversation/Se_nd File..."
 msgstr "/Konversation/S_kicka fil..."
@@ -11076,17 +11006,14 @@
 msgid "/Conversation/View Log"
 msgstr "/Konversation/Visa logg"
 
-#, fuzzy
 msgid "/Conversation/Media/Audio Call"
-msgstr "/Konversation/Mer"
-
-#, fuzzy
+msgstr "/Konversation/Media/Ljudsamtal"
+
 msgid "/Conversation/Media/Video Call"
-msgstr "/Konversation/Visa logg"
-
-#, fuzzy
+msgstr "/Konversation/Media/Videosamtal"
+
 msgid "/Conversation/Media/Audio\\/Video Call"
-msgstr "/Konversation/Mer"
+msgstr "/Konversation/Media/Ljud\\/Videosamtal"
 
 msgid "/Conversation/Send File..."
 msgstr "/Konversation/Skicka fil..."
@@ -11268,10 +11195,10 @@
 
 #. feel free to not translate this
 msgid "Ka-Hing Cheung"
-msgstr ""
+msgstr "Ka-Hing Cheung"
 
 msgid "voice and video"
-msgstr ""
+msgstr "röst och video"
 
 msgid "support"
 msgstr "support"
@@ -11403,9 +11330,8 @@
 msgid "Hungarian"
 msgstr "Ungerska"
 
-#, fuzzy
 msgid "Armenian"
-msgstr "Rumänska"
+msgstr "Armeniska"
 
 msgid "Indonesian"
 msgstr "Indonesiska"
@@ -11422,9 +11348,8 @@
 msgid "Ubuntu Georgian Translators"
 msgstr "Ubuntu Georgiska översättare"
 
-#, fuzzy
 msgid "Khmer"
-msgstr "Annan"
+msgstr "Khmer"
 
 msgid "Kannada"
 msgstr "Kannada"
@@ -11505,7 +11430,7 @@
 msgstr "Svenska"
 
 msgid "Swahili"
-msgstr ""
+msgstr "Swahili"
 
 msgid "Tamil"
 msgstr "Tamilska"
@@ -11838,9 +11763,8 @@
 msgid "Hyperlink visited color"
 msgstr "Färg på besökta hyperlänkar"
 
-#, fuzzy
 msgid "Color to draw hyperlink after it has been visited (or activated)."
-msgstr "Färgen länkar ska skrivas i när de har besökts (eller aktiverats)."
+msgstr "Färgen för länkar när de har besökts (eller aktiverats)."
 
 # "utpekade" var det bästa ord jag kunde komma på.
 msgid "Hyperlink prelight color"
@@ -11878,23 +11802,20 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr "Actionmeddelandens namnfärg"
 
-#, fuzzy
 msgid "Color to draw the name of a whispered action message."
-msgstr "Färgen att skriva namnet i ett actionmeddelande."
+msgstr "Färgen för namnet i ett viskat aktionsmeddelande."
 
 msgid "Whisper Message Name Color"
 msgstr "Viskade meddelandens namnfärg"
 
-#, fuzzy
 msgid "Color to draw the name of a whispered message."
-msgstr "Färgen att skriva namnet i ett actionmeddelande."
+msgstr "Färgen för namnet i ett viskat meddelande."
 
 msgid "Typing notification color"
 msgstr "Färg på notifiering"
 
-#, fuzzy
 msgid "The color to use for the typing notification"
-msgstr "Färgen används för skriftnotifiering"
+msgstr "Färgen för skriftnotifiering"
 
 msgid "Typing notification font"
 msgstr "Typsnitt för skriftnotifiering"
@@ -12009,7 +11930,7 @@
 msgstr "Detta tema har inga tillgängliga smileys."
 
 msgid "_Font"
-msgstr "_Typsnitt"
+msgstr "_Formateríng"
 
 msgid "Group Items"
 msgstr "Gruppera föremål"
@@ -12076,7 +11997,7 @@
 #. * need to update them when formatting changes. The above items don't need
 #. * no updating nor nothin'
 msgid "_Font face"
-msgstr "_Typsnittsansikte"
+msgstr "_Typsnitt"
 
 msgid "Foreground _color"
 msgstr "_Förgrundsfärg"
@@ -12148,7 +12069,7 @@
 msgid "%s %s. Try `%s -h' for more information.\n"
 msgstr "%s %s. Försök med '%s -h' för mer information.\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s %s\n"
 "Usage: %s [OPTION]...\n"
@@ -12170,6 +12091,7 @@
 "\n"
 "  -c, --config=KATALOG   använd KATALOG för konfigurationsfiler\n"
 "  -d, --debug         skriv felsökningsinformation till standardut\n"
+"  -f, --force-online  tvinga att ansluta, oavsätt nätverksstatus\n"
 "  -h, --help          visa denna hjälp och avsluta\n"
 "  -m, --multiple      begränsar inte till en enda process\n"
 "  -n, --nologin       logga inte in automatiskt\n"
@@ -12179,7 +12101,7 @@
 "  --display=DISPLAY   X display att använda\n"
 "  -v, --version       visa den nuvarande versionen och avsluta\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s %s\n"
 "Usage: %s [OPTION]...\n"
@@ -12200,6 +12122,7 @@
 "\n"
 "  -c, --config=KATALOG   använd KATALOG för konfigurationsfiler\n"
 "  -d, --debug         skriv felsökningsinformation till standardut\n"
+"  -f, --force-online  tvinga att ansluta, oavsätt nätverksstatus\n"
 "  -h, --help          visa denna hjälp och avsluta\n"
 "  -m, --multiple      begränsar inte till en enda process\n"
 "  -n, --nologin       logga inte in automatiskt\n"
@@ -12246,22 +12169,21 @@
 msgstr "Avslutar på grund av att en annan libpurple-klient redan körs.\n"
 
 msgid "/_Media"
-msgstr ""
+msgstr "/_Media"
 
 msgid "/Media/_Hangup"
-msgstr ""
-
-#, fuzzy
+msgstr "/Media/_Lägg på"
+
 msgid "Calling..."
-msgstr "Beräknar..."
+msgstr "Ringer..."
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
-msgstr ""
+msgstr "%s önskar påbörja en ljud/videosession med dig."
 
 #, c-format
 msgid "%s wishes to start a video session with you."
-msgstr ""
+msgstr "%s önskar påbörja en videosession med dig."
 
 #, c-format
 msgid "%s has %d new message."
@@ -12290,9 +12212,8 @@
 "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr "Manuellt webbläsarkommando har valts, men inget kommando angivits."
 
-#, fuzzy
 msgid "No message"
-msgstr "Okänt meddelande"
+msgstr "Inget meddelande"
 
 msgid "Open All Messages"
 msgstr "Öppna alla meddelanden"
@@ -12300,16 +12221,14 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Du har fått e-post!!</span>"
 
-#, fuzzy
 msgid "New Pounces"
-msgstr "Ny kompisnotifiering"
+msgstr "Ny kompisnotifieringar"
 
 msgid "Dismiss"
-msgstr ""
-
-#, fuzzy
+msgstr "Avfärda"
+
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
-msgstr "<span weight=\"bold\" size=\"larger\">Du har fått e-post!!</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Du har notifierat!</span>"
 
 msgid "The following plugins will be unloaded."
 msgstr "De följande modulerna kommer avladdas."
@@ -12359,7 +12278,6 @@
 msgid "Select a file"
 msgstr "Välj en fil"
 
-#, fuzzy
 msgid "Modify Buddy Pounce"
 msgstr "Ändra kompisnotifiering"
 
@@ -12436,61 +12354,58 @@
 msgid "Pounce Target"
 msgstr "Notifiera mål"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Started typing"
-msgstr "Börjar skriva"
-
-#, fuzzy, c-format
+msgstr "Började skriva"
+
+#, c-format
 msgid "Paused while typing"
-msgstr "Pausar skrivandet"
-
-#, fuzzy, c-format
+msgstr "Pausade i skrivandet"
+
+#, c-format
 msgid "Signed on"
-msgstr "Ansluter"
-
-#, fuzzy, c-format
+msgstr "Anslöt"
+
+#, c-format
 msgid "Returned from being idle"
-msgstr "%s har blivit aktiv igen (%s)"
-
-#, fuzzy, c-format
+msgstr "Återvände från vilande"
+
+#, c-format
 msgid "Returned from being away"
-msgstr "Återvänder från frånvaro"
-
-#, fuzzy, c-format
+msgstr "Återvände från frånvaro"
+
+#, c-format
 msgid "Stopped typing"
 msgstr "Slutade skriva"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Signed off"
-msgstr "Kopplar ifrån"
-
-#, fuzzy, c-format
+msgstr "Kopplade ifrån"
+
+#, c-format
 msgid "Became idle"
-msgstr "Blir inaktiv"
-
-#, fuzzy, c-format
+msgstr "Blev inaktiv"
+
+#, c-format
 msgid "Went away"
-msgstr "Vid frånvaro"
-
-#, fuzzy, c-format
+msgstr "Försvann"
+
+#, c-format
 msgid "Sent a message"
 msgstr "Skicka ett meddelande"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown.... Please report this!"
-msgstr "Okänd attackhändelse. Var snäll och rapportera detta!"
-
-#, fuzzy
+msgstr "Okänd... Var snäll och rapportera detta!"
+
 msgid "Theme failed to unpack."
-msgstr "Smiley temat kunde inte packas upp."
-
-#, fuzzy
+msgstr "Temat kunde inte packas upp."
+
 msgid "Theme failed to load."
-msgstr "Smiley temat kunde inte packas upp."
-
-#, fuzzy
+msgstr "Temat kunde inte läsas in."
+
 msgid "Theme failed to copy."
-msgstr "Smiley temat kunde inte packas upp."
+msgstr "Temat kunde inte kopieras."
 
 msgid "Install Theme"
 msgstr "Installera tema"
@@ -12512,9 +12427,8 @@
 msgstr "_Stäng konversationsfönster med Escape-knappen"
 
 #. Buddy List Themes
-#, fuzzy
 msgid "Buddy List Theme"
-msgstr "Kompislista"
+msgstr "Tema för Kompislista"
 
 #. System Tray
 msgid "System Tray Icon"
@@ -12526,9 +12440,8 @@
 msgid "On unread messages"
 msgstr "Vid olästa meddelanden"
 
-#, fuzzy
 msgid "Conversation Window"
-msgstr "Snabbmeddelandefönster"
+msgstr "Konversationsfönster"
 
 msgid "_Hide new IM conversations:"
 msgstr "_Dölj nya IM-konversationer:"
@@ -12631,9 +12544,9 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Exempel: stunserver.org</span>"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Use _automatically detected IP address: %s"
-msgstr "Känn av IP-adress _automatiskt"
+msgstr "Använda _automatiskt avkänd IP-adress: %s"
 
 msgid "Public _IP:"
 msgstr "Publik _IP-adress:"
@@ -12655,7 +12568,7 @@
 
 #. TURN server
 msgid "Relay Server (TURN)"
-msgstr ""
+msgstr "Återsändningsserver (TURN)"
 
 msgid "Proxy Server &amp; Browser"
 msgstr "Proxyserver &amp; Webbläsare"
@@ -13001,12 +12914,12 @@
 msgid "Status for %s"
 msgstr "Status för %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
 msgstr ""
-"En egen smiley för den valda genvägen existerar redan. Var vänlig ange en "
-"annorlunda genväg."
+"En egen smiley för '%s' existerar redan. Var vänlig ange en annorlunda "
+"genväg."
 
 msgid "Custom Smiley"
 msgstr "Egen Smiley"
@@ -13020,28 +12933,24 @@
 msgid "Add Smiley"
 msgstr "Lägg till Smiley"
 
-#, fuzzy
 msgid "_Image:"
-msgstr "B_ild"
+msgstr "B_ild:"
 
 #. Shortcut text
-#, fuzzy
 msgid "S_hortcut text:"
-msgstr "Genväg"
+msgstr "_Genvägstext:"
 
 msgid "Smiley"
 msgstr "Smiley"
 
-#, fuzzy
 msgid "Shortcut Text"
-msgstr "Genväg"
+msgstr "Genvägstext"
 
 msgid "Custom Smiley Manager"
 msgstr "Hanterare för egna Smileys"
 
-#, fuzzy
 msgid "Select Buddy Icon"
-msgstr "Välj kompis"
+msgstr "Välj kompisikon"
 
 msgid "Click to change your buddyicon for this account."
 msgstr "Klicka här för att ändra kompisikon för detta konto."
@@ -13126,7 +13035,6 @@
 msgid "Cannot send launcher"
 msgstr "Kan inte skicka startare"
 
-#, fuzzy
 msgid ""
 "You dragged a desktop launcher. Most likely you wanted to send the target of "
 "this launcher instead of this launcher itself."
@@ -13164,9 +13072,8 @@
 msgstr ""
 "Kunde inte öppna bilden '%s' av okänd anledning. Troligtvis är filen trasig."
 
-#, fuzzy
 msgid "_Open Link"
-msgstr "_Öppna länk i:"
+msgstr "_Öppna länk"
 
 msgid "_Copy Link Location"
 msgstr "_Kopiera länk"
@@ -13174,9 +13081,21 @@
 msgid "_Copy Email Address"
 msgstr "_Kopiera e-postadress"
 
+msgid "_Open File"
+msgstr "_Öppna fil"
+
+msgid "Open _Containing Directory"
+msgstr "Öppna _inehållande katalog"
+
 msgid "Save File"
 msgstr "Spara fil"
 
+msgid "_Play Sound"
+msgstr "S_pela upp ljud"
+
+msgid "_Save File"
+msgstr "_Spara fil"
+
 msgid "Select color"
 msgstr "Välj färg"
 
@@ -13264,78 +13183,66 @@
 msgid "Displays statistical information about your buddies' availability"
 msgstr "Visar statistik om dina kompisars tillgänglighet"
 
-#, fuzzy
 msgid "Server name request"
-msgstr "Serveradress"
-
-#, fuzzy
+msgstr "Servernamnsförfrågan"
+
 msgid "Enter an XMPP Server"
-msgstr "Ange en konferensserver"
-
-#, fuzzy
+msgstr "Ange en XMPP-server"
+
 msgid "Select an XMPP server to query"
-msgstr "Välj en konferensserver att fråga"
-
-#, fuzzy
+msgstr "Välj en XMPP-server att fråga"
+
 msgid "Find Services"
-msgstr "Anslutningstjänster"
-
-#, fuzzy
+msgstr "Hitta tjänst"
+
 msgid "Add to Buddy List"
-msgstr "Skicka kompislista"
-
-#, fuzzy
+msgstr "Lägg till på kompislistan"
+
 msgid "Gateway"
-msgstr "Blir frånvarande"
-
-#, fuzzy
+msgstr "Inkörsport"
+
 msgid "Directory"
-msgstr "Logg katalog"
-
-#, fuzzy
+msgstr "Katalog"
+
 msgid "PubSub Collection"
-msgstr "Ljudval"
+msgstr "PubSub-samling"
 
 # Vad är PubSub? Hittar bara antydningar till en sökmotor med speciella möjligheter för uppföljning. Är det den som avses?
-#, fuzzy
 msgid "PubSub Leaf"
-msgstr "PubSub Service"
-
-#, fuzzy
+msgstr "PubSub-löv"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
-msgstr "Beskrivning"
+msgstr ""
+"\n"
+"<b>Beskrivning:</b> "
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "Tjänsteupptäckningsinfo"
-
-#, fuzzy
+msgstr "Tjänsteupptäckning"
+
 msgid "_Browse"
-msgstr "Webb_läsare:"
-
-#, fuzzy
+msgstr "_Bläddra"
+
 msgid "Server does not exist"
-msgstr "Användaren finns inte"
-
-#, fuzzy
+msgstr "Servern finns inte"
+
 msgid "Server does not support service discovery"
-msgstr "Servern stödjer inte blockering"
-
-#, fuzzy
+msgstr "Servern stödjer inte tjänsteupptäckning"
+
 msgid "XMPP Service Discovery"
-msgstr "Tjänsteupptäckningsinfo"
+msgstr "XMPP Tjänsteupptäckning"
 
 msgid "Allows browsing and registering services."
-msgstr ""
-
-#, fuzzy
+msgstr "Tillåter att bläddra och registrera service."
+
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
-msgstr "Denna modul är användbar vid felsökning av XMPP serverar och klienter."
+msgstr ""
+"Denna modul är användbar för registrering till äldre transportörer eller "
+"andra XMPP-tjänster."
 
 msgid "Buddy is idle"
 msgstr "Kompisen är inaktiv"
@@ -13727,7 +13634,6 @@
 msgstr "Music Messaging-modul för gemensam komponering."
 
 #. *  summary
-#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
 "on a piece of music by editing a common score in real-time."
@@ -13853,9 +13759,8 @@
 msgid "Highlighted Message Name Color"
 msgstr "Färg på namn i markerade färger"
 
-#, fuzzy
 msgid "Typing Notification Color"
-msgstr "Färg på notifiering"
+msgstr "Färg på skrivnotifiering"
 
 msgid "GtkTreeView Horizontal Separation"
 msgstr "GtkTreeView horisontal separation"
@@ -13886,23 +13791,20 @@
 msgid "GTK+ Text Shortcut Theme"
 msgstr "GTK+ Textgenvägstema"
 
-#, fuzzy
 msgid "Disable Typing Notification Text"
-msgstr "Aktivera skriftnotifiering"
-
-#, fuzzy
+msgstr "Avaktivera skriftnotifieringstext"
+
 msgid "GTK+ Theme Control Settings"
-msgstr "Pidgin GTK+ temakontroll"
-
-#, fuzzy
+msgstr "GTK+ temakontroll"
+
 msgid "Colors"
-msgstr "Stäng"
+msgstr "Färger"
 
 msgid "Fonts"
 msgstr "Typsnitt"
 
 msgid "Miscellaneous"
-msgstr ""
+msgstr "Diverse"
 
 msgid "Gtkrc File Tools"
 msgstr "Gtkrc filverktyg"
@@ -13988,11 +13890,12 @@
 msgstr "Skicka-knapp i konversationsfönster"
 
 #. *< summary
-#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
 "for use when no physical keyboard is present."
-msgstr "Lägger till en \"Skicka\" knapp till konversationsfönstret. "
+msgstr ""
+"Lägger till en Skicka knapp till konversationsfönstret. För att användas när "
+"inget fysiskt tangentbord finns."
 
 msgid "Duplicate Correction"
 msgstr "Dublettkorrigering"
@@ -14044,94 +13947,78 @@
 msgid "Replaces text in outgoing messages according to user-defined rules."
 msgstr "Ersätter text i utgående meddelanden enligt dina egna regler."
 
-#, fuzzy
 msgid "Just logged in"
-msgstr "Inte inloggad"
-
-#, fuzzy
+msgstr "Precis inloggad"
+
 msgid "Just logged out"
-msgstr "Inte inloggad"
+msgstr "Precis utloggad"
 
 msgid ""
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
-
-#, fuzzy
+"Ikon för kontakt\n"
+"Ikon för okänd person"
+
 msgid "Icon for Chat"
-msgstr "Anslut till chatt"
-
-#, fuzzy
+msgstr "Ikon för chatt"
+
 msgid "Ignored"
-msgstr "Ignorera"
-
-#, fuzzy
+msgstr "Ignorerad"
+
 msgid "Founder"
-msgstr "Högre"
-
-#, fuzzy
+msgstr "Grundare"
+
 msgid "Operator"
-msgstr "Opera"
+msgstr "Operatör"
 
 msgid "Half Operator"
-msgstr ""
-
-#, fuzzy
+msgstr "Halvoperatör"
+
 msgid "Authorization dialog"
-msgstr "Auktorisering given"
-
-#, fuzzy
+msgstr "Auktoriseringsdialog"
+
 msgid "Error dialog"
-msgstr "Fel"
-
-#, fuzzy
+msgstr "Feldialog"
+
 msgid "Information dialog"
-msgstr "Information"
+msgstr "Informationsdialog"
 
 msgid "Mail dialog"
-msgstr ""
-
-#, fuzzy
+msgstr "Postdialog"
+
 msgid "Question dialog"
 msgstr "Förfrågningsdialog"
 
-#, fuzzy
 msgid "Warning dialog"
-msgstr "Varningsnivåer"
+msgstr "Varningsdialog"
 
 msgid "What kind of dialog is this?"
-msgstr ""
-
-#, fuzzy
+msgstr "Vilken sorts dialog är detta?"
+
 msgid "Status Icons"
-msgstr "Status för %s"
-
-#, fuzzy
+msgstr "Statusikoner"
+
 msgid "Chatroom Emblems"
-msgstr "Chatrummets språk"
-
-#, fuzzy
+msgstr "Chatrumsemblem"
+
 msgid "Dialog Icons"
-msgstr "Ändra ikon"
-
-#, fuzzy
+msgstr "Dialogikon"
+
 msgid "Pidgin Icon Theme Editor"
-msgstr "Pidgin GTK+ temakontroll"
-
-#, fuzzy
+msgstr "Pidgin ikontema-redigerare"
+
 msgid "Contact"
-msgstr "Kontaktinformation"
-
-#, fuzzy
+msgstr "Kontakt"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "Kompislista"
-
-#, fuzzy
+msgstr "Pidgin Redigerare för Kompislistans tema"
+
 msgid "Edit Buddylist Theme"
-msgstr "Kompislista"
+msgstr "Redigera Kompislistans tema"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "Redigera ikontema"
 
 #. *< type
 #. *< ui_requirement
@@ -14140,16 +14027,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "Pidgin GTK+ temakontroll"
+msgstr "Pidgin Temaredigerare"
 
 #. *< name
 #. *< version
 #. *  summary
-#, fuzzy
 msgid "Pidgin Theme Editor."
-msgstr "Pidgin GTK+ temakontroll"
+msgstr "Pidgin Temaredigerare."
 
 #. *< type
 #. *< ui_requirement
@@ -14318,11 +14203,10 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "Inställningar specifika för Pidgin i Windows."
 
-#, fuzzy
 msgid ""
 "Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
-"Tillhandahåller insällningar specifika för Pidgion i Windows såsom dockning "
+"Tillhandahåller inställningar specifika för Pidgin i Windows såsom dockning "
 "av kompislistan."
 
 msgid "<font color='#777777'>Logged out.</font>"
@@ -14399,9 +14283,6 @@
 #~ msgid "Last Activity"
 #~ msgstr "Senaste aktivitet"
 
-#~ msgid "Service Discovery Info"
-#~ msgstr "Tjänsteupptäckningsinfo"
-
 #~ msgid "Service Discovery Items"
 #~ msgstr "Tjänstupptäckningsföremål"
 
@@ -14417,10 +14298,6 @@
 #~ msgid "Ad-Hoc Commands"
 #~ msgstr "'Ad-Hoc' Kommandon"
 
-# Vad är PubSub? Hittar bara antydningar till en sökmotor med speciella möjligheter för uppföljning. Är det den som avses?
-#~ msgid "PubSub Service"
-#~ msgstr "PubSub Service"
-
 #~ msgid "SOCKS5 Bytestreams"
 #~ msgstr "SOCKS5 Byteströmmar"
 
@@ -14568,9 +14445,6 @@
 #~ msgid "Error. SSL support is not installed."
 #~ msgstr "Fel. SSL-stöd är inte installerat."
 
-#~ msgid "Incorrect password."
-#~ msgstr "Felaktigt lösenord."
-
 #~ msgid ""
 #~ "Could not connect to BOS server:\n"
 #~ "%s"
@@ -14578,14 +14452,17 @@
 #~ "Kunde inte ansluta till BOS-server:\n"
 #~ "%s"
 
-#~ msgid "You may be disconnected shortly.  Check %s for updates."
-#~ msgstr "Du kanske snart blir frånkopplad. Kolla på %s efter uppdateringar."
+#~ msgid "Invalid username."
+#~ msgstr "Ogiltigt användarnamn"
+
+#~ msgid "Incorrect password."
+#~ msgstr "Felaktigt lösenord."
 
 #~ msgid "Could Not Connect"
 #~ msgstr "Kunde inte ansluta"
 
-#~ msgid "Invalid username."
-#~ msgstr "Ogiltigt användarnamn"
+#~ msgid "You may be disconnected shortly.  Check %s for updates."
+#~ msgstr "Du kanske snart blir frånkopplad. Kolla på %s efter uppdateringar."
 
 #~ msgid "Could not decrypt server reply"
 #~ msgstr "Kan inte avkryptera inloggningssvaret"
@@ -14617,13 +14494,6 @@
 #~ msgid "Could not create listen socket"
 #~ msgstr "Kunde inte skapa lyssnarsocket"
 
-#~ msgid "Could not resolve hostname"
-#~ msgstr "Kunde ej slå upp värden"
-
-#, fuzzy
-#~ msgid "Incorrect Password"
-#~ msgstr "Felaktigt lösenord"
-
 #~ msgid ""
 #~ "Could not establish a connection with %s:\n"
 #~ "%s"
@@ -14631,6 +14501,9 @@
 #~ "Kunde inte skapa en anslutning med %s:\n"
 #~ "%s"
 
+#~ msgid "Activate which ID?"
+#~ msgstr "Vilket ID ska aktiveras?"
+
 #~ msgid "Yahoo Japan"
 #~ msgstr "Yahoo Japan"
 
@@ -14657,6 +14530,9 @@
 #~ msgstr ""
 #~ "Servern kräver TLS/SSL vid inloggning. Hittade inget stöd för TLS/SSL."
 
+#~ msgid "_Proxy"
+#~ msgstr "_Proxy"
+
 #~ msgid "Conversation Window Hiding"
 #~ msgstr "Dölj konversationsfönster"
 
@@ -14669,9 +14545,6 @@
 #~ msgid "Please select an image for the smiley."
 #~ msgstr "Ange en bild för smileyn."
 
-#~ msgid "Activate which ID?"
-#~ msgstr "Vilket ID ska aktiveras?"
-
 #~ msgid "Cursor Color"
 #~ msgstr "Färg på markören"
 
@@ -14846,15 +14719,15 @@
 #~ msgid "Proxy Options"
 #~ msgstr "Proxyalternativ"
 
+#~ msgid "ST_UN server:"
+#~ msgstr "ST_UN-server:"
+
 #~ msgid "By log size"
 #~ msgstr "Efter loggstorlek"
 
 #~ msgid "_Open Link in Browser"
 #~ msgstr "_Öppna länk i webbläsare"
 
-#~ msgid "ST_UN server:"
-#~ msgstr "ST_UN-server:"
-
 #~ msgid "Smiley _Image"
 #~ msgstr "Smiley-_bild"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/ca-certs/Equifax_Secure_Global_eBusiness_CA-1.pem	Sat Jul 18 07:26:04 2009 +0000
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
+ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
+MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
+dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
+c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
+UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
+58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
+o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
+MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
+aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
+A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
+Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
+8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
--- a/share/ca-certs/Makefile.am	Sat Jul 18 04:31:38 2009 +0000
+++ b/share/ca-certs/Makefile.am	Sat Jul 18 07:26:04 2009 +0000
@@ -3,17 +3,20 @@
 		CAcert_Root.pem \
 		CAcert_Class3.pem \
 		Equifax_Secure_CA.pem \
+		Equifax_Secure_Global_eBusiness_CA-1.pem \
 		GTE_CyberTrust_Global_Root.pem \
 		StartCom_Certification_Authority.pem \
 		StartCom_Free_SSL_CA.pem \
 		Verisign_RSA_Secure_Server_CA.pem \
 		Verisign_Class3_Primary_CA.pem \
-		VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem
+		VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem \
+		VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem
 
 EXTRA_CERTS = \
 		AOL_Member_CA.pem \
 		Microsoft_Internet_Authority.pem \
 		Microsoft_Secure_Server_Authority.pem \
+		VeriSign_Class3_Extended_Validation_CA.pem \
 		VeriSign_International_Server_Class_3_CA.pem
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/ca-certs/VeriSign_Class3_Extended_Validation_CA.pem	Sat Jul 18 07:26:04 2009 +0000
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF5DCCBMygAwIBAgIQW3dZxheE4V7HJ8AylSkoazANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMTYxMTA3MjM1OTU5WjCBujEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg
+aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMrVmVy
+aVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJjboFXrnP0XeeOabhQdsVuYI4cWbod2
+nLU4O7WgerQHYwkZ5iqISKnnnbYwWgiXDOyq5BZpcmIjmvt6VCiYxQwtt9citsj5
+OBfH3doxRpqUFI6e7nigtyLUSVSXTeV0W5K87Gws3+fBthsaVWtmCAN/Ra+aM/EQ
+wGyZSpIkMQht3QI+YXZ4eLbtfjeubPOJ4bfh3BXMt1afgKCxBX9ONxX/ty8ejwY4
+P1C3aSijtWZfNhpSSENmUt+ikk/TGGC+4+peGXEFv54cbGhyJW+ze3PJbb0S/5tB
+Ml706H7FC6NMZNFOvCYIZfsZl1h44TO/7Wg+sSdFb8Di7Jdp91zT91ECAwEAAaOC
+AdIwggHOMB0GA1UdDgQWBBT8ilC6nrklWntVhU+VAGOP6VhrQzASBgNVHRMBAf8E
+CDAGAQH/AgEAMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw
+czovL3d3dy52ZXJpc2lnbi5jb20vY3BzMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6
+Ly9FVlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB
+/wQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZ
+MFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7
+GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwKQYDVR0R
+BCIwIKQeMBwxGjAYBgNVBAMTEUNsYXNzM0NBMjA0OC0xLTQ3MD0GCCsGAQUFBwEB
+BDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL0VWU2VjdXJlLW9jc3AudmVyaXNpZ24u
+Y29tMB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEB
+BQUAA4IBAQCWovp/5j3t1CvOtxU/wHIDX4u6FpAl98KD2Md1NGNoElMMU4l7yVYJ
+p8M2RE4O0GJis4b66KGbNGeNUyIXPv2s7mcuQ+JdfzOE8qJwwG6Cl8A0/SXGI3/t
+5rDFV0OEst4t8dD2SB8UcVeyrDHhlyQjyRNddOVG7wl8nuGZMQoIeRuPcZ8XZsg4
+z+6Ml7YGuXNG5NOUweVgtSV1LdlpMezNlsOjdv3odESsErlNv1HoudRETifLriDR
+fip8tmNHnna6l9AW5wtsbfdDbzMLKTB3+p359U64drPNGLT5IO892+bKrZvQTtKH
+qQ2mRHNQ3XBb7a1+Srwi1agm5MKFIA3Z
+-----END CERTIFICATE-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/ca-certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem	Sat Jul 18 07:26:04 2009 +0000
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIE3TCCBEagAwIBAgIQWPOeXAErGUchqY7k7uD4vzANBgkqhkiG9w0BAQUFADBf
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsT
+LkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMDYxMTA4MDAwMDAwWhcNMjExMTA3MjM1OTU5WjCByjELMAkGA1UEBhMCVVMx
+FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZv
+ciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAz
+IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8
+RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbext0uz/o9+B1fs70Pb
+ZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhDY2pSS9KP6HBR
+TdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
+Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNH
+iDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMB
+AAGjggGoMIIBpDAPBgNVHRMBAf8EBTADAQH/MDEGA1UdHwQqMCgwJqAkoCKGIGh0
+dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMuY3JsMA4GA1UdDwEB/wQEAwIBBjBt
+BggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglpbWFnZS9naWYwITAfMAcGBSsOAwIa
+BBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9nby52ZXJpc2lnbi5j
+b20vdnNsb2dvLmdpZjA9BgNVHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYc
+aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL2NwczAdBgNVHQ4EFgQUf9Nlp8Ld7Lvw
+MAnzQzn6Aq8zMTMwgYAGA1UdIwR5MHehY6RhMF8xCzAJBgNVBAYTAlVTMRcwFQYD
+VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJp
+bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eYIQcLrkHRDZKTS2OMp7A8y6vzAN
+BgkqhkiG9w0BAQUFAAOBgQCfFUleaybO7pjnTaWSP3Vq8DML+gncKJKrjWoxQdlH
+MUdGCaE5BT5mZRmLMr9hLBzVagNvRNw7r+8bk1jWvc7Q7baJd1EVWTIoxXqJjNo+
+bVx1rIbUx579OD6Wc0CHNGqETjGo0qK5PE4G3cuyfK7h1Z8edOUk8M/km+wl6s3s
+9g==
+-----END CERTIFICATE-----