changeset 29448:db23767c5b3f

propagate from branch 'im.pidgin.pidgin' (head c2e5c6cc5feb732b79c07ae4dd8fa6bf02e05dd1) to branch 'im.pidgin.cpw.rekkanoryo.icqxstatus' (head 0dd11b78b526e2c42337a6749d942bb0a93fe958)
author John Bailey <rekkanoryo@rekkanoryo.org>
date Tue, 25 Nov 2008 17:02:37 +0000 (2008-11-25)
parents fca74ad80194 (current diff) daefbf001774 (diff)
children 1f5ba7d5465d
files libpurple/protocols/gg/gg.c libpurple/protocols/gg/gg.h libpurple/protocols/sametime/sametime.c pidgin/pixmaps/emblems/16/mobile.png pidgin/pixmaps/emotes/default/24/eat.png pidgin/pixmaps/emotes/default/24/in-love.png pidgin/pixmaps/emotes/default/24/love.png pidgin/pixmaps/emotes/default/24/nailbiting.png pidgin/pixmaps/emotes/default/24/shock.png pidgin/pixmaps/emotes/default/24/smile-big.png pidgin/pixmaps/emotes/default/24/smile.png pidgin/pixmaps/emotes/default/24/sweat.png pidgin/pixmaps/emotes/default/24/tremble.png pidgin/pixmaps/emotes/default/24/yawn.png pidgin/pixmaps/emotes/small/16/love.png pidgin/pixmaps/emotes/small/16/shock.png pidgin/pixmaps/emotes/small/16/smile-big.png pidgin/pixmaps/emotes/small/16/smile.png pidgin/pixmaps/emotes/small/16/yawn.png
diffstat 29 files changed, 1360 insertions(+), 1358 deletions(-) [+]
line wrap: on
line diff
--- a/COPYRIGHT	Mon Nov 17 21:07:43 2008 +0000
+++ b/COPYRIGHT	Tue Nov 25 17:02:37 2008 +0000
@@ -220,6 +220,7 @@
 Tuomas Kuosmanen
 Tero Kuusela
 Richard Laager
+Jacky Lam
 Scott Lamb
 Dennis Lambe Jr.
 Joe LaPenna
@@ -307,7 +308,7 @@
 Ted Percival
 Eduardo P辿rez
 Matt Perry
-Diego Petten�
+Diego Petten
 Nathan Peterson
 Sebasti叩n E. Peyrott
 Celso Pinto
@@ -323,7 +324,7 @@
 Jory A. Pratt
 Brent Priddy
 Justin Pryzby
-Florian Qu�ze
+Florian Qu竪ze
 Ignacio Casal Quinteiro
 Federicco Mena Quintero
 Yosef Radchenko
@@ -477,6 +478,7 @@
 Jared Yanovich
 Timmy Yee
 Nickolai Zeldovich
+Tom Zickel
 Marco Ziech
 Piotr Zielinski
 Jeroen Zwartepoorte
--- a/ChangeLog	Mon Nov 17 21:07:43 2008 +0000
+++ b/ChangeLog	Tue Nov 25 17:02:37 2008 +0000
@@ -8,6 +8,13 @@
 	  --with-system-ssl-certs and GnuTLS need to include these in the
 	  system certs directory.
 	* Corrected maximum message lengths for Yahoo!
+	* Fix some problems with Gadu-Gadu buddy icons (Adam Strzelecki)
+	* Enable auto-reply on Zephyr, to emulate 'zaway' (Toby Schaffer)
+	* The Buddy State Notification plugin no longer prints duplicate
+	  notifications when the same buddy is in multiple groups (Florian Qu竪ze)
+	* The Buddy State Notification plugin no longer turns JID's, MSN Passport
+	  ID's, etc. into links (Florian Qu竪ze)
+	* Fix a crash in SIMPLE when a malformed message is received.
 
 	Pidgin:
 	* On GTK+ 2.14 and higher, we're using the gtk-tooltip-delay setting
@@ -18,6 +25,8 @@
 	  To completely disable tooltips (e.g. if you had an old tooltip_delay
 	  of zero), add this to ~/.purple/gtkrc-2.0:
 	      gtk-enable-tooltips = 0
+	* Moved the release notification dialog to a mini-dialog in the
+	  buddylist.  (Thanks to Casey Ho)
 
 	Finch:
 	* Allow binding meta+arrow keys for actions.
--- a/Makefile.am	Mon Nov 17 21:07:43 2008 +0000
+++ b/Makefile.am	Tue Nov 25 17:02:37 2008 +0000
@@ -34,6 +34,7 @@
 	(cd po ; intltool-update -m 2>&1 | grep -v '^mismatched quotes.*\.py$$' | sed "s|current directory|po directory|" | grep . ; if [ $$? = 0 ] ; then exit 1 ; else exit 0 ; fi)
 	LC_ALL=C sort -c -t/ -u po/POTFILES.in
 	LC_ALL=C sort -c -t/ -u po/POTFILES.skip
+	iconv -f utf8 -t utf8 COPYRIGHT | cmp COPYRIGHT -
 
 version-check: commit-check
 # We don't want to release development versions.
--- a/libpurple/dnsquery.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/dnsquery.c	Tue Nov 25 17:02:37 2008 +0000
@@ -345,6 +345,12 @@
 {
 	g_return_if_fail(resolver != NULL);
 
+	/* Keep this before the kill() call below. */
+	if (resolver->inpa != 0) {
+		purple_input_remove(resolver->inpa);
+		resolver->inpa = 0;
+	}
+
 	/*
 	 * We might as well attempt to kill our child process.  It really
 	 * doesn't matter if this fails, because children will expire on
@@ -353,9 +359,6 @@
 	if (resolver->dns_pid > 0)
 		kill(resolver->dns_pid, SIGKILL);
 
-	if (resolver->inpa != 0)
-		purple_input_remove(resolver->inpa);
-
 	close(resolver->fd_in);
 	close(resolver->fd_out);
 
--- a/libpurple/notify.h	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/notify.h	Tue Nov 25 17:02:37 2008 +0000
@@ -236,7 +236,8 @@
  * Adds a stock button that will be displayed in the search results dialog.
  *
  * @param results The search results object.
- * @param type    Type of the button. (TODO: Only one button of a given type can be displayed.)
+ * @param type    Type of the button. (TODO: Only one button of a given type
+ *                can be displayed.)
  * @param cb      Function that will be called on the click event.
  */
 void purple_notify_searchresults_button_add(PurpleNotifySearchResults *results,
@@ -245,8 +246,9 @@
 
 
 /**
- * Adds a plain labelled button that will be displayed in the search results dialog.
- * 
+ * Adds a plain labelled button that will be displayed in the search results
+ * dialog.
+ *
  * @param results The search results object
  * @param label   The label to display
  * @param cb      Function that will be called on the click event
@@ -267,7 +269,7 @@
  * Returns a newly created search result column object.
  *
  * @param title Title of the column. NOTE: Title will get g_strdup()ed.
- * 
+ *
  * @return The new search column object.
  */
 PurpleNotifySearchColumn *purple_notify_searchresults_column_new(const char *title);
@@ -470,53 +472,58 @@
  * The text is essentially a stripped-down format of HTML, the same that
  * IMs may send.
  *
- * @param gc		         The PurpleConnection handle associated with the information.
- * @param who				 The username associated with the information.
- * @param user_info          The PurpleNotifyUserInfo which contains the information
- * @param cb                 The callback to call when the user closes
- *                           the notification.
- * @param user_data          The data to pass to the callback.
+ * @param gc         The PurpleConnection handle associated with the information.
+ * @param who        The username associated with the information.
+ * @param user_info  The PurpleNotifyUserInfo which contains the information
+ * @param cb         The callback to call when the user closes the notification.
+ * @param user_data  The data to pass to the callback.
  *
- * @return A UI-specific handle.
+ * @return  A UI-specific handle.
  */
 void *purple_notify_userinfo(PurpleConnection *gc, const char *who,
 						   PurpleNotifyUserInfo *user_info, PurpleNotifyCloseCallback cb,
 						   gpointer user_data);
 
 /**
- * Create a new PurpleNotifyUserInfo which is suitable for passing to purple_notify_userinfo()
+ * Create a new PurpleNotifyUserInfo which is suitable for passing to
+ * purple_notify_userinfo()
  *
- * @return A new PurpleNotifyUserInfo, which the caller must destroy when done
+ * @return  A new PurpleNotifyUserInfo, which the caller must destroy when done
  */
 PurpleNotifyUserInfo *purple_notify_user_info_new(void);
 
 /**
  * Destroy a PurpleNotifyUserInfo
  *
- * @param user_info          The PurpleNotifyUserInfo
+ * @param user_info  The PurpleNotifyUserInfo
  */
 void purple_notify_user_info_destroy(PurpleNotifyUserInfo *user_info);
 
 /**
- * Retrieve the array of PurpleNotifyUserInfoEntry objects from a PurpleNotifyUserInfo
- *
- * This GList may be manipulated directly with normal GList functions such as g_list_insert(). Only 
- * PurpleNotifyUserInfoEntry are allowed in the list.  If a PurpleNotifyUserInfoEntry item is added to the list,
- * it should not be g_free()'d by the caller; PurpleNotifyUserInfo will g_free it when destroyed.
+ * Retrieve the array of PurpleNotifyUserInfoEntry objects from a
+ * PurpleNotifyUserInfo
  *
- * To remove a PurpleNotifyUserInfoEntry, use purple_notify_user_info_remove_entry(). Do not use the GList directly.
+ * This GList may be manipulated directly with normal GList functions such
+ * as g_list_insert(). Only PurpleNotifyUserInfoEntry are allowed in the
+ * list.  If a PurpleNotifyUserInfoEntry item is added to the list, it
+ * should not be g_free()'d by the caller; PurpleNotifyUserInfo will g_free
+ * it when destroyed.
  *
- * @param user_info          The PurpleNotifyUserInfo
+ * To remove a PurpleNotifyUserInfoEntry, use
+ * purple_notify_user_info_remove_entry(). Do not use the GList directly.
  *
- * @constreturn              A GList of PurpleNotifyUserInfoEntry objects
+ * @param user_info  The PurpleNotifyUserInfo
+ *
+ * @constreturn A GList of PurpleNotifyUserInfoEntry objects
  */
 GList *purple_notify_user_info_get_entries(PurpleNotifyUserInfo *user_info);
 
 /**
- * Create a textual representation of a PurpleNotifyUserInfo, separating entries with newline
+ * Create a textual representation of a PurpleNotifyUserInfo, separating
+ * entries with newline
  *
- * @param user_info          The PurpleNotifyUserInfo
- * @param newline            The separation character
+ * @param user_info  The PurpleNotifyUserInfo
+ * @param newline    The separation character
  */
 char *purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo *user_info, const char *newline);
 
@@ -524,46 +531,58 @@
  * Add a label/value pair to a PurpleNotifyUserInfo object.
  * PurpleNotifyUserInfo keeps track of the order in which pairs are added.
  *
- * @param user_info          The PurpleNotifyUserInfo
- * @param label              A label, which for example might be displayed by a UI with a colon after it ("Status:"). Do not include a colon.
- *                           If NULL, value will be displayed without a label.
- * @param value              The value, which might be displayed by a UI after the label.
- *                           If NULL, label will still be displayed; the UI should then treat label as independent
- *                           and not include a colon if it would otherwise.
+ * @param user_info  The PurpleNotifyUserInfo
+ * @param label      A label, which for example might be displayed by a
+ *                   UI with a colon after it ("Status:"). Do not include
+ *                   a colon.  If NULL, value will be displayed without a
+ *                   label.
+ * @param value      The value, which might be displayed by a UI after
+ *                   the label.  If NULL, label will still be displayed;
+ *                   the UI should then treat label as independent and not
+ *                   include a colon if it would otherwise.
  */
 void purple_notify_user_info_add_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
 
 /**
  * Prepend a label/value pair to a PurpleNotifyUserInfo object
  *
- * @param user_info          The PurpleNotifyUserInfo
- * @param label              A label, which for example might be displayed by a UI with a colon after it ("Status:"). Do not include a colon.
- *                           If NULL, value will be displayed without a label.
- * @param value              The value, which might be displayed by a UI after the label.
- *                           If NULL, label will still be displayed; the UI should then treat label as independent
- *                           and not include a colon if it would otherwise.
+ * @param user_info  The PurpleNotifyUserInfo
+ * @param label      A label, which for example might be displayed by a
+ *                   UI with a colon after it ("Status:"). Do not include
+ *                   a colon.  If NULL, value will be displayed without a
+ *                   label.
+ * @param value      The value, which might be displayed by a UI after
+ *                   the label.  If NULL, label will still be displayed;
+ *                   the UI should then treat label as independent and not
+ *                   include a colon if it would otherwise.
  */
 void purple_notify_user_info_prepend_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value);
 
 /**
- * Remove a PurpleNotifyUserInfoEntry from a PurpleNotifyUserInfo object without freeing the entry.
+ * Remove a PurpleNotifyUserInfoEntry from a PurpleNotifyUserInfo object
+ * without freeing the entry.
  *
- * @param user_info          The PurpleNotifyUserInfo
- * @param user_info_entry    The PurpleNotifyUserInfoEntry
+ * @param user_info        The PurpleNotifyUserInfo
+ * @param user_info_entry  The PurpleNotifyUserInfoEntry
  */
 void purple_notify_user_info_remove_entry(PurpleNotifyUserInfo *user_info, PurpleNotifyUserInfoEntry *user_info_entry);
+
 /**
  * Create a new PurpleNotifyUserInfoEntry
  *
- * If added to a PurpleNotifyUserInfo object, this should not be free()'d, as PurpleNotifyUserInfo will do so
- * when destroyed.  purple_notify_user_info_add_pair() and purple_notify_user_info_prepend_pair() are convenience
- * methods for creating entries and adding them to a PurpleNotifyUserInfo.
+ * If added to a PurpleNotifyUserInfo object, this should not be free()'d,
+ * as PurpleNotifyUserInfo will do so when destroyed.
+ * purple_notify_user_info_add_pair() and
+ * purple_notify_user_info_prepend_pair() are convenience methods for
+ * creating entries and adding them to a PurpleNotifyUserInfo.
  *
- * @param label              A label, which for example might be displayed by a UI with a colon after it ("Status:"). Do not include a colon.
- *                           If NULL, value will be displayed without a label.
- * @param value              The value, which might be displayed by a UI after the label.
- *                           If NULL, label will still be displayed; the UI should then treat label as independent
- *                           and not include a colon if it would otherwise.
+ * @param label  A label, which for example might be displayed by a UI
+ *               with a colon after it ("Status:"). Do not include a
+ *               colon.  If NULL, value will be displayed without a label.
+ * @param value  The value, which might be displayed by a UI after the
+ *               label.  If NULL, label will still be displayed; the UI
+ *               should then treat label as independent and not include a
+ *               colon if it would otherwise.
  *
  * @result A new PurpleNotifyUserInfoEntry
  */
@@ -572,71 +591,74 @@
 /**
  * Add a section break.  A UI might display this as a horizontal line.
  *
- * @param user_info          The PurpleNotifyUserInfo
+ * @param user_info  The PurpleNotifyUserInfo
  */
 void purple_notify_user_info_add_section_break(PurpleNotifyUserInfo *user_info);
 
 /**
  * Prepend a section break.  A UI might display this as a horizontal line.
  *
- * @param user_info          The PurpleNotifyUserInfo
+ * @param user_info  The PurpleNotifyUserInfo
  * @since 2.5.0
  */
 void purple_notify_user_info_prepend_section_break(PurpleNotifyUserInfo *user_info);
-	
+
 /**
- * Add a section header.  A UI might display this in a different font from other text.
+ * Add a section header.  A UI might display this in a different font
+ * from other text.
  *
- * @param user_info          The PurpleNotifyUserInfo
- * @param label              The name of the section
+ * @param user_info  The PurpleNotifyUserInfo
+ * @param label      The name of the section
  */
 void purple_notify_user_info_add_section_header(PurpleNotifyUserInfo *user_info, const char *label);
-	
+
 /**
- * Prepend a section header.  A UI might display this in a different font from other text.
+ * Prepend a section header.  A UI might display this in a different font
+ * from other text.
  *
- * @param user_info          The PurpleNotifyUserInfo
- * @param label              The name of the section
+ * @param user_info  The PurpleNotifyUserInfo
+ * @param label      The name of the section
  * @since 2.5.0
  */
 void purple_notify_user_info_prepend_section_header(PurpleNotifyUserInfo *user_info, const char *label);
-	
+
 /**
- * Remove the last item which was added to a PurpleNotifyUserInfo. This could be used to remove a section header which is not needed.
+ * Remove the last item which was added to a PurpleNotifyUserInfo. This
+ * could be used to remove a section header which is not needed.
  */
 void purple_notify_user_info_remove_last_item(PurpleNotifyUserInfo *user_info);
 
 /**
  * Get the label for a PurpleNotifyUserInfoEntry
  *
- * @param user_info_entry     The PurpleNotifyUserInfoEntry
+ * @param user_info_entry  The PurpleNotifyUserInfoEntry
  *
- * @result                    The label
+ * @return  The label
  */
 const gchar *purple_notify_user_info_entry_get_label(PurpleNotifyUserInfoEntry *user_info_entry);
 
 /**
  * Set the label for a PurpleNotifyUserInfoEntry
  *
- * @param user_info_entry     The PurpleNotifyUserInfoEntry
- * @param label			      The label
+ * @param user_info_entry  The PurpleNotifyUserInfoEntry
+ * @param label            The label
  */
 void purple_notify_user_info_entry_set_label(PurpleNotifyUserInfoEntry *user_info_entry, const char *label);
 
 /**
  * Get the value for a PurpleNotifyUserInfoEntry
  *
- * @param user_info_entry     The PurpleNotifyUserInfoEntry
+ * @param user_info_entry  The PurpleNotifyUserInfoEntry
  *
- * @result                    The value
+ * @result  The value
  */
 const gchar *purple_notify_user_info_entry_get_value(PurpleNotifyUserInfoEntry *user_info_entry);
 
 /**
  * Set the value for a PurpleNotifyUserInfoEntry
  *
- * @param user_info_entry     The PurpleNotifyUserInfoEntry
- * @param value				  The value
+ * @param user_info_entry  The PurpleNotifyUserInfoEntry
+ * @param value            The value
  */
 void purple_notify_user_info_entry_set_value(PurpleNotifyUserInfoEntry *user_info_entry, const char *value);
 
@@ -644,17 +666,17 @@
 /**
  * Get the type of a PurpleNotifyUserInfoEntry
  *
- * @param user_info_entry     The PurpleNotifyUserInfoEntry
+ * @param user_info_entry  The PurpleNotifyUserInfoEntry
  *
- * @result					  The PurpleNotifyUserInfoEntryType
+ * @return  The PurpleNotifyUserInfoEntryType
  */
 PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_type(PurpleNotifyUserInfoEntry *user_info_entry);
 
 /**
  * Set the type of a PurpleNotifyUserInfoEntry
  *
- * @param user_info_entry     The PurpleNotifyUserInfoEntry
- * @param type				  The PurpleNotifyUserInfoEntryType
+ * @param user_info_entry  The PurpleNotifyUserInfoEntry
+ * @param type             The PurpleNotifyUserInfoEntryType
  */
 void purple_notify_user_info_entry_set_type(PurpleNotifyUserInfoEntry *user_info_entry,
 										  PurpleNotifyUserInfoEntryType type);
--- a/libpurple/plugins/statenotify.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/plugins/statenotify.c	Tue Nov 25 17:02:37 2008 +0000
@@ -32,13 +32,17 @@
 		return;
 	g_return_if_fail(conv->type == PURPLE_CONV_TYPE_IM);
 
+	/* Prevent duplicate notifications for buddies in multiple groups */
+	if (buddy != purple_find_buddy(buddy->account, buddy->name))
+		return;
+
 	who = purple_buddy_get_alias(buddy);
 	escaped = g_markup_escape_text(who, -1);
 
 	g_snprintf(buf, sizeof(buf), message, escaped);
 	g_free(escaped);
 
-	purple_conv_im_write(conv->u.im, NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_ACTIVE_ONLY, time(NULL));
+	purple_conv_im_write(conv->u.im, NULL, buf, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_ACTIVE_ONLY | PURPLE_MESSAGE_NO_LINKIFY, time(NULL));
 }
 
 static void
--- a/libpurple/protocols/gg/gg.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/gg/gg.c	Tue Nov 25 17:02:37 2008 +0000
@@ -61,7 +61,6 @@
  *
  * @return Zero if proxy setup is valid, otherwise -1.
  */
-/* static int ggp_setup_proxy(PurpleAccount *account) {{{ */
 static int ggp_setup_proxy(PurpleAccount *account)
 {
 	PurpleProxyInfo *gpi;
@@ -88,11 +87,7 @@
 
 	return 0;
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_async_token_handler(gpointer _gc, gint fd, PurpleInputCondition cond) {{{ */
 static void ggp_async_token_handler(gpointer _gc, gint fd, PurpleInputCondition cond)
 {
 	PurpleConnection *gc = _gc;
@@ -157,11 +152,7 @@
 	token->cb = NULL;
 	cb(gc);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_token_request(PurpleConnection *gc, GGPTokenCallback cb) {{{ */
 static void ggp_token_request(PurpleConnection *gc, GGPTokenCallback cb)
 {
 	PurpleAccount *account;
@@ -199,7 +190,6 @@
  *
  * @param Current action handler.
  */
-/* static void ggp_action_buddylist_get(PurplePluginAction *action) {{{ */
 static void ggp_action_buddylist_get(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -209,14 +199,12 @@
 
 	gg_userlist_request(info->session, GG_USERLIST_GET, NULL);
 }
-/* }}} */
 
 /**
  * Upload the buddylist to the server.
  *
  * @param action Current action handler.
  */
-/* static void ggp_action_buddylist_put(PurplePluginAction *action) {{{ */
 static void ggp_action_buddylist_put(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -232,14 +220,12 @@
 	gg_userlist_request(info->session, GG_USERLIST_PUT, buddylist);
 	g_free(buddylist);
 }
-/* }}} */
 
 /**
  * Delete buddylist from the server.
  *
  * @param action Current action handler.
  */
-/* static void ggp_action_buddylist_delete(PurplePluginAction *action) {{{ */
 static void ggp_action_buddylist_delete(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -249,11 +235,7 @@
 
 	gg_userlist_request(info->session, GG_USERLIST_PUT, NULL);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_callback_buddylist_save_ok(PurpleConnection *gc, const char *file) {{{ */
 static void ggp_callback_buddylist_save_ok(PurpleConnection *gc, const char *filename)
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
@@ -284,11 +266,7 @@
 
 	g_free(buddylist);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_callback_buddylist_load_ok(PurpleConnection *gc, gchar *file) {{{ */
 static void ggp_callback_buddylist_load_ok(PurpleConnection *gc, gchar *file)
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
@@ -334,11 +312,7 @@
 			purple_connection_get_account(gc), NULL, NULL,
 			gc);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_action_buddylist_load(PurplePluginAction *action) {{{ */
 static void ggp_action_buddylist_load(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -349,11 +323,7 @@
 			purple_connection_get_account(gc), NULL, NULL,
 			gc);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_callback_register_account_ok(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
 static void ggp_callback_register_account_ok(PurpleConnection *gc,
 					     PurpleRequestFields *fields)
 {
@@ -435,11 +405,7 @@
 	g_free(token->id);
 	g_free(token);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_callback_register_account_cancel(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
 static void ggp_callback_register_account_cancel(PurpleConnection *gc,
 						 PurpleRequestFields *fields)
 {
@@ -453,11 +419,7 @@
 	g_free(token);
 
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_register_user_dialog(PurpleConnection *gc) {{{ */
 static void ggp_register_user_dialog(PurpleConnection *gc)
 {
 	PurpleAccount *account;
@@ -510,13 +472,9 @@
 		purple_connection_get_account(gc), NULL, NULL,
 		gc);
 }
-/* }}} */
 
 /* ----- PUBLIC DIRECTORY SEARCH ---------------------------------------- */
 
-/*
- */
-/* static void ggp_callback_show_next(PurpleConnection *gc, GList *row, gpointer user_data) {{{ */
 static void ggp_callback_show_next(PurpleConnection *gc, GList *row, gpointer user_data)
 {
 	GGPInfo *info = gc->proto_data;
@@ -533,21 +491,13 @@
 	ggp_search_add(info->searches, seq, form);
 	purple_debug_info("gg", "ggp_callback_show_next(): Added seq %u", seq);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_callback_add_buddy(PurpleConnection *gc, GList *row, gpointer user_data) {{{ */
 static void ggp_callback_add_buddy(PurpleConnection *gc, GList *row, gpointer user_data)
 {
 	purple_blist_request_add_buddy(purple_connection_get_account(gc),
 				     g_list_nth_data(row, 0), NULL, NULL);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_callback_im(PurpleConnection *gc, GList *row, gpointer user_data) {{{ */
 static void ggp_callback_im(PurpleConnection *gc, GList *row, gpointer user_data)
 {
 	PurpleAccount *account;
@@ -560,11 +510,7 @@
 	conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, name);
 	purple_conversation_present(conv);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_callback_find_buddies(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
 static void ggp_callback_find_buddies(PurpleConnection *gc, PurpleRequestFields *fields)
 {
 	GGPInfo *info = gc->proto_data;
@@ -611,11 +557,7 @@
 	ggp_search_add(info->searches, seq, form);
 	purple_debug_info("gg", "ggp_callback_find_buddies(): Added seq %u", seq);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_find_buddies(PurplePluginAction *action) {{{ */
 static void ggp_find_buddies(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
@@ -672,13 +614,9 @@
 		purple_connection_get_account(gc), NULL, NULL,
 		gc);
 }
-/* }}} */
 
 /* ----- CHANGE PASSWORD ------------------------------------------------ */
 
-/*
- */
-/* static void ggp_callback_change_passwd_ok(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
 static void ggp_callback_change_passwd_ok(PurpleConnection *gc, PurpleRequestFields *fields)
 {
 	PurpleAccount *account;
@@ -750,11 +688,7 @@
 	g_free(info->token->data);
 	g_free(info->token);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_change_passwd_dialog(PurpleConnection *gc) {{{ */
 static void ggp_change_passwd_dialog(PurpleConnection *gc)
 {
 	PurpleRequestFields *fields;
@@ -811,24 +745,16 @@
 
 	g_free(msg);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_change_passwd(PurplePluginAction *action) {{{ */
 static void ggp_change_passwd(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
 
 	ggp_token_request(gc, ggp_change_passwd_dialog);
 }
-/* }}} */
 
 /* ----- CONFERENCES ---------------------------------------------------- */
 
-/*
- */
-/* static void ggp_callback_add_to_chat_ok(PurpleConnection *gc, PurpleRequestFields *fields) {{{ */
 static void ggp_callback_add_to_chat_ok(PurpleConnection *gc, PurpleRequestFields *fields)
 {
 	PurpleRequestField *field;
@@ -842,11 +768,7 @@
 	ggp_confer_participants_add_uin(gc, sel->data,
 		GPOINTER_TO_INT(purple_request_field_list_get_data(field, sel->data)));
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_bmenu_add_to_chat(PurpleBlistNode *node, gpointer ignored) {{{ */
 static void ggp_bmenu_add_to_chat(PurpleBlistNode *node, gpointer ignored)
 {
 	PurpleBuddy *buddy;
@@ -889,13 +811,9 @@
 			gc);
 	g_free(msg);
 }
-/* }}} */
 
 /* ----- BLOCK BUDDIES -------------------------------------------------- */
 
-/*
- */
-/* static void ggp_bmenu_block(PurpleBlistNode *node, gpointer ignored) {{{ */
 static void ggp_bmenu_block(PurpleBlistNode *node, gpointer ignored)
 {
 	PurpleConnection *gc;
@@ -921,7 +839,6 @@
 		purple_debug_info("gg", "send: uin=%d; mode=BLOCKED\n", uin);
 	}
 }
-/* }}} */
 
 /* ---------------------------------------------------------------------- */
 /* ----- INTERNAL CALLBACKS --------------------------------------------- */
@@ -940,7 +857,6 @@
  * @param status ID of the status.
  * @param descr  Description.
  */
-/* static void ggp_generic_status_handler(PurpleConnection *gc, uin_t uin, int status, const char *descr) {{{ */
 static void ggp_generic_status_handler(PurpleConnection *gc, uin_t uin,
 				       int status, const char *descr)
 {
@@ -980,11 +896,7 @@
 	g_free(from);
 	g_free(msg);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_sr_close_cb(gpointer user_data) {{{ */
 static void ggp_sr_close_cb(gpointer user_data)
 {
 	GGPSearchForm *form = user_data;
@@ -994,7 +906,6 @@
 	purple_debug_info("gg", "ggp_sr_close_cb(): Removed seq %u", form->seq);
 	ggp_search_form_destroy(form);
 }
-/* }}} */
 
 /**
  * Translate a status' ID to a more user-friendly name.
@@ -1003,7 +914,6 @@
  *
  * @return The user-friendly name of the status.
  */
-/* static const char *ggp_status_by_id(unsigned int id) {{{ */
 static const char *ggp_status_by_id(unsigned int id)
 {
 	const char *st;
@@ -1026,11 +936,7 @@
 
 	return st;
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_pubdir_handle_info(PurpleConnection *gc, gg_pubdir50_t req, GGPSearchForm *form) {{{ */
 static void ggp_pubdir_handle_info(PurpleConnection *gc, gg_pubdir50_t req,
 				   GGPSearchForm *form)
 {
@@ -1089,11 +995,7 @@
 	g_free(who);
 	purple_notify_user_info_destroy(user_info);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_pubdir_handle_full(PurpleConnection *gc, gg_pubdir50_t req, GGPSearchForm *form) {{{ */
 static void ggp_pubdir_handle_full(PurpleConnection *gc, gg_pubdir50_t req,
 				   GGPSearchForm *form)
 {
@@ -1193,11 +1095,7 @@
 		purple_notify_searchresults_new_rows(gc, results, form->window);
 	}
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_pubdir_reply_handler(PurpleConnection *gc, gg_pubdir50_t req) {{{ */
 static void ggp_pubdir_reply_handler(PurpleConnection *gc, gg_pubdir50_t req)
 {
 	GGPInfo *info = gc->proto_data;
@@ -1236,15 +1134,56 @@
 			break;
 	}
 }
-/* }}} */
+
+static void ggp_recv_image_handler(PurpleConnection *gc, const struct gg_event *ev)
+{
+	gint imgid = 0;
+	GGPInfo *info = gc->proto_data;
+	GList *entry = g_list_first(info->pending_richtext_messages);
+	gchar *handlerid = g_strdup_printf("IMGID_HANDLER-%i", ev->event.image_reply.crc32);
+
+	imgid = purple_imgstore_add_with_id(
+		g_memdup(ev->event.image_reply.image, ev->event.image_reply.size),
+		ev->event.image_reply.size,
+		ev->event.image_reply.filename);
+
+	purple_debug_info("gg", "ggp_recv_image_handler: got image with crc32: %u\n", ev->event.image_reply.crc32);
+
+	while(entry) {
+		if (strstr((gchar *)entry->data, handlerid) != NULL) {
+			gchar **split = g_strsplit((gchar *)entry->data, handlerid, 3);
+			gchar *text = g_strdup_printf("%s%i%s", split[0], imgid, split[1]);
+			purple_debug_info("gg", "ggp_recv_image_handler: found message matching crc32: %s\n", (gchar *)entry->data);
+			g_strfreev(split);
+			info->pending_richtext_messages = g_list_remove(info->pending_richtext_messages, entry->data);
+			/* We don't have any more images to download */
+			if (strstr(text, "<IMG ID=\"IMGID_HANDLER") == NULL) {
+				gchar *buf = g_strdup_printf("%lu", (unsigned long int)ev->event.msg.sender);
+				serv_got_im(gc, buf, text, PURPLE_MESSAGE_IMAGES, ev->event.msg.time);
+				g_free(buf);
+				purple_debug_info("gg", "ggp_recv_image_handler: richtext message: %s\n", text);
+				g_free(text);
+				break;
+			}
+			info->pending_richtext_messages = g_list_append(info->pending_richtext_messages, text);
+			break;
+		}
+		entry = g_list_next(entry);
+	}
+	g_free(handlerid);
+
+	return;
+}
+
 
 /**
  * Dispatch a message received from a buddy.
  *
  * @param gc PurpleConnection.
  * @param ev Gadu-Gadu event structure.
+ *
+ * Image receiving, some code borrowed from Kadu http://www.kadu.net
  */
-/* static void ggp_recv_message_handler(PurpleConnection *gc, const struct gg_event *ev) {{{ */
 static void ggp_recv_message_handler(PurpleConnection *gc, const struct gg_event *ev)
 {
 	GGPInfo *info = gc->proto_data;
@@ -1261,7 +1200,109 @@
 	msg = g_markup_escape_text(tmp, -1);
 	g_free(tmp);
 
-	purple_debug_info("gg", "msg form (%s): %s (class = %d; rcpt_count = %d)\n",
+	/* We got richtext message */
+	if (ev->event.msg.formats_length)
+	{
+		gboolean got_image = FALSE, bold = FALSE, italic = FALSE, under = FALSE;
+		char *cformats = (char *)ev->event.msg.formats;
+		char *cformats_end = cformats + ev->event.msg.formats_length;
+		gint increased_len = 0;
+		struct gg_msg_richtext_format *actformat;
+		struct gg_msg_richtext_image *actimage;
+		GString *message = g_string_new(msg);
+		gchar *handlerid;
+
+		purple_debug_info("gg", "ggp_recv_message_handler: richtext msg from (%s): %s %i formats\n", from, msg, ev->event.msg.formats_length);
+
+		while (cformats < cformats_end)
+		{
+			gint byteoffset;
+			actformat = (struct gg_msg_richtext_format *)cformats;
+			cformats += sizeof(struct gg_msg_richtext_format);
+			byteoffset = g_utf8_offset_to_pointer(message->str, actformat->position + increased_len) - message->str;
+
+			if(actformat->position == 0 && actformat->font == 0) {
+				purple_debug_warning("gg", "ggp_recv_message_handler: bogus formatting (inc: %i)\n", increased_len);
+				continue;
+			}
+			purple_debug_info("gg", "ggp_recv_message_handler: format at pos: %i, image:%i, bold:%i, italic: %i, under:%i (inc: %i)\n",
+				actformat->position,
+				(actformat->font & GG_FONT_IMAGE) != 0,
+				(actformat->font & GG_FONT_BOLD) != 0,
+				(actformat->font & GG_FONT_ITALIC) != 0,
+				(actformat->font & GG_FONT_UNDERLINE) != 0,
+				increased_len);
+
+			if (actformat->font & GG_FONT_IMAGE) {
+				got_image = TRUE;
+				actimage = (struct gg_msg_richtext_image*)(cformats);
+				cformats += sizeof(struct gg_msg_richtext_image);
+				purple_debug_info("gg", "ggp_recv_message_handler: image received, size: %d, crc32: %i\n", actimage->size, actimage->crc32);
+
+				/* Checking for errors, image size shouldn't be
+				 * larger than 255.000 bytes */
+				if (actimage->size > 255000) {
+					purple_debug_warning("gg", "ggp_recv_message_handler: received image large than 255 kb\n");
+					continue;
+				}
+
+				gg_image_request(info->session, ev->event.msg.sender,
+					actimage->size, actimage->crc32);
+
+				handlerid = g_strdup_printf("<IMG ID=\"IMGID_HANDLER-%i\">", actimage->crc32);
+				g_string_insert(message, byteoffset, handlerid);
+				increased_len += strlen(handlerid);
+				g_free(handlerid);
+				continue;
+			}
+
+			if (actformat->font & GG_FONT_BOLD) {
+				if (bold == FALSE) {
+					g_string_insert(message, byteoffset, "<b>");
+					increased_len += 3;
+					bold = TRUE;
+				}
+			} else if (bold) {
+				g_string_insert(message, byteoffset, "</b>");
+				increased_len += 4;
+				bold = FALSE;
+			}
+
+			if (actformat->font & GG_FONT_ITALIC) {
+				if (italic == FALSE) {
+					g_string_insert(message, byteoffset, "<i>");
+					increased_len += 3;
+					italic = TRUE;
+				}
+			} else if (italic) {
+				g_string_insert(message, byteoffset, "</i>");
+				increased_len += 4;
+				italic = FALSE;
+			}
+
+			if (actformat->font & GG_FONT_UNDERLINE) {
+				if (under == FALSE) {
+					g_string_insert(message, byteoffset, "<u>");
+					increased_len += 3;
+					under = TRUE;
+				}
+			} else if (under) {
+				g_string_insert(message, byteoffset, "</u>");
+				increased_len += 4;
+				under = FALSE;
+			}
+		}
+
+		msg = message->str;
+		g_string_free(message, FALSE);
+
+		if (got_image) {
+			info->pending_richtext_messages = g_list_append(info->pending_richtext_messages, msg);
+			return;
+		}
+	}
+
+	purple_debug_info("gg", "ggp_recv_message_handler: msg from (%s): %s (class = %d; rcpt_count = %d)\n",
 			from, msg, ev->event.msg.msgclass,
 			ev->event.msg.recipients_count);
 
@@ -1298,11 +1339,32 @@
 	g_free(msg);
 	g_free(from);
 }
-/* }}} */
+
+static void ggp_send_image_handler(PurpleConnection *gc, const struct gg_event *ev)
+{
+	GGPInfo *info = gc->proto_data;
+	PurpleStoredImage *image;
+	gint imgid = GPOINTER_TO_INT(g_hash_table_lookup(info->pending_images, &ev->event.image_request.crc32));
+
+	purple_debug_info("gg", "ggp_send_image_handler: image request received, crc32: %u\n", ev->event.image_request.crc32);
 
-/*
- */
-/* static void ggp_callback_recv(gpointer _gc, gint fd, PurpleInputCondition cond) {{{ */
+	if(imgid)
+	{
+		if((image = purple_imgstore_find_by_id(imgid))) {
+			gint image_size = purple_imgstore_get_size(image);
+			gconstpointer image_bin = purple_imgstore_get_data(image);
+			const char *image_filename = purple_imgstore_get_filename(image);
+
+			purple_debug_info("gg", "ggp_send_image_handler: sending image imgid: %i, crc: %u\n", imgid, ev->event.image_request.crc32);
+			gg_image_reply(info->session, (unsigned long int)ev->event.image_request.sender, image_filename, image_bin, image_size);
+			purple_imgstore_unref(image);
+		} else {
+			purple_debug_error("gg", "ggp_send_image_handler: image imgid: %i, crc: %u in hash but not found in imgstore!\n", imgid, ev->event.image_request.crc32);
+		}
+		g_hash_table_remove(info->pending_images, &ev->event.image_request.crc32);
+	}
+}
+
 static void ggp_callback_recv(gpointer _gc, gint fd, PurpleInputCondition cond)
 {
 	PurpleConnection *gc = _gc;
@@ -1327,11 +1389,18 @@
 			ggp_recv_message_handler(gc, ev);
 			break;
 		case GG_EVENT_ACK:
+			/* Changing %u to %i fixes compiler warning */
 			purple_debug_info("gg",
-				"message sent to: %u, delivery status=%d, seq=%d\n",
+				"ggp_callback_recv: message sent to: %i, delivery status=%d, seq=%d\n",
 				ev->event.ack.recipient, ev->event.ack.status,
 				ev->event.ack.seq);
 			break;
+		case GG_EVENT_IMAGE_REPLY:
+			ggp_recv_image_handler(gc, ev);
+			break;
+		case GG_EVENT_IMAGE_REQUEST:
+			ggp_send_image_handler(gc, ev);
+			break;
 		case GG_EVENT_NOTIFY:
 		case GG_EVENT_NOTIFY_DESCR:
 			{
@@ -1423,11 +1492,7 @@
 
 	gg_free_event(ev);
 }
-/* }}} */
 
-/*
- */
-/* static void ggp_async_login_handler(gpointer _gc, gint fd, PurpleInputCondition cond) {{{ */
 static void ggp_async_login_handler(gpointer _gc, gint fd, PurpleInputCondition cond)
 {
 	PurpleConnection *gc = _gc;
@@ -1516,20 +1581,16 @@
 
 	gg_free_event(ev);
 }
-/* }}} */
 
 /* ---------------------------------------------------------------------- */
 /* ----- PurplePluginProtocolInfo ----------------------------------------- */
 /* ---------------------------------------------------------------------- */
 
-/* static const char *ggp_list_icon(PurpleAccount *account, PurpleBuddy *buddy) {{{ */
 static const char *ggp_list_icon(PurpleAccount *account, PurpleBuddy *buddy)
 {
 	return "gadu-gadu";
 }
-/* }}} */
 
-/* static char *ggp_status_text(PurpleBuddy *b) {{{ */
 static char *ggp_status_text(PurpleBuddy *b)
 {
 	PurpleStatus *status;
@@ -1555,20 +1616,21 @@
 		return text;
 	}
 }
-/* }}} */
 
-/* static void ggp_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) {{{ */
 static void ggp_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full)
 {
 	PurpleStatus *status;
 	char *text, *tmp;
-	const char *msg, *name;
+	const char *msg, *name, *alias;
 
 	g_return_if_fail(b != NULL);
 
 	status = purple_presence_get_active_status(purple_buddy_get_presence(b));
 	msg = purple_status_get_attr_string(status, "message");
 	name = purple_status_get_name(status);
+	alias = purple_buddy_get_alias(b);
+
+	purple_notify_user_info_add_pair (user_info, _("Alias"), alias);
 
 	if (msg != NULL) {
 		text = g_markup_escape_text(msg, -1);
@@ -1585,9 +1647,7 @@
 		purple_notify_user_info_add_pair(user_info, _("Status"), name);
 	}
 }
-/* }}} */
 
-/* static GList *ggp_status_types(PurpleAccount *account) {{{ */
 static GList *ggp_status_types(PurpleAccount *account)
 {
 	PurpleStatusType *type;
@@ -1631,9 +1691,7 @@
 
 	return types;
 }
-/* }}} */
 
-/* static GList *ggp_blist_node_menu(PurpleBlistNode *node) {{{ */
 static GList *ggp_blist_node_menu(PurpleBlistNode *node)
 {
 	PurpleMenuAction *act;
@@ -1663,9 +1721,7 @@
 
 	return m;
 }
-/* }}} */
 
-/* static GList *ggp_chat_info(PurpleConnection *gc) {{{ */
 static GList *ggp_chat_info(PurpleConnection *gc)
 {
 	GList *m = NULL;
@@ -1679,9 +1735,7 @@
 
 	return m;
 }
-/* }}} */
 
-/* static void ggp_login(PurpleAccount *account) {{{ */
 static void ggp_login(PurpleAccount *account)
 {
 	PurpleConnection *gc;
@@ -1703,11 +1757,14 @@
 	info->chats_count = 0;
 	info->token = NULL;
 	info->searches = ggp_search_new();
+	info->pending_richtext_messages = NULL;
+	info->pending_images = g_hash_table_new(g_int_hash, g_int_equal);
 
 	gc->proto_data = info;
 
 	glp->uin = ggp_get_uin(account);
 	glp->password = (char *)purple_account_get_password(account);
+	glp->image_size = 255;
 
 	presence = purple_account_get_presence(account);
 	status = purple_presence_get_active_status(presence);
@@ -1727,9 +1784,7 @@
 	gc->inpa = purple_input_add(info->session->fd, PURPLE_INPUT_READ,
 				  ggp_async_login_handler, gc);
 }
-/* }}} */
 
-/* static void ggp_close(PurpleConnection *gc) {{{ */
 static void ggp_close(PurpleConnection *gc)
 {
 
@@ -1757,6 +1812,8 @@
 		purple_notify_close_with_handle(gc);
 
 		ggp_search_destroy(info->searches);
+		g_list_free(info->pending_richtext_messages);
+		g_hash_table_destroy(info->pending_images);
 		g_free(info);
 		gc->proto_data = NULL;
 	}
@@ -1768,25 +1825,108 @@
 
 	purple_debug_info("gg", "Connection closed.\n");
 }
-/* }}} */
 
-/* static int ggp_send_im(PurpleConnection *gc, const char *who, const char *msg, PurpleMessageFlags flags) {{{ */
 static int ggp_send_im(PurpleConnection *gc, const char *who, const char *msg,
 		       PurpleMessageFlags flags)
 {
 	GGPInfo *info = gc->proto_data;
 	char *tmp, *plain;
-	int ret = 0;
+	int ret = 1;
+	unsigned char format[1024];
+	unsigned int format_length = sizeof(struct gg_msg_richtext);
+	gint pos = 0;
+	GData *attribs;
+	const char *start, *end = NULL, *last;
 
-	if (strlen(msg) == 0) {
+	if (msg == NULL || *msg == '\0') {
 		return 0;
 	}
 
-	purple_debug_info("gg", "ggp_send_im: msg = %s\n", msg);
-	plain = purple_unescape_html(msg);
+	last = msg;
+
+	/* Check if the message is richtext */
+	/* TODO: Check formatting, too */
+	if(purple_markup_find_tag("img", last, &start, &end, &attribs)) {
+
+		GString *string_buffer = g_string_new(NULL);
+		struct gg_msg_richtext fmt;
+
+		do {
+			PurpleStoredImage *image;
+			const char *id;
+
+			/* Add text before the image */
+			if(start - last) {
+				pos = pos + g_utf8_strlen(last, start - last);
+				g_string_append_len(string_buffer, last, start - last);
+			}
+
+			if((id = g_datalist_get_data(&attribs, "id")) && (image = purple_imgstore_find_by_id(atoi(id)))) {
+				struct gg_msg_richtext_format actformat;
+				struct gg_msg_richtext_image actimage;
+				gint image_size = purple_imgstore_get_size(image);
+				gconstpointer image_bin = purple_imgstore_get_data(image);
+				const char *image_filename = purple_imgstore_get_filename(image);
+				uint32_t crc32 = gg_crc32(0, image_bin, image_size);
+
+				g_hash_table_insert(info->pending_images, &crc32, GINT_TO_POINTER(atoi(id)));
+				purple_imgstore_ref(image);
+				purple_debug_info("gg", "ggp_send_im_richtext: got crc: %i for imgid: %i\n", crc32, atoi(id));
+
+				actformat.font = GG_FONT_IMAGE;
+				actformat.position = pos;
+
+				actimage.unknown1 = 0x0109;
+				actimage.size = gg_fix32(image_size);
+				actimage.crc32 = gg_fix32(crc32);
+
+				if (actimage.size > 255000) {
+					purple_debug_warning("gg", "ggp_send_im_richtext: image over 255kb!\n");
+					continue;
+				}
+
+				purple_debug_info("gg", "ggp_send_im_richtext: adding images to richtext, size: %i, crc32: %u, name: %s\n", actimage.size, actimage.crc32, image_filename);
+
+				memcpy(format + format_length, &actformat, sizeof(actformat));
+				format_length += sizeof(actformat);
+				memcpy(format + format_length, &actimage, sizeof(actimage));
+				format_length += sizeof(actimage);
+			} else {
+				purple_debug_error("gg", "ggp_send_im_richtext: image not found in the image store!");
+			}
+
+			last = end + 1;
+			g_datalist_clear(&attribs);
+
+		} while(purple_markup_find_tag("img", last, &start, &end, &attribs));
+
+		/* Add text after the images */
+		if(last && *last) {
+			pos = pos + g_utf8_strlen(last, -1);
+			g_string_append(string_buffer, last);
+		}
+
+		fmt.flag = 2;
+		fmt.length = format_length - sizeof(fmt);
+		memcpy(format, &fmt, sizeof(fmt));
+
+		purple_debug_info("gg", "ggp_send_im: richtext msg = %s\n", string_buffer->str);
+		plain = purple_unescape_html(string_buffer->str);
+		g_string_free(string_buffer, TRUE);
+	} else {
+		purple_debug_info("gg", "ggp_send_im: msg = %s\n", msg);
+		plain = purple_unescape_html(msg);
+	}
+
 	tmp = charset_convert(plain, "UTF-8", "CP1250");
 
-	if (NULL == tmp || strlen(tmp) == 0) {
+	if (tmp && (format_length - sizeof(struct gg_msg_richtext))) {
+		if(gg_send_message_richtext(info->session, GG_CLASS_CHAT, ggp_str_to_uin(who), (unsigned char *)tmp, format, format_length) < 0) {
+			ret = -1;
+		} else {
+			ret = 1;
+		}
+	} else if (NULL == tmp || *tmp == 0) {
 		ret = 0;
 	} else if (strlen(tmp) > GG_MSG_MAXSIZE) {
 		ret = -E2BIG;
@@ -1802,9 +1942,7 @@
 
 	return ret;
 }
-/* }}} */
 
-/* static void ggp_get_info(PurpleConnection *gc, const char *name) { {{{ */
 static void ggp_get_info(PurpleConnection *gc, const char *name)
 {
 	GGPInfo *info = gc->proto_data;
@@ -1822,9 +1960,7 @@
 	ggp_search_add(info->searches, seq, form);
 	purple_debug_info("gg", "ggp_get_info(): Added seq %u", seq);
 }
-/* }}} */
 
-/* static void ggp_set_status(PurpleAccount *account, PurpleStatus *status) {{{ */
 static int ggp_to_gg_status(PurpleStatus *status, char **msg)
 {
 	const char *status_id = purple_status_get_id(status);
@@ -1869,9 +2005,7 @@
 		return new_status;
 	}
 }
-/* }}} */
 
-/* static void ggp_set_status(PurpleAccount *account, PurpleStatus *status) {{{ */
 static void ggp_set_status(PurpleAccount *account, PurpleStatus *status)
 {
 	PurpleConnection *gc;
@@ -1897,9 +2031,7 @@
 	ggp_status_fake_to_self(account);
 
 }
-/* }}} */
 
-/* static void ggp_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) {{{ */
 static void ggp_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
 {
 	PurpleAccount *account;
@@ -1912,9 +2044,7 @@
 		ggp_status_fake_to_self(account);
 	}
 }
-/* }}} */
 
-/* static void ggp_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) {{{ */
 static void ggp_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy,
 						 PurpleGroup *group)
 {
@@ -1922,9 +2052,7 @@
 
 	gg_remove_notify(info->session, ggp_str_to_uin(buddy->name));
 }
-/* }}} */
 
-/* static void ggp_join_chat(PurpleConnection *gc, GHashTable *data) {{{ */
 static void ggp_join_chat(PurpleConnection *gc, GHashTable *data)
 {
 	GGPInfo *info = gc->proto_data;
@@ -1957,15 +2085,11 @@
 				purple_account_get_username(account), NULL,
 				PURPLE_CBFLAGS_NONE, TRUE);
 }
-/* }}} */
 
-/* static char *ggp_get_chat_name(GHashTable *data) { {{{ */
 static char *ggp_get_chat_name(GHashTable *data) {
 	return g_strdup(g_hash_table_lookup(data, "name"));
 }
-/* }}} */
 
-/* static int ggp_chat_send(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags) {{{ */
 static int ggp_chat_send(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags)
 {
 	PurpleConversation *conv;
@@ -2017,9 +2141,7 @@
 
 	return 0;
 }
-/* }}} */
 
-/* static void ggp_keepalive(PurpleConnection *gc) {{{ */
 static void ggp_keepalive(PurpleConnection *gc)
 {
 	GGPInfo *info = gc->proto_data;
@@ -2034,9 +2156,7 @@
 			_("Not connected to the server."));
 	}
 }
-/* }}} */
 
-/* static void ggp_register_user(PurpleAccount *account) {{{ */
 static void ggp_register_user(PurpleAccount *account)
 {
 	PurpleConnection *gc = purple_account_get_connection(account);
@@ -2046,9 +2166,7 @@
 
 	ggp_token_request(gc, ggp_register_user_dialog);
 }
-/* }}} */
 
-/* static GList *ggp_actions(PurplePlugin *plugin, gpointer context) {{{ */
 static GList *ggp_actions(PurplePlugin *plugin, gpointer context)
 {
 	GList *m = NULL;
@@ -2088,19 +2206,15 @@
 
 	return m;
 }
-/* }}} */
 
-/* static gboolean ggp_offline_message(const PurpleBuddy *buddy) {{{ */
 static gboolean ggp_offline_message(const PurpleBuddy *buddy)
 {
 	return TRUE;
 }
-/* }}} */
 
-/* prpl_info setup {{{ */
 static PurplePluginProtocolInfo prpl_info =
 {
-	OPT_PROTO_REGISTER_NOSCREENNAME,
+	OPT_PROTO_REGISTER_NOSCREENNAME | OPT_PROTO_IM_IMAGE,
 	NULL,				/* user_splits */
 	NULL,				/* protocol_options */
 	{"png", 32, 32, 96, 96, 0, PURPLE_ICON_SCALE_DISPLAY},	/* icon_spec */
@@ -2170,36 +2284,34 @@
 	sizeof(PurplePluginProtocolInfo),       /* struct_size */
 	NULL
 };
-/* }}} */
 
-/* PurplePluginInfo setup {{{ */
 static PurplePluginInfo info = {
-	PURPLE_PLUGIN_MAGIC,		/* magic */
-	PURPLE_MAJOR_VERSION,		/* major_version */
-	PURPLE_MINOR_VERSION,		/* minor_version */
-	PURPLE_PLUGIN_PROTOCOL,		/* plugin type */
-	NULL,				/* ui_requirement */
-	0,				/* flags */
-	NULL,				/* dependencies */
+	PURPLE_PLUGIN_MAGIC,			/* magic */
+	PURPLE_MAJOR_VERSION,			/* major_version */
+	PURPLE_MINOR_VERSION,			/* minor_version */
+	PURPLE_PLUGIN_PROTOCOL,			/* plugin type */
+	NULL,					/* ui_requirement */
+	0,					/* flags */
+	NULL,					/* dependencies */
 	PURPLE_PRIORITY_DEFAULT,		/* priority */
 
-	"prpl-gg",			/* id */
-	"Gadu-Gadu",			/* name */
-	DISPLAY_VERSION,		/* version */
+	"prpl-gg",				/* id */
+	"Gadu-Gadu",				/* name */
+	DISPLAY_VERSION,			/* version */
 
 	N_("Gadu-Gadu Protocol Plugin"),	/* summary */
 	N_("Polish popular IM"),		/* description */
-	"boler@sourceforge.net",	/* author */
-	PURPLE_WEBSITE,			/* homepage */
+	"boler@sourceforge.net",		/* author */
+	PURPLE_WEBSITE,				/* homepage */
 
-	NULL,				/* load */
-	NULL,				/* unload */
-	NULL,				/* destroy */
+	NULL,					/* load */
+	NULL,					/* unload */
+	NULL,					/* destroy */
 
-	NULL,				/* ui_info */
-	&prpl_info,			/* extra_info */
-	NULL,				/* prefs_info */
-	ggp_actions,			/* actions */
+	NULL,					/* ui_info */
+	&prpl_info,				/* extra_info */
+	NULL,					/* prefs_info */
+	ggp_actions,				/* actions */
 
 	/* padding */
 	NULL,
@@ -2207,9 +2319,7 @@
 	NULL,
 	NULL
 };
-/* }}} */
 
-/* static void purple_gg_debug_handler(int level, const char * format, va_list args) {{{ */
 static void purple_gg_debug_handler(int level, const char * format, va_list args) {
 	PurpleDebugLevel purple_level;
 	char *msg = g_strdup_vprintf(format, args);
@@ -2232,11 +2342,7 @@
 	purple_debug(purple_level, "gg", "%s", msg);
 	g_free(msg);
 }
-/* }}} */
 
-/*
- */
-/* static void init_plugin(PurplePlugin *plugin) {{{ */
 static void init_plugin(PurplePlugin *plugin)
 {
 	PurpleAccountOption *option;
@@ -2250,7 +2356,6 @@
 
 	gg_debug_handler = purple_gg_debug_handler;
 }
-/* }}} */
 
 PURPLE_INIT_PLUGIN(gg, init_plugin, info);
 
--- a/libpurple/protocols/gg/gg.h	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/gg/gg.h	Tue Nov 25 17:02:37 2008 +0000
@@ -64,9 +64,10 @@
 
 	int chats_count;
 
+	GList *pending_richtext_messages;
+	GHashTable *pending_images;
 } GGPInfo;
 
-
 #endif /* _PURPLE_GG_H */
 
 /* vim: set ts=8 sts=0 sw=8 noet: */
--- a/libpurple/protocols/irc/cmds.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/irc/cmds.c	Tue Nov 25 17:02:37 2008 +0000
@@ -71,7 +71,7 @@
 int irc_cmd_ctcp(struct irc_conn *irc, const char *cmd, const char *target, const char **args)
 {
 	/* we have defined args as args[0] is target and args[1] is ctcp command */
-        char *buf;
+	char *buf;
 	GString *string;
 	
 	/* check if we have args */
@@ -141,11 +141,11 @@
 			action[strlen(action) - 1] = '\0';
 		if (purple_conversation_get_type(convo) == PURPLE_CONV_TYPE_CHAT)
 			serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)),
-			         	 purple_connection_get_display_name(gc),
-				         0, action, time(NULL));
+			                 purple_connection_get_display_name(gc),
+			                 0, action, time(NULL));
 		else
 			purple_conv_im_write(PURPLE_CONV_IM(convo), purple_connection_get_display_name(gc),
-			                  action, 0, time(NULL));
+			                     action, 0, time(NULL));
 		g_free(action);
 	}
 
@@ -156,7 +156,6 @@
 {
 	char *buf;
 
-
 	if (!args || !args[0])
 		return 0;
 
--- a/libpurple/protocols/irc/dcc_send.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/irc/dcc_send.c	Tue Nov 25 17:02:37 2008 +0000
@@ -302,7 +302,7 @@
 
 	if (sock < 0) {
 		purple_notify_error(gc, NULL, _("File Transfer Failed"),
-		                  _("Could not open a listening port."));
+		                    _("Could not open a listening port."));
 		purple_xfer_cancel_local(xfer);
 		return;
 	}
@@ -313,14 +313,14 @@
 	purple_debug_misc("irc", "port is %hu\n", port);
 	/* Monitor the listening socket */
 	xfer->watcher = purple_input_add(sock, PURPLE_INPUT_READ,
-	                               irc_dccsend_send_connected, xfer);
+	                                 irc_dccsend_send_connected, xfer);
 
 	/* Send the intended recipient the DCC request */
 	arg[0] = xfer->who;
 	inet_aton(purple_network_get_my_ip(irc->fd), &addr);
 	arg[1] = tmp = g_strdup_printf("\001DCC SEND \"%s\" %u %hu %" G_GSIZE_FORMAT "\001",
-	                         xfer->filename, ntohl(addr.s_addr),
-	                         port, xfer->size);
+	                               xfer->filename, ntohl(addr.s_addr),
+	                               port, xfer->size);
 
 	irc_cmd_privmsg(gc->proto_data, "msg", NULL, arg);
 	g_free(tmp);
@@ -343,7 +343,7 @@
 	if (xd->listen_data == NULL) {
 		purple_xfer_unref(xfer);
 		purple_notify_error(gc, NULL, _("File Transfer Failed"),
-		                  _("Could not open a listening port."));
+		                    _("Could not open a listening port."));
 		purple_xfer_cancel_local(xfer);
 	}
 
--- a/libpurple/protocols/irc/msgs.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/irc/msgs.c	Tue Nov 25 17:02:37 2008 +0000
@@ -123,10 +123,10 @@
 void irc_msg_default(struct irc_conn *irc, const char *name, const char *from, char **args)
 {
 	char *clean;
-        /* This, too, should be escaped somehow (smarter) */
-        clean = purple_utf8_salvage(args[0]);
+	/* This, too, should be escaped somehow (smarter) */
+	clean = purple_utf8_salvage(args[0]);
 	purple_debug(PURPLE_DEBUG_INFO, "irc", "Unrecognized message: %s\n", clean);
-        g_free(clean);
+	g_free(clean);
 }
 
 void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args)
@@ -814,8 +814,8 @@
 		purple_conversation_set_data(convo, IRC_NAMES_FLAG,
 					   GINT_TO_POINTER(FALSE));
 		/* Until purple_conversation_present does something that
-                 * one would expect in Pidgin, this call produces buggy
-                 * behavior both for the /join and auto-join cases. */
+		 * one would expect in Pidgin, this call produces buggy
+		 * behavior both for the /join and auto-join cases. */
 		/* purple_conversation_present(convo); */
 		return;
 	}
@@ -1043,7 +1043,7 @@
 		return;
 
 	/* Undernet likes to :-quote the channel name, for no good reason
-         * that I can see.  This catches that. */
+	 * that I can see.  This catches that. */
 	channel = (args[0][0] == ':') ? &args[0][1] : args[0];
 
 	convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, channel, irc->account);
@@ -1056,8 +1056,8 @@
 	if (!purple_utf8_strcasecmp(nick, purple_connection_get_display_name(gc))) {
 		char *escaped = g_markup_escape_text(args[1], -1);
 		msg = g_strdup_printf(_("You have parted the channel%s%s"),
-                                      (args[1] && *args[1]) ? ": " : "",
-									  (escaped && *escaped) ? escaped : "");
+		                      (args[1] && *args[1]) ? ": " : "",
+		                      (escaped && *escaped) ? escaped : "");
 		g_free(escaped);
 		purple_conv_chat_write(PURPLE_CONV_CHAT(convo), channel, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
 		g_free(msg);
@@ -1168,7 +1168,7 @@
 			serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)), nick, 0, msg, time(NULL));
 		else
 			purple_debug_error("irc", "Got a %s on %s, which does not exist\n",
-			                 notice ? "NOTICE" : "PRIVMSG", to);
+			                   notice ? "NOTICE" : "PRIVMSG", to);
 	}
 	g_free(msg);
 	g_free(nick);
--- a/libpurple/protocols/irc/parse.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/irc/parse.c	Tue Nov 25 17:02:37 2008 +0000
@@ -494,7 +494,7 @@
 		}
 	}
 	result[j] = '\0';
-        return result;
+	return result;
 }
 
 const char *irc_nick_skip_mode(struct irc_conn *irc, const char *nick)
@@ -732,9 +732,9 @@
 static void irc_parse_error_cb(struct irc_conn *irc, char *input)
 {
 	char *clean;
-        /* This really should be escaped somehow that you can tell what
-         * the junk was -- but as it is, it can crash glib. */
-        clean = purple_utf8_salvage(input);
+	/* This really should be escaped somehow that you can tell what
+	 * the junk was -- but as it is, it can crash glib. */
+	clean = purple_utf8_salvage(input);
 	purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unrecognized string: %s\n", clean);
-        g_free(clean);
+	g_free(clean);
 }
--- a/libpurple/protocols/jabber/message.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/jabber/message.c	Tue Nov 25 17:02:37 2008 +0000
@@ -913,19 +913,15 @@
 		return FALSE;
 	}
 
-	jb = jabber_buddy_find(js, who, FALSE);
-	if (!jb) {
-		purple_debug_error("jabber",
-			"jabber_conv_support_custom smileys: could not find buddy\n");
-		return FALSE;
-	}
-	
-	
-
 	switch (purple_conversation_get_type(conv)) {
 		/* for the time being, we will not support custom smileys in MUCs */
 		case PURPLE_CONV_TYPE_IM:
-			return jabber_buddy_has_capability(jb, XEP_0231_NAMESPACE);
+			jb = jabber_buddy_find(js, who, FALSE);
+			if (jb) {
+				return jabber_buddy_has_capability(jb, XEP_0231_NAMESPACE);
+			} else {
+				return NULL;
+			}
 			break;
 		default:
 			return FALSE;
--- a/libpurple/protocols/jabber/parser.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/jabber/parser.c	Tue Nov 25 17:02:37 2008 +0000
@@ -114,7 +114,8 @@
 		xmlnode *packet = js->current;
 		js->current = NULL;
 		jabber_process_packet(js, &packet);
-		xmlnode_free(packet);
+		if (packet != NULL)
+			xmlnode_free(packet);
 	}
 }
 
@@ -137,11 +138,19 @@
 {
 	JabberStream *js = user_data;
 
+	if (error->level == XML_ERR_WARNING && error->message != NULL
+			&& strcmp(error->message, "xmlns: URI vcard-temp is not absolute\n") == 0)
+		/*
+		 * This message happens when parsing vcards, and is normal, so don't
+		 * bother logging it because people scare easily.
+		 */
+		return;
+
 	purple_debug_error("jabber", "XML parser error for JabberStream %p: "
-								 "Domain %i, code %i, level %i: %s\n",
+								 "Domain %i, code %i, level %i: %s",
 					   js,
 					   error->domain, error->code, error->level,
-					   (error->message ? error->message : "(null)"));
+					   (error->message ? error->message : "(null)\n"));
 }
 
 static xmlSAXHandler jabber_parser_libxml = {
--- a/libpurple/protocols/jabber/presence.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/jabber/presence.c	Tue Nov 25 17:02:37 2008 +0000
@@ -459,7 +459,7 @@
 
 		if (buddy) {
 			jb = jabber_buddy_find(js, from, TRUE);
-			if ((jb->subscription & JABBER_SUB_TO))
+			if ((jb->subscription & (JABBER_SUB_TO | JABBER_SUB_PENDING)))
 				onlist = TRUE;
 		}
 
--- a/libpurple/protocols/jabber/si.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/jabber/si.c	Tue Nov 25 17:02:37 2008 +0000
@@ -798,7 +798,7 @@
 		if (!(sh->jid && sh->host && sh->port > 0))
 			continue;
 
-		purple_debug_info("jabber", "jabber_si_xfer_bytestreams_listen_cb() will be looking at jsx %p: jsx->streamhosts %p and sh->jid %p",
+		purple_debug_info("jabber", "jabber_si_xfer_bytestreams_listen_cb() will be looking at jsx %p: jsx->streamhosts %p and sh->jid %p\n",
 						  jsx, jsx->streamhosts, sh->jid);
 		if(g_list_find_custom(jsx->streamhosts, sh->jid, jabber_si_compare_jid) != NULL)
 			continue;
--- a/libpurple/protocols/msn/msn.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/msn/msn.c	Tue Nov 25 17:02:37 2008 +0000
@@ -1196,6 +1196,9 @@
 		purple_debug_info("msn", "prepare to send online Message\n");
 		if (g_ascii_strcasecmp(who, username))
 		{
+			if (flags & PURPLE_MESSAGE_AUTO_RESP) {
+				msn_message_set_flag(msg, 'U');
+			}
 			if (msn_user_is_yahoo(account, who)) {
 				/*we send the online and offline Message to Yahoo User via UBM*/
 				purple_debug_info("msn", "send to Yahoo User\n");
--- a/libpurple/protocols/msn/notification.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/msn/notification.c	Tue Nov 25 17:02:37 2008 +0000
@@ -491,7 +491,7 @@
 	 * command and we are processing it */
 	if (cmd->payload == NULL) {
 		cmdproc->last_cmd->payload_cb = msg_cmd_post;
-		cmd->payload_len = atoi(cmd->params[4]);
+		cmd->payload_len = atoi(cmd->params[3]);
 	} else {
 		g_return_if_fail(cmd->payload_cb != NULL);
 
--- a/libpurple/protocols/msn/servconn.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/msn/servconn.c	Tue Nov 25 17:02:37 2008 +0000
@@ -69,8 +69,7 @@
 		return;
 	}
 
-	if (servconn->connected)
-		msn_servconn_disconnect(servconn);
+	msn_servconn_disconnect(servconn);
 
 	if (servconn->destroy_cb)
 		servconn->destroy_cb(servconn);
--- a/libpurple/protocols/msn/soap.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/msn/soap.c	Tue Nov 25 17:02:37 2008 +0000
@@ -1,6 +1,6 @@
 /**
  * @file soap.c
- * 	C file for SOAP connection related process
+ * Functions relating to SOAP connections.
  *
  * purple
  *
@@ -56,6 +56,7 @@
 	gboolean connected;
 
 	guint event_handle;
+	guint run_timer;
 	GString *buf;
 	gsize handled_len;
 	gsize body_len;
@@ -69,22 +70,99 @@
 	MsnSoapRequest *current_request;
 } MsnSoapConnection;
 
-static void msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data);
 static gboolean msn_soap_connection_run(gpointer data);
 
-static MsnSoapConnection *msn_soap_connection_new(MsnSession *session,
-	const char *host);
-static void msn_soap_connection_handle_next(MsnSoapConnection *conn);
-static void msn_soap_connection_destroy(MsnSoapConnection *conn);
+static MsnSoapConnection *
+msn_soap_connection_new(MsnSession *session, const char *host)
+{
+	MsnSoapConnection *conn = g_new0(MsnSoapConnection, 1);
+	conn->session = session;
+	conn->host = g_strdup(host);
+	conn->queue = g_queue_new();
+	return conn;
+}
+
+static void
+msn_soap_message_destroy(MsnSoapMessage *message)
+{
+	g_slist_foreach(message->headers, (GFunc)g_free, NULL);
+	g_slist_free(message->headers);
+	g_free(message->action);
+	if (message->xml)
+		xmlnode_free(message->xml);
+	g_free(message);
+}
+
+static void
+msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message)
+{
+	g_free(req->path);
+	if (!keep_message)
+		msn_soap_message_destroy(req->message);
+	g_free(req);
+}
+
+static void
+msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect)
+{
+	if (conn->event_handle) {
+		purple_input_remove(conn->event_handle);
+		conn->event_handle = 0;
+	}
+
+	if (conn->run_timer) {
+		purple_timeout_remove(conn->run_timer);
+		conn->run_timer = 0;
+	}
 
-static void msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message,
-	const char *host, const char *path, gboolean secure,
-	MsnSoapCallback cb, gpointer cb_data, gboolean first);
+	if (conn->message) {
+		msn_soap_message_destroy(conn->message);
+		conn->message = NULL;
+	}
+
+	if (conn->buf) {
+		g_string_free(conn->buf, TRUE);
+		conn->buf = NULL;
+	}
+
+	if (conn->ssl && (disconnect || conn->close_when_done)) {
+		purple_ssl_close(conn->ssl);
+		conn->ssl = NULL;
+	}
+
+	if (conn->current_request) {
+		msn_soap_request_destroy(conn->current_request, FALSE);
+		conn->current_request = NULL;
+	}
+}
 
-static void msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message);
-static void msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect);
-static gboolean msn_soap_write_cb_internal(gpointer data, gint fd, PurpleInputCondition cond, gboolean initial);
-static void msn_soap_process(MsnSoapConnection *conn);
+static void
+msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data)
+{
+	MsnSoapRequest *req = item;
+
+	if (req->cb)
+		req->cb(req->message, NULL, req->cb_data);
+
+	msn_soap_request_destroy(req, FALSE);
+}
+
+static void
+msn_soap_connection_destroy(MsnSoapConnection *conn)
+{
+	if (conn->current_request) {
+		MsnSoapRequest *req = conn->current_request;
+		conn->current_request = NULL;
+		msn_soap_connection_destroy_foreach_cb(req, conn);
+	}
+
+	msn_soap_connection_sanitize(conn, TRUE);
+	g_queue_foreach(conn->queue, msn_soap_connection_destroy_foreach_cb, conn);
+	g_queue_free(conn->queue);
+
+	g_free(conn->host);
+	g_free(conn);
+}
 
 static gboolean
 msn_soap_cleanup_each(gpointer key, gpointer value, gpointer data)
@@ -113,8 +191,8 @@
 			&t);
 
 		if (g_hash_table_size(sess->soap_table) == 0) {
-			purple_timeout_remove(sess->soap_cleanup_handle);
 			sess->soap_cleanup_handle = 0;
+			return FALSE;
 		}
 	}
 
@@ -147,38 +225,54 @@
 	return conn;
 }
 
-static MsnSoapConnection *
-msn_soap_connection_new(MsnSession *session, const char *host)
+static void
+msn_soap_connection_handle_next(MsnSoapConnection *conn)
 {
-	MsnSoapConnection *conn = g_new0(MsnSoapConnection, 1);
-	conn->session = session;
-	conn->host = g_strdup(host);
-	conn->queue = g_queue_new();
-	return conn;
+	msn_soap_connection_sanitize(conn, FALSE);
+
+	conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
+
+	if (conn->current_request) {
+		MsnSoapRequest *req = conn->current_request;
+		conn->current_request = NULL;
+		msn_soap_connection_destroy_foreach_cb(req, conn);
+	}
 }
 
 static void
-msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl,
-		PurpleInputCondition cond)
+msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message,
+	const char *host, const char *path, gboolean secure,
+	MsnSoapCallback cb, gpointer cb_data, gboolean first)
 {
-	MsnSoapConnection *conn = data;
+	MsnSoapConnection *conn = msn_soap_get_connection(session, host);
+	MsnSoapRequest *req = g_new0(MsnSoapRequest, 1);
 
-	conn->connected = TRUE;
+	req->path = g_strdup(path);
+	req->message = message;
+	req->secure = secure;
+	req->cb = cb;
+	req->cb_data = cb_data;
 
-	if (conn->event_handle == 0)
-		conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, conn);
+	if (first) {
+		g_queue_push_head(conn->queue, req);
+	} else {
+		g_queue_push_tail(conn->queue, req);
+	}
+
+	if (conn->run_timer == 0)
+		conn->run_timer = purple_timeout_add(0, msn_soap_connection_run,
+			conn);
 }
 
-static void
-msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error,
-		gpointer data)
+void
+msn_soap_message_send(MsnSession *session, MsnSoapMessage *message,
+	const char *host, const char *path, gboolean secure,
+	MsnSoapCallback cb, gpointer cb_data)
 {
-	MsnSoapConnection *conn = data;
+	g_return_if_fail(message != NULL);
 
-	/* sslconn already frees the connection in case of error */
-	conn->ssl = NULL;
-
-	g_hash_table_remove(conn->session->soap_table, conn->host);
+	msn_soap_message_send_internal(session, message, host, path, secure,
+		cb, cb_data, FALSE);
 }
 
 static gboolean
@@ -259,65 +353,17 @@
 }
 
 static void
-msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
+msn_soap_message_add_header(MsnSoapMessage *message,
+		const char *name, const char *value)
 {
-	MsnSoapConnection *conn = data;
-	int count = 0, cnt, perrno;
-	/* This buffer needs to be larger than any packets received from
-		login.live.com or Adium will fail to receive the packet
-		(something weird with the login.live.com server). With NSS it works
-		fine, so I believe it's some bug with OS X */ 
-	char buf[16 * 1024];
-	gsize cursor;
-
-	if (conn->message == NULL) {
-		conn->message = msn_soap_message_new(NULL, NULL);
-	}
-
-	if (conn->buf == NULL) {
-		conn->buf = g_string_new_len(buf, 0);
-	}
-
-	cursor = conn->buf->len;
-	while ((cnt = purple_ssl_read(conn->ssl, buf, sizeof(buf))) > 0) {
-		purple_debug_info("soap", "read %d bytes\n", cnt);
-		count += cnt;
-		g_string_append_len(conn->buf, buf, cnt);
-	}
+	char *header = g_strdup_printf("%s: %s\r\n", name, value);
 
-	perrno = errno;
-	if (cnt < 0 && perrno != EAGAIN)
-		purple_debug_info("soap", "read: %s\n", g_strerror(perrno));
-
-#ifndef MSN_UNSAFE_DEBUG
-	if (conn->current_request->secure)
-		purple_debug_misc("soap", "Received secure request.\n");
-	else
-#endif
-	if (count != 0)
-		purple_debug_misc("soap", "current %s\n", conn->buf->str + cursor);
-
-	/* && count is necessary for Adium, on OS X the last read always
-	   return an error, so we want to proceed anyway. See #5212 for
-	   discussion on this and the above buffer size issues */
-	if(cnt < 0 && errno == EAGAIN && count == 0)
-		return;
-
-	/* msn_soap_process could alter errno */
-	msn_soap_process(conn);
-	
-	if (cnt < 0 && perrno != EAGAIN) {
-		/* It's possible msn_soap_process closed the ssl connection */
-		if (conn->ssl) {
-			purple_ssl_close(conn->ssl);
-			conn->ssl = NULL;
-			msn_soap_connection_handle_next(conn);
-		}
-	}
+	message->headers = g_slist_prepend(message->headers, header);
 }
 
 static void
-msn_soap_process(MsnSoapConnection *conn) {
+msn_soap_process(MsnSoapConnection *conn)
+{
 	gboolean handled = FALSE;
 	char *cursor;
 	char *linebreak;
@@ -429,9 +475,61 @@
 }
 
 static void
-msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond)
+msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
 {
-	msn_soap_write_cb_internal(data, fd, cond, FALSE);
+	MsnSoapConnection *conn = data;
+	int count = 0, cnt, perrno;
+	/* This buffer needs to be larger than any packets received from
+		login.live.com or Adium will fail to receive the packet
+		(something weird with the login.live.com server). With NSS it works
+		fine, so I believe it's some bug with OS X */
+	char buf[16 * 1024];
+	gsize cursor;
+
+	if (conn->message == NULL) {
+		conn->message = msn_soap_message_new(NULL, NULL);
+	}
+
+	if (conn->buf == NULL) {
+		conn->buf = g_string_new_len(buf, 0);
+	}
+
+	cursor = conn->buf->len;
+	while ((cnt = purple_ssl_read(conn->ssl, buf, sizeof(buf))) > 0) {
+		purple_debug_info("soap", "read %d bytes\n", cnt);
+		count += cnt;
+		g_string_append_len(conn->buf, buf, cnt);
+	}
+
+	perrno = errno;
+	if (cnt < 0 && perrno != EAGAIN)
+		purple_debug_info("soap", "read: %s\n", g_strerror(perrno));
+
+#ifndef MSN_UNSAFE_DEBUG
+	if (conn->current_request->secure)
+		purple_debug_misc("soap", "Received secure request.\n");
+	else
+#endif
+	if (count != 0)
+		purple_debug_misc("soap", "current %s\n", conn->buf->str + cursor);
+
+	/* && count is necessary for Adium, on OS X the last read always
+	   return an error, so we want to proceed anyway. See #5212 for
+	   discussion on this and the above buffer size issues */
+	if(cnt < 0 && errno == EAGAIN && count == 0)
+		return;
+
+	/* msn_soap_process could alter errno */
+	msn_soap_process(conn);
+
+	if (cnt < 0 && perrno != EAGAIN) {
+		/* It's possible msn_soap_process closed the ssl connection */
+		if (conn->ssl) {
+			purple_ssl_close(conn->ssl);
+			conn->ssl = NULL;
+			msn_soap_connection_handle_next(conn);
+		}
+	}
 }
 
 static gboolean
@@ -441,7 +539,8 @@
 	MsnSoapConnection *conn = data;
 	int written;
 
-	if (cond != PURPLE_INPUT_WRITE) return TRUE;
+	if (cond != PURPLE_INPUT_WRITE)
+		return TRUE;
 
 	written = purple_ssl_write(conn->ssl, conn->buf->str + conn->handled_len,
 		conn->buf->len - conn->handled_len);
@@ -451,7 +550,8 @@
 	else if (written <= 0) {
 		purple_ssl_close(conn->ssl);
 		conn->ssl = NULL;
-		if (!initial) msn_soap_connection_handle_next(conn);
+		if (!initial)
+			msn_soap_connection_handle_next(conn);
 		return FALSE;
 	}
 
@@ -475,13 +575,54 @@
 	return TRUE;
 }
 
+static void
+msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond)
+{
+	msn_soap_write_cb_internal(data, fd, cond, FALSE);
+}
+
+static void
+msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error,
+		gpointer data)
+{
+	MsnSoapConnection *conn = data;
+
+	/* sslconn already frees the connection in case of error */
+	conn->ssl = NULL;
+
+	g_hash_table_remove(conn->session->soap_table, conn->host);
+}
+
+static void
+msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl,
+		PurpleInputCondition cond)
+{
+	MsnSoapConnection *conn = data;
+
+	conn->connected = TRUE;
+
+	if (conn->run_timer == 0)
+		conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
+}
+
+MsnSoapMessage *
+msn_soap_message_new(const char *action, xmlnode *xml)
+{
+	MsnSoapMessage *message = g_new0(MsnSoapMessage, 1);
+
+	message->action = g_strdup(action);
+	message->xml = xml;
+
+	return message;
+}
+
 static gboolean
 msn_soap_connection_run(gpointer data)
 {
 	MsnSoapConnection *conn = data;
 	MsnSoapRequest *req = g_queue_peek_head(conn->queue);
 
-	conn->event_handle = 0;
+	conn->run_timer = 0;
 
 	if (req) {
 		if (conn->ssl == NULL) {
@@ -532,13 +673,13 @@
 			if (!msn_soap_write_cb_internal(conn, conn->ssl->fd, PURPLE_INPUT_WRITE, TRUE)) {
 				/* Not connected => reconnect and retry */
 				purple_debug_info("soap", "not connected, reconnecting\n");
-				
+
 				conn->connected = FALSE;
 				conn->current_request = NULL;
 				msn_soap_connection_sanitize(conn, FALSE);
-				
+
 				g_queue_push_head(conn->queue, req);
-				conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, conn);
+				conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
 			}
 
 			g_free(body);
@@ -547,151 +688,3 @@
 
 	return FALSE;
 }
-
-void
-msn_soap_message_send(MsnSession *session, MsnSoapMessage *message,
-	const char *host, const char *path, gboolean secure,
-	MsnSoapCallback cb, gpointer cb_data)
-{
-	msn_soap_message_send_internal(session, message, host, path, secure,
-		cb, cb_data, FALSE);
-}
-
-static void
-msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message,
-	const char *host, const char *path, gboolean secure,
-	MsnSoapCallback cb, gpointer cb_data, gboolean first)
-{
-	MsnSoapConnection *conn = msn_soap_get_connection(session, host);
-	MsnSoapRequest *req = g_new0(MsnSoapRequest, 1);
-
-	req->path = g_strdup(path);
-	req->message = message;
-	req->secure = secure;
-	req->cb = cb;
-	req->cb_data = cb_data;
-
-	if (first) {
-		g_queue_push_head(conn->queue, req);
-	} else {
-		g_queue_push_tail(conn->queue, req);
-	}
-
-	if (conn->event_handle == 0)
-		conn->event_handle = purple_timeout_add(0, msn_soap_connection_run,
-			conn);
-}
-
-static void
-msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect)
-{
-	if (conn->event_handle) {
-		purple_input_remove(conn->event_handle);
-		conn->event_handle = 0;
-	}
-
-	if (conn->message) {
-		msn_soap_message_destroy(conn->message);
-		conn->message = NULL;
-	}
-
-	if (conn->buf) {
-		g_string_free(conn->buf, TRUE);
-		conn->buf = NULL;
-	}
-
-	if (conn->ssl && (disconnect || conn->close_when_done)) {
-		purple_ssl_close(conn->ssl);
-		conn->ssl = NULL;
-	}
-
-	if (conn->current_request) {
-		msn_soap_request_destroy(conn->current_request, FALSE);
-		conn->current_request = NULL;
-	}
-}
-
-static void
-msn_soap_connection_handle_next(MsnSoapConnection *conn)
-{
-	msn_soap_connection_sanitize(conn, FALSE);
-
-	conn->event_handle = purple_timeout_add(0, msn_soap_connection_run,	conn);
-
-	if (conn->current_request) {
-		MsnSoapRequest *req = conn->current_request;
-		conn->current_request = NULL;
-		msn_soap_connection_destroy_foreach_cb(req, conn);
-	}
-}
-
-static void
-msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data)
-{
-	MsnSoapRequest *req = item;
-
-	if (req->cb)
-		req->cb(req->message, NULL, req->cb_data);
-
-	msn_soap_request_destroy(req, FALSE);
-}
-
-static void
-msn_soap_connection_destroy(MsnSoapConnection *conn)
-{
-	if (conn->current_request) {
-		MsnSoapRequest *req = conn->current_request;
-		conn->current_request = NULL;
-		msn_soap_connection_destroy_foreach_cb(req, conn);
-	}
-
-	msn_soap_connection_sanitize(conn, TRUE);
-	g_queue_foreach(conn->queue, msn_soap_connection_destroy_foreach_cb, conn);
-	g_queue_free(conn->queue);
-
-	g_free(conn->host);
-	g_free(conn);
-}
-
-MsnSoapMessage *
-msn_soap_message_new(const char *action, xmlnode *xml)
-{
-	MsnSoapMessage *message = g_new0(MsnSoapMessage, 1);
-
-	message->action = g_strdup(action);
-	message->xml = xml;
-
-	return message;
-}
-
-void
-msn_soap_message_destroy(MsnSoapMessage *message)
-{
-	if (message) {
-		g_slist_foreach(message->headers, (GFunc)g_free, NULL);
-		g_slist_free(message->headers);
-		g_free(message->action);
-		if (message->xml)
-			xmlnode_free(message->xml);
-		g_free(message);
-	}
-}
-
-void
-msn_soap_message_add_header(MsnSoapMessage *message,
-		const char *name, const char *value)
-{
-	char *header = g_strdup_printf("%s: %s\r\n", name, value);
-
-	message->headers = g_slist_prepend(message->headers, header);
-}
-
-static void
-msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message)
-{
-	g_free(req->path);
-	if (!keep_message)
-		msn_soap_message_destroy(req->message);
-	g_free(req);
-}
-
--- a/libpurple/protocols/msn/soap.h	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/msn/soap.h	Tue Nov 25 17:02:37 2008 +0000
@@ -44,13 +44,8 @@
 
 MsnSoapMessage *msn_soap_message_new(const char *action, xmlnode *xml);
 
-void msn_soap_message_add_header(MsnSoapMessage *req,
-	const char *name, const char *value);
-
 void msn_soap_message_send(MsnSession *session, MsnSoapMessage *message,
 	const char *host, const char *path, gboolean secure,
 	MsnSoapCallback cb, gpointer cb_data);
 
-void msn_soap_message_destroy(MsnSoapMessage *message);
-
 #endif
--- a/libpurple/protocols/msn/switchboard.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/msn/switchboard.c	Tue Nov 25 17:02:37 2008 +0000
@@ -577,6 +577,7 @@
 	MsnTransaction *trans;
 	char *payload;
 	gsize payload_len;
+	char flag;
 
 	g_return_if_fail(swboard != NULL);
 	g_return_if_fail(msg     != NULL);
@@ -590,32 +591,35 @@
 	msn_message_show_readable(msg, "SB SEND", FALSE);
 #endif
 
+	flag = msn_message_get_flag(msg);
 	trans = msn_transaction_new(cmdproc, "MSG", "%c %" G_GSIZE_FORMAT,
-								msn_message_get_flag(msg), payload_len);
+								flag, payload_len);
 
 	/* Data for callbacks */
 	msn_transaction_set_data(trans, msg);
 
-	if (msg->type == MSN_MSG_TEXT)
-	{
-		msg->ack_ref = TRUE;
-		msn_message_ref(msg);
-		swboard->ack_list = g_list_append(swboard->ack_list, msg);
-		msn_transaction_set_timeout_cb(trans, msg_timeout);
-	}
-	else if (msg->type == MSN_MSG_SLP)
-	{
-		msg->ack_ref = TRUE;
-		msn_message_ref(msg);
-		swboard->ack_list = g_list_append(swboard->ack_list, msg);
-		msn_transaction_set_timeout_cb(trans, msg_timeout);
+	if (flag != 'U') {
+		if (msg->type == MSN_MSG_TEXT)
+		{
+			msg->ack_ref = TRUE;
+			msn_message_ref(msg);
+			swboard->ack_list = g_list_append(swboard->ack_list, msg);
+			msn_transaction_set_timeout_cb(trans, msg_timeout);
+		}
+		else if (msg->type == MSN_MSG_SLP)
+		{
+			msg->ack_ref = TRUE;
+			msn_message_ref(msg);
+			swboard->ack_list = g_list_append(swboard->ack_list, msg);
+			msn_transaction_set_timeout_cb(trans, msg_timeout);
 #if 0
-		if (msg->ack_cb != NULL)
-		{
-			msn_transaction_add_cb(trans, "ACK", msg_ack);
-			msn_transaction_add_cb(trans, "NAK", msg_nak);
+			if (msg->ack_cb != NULL)
+			{
+				msn_transaction_add_cb(trans, "ACK", msg_ack);
+				msn_transaction_add_cb(trans, "NAK", msg_nak);
+			}
+#endif
 		}
-#endif
 	}
 
 	trans->payload = payload;
@@ -806,7 +810,7 @@
 ubm_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
 {
 	purple_debug_misc("msn", "get UBM...\n");
-	cmd->payload_len = atoi(cmd->params[4]);
+	cmd->payload_len = atoi(cmd->params[3]);
 	cmdproc->last_cmd->payload_cb = msg_cmd_post;
 }
 
--- a/libpurple/protocols/sametime/sametime.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/sametime/sametime.c	Tue Nov 25 17:02:37 2008 +0000
@@ -1445,7 +1445,7 @@
 					 MW_PLUGIN_DEFAULT_HOST);
 
   if(purple_account_get_bool(account, MW_KEY_FORCE, FALSE) ||
-     (! strcmp(current_host, host)) ||
+     !host || (! strcmp(current_host, host)) ||
      (purple_proxy_connect(NULL, account, host, port, connect_cb, pd) == NULL)) {
 
     /* if we're configured to force logins, or if we're being
--- a/libpurple/protocols/simple/simple.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/simple/simple.c	Tue Nov 25 17:02:37 2008 +0000
@@ -1630,6 +1630,13 @@
 		cur[0] = '\0';
 		purple_debug_info("simple", "\n\nreceived - %s\n######\n%s\n#######\n\n", ctime(&currtime), conn->inbuf);
 		msg = sipmsg_parse_header(conn->inbuf);
+
+		if(!msg) {
+			/* Should we re-use this error message (from lower in the function)? */
+			purple_debug_misc("simple", "received a incomplete sip msg: %s\n", conn->inbuf);
+			return;
+		}
+
 		cur[0] = '\r';
 		cur += 2;
 		restlen = conn->inbufused - (cur - conn->inbuf);
--- a/libpurple/protocols/zephyr/zephyr.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/protocols/zephyr/zephyr.c	Tue Nov 25 17:02:37 2008 +0000
@@ -1571,7 +1571,7 @@
 #ifdef WIN32
 	username = purple_account_get_username(account);
 #endif
-	gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC;
+	gc->flags |= PURPLE_CONNECTION_AUTO_RESP | PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC;
 	gc->proto_data = zephyr=g_new0(zephyr_account,1); 
 
 	zephyr->account = account;
--- a/libpurple/proxy.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/libpurple/proxy.c	Tue Nov 25 17:02:37 2008 +0000
@@ -944,12 +944,15 @@
 
 			} else if((header = g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: Basic"))) {
 				gchar *t1, *t2;
+				const char *username, *password;
+
+				username = purple_proxy_info_get_username(connect_data->gpi);
+				password = purple_proxy_info_get_password(connect_data->gpi);
 
 				t1 = g_strdup_printf("%s:%s",
-					purple_proxy_info_get_username(connect_data->gpi),
-					purple_proxy_info_get_password(connect_data->gpi) ?
-					purple_proxy_info_get_password(connect_data->gpi) : "");
-				t2 = purple_base64_encode((const guchar *)t1, strlen(t1));
+									 username ? username : "",
+									 password ? password : "");
+				t2 = purple_base64_encode((guchar *)t1, strlen(t1));
 				g_free(t1);
 
 				request = g_strdup_printf(
--- a/pidgin/plugins/relnot.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/pidgin/plugins/relnot.c	Tue Nov 25 17:02:37 2008 +0000
@@ -34,7 +34,10 @@
 #include "connection.h"
 #include "core.h"
 #include "debug.h"
+#include "gtkblist.h"
+#include "gtkutils.h"
 #include "notify.h"
+#include "pidginstock.h"
 #include "prefs.h"
 #include "util.h"
 #include "version.h"
@@ -45,12 +48,26 @@
 #define MIN_CHECK_INTERVAL 60 * 60 * 24
 
 static void
+release_hide()
+{
+	/* No-op.  We may use this method in the future to avoid showing
+	 * the popup twice */
+}
+
+static void
+release_show()
+{
+	purple_notify_uri(NULL, PURPLE_WEBSITE);
+}
+
+static void
 version_fetch_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
 		const gchar *response, size_t len, const gchar *error_message)
 {
-	gchar *cur_ver, *formatted;
+	gchar *cur_ver;
 	const char *tmp, *changelog;
 	char response_code[4];
+	GtkWidget *release_dialog;
 
 	GString *message;
 	int i = 0;
@@ -89,27 +106,21 @@
 		return;
 
 	cur_ver = g_strndup(changelog, i);
-	changelog += i;
-
-	while(*changelog == '\n') changelog++;
 
 	message = g_string_new("");
-	g_string_append_printf(message, _("You are using %s version %s.  The "
-			"current version is %s.  You can get it from "
-			"<a href=\"%s\">%s</a><hr>"),
-			PIDGIN_NAME, purple_core_get_version(), cur_ver,
-			PURPLE_WEBSITE, PURPLE_WEBSITE);
+	g_string_append_printf(message, _("You can upgrade to %s %s today."),
+			PIDGIN_NAME, cur_ver);
 
-	if(*changelog) {
-		formatted = purple_strdup_withhtml(changelog);
-		g_string_append_printf(message, _("<b>ChangeLog:</b><br>%s"),
-				formatted);
-		g_free(formatted);
-	}
+	release_dialog = pidgin_make_mini_dialog(
+		NULL, PIDGIN_STOCK_DIALOG_INFO,
+		_("New Version Available"),
+		message->str,
+		NULL,
+		_("Later"), PURPLE_CALLBACK(release_hide),
+		_("Download Now"), PURPLE_CALLBACK(release_show),
+		NULL);
 
-	purple_notify_formatted(NULL, _("New Version Available"),
-			_("New Version Available"), NULL, message->str,
-			NULL, NULL);
+	pidgin_blist_add_alert(release_dialog);
 
 	g_string_free(message, TRUE);
 	g_free(cur_ver);
--- a/pidgin/win32/winpidgin.c	Mon Nov 17 21:07:43 2008 +0000
+++ b/pidgin/win32/winpidgin.c	Tue Nov 25 17:02:37 2008 +0000
@@ -621,9 +621,22 @@
 	char *tmp;
 	int pidgin_argc = __argc;
 	char **pidgin_argv = __argv;
+	int i;
+	BOOL debug = FALSE, help = FALSE, version = FALSE, multiple = FALSE;
 
 	/* If debug or help or version flag used, create console for output */
-	if (strstr(lpszCmdLine, "-d") || strstr(lpszCmdLine, "-h") || strstr(lpszCmdLine, "-v")) {
+	for (i = 1; i < __argc; i++) {
+		if (strstr(__argv[i], "-d") || strstr(__argv[i], "--debug"))
+			debug = TRUE;
+		else if (strstr(__argv[i], "-h") || strstr(__argv[i], "--help"))
+			help = TRUE;
+		else if (strstr(__argv[i], "-v") || strstr(__argv[i], "--version"))
+			version = TRUE;
+		else if (strstr(__argv[i], "-m") || strstr(__argv[i], "--multiple"))
+			multiple = TRUE;
+	}
+
+	if (debug || help || version) {
 		/* If stdout hasn't been redirected to a file, alloc a console
 		 *  (_istty() doesn't work for stuff using the GUI subsystem) */
 		if (_fileno(stdout) == -1 || _fileno(stdout) == -2) {
@@ -710,8 +723,8 @@
 	winpidgin_add_stuff_to_path();
 
 	/* If help, version or multiple flag used, do not check Mutex */
-	if (!strstr(lpszCmdLine, "-h") && !strstr(lpszCmdLine, "-v"))
-		if (!winpidgin_set_running(getenv("PIDGIN_MULTI_INST") == NULL && strstr(lpszCmdLine, "-m") == NULL))
+	if (!help && !version)
+		if (!winpidgin_set_running(getenv("PIDGIN_MULTI_INST") == NULL && !multiple))
 			return 0;
 
 	/* Now we are ready for Pidgin .. */
--- a/po/hu.po	Mon Nov 17 21:07:43 2008 +0000
+++ b/po/hu.po	Tue Nov 25 17:02:37 2008 +0000
@@ -9,8 +9,8 @@
 msgstr ""
 "Project-Id-Version: pidgin 2.5\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-16 00:55-0700\n"
-"PO-Revision-Date: 2008-10-02 18:55+0200\n"
+"POT-Creation-Date: 2008-11-23 21:15+0100\n"
+"PO-Revision-Date: 2008-11-23 21:16+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <gnome@fsf.hu>\n"
 "MIME-Version: 1.0\n"
@@ -73,7 +73,6 @@
 msgid "Remember password"
 msgstr "Eml辿kezzen a jelsz坦ra"
 
-#, fuzzy
 msgid "There are no protocol plugins installed."
 msgstr "Nincsenek protokollb�v鱈tm辿nyek telep鱈tve."
 
@@ -146,8 +145,7 @@
 
 #, c-format
 msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s"
-msgstr ""
-"%s%s%s%s felhaszn叩l坦 szeretn辿 %s partnert felvenni a partnerlist叩j叩ra%s%s"
+msgstr "%s%s%s%s felhaszn叩l坦 szeretn辿 %s partnert felvenni a partnerlist叩j叩ra%s%s"
 
 msgid "Authorize buddy?"
 msgstr "Enged辿lyezi a partnert?"
@@ -242,9 +240,6 @@
 msgid "You must give a name for the group to add."
 msgstr "Meg kell adnia a felvenni k鱈v叩nt csoport nev辿t."
 
-msgid "A group with the name already exists."
-msgstr "Ilyen�nev撤 csoport m叩r l辿tezik."
-
 msgid "Add Group"
 msgstr "Csoport felv辿tele"
 
@@ -275,15 +270,14 @@
 msgid "Add Buddy Pounce"
 msgstr "Partnerfigyelmeztet辿s felv辿tele"
 
-#. if (q_bud && is_online(q_bud->status)) {
 msgid "Send File"
 msgstr "F叩jl k端ld辿se"
 
 msgid "Blocked"
 msgstr "Tiltott"
 
-msgid "View Log"
-msgstr "Napl坦 megtekint辿se"
+msgid "Show when offline"
+msgstr "Megjelen鱈t辿s, ha el辿rhet�"
 
 #, c-format
 msgid "Please enter the new name for %s"
@@ -302,8 +296,7 @@
 msgstr "A kapcsolat elt叩vol鱈t叩sa a kapcsolat partnereit is elt叩vol鱈tja"
 
 msgid "Removing this group will also remove all the buddies in the group"
-msgstr ""
-"A csoport elt叩vol鱈t叩sa a csoportban tal叩lhat坦 partnereket is elt叩vol鱈tja"
+msgstr "A csoport elt叩vol鱈t叩sa a csoportban tal叩lhat坦 partnereket is elt叩vol鱈tja"
 
 #, c-format
 msgid "Are you sure you want to remove %s?"
@@ -326,6 +319,9 @@
 msgid "Toggle Tag"
 msgstr "C鱈mke 叩tv叩lt叩sa"
 
+msgid "View Log"
+msgstr "Napl坦 megtekint辿se"
+
 #. General
 msgid "Nickname"
 msgstr "Becen辿v"
@@ -373,8 +369,7 @@
 msgstr "�j azonnali 端zenet"
 
 msgid "Please enter the username or alias of the person you would like to IM."
-msgstr ""
-"Adja meg azon szem辿ly felhaszn叩l坦nev辿t vagy 叩lnev辿t, akinek 端zenni szeretne."
+msgstr "Adja meg azon szem辿ly felhaszn叩l坦nev辿t vagy 叩lnev辿t, akinek 端zenni szeretne."
 
 msgid "Channel"
 msgstr "Csatorna"
@@ -600,13 +595,10 @@
 msgstr "Elhagyta ezt a cseveg辿st."
 
 msgid "Logging started. Future messages in this conversation will be logged."
-msgstr ""
-"A napl坦z叩s elkezd�d旦tt. A t叩rsalg叩s j旦v�beli 端zenetei napl坦zva lesznek."
-
-msgid ""
-"Logging stopped. Future messages in this conversation will not be logged."
-msgstr ""
-"A napl坦z叩s befejez�d旦tt. A t叩rsalg叩s j旦v�beli 端zenetei nem lesznek napl坦zva."
+msgstr "A napl坦z叩s elkezd�d旦tt. A t叩rsalg叩s j旦v�beli 端zenetei napl坦zva lesznek."
+
+msgid "Logging stopped. Future messages in this conversation will not be logged."
+msgstr "A napl坦z叩s befejez�d旦tt. A t叩rsalg叩s j旦v�beli 端zenetei nem lesznek napl坦zva."
 
 msgid "Send To"
 msgstr "K端ld辿s ennek"
@@ -678,8 +670,7 @@
 
 #, c-format
 msgid "%s is not a valid color. See '/help msgcolor' for valid colors."
-msgstr ""
-"%s nem 辿rv辿nyes sz鱈n. Az 辿rv辿nyes sz鱈nek辿rt l叩sd a ��help msgcolor�� kimenet辿t."
+msgstr "%s nem 辿rv辿nyes sz鱈n. Az 辿rv辿nyes sz鱈nek辿rt l叩sd a ��help msgcolor�� kimenet辿t."
 
 msgid ""
 "say &lt;message&gt;:  Send a message normally as if you weren't using a "
@@ -852,8 +843,7 @@
 "Az azonnali 端zenetek csak akkor lesznek napl坦zva, ha az ���sszes azonnali "
 "端zenet napl坦z叩sa�� tulajdons叩g be van 叩ll鱈tva."
 
-msgid ""
-"Chats will only be logged if the \"Log all chats\" preference is enabled."
+msgid "Chats will only be logged if the \"Log all chats\" preference is enabled."
 msgstr ""
 "A cseveg辿sek csak akkor lesznek napl坦zva, ha az ���sszes cseveg辿s napl坦z叩sa�� "
 "tulajdons叩g be van 叩ll鱈tva."
@@ -959,8 +949,7 @@
 msgid "The selected file is not a valid plugin."
 msgstr "A kiv叩lasztott f叩jl nem egy 辿rv辿nyes b�v鱈tm辿ny."
 
-msgid ""
-"Please open the debug window and try again to see the exact error message."
+msgid "Please open the debug window and try again to see the exact error message."
 msgstr ""
 "Nyissa meg a hibakeres� ablakot 辿s pr坦b叩lkozzon 炭jra a pontos hiba端zenet "
 "megjelen鱈t辿s辿hez."
@@ -1332,7 +1321,7 @@
 #. PurpleStatusPrimitive
 #. id - use default
 #. name - use default
-#. savable
+#. saveable
 #. user_settable
 #. not independent
 #. Attributes - each status can have a message.
@@ -1393,8 +1382,7 @@
 msgstr "Az ablak nem tal叩lhat坦"
 
 msgid "This plugin cannot be loaded because it was not built with X11 support."
-msgstr ""
-"A b�v鱈tm辿ny nem t旦lthet� be, mivel X11 t叩mogat叩s n辿lk端l ker端lt leford鱈t叩sra."
+msgstr "A b�v鱈tm辿ny nem t旦lthet� be, mivel X11 t叩mogat叩s n辿lk端l ker端lt leford鱈t叩sra."
 
 msgid "GntClipboard"
 msgstr "GntClipboard"
@@ -1675,8 +1663,7 @@
 "ellen�rizhet�."
 
 #. vrq will be completed by user_auth
-msgid ""
-"The root certificate this one claims to be issued by is unknown to Pidgin."
+msgid "The root certificate this one claims to be issued by is unknown to Pidgin."
 msgstr "A tan炭s鱈tv叩nyt kiad坦 gy旦k辿rtan炭s鱈tv叩nyt a Pidgin nem ismeri."
 
 #, c-format
@@ -2087,8 +2074,7 @@
 msgstr "A megadott parancs kezelje-e az ��ymsgr�� URL c鱈meket"
 
 msgid "<b><font color=\"red\">The logger has no read function</font></b>"
-msgstr ""
-"<b><font color=\"red\">A napl坦z坦nak nincsen olvas叩s funkci坦ja</font></b>"
+msgstr "<b><font color=\"red\">A napl坦z坦nak nincsen olvas叩s funkci坦ja</font></b>"
 
 msgid "HTML"
 msgstr "HTML"
@@ -2148,8 +2134,7 @@
 msgid "ABI version mismatch %d.%d.x (need %d.%d.x)"
 msgstr "Az ABI verzi坦ja nem egyezik: %d.%d.x (sz端ks辿ges: %d.%d.x)"
 
-msgid ""
-"Plugin does not implement all required functions (list_icon, login and close)"
+msgid "Plugin does not implement all required functions (list_icon, login and close)"
 msgstr ""
 "A b�v鱈tm辿ny nem val坦s鱈tja meg az 旦sszes k鱈v叩nt f端ggv辿nyt (list_icon, login "
 "辿s close)"
@@ -2158,8 +2143,7 @@
 msgid ""
 "The required plugin %s was not found. Please install this plugin and try "
 "again."
-msgstr ""
-"A sz端ks辿ges %s b�v鱈tm辿ny nem tal叩lhat坦. K辿rem telep鱈tse, majd pr坦b叩lja 炭jra."
+msgstr "A sz端ks辿ges %s b�v鱈tm辿ny nem tal叩lhat坦. K辿rem telep鱈tse, majd pr坦b叩lja 炭jra."
 
 msgid "Unable to load the plugin"
 msgstr "A b�v鱈tm辿ny nem t旦lthet� be"
@@ -2224,8 +2208,7 @@
 "(Teljes el辿r辿si utat adjon meg)"
 
 msgid "Automatically reject from users not in buddy list"
-msgstr ""
-"Automatikus visszautas鱈t叩s a partnerlist叩n nem szerepl� felhaszn叩l坦kt坦l"
+msgstr "Automatikus visszautas鱈t叩s a partnerlist叩n nem szerepl� felhaszn叩l坦kt坦l"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2454,8 +2437,7 @@
 msgid ""
 "You are currently disconnected. Messages will not be received unless you are "
 "logged in."
-msgstr ""
-"Jelenleg nincs csatlakozva. Nem fogadhat 端zeneteket, am鱈g nem jelentkezik be."
+msgstr "Jelenleg nincs csatlakozva. Nem fogadhat 端zeneteket, am鱈g nem jelentkezik be."
 
 msgid "Message could not be sent because the maximum length was exceeded."
 msgstr "Az 端zenet nem k端ldhet� el, mivel a maxim叩lis hossz el lett 辿rve."
@@ -2829,10 +2811,8 @@
 msgid "Unable to listen for incoming IM connections\n"
 msgstr "Nem lehets辿ges a bej旦v� azonnali 端zen� kapcsolatokat figyelni\n"
 
-msgid ""
-"Unable to establish connection with the local mDNS server.  Is it running?"
-msgstr ""
-"Nem hozhat坦 l辿tre kapcsolat a helyi mDNS kiszolg叩l坦val. Egy叩ltal叩n fut?"
+msgid "Unable to establish connection with the local mDNS server.  Is it running?"
+msgstr "Nem hozhat坦 l辿tre kapcsolat a helyi mDNS kiszolg叩l坦val. Egy叩ltal叩n fut?"
 
 #. Creating the options for the protocol
 msgid "First name"
@@ -3499,8 +3479,7 @@
 msgstr "nickserv: parancs k端ld辿se a nickserv kiszolg叩l坦nak"
 
 msgid "notice &lt;target&lt;:  Send a notice to a user or channel."
-msgstr ""
-"notice &lt;c辿l&lt;:  �rtes鱈t辿s k端ld辿se egy felhaszn叩l坦nak vagy csatorn叩nak."
+msgstr "notice &lt;c辿l&lt;:  �rtes鱈t辿s k端ld辿se egy felhaszn叩l坦nak vagy csatorn叩nak."
 
 msgid ""
 "op &lt;nick1&gt; [nick2] ...:  Grant channel operator status to someone. You "
@@ -3584,8 +3563,7 @@
 "tudja."
 
 msgid "whois [server] &lt;nick&gt;:  Get information on a user."
-msgstr ""
-"whois [kiszolg叩l坦] &lt;becen辿v&gt;:  Inform叩ci坦k lek辿r辿se egy felhaszn叩l坦r坦l."
+msgstr "whois [kiszolg叩l坦] &lt;becen辿v&gt;:  Inform叩ci坦k lek辿r辿se egy felhaszn叩l坦r坦l."
 
 msgid "whowas &lt;nick&gt;: Get information on a user that has logged off."
 msgstr ""
@@ -3623,8 +3601,7 @@
 msgstr "Titkos鱈t叩st k辿r, de a TLS/SSL t叩mogat叩sa nem tal叩lhat坦."
 
 msgid "Server requires plaintext authentication over an unencrypted stream"
-msgstr ""
-"A kiszolg叩l坦 sz旦veges hiteles鱈t辿st k旦vetel meg egy nem titkos鱈tott csatorn叩n"
+msgstr "A kiszolg叩l坦 sz旦veges hiteles鱈t辿st k旦vetel meg egy nem titkos鱈tott csatorn叩n"
 
 #, c-format
 msgid ""
@@ -3957,8 +3934,7 @@
 msgstr "Kiszolg叩l坦utas鱈t叩sok: %s"
 
 msgid "Fill in one or more fields to search for any matching XMPP users."
-msgstr ""
-"T旦lts旦n ki legal叩bb egy mez�t a megfelel� XMPP felhaszn叩l坦k keres辿s辿hez."
+msgstr "T旦lts旦n ki legal叩bb egy mez�t a megfelel� XMPP felhaszn叩l坦k keres辿s辿hez."
 
 msgid "Email Address"
 msgstr "E-mail c鱈m"
@@ -4116,8 +4092,7 @@
 msgid "Unregister"
 msgstr "Regisztr叩ci坦 megsz端ntet辿se"
 
-msgid ""
-"Please fill out the information below to change your account registration."
+msgid "Please fill out the information below to change your account registration."
 msgstr "Adja meg a k旦vetkez� inform叩ci坦kat a regisztr叩lt fi坦k m坦dos鱈t叩s叩hoz."
 
 msgid "Please fill out the information below to register your new account."
@@ -4491,8 +4466,7 @@
 msgid "kick &lt;user&gt; [reason]:  Kick a user from the room."
 msgstr "kick &lt;felhaszn叩l坦&gt; [ok]:  Felhaszn叩l坦 kir炭g叩sa a szob叩b坦l."
 
-msgid ""
-"msg &lt;user&gt; &lt;message&gt;:  Send a private message to another user."
+msgid "msg &lt;user&gt; &lt;message&gt;:  Send a private message to another user."
 msgstr ""
 "msg &lt;felhaszn叩l坦&gt; &lt;端zenet&gt;:  Mag叩n端zenet k端ld辿se m叩sik "
 "felhaszn叩l坦nak."
@@ -4543,7 +4517,6 @@
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
-#, fuzzy
 msgid "Show Custom Smileys"
 msgstr "Egy辿ni hangulatjelek megjelen鱈t辿se"
 
@@ -4915,13 +4888,11 @@
 msgid "MSN Error: %s\n"
 msgstr "MSN hiba: %s\n"
 
-#, fuzzy
 msgid "Other Contacts"
-msgstr "El�nyben r辿szes鱈tett kapcsolat"
-
-#, fuzzy
+msgstr "Egy辿b partnerek"
+
 msgid "Non-IM Contacts"
-msgstr "Kapcsolat elt叩vol鱈t叩sa"
+msgstr "Nem azonnali 端zenetv叩lt叩si partnerek"
 
 msgid "Nudge"
 msgstr "B旦k辿s"
@@ -4979,8 +4950,7 @@
 msgstr "Nincs tiltott sz旦veg ehhez a fi坦khoz."
 
 #, c-format
-msgid ""
-"MSN servers are currently blocking the following regular expressions:<br/>%s"
+msgid "MSN servers are currently blocking the following regular expressions:<br/>%s"
 msgstr ""
 "Az MSN kiszolg叩l坦k jelenleg a k旦vetkez� regul叩ris kifejez辿seket tiltj叩k:<br/>"
 "%s"
@@ -5021,7 +4991,7 @@
 #. primitive
 #. ID
 #. name - use default
-#. savable
+#. saveable
 #. should be user_settable some day
 #. independent
 msgid "Artist"
@@ -5234,8 +5204,7 @@
 #. *< id
 #. *< name
 #. *< version
-#. *  summary
-#. *  description
+#. *< summary
 msgid "Windows Live Messenger Protocol Plugin"
 msgstr "Windows Live Messenger protokollb�v鱈tm辿ny"
 
@@ -5272,6 +5241,7 @@
 msgid "%s just sent you a Nudge!"
 msgstr "%s megb旦kte!"
 
+#. char *adl = g_strndup(payload, len);
 #, c-format
 msgid "Unknown error (%d)"
 msgstr "Ismeretlen hiba (%d)"
@@ -5279,9 +5249,8 @@
 msgid "Unable to add user"
 msgstr "Nem vehet� fel a felhaszn叩l坦"
 
-#, fuzzy
 msgid "The following users are missing from your addressbook"
-msgstr "A keres辿s eredm辿nyei a k旦vetkez�k"
+msgstr "A k旦vetkez� felhaszn叩l坦k hi叩nyoznak a c鱈mjegyz辿k辿b�l"
 
 #, c-format
 msgid "Unable to add user on %s (%s)"
@@ -5397,8 +5366,7 @@
 msgid "Unable to authenticate: %s"
 msgstr "Nem siker端lt a hiteles鱈t辿s: %s"
 
-msgid ""
-"Your MSN buddy list is temporarily unavailable. Please wait and try again."
+msgid "Your MSN buddy list is temporarily unavailable. Please wait and try again."
 msgstr ""
 "Az �n MSN partnerlist叩ja 叩tmenetileg nem 辿rhet� el. K辿rem v叩rjon 辿s pr坦b叩lja "
 "炭jra k辿s�bb."
@@ -5431,8 +5399,7 @@
 msgstr "Eb辿delni mentem"
 
 msgid "Message may have not been sent because a timeout occurred:"
-msgstr ""
-"Id�t炭ll辿p辿s k旦vetkezett be, emiatt az 端zenet lehet, hogy nem lett elk端ldve:"
+msgstr "Id�t炭ll辿p辿s k旦vetkezett be, emiatt az 端zenet lehet, hogy nem lett elk端ldve:"
 
 msgid "Message could not be sent, not allowed while invisible:"
 msgstr "Az 端zenet nem k端ldhet� el, l叩thatatlan m坦dban nem enged辿lyezett:"
@@ -5454,8 +5421,7 @@
 "kiszolg叩l坦val. Ez val坦sz鱈n撤leg kiszolg叩l坦hiba, p叩r perc m炭lva pr坦b叩lkozzon "
 "炭jra:"
 
-msgid ""
-"Message could not be sent because an error with the switchboard occurred:"
+msgid "Message could not be sent because an error with the switchboard occurred:"
 msgstr "Az 端zenet nem k端ldhet� el, mivel hiba l辿pett fel a k旦zvet鱈t辿s k旦zben:"
 
 msgid "Message may have not been sent because an unknown error occurred:"
@@ -5469,13 +5435,11 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "%s elt叩vol鱈totta �nt a partnerlist叩j叩r坦l."
 
-#, fuzzy
 msgid "Delete Buddy from Address Book?"
-msgstr "Hozz叩ad叩s a c鱈mjegyz辿khez"
-
-#, fuzzy
+msgstr "T旦rli a partnert a c鱈mjegyz辿kb�l?"
+
 msgid "Do you want to delete this buddy from your address book as well?"
-msgstr "Fel k鱈v叩nja venni ezt a partnert a list叩j叩ra?"
+msgstr "T旦r旦lni k鱈v叩nja a partnert a c鱈mjegyz辿k辿b�l is?"
 
 #. only notify the user about problems adding to the friends list
 #. * maybe we should do something else for other lists, but it probably
@@ -5953,8 +5917,7 @@
 msgid ""
 "This evaluation version does not allow more than ten users to log in at one "
 "time"
-msgstr ""
-"Ez a pr坦baverzi坦 nem enged辿lyezi t鱈zn辿l t旦bb felhaszn叩l坦 egyidej撤 bel辿p辿s辿t"
+msgstr "Ez a pr坦baverzi坦 nem enged辿lyezi t鱈zn辿l t旦bb felhaszn叩l坦 egyidej撤 bel辿p辿s辿t"
 
 msgid "The user is either offline or you are blocked"
 msgstr "A felhaszn叩l坦 kil辿pett, vagy �n le van tiltva"
@@ -5994,8 +5957,7 @@
 
 #, c-format
 msgid "Unable to send message. Could not create the conference (%s)."
-msgstr ""
-"Az 端zenetet nem lehet elk端ldeni. Nem siker端lt l辿trehozni a konferenci叩t (%s)."
+msgstr "Az 端zenetet nem lehet elk端ldeni. Nem siker端lt l辿trehozni a konferenci叩t (%s)."
 
 #, c-format
 msgid ""
@@ -6035,8 +5997,7 @@
 
 #, c-format
 msgid "Unable to change server side privacy settings (%s)."
-msgstr ""
-"Nem lehet megv叩ltoztatni a kiszolg叩l坦oldali mag叩nszf辿ra-be叩ll鱈t叩sokat (%s)."
+msgstr "Nem lehet megv叩ltoztatni a kiszolg叩l坦oldali mag叩nszf辿ra-be叩ll鱈t叩sokat (%s)."
 
 #, c-format
 msgid "Unable to create conference (%s)."
@@ -6100,12 +6061,10 @@
 msgstr "Szeretne csatlakozni a t叩rsalg叩shoz?"
 
 msgid "You have been logged out because you logged in at another workstation."
-msgstr ""
-"Ki lett jelentkeztetve, mivel bejelentkezett egy m叩sik munka叩llom叩sr坦l."
-
-#, c-format
-msgid ""
-"%s appears to be offline and did not receive the message that you just sent."
+msgstr "Ki lett jelentkeztetve, mivel bejelentkezett egy m叩sik munka叩llom叩sr坦l."
+
+#, c-format
+msgid "%s appears to be offline and did not receive the message that you just sent."
 msgstr "�gy t撤nik, %s kil辿pett, 辿s nem kapta meg az utolj叩ra k端ld旦tt 端zenetet."
 
 msgid ""
@@ -6449,6 +6408,7 @@
 "tartalmazhatnak."
 
 #. Unregistered screen name
+#. uid is not exist
 msgid "Invalid username."
 msgstr "�rv辿nytelen felhaszn叩l坦n辿v."
 
@@ -6556,8 +6516,7 @@
 #. Someone has granted you authorization
 #, c-format
 msgid "The user %u has granted your request to add them to your buddy list."
-msgstr ""
-"%u felhaszn叩l坦 elfogadta a k辿r辿s辿t, 鱈gy felveheti �t a partnerlist叩j叩ra."
+msgstr "%u felhaszn叩l坦 elfogadta a k辿r辿s辿t, 鱈gy felveheti �t a partnerlist叩j叩ra."
 
 #, c-format
 msgid ""
@@ -6611,27 +6570,21 @@
 #, c-format
 msgid "You missed %hu message from %s because it was invalid."
 msgid_plural "You missed %hu messages from %s because they were invalid."
-msgstr[0] ""
-"Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az 辿rv辿nytelen volt."
-msgstr[1] ""
-"Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az 辿rv辿nytelen volt."
+msgstr[0] "Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az 辿rv辿nytelen volt."
+msgstr[1] "Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az 辿rv辿nytelen volt."
 
 #, c-format
 msgid "You missed %hu message from %s because it was too large."
 msgid_plural "You missed %hu messages from %s because they were too large."
-msgstr[0] ""
-"Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az t炭l nagy volt."
-msgstr[1] ""
-"Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az t炭l nagy volt."
+msgstr[0] "Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az t炭l nagy volt."
+msgstr[1] "Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az t炭l nagy volt."
 
 # #: ../src/protocols/oscar/oscar.c:1605
 # #, c-format
 # msgid "You missed %d message from %s because the rate limit has been exceeded."
 #, c-format
-msgid ""
-"You missed %hu message from %s because the rate limit has been exceeded."
-msgid_plural ""
-"You missed %hu messages from %s because the rate limit has been exceeded."
+msgid "You missed %hu message from %s because the rate limit has been exceeded."
+msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded."
 msgstr[0] ""
 "Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert t炭ll辿pte a k端ld辿s "
 "gyakoris叩g叩nak a korl叩tj叩t."
@@ -6640,10 +6593,8 @@
 "gyakoris叩g叩nak a korl叩tj叩t."
 
 #, c-format
-msgid ""
-"You missed %hu message from %s because his/her warning level is too high."
-msgid_plural ""
-"You missed %hu messages from %s because his/her warning level is too high."
+msgid "You missed %hu message from %s because his/her warning level is too high."
+msgid_plural "You missed %hu messages from %s because his/her warning level is too high."
 msgstr[0] ""
 "Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert a felad坦 "
 "figyelmeztet辿si szintje t炭l magas volt."
@@ -6653,8 +6604,7 @@
 
 #, c-format
 msgid "You missed %hu message from %s because your warning level is too high."
-msgid_plural ""
-"You missed %hu messages from %s because your warning level is too high."
+msgid_plural "You missed %hu messages from %s because your warning level is too high."
 msgstr[0] ""
 "Nem kapott meg %hu 端zenetet a k旦vetkez�t�l: %s, mert az �n figyelmeztet辿si "
 "szintje t炭l magas."
@@ -6818,8 +6768,7 @@
 msgid "Account Info"
 msgstr "Fi坦kinform叩ci坦k"
 
-msgid ""
-"Your IM Image was not sent. You must be Direct Connected to send IM Images."
+msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images."
 msgstr ""
 "Az �n IM k辿pe nem lett elk端ldve. IM k辿pek k端ld辿s辿hez k旦zvetlen kapcsolatban "
 "kell lennie."
@@ -6843,10 +6792,8 @@
 msgid_plural ""
 "The maximum profile length of %d bytes has been exceeded.  It has been "
 "truncated for you."
-msgstr[0] ""
-"A profil m辿rete t炭ll辿pte a maxim叩lis %d b叩jtot. Ez csonk鱈t叩sra ker端lt."
-msgstr[1] ""
-"A profil m辿rete t炭ll辿pte a maxim叩lis %d b叩jtot. Ez csonk鱈t叩sra ker端lt."
+msgstr[0] "A profil m辿rete t炭ll辿pte a maxim叩lis %d b叩jtot. Ez csonk鱈t叩sra ker端lt."
+msgstr[1] "A profil m辿rete t炭ll辿pte a maxim叩lis %d b叩jtot. Ez csonk鱈t叩sra ker端lt."
 
 msgid "Profile too long."
 msgstr "A profil t炭l hossz炭."
@@ -6879,10 +6826,10 @@
 "kezd�dni端k, 辿s bet撤ket, sz叩mokat 辿s sz坦k旦z旦ket, vagy csak sz叩mokb坦l "
 "叩llhatnak."
 
-msgid "Unable To Add"
+msgid "Unable to Add"
 msgstr "Nem siker端lt felvenni"
 
-msgid "Unable To Retrieve Buddy List"
+msgid "Unable to Retrieve Buddy List"
 msgstr "Nem lehet lek辿rni a partnerek list叩j叩t"
 
 msgid ""
@@ -6948,8 +6895,7 @@
 msgstr "_V叩lt叩s:"
 
 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats."
-msgstr ""
-"Az �n IM k辿pe nem lett elk端ldve. Nem k端ldhet IM k辿peket AIM cseveg辿sekbe."
+msgstr "Az �n IM k辿pe nem lett elk端ldve. Nem k端ldhet IM k辿peket AIM cseveg辿sekbe."
 
 msgid "iTunes Music Store Link"
 msgstr "iTunes zenebolt hivatkoz叩s"
@@ -7081,8 +7027,7 @@
 
 #, c-format
 msgid "Asking %s to connect to us at %s:%hu for Direct IM."
-msgstr ""
-"%s felk辿r辿se, hogy kapcsol坦djon hozz叩nk ezen: %s:%hu k旦zvetlen kapcsolattal."
+msgstr "%s felk辿r辿se, hogy kapcsol坦djon hozz叩nk ezen: %s:%hu k旦zvetlen kapcsolattal."
 
 #, c-format
 msgid "Attempting to connect to %s:%hu."
@@ -7105,42 +7050,6 @@
 "k辿pekhez. Ezzel l叩that坦v叩 v叩lik az IP c鱈me, ami vesz辿lyeztetheti a "
 "mag叩nszf辿r叩ja biztons叩g叩t."
 
-msgid "Primary Information"
-msgstr "Els�dleges inform叩ci坦k"
-
-msgid "Personal Introduction"
-msgstr "Szem辿lyes bemutatkoz叩s"
-
-msgid "QQ Number"
-msgstr "QQ sz叩m"
-
-msgid "Country/Region"
-msgstr "Orsz叩g/ter端let"
-
-msgid "Province/State"
-msgstr "Megye/叩llam"
-
-msgid "Horoscope Symbol"
-msgstr "Horoszk坦p szimb坦lum"
-
-msgid "Zodiac Sign"
-msgstr "Zodi叩kus jel"
-
-msgid "Blood Type"
-msgstr "V辿rcsoport"
-
-msgid "College"
-msgstr "F�iskola"
-
-msgid "Zipcode"
-msgstr "Ir叩ny鱈t坦sz叩m"
-
-msgid "Cellphone Number"
-msgstr "Mobil telefonsz叩m"
-
-msgid "Phone Number"
-msgstr "Telefonsz叩m"
-
 msgid "Aquarius"
 msgstr "V鱈z旦nt�"
 
@@ -7216,186 +7125,228 @@
 msgid "Other"
 msgstr "Egy辿b"
 
-#, fuzzy
-msgid "Modify information"
+msgid "Visible"
+msgstr "L叩that坦"
+
+msgid "Firend Only"
+msgstr "Csak bar叩t"
+
+msgid "Private"
+msgstr "Mag叩njelleg撤"
+
+msgid "QQ Number"
+msgstr "QQ sz叩m"
+
+msgid "Country/Region"
+msgstr "Orsz叩g/ter端let"
+
+msgid "Province/State"
+msgstr "Megye/叩llam"
+
+msgid "Zipcode"
+msgstr "Ir叩ny鱈t坦sz叩m"
+
+msgid "Phone Number"
+msgstr "Telefonsz叩m"
+
+msgid "Authorize adding"
+msgstr "Felv辿tel enged辿lyez辿se"
+
+msgid "Cellphone Number"
+msgstr "Mobil telefonsz叩m"
+
+msgid "Personal Introduction"
+msgstr "Szem辿lyes bemutatkoz叩s"
+
+msgid "City/Area"
+msgstr "V叩ros/ter端let"
+
+msgid "Publish Mobile"
+msgstr "Mobil k旦zz辿t辿tele"
+
+msgid "Publish Contact"
+msgstr "Kapcsolat k旦zz辿t辿tele"
+
+msgid "College"
+msgstr "F�iskola"
+
+msgid "Horoscope"
+msgstr "Horoszk坦p"
+
+msgid "Zodiac"
+msgstr "Zodi叩kus"
+
+msgid "Blood"
+msgstr "V辿rcsoport"
+
+msgid "True"
+msgstr "Igaz"
+
+msgid "False"
+msgstr "Hamis"
+
+msgid "Modify Contact"
+msgstr "Partner m坦dos鱈t叩sa"
+
+msgid "Modify Address"
+msgstr "C鱈m m坦dos鱈t叩sa"
+
+msgid "Modify Extended Information"
+msgstr "B�v鱈tett inform叩ci坦k m坦dos鱈t叩sa"
+
+msgid "Modify Information"
 msgstr "Inform叩ci坦k m坦dos鱈t叩sa"
 
-#, fuzzy
-msgid "Update information"
-msgstr "Inform叩ci坦k friss鱈t辿se"
-
-#. TODO: We don't really need to notify the user about this, do we?
-#. TODO: Does the user really need to be notified about this?
-msgid "QQ Buddy"
-msgstr "QQ partner"
-
-msgid "Successed:"
-msgstr "Sikeres:"
-
-msgid "Change buddy information."
-msgstr "Partnerinform叩ci坦k m坦dos鱈t叩sa."
-
-#, c-format
-msgid ""
-"Setting custom faces is not currently supported. Please choose an image from "
-"%s."
-msgstr ""
-"Az egy辿ni arck辿pek be叩ll鱈t叩sa jelenleg nem t叩mogatott. V叩lasszon egy k辿pet "
-"innen: %s."
-
-msgid "Invalid QQ Face"
-msgstr "�rv辿nytelen QQ arck辿p"
-
-#, c-format
-msgid "You rejected %d's request"
-msgstr "Visszautas鱈totta %d k辿r辿s辿t"
-
-msgid "Reject request"
-msgstr "K辿r辿s visszautas鱈t叩sa"
-
-#. title
-#, fuzzy
-msgid "Sorry, you are not my style..."
+msgid "Update"
+msgstr "Friss鱈t辿s"
+
+msgid "Could not change buddy information."
+msgstr "A partnerinform叩ci坦k nem m坦dos鱈that坦k."
+
+#, c-format
+msgid "%d needs Q&A"
+msgstr "%d Q&A-t ig辿nyel"
+
+msgid "Add buddy Q&A"
+msgstr "Partner Q&A hozz叩ad叩sa"
+
+msgid "Input answer here"
+msgstr "�rja be ide a v叩lasz叩t"
+
+msgid "Send"
+msgstr "K端ld辿s"
+
+msgid "Invalid answer."
+msgstr "�rv辿nytelen v叩lasz."
+
+msgid "Authorization denied message:"
+msgstr "Hozz叩f辿r辿s elutas鱈tva 端zenet:"
+
+msgid "Sorry, You are not my style."
 msgstr "Bocs, nem vagy az esetem��"
 
-msgid "Add buddy with auth request failed"
-msgstr "A partner felv辿tele felhatalmaz叩si k辿r辿ssel meghi炭sult"
-
-msgid "Failed:"
-msgstr "Sikertelen:"
-
-msgid "Remove buddy"
-msgstr "Partner t旦rl辿se"
-
-msgid "Remove from other's buddy list"
-msgstr "Elt叩vol鱈t叩s m叩sok partnerlist叩j叩r坦l"
-
-#, fuzzy, c-format
+#, c-format
 msgid "%d needs authentication"
 msgstr "A(z) %d felhaszn叩l坦 felhatalmaz叩st k辿r"
 
+msgid "Add buddy authorize"
+msgstr "Partnerenged辿lyez辿s felv辿tele"
+
 msgid "Input request here"
 msgstr "�rja be ide k辿r辿s辿t"
 
-#. TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands
 msgid "Would you be my friend?"
 msgstr "Lesz端nk bar叩tok?"
 
-#. multiline
-#. masked
-#. hint
-msgid "Send"
-msgstr "K端ld辿s"
-
-#, c-format
-msgid "Add into %d's buddy list"
-msgstr "Hozz叩ad叩s %d partnerlist叩j叩hoz"
-
-msgid "QQ Number Error"
-msgstr "QQ sz叩mhiba"
+msgid "QQ Buddy"
+msgstr "QQ partner"
+
+msgid "Add buddy"
+msgstr "Partner hozz叩ad叩sa"
 
 msgid "Invalid QQ Number"
 msgstr "�rv辿nytelen QQ sz叩m"
 
+msgid "Failed sending authorize"
+msgstr "Az enged辿ly k端ld辿se meghi炭sult"
+
+#, c-format
+msgid "Failed removing buddy %d"
+msgstr "A partner (%d) elt叩vol鱈t叩sa meghi炭sult"
+
+#, c-format
+msgid "Failed removing me from %d's buddy list"
+msgstr "Az elt叩vol鱈t叩som %d partnerlist叩j叩r坦l meghi炭sult"
+
+msgid "No reason given"
+msgstr "Nincs ok megadva"
+
+#. only need to get value
+#, c-format
+msgid "You have been added by %s"
+msgstr "%s felvette"
+
+msgid "Would you like to add him?"
+msgstr "Szeretn辿 felvenni?"
+
+#, c-format
+msgid "Rejected by %s"
+msgstr "%s visszautas鱈totta"
+
+#, c-format
+msgid "Message: %s"
+msgstr "�zenet: %s"
+
 msgid "ID: "
 msgstr "Azonos鱈t坦: "
 
 msgid "Group ID"
 msgstr "Csoportazonos鱈t坦"
 
-msgid "Creator"
-msgstr "L辿trehoz坦"
-
-msgid "Group Description"
-msgstr "Csoportle鱈r叩s"
-
-msgid "Auth"
-msgstr "Enged辿lyez辿s"
-
 msgid "QQ Qun"
 msgstr "QQ Qun"
 
 msgid "Please enter Qun number"
 msgstr "Adja meg a Qun sz叩mot"
 
-#, fuzzy
 msgid "You can only search for permanent Qun\n"
 msgstr "Csak 叩lland坦 Qun-t kereshet\n"
 
-#, fuzzy, c-format
-msgid "%d request to join Qun %d"
-msgstr "A(z) %d felhaszn叩l坦 csatlakozni szeretne a(z) %d Qun-hoz"
-
-#, c-format
-msgid "Message: %s"
-msgstr "�zenet: %s"
+msgid "Not member"
+msgstr "Nem tag"
+
+msgid "Member"
+msgstr "Tag"
+
+msgid "Requesting"
+msgstr "K辿r辿s"
+
+msgid "Admin"
+msgstr "Rendszergazda"
+
+msgid "Notice"
+msgstr "Megjegyz辿s"
+
+msgid "Detail"
+msgstr "R辿szletek"
+
+msgid "Creator"
+msgstr "L辿trehoz坦"
+
+msgid "About me"
+msgstr "A n辿vjegyem"
+
+msgid "Category"
+msgstr "Kateg坦ria"
+
+msgid "The Qun does not allow others to join"
+msgstr "Ez a Qun nem enged辿lyezi m叩sok csatlakoz叩s叩t"
+
+msgid "Join QQ Qun"
+msgstr "Csatlakoz叩s QQ Qun-hoz"
+
+#, c-format
+msgid "Successfully joined Qun %s (%d)"
+msgstr "Sikeresen csatlakozott a(z) %s Qun-hoz (%d)"
+
+msgid "Successfully joined Qun"
+msgstr "Sikeresen csatlakozott a Qun-hoz"
+
+#, c-format
+msgid "Qun %d denied to join"
+msgstr "A Qun (%d) megtagadta a csatlakoz叩st"
 
 msgid "QQ Qun Operation"
 msgstr "QQ Qun m撤velet"
 
-msgid "Approve"
-msgstr "J坦v叩hagy叩s"
-
-#, fuzzy, c-format
-msgid "Failed to join Qun %d, operated by admin %d"
-msgstr "Partner csatlakoztat叩sa a cseveg辿shez sikertelen"
-
-#, fuzzy, c-format
-msgid "Successed to join Qun %d, operated by admin %d"
-msgstr "Partner csatlakoztat叩sa a cseveg辿shez sikertelen"
-
-#, fuzzy, c-format
-msgid "[%d] removed from Qun \"%d\""
-msgstr "�n [%d] kil辿pett a k旦vetkez� csoportb坦l: ��%d��"
-
-#, fuzzy
-msgid "Notice:"
-msgstr "Megjegyz辿s"
-
-#, fuzzy, c-format
-msgid "[%d] added to Qun \"%d\""
-msgstr "�n [%d] kil辿pett a k旦vetkez� csoportb坦l: ��%d��"
-
-msgid "I am not a member"
-msgstr "Nem vagyok tag"
-
-msgid "I am a member"
-msgstr "Tag vagyok"
-
-#, fuzzy
-msgid "I am requesting"
-msgstr "Hib叩s k辿r辿s"
-
-msgid "I am the admin"
-msgstr "Admin vagyok"
-
-msgid "Unknown status"
-msgstr "Ismeretlen 叩llapot"
-
-#, fuzzy
-msgid "The Qun does not allow others to join"
-msgstr "Ez a csoport nem enged辿lyezi m叩sok csatlakoz叩s叩t"
-
-#, fuzzy
-msgid "Remove from Qun"
-msgstr "Csoport t旦rl辿se"
-
-#, fuzzy
-msgid "Join to Qun"
-msgstr "Csatlakoz叩s cseveg辿shez"
-
-#, c-format
-msgid "Qun %d denied to join"
-msgstr ""
+msgid "Failed:"
+msgstr "Sikertelen:"
 
 msgid "Join Qun, Unknow Reply"
-msgstr ""
-
-msgid "You entered a group ID outside the acceptable range"
-msgstr "Az elfogadhat坦 tartom叩nyon k鱈v端li csoportazonos鱈t坦t adott meg"
-
-msgid "Are you sure you want to leave this Qun?"
-msgstr "Biztos, hogy el k鱈v叩nja hagyni ezt a Qun-t?"
+msgstr "Csatlakoz叩s Qun-hoz, ismeretlen v叩lasz"
+
+msgid "Quit Qun"
+msgstr "Kil辿p辿s a Qun-b坦l"
 
 msgid ""
 "Note, if you are the creator, \n"
@@ -7404,44 +7355,47 @@
 "Ne feledje, ha �n hozta l辿tre,\n"
 "akkor ez a m撤velet t旦rli a Qun-t."
 
-#. we want to see window
-msgid "Do you want to approve the request?"
-msgstr "J坦v叩 k鱈v叩nja hagyni a k辿r辿st?"
-
-#, fuzzy
-msgid "Change Qun member"
-msgstr "Telefonsz叩m"
-
-#, fuzzy
-msgid "Change Qun information"
-msgstr "Csatornainform叩ci坦k"
+msgid "Sorry, you are not our style ..."
+msgstr "Bocs, nem vagy az eset端nk��"
+
+msgid "Successfully changed Qun member"
+msgstr "Sikeresen m坦dos鱈tott egy Qun tagot"
+
+msgid "Successfully changed Qun information"
+msgstr "Sikeresen m坦dos鱈totta a Qun inform叩ci坦kat"
 
 msgid "You have successfully created a Qun"
 msgstr "Sikeresen l辿trehozott egy Qun-t"
 
-#, fuzzy
-msgid "Would you like to set up the detail information now?"
-msgstr "Be k鱈v叩nja 叩ll鱈tani most a Qun r辿szleteit?"
+msgid "Would you like to set detailed information now?"
+msgstr "Be k鱈v叩nja 叩ll鱈tani most a r辿szletes inform叩ci坦kat?"
 
 msgid "Setup"
 msgstr "Be叩ll鱈t叩s"
 
-#, fuzzy, c-format
-msgid ""
-"%s\n"
-"\n"
-"%s"
-msgstr "%s (%s)"
-
-#, fuzzy
-msgid "QQ Server News"
-msgstr "ICQ k旦zvet鱈t� kiszolg叩l坦"
-
-msgid "System Message"
-msgstr "Rendszer端zenet"
-
-msgid "Failed to send IM."
-msgstr "Az azonnali 端zenet k端ld辿se meghi炭sult."
+#, c-format
+msgid "%d requested to join Qun %d for %s"
+msgstr "A(z) %d felhaszn叩l坦 csatlakozni szeretne a(z) %d Qun-hoz, ok: %s"
+
+#, c-format
+msgid "%d request to join Qun %d"
+msgstr "A(z) %d felhaszn叩l坦 csatlakozni szeretne a(z) %d Qun-hoz"
+
+#, c-format
+msgid "Failed to join Qun %d, operated by admin %d"
+msgstr "A csatlakoz叩s sikertelen a(z) %d Qun-hoz, amelyet %d admin m撤k旦dtet"
+
+#, c-format
+msgid "<b>Joining Qun %d is approved by admin %d for %s</b>"
+msgstr "<b>A csatlakoz叩st a Qun-hoz (%d) j坦v叩hagyta %d admin %s sz叩m叩ra</b>"
+
+#, c-format
+msgid "<b>Removed buddy %d.</b>"
+msgstr "<b>%d partner elt叩vol鱈tva.</b>"
+
+#, c-format
+msgid "<b>New buddy %d joined.</b>"
+msgstr "<b>�j partner (%d) csatlakozott.</b>"
 
 #, c-format
 msgid "Unknown-%d"
@@ -7450,9 +7404,6 @@
 msgid "Level"
 msgstr "Szint"
 
-msgid "Member"
-msgstr "Tag"
-
 msgid " VIP"
 msgstr " VIP"
 
@@ -7468,9 +7419,8 @@
 msgid " Video"
 msgstr " Vide坦"
 
-#, fuzzy
 msgid " Zone"
-msgstr "Nincs"
+msgstr " z坦na"
 
 msgid "Flag"
 msgstr "Jelz�"
@@ -7481,77 +7431,104 @@
 msgid "Invalid name"
 msgstr "�rv辿nytelen n辿v"
 
-#, c-format
-msgid "<b>Current Online</b>: %d<br>\n"
-msgstr "<b>Jelenleg el辿rhet�</b>: %d<br>\n"
-
-#, c-format
-msgid "<b>Last Refresh</b>: %s<br>\n"
-msgstr "<b>Utols坦 friss鱈t辿s</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgid "Select icon..."
+msgstr "V叩lasszon ikont��"
+
+#, c-format
+msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n"
+msgstr "<b>Bejelentkez辿s ideje</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
+msgid "<b>Total Online Buddies</b>: %d<br>\n"
+msgstr "<b>El辿rhet� partnerek 旦sszesen</b>: %d<br>\n"
+
+#, c-format
+msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n"
+msgstr "<b>Utols坦 friss鱈t辿s</b>: %d-%d-%d, %d:%d:%d<br><br>\n"
+
+#, c-format
 msgid "<b>Server</b>: %s<br>\n"
-msgstr "<b>Kiszolg叩l坦</b>: %s: %d<br>\n"
+msgstr "<b>Kiszolg叩l坦</b>: %s<br>\n"
+
+#, c-format
+msgid "<b>Client Tag</b>: %s<br>\n"
+msgstr "<b>Kliensc鱈mke</b>: %s<br>\n"
 
 #, c-format
 msgid "<b>Connection Mode</b>: %s<br>\n"
 msgstr "<b>Kapcsolat m坦dja</b>: %s<br>\n"
 
-#, fuzzy, c-format
-msgid "<b>My Internet Address</b>: %s<br>\n"
-msgstr "<b>Kapcsolat m坦dja</b>: %s<br>\n"
-
-#, fuzzy, c-format
+#, c-format
+msgid "<b>My Internet IP</b>: %s:%d<br>\n"
+msgstr "<b>IP-c鱈mem</b>: %s:%d<br>\n"
+
+#, c-format
 msgid "<b>Sent</b>: %lu<br>\n"
-msgstr "<b>Kiszolg叩l坦</b>: %s: %d<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>Elk端ldve</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Resend</b>: %lu<br>\n"
-msgstr "<b>Kiszolg叩l坦</b>: %s: %d<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>�jrak端ld辿s</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Lost</b>: %lu<br>\n"
-msgstr "<b>Utols坦 friss鱈t辿s</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>Elveszett</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Received</b>: %lu<br>\n"
-msgstr "<b>Kiszolg叩l坦</b>: %s: %d<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>Fogadott</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Received Duplicate</b>: %lu<br>\n"
-msgstr "<b>Nyilv叩nos IP c鱈mem</b>: %s<br>\n"
-
-#, c-format
-msgid "<b>Login Time</b>: %s<br>\n"
-msgstr "<b>Bejelentkez辿s ideje</b>: %s<br>\n"
-
-#, c-format
-msgid "<b>Last Login IP</b>: %s<br>\n"
-msgstr "<b>Utols坦 bejelentkez辿si IP</b>: %s<br>\n"
-
-#, c-format
-msgid "<b>Last Login Time</b>: %s\n"
-msgstr "<b>Utols坦 bejelentkez辿s ideje</b>: %s\n"
+msgstr "<b>M叩sodp辿ld叩ny 辿rkezett</b>: %lu<br>\n"
+
+#, c-format
+msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n"
+msgstr "<b>Id�</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
+msgid "<b>IP</b>: %s<br>\n"
+msgstr "<b>IP</b>: %s<br>\n"
 
 msgid "Login Information"
 msgstr "Bejelentkez辿si inform叩ci坦k"
 
-msgid "Set My Information"
-msgstr "Saj叩t inform叩ci坦k be叩ll鱈t叩sa"
+msgid "<p><b>Original Author</b>:<br>\n"
+msgstr "<p><b>Eredeti szerz�</b>:<br>\n"
+
+msgid "<p><b>Code Contributors</b>:<br>\n"
+msgstr "<p><b>K旦zrem撤k旦d�k</b>:<br>\n"
+
+msgid "<p><b>Lovely Patch Writers</b>:<br>\n"
+msgstr "<p><b>Jav鱈t叩sok</b>:<br>\n"
+
+msgid "<p><b>Acknowledgement</b>:<br>\n"
+msgstr "<p><b>K旦sz旦netnyilv叩n鱈t叩s</b>:<br>\n"
+
+msgid "<p><i>And, all the boys in the backroom...</i><br>\n"
+msgstr "<p><i>辿s a h叩tt辿remberek...</i><br>\n"
+
+msgid "<i>Feel free to join us!</i> :)"
+msgstr "<i>csatlakozzon b叩tran</i> :)"
+
+#, c-format
+msgid "About OpenQ r%s"
+msgstr "Az OpenQ r%s n辿vjegye"
+
+msgid "Change Icon"
+msgstr "Ikon m坦dos鱈t叩sa"
 
 msgid "Change Password"
 msgstr "Jelsz坦 m坦dos鱈t叩sa"
 
-#, fuzzy
 msgid "Account Information"
-msgstr "Az azonos鱈t坦 jellemz�i"
-
-#, fuzzy
-msgid "Leave the QQ Qun"
-msgstr "Kil辿p辿s ebb�l a QQ Qun-b�l"
-
-msgid "Block this buddy"
-msgstr "A partner tilt叩sa"
+msgstr "Fi坦kinform叩ci坦k"
+
+msgid "Update all QQ Quns"
+msgstr "Minden QQ Qun friss鱈t辿se"
+
+msgid "About OpenQ"
+msgstr "Az OpenQ n辿vjegye"
 
 #. *< type
 #. *< ui_requirement
@@ -7563,60 +7540,103 @@
 #. *< version
 #. *  summary
 #. *  description
-msgid "QQ Protocol\tPlugin"
-msgstr "QQ protokoll\tb�v鱈tm辿ny"
-
-#, fuzzy
+msgid "QQ Protocol Plugin"
+msgstr "QQ protokollb�v鱈tm辿ny"
+
 msgid "Auto"
 msgstr "Auto"
 
-#, fuzzy
+msgid "Select Server"
+msgstr "V叩lassza ki a kiszolg叩l坦t"
+
+msgid "QQ2005"
+msgstr "QQ2005"
+
+msgid "QQ2007"
+msgstr "QQ2007"
+
+msgid "QQ2008"
+msgstr "QQ2008"
+
+#. #endif
 msgid "Connect by TCP"
 msgstr "Kapcsol坦d叩s TCP seg鱈ts辿g辿vel"
 
-#, fuzzy
 msgid "Show server notice"
-msgstr "Kiszolg叩l坦 portja"
-
-#, fuzzy
+msgstr "Kiszolg叩l坦megjegyz辿s megjelen鱈t辿se"
+
 msgid "Show server news"
-msgstr "Kiszolg叩l坦 c鱈me"
-
-msgid "Keep alive interval(s)"
-msgstr "Kapcsolat-fenntart叩si id�k旦z"
-
-msgid "Update interval(s)"
-msgstr "Friss鱈t辿si id�k旦z"
-
-#, c-format
-msgid "Invalid token reply code, 0x%02X"
-msgstr "�rv辿nytelen jelsorv叩laszk坦d, 0x%02X"
+msgstr "Kiszolg叩l坦h鱈rek megjelen鱈t辿se"
+
+msgid "Keep alive interval (seconds)"
+msgstr "Kapcsolat-fenntart叩si id�k旦z (mp)"
+
+msgid "Update interval (seconds)"
+msgstr "Friss鱈t辿si id�k旦z (mp)"
+
+msgid "Can not decrypt server reply"
+msgstr "Nem fejthet� vissza a kiszolg叩l坦 v叩lasza"
+
+msgid "Can not decrypt get server reply"
+msgstr "Nem fejthet� vissza a kiszolg叩l坦lek辿rdez辿s v叩lasza"
+
+#, c-format
+msgid "Failed requesting token, 0x%02X"
+msgstr "A jelsor lek辿r辿se meghi炭sult: 0x%02X"
 
 #, c-format
 msgid "Invalid token len, %d"
 msgstr "�rv辿nytelen jelsorhossz: %d"
 
-msgid "Unable login for not support Redirect_EX now"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Error password: %s"
-msgstr "Hiba a jelsz坦 m坦dos鱈t叩sakor"
-
-#, c-format
-msgid "Need active: %s"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Unable login for unknow reply code 0x%02X"
-msgstr "�rv辿nytelen jelsorv叩laszk坦d, 0x%02X"
+#. extend redirect used in QQ2006
+msgid "Redirect_EX is not currently supported"
+msgstr "A Redirect_EX jelenleg nem t叩mogatott"
+
+#. need activation
+#. need activation
+#. need activation
+msgid "Activation required"
+msgstr "Aktiv叩l叩s sz端ks辿ges"
+
+#, c-format
+msgid "Unknow reply code when login (0x%02X)"
+msgstr "Ismeretlen v叩laszk坦d bejelentkez辿skor (0x%02X)"
 
 msgid "Keep alive error"
 msgstr "Kapcsolat-fenntart叩si hiba"
 
-#, fuzzy
-msgid "Failed to connect all servers"
-msgstr "Nem siker端lt a kiszolg叩l坦hoz kapcsol坦dni"
+msgid "Requesting captcha ..."
+msgstr "Captcha k辿r辿se��"
+
+msgid "Checking code of captcha ..."
+msgstr "A captcha k坦dj叩nak ellen�rz辿se��"
+
+msgid "Failed captcha verify"
+msgstr "A captcha ellen�rz辿se meghi炭sult"
+
+msgid "Captcha Image"
+msgstr "Captcha k辿p"
+
+msgid "Enter code"
+msgstr "Adja meg a k坦dot"
+
+msgid "QQ Captcha Verifing"
+msgstr "QQ captcha ellen�rz辿s"
+
+msgid "Enter the text from the image"
+msgstr "Adja meg a sz旦veget a k辿pr�l"
+
+#, c-format
+msgid "Unknow reply code when checking password (0x%02X)"
+msgstr "Ismeretlen v叩laszk坦d a jelsz坦 ellen�rz辿sekor (0x%02X)"
+
+#, c-format
+msgid ""
+"Unknow reply code when login (0x%02X):\n"
+"%s"
+msgstr ""
+"Ismeretlen v叩laszk坦d bejelentkez辿skor (0x%02X):\n"
+"%s"
 
 #. we didn't successfully connect. tdt->toc_fd is valid here
 msgid "Unable to connect."
@@ -7642,54 +7662,77 @@
 msgid "Connection lost"
 msgstr "A kapcsolat elveszett"
 
-#. Update the login progress status display
-#, fuzzy, c-format
+msgid "Get server ..."
+msgstr "Kiszolg叩l坦 lek辿rdez辿se��"
+
 msgid "Request token"
-msgstr "K辿r辿s elutas鱈tva"
+msgstr "Jelsor k辿r辿se"
 
 msgid "Couldn't resolve host"
 msgstr "Nem siker端lt a kiszolg叩l坦 felold叩sa"
 
-#, fuzzy
 msgid "Invalid server or port"
-msgstr "�rv辿nytelen hiba"
-
-#, c-format
-msgid "Connecting server %s, retries %d"
-msgstr "Kapcsol坦d叩si a(z) %s kiszolg叩l坦hoz, 炭jrapr坦b叩lkoz叩s: %d"
-
-#, fuzzy
+msgstr "�rv辿nytelen kiszolg叩l坦 vagy port"
+
+msgid "Connecting server ..."
+msgstr "Kapcsol坦d叩s kiszolg叩l坦hoz��"
+
 msgid "QQ Error"
-msgstr "QQid hiba"
-
-#, fuzzy
+msgstr "QQ hiba"
+
+msgid "Failed to send IM."
+msgstr "Az azonnali 端zenet k端ld辿se meghi炭sult."
+
+#, c-format
+msgid ""
+"Server News:\n"
+"%s\n"
+"%s\n"
+"%s"
+msgstr ""
+"Kiszolg叩l坦 h鱈rei:\n"
+"%s\n"
+"%s\n"
+"%s"
+
+#, c-format
+msgid "From %s:"
+msgstr "Felad坦: %s:"
+
+#, c-format
+msgid ""
+"Server notice From %s: \n"
+"%s"
+msgstr ""
+"Kiszolg叩l坦megjegyz辿s ett�l: %s\n"
+"%s"
+
 msgid "Unknow SERVER CMD"
-msgstr "Ismeretlen ok"
-
-#, fuzzy, c-format
+msgstr "Ismeretlen kiszolg叩l坦parancs"
+
+#, c-format
 msgid ""
 "Error reply of %s(0x%02X)\n"
 "Room %d, reply 0x%02X"
 msgstr ""
-"V叩lasz: %s(0x%02X )\n"
-"Elk端ldve: %s(0x%02X )\n"
-"Szobaazonos鱈t坦: %d, v叩lasz: [0x%02X]: \n"
-"%s"
-
-#, fuzzy
+"Hiba %s(0x%02X) v叩lasz叩ban\n"
+"Szoba: %d, v叩lasz: 0x%02X"
+
 msgid "QQ Qun Command"
-msgstr "Parancs"
-
-#, fuzzy, c-format
-msgid "You are not a member of QQ Qun \"%s\"\n"
-msgstr "�n nem tagja a k旦vetkez� csoportnak: ��%s��\n"
+msgstr "QQ Qun parancs"
+
+#, c-format
+msgid "Not a member of room \"%s\"\n"
+msgstr "�n nem tagja a k旦vetkez� szob叩nak: ��%s��\n"
 
 msgid "Can not decrypt login reply"
 msgstr "Nem fejthet� vissza a bejelentkez辿si v叩lasz"
 
-#, fuzzy
-msgid "Unknow reply CMD"
-msgstr "Ismeretlen ok"
+msgid "Unknow LOGIN CMD"
+msgstr "Ismeretlen bejelentkez辿si parancs"
+
+msgid "Unknow CLIENT CMD"
+msgstr "Ismeretlen kliensparancs"
 
 #, c-format
 msgid "%d has declined the file %s"
@@ -7702,63 +7745,6 @@
 msgid "%d canceled the transfer of %s"
 msgstr "%d megszak鱈totta a(z) %s 叩tvitel辿t"
 
-#, fuzzy
-msgid "Do you approve the requestion?"
-msgstr "J坦v叩 k鱈v叩nja hagyni a k辿r辿st?"
-
-#, fuzzy
-msgid "Do you add the buddy?"
-msgstr "Fel k鱈v叩nja venni ezt a partnert?"
-
-#. only need to get value
-#, c-format
-msgid "You have been added by %s"
-msgstr "%s felvette"
-
-msgid "Would you like to add him?"
-msgstr "Szeretn辿 felvenni?"
-
-#, fuzzy, c-format
-msgid "%s added you [%s] to buddy list"
-msgstr "%s felvette �nt a partnerlist叩j叩ra."
-
-#, fuzzy
-msgid "QQ Budy"
-msgstr "Partner"
-
-#, c-format
-msgid "Requestion rejected by %s"
-msgstr ""
-
-#, c-format
-msgid "Requestion approved by %s"
-msgstr ""
-
-#. TODO: this should go through purple_account_request_authorization()
-#, c-format
-msgid "%s wants to add you [%s] as a friend"
-msgstr "%s fel k鱈v叩nja venni �nt [%s] bar叩tk辿nt"
-
-#, fuzzy, c-format
-msgid "%s is not in buddy list"
-msgstr "%s nincs a partnerlist叩j叩n"
-
-#, fuzzy
-msgid "Would you add?"
-msgstr "Szeretn辿 felvenni?"
-
-#, fuzzy, c-format
-msgid "From %s:"
-msgstr "Felad坦 %s:"
-
-#, c-format
-msgid "%s"
-msgstr "%s"
-
-#, fuzzy
-msgid "QQ Server Notice"
-msgstr "Kiszolg叩l坦 portja"
-
 msgid "Connection closed (writing)"
 msgstr "Kapcsolat lez叩rva (鱈r叩s)"
 
@@ -7808,8 +7794,7 @@
 msgstr "Szolg叩ltat叩sok ind鱈t叩sa"
 
 #, c-format
-msgid ""
-"A Sametime administrator has issued the following announcement on server %s"
+msgid "A Sametime administrator has issued the following announcement on server %s"
 msgstr ""
 "Egy Sametime adminisztr叩tor a k旦vetkez� bejelent辿st adta ki a(z) %s "
 "kiszolg叩l坦n"
@@ -8460,8 +8445,7 @@
 msgstr "Titkos csatorna be叩ll鱈t叩sa"
 
 #, c-format
-msgid ""
-"You have to join the %s channel before you are able to join the private group"
+msgid "You have to join the %s channel before you are able to join the private group"
 msgstr ""
 "Miel�tt csatlakozhatna a mag叩ncsoporthoz, csatlakoznia kell a(z) %s "
 "csatorn叩hoz"
@@ -8529,8 +8513,7 @@
 
 #, c-format
 msgid "<I>%s</I> set channel <I>%s</I> modes to: %s"
-msgstr ""
-"<I>%s</I> 叩t叩ll鱈totta a(z) <I>%s</I> csatorna 端zemm坦djait a k旦vetkez�kre: %s"
+msgstr "<I>%s</I> 叩t叩ll鱈totta a(z) <I>%s</I> csatorna 端zemm坦djait a k旦vetkez�kre: %s"
 
 #, c-format
 msgid "<I>%s</I> removed all channel <I>%s</I> modes"
@@ -8713,8 +8696,7 @@
 
 #, c-format
 msgid "Received %s's public key. Would you like to accept this public key?"
-msgstr ""
-"%s nyilv叩nos kulcsa meg辿rkezett. El k鱈v叩nja fogadni ezt a nyilv叩nos kulcsot?"
+msgstr "%s nyilv叩nos kulcsa meg辿rkezett. El k鱈v叩nja fogadni ezt a nyilv叩nos kulcsot?"
 
 #, c-format
 msgid ""
@@ -8746,8 +8728,7 @@
 msgid "Key Exchange failed"
 msgstr "Kulcscsere sikertelen"
 
-msgid ""
-"Resuming detached session failed. Press Reconnect to create new connection."
+msgid "Resuming detached session failed. Press Reconnect to create new connection."
 msgstr ""
 "A lev叩lasztott folyamat folytat叩sa sikertelen. Kattintson az �jrakapcsol坦d叩s "
 "gombra egy 炭j kapcsolat l辿trehoz叩s叩hoz."
@@ -8930,8 +8911,7 @@
 msgstr "whois &lt;becen辿v&gt;:  A becen辿vhez tartoz坦 inform叩ci坦k megjelen鱈t辿se"
 
 msgid "msg &lt;nick&gt; &lt;message&gt;:  Send a private message to a user"
-msgstr ""
-"msg &lt;becen辿v&gt; &lt;message&gt;:  Mag叩n端zenet k端ld辿se a felhaszn叩l坦nak"
+msgstr "msg &lt;becen辿v&gt; &lt;message&gt;:  Mag叩n端zenet k端ld辿se a felhaszn叩l坦nak"
 
 msgid "query &lt;nick&gt; [&lt;message&gt;]:  Send a private message to a user"
 msgstr ""
@@ -9000,12 +8980,10 @@
 "csatorn叩r坦l"
 
 msgid "info [server]:  View server administrative details"
-msgstr ""
-"info [kiszolg叩l坦]:  A kiszolg叩l坦 adminisztr叩ci坦s r辿szleteinek megjelen鱈t辿se"
+msgstr "info [kiszolg叩l坦]:  A kiszolg叩l坦 adminisztr叩ci坦s r辿szleteinek megjelen鱈t辿se"
 
 msgid "ban [&lt;channel&gt; +|-&lt;nick&gt;]:  Ban client from channel"
-msgstr ""
-"ban [&lt;csatorna&gt; +|-&lt;becen辿v&gt;]:  Kliens kitilt叩sa a csatorn叩r坦l"
+msgstr "ban [&lt;csatorna&gt; +|-&lt;becen辿v&gt;]:  Kliens kitilt叩sa a csatorn叩r坦l"
 
 msgid "getkey &lt;nick|server&gt;:  Retrieve client's or server's public key"
 msgstr ""
@@ -9182,8 +9160,7 @@
 
 #, c-format
 msgid "Failure: Remote does not trust/support your public key"
-msgstr ""
-"Hiba: A t叩voli f辿l nem b鱈zik meg vagy nem t叩mogatja az �n nyilv叩nos kulcs叩t"
+msgstr "Hiba: A t叩voli f辿l nem b鱈zik meg vagy nem t叩mogatja az �n nyilv叩nos kulcs叩t"
 
 #, c-format
 msgid "Failure: Remote does not support proposed KE group"
@@ -9314,8 +9291,7 @@
 
 #, c-format
 msgid "A message has been dropped, you are exceeding the server speed limit."
-msgstr ""
-"Egy 端zenet el lett dobva, �n t炭ll辿pte a kiszolg叩l坦 叩tviteli sebess辿ghat叩r叩t."
+msgstr "Egy 端zenet el lett dobva, �n t炭ll辿pte a kiszolg叩l坦 叩tviteli sebess辿ghat叩r叩t."
 
 #, c-format
 msgid "Chat in %s is not available."
@@ -9477,9 +9453,6 @@
 msgid "Yahoo! system message for %s:"
 msgstr "Yahoo! rendszer端zenet %s sz叩m叩ra:"
 
-msgid "Authorization denied message:"
-msgstr "Hozz叩f辿r辿s elutas鱈tva 端zenet:"
-
 #, c-format
 msgid ""
 "%s has (retroactively) denied your request to add them to your list for the "
@@ -9777,8 +9750,7 @@
 
 #, c-format
 msgid "%s declined your conference invitation to room \"%s\" because \"%s\"."
-msgstr ""
-"%s visszal辿pett az �n megh鱈v叩s叩t坦l a(z) ��%s�� konferenciaszob叩ba, mivel: ��%s��."
+msgstr "%s visszal辿pett az �n megh鱈v叩s叩t坦l a(z) ��%s�� konferenciaszob叩ba, mivel: ��%s��."
 
 msgid "Invitation Rejected"
 msgstr "Megh鱈v叩s visszautas鱈tva"
@@ -9895,8 +9867,7 @@
 "sub &lt;oszt叩ly&gt; &lt;p辿ld叩ny&gt; &lt;c鱈mzett&gt;: Csatlakoz叩s 炭j "
 "cseveg辿shez"
 
-msgid ""
-"zi &lt;instance&gt;: Send a message to &lt;message,<i>instance</i>,*&gt;"
+msgid "zi &lt;instance&gt;: Send a message to &lt;message,<i>instance</i>,*&gt;"
 msgstr ""
 "zi &lt;p辿ld叩ny&gt;: �zenet k端ld辿se a k旦vetkez�nek: &lt;端zenet,<i>p辿ld叩ny</i>,"
 "*&gt;"
@@ -10373,9 +10344,9 @@
 "<span size='larger' weight='bold'>Welcome to %s!</span>\n"
 "\n"
 "You have no IM accounts configured. To start connecting with %s press the "
-"<b>Add</b> button below and configure your first account. If you want %s to "
-"connect to multiple IM accounts, press <b>Add</b> again to configure them "
-"all.\n"
+"<b>Add...</b> button below and configure your first account. If you want %s "
+"to connect to multiple IM accounts, press <b>Add...</b> again to configure "
+"them all.\n"
 "\n"
 "You can come back to this window to add, edit, or remove accounts from "
 "<b>Accounts->Manage Accounts</b> in the Buddy List window"
@@ -10385,7 +10356,7 @@
 "Nincsenek be叩ll鱈tva azonnali端zen�-fi坦kjai. A %s haszn叩lat叩nak megkezd辿s辿hez "
 "kattintson az al叩bbi <b>Hozz叩ad叩s</b> gombra 辿s 叩ll鱈tsa be els� fi坦kj叩t. Ha "
 "azt szeretn辿 hogy a %s t旦bb fi坦khoz csatlakozzon, kattintson 炭jra a "
-"<b>Hozz叩ad叩s</b> gombra 辿s 叩ll鱈tsa be mindet.\n"
+"<b>Hozz叩ad叩s��</b> gombra 辿s 叩ll鱈tsa be mindet.\n"
 "\n"
 "A Partnerlista ablak <b>Fi坦kok -> Fi坦kok kezel辿se</b> men端pontja "
 "seg鱈ts辿g辿vel visszat辿rhet ehhez az ablakhoz fi坦kok hozz叩ad叩s叩hoz, "
@@ -10393,8 +10364,7 @@
 
 #, c-format
 msgid "You have %d contact named %s. Would you like to merge them?"
-msgid_plural ""
-"You currently have %d contacts named %s. Would you like to merge them?"
+msgid_plural "You currently have %d contacts named %s. Would you like to merge them?"
 msgstr[0] "Jelenleg %d %s nev撤 partnere van. �ssze k鱈v叩nja vonni ezeket?"
 msgstr[1] "Jelenleg %d %s nev撤 partnere van. �ssze k鱈v叩nja vonni ezeket?"
 
@@ -10450,9 +10420,6 @@
 msgid "Hide when offline"
 msgstr "Elrejt辿s, ha nem 辿rhet� el"
 
-msgid "Show when offline"
-msgstr "Megjelen鱈t辿s, ha el辿rhet�"
-
 msgid "_Alias..."
 msgstr "�l_n辿v��"
 
@@ -10499,8 +10466,7 @@
 msgid "/Tools/Mute Sounds"
 msgstr "/Eszk旦z旦k/Hangok n辿m鱈t叩sa"
 
-msgid ""
-"You are not currently signed on with an account that can add that buddy."
+msgid "You are not currently signed on with an account that can add that buddy."
 msgstr ""
 "Jelenleg nincs bejelentkezve olyan h叩l坦zatra, amelyen felvehetn辿 ezt a "
 "partnert."
@@ -10728,8 +10694,7 @@
 
 #, c-format
 msgid "%d account was disabled because you signed on from another location:"
-msgid_plural ""
-"%d accounts were disabled because you signed on from another location:"
+msgid_plural "%d accounts were disabled because you signed on from another location:"
 msgstr[0] "%d fi坦k letiltva, mivel bejelentkezett egy m叩sik helyr�l:"
 msgstr[1] "%d fi坦k letiltva, mivel bejelentkezett egy m叩sik helyr�l:"
 
@@ -10814,8 +10779,8 @@
 msgid "Auto_join when account becomes online."
 msgstr "Automatikus _csatlakoz叩s a fi坦k el辿rhet�v辿 v叩l叩sakor."
 
-msgid "_Hide chat when the window is closed."
-msgstr "Cse_veg辿s elrejt辿se az ablak bez叩r叩sakor."
+msgid "_Remain in chat after window is closed."
+msgstr "Cseveg辿sben mara_d叩s az ablak bez叩r叩sakor."
 
 msgid "Please enter the name of the group to be added."
 msgstr "Adja meg a felvenni k鱈v叩nt csoport nev辿t."
@@ -10848,18 +10813,13 @@
 msgid "SSL Servers"
 msgstr "SSL kiszolg叩l坦k"
 
-#, fuzzy
-msgid "Network disconnected"
-msgstr "A t叩voli f辿l bontotta a kapcsolatot"
-
 msgid "Unknown command."
 msgstr "Ismeretlen parancs."
 
 msgid "That buddy is not on the same protocol as this chat."
 msgstr "A partner nem ugyanazt a protokollt haszn叩lja, mint ez a cseveg辿s."
 
-msgid ""
-"You are not currently signed on with an account that can invite that buddy."
+msgid "You are not currently signed on with an account that can invite that buddy."
 msgstr ""
 "Jelenleg nincs bejelentkezve olyan fi坦kkal, mellyel megh鱈vhatn叩 ezt a "
 "partnert."
@@ -11193,8 +11153,12 @@
 msgid "Fatal Error"
 msgstr "V辿gzetes hiba"
 
-msgid "developer"
-msgstr "fejleszt�"
+# fixme: jobb 旦tlet?
+msgid "bug master"
+msgstr "hibaritk鱈t坦"
+
+msgid "artist"
+msgstr "grafikus"
 
 #. feel free to not translate this
 msgid "Ka-Hing Cheung"
@@ -11203,11 +11167,8 @@
 msgid "support"
 msgstr "t叩mogat坦"
 
-msgid "support/QA"
-msgstr "t叩mogat坦/QA"
-
-msgid "developer & webmaster"
-msgstr "fejleszt� 辿s webmester"
+msgid "webmaster"
+msgstr "webmester"
 
 msgid "Senior Contributor/QA"
 msgstr "Veter叩n k旦zrem撤k旦d�/QA"
@@ -11225,8 +11186,11 @@
 msgid "hacker and designated driver [lazy bum]"
 msgstr "hacker 辿s kijel旦lt vezet�"
 
-msgid "XMPP developer"
-msgstr "XMPP fejleszt�"
+msgid "support/QA"
+msgstr "t叩mogat坦/QA"
+
+msgid "XMPP"
+msgstr "XMPP"
 
 msgid "original author"
 msgstr "eredeti szerz�"
@@ -11475,8 +11439,7 @@
 
 #, c-format
 msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>"
-msgstr ""
-"<FONT SIZE=\"4\">IRC:</FONT> #pidgin az irc.freenode.net h叩l坦zaton<BR><BR>"
+msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin az irc.freenode.net h叩l坦zaton<BR><BR>"
 
 msgid "Current Developers"
 msgstr "Jelenlegi fejleszt�k"
@@ -11490,9 +11453,6 @@
 msgid "Retired Crazy Patch Writers"
 msgstr "Visszavonult �r端lt patch szerz�k"
 
-msgid "Artists"
-msgstr "Grafikusok"
-
 msgid "Current Translators"
 msgstr "Jelenlegi ford鱈t坦k"
 
@@ -11589,8 +11549,7 @@
 msgstr "_Csoport elt叩vol鱈t叩sa"
 
 #, c-format
-msgid ""
-"You are about to remove %s from your buddy list.  Do you want to continue?"
+msgid "You are about to remove %s from your buddy list.  Do you want to continue?"
 msgstr "%s elt叩vol鱈t叩s叩ra k辿sz端l a partnerlist叩j叩r坦l. Folytatni akarja?"
 
 msgid "Remove Buddy"
@@ -11603,8 +11562,7 @@
 msgid ""
 "You are about to remove the chat %s from your buddy list.  Do you want to "
 "continue?"
-msgstr ""
-"%s cseveg辿s elt叩vol鱈t叩s叩ra k辿sz端l a partnerlist叩j叩r坦l. Folytatni akarja?"
+msgstr "%s cseveg辿s elt叩vol鱈t叩s叩ra k辿sz端l a partnerlist叩j叩r坦l. Folytatni akarja?"
 
 msgid "Remove Chat"
 msgstr "Cseveg辿s elt叩vol鱈t叩sa"
@@ -11736,8 +11694,7 @@
 msgstr "Hiperhivatkoz叩s el�f辿nysz鱈ne"
 
 msgid "Color to draw hyperlinks when mouse is over them."
-msgstr ""
-"Hiperhivatkoz叩sok rajzol叩s叩hoz haszn叩lt sz鱈n, amikor az eg辿r r叩juk mutat."
+msgstr "Hiperhivatkoz叩sok rajzol叩s叩hoz haszn叩lt sz鱈n, amikor az eg辿r r叩juk mutat."
 
 msgid "Sent Message Name Color"
 msgstr "Elk端ld旦tt 端zenet n辿vsz鱈ne"
@@ -11860,8 +11817,7 @@
 msgid ""
 "Please enter the URL and description of the link that you want to insert. "
 "The description is optional."
-msgstr ""
-"Adja meg a besz炭rand坦 hivatkoz叩s URL c鱈m辿t 辿s le鱈r叩s叩t. A le鱈r叩s opcion叩lis."
+msgstr "Adja meg a besz炭rand坦 hivatkoz叩s URL c鱈m辿t 辿s le鱈r叩s叩t. A le鱈r叩s opcion叩lis."
 
 msgid "Please enter the URL of the link that you want to insert."
 msgstr "Adja meg a besz炭rand坦 hivatkoz叩s URL c鱈m辿t."
@@ -12013,8 +11969,7 @@
 msgid ""
 "Are you sure you want to permanently delete the system log which started at %"
 "s?"
-msgstr ""
-"Biztos, hogy t旦r旦lni akarja a(z) %s id�pontban kezd�d旦tt rendszernapl坦t?"
+msgstr "Biztos, hogy t旦r旦lni akarja a(z) %s id�pontban kezd�d旦tt rendszernapl坦t?"
 
 msgid "Delete Log?"
 msgstr "T旦rli a napl坦t?"
@@ -12028,8 +11983,7 @@
 
 #, c-format
 msgid "<span size='larger' weight='bold'>Conversation with %s on %s</span>"
-msgstr ""
-"<span size='larger' weight='bold'>T叩rsalg叩s ezzel: %s, ekkor: %s</span>"
+msgstr "<span size='larger' weight='bold'>T叩rsalg叩s ezzel: %s, ekkor: %s</span>"
 
 #. Steal the "HELP" response and use it to trigger browsing to the logs folder
 msgid "_Browse logs folder"
@@ -12109,11 +12063,6 @@
 "and post the backtrace from the core file.  If you do not know\n"
 "how to get the backtrace, please read the instructions at\n"
 "%swiki/GetABacktrace\n"
-"\n"
-"If you need further assistance, please IM either SeanEgn or \n"
-"LSchiere (via AIM).  Contact information for Sean and Luke \n"
-"on other protocols is at\n"
-"%swiki/DeveloperPages\n"
 msgstr ""
 "A %s %s 旦sszeomlott 辿s megpr坦b叩lt ki鱈rni egy magf叩jlt.\n"
 "Ez a szoftver 辿s nem az �n hib叩ja miatt t旦rt辿nt.\n"
@@ -12127,12 +12076,6 @@
 "szerezze be a visszak旦vet辿st, akkor olvassa el a k旦vetkez� c鱈men tal叩lhat坦\n"
 "utas鱈t叩sokat:\n"
 "%swiki/GetABacktrace\n"
-"\n"
-"Ha tov叩bbi seg鱈ts辿gre van sz端ks辿ge, akkor k端ldj旦n azonnali 端zenetet (AIM "
-"protokollon, angolul)\n"
-"SeanEgn-nak vagy LSchiere-nek. Sean 辿s Luke kapcsolatinform叩ci坦i m叩s\n"
-"protokollokhoz el辿rhet�k a k旦vetkez� oldalon:\n"
-"%swiki/DeveloperPages\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -12168,8 +12111,7 @@
 msgid "Error launching \"%s\": %s"
 msgstr "Hiba ��%s�� ind鱈t叩sakor: %s"
 
-msgid ""
-"The 'Manual' browser command has been chosen, but no command has been set."
+msgid "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr "A ��K辿zi�� b旦ng辿sz�parancsot v叩lasztotta, de nem adott meg parancsot."
 
 msgid "The following plugins will be unloaded."
@@ -12604,11 +12546,9 @@
 msgid "Sounds when conversation has _focus"
 msgstr "Hangok lej叩tsz叩sa, ha a t叩rsalg叩s ablaka a_kt鱈v"
 
-#, fuzzy
 msgid "_Enable sounds:"
 msgstr "Hangok _enged辿lyez辿se:"
 
-#, fuzzy
 msgid "V_olume:"
 msgstr "H_anger�:"
 
@@ -12833,13 +12773,11 @@
 msgid "Custom Smiley Manager"
 msgstr "Egy辿nihangulatjel-kezel�"
 
-#, fuzzy
 msgid "Click to change your buddyicon for this account."
-msgstr "Ezen _partnerikon haszn叩lata a fi坦khoz:"
-
-#, fuzzy
+msgstr "Kattintson a fi坦k partnerikonj叩nak m坦dos鱈t叩s叩hoz."
+
 msgid "Click to change your buddyicon for all accounts."
-msgstr "Ezen _partnerikon haszn叩lata a fi坦khoz:"
+msgstr "Kattintson az 旦sszes fi坦k partnerikonj叩nak m坦dos鱈t叩s叩hoz."
 
 msgid "Waiting for network connection"
 msgstr "V叩rakoz叩s a h叩l坦zati kapcsolatra"
@@ -12938,8 +12876,7 @@
 
 #, c-format
 msgid "The file '%s' is too large for %s.  Please try a smaller image.\n"
-msgstr ""
-"A(z) ��%s�� f叩jl t炭l nagy a k旦vetkez�h旦z: %s. Pr坦b叩lkozzon kisebb k辿ppel.\n"
+msgstr "A(z) ��%s�� f叩jl t炭l nagy a k旦vetkez�h旦z: %s. Pr坦b叩lkozzon kisebb k辿ppel.\n"
 
 msgid "Icon Error"
 msgstr "Ikonhiba"
@@ -12952,8 +12889,7 @@
 msgstr "Nem siker端lt megnyitni a(z) ��%s�� f叩jlt: %s"
 
 #, c-format
-msgid ""
-"Failed to load image '%s': reason not known, probably a corrupt image file"
+msgid "Failed to load image '%s': reason not known, probably a corrupt image file"
 msgstr ""
 "A(z) ��%s�� k辿p bet旦lt辿se sikertelen: az ok nem ismert, val坦sz鱈n撤leg s辿r端lt a "
 "k辿pf叩jl"
@@ -12976,8 +12912,11 @@
 msgid "_Invite"
 msgstr "Meg_h鱈v叩s"
 
-msgid "_Modify"
-msgstr "_M坦dos鱈t叩s"
+msgid "_Modify..."
+msgstr "_M坦dos鱈t叩s��"
+
+msgid "_Add..."
+msgstr "Hozz叩_ad叩s��"
 
 msgid "_Open Mail"
 msgstr "_Lev辿l megnyit叩sa"
@@ -13000,6 +12939,12 @@
 msgid "none"
 msgstr "nincs"
 
+msgid "Small"
+msgstr "Kicsi"
+
+msgid "Smaller versions of the default smilies"
+msgstr "Az alap辿rtelmezett hangulatjelek kisebb v叩ltozatai"
+
 msgid "Response Probability:"
 msgstr "V叩lasz val坦sz鱈n撤s辿ge:"
 
@@ -13083,8 +13028,7 @@
 #. *< name
 #. *< version
 #. *< summary
-msgid ""
-"Allows for controlling the values associated with different buddy states."
+msgid "Allows for controlling the values associated with different buddy states."
 msgstr ""
 "Lehet�v辿 teszi a partnerek k端l旦nb旦z� 叩llapotaihoz rendelt 辿rt辿kek "
 "be叩ll鱈t叩s叩t."
@@ -13149,8 +13093,7 @@
 msgstr "T叩rsalg叩sok sz叩ma ablakonk辿nt"
 
 msgid "Separate IM and Chat windows when placing by number"
-msgstr ""
-"Azonnali 端zen�- 辿s cseveg�ablakok elk端l旦n鱈t辿se sz叩m szerinti elhelyez辿sn辿l"
+msgstr "Azonnali 端zen�- 辿s cseveg�ablakok elk端l旦n鱈t辿se sz叩m szerinti elhelyez辿sn辿l"
 
 #. *< type
 #. *< ui_requirement
@@ -13359,8 +13302,7 @@
 #. *  summary
 #. *  description
 msgid "Iconifies the buddy list and your conversations when you go away."
-msgstr ""
-"Ikon叩llapotba helyezi a partnerlist叩t 辿s a t叩rsalg叩sokat, amikor t叩vol van."
+msgstr "Ikon叩llapotba helyezi a partnerlist叩t 辿s a t叩rsalg叩sokat, amikor t叩vol van."
 
 msgid "Mail Checker"
 msgstr "Lev辿lfigyel�"
@@ -13369,8 +13311,7 @@
 msgstr "�j helyi lev辿l 辿rkez辿s辿t ellen�rzi."
 
 msgid "Adds a small box to the buddy list that shows if you have new mail."
-msgstr ""
-"Kis dobozt ad a partnerlist叩hoz, amely megjelenik 炭j lev辿l 辿rkez辿sekor."
+msgstr "Kis dobozt ad a partnerlist叩hoz, amely megjelenik 炭j lev辿l 辿rkez辿sekor."
 
 msgid "Markerline"
 msgstr "Jel旦l� vonal"
@@ -13470,6 +13411,9 @@
 msgid "Set window manager \"_URGENT\" hint"
 msgstr "��_S�RG�S�� tipp be叩ll鱈t叩sa az ablakkezel� sz叩m叩ra"
 
+msgid "_Flash window"
+msgstr "_Ablak villogtat叩sa"
+
 #. Raise window method button
 msgid "R_aise conversation window"
 msgstr "_T叩rsalg叩si ablak el�t辿rbe hoz叩sa"
@@ -13516,8 +13460,7 @@
 #. *  summary
 #. *  description
 msgid "Provides a variety of ways of notifying you of unread messages."
-msgstr ""
-"K端l旦nb旦z� lehet�s辿geket ny炭jt az olvasatlan 端zenetekre figyelmeztet辿sre."
+msgstr "K端l旦nb旦z� lehet�s辿geket ny炭jt az olvasatlan 端zenetekre figyelmeztet辿sre."
 
 #. *< type
 #. *< ui_requirement
@@ -13934,8 +13877,7 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "A windowsos Pidginre jellemz� be叩ll鱈t叩sok."
 
-msgid ""
-"Provides options specific to Pidgin for Windows , such as buddy list docking."
+msgid "Provides options specific to Pidgin for Windows , such as buddy list docking."
 msgstr ""
 "A windowsos Pidginre jellemz� be叩ll鱈t叩sokat biztos鱈t, mint p辿ld叩ul a "
 "partnerlista dokkol叩sa."
@@ -13979,122 +13921,3 @@
 "Ez a b�v鱈tm辿ny XMPP kiszolg叩l坦kban vagy kliensekben v辿gzett hibakeres辿shez "
 "hasznos."
 
-#, fuzzy
-#~ msgid "EOF while reading from resolver process"
-#~ msgstr ""
-#~ "Hiba a felold坦 folyamatb坦l olvas叩s k旦zben:\n"
-#~ "%s"
-
-#, fuzzy
-#~ msgid "Your information has been updated"
-#~ msgstr "A jelszava meg lett v叩ltoztatva."
-
-#, fuzzy
-#~ msgid "You have successfully removed a buddy"
-#~ msgstr "Sikeresen l辿trehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid "You have successfully removed yourself from your friend's buddy list"
-#~ msgstr "%s elt叩vol鱈totta �nt a partnerlist叩j叩r坦l."
-
-#, fuzzy
-#~ msgid "You have added %d to buddy list"
-#~ msgstr "%s felvette �nt [%s] a partnerlist叩j叩ra"
-
-#, fuzzy
-#~ msgid "Invalid QQid"
-#~ msgstr "�rv辿nytelen authzid"
-
-#, fuzzy
-#~ msgid "Please enter external group ID"
-#~ msgstr "Adja meg %s 炭j nev辿t"
-
-#, fuzzy
-#~ msgid "Reason: %s"
-#~ msgstr "Verzi坦: \t%s\n"
-
-#, fuzzy
-#~ msgid "Your request to join group %d has been rejected by admin %d"
-#~ msgstr ""
-#~ "A csatlakoz叩si k辿relm辿t a(z) %d csoporthoz %d admin visszautas鱈totta"
-
-#, fuzzy
-#~ msgid "Your request to join group %d has been approved by admin %d"
-#~ msgstr ""
-#~ "A csatlakoz叩si k辿relm辿t a(z) %d csoporthoz %d admin visszautas鱈totta"
-
-#, fuzzy
-#~ msgid "You [%d] have left group \"%d\""
-#~ msgstr "�n [%d] fel lett v辿ve a k旦vetkez� csoportba: ��%d��"
-
-#, fuzzy
-#~ msgid "You [%d] have been added to group \"%d\""
-#~ msgstr "%s felvette"
-
-#, fuzzy
-#~ msgid "This group has been added to your buddy list"
-#~ msgstr "%s felvette �nt a partnerlist叩j叩ra."
-
-#, fuzzy
-#~ msgid "You have successfully left the group"
-#~ msgstr "Sikeresen l辿trehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid "Enter your reason:"
-#~ msgstr "�rja be al叩bb a jegyzetet��"
-
-#, fuzzy
-#~ msgid "You have successfully modified Qun member"
-#~ msgstr "Sikeresen l辿trehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid "You have successfully modified Qun information"
-#~ msgstr "Sikeresen l辿trehozott egy Qun-t"
-
-#, fuzzy
-#~ msgid " Space"
-#~ msgstr "MySpace"
-
-#, fuzzy
-#~ msgid "<b>Real hostname</b>: %s: %d<br>\n"
-#~ msgstr "<b>Utols坦 friss鱈t辿s</b>: %s<br>\n"
-
-#, fuzzy
-#~ msgid "<b>My Public IP</b>: %s<br>\n"
-#~ msgstr "<b>Utols坦 bejelentkez辿si IP</b>: %s<br>\n"
-
-#, fuzzy
-#~ msgid "Show Login Information"
-#~ msgstr "Bejelentkez辿si inform叩ci坦k"
-
-#, fuzzy
-#~ msgid "resend interval(s)"
-#~ msgstr "Friss鱈t辿si id�k旦z"
-
-#, fuzzy
-#~ msgid "Failed to connect server"
-#~ msgstr "Nem siker端lt a kiszolg叩l坦hoz kapcsol坦dni."
-
-#, fuzzy
-#~ msgid "Unable to login. Check debug log."
-#~ msgstr "A b�v鱈tm辿ny nem t旦lthet� be"
-
-#, fuzzy
-#~ msgid "Unable to login"
-#~ msgstr "A b�v鱈tm辿ny nem t旦lthet� be"
-
-#, fuzzy
-#~ msgid "Failed room reply"
-#~ msgstr "A partner elt叩vol鱈t叩sa sikertelen"
-
-#, fuzzy
-#~ msgid "User %s rejected your request"
-#~ msgstr "Visszautas鱈totta %d k辿r辿s辿t"
-
-#, fuzzy
-#~ msgid "User %s approved your request"
-#~ msgstr "J坦v叩 k鱈v叩nja hagyni a k辿r辿st?"
-
-#, fuzzy
-#~ msgid "Notice from: %s"
-#~ msgstr "Megjegyz辿s"