changeset 29867:185677f47825

propagate from branch 'im.pidgin.pidgin' (head 267f28808ab6eeda6b5d68f6433f2b3fcf230d4f) to branch 'im.pidgin.cpw.rekkanoryo.icqxstatus' (head 7e67fade1189ddc36e8d1a6560c75f19d0df32aa)
author Marcus Lundblad <ml@update.uu.se>
date Thu, 18 Feb 2010 21:38:43 +0000
parents bc2760c74a79 (diff) 5b1b7c5393f6 (current diff)
children 551253814063
files COPYRIGHT ChangeLog.API libpurple/protocols/jabber/jabber.c libpurple/protocols/jabber/libxmpp.c libpurple/protocols/jabber/presence.c libpurple/prpl.h pidgin/gtkblist.c pidgin/gtkcelllayout.c pidgin/gtkcelllayout.h pidgin/gtkcellrendererprogress.c pidgin/gtkcellrendererprogress.h pidgin/gtkcellview.c pidgin/gtkcellview.h pidgin/gtkcellviewmenuitem.c pidgin/gtkcellviewmenuitem.h pidgin/gtkexpander.c pidgin/gtkexpander.h pidgin/gtkrequest.c pidgin/gtksavedstatuses.c pidgin/pidgincombobox.c pidgin/pidgincombobox.h pidgin/pixmaps/Makefile.am pidgin/pixmaps/emblems/16/mobile.png pidgin/pixmaps/emblems/16/music.png pidgin/pixmaps/emblems/scalable/mobile.svg pidgin/pixmaps/emblems/scalable/music.svg 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 pidgin/pixmaps/tray/16/tray-away.png pidgin/pixmaps/tray/16/tray-busy.png pidgin/pixmaps/tray/16/tray-connecting.png pidgin/pixmaps/tray/16/tray-extended-away.png pidgin/pixmaps/tray/16/tray-invisible.png pidgin/pixmaps/tray/16/tray-message.png pidgin/pixmaps/tray/16/tray-new-im.png pidgin/pixmaps/tray/16/tray-offline.png pidgin/pixmaps/tray/16/tray-online.png pidgin/pixmaps/tray/22/tray-away.png pidgin/pixmaps/tray/22/tray-busy.png pidgin/pixmaps/tray/22/tray-connecting.png pidgin/pixmaps/tray/22/tray-extended-away.png pidgin/pixmaps/tray/22/tray-invisible.png pidgin/pixmaps/tray/22/tray-message.png pidgin/pixmaps/tray/22/tray-new-im.png pidgin/pixmaps/tray/22/tray-offline.png pidgin/pixmaps/tray/22/tray-online.png pidgin/pixmaps/tray/32/tray-away.png pidgin/pixmaps/tray/32/tray-busy.png pidgin/pixmaps/tray/32/tray-connecting.png pidgin/pixmaps/tray/32/tray-extended-away.png pidgin/pixmaps/tray/32/tray-invisible.png pidgin/pixmaps/tray/32/tray-message.png pidgin/pixmaps/tray/32/tray-new-im.png pidgin/pixmaps/tray/32/tray-offline.png pidgin/pixmaps/tray/32/tray-online.png pidgin/pixmaps/tray/48/tray-away.png pidgin/pixmaps/tray/48/tray-busy.png pidgin/pixmaps/tray/48/tray-connecting.png pidgin/pixmaps/tray/48/tray-extended-away.png pidgin/pixmaps/tray/48/tray-invisible.png pidgin/pixmaps/tray/48/tray-message.png pidgin/pixmaps/tray/48/tray-new-im.png pidgin/pixmaps/tray/48/tray-offline.png pidgin/pixmaps/tray/48/tray-online.png po/POTFILES.in
diffstat 309 files changed, 14403 insertions(+), 25408 deletions(-) [+]
line wrap: on
line diff
--- a/COPYRIGHT	Wed Feb 10 20:53:32 2010 +0000
+++ b/COPYRIGHT	Thu Feb 18 21:38:43 2010 +0000
@@ -312,6 +312,7 @@
 Paul Miller
 Arkadiusz Miskiewicz
 David Mohr
+Kartik Mohta
 Andrew Molloy
 Tomasz Mon
 Michael Monreal
--- a/ChangeLog	Wed Feb 10 20:53:32 2010 +0000
+++ b/ChangeLog	Thu Feb 18 21:38:43 2010 +0000
@@ -1,12 +1,35 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.6.6 (??/??/20??):
+version 2.7.0 (??/??/????):
+	General:
+	* Changed GTK+ minimum version requirement to 2.10.0.
+	* Changed GLib minimum version requirement to 2.12.0.
+
+	Pidgin:
+	* Moved the "Debugging Information" section of the About box to a
+	  "Build Information" dialog accessible on the Help menu.
+	* Moved the Developer and Crazy Patch Writer information from the About
+	  box to a "Developer Information" dialog accessible on the Help menu.
+	* Moved the Translator information from the About box to a "Translator
+	  Information" dialog accessible on the Help menu.
+	* Use GtkStatusIcon for the docklet, providing better integration in
+	  notification area.
+	* Added UI for sending attentions (buzz, nudge) on supporting protocols.
+	* Make the search dialog unobtrusive in the conversation window (by making
+	  it look and behave like the search dialog in Firefox)
+
+version 2.6.6 (02/18/2010):
 	libpurple:
 	* Fix 'make check' on OS X. (David Fang)
 	* Fix a quirk in purple_markup_html_to_xhtml that caused some messages
 	  to be improperly converted to XHTML.
 	* Set "controlling-mode" correctly when initializing a media session.
 	  Fixes receiving voice calls from Psi.
+	* When looking up DNS records, use the type of record returned by the
+	  server (instead of the type we asked for) to determine how to process
+	  the record.
+	* Fix an issue with parsing XML attributes that contain "&lt;br&gt;".
+	  See ChangeLog.API for more details.
 
 	General:
 	* Correctly disable all missing dependencies when using the
@@ -21,6 +44,8 @@
 	  Previously only icons between 48x48 and 50x50 were allowed.
 
 	MSN:
+	* Fix CVE-2010-0277, a possible remote crash when parsing an incoming
+	  SLP message.  (Discovered by Fabian Yamaguchi)
 	* File transfer requests will no longer cause a crash if you delete the
 	  file before the other side accepts.
 	* Received files will no longer hold an extra lock after completion,
@@ -28,33 +53,79 @@
 	* Buddies who sign in from a second location will no longer cause an
 	  unnecessary chat window to open.
 	* Support setting an animated GIF as a buddy icon.
+	* Numerous code cleanups and memory savings.
+
+	MySpace:
+	* Fix a leak and crash when retrieving buddy icons.
 
 	XMPP:
+	* Less likely to send messages to a contact's idle/inactive resource.
+	  Previously, if a message was received from a specific resource,
+	  responses would be sent to that resource until either it went offline
+	  or a message is received from another resource.  Now, messages are
+	  sent to the bare JID upon receipt of any presence change from the
+	  contact.
 	* Added support for the SCRAM-SHA-1 SASL mechanism.  This is only
 	  available when built without Cyrus SASL support.
 	* When getting info on a domain-only (server) JID, show uptime
-	  (when given by the result of the "last query") and don't show status as
-	  offline.
-	* Wrap XHTML messages in <p>, as described in XEP-0071, for compatibility
-	  with some clients.
+	  (when given by the result of the "last query") and don't show status
+	  as offline.
+	* Fix getting info on your own JID.
+	* Wrap XHTML messages in <p>, as described in XEP-0071, for
+	  compatibility with some clients.
 	* Don't do an SRV lookup for a STUN server associated with the account
 	  if one is already set globally in prefs.
-	* Don't send custom smileys larger than the recommended maximum object size
-	  specified in the BoB XEP.   This prevents a client from being
+	* Don't send custom smileys larger than the recommended maximum object
+	  size specified in the BoB XEP.   This prevents a client from being
 	  disconnected by servers that dislike overly-large stanzas.
+	* Fix receiving messages without markup over an Openfire BOSH
+	  connection (forcibly put the stanzas in the jabber:client namespace).
+	* The default value for the file transfer proxies is automatically
+	  updated when an account connects, if it is still the old (broken)
+	  default (from 'proxy.jabber.org' to 'proxy.eu.jabber.org').
+	* Fix an issue where libpurple created duplicate buddies if the roster
+	  contains a buddy in two groups that differ only by case
+	  (e.g. "XMPP" and "xmpp") (or not at all).
 
 	Yahoo:
 	* Don't send <span> and </span> tags.  (Fartash Faghri)
+	* Support PingBox.  PingBoxes will appear as pbx/PingBoxName.  (Kartik
+	  Mohta)
 
 	Pidgin:
+	* Fix CVE-2010-0423, a denial of service attack due to the parsing
+	  of large numbers of smileys.  (Discovered by Antti Hayrynen)
 	* Correctly size conversation and status box entries when the
 	  interior-focus style property is diabled. (Gabriel Schulhof)
 	* Correctly handle a multiline text field being required in a
 	  request form.  (Thanks to Florian Zeitz for finding this problem)
 	* Search friends by email-addresses in the buddy list. (Luoh Ren-Shan)
 	* Allow dropping an image on Custom Smiley window to add a new one.
+	* Prompt for confirmation when clearing a whiteboard (doodle) session.
+	  (Kartik Mohta)
+	* Use the "hand" cursor when hovering over usernames in chat history to
+	  indicate that the username is an actionable item.
+	* Double-clicking usernames in chat history will open an IM with that
+	  user.
+	* Put an icon on the "Filter" button in the debug window.
+	* Don't treat "/messages/like/this " as commands.
+	* Explicitly mark user interaction when inserting smilies from the
+	  toolbar so "Undo" correctly removes these smilies.
+	* Clicking "New" or "Saved" in the status selector menu while typing a
+	  status message no longer keeps the status entry area stuck in "typing"
+	  mode forever.
+	* Show tooltips for ellipsized conversation tabs.  On older systems,
+	  tooltips will show for all tabs.
+	* The File Transfers and Debug Window windows are no longer created as
+	  dialogs.  These windows should now have minimize buttons in many
+	  environments in which they were previously missing
+	  (including Windows).
+	* Smiley themes with Windows line endings no longer cause theme
+	  descriptions not to be displayed in the theme selector.
 
 	Finch:
+	* Fix CVE-2010-0420, a possible remote crash when handling chat room
+	  buddy names.
 	* Rebindable 'move-first' and 'move-last' actions for tree widgets. So
 	  it is possible to jump to the first or last entry in the buddy list
 	  (and other such lists) by pressing home or end key (defaults)
@@ -86,11 +157,11 @@
 	* Actually emit the hold signal for media calls.
 	* Fix building the GnuTLS plugin with older versions of GnuTLS.
 	* Fix DNS TXT query resolution.
-	* Don't send Proxy-Authorization headers to HTTP proxy servers until we've
-	  received a "407 Proxy Authentication Required" response from the server.
-	  (thecrux)
-	* Added "MXit" protocol plugin, supported and maintained by the MXit folks
-	  themselves (MXit Lifestyle (Pty) Ltd.)
+	* Don't send Proxy-Authorization headers to HTTP proxy servers until
+	  we've received a "407 Proxy Authentication Required" response from
+	  the server.  (thecrux)
+	* Added "MXit" protocol plugin, supported and maintained by the MXit
+	  folks themselves (MXit Lifestyle (Pty) Ltd.)
 
 	General:
 	* New 'plugins' sub-command to 'debug' command (i.e. '/debug plugins')
@@ -121,14 +192,14 @@
 	  as it has probably been reset.
 
 	XMPP:
-	* Users connecting to Google Talk now have an "Initiate Chat" context menu
-	  option for their buddies.  (Eion Robb)
+	* Users connecting to Google Talk now have an "Initiate Chat" context
+	  menu option for their buddies.  (Eion Robb)
 	* Fix a crash when attempting to validate an invalid JID.
 	* Resolve an issue when connecting to iChat Server when no resource
 	  is specified.
 	* Try to automatically find a STUN server by using an SRV lookup on the
-	  account's domain, and use that for voice and video if found and the user
-	  didn't set one manually in prefs.
+	  account's domain, and use that for voice and video if found and the
+	  user didn't set one manually in prefs.
 	* Fix a crash when adding a buddy without an '@'.
 	* Don't show the option to send a file to a buddy if we know for certain
 	  they don't support any file transfer method supported by libpurple.
@@ -152,23 +223,23 @@
 	* The userlist in a multiuser chat can be styled via gtkrc by using the
 	  widget name "pidgin_conv_userlist". (Heiko Schmitt)
 	* Add a hold button to the media window.
-	* Fix a bug where the conversation backlog stops scrolling in a very busy
-	  chat room.
+	* Fix a bug where the conversation backlog stops scrolling in a very
+	  busy chat room.
 	* In the Conversation "Send To" menu, offline buddies appear grayed
 	  out (but are still selectable).  Previously, only offline buddies on
 	  accounts that do not support offline messaging appeared grayed out.
 
 	Pidgin Preference and Preference Window Changes:
 	* Removed the "Use font from theme" and "Conversation Font" preferences
-	  for everyone except Windows users.  The font can be controlled from the
-	  Pidgin GTK+ Theme Control plugin.
+	  for everyone except Windows users.  The font can be controlled from
+	  the Pidgin GTK+ Theme Control plugin.
 	* Tabs in the Preferences window are now on the left side.
 	* The Browser tab is now visible for GNOME users.
 	* Added a Proxy tab shown no matter what environment Pidgin runs in.
-	* The Browser and Proxy tabs show appropriate GNOME-specific messages and
-	  allow launching the correct applications to change the relevant GNOME
-	  preferences if found.  These were previously together on the Network
-	  tab.
+	* The Browser and Proxy tabs show appropriate GNOME-specific messages
+	  and allow launching the correct applications to change the relevant
+	  GNOME preferences if found.  These were previously together on the
+	  Network tab.
 	* Moved the port range spin buttons on the Network tab to be beside the
 	  checkbox that enables/disables them.
 	* Reorganized preferences on the Status/Idle tab to have one less
@@ -178,10 +249,10 @@
 	* Moved Buddy List Theme and Status Icon Theme selectors from Interface
 	  tab to Themes tab.
 	* Moved Sound Theme selector from Sounds tab to Themes tab.
-	* Changed the Smiley Theme selector to be consistent with the other theme
-	  selectors.
-	* Rearranged tabs such that Interface is first and all remaining tabs are
-	  alphabetized in English.
+	* Changed the Smiley Theme selector to be consistent with the other
+	  theme selectors.
+	* Rearranged tabs such that Interface is first and all remaining tabs
+	  are alphabetized in English.
 
 version 2.6.3 (10/16/2009):
 	General:
@@ -221,16 +292,17 @@
 	  properly.  In addition, it is no longer possible to add buddies of
 	  the form "room@conference.example.net/User", where
 	  room@conference.example.net is a MUC.
-	* Don't crash when receiving "smileyfied" XHTML-IM from clients that don't
-	  support bits of binary (ie. when getting an empty <data/> in return)
+	* Don't crash when receiving "smileyfied" XHTML-IM from clients that
+	  don't support bits of binary (ie. when getting an empty <data/> in
+	  return)
 	* Fix bug where SSL/TLS was not required even though the
 	  "require SSL/TLS" preference checked when connecting to servers
 	  that use the older iq-based authentication.  (CVE-2009-3026)
 
 	Yahoo!/Yahoo! JAPAN:
-	* Accounts now have "Use account proxy for SSL connections" option.  This
-	  option force-overrides the account specific proxy settings for SSL
-	  connections only and instead uses the global proxy configuration.
+	* Accounts now have "Use account proxy for SSL connections" option.
+	  This option force-overrides the account specific proxy settings for
+	  SSL connections only and instead uses the global proxy configuration.
 
 	Finch:
 	* Properly detect libpanel on OpenBSD.  (Brad Smith)
@@ -272,8 +344,8 @@
 	* Various memory leaks fixed as reported by Josh Mueller.
 	* Properly handle an IRC buddy appearing in multiple groups.
 	* Escape HTML entities in usernames when written with the HTML logger.
-	* Do not display MySpace status changes as incoming IMs.  (Mark Doliner and
-	  Justin Williams)
+	* Do not display MySpace status changes as incoming IMs.  (Mark Doliner
+	  and Justin Williams)
 
 	DNS:
 	* DNS servers are re-read when DNS queries fail in case the system has
@@ -284,32 +356,34 @@
 	  address configured.
 	* Fix a leak when the UI provides its own DNS resolving UI op.
 	  (Aman Gupta)
-	* Don't fork a DNS resolver process to resolve IP addresses.  (Aman Gupta)
-	* Internationalized Domain Names are supported when libpurple is compiled
-	  against the GNU IDN library.
+	* Don't fork a DNS resolver process to resolve IP addresses.
+	  (Aman Gupta)
+	* Internationalized Domain Names are supported when libpurple is
+	  compiled against the GNU IDN library.
 
 	Environment Variables:
 	* GnuTLS logging (disabled by default) can be controlled through the
 	  PURPLE_GNUTLS_DEBUG environment variable, which is an integer between
 	  0 and 9 (higher is more verbose). Higher values may reveal sensitive
 	  information.
-	* PURPLE_VERBOSE_DEBUG environment variable.  Currently, this is an "on" or
-	  "off" variable.  Set it to any value to turn it on and unset it to turn
-	  it off.  This will optionally be used to only show less useful debug
-	  information on an as-needed basis.
-	* PURPLE_LEAKCHECK_HELP environment variable.  Currently, this is an "on"
+	* PURPLE_VERBOSE_DEBUG environment variable.  Currently, this is an "on"
 	  or "off" variable.  Set it to any value to turn it on and unset it to
-	  turn it off.  This will be used to perform various actions that are
-	  useful when running libpurple inside of Valgrind or similar programs.
-	  Currently, it keeps plugins in memory, allowing Valgrind to perform
-	  symbol resolution of leak traces at shutdown.
+	  turn it off.  This will optionally be used to only show less useful
+	  debug information on an as-needed basis.
+	* PURPLE_LEAKCHECK_HELP environment variable.  Currently, this is an
+	  "on" or "off" variable.  Set it to any value to turn it on and unset
+	  it to turn it off.  This will be used to perform various actions
+	  that are useful when running libpurple inside of Valgrind or similar
+	  programs.  Currently, it keeps plugins in memory, allowing Valgrind
+	  to perform symbol resolution of leak traces at shutdown.
 
 	AIM and ICQ:
 	* Preliminary support for a new authentication scheme called
 	  "clientLogin."
 	* Fixed a bug where your away message sometimes would not get set when
 	  you first sign on.
-	* Make sure links in your away messages show up as links to other people.
+	* Make sure links in your away messages show up as links to other
+	  people.
 	* For ICQ, Never change the privacy setting specified by the user.
 
 	Gadu-Gadu:
@@ -328,15 +402,16 @@
 	  Topper, and Elliott Sales de Andrade)
 	* Show the invite message for buddies that requested authorization
 	  from you on MSN.
-	* Support sending an invite message to buddies when requesting authorization
-	  from them on MSN.
+	* Support sending an invite message to buddies when requesting
+	  authorization from them on MSN.
 	* Timeout switchboard connections aggressively (60 seconds).
 
 	XMPP:
-	* Voice & Video support with Jingle (XEP-0166, 0167, 0176, & 0177), voice
-	  support with GTalk and voice and video support with the GMail web
-	  client. (Mike "Maiku" Ruprecht)
-	* Added a Service Discovery Browser plugin for Pidgin. (Andrei Mozzhuhin)
+	* Voice & Video support with Jingle (XEP-0166, 0167, 0176, & 0177),
+	  voice support with GTalk and voice and video support with the GMail
+	  web client. (Mike "Maiku" Ruprecht)
+	* Added a Service Discovery Browser plugin for Pidgin.
+	  (Andrei Mozzhuhin)
 	* Support for in-band bytestreams for file transfers (XEP-0047). (Marcus
 	  Lundblad)
 	* Support for sending and receiving attentions (equivalent to "buzz"
@@ -353,28 +428,30 @@
 	* Better support for receiving remote users' nicknames.
 	* /affiliate and /role will now list the room members with the specified
 	  affiliation/role if possible. (Andrei Mozzhuhin)
-	* Put section breaks between resources in "Get Info" to improve readability.
-	* Silently remove invalid XML 1.0 entities (e.g. ASCII control characters)
-	  from sent messages.
+	* Put section breaks between resources in "Get Info" to improve
+	  readability.
+	* Silently remove invalid XML 1.0 entities (e.g. ASCII control
+	  characters) from sent messages.
 	* XHTML markup is only included in outgoing messages when the message
 	  contains formatting.
-	* Show when the user was last logged in when doing "Get Info" on an offline
-	  buddy, provided the server supports it.
+	* Show when the user was last logged in when doing "Get Info" on an
+	  offline buddy, provided the server supports it.
 	* Support custom smileys in MUCs (only when all participants support the
-	  "Bits of Binary" extension, and a maximum of 10 participants are in the
-	  chat to avoid getting too many fetch requests).
+	  "Bits of Binary" extension, and a maximum of 10 participants are in
+	  the chat to avoid getting too many fetch requests).
 	* Fix an issue with Jabber (pre-XMPP) servers and the user's preference
 	  to require SSL not being respected.
 	* Fix an issue where Cyrus SASL DIGEST MD5 authentication might fail if
 	  the username, password, or realm (the JID domain) contain non-ASCII
 	  characters.
-	* Show emblem for mobile, handheld, and web clients and bots (if the other
-	  client supports it).
-	* Google Talk mail notifications should now work for people for whom they
-	  inexplicably did not.  (Thanks to yukam for determining the reason)
+	* Show emblem for mobile, handheld, and web clients and bots (if the
+	  other client supports it).
+	* Google Talk mail notifications should now work for people for whom
+	  they inexplicably did not.  (Thanks to yukam for determining the
+	  reason)
 	* New XMPP and Google Talk accounts require SSL by default.
-	* Display kicks (and the reasons given) in chat rooms when an occupant is
-	  kicked.
+	* Display kicks (and the reasons given) in chat rooms when an occupant
+	  is kicked.
 	* Fix issues with case-sensitivity of XMPP roster and case-insensitive
 	  Purple groups.
 	* For contacts who advertise Entity Capabilities, only send rich text
--- a/ChangeLog.API	Wed Feb 10 20:53:32 2010 +0000
+++ b/ChangeLog.API	Thu Feb 18 21:38:43 2010 +0000
@@ -1,12 +1,49 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.6.6 (??/??/2010):
+version 2.7.0 (??/??/????):
+	libpurple:
+		Added:
+		* purple_account_get_name_for_display
+		* purple_buddy_get_media_caps
+		* purple_buddy_set_media_caps
+		* purple_contact_get_group
+		* purple_media_candidate_copy
+		* purple_media_codec_copy
+		* purple_media_manager_get_backend_type
+		* purple_media_manager_set_backend_type
+		* purple_network_get_all_local_system_ips, which returns all local
+		  IPs on the system.  On systems with the getifaddrs() function,
+		  this will return both IPv4 and IPv6 addresses (excluding link-local
+		  and loopback addresses).  On others, it returns just IPv4 addresses.
+		* purple_prpl_got_media_caps
+		* purple_unescape_text
+		* purple_uuid_random
+		* media_caps to the PurpleBuddy struct
+		* buddy-caps-changed blist signal
+		* ui-caps-changed media manager signal
+		* sent-attention conversation signal
+		* got-attention conversation signal
+
+	Pidgin:
+		Added:
+		* pidgin_dialogs_buildinfo (should not be used by anything but Pidgin)
+		* pidgin_dialogs_developers (should not be used by anything but Pidgin)
+		* pidgin_dialogs_translators (should not be used by anything but Pidgin)
+		* gtk_imhtmltoolbar_switch_active_conversation
+
+version 2.6.6 (02/18/2010):
 	libpurple:
 		Changed:
 		* purple_xfer_cancel_local is now called instead of
 		  purple_xfer_request_denied if an error is found when selecting
 		  a file to send. Request denied is still used when a receive
 		  request is not allowed.
+		* xmlnode_from_str now properly handles paring an attribute which
+		  contain "&lt;br&gt;", which were previously transformed into a
+		  newline character (libxml2 unescapes all entities except
+		  representations of '&', and libpurple's purple_unescape_html
+		  converts "<br>" to a newline).
+
 	Perl:
 		Changed:
 		* Corrected the package names for the PurpleProxyType and
--- a/ChangeLog.win32	Wed Feb 10 20:53:32 2010 +0000
+++ b/ChangeLog.win32	Thu Feb 18 21:38:43 2010 +0000
@@ -1,5 +1,11 @@
+version 2.7.0 (??/??/????):
+	* Minimum required GTK+ version increased to 2.14.0
+	* Private GTK+ Runtime now used (GTK+ Installer no longer supported)
+	* Win9x no longer supported.
+	* Crash Report files (pidgin.RPT) are now generated in the ~/.purple
+	  directory instead of the installation directory.
 
-version 2.6.6 (??/??/2010):
+version 2.6.6 (02/18/2010):
 	* Installer translations for: Norwegian nynorsk
 
 version 2.6.5 (01/08/2010):
--- a/Makefile.mingw	Wed Feb 10 20:53:32 2010 +0000
+++ b/Makefile.mingw	Thu Feb 18 21:38:43 2010 +0000
@@ -37,6 +37,7 @@
 )
 
 STRIPPED_RELEASE_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-win32bin
+DEBUG_SYMBOLS_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-dbgsym
 
 
 # Any *.dll or *.exe files included in win32-install-dir that we don't compile
@@ -71,7 +72,7 @@
 #build an expression for `find` to use to ignore the above files
 EXTERNAL_DLLS_FIND_EXP = $(patsubst %,-o -name %,$(EXTERNAL_DLLS))
 
-.PHONY: all docs install installer installer_nogtk installer_debug installers clean uninstall create_release_install_dir
+.PHONY: all docs install installer installer_offline installer_zip debug_symbols_zip installers clean uninstall create_release_install_dir generate_translations_installer_include $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT)
 
 all: $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H)
 	$(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE)
@@ -89,29 +90,41 @@
 	$(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) install
 	$(MAKE) -C share/sounds -f $(MINGW_MAKEFILE) install
 
+generate_translations_installer_include: create_release_install_dir 
+	rm -f pidgin/win32/nsis/pidgin-translations.nsh
+	find $(STRIPPED_RELEASE_DIR)/locale -maxdepth 1 -mindepth 1 \
+	 -exec basename {} ';' \
+	 | sed -e s/^/\!insertmacro\ LANG_SECTION\ \"/ -e s/$$/\"/ \
+	 > pidgin/win32/nsis/pidgin-translations.nsh
+
 create_release_install_dir: install
 	rm -rf $(STRIPPED_RELEASE_DIR)
 	cp -R $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR)
 	find $(STRIPPED_RELEASE_DIR) \( -name '*.dll' -o -name '*.exe' \) \
-	 -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) -exec $(STRIP) --strip-unneeded {} ';'
+	 -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) \
+	 -exec $(STRIP) --strip-unneeded {} ';'
 
-installer: create_release_install_dir
-	$(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DWITH_GTK $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi
+installer: create_release_install_dir generate_translations_installer_include
+	$(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi
 	mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION).exe ./
 
-installer_nogtk: create_release_install_dir
-	$(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi
-	mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-no-gtk.exe ./
-
-installer_debug: install
-	$(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(PIDGIN_INSTALL_DIR)" $(MAKENSISOPT)DDEBUG $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi
-	mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-debug.exe ./
+installer_offline: create_release_install_dir generate_translations_installer_include debug_symbols_zip
+	$(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DOFFLINE_INSTALLER $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi
+	mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-offline.exe ./
 
 installer_zip: create_release_install_dir
 	rm -f pidgin-$(PIDGIN_VERSION)-win32-bin.zip
 	zip -9 -r pidgin-$(PIDGIN_VERSION)-win32-bin.zip $(STRIPPED_RELEASE_DIR)
 
-installers: installer installer_nogtk installer_debug installer_zip
+debug_symbols_zip: install
+	rm -rf $(DEBUG_SYMBOLS_DIR) $(DEBUG_SYMBOLS_DIR).zip
+	mkdir $(DEBUG_SYMBOLS_DIR)
+	tar -cf - `find $(PIDGIN_INSTALL_DIR) \( -name '*.dll' -o -name '*.exe' \) \
+	 -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) -print` \
+	 | tar --strip 2 --xform s/$$/.dbgsym/ -xC $(DEBUG_SYMBOLS_DIR) -f -
+	zip -9 -r $(DEBUG_SYMBOLS_DIR).zip $(DEBUG_SYMBOLS_DIR) 
+
+installers: installer installer_offline debug_symbols_zip installer_zip
 
 Doxyfile.mingw: Doxyfile.in
 	sed -e "s/@PACKAGE@/pidgin/" -e "s/@VERSION@/$(PIDGIN_VERSION)/" -e "s/@top_srcdir@/$(PIDGIN_TREE_TOP)/g" -e "s/@enable_dot@/NO/" Doxyfile.in > Doxyfile.mingw
@@ -125,13 +138,12 @@
 	$(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) clean
-	rm -f $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip
+	rm -f $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip $(DEBUG_SYMBOLS_DIR).zip
 	rm -rf doc/html Doxyfile.mingw
 
 uninstall:
-	rm -rf $(PURPLE_INSTALL_PERL_DIR) $(PIDGIN_INSTALL_PLUGINS_DIR) $(PURPLE_INSTALL_PO_DIR) $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR)
+	rm -rf $(PURPLE_INSTALL_PERL_DIR) $(PIDGIN_INSTALL_PLUGINS_DIR) $(PURPLE_INSTALL_PO_DIR) $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR) $(DEBUG_SYMBOLS_DIR)
 	rm -f ./VERSION
 
 include $(PIDGIN_COMMON_TARGETS)
 
-.PHONY: $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT)
--- a/NEWS	Wed Feb 10 20:53:32 2010 +0000
+++ b/NEWS	Thu Feb 18 21:38:43 2010 +0000
@@ -2,7 +2,9 @@
 
 Our development blog is available at: http://planet.pidgin.im
 
-2.6.6 (??/??/2010):
+2.6.6 (02/18/2010):
+	Mark: This release includes some great little changes and fixes a few
+	security-related bugs.  See the ChangeLog for details.
 
 2.6.5 (01/08/2010):
 	Paul: This release fixes a pretty serious bug in the MSN code, so we're
--- a/configure.ac	Wed Feb 10 20:53:32 2010 +0000
+++ b/configure.ac	Thu Feb 18 21:38:43 2010 +0000
@@ -43,19 +43,19 @@
 #
 # Make sure to update finch/libgnt/configure.ac with libgnt version changes.
 #
-m4_define([purple_lt_current], [6])
+m4_define([purple_lt_current], [7])
 m4_define([purple_major_version], [2])
-m4_define([purple_minor_version], [6])
-m4_define([purple_micro_version], [6])
+m4_define([purple_minor_version], [7])
+m4_define([purple_micro_version], [0])
 m4_define([purple_version_suffix], [devel])
 m4_define([purple_version],
           [purple_major_version.purple_minor_version.purple_micro_version])
 m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix]))
 
-m4_define([gnt_lt_current], [6])
+m4_define([gnt_lt_current], [7])
 m4_define([gnt_major_version], [2])
-m4_define([gnt_minor_version], [6])
-m4_define([gnt_micro_version], [6])
+m4_define([gnt_minor_version], [7])
+m4_define([gnt_micro_version], [0])
 m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
@@ -211,6 +211,7 @@
 	[AC_CHECK_LIB(socket, getaddrinfo,
 		[AC_DEFINE([HAVE_GETADDRINFO]) LIBS="-lsocket -lsnl $LIBS"], , , -lnsl)])
 AC_CHECK_FUNCS(inet_ntop)
+AC_CHECK_FUNCS(getifaddrs)
 dnl Check for socklen_t (in Unix98)
 AC_MSG_CHECKING(for socklen_t)
 AC_TRY_COMPILE([
@@ -310,13 +311,13 @@
 )
 
 dnl #######################################################################
-dnl # Check for GLib 2.0 (required)
+dnl # Check for GLib 2.12 (required)
 dnl #######################################################################
-PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.4.0 gobject-2.0 gmodule-2.0 gthread-2.0], , [
+PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.12.0 gobject-2.0 gmodule-2.0 gthread-2.0], , [
 	AC_MSG_RESULT(no)
 	AC_MSG_ERROR([
 
-You must have GLib 2.4.0 or newer development headers installed to build.
+You must have GLib 2.12.0 or newer development headers installed to build.
 
 If you have these installed already you may need to install pkg-config so
 I can find them.
@@ -352,7 +353,7 @@
 	[enable_consoleui=$enableval force_finch=$enableval], [enable_consoleui=yes force_finch=no])
 
 dnl #######################################################################
-dnl # Check for GTK+ 2.0 and other things used by the GTK UI
+dnl # Check for GTK+ 2.10 and other things used by the GTK UI
 dnl #######################################################################
 AC_ARG_ENABLE(screensaver,
 	[AC_HELP_STRING([--disable-screensaver],
@@ -399,11 +400,11 @@
 fi
 
 if test "x$enable_gtkui" = "xyes" ; then
-	PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.4.0], , [
+	PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.10.0], , [
 		AC_MSG_RESULT(no)
 		AC_MSG_ERROR([
 
-You must have GTK+ 2.4.0 or newer development headers installed to compile
+You must have GTK+ 2.10.0 or newer development headers installed to compile
 Pidgin.  If you want to build only Finch then specify --disable-gtkui when
 running configure.
 ])])
@@ -2393,30 +2394,6 @@
         AC_DEFINE(HAVE_TM_GMTOFF, 1, [Define if you have a tm_gmtoff member in struct tm])
 fi
 
-AC_CACHE_CHECK([whether va_lists can be copied by value], ac_cv_va_val_copy,[
-	AC_TRY_RUN([#include <stdarg.h>
-#include <stdlib.h>
-	void f (int i, ...) {
-	va_list args1, args2;
-	va_start (args1, i);
-	args2 = args1;
-	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-	  exit (1);
-	va_end (args1); va_end (args2);
-	}
-	int main() {
-	  f (0, 42);
-	  return 0;
-	}],
-	[ac_cv_va_val_copy=yes],
-	[ac_cv_va_val_copy=no],
-	[ac_cv_va_val_copy=yes])
-])
-
-if test "x$ac_cv_va_val_copy" = "xno"; then
-	AC_DEFINE(VA_COPY_AS_ARRAY, 1, ['va_lists' cannot be copied as values])
-fi
-
 dnl #######################################################################
 dnl # Check for check
 dnl #######################################################################
@@ -2515,6 +2492,8 @@
 		   pidgin/Makefile
 		   pidgin/pidgin.pc
 		   pidgin/pidgin-uninstalled.pc
+		   pidgin/pidgin-2.pc
+		   pidgin/pidgin-2-uninstalled.pc
 		   pidgin/pixmaps/Makefile
 		   pidgin/pixmaps/emotes/default/24/Makefile
 		   pidgin/pixmaps/emotes/none/Makefile
@@ -2532,6 +2511,8 @@
 		   libpurple/gconf/Makefile
 		   libpurple/purple.pc
 		   libpurple/purple-uninstalled.pc
+		   libpurple/purple-2.pc
+		   libpurple/purple-2-uninstalled.pc
 		   libpurple/plugins/Makefile
 		   libpurple/plugins/mono/Makefile
 		   libpurple/plugins/mono/api/Makefile
--- a/finch/finch.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/finch/finch.c	Thu Feb 18 21:38:43 2010 +0000
@@ -431,9 +431,7 @@
 	g_thread_init(NULL);
 
 	g_set_prgname("Finch");
-#if GLIB_CHECK_VERSION(2,2,0)
 	g_set_application_name(_("Finch"));
-#endif
 
 	if (gnt_start(&argc, &argv)) {
 		gnt_main();
--- a/finch/gntconv.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/finch/gntconv.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1318,7 +1318,6 @@
 	return PURPLE_CMD_RET_OK;
 }
 
-#if GLIB_CHECK_VERSION(2,6,0)
 static PurpleCmdRet
 cmd_message_color(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data)
 {
@@ -1359,7 +1358,6 @@
 
 	return PURPLE_CMD_RET_OK;
 }
-#endif
 
 static PurpleCmdRet
 users_command_cb(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data)
@@ -1445,7 +1443,6 @@
 	                  PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL,
 	                  cmd_show_window, _("statuses: Show the savedstatuses window."), finch_savedstatus_show_all);
 
-#if GLIB_CHECK_VERSION(2,6,0)
 	/* Allow customizing the message colors using a command during run-time */
 	purple_cmd_register("msgcolor", "www", PURPLE_CMD_P_DEFAULT,
 			PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL,
@@ -1455,7 +1452,6 @@
 				                 "    &lt;foreground/background&gt;: black, red, green, blue, white, gray, darkgray, magenta, cyan, default<br><br>"
 								 "EXAMPLE:<br>    msgcolor send cyan default"),
 			NULL);
-#endif
 
 	purple_signal_connect(purple_conversations_get_handle(), "buddy-typing", finch_conv_get_handle(),
 					PURPLE_CALLBACK(update_buddy_typing), NULL);
--- a/finch/gntsound.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/finch/gntsound.c	Thu Feb 18 21:38:43 2010 +0000
@@ -559,18 +559,12 @@
 #else /* _WIN32 */
 	purple_debug_info("sound", "Playing %s\n", filename);
 
-	if (G_WIN32_HAVE_WIDECHAR_API ()) {
+	{
 		wchar_t *wc_filename = g_utf8_to_utf16(filename,
 				-1, NULL, NULL, NULL);
 		if (!PlaySoundW(wc_filename, NULL, SND_ASYNC | SND_FILENAME))
 			purple_debug(PURPLE_DEBUG_ERROR, "sound", "Error playing sound.\n");
 		g_free(wc_filename);
-	} else {
-		char *l_filename = g_locale_from_utf8(filename,
-				-1, NULL, NULL, NULL);
-		if (!PlaySoundA(l_filename, NULL, SND_ASYNC | SND_FILENAME))
-			purple_debug(PURPLE_DEBUG_ERROR, "sound", "Error playing sound.\n");
-		g_free(l_filename);
 	}
 #endif /* _WIN32 */
 }
--- a/finch/libgnt/configure.ac	Wed Feb 10 20:53:32 2010 +0000
+++ b/finch/libgnt/configure.ac	Thu Feb 18 21:38:43 2010 +0000
@@ -24,10 +24,10 @@
 # Make sure to update ../../configure.ac with libgnt version changes.
 #
 
-m4_define([gnt_lt_current], [6])
+m4_define([gnt_lt_current], [7])
 m4_define([gnt_major_version], [2])
-m4_define([gnt_minor_version], [6])
-m4_define([gnt_micro_version], [2])
+m4_define([gnt_minor_version], [7])
+m4_define([gnt_micro_version], [0])
 m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
--- a/finch/libgnt/gnttree.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/finch/libgnt/gnttree.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1346,6 +1346,10 @@
 {
 	GntTreeRow *pr = NULL;
 
+	if (g_hash_table_lookup(tree->hash, key)) {
+		gnt_tree_remove(tree, key);
+	}
+
 	row->tree = tree;
 	row->key = key;
 	row->data = NULL;
@@ -1881,7 +1885,7 @@
 void gnt_tree_set_column_is_binary(GntTree *tree, int col, gboolean bin)
 {
 	g_return_if_fail(col < tree->ncol);
-	set_column_flag(tree, col, GNT_TREE_COLUMN_FIXED_SIZE, bin);
+	set_column_flag(tree, col, GNT_TREE_COLUMN_BINARY_DATA, bin);
 }
 
 void gnt_tree_set_column_is_right_aligned(GntTree *tree, int col, gboolean right)
--- a/libpurple/Makefile.am	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/Makefile.am	Thu Feb 18 21:38:43 2010 +0000
@@ -53,6 +53,11 @@
 	idle.c \
 	imgstore.c \
 	log.c \
+	media/backend-fs2.c \
+	media/backend-iface.c \
+	media/candidate.c \
+	media/codec.c \
+	media/enum-types.c \
 	media.c \
 	mediamanager.c \
 	mime.c \
@@ -156,6 +161,12 @@
 	xmlnode.h \
 	whiteboard.h
 
+purple_mediaheaders = \
+	backend-iface.h \
+	candidate.h \
+	codec.h \
+	enum-types.h
+
 purple_builtheaders = purple.h version.h marshallers.h
 
 marshallers.h: marshallers.list
@@ -192,6 +203,7 @@
                 savedstatuses.h smiley.h status.h server.h util.h xmlnode.h prpl.h
 
 purple_build_coreheaders = $(addprefix $(srcdir)/, $(purple_coreheaders)) \
+		$(addprefix $(srcdir)/media/, $(purple_mediaheaders)) \
 		$(purple_builtheaders)
 dbus_build_exported = $(addprefix $(srcdir)/, $(dbus_exported))
 # We should probably make this better
@@ -226,7 +238,7 @@
 purple-client-bindings.c: dbus-analyze-functions.py $(dbus_exported)
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client > $@
 
-purple-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(purple_coreheaders) $(purple_builtheaders) $(dbus_exported)
+purple-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(purple_coreheaders) $(addprefix media/, $(purple_mediaheaders)) $(purple_builtheaders) $(dbus_exported)
 	cat $(purple_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --keyword=enum --verbatim > $@
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client --headers >> $@
 
@@ -275,6 +287,7 @@
 
 noinst_HEADERS= \
 	internal.h \
+	media/backend-fs2.h \
 	valgrind.h
 
 libpurpleincludedir=$(includedir)/libpurple
@@ -283,6 +296,10 @@
 	$(purple_builtheaders) \
 	$(dbus_headers)
 
+mediaincludedir=$(includedir)/libpurple/media
+mediainclude_HEADERS = \
+	$(addprefix $(srcdir)/media/, $(purple_mediaheaders))
+
 libpurple_la_DEPENDENCIES = $(STATIC_LINK_LIBS)
 libpurple_la_LDFLAGS = -export-dynamic -version-info $(PURPLE_LT_VERSION_INFO) -no-undefined
 libpurple_la_LIBADD = \
--- a/libpurple/Makefile.mingw	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/Makefile.mingw	Thu Feb 18 21:38:43 2010 +0000
@@ -48,8 +48,8 @@
 			idle.c \
 			imgstore.c \
 			log.c \
+			mediamanager.c \
 			media.c \
-			mediamanager.c \
 			mime.c \
 			nat-pmp.c \
 			network.c \
--- a/libpurple/account.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/account.c	Thu Feb 18 21:38:43 2010 +0000
@@ -2036,6 +2036,42 @@
 	return account->gc;
 }
 
+const gchar *
+purple_account_get_name_for_display(const PurpleAccount *account)
+{
+	PurpleBuddy *self = NULL;
+	PurpleConnection *gc = NULL;
+	const gchar *name = NULL, *username = NULL, *displayname = NULL;
+
+	name = purple_account_get_alias(account);
+
+	if (name) {
+		return name;
+	}
+
+	username = purple_account_get_username(account);
+	self = purple_find_buddy((PurpleAccount *)account, username);
+
+	if (self) {
+		const gchar *calias= purple_buddy_get_contact_alias(self);
+
+		/* We don't want to return the buddy name if the buddy/contact
+		 * doesn't have an alias set. */
+		if (!purple_strequal(username, calias)) {
+			return calias;
+		}
+	}
+
+	gc = purple_account_get_connection(account);
+	displayname = purple_connection_get_display_name(gc);
+
+	if (displayname) {
+		return displayname;
+	}
+
+	return username;
+}
+
 gboolean
 purple_account_get_remember_password(const PurpleAccount *account)
 {
@@ -2708,11 +2744,12 @@
 	char *who;
 
 	g_return_val_if_fail(name != NULL, NULL);
+	g_return_val_if_fail(protocol_id != NULL, NULL);
 
 	for (l = purple_accounts_get_all(); l != NULL; l = l->next) {
 		account = (PurpleAccount *)l->data;
-		if (protocol_id && !purple_strequal(account->protocol_id, protocol_id))
-		  continue;
+		if (!purple_strequal(account->protocol_id, protocol_id))
+			continue;
 
 		who = g_strdup(purple_normalize(account, name));
 		if (purple_strequal(purple_normalize(account, purple_account_get_username(account)), who)) {
--- a/libpurple/account.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/account.h	Thu Feb 18 21:38:43 2010 +0000
@@ -630,6 +630,20 @@
 PurpleConnection *purple_account_get_connection(const PurpleAccount *account);
 
 /**
+ * Returns a name for this account appropriate for display to the user. In
+ * order of preference: the account's alias; the contact or buddy alias (if
+ * the account exists on its own buddy list); the connection's display name;
+ * the account's username.
+ *
+ * @param account The account.
+ *
+ * @return The name to display.
+ *
+ * @since 2.7.0
+ */
+const gchar *purple_account_get_name_for_display(const PurpleAccount *account);
+
+/**
  * Returns whether or not this account should save its password.
  *
  * @param account The account.
--- a/libpurple/blist.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/blist.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1739,6 +1739,14 @@
 	g_free(contact);
 }
 
+PurpleGroup *
+purple_contact_get_group(const PurpleContact *contact)
+{
+	g_return_val_if_fail(contact, NULL);
+
+	return (PurpleGroup *)(((PurpleBlistNode *)contact)->parent);
+}
+
 void purple_contact_set_alias(PurpleContact *contact, const char *alias)
 {
 	purple_blist_alias_contact(contact,alias);
@@ -2605,6 +2613,18 @@
 	return buddy->presence;
 }
 
+PurpleMediaCaps purple_buddy_get_media_caps(const PurpleBuddy *buddy)
+{
+	g_return_val_if_fail(buddy != NULL, 0);
+	return buddy->media_caps;
+}
+
+void purple_buddy_set_media_caps(PurpleBuddy *buddy, PurpleMediaCaps media_caps)
+{
+	g_return_if_fail(buddy != NULL);
+	buddy->media_caps = media_caps;
+}
+
 PurpleGroup *purple_buddy_get_group(PurpleBuddy *buddy)
 {
 	g_return_val_if_fail(buddy != NULL, NULL);
@@ -3187,6 +3207,13 @@
 										PURPLE_SUBTYPE_BLIST_NODE),
 						 purple_value_new(PURPLE_TYPE_STRING));
 
+	purple_signal_register(handle, "buddy-caps-changed",
+			purple_marshal_VOID__POINTER_INT_INT, NULL,
+			3, purple_value_new(PURPLE_TYPE_SUBTYPE,
+				PURPLE_SUBTYPE_BLIST_BUDDY),
+			purple_value_new(PURPLE_TYPE_INT),
+			purple_value_new(PURPLE_TYPE_INT));
+
 	purple_signal_connect(purple_accounts_get_handle(), "account-created",
 			handle,
 			PURPLE_CALLBACK(purple_blist_buddies_cache_add_account),
--- a/libpurple/blist.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/blist.h	Thu Feb 18 21:38:43 2010 +0000
@@ -108,6 +108,7 @@
 
 #include "account.h"
 #include "buddyicon.h"
+#include "media.h"
 #include "status.h"
 
 /**************************************************************************/
@@ -143,6 +144,7 @@
 	PurpleBuddyIcon *icon;                    /**< The buddy icon. */
 	PurpleAccount *account;					/**< the account this buddy belongs to */
 	PurplePresence *presence;
+	PurpleMediaCaps media_caps;		/**< The media capabilities of the buddy. */
 };
 
 /**
@@ -657,6 +659,24 @@
 PurplePresence *purple_buddy_get_presence(const PurpleBuddy *buddy);
 
 /**
+ * Gets the media caps from a buddy.
+ *
+ * @param buddy The buddy.
+ * @return      The media caps.
+ *
+ * @since 2.7.0
+ */
+PurpleMediaCaps purple_buddy_get_media_caps(const PurpleBuddy *buddy);
+
+/**
+ * Sets the media caps for a buddy.
+ *
+ * @param buddy      The PurpleBuddy.
+ * @param media_caps The PurpleMediaCaps.
+ */
+void purple_buddy_set_media_caps(PurpleBuddy *buddy, PurpleMediaCaps media_caps);
+
+/**
  * Adds a new buddy to the buddy list.
  *
  * The buddy will be inserted right after node or prepended to the
@@ -715,6 +735,16 @@
 void purple_contact_destroy(PurpleContact *contact);
 
 /**
+ * Gets the PurpleGroup from a PurpleContact
+ *
+ * @param contact  The contact
+ * @return         The group
+ *
+ * @since 2.7.0
+ */
+PurpleGroup *purple_contact_get_group(const PurpleContact *contact);
+
+/**
  * Adds a new contact to the buddy list.
  *
  * The new contact will be inserted after insert or prepended to the list if
--- a/libpurple/certificate.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/certificate.c	Thu Feb 18 21:38:43 2010 +0000
@@ -874,7 +874,6 @@
 #else
 # ifdef SSL_CERTIFICATES_DIR
 		x509_ca_paths = g_list_append(NULL, g_strdup(SSL_CERTIFICATES_DIR));
-# else
 # endif
 		x509_ca_paths = g_list_append(x509_ca_paths,
 			g_build_filename(DATADIR, "purple", "ca-certs", NULL));
--- a/libpurple/connection.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/connection.h	Thu Feb 18 21:38:43 2010 +0000
@@ -45,7 +45,7 @@
 	PURPLE_CONNECTION_NO_URLDESC = 0x0040,  /**< Connection does not support descriptions with links */
 	PURPLE_CONNECTION_NO_IMAGES = 0x0080,  /**< Connection does not support sending of images */
 	PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100 /**< Connection supports sending and receiving custom smileys */
-
+	
 } PurpleConnectionFlags;
 
 typedef enum
--- a/libpurple/conversation.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/conversation.c	Thu Feb 18 21:38:43 2010 +0000
@@ -2302,7 +2302,27 @@
 						 purple_value_new(PURPLE_TYPE_SUBTYPE,
 										PURPLE_SUBTYPE_CONVERSATION),
 						 purple_value_new(PURPLE_TYPE_UINT));
-
+	
+	purple_signal_register(handle, "sent-attention",
+						 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT,
+						 NULL, 4,
+						 purple_value_new(PURPLE_TYPE_SUBTYPE,
+										PURPLE_SUBTYPE_ACCOUNT),
+						 purple_value_new(PURPLE_TYPE_STRING),
+						 purple_value_new(PURPLE_TYPE_SUBTYPE,
+										PURPLE_SUBTYPE_CONVERSATION),
+						 purple_value_new(PURPLE_TYPE_UINT));
+	
+	purple_signal_register(handle, "got-attention",
+						 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT,
+						 NULL, 4,
+						 purple_value_new(PURPLE_TYPE_SUBTYPE,
+										PURPLE_SUBTYPE_ACCOUNT),
+						 purple_value_new(PURPLE_TYPE_STRING),
+						 purple_value_new(PURPLE_TYPE_SUBTYPE,
+										PURPLE_SUBTYPE_CONVERSATION),
+						 purple_value_new(PURPLE_TYPE_UINT));
+	
 	purple_signal_register(handle, "sending-im-msg",
 						 purple_marshal_VOID__POINTER_POINTER_POINTER,
 						 NULL, 3,
--- a/libpurple/conversation.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/conversation.h	Thu Feb 18 21:38:43 2010 +0000
@@ -646,7 +646,6 @@
 		const char *message, PurpleMessageFlags flags,
 		time_t mtime);
 
-
 /**
 	Set the features as supported for the given conversation.
 	@param conv      The conversation
--- a/libpurple/core.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/core.c	Thu Feb 18 21:38:43 2010 +0000
@@ -496,7 +496,6 @@
 			if (purple_strequal(entry, "logs"))
 			{
 				char *link;
-#if GLIB_CHECK_VERSION(2,4,0)
 				err = NULL;
 
 				if ((link = g_file_read_link(name, &err)) == NULL)
@@ -512,27 +511,6 @@
 					g_free(old_user_dir);
 					return FALSE;
 				}
-#else
-				char buf[MAXPATHLEN];
-				size_t linklen;
-
-				if ((linklen = readlink(name, buf, sizeof(buf) - 1) == -1))
-				{
-					char *name_utf8 = g_filename_to_utf8(name, -1, NULL, NULL, NULL);
-					purple_debug_error("core", "Error reading symlink %s: %s. Please report this at " PURPLE_DEVEL_WEBSITE "\n",
-					                   name_utf8, g_strerror(errno));
-					g_free(name_utf8);
-					g_free(name);
-					g_dir_close(dir);
-					g_free(status_file);
-					g_free(old_user_dir);
-					return FALSE;
-				}
-				buf[linklen] = '\0';
-
-				/* This way we don't have to GLIB_VERSION_CHECK every g_free(link) below. */
-				link = g_strdup(buf);
-#endif
 
 				logs_dir = g_build_filename(user_dir, "logs", NULL);
 
--- a/libpurple/ft.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/ft.c	Thu Feb 18 21:38:43 2010 +0000
@@ -57,6 +57,7 @@
 		PURPLE_XFER_READY_UI   = 0x1,
 		PURPLE_XFER_READY_PRPL = 0x2,
 	} ready;
+	GByteArray *buffer;
 } PurpleXferPrivData;
 
 static int purple_xfer_choose_file(PurpleXfer *xfer);
@@ -66,6 +67,9 @@
 {
 	PurpleXferPrivData *priv = data;
 
+	if (priv->buffer)
+		g_byte_array_free(priv->buffer, TRUE);
+
 	g_free(priv);
 }
 
@@ -117,7 +121,7 @@
 	xfer->type    = type;
 	xfer->account = account;
 	xfer->who     = g_strdup(who);
-	xfer->ui_ops  = purple_xfers_get_ui_ops();
+	xfer->ui_ops  = ui_ops = purple_xfers_get_ui_ops();
 	xfer->message = NULL;
 	xfer->current_buffer_size = FT_INITIAL_BUFFER_SIZE;
 	xfer->fd = -1;
@@ -125,6 +129,13 @@
 	priv = g_new0(PurpleXferPrivData, 1);
 	priv->ready = PURPLE_XFER_READY_NONE;
 
+	if (ui_ops && ui_ops->data_not_sent) {
+		/* If the ui will handle unsent data no need for buffer */
+		priv->buffer = NULL;
+	} else {
+		priv->buffer = g_byte_array_sized_new(FT_INITIAL_BUFFER_SIZE);
+	}
+
 	g_hash_table_insert(xfers_data, xfer, priv);
 
 	ui_ops = purple_xfer_get_ui_ops(xfer);
@@ -1076,6 +1087,7 @@
 	} else if (xfer->type == PURPLE_XFER_SEND) {
 		size_t result;
 		size_t s = MIN(purple_xfer_get_bytes_remaining(xfer), xfer->current_buffer_size);
+		PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer);
 
 		/* this is so the prpl can keep the connection open
 		   if it needs to for some odd reason. */
@@ -1090,8 +1102,6 @@
 		if (ui_ops && ui_ops->ui_read) {
 			gssize tmp = ui_ops->ui_read(xfer, &buffer, s);
 			if (tmp == 0) {
-				PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer);
-
 				/*
 				 * The UI claimed it was ready, but didn't have any data for
 				 * us...  It will call purple_xfer_ui_ready when ready, which
@@ -1105,7 +1115,13 @@
 				/* Need to indicate the prpl is still ready... */
 				priv->ready |= PURPLE_XFER_READY_PRPL;
 
-				g_return_if_reached();
+				/*
+				 * if we requested 0 bytes it's only normal that end up here 
+				 * we shouldn't return as we still have something to 
+				 * write in priv->buffer
+				 */
+				if (s != 0)
+					g_return_if_reached();
 			} else if (tmp < 0) {
 				purple_debug_error("filetransfer", "Unable to read whole buffer.\n");
 				purple_xfer_cancel_local(xfer);
@@ -1123,29 +1139,40 @@
 				return;
 			}
 		}
-
-		/* Write as much as we're allowed to. */
+	
+		if (priv->buffer) {
+			priv->buffer = g_byte_array_append(priv->buffer, buffer, result);
+			g_free(buffer);
+			buffer = priv->buffer->data;
+			result = priv->buffer->len;
+		}
+	
 		r = purple_xfer_write(xfer, buffer, result);
 
 		if (r == -1) {
 			purple_xfer_cancel_remote(xfer);
 			g_free(buffer);
 			return;
-		} else if (r < result) {
-			if (ui_ops == NULL || (ui_ops->ui_read == NULL && ui_ops->ui_write == NULL)) {
-				/* We have to seek back in the file now. */
-				fseek(xfer->dest_fp, r - s, SEEK_CUR);
-			}
-			else {
-				ui_ops->data_not_sent(xfer, buffer + r, result - r);
-			}
-		} else {
+		} else if (r == result) {
 			/*
 			 * We managed to write the entire buffer.  This means our
 			 * network is fast and our buffer is too small, so make it
 			 * bigger.
 			 */
 			purple_xfer_increase_buffer_size(xfer);
+		} else {
+			if (ui_ops && ui_ops->data_not_sent) 
+				ui_ops->data_not_sent(xfer, buffer + r, result -r);
+		}
+
+		if (priv->buffer) {
+			/* 
+			 * Remove what we wrote
+			 * If we wrote the whole buffer the byte array will be empty
+			 * Otherwise we'll kee what wasn't sent for next time.
+			 */
+			buffer = NULL;
+			priv->buffer = g_byte_array_remove_range(priv->buffer, 0, r);
 		}
 	}
 
--- a/libpurple/internal.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/internal.h	Thu Feb 18 21:38:43 2010 +0000
@@ -118,36 +118,13 @@
 # include <unistd.h>
 #endif
 
-/* MAXPATHLEN should only be used with readlink() on glib < 2.4.0.  For
- * anything else, use g_file_read_link() or other dynamic functions.  This is
- * important because Hurd has no hard limits on path length. */
-#if !GLIB_CHECK_VERSION(2,4,0)
-# ifndef MAXPATHLEN
-#  ifdef PATH_MAX
-#   define MAXPATHLEN PATH_MAX
-#  else
-#   define MAXPATHLEN 1024
-#  endif
-# endif
-#endif
-
 #ifndef HOST_NAME_MAX
 # define HOST_NAME_MAX 255
 #endif
 
 #include <glib.h>
-#if !GLIB_CHECK_VERSION(2,4,0)
-#	define G_MAXUINT32 ((guint32) 0xffffffff)
-#endif
 
-#ifndef G_MAXSIZE
-#	if GLIB_SIZEOF_LONG == 8
-#		define G_MAXSIZE ((gsize) 0xffffffffffffffff)
-#	else
-#		define G_MAXSIZE ((gsize) 0xffffffff)
-#	endif
-#endif
-
+/* This wasn't introduced until Glib 2.14 :( */
 #ifndef G_MAXSSIZE
 #	if GLIB_SIZEOF_LONG == 8
 #		define G_MAXSSIZE ((gssize) 0x7fffffffffffffff)
@@ -156,80 +133,12 @@
 #	endif
 #endif
 
-#if GLIB_CHECK_VERSION(2,6,0)
-#	include <glib/gstdio.h>
-#endif
-
-#if !GLIB_CHECK_VERSION(2,6,0)
-#	define g_freopen freopen
-#	define g_fopen fopen
-#	define g_rmdir rmdir
-#	define g_remove remove
-#	define g_unlink unlink
-#	define g_lstat lstat
-#	define g_stat stat
-#	define g_mkdir mkdir
-#	define g_rename rename
-#	define g_open open
-#endif
-
-#if !GLIB_CHECK_VERSION(2,8,0) && !defined _WIN32
-#	define g_access access
-#endif
-
-#if !GLIB_CHECK_VERSION(2,10,0)
-#	define g_slice_new(type) g_new(type, 1)
-#	define g_slice_new0(type) g_new0(type, 1)
-#	define g_slice_free(type, mem) g_free(mem)
-#endif
+#include <glib/gstdio.h>
 
 #ifdef _WIN32
 #include "win32dep.h"
 #endif
 
-/* ugly ugly ugly */
-/* This is a workaround for the fact that G_GINT64_MODIFIER and G_GSIZE_FORMAT
- * are only defined in Glib >= 2.4 */
-#ifndef G_GINT64_MODIFIER
-#	if GLIB_SIZEOF_LONG == 8
-#		define G_GINT64_MODIFIER "l"
-#	else
-#		define G_GINT64_MODIFIER "ll"
-#	endif
-#endif
-
-#ifndef G_GSIZE_MODIFIER
-#	if GLIB_SIZEOF_LONG == 8
-#		define G_GSIZE_MODIFIER "l"
-#	else
-#		define G_GSIZE_MODIFIER ""
-#	endif
-#endif
-
-#ifndef G_GSIZE_FORMAT
-#	if GLIB_SIZEOF_LONG == 8
-#		define G_GSIZE_FORMAT "lu"
-#	else
-#		define G_GSIZE_FORMAT "u"
-#	endif
-#endif
-
-#ifndef G_GSSIZE_FORMAT
-#	if GLIB_SIZEOF_LONG == 8
-#		define G_GSSIZE_FORMAT "li"
-#	else
-#		define G_GSSIZE_FORMAT "i"
-#	endif
-#endif
-
-#ifndef G_GNUC_NULL_TERMINATED
-#	if     __GNUC__ >= 4
-#		define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
-#	else
-#		define G_GNUC_NULL_TERMINATED
-#	endif
-#endif
-
 #ifdef HAVE_CONFIG_H
 #if SIZEOF_TIME_T == 4
 #	define PURPLE_TIME_T_MODIFIER "lu"
@@ -242,38 +151,6 @@
 
 #include <glib-object.h>
 
-#ifndef G_DEFINE_TYPE
-#define G_DEFINE_TYPE(TypeName, type_name, TYPE_PARENT) \
-\
-static void     type_name##_init              (TypeName        *self); \
-static void     type_name##_class_init        (TypeName##Class *klass); \
-static gpointer type_name##_parent_class = NULL; \
-static void     type_name##_class_intern_init (gpointer klass) \
-{ \
-  type_name##_parent_class = g_type_class_peek_parent (klass); \
-  type_name##_class_init ((TypeName##Class*) klass); \
-} \
-\
-GType \
-type_name##_get_type (void) \
-{ \
-  static GType g_define_type_id = 0; \
-  if (G_UNLIKELY (g_define_type_id == 0)) \
-    { \
-      g_define_type_id = \
-        g_type_register_static_simple (TYPE_PARENT, \
-                                       g_intern_static_string (#TypeName), \
-                                       sizeof (TypeName##Class), \
-                                       (GClassInitFunc)type_name##_class_intern_init, \
-                                       sizeof (TypeName), \
-                                       (GInstanceInitFunc)type_name##_init, \
-                                       (GTypeFlags) 0); \
-    }					\
-  return g_define_type_id;		\
-} /* closes type_name##_get_type() */
-
-#endif
-
 /* Safer ways to work with static buffers. When using non-static
  * buffers, either use g_strdup_* functions (preferred) or use
  * g_strlcpy/g_strlcpy directly. */
--- a/libpurple/marshallers.list	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/marshallers.list	Thu Feb 18 21:38:43 2010 +0000
@@ -4,3 +4,5 @@
 VOID:STRING,STRING,DOUBLE
 VOID:ENUM,STRING,STRING
 VOID:ENUM,STRING,STRING,BOOLEAN
+VOID:FLAGS,FLAGS
+VOID:STRING,STRING,OBJECT,OBJECT
--- a/libpurple/media.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/media.c	Thu Feb 18 21:38:43 2010 +0000
@@ -23,26 +23,23 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
-
 #include "internal.h"
 
 #include "account.h"
 #include "media.h"
+#include "media/backend-iface.h"
 #include "mediamanager.h"
-#include "network.h"
 
 #include "debug.h"
 
 #ifdef USE_GSTREAMER
+#include "media/backend-fs2.h"
 #include "marshallers.h"
 #include "media-gst.h"
 #endif
 
 #ifdef USE_VV
 
-#include <gst/farsight/fs-conference-iface.h>
-#include <gst/farsight/fs-element-added-notifier.h>
-
 /** @copydoc _PurpleMediaSession */
 typedef struct _PurpleMediaSession PurpleMediaSession;
 /** @copydoc _PurpleMediaStream */
@@ -51,14 +48,6 @@
 typedef struct _PurpleMediaClass PurpleMediaClass;
 /** @copydoc _PurpleMediaPrivate */
 typedef struct _PurpleMediaPrivate PurpleMediaPrivate;
-/** @copydoc _PurpleMediaCandidateClass */
-typedef struct _PurpleMediaCandidateClass PurpleMediaCandidateClass;
-/** @copydoc _PurpleMediaCandidatePrivate */
-typedef struct _PurpleMediaCandidatePrivate PurpleMediaCandidatePrivate;
-/** @copydoc _PurpleMediaCodecClass */
-typedef struct _PurpleMediaCodecClass PurpleMediaCodecClass;
-/** @copydoc _PurpleMediaCodecPrivate */
-typedef struct _PurpleMediaCodecPrivate PurpleMediaCodecPrivate;
 
 /** The media class */
 struct _PurpleMediaClass
@@ -77,10 +66,6 @@
 {
 	gchar *id;
 	PurpleMedia *media;
-	GstElement *src;
-	GstElement *tee;
-	FsSession *session;
-
 	PurpleMediaSessionType type;
 	gboolean initiator;
 };
@@ -89,11 +74,6 @@
 {
 	PurpleMediaSession *session;
 	gchar *participant;
-	FsStream *stream;
-	GstElement *src;
-	GstElement *tee;
-	GstElement *volume;
-	GstElement *level;
 
 	GList *local_candidates;
 	GList *remote_candidates;
@@ -101,13 +81,9 @@
 	gboolean initiator;
 	gboolean accepted;
 	gboolean candidates_prepared;
-	gboolean held;
-	gboolean paused;
 
 	GList *active_local_candidates;
 	GList *active_remote_candidates;
-
-	guint connected_cb_id;
 };
 #endif
 
@@ -116,16 +92,14 @@
 #ifdef USE_VV
 	PurpleMediaManager *manager;
 	PurpleAccount *account;
-	FsConference *conference;
+	PurpleMediaBackend *backend;
+	gchar *conference_type;
 	gboolean initiator;
 	gpointer prpl_data;
 
 	GHashTable *sessions;	/* PurpleMediaSession table */
-	GHashTable *participants; /* FsParticipant table */
-
+	GList *participants;
 	GList *streams;		/* PurpleMediaStream table */
-
-	GstElement *confbin;
 #else
 	gpointer dummy;
 #endif
@@ -133,8 +107,6 @@
 
 #ifdef USE_VV
 #define PURPLE_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA, PurpleMediaPrivate))
-#define PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidatePrivate))
-#define PURPLE_MEDIA_CODEC_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodecPrivate))
 
 static void purple_media_class_init (PurpleMediaClass *klass);
 static void purple_media_init (PurpleMedia *media);
@@ -143,15 +115,19 @@
 static void purple_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 static void purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
 
-static void purple_media_new_local_candidate_cb(FsStream *stream,
-		FsCandidate *local_candidate, PurpleMediaSession *session);
-static void purple_media_candidates_prepared_cb(FsStream *stream,
-		PurpleMediaSession *session);
-static void purple_media_candidate_pair_established_cb(FsStream *stream,
-		FsCandidate *native_candidate, FsCandidate *remote_candidate,
-		PurpleMediaSession *session);
-static gboolean media_bus_call(GstBus *bus,
-		GstMessage *msg, PurpleMedia *media);
+static void purple_media_new_local_candidate_cb(PurpleMediaBackend *backend,
+		const gchar *sess_id, const gchar *participant,
+		PurpleMediaCandidate *candidate, PurpleMedia *media);
+static void purple_media_candidates_prepared_cb(PurpleMediaBackend *backend,
+		const gchar *sess_id, const gchar *name, PurpleMedia *media);
+static void purple_media_candidate_pair_established_cb(
+		PurpleMediaBackend *backend,
+		const gchar *sess_id, const gchar *name,
+		PurpleMediaCandidate *local_candidate,
+		PurpleMediaCandidate *remote_candidate,
+		PurpleMedia *media);
+static void purple_media_codecs_changed_cb(PurpleMediaBackend *backend,
+		const gchar *sess_id, PurpleMedia *media);
 
 static GObjectClass *parent_class = NULL;
 
@@ -172,46 +148,15 @@
 enum {
 	PROP_0,
 	PROP_MANAGER,
+	PROP_BACKEND,
 	PROP_ACCOUNT,
-	PROP_CONFERENCE,
+	PROP_CONFERENCE_TYPE,
 	PROP_INITIATOR,
 	PROP_PRPL_DATA,
 };
 #endif
 
 
-/*
- * PurpleMediaElementType
- */
-
-GType
-purple_media_session_type_get_type()
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GFlagsValue values[] = {
-			{ PURPLE_MEDIA_NONE,
-				"PURPLE_MEDIA_NONE", "none" },
-			{ PURPLE_MEDIA_RECV_AUDIO,
-				"PURPLE_MEDIA_RECV_AUDIO", "recv-audio" },
-			{ PURPLE_MEDIA_SEND_AUDIO,
-				"PURPLE_MEDIA_SEND_AUDIO", "send-audio" },
-			{ PURPLE_MEDIA_RECV_VIDEO,
-				"PURPLE_MEDIA_RECV_VIDEO", "recv-video" },
-			{ PURPLE_MEDIA_SEND_VIDEO,
-				"PURPLE_MEDIA_SEND_VIDEO", "send-audio" },
-			{ PURPLE_MEDIA_AUDIO,
-				"PURPLE_MEDIA_AUDIO", "audio" },
-			{ PURPLE_MEDIA_VIDEO,
-				"PURPLE_MEDIA_VIDEO", "video" },
-			{ 0, NULL, NULL }
-		};
-		type = g_flags_register_static(
-				"PurpleMediaSessionType", values);
-	}
-	return type;
-}
-
 GType
 purple_media_get_type()
 {
@@ -239,56 +184,6 @@
 #endif
 }
 
-GType
-purple_media_state_changed_get_type()
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GEnumValue values[] = {
-			{ PURPLE_MEDIA_STATE_NEW,
-				"PURPLE_MEDIA_STATE_NEW", "new" },
-			{ PURPLE_MEDIA_STATE_CONNECTED,
-				"PURPLE_MEDIA_STATE_CONNECTED", "connected" },
-			{ PURPLE_MEDIA_STATE_END,
-				"PURPLE_MEDIA_STATE_END", "end" },
-			{ 0, NULL, NULL }
-		};
-		type = g_enum_register_static("PurpleMediaState", values);
-	}
-	return type;
-}
-
-GType
-purple_media_info_type_get_type()
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GEnumValue values[] = {
-			{ PURPLE_MEDIA_INFO_HANGUP,
-					"PURPLE_MEDIA_INFO_HANGUP", "hangup" },
-			{ PURPLE_MEDIA_INFO_ACCEPT,
-					"PURPLE_MEDIA_INFO_ACCEPT", "accept" },
-			{ PURPLE_MEDIA_INFO_REJECT,
-					"PURPLE_MEDIA_INFO_REJECT", "reject" },
-			{ PURPLE_MEDIA_INFO_MUTE,
-					"PURPLE_MEDIA_INFO_MUTE", "mute" },
-			{ PURPLE_MEDIA_INFO_UNMUTE,
-					"PURPLE_MEDIA_INFO_UNMUTE", "unmute" },
-			{ PURPLE_MEDIA_INFO_PAUSE,
-					"PURPLE_MEDIA_INFO_PAUSE", "pause" },
-			{ PURPLE_MEDIA_INFO_UNPAUSE,
-					"PURPLE_MEDIA_INFO_UNPAUSE", "unpause" },
-			{ PURPLE_MEDIA_INFO_HOLD,
-					"PURPLE_MEDIA_INFO_HOLD", "hold" },
-			{ PURPLE_MEDIA_INFO_UNHOLD,
-					"PURPLE_MEDIA_INFO_UNHOLD", "unhold" },
-			{ 0, NULL, NULL }
-		};
-		type = g_enum_register_static("PurpleMediaInfoType", values);
-	}
-	return type;
-}
-
 #ifdef USE_VV
 static void
 purple_media_class_init (PurpleMediaClass *klass)
@@ -308,18 +203,30 @@
 			PURPLE_TYPE_MEDIA_MANAGER,
 			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
 
+	/*
+	 * This one should be PURPLE_TYPE_MEDIA_BACKEND, but it doesn't
+	 * like interfaces because they "aren't GObjects"
+	 */
+	g_object_class_install_property(gobject_class, PROP_BACKEND,
+			g_param_spec_object("backend",
+			"Purple Media Backend",
+			"The backend object this media object uses.",
+			G_TYPE_OBJECT,
+			G_PARAM_READABLE));
+
 	g_object_class_install_property(gobject_class, PROP_ACCOUNT,
 			g_param_spec_pointer("account",
 			"PurpleAccount",
 			"The account this media session is on.",
 			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
 
-	g_object_class_install_property(gobject_class, PROP_CONFERENCE,
-			g_param_spec_object("conference",
-			"Farsight conference",
-			"The FsConference associated with this media.",
-			FS_TYPE_CONFERENCE,
-			G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+	g_object_class_install_property(gobject_class, PROP_CONFERENCE_TYPE,
+			g_param_spec_string("conference-type",
+			"Conference Type",
+			"The type of conference that this media object "
+			"has been created to provide.",
+			NULL,
+			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
 
 	g_object_class_install_property(gobject_class, PROP_INITIATOR,
 			g_param_spec_boolean("initiator",
@@ -384,21 +291,19 @@
 	if (stream == NULL)
 		return;
 
-	/* Remove the connected_cb timeout */
-	if (stream->connected_cb_id != 0)
-		purple_timeout_remove(stream->connected_cb_id);
-
 	g_free(stream->participant);
 
 	if (stream->local_candidates)
-		fs_candidate_list_destroy(stream->local_candidates);
+		purple_media_candidate_list_free(stream->local_candidates);
 	if (stream->remote_candidates)
-		fs_candidate_list_destroy(stream->remote_candidates);
+		purple_media_candidate_list_free(stream->remote_candidates);
 
 	if (stream->active_local_candidates)
-		fs_candidate_list_destroy(stream->active_local_candidates);
+		purple_media_candidate_list_free(
+				stream->active_local_candidates);
 	if (stream->active_remote_candidates)
-		fs_candidate_list_destroy(stream->active_remote_candidates);
+		purple_media_candidate_list_free(
+				stream->active_remote_candidates);
 
 	g_free(stream);
 }
@@ -417,56 +322,17 @@
 purple_media_dispose(GObject *media)
 {
 	PurpleMediaPrivate *priv = PURPLE_MEDIA_GET_PRIVATE(media);
-	GList *iter = NULL;
 
 	purple_debug_info("media","purple_media_dispose\n");
 
 	purple_media_manager_remove_media(priv->manager, PURPLE_MEDIA(media));
 
-	if (priv->confbin) {
-		gst_element_set_locked_state(priv->confbin, TRUE);
-		gst_element_set_state(GST_ELEMENT(priv->confbin),
-				GST_STATE_NULL);
-		gst_bin_remove(GST_BIN(purple_media_manager_get_pipeline(
-				priv->manager)), priv->confbin);
-		priv->confbin = NULL;
-		priv->conference = NULL;
-	}
-
-	for (iter = priv->streams; iter; iter = g_list_next(iter)) {
-		PurpleMediaStream *stream = iter->data;
-		if (stream->stream) {
-			g_object_unref(stream->stream);
-			stream->stream = NULL;
-		}
-	}
-
-	if (priv->sessions) {
-		GList *sessions = g_hash_table_get_values(priv->sessions);
-		for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
-			PurpleMediaSession *session = sessions->data;
-			if (session->session) {
-				g_object_unref(session->session);
-				session->session = NULL;
-			}
-		}
-	}
-
-	if (priv->participants) {
-		GList *participants = g_hash_table_get_values(priv->participants);
-		for (; participants; participants = g_list_delete_link(participants, participants))
-			g_object_unref(participants->data);
+	if (priv->backend) {
+		g_object_unref(priv->backend);
+		priv->backend = NULL;
 	}
 
 	if (priv->manager) {
-		GstElement *pipeline = purple_media_manager_get_pipeline(
-				priv->manager);
-		GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
-		g_signal_handlers_disconnect_matched(G_OBJECT(bus),
-				G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
-				0, 0, 0, media_bus_call, media);
-		gst_object_unref(bus);
-
 		g_object_unref(priv->manager);
 		priv->manager = NULL;
 	}
@@ -483,6 +349,10 @@
 	for (; priv->streams; priv->streams = g_list_delete_link(priv->streams, priv->streams))
 		purple_media_stream_free(priv->streams->data);
 
+	for (; priv->participants; priv->participants = g_list_delete_link(
+			priv->participants, priv->participants))
+		g_free(priv->participants->data);
+
 	if (priv->sessions) {
 		GList *sessions = g_hash_table_get_values(priv->sessions);
 		for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
@@ -495,36 +365,6 @@
 }
 
 static void
-purple_media_setup_pipeline(PurpleMedia *media)
-{
-	GstBus *bus;
-	gchar *name;
-	GstElement *pipeline;
-
-	if (media->priv->conference == NULL || media->priv->manager == NULL)
-		return;
-
-	pipeline = purple_media_manager_get_pipeline(media->priv->manager);
-
-	name = g_strdup_printf("conf_%p",
-			media->priv->conference);
-	media->priv->confbin = gst_bin_new(name);
-	g_free(name);
-
-	bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
-	g_signal_connect(G_OBJECT(bus), "message",
-			G_CALLBACK(media_bus_call), media);
-	gst_object_unref(bus);
-
-	gst_bin_add(GST_BIN(pipeline),
-			media->priv->confbin);
-	gst_bin_add(GST_BIN(media->priv->confbin),
-			GST_ELEMENT(media->priv->conference));
-	gst_element_set_state(GST_ELEMENT(media->priv->confbin),
-			GST_STATE_PLAYING);
-}
-
-static void
 purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
 	PurpleMedia *media;
@@ -534,23 +374,42 @@
 
 	switch (prop_id) {
 		case PROP_MANAGER:
-			media->priv->manager = g_value_get_object(value);
-			g_object_ref(media->priv->manager);
-
-			purple_media_setup_pipeline(media);
+			media->priv->manager = g_value_dup_object(value);
 			break;
 		case PROP_ACCOUNT:
 			media->priv->account = g_value_get_pointer(value);
 			break;
-		case PROP_CONFERENCE: {
-			if (media->priv->conference)
-				gst_object_unref(media->priv->conference);
-			media->priv->conference = g_value_get_object(value);
-			gst_object_ref(media->priv->conference);
-
-			purple_media_setup_pipeline(media);
+		case PROP_CONFERENCE_TYPE:
+			media->priv->conference_type =
+					g_value_dup_string(value);
+			media->priv->backend = g_object_new(
+					purple_media_manager_get_backend_type(
+					purple_media_manager_get()),
+					"conference-type",
+					media->priv->conference_type,
+					"media", media,
+					NULL);
+			g_signal_connect(media->priv->backend,
+					"active-candidate-pair",
+					G_CALLBACK(
+					purple_media_candidate_pair_established_cb),
+					media);
+			g_signal_connect(media->priv->backend,
+					"candidates-prepared",
+					G_CALLBACK(
+					purple_media_candidates_prepared_cb),
+					media);
+			g_signal_connect(media->priv->backend,
+					"codecs-changed",
+					G_CALLBACK(
+					purple_media_codecs_changed_cb),
+					media);
+			g_signal_connect(media->priv->backend,
+					"new-candidate",
+					G_CALLBACK(
+					purple_media_new_local_candidate_cb),
+					media);
 			break;
-		}
 		case PROP_INITIATOR:
 			media->priv->initiator = g_value_get_boolean(value);
 			break;
@@ -575,11 +434,15 @@
 		case PROP_MANAGER:
 			g_value_set_object(value, media->priv->manager);
 			break;
+		case PROP_BACKEND:
+			g_value_set_object(value, media->priv->backend);
+			break;
 		case PROP_ACCOUNT:
 			g_value_set_pointer(value, media->priv->account);
 			break;
-		case PROP_CONFERENCE:
-			g_value_set_object(value, media->priv->conference);
+		case PROP_CONFERENCE_TYPE:
+			g_value_set_string(value,
+					media->priv->conference_type);
 			break;
 		case PROP_INITIATOR:
 			g_value_set_boolean(value, media->priv->initiator);
@@ -593,1127 +456,7 @@
 	}
 
 }
-#endif
 
-/*
- * PurpleMediaCandidateType
- */
-
-GType
-purple_media_candidate_type_get_type()
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GEnumValue values[] = {
-			{ PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
-					"PURPLE_MEDIA_CANDIDATE_TYPE_HOST",
-					"host" },
-			{ PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
-					"PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX",
-					"srflx" },
-			{ PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
-					"PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX",
-					"prflx" },
-			{ PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
-					"PPURPLE_MEDIA_CANDIDATE_TYPE_RELAY",
-					"relay" },
-			{ PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST,
-					"PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST",
-					"multicast" },
-			{ 0, NULL, NULL }
-		};
-		type = g_enum_register_static("PurpleMediaCandidateType",
-				values);
-	}
-	return type;
-}
-
-/*
- * PurpleMediaNetworkProtocol
- */
-
-GType
-purple_media_network_protocol_get_type()
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GEnumValue values[] = {
-			{ PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
-					"PURPLE_MEDIA_NETWORK_PROTOCOL_UDP",
-					"udp" },
-			{ PURPLE_MEDIA_NETWORK_PROTOCOL_TCP,
-					"PURPLE_MEDIA_NETWORK_PROTOCOL_TCP",
-					"tcp" },
-			{ 0, NULL, NULL }
-		};
-		type = g_enum_register_static("PurpleMediaNetworkProtocol",
-				values);
-	}
-	return type;
-}
-
-/*
- * PurpleMediaCandidate
- */
-
-struct _PurpleMediaCandidateClass
-{
-	GObjectClass parent_class;
-};
-
-struct _PurpleMediaCandidate
-{
-	GObject parent;
-};
-
-#ifdef USE_VV
-struct _PurpleMediaCandidatePrivate
-{
-	gchar *foundation;
-	guint component_id;
-	gchar *ip;
-	guint16 port;
-	gchar *base_ip;
-	guint16 base_port;
-	PurpleMediaNetworkProtocol proto;
-	guint32 priority;
-	PurpleMediaCandidateType type;
-	gchar *username;
-	gchar *password;
-	guint ttl;
-};
-
-enum {
-	PROP_CANDIDATE_0,
-	PROP_FOUNDATION,
-	PROP_COMPONENT_ID,
-	PROP_IP,
-	PROP_PORT,
-	PROP_BASE_IP,
-	PROP_BASE_PORT,
-	PROP_PROTOCOL,
-	PROP_PRIORITY,
-	PROP_TYPE,
-	PROP_USERNAME,
-	PROP_PASSWORD,
-	PROP_TTL,
-};
-
-static void
-purple_media_candidate_init(PurpleMediaCandidate *info)
-{
-	PurpleMediaCandidatePrivate *priv =
-			PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(info);
-	priv->foundation = NULL;
-	priv->component_id = 0;
-	priv->ip = NULL;
-	priv->port = 0;
-	priv->base_ip = NULL;
-	priv->proto = PURPLE_MEDIA_NETWORK_PROTOCOL_UDP;
-	priv->priority = 0;
-	priv->type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST;
-	priv->username = NULL;
-	priv->password = NULL;
-	priv->ttl = 0;
-}
-
-static void
-purple_media_candidate_finalize(GObject *info)
-{
-	PurpleMediaCandidatePrivate *priv =
-			PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(info);
-
-	g_free(priv->foundation);
-	g_free(priv->ip);
-	g_free(priv->base_ip);
-	g_free(priv->username);
-	g_free(priv->password);
-}
-
-static void
-purple_media_candidate_set_property (GObject *object, guint prop_id,
-		const GValue *value, GParamSpec *pspec)
-{
-	PurpleMediaCandidatePrivate *priv;
-	g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
-
-	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(object);
-
-	switch (prop_id) {
-		case PROP_FOUNDATION:
-			g_free(priv->foundation);
-			priv->foundation = g_value_dup_string(value);
-			break;
-		case PROP_COMPONENT_ID:
-			priv->component_id = g_value_get_uint(value);
-			break;
-		case PROP_IP:
-			g_free(priv->ip);
-			priv->ip = g_value_dup_string(value);
-			break;
-		case PROP_PORT:
-			priv->port = g_value_get_uint(value);
-			break;
-		case PROP_BASE_IP:
-			g_free(priv->base_ip);
-			priv->base_ip = g_value_dup_string(value);
-			break;
-		case PROP_BASE_PORT:
-			priv->base_port = g_value_get_uint(value);
-			break;
-		case PROP_PROTOCOL:
-			priv->proto = g_value_get_enum(value);
-			break;
-		case PROP_PRIORITY:
-			priv->priority = g_value_get_uint(value);
-			break;
-		case PROP_TYPE:
-			priv->type = g_value_get_enum(value);
-			break;
-		case PROP_USERNAME:
-			g_free(priv->username);
-			priv->username = g_value_dup_string(value);
-			break;
-		case PROP_PASSWORD:
-			g_free(priv->password);
-			priv->password = g_value_dup_string(value);
-			break;
-		case PROP_TTL:
-			priv->ttl = g_value_get_uint(value);
-			break;
-		default:	
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(
-					object, prop_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_media_candidate_get_property (GObject *object, guint prop_id,
-		GValue *value, GParamSpec *pspec)
-{
-	PurpleMediaCandidatePrivate *priv;
-	g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
-	
-	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(object);
-
-	switch (prop_id) {
-		case PROP_FOUNDATION:
-			g_value_set_string(value, priv->foundation);
-			break;
-		case PROP_COMPONENT_ID:
-			g_value_set_uint(value, priv->component_id);
-			break;
-		case PROP_IP:
-			g_value_set_string(value, priv->ip);
-			break;
-		case PROP_PORT:
-			g_value_set_uint(value, priv->port);
-			break;
-		case PROP_BASE_IP:
-			g_value_set_string(value, priv->base_ip);
-			break;
-		case PROP_BASE_PORT:
-			g_value_set_uint(value, priv->base_port);
-			break;
-		case PROP_PROTOCOL:
-			g_value_set_enum(value, priv->proto);
-			break;
-		case PROP_PRIORITY:
-			g_value_set_uint(value, priv->priority);
-			break;
-		case PROP_TYPE:
-			g_value_set_enum(value, priv->type);
-			break;
-		case PROP_USERNAME:
-			g_value_set_string(value, priv->username);
-			break;
-		case PROP_PASSWORD:
-			g_value_set_string(value, priv->password);
-			break;
-		case PROP_TTL:
-			g_value_set_uint(value, priv->ttl);
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(
-					object, prop_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_media_candidate_class_init(PurpleMediaCandidateClass *klass)
-{
-	GObjectClass *gobject_class = (GObjectClass*)klass;
-	
-	gobject_class->finalize = purple_media_candidate_finalize;
-	gobject_class->set_property = purple_media_candidate_set_property;
-	gobject_class->get_property = purple_media_candidate_get_property;
-
-	g_object_class_install_property(gobject_class, PROP_FOUNDATION,
-			g_param_spec_string("foundation",
-			"Foundation",
-			"The foundation of the candidate.",
-			NULL,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_COMPONENT_ID,
-			g_param_spec_uint("component-id",
-			"Component ID",
-			"The component id of the candidate.",
-			0, G_MAXUINT, 0,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_IP,
-			g_param_spec_string("ip",
-			"IP Address",
-			"The IP address of the candidate.",
-			NULL,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_PORT,
-			g_param_spec_uint("port",
-			"Port",
-			"The port of the candidate.",
-			0, G_MAXUINT16, 0,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_BASE_IP,
-			g_param_spec_string("base-ip",
-			"Base IP",
-			"The internal IP address of the candidate.",
-			NULL,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_BASE_PORT,
-			g_param_spec_uint("base-port",
-			"Base Port",
-			"The internal port of the candidate.",
-			0, G_MAXUINT16, 0,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_PROTOCOL,
-			g_param_spec_enum("protocol",
-			"Protocol",
-			"The protocol of the candidate.",
-			PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL,
-			PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_PRIORITY,
-			g_param_spec_uint("priority",
-			"Priority",
-			"The priority of the candidate.",
-			0, G_MAXUINT32, 0,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_TYPE,
-			g_param_spec_enum("type",
-			"Type",
-			"The type of the candidate.",
-			PURPLE_TYPE_MEDIA_CANDIDATE_TYPE,
-			PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_USERNAME,
-			g_param_spec_string("username",
-			"Username",
-			"The username used to connect to the candidate.",
-			NULL,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_PASSWORD,
-			g_param_spec_string("password",
-			"Password",
-			"The password use to connect to the candidate.",
-			NULL,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_TTL,
-			g_param_spec_uint("ttl",
-			"TTL",
-			"The TTL of the candidate.",
-			0, G_MAXUINT, 0,
-			G_PARAM_READWRITE));
-
-	g_type_class_add_private(klass, sizeof(PurpleMediaCandidatePrivate));
-}
-
-G_DEFINE_TYPE(PurpleMediaCandidate,
-		purple_media_candidate, G_TYPE_OBJECT);
-#else
-GType
-purple_media_candidate_get_type()
-{
-	return G_TYPE_NONE;
-}
-#endif
-
-PurpleMediaCandidate *
-purple_media_candidate_new(const gchar *foundation, guint component_id,
-		PurpleMediaCandidateType type,
-		PurpleMediaNetworkProtocol proto,
-		const gchar *ip, guint port)
-{
-	return g_object_new(PURPLE_TYPE_MEDIA_CANDIDATE,
-			"foundation", foundation,
-			"component-id", component_id,
-			"type", type,
-			"protocol", proto,
-			"ip", ip,
-			"port", port, NULL);
-}
-
-static PurpleMediaCandidate *
-purple_media_candidate_copy(PurpleMediaCandidate *candidate)
-{
-#ifdef USE_VV
-	PurpleMediaCandidatePrivate *priv;
-	PurpleMediaCandidate *new_candidate;
-
-	if (candidate == NULL)
-		return NULL;
-
-	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(candidate);
-
-	new_candidate = purple_media_candidate_new(priv->foundation,
-			priv->component_id, priv->type, priv->proto,
-			priv->ip, priv->port);
-	g_object_set(new_candidate,
-			"base-ip", priv->base_ip,
-			"base-port", priv->base_port,
-			"priority", priv->priority,
-			"username", priv->username,
-			"password", priv->password,
-			"ttl", priv->ttl, NULL);
-	return new_candidate;
-#else
-	return NULL;
-#endif
-}
-
-#ifdef USE_VV
-static FsCandidate *
-purple_media_candidate_to_fs(PurpleMediaCandidate *candidate)
-{
-	PurpleMediaCandidatePrivate *priv;
-	FsCandidate *fscandidate;
-
-	if (candidate == NULL)
-		return NULL;
-
-	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(candidate);
-
-	fscandidate = fs_candidate_new(priv->foundation,
-			priv->component_id, priv->type,
-			priv->proto, priv->ip, priv->port);
-
-	fscandidate->base_ip = g_strdup(priv->base_ip);
-	fscandidate->base_port = priv->base_port;
-	fscandidate->priority = priv->priority;
-	fscandidate->username = g_strdup(priv->username);
-	fscandidate->password = g_strdup(priv->password);
-	fscandidate->ttl = priv->ttl;
-	return fscandidate;
-}
-
-static PurpleMediaCandidate *
-purple_media_candidate_from_fs(FsCandidate *fscandidate)
-{
-	PurpleMediaCandidate *candidate;
-
-	if (fscandidate == NULL)
-		return NULL;
-
-	candidate = purple_media_candidate_new(fscandidate->foundation,
-		fscandidate->component_id, fscandidate->type,
-		fscandidate->proto, fscandidate->ip, fscandidate->port);
-	g_object_set(candidate,
-			"base-ip", fscandidate->base_ip,
-			"base-port", fscandidate->base_port,
-			"priority", fscandidate->priority,
-			"username", fscandidate->username,
-			"password", fscandidate->password,
-			"ttl", fscandidate->ttl, NULL);
-	return candidate;
-}
-
-static GList *
-purple_media_candidate_list_from_fs(GList *candidates)
-{
-	GList *new_list = NULL;
-
-	for (; candidates; candidates = g_list_next(candidates)) {
-		new_list = g_list_prepend(new_list,
-				purple_media_candidate_from_fs(
-				candidates->data));
-	}
-
-	new_list = g_list_reverse(new_list);
-	return new_list;
-}
-
-static GList *
-purple_media_candidate_list_to_fs(GList *candidates)
-{
-	GList *new_list = NULL;
-
-	for (; candidates; candidates = g_list_next(candidates)) {
-		new_list = g_list_prepend(new_list,
-				purple_media_candidate_to_fs(
-				candidates->data));
-	}
-
-	new_list = g_list_reverse(new_list);
-	return new_list;
-}
-#endif
-
-GList *
-purple_media_candidate_list_copy(GList *candidates)
-{
-	GList *new_list = NULL;
-
-	for (; candidates; candidates = g_list_next(candidates)) {
-		new_list = g_list_prepend(new_list,
-				purple_media_candidate_copy(candidates->data));
-	}
-
-	new_list = g_list_reverse(new_list);
-	return new_list;
-}
-
-void
-purple_media_candidate_list_free(GList *candidates)
-{
-	for (; candidates; candidates =
-			g_list_delete_link(candidates, candidates)) {
-		g_object_unref(candidates->data);
-	}
-}
-
-gchar *
-purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate)
-{
-	gchar *foundation;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
-	g_object_get(candidate, "foundation", &foundation, NULL);
-	return foundation;
-}
-
-guint
-purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate)
-{
-	guint component_id;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
-	g_object_get(candidate, "component-id", &component_id, NULL);
-	return component_id;
-}
-
-gchar *
-purple_media_candidate_get_ip(PurpleMediaCandidate *candidate)
-{
-	gchar *ip;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
-	g_object_get(candidate, "ip", &ip, NULL);
-	return ip;
-}
-
-guint16
-purple_media_candidate_get_port(PurpleMediaCandidate *candidate)
-{
-	guint port;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
-	g_object_get(candidate, "port", &port, NULL);
-	return port;
-}
-
-gchar *
-purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate)
-{
-	gchar *base_ip;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
-	g_object_get(candidate, "base-ip", &base_ip, NULL);
-	return base_ip;
-}
-
-guint16
-purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate)
-{
-	guint base_port;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
-	g_object_get(candidate, "base_port", &base_port, NULL);
-	return base_port;
-}
-
-PurpleMediaNetworkProtocol
-purple_media_candidate_get_protocol(PurpleMediaCandidate *candidate)
-{
-	PurpleMediaNetworkProtocol protocol;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate),
-			PURPLE_MEDIA_NETWORK_PROTOCOL_UDP);
-	g_object_get(candidate, "protocol", &protocol, NULL);
-	return protocol;
-}
-
-guint32
-purple_media_candidate_get_priority(PurpleMediaCandidate *candidate)
-{
-	guint priority;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
-	g_object_get(candidate, "priority", &priority, NULL);
-	return priority;
-}
-
-PurpleMediaCandidateType
-purple_media_candidate_get_candidate_type(PurpleMediaCandidate *candidate)
-{
-	PurpleMediaCandidateType type;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate),
-			PURPLE_MEDIA_CANDIDATE_TYPE_HOST);
-	g_object_get(candidate, "type", &type, NULL);
-	return type;
-}
-
-gchar *
-purple_media_candidate_get_username(PurpleMediaCandidate *candidate)
-{
-	gchar *username;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
-	g_object_get(candidate, "username", &username, NULL);
-	return username;
-}
-
-gchar *
-purple_media_candidate_get_password(PurpleMediaCandidate *candidate)
-{
-	gchar *password;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
-	g_object_get(candidate, "password", &password, NULL);
-	return password;
-}
-
-guint
-purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate)
-{
-	guint ttl;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
-	g_object_get(candidate, "ttl", &ttl, NULL);
-	return ttl;
-}
-
-#ifdef USE_VV
-static FsMediaType
-purple_media_to_fs_media_type(PurpleMediaSessionType type)
-{
-	if (type & PURPLE_MEDIA_AUDIO)
-		return FS_MEDIA_TYPE_AUDIO;
-	else if (type & PURPLE_MEDIA_VIDEO)
-		return FS_MEDIA_TYPE_VIDEO;
-	else
-		return 0;
-}
-
-static FsStreamDirection
-purple_media_to_fs_stream_direction(PurpleMediaSessionType type)
-{
-	if ((type & PURPLE_MEDIA_AUDIO) == PURPLE_MEDIA_AUDIO ||
-			(type & PURPLE_MEDIA_VIDEO) == PURPLE_MEDIA_VIDEO)
-		return FS_DIRECTION_BOTH;
-	else if ((type & PURPLE_MEDIA_SEND_AUDIO) ||
-			(type & PURPLE_MEDIA_SEND_VIDEO))
-		return FS_DIRECTION_SEND;
-	else if ((type & PURPLE_MEDIA_RECV_AUDIO) ||
-			(type & PURPLE_MEDIA_RECV_VIDEO))
-		return FS_DIRECTION_RECV;
-	else
-		return FS_DIRECTION_NONE;
-}
-
-static PurpleMediaSessionType
-purple_media_from_fs(FsMediaType type, FsStreamDirection direction)
-{
-	PurpleMediaSessionType result = PURPLE_MEDIA_NONE;
-	if (type == FS_MEDIA_TYPE_AUDIO) {
-		if (direction & FS_DIRECTION_SEND)
-			result |= PURPLE_MEDIA_SEND_AUDIO;
-		if (direction & FS_DIRECTION_RECV)
-			result |= PURPLE_MEDIA_RECV_AUDIO;
-	} else if (type == FS_MEDIA_TYPE_VIDEO) {
-		if (direction & FS_DIRECTION_SEND)
-			result |= PURPLE_MEDIA_SEND_VIDEO;
-		if (direction & FS_DIRECTION_RECV)
-			result |= PURPLE_MEDIA_RECV_VIDEO;
-	}
-	return result;
-}
-#endif
-
-/*
- * PurpleMediaCodec
- */
-
-struct _PurpleMediaCodecClass
-{
-	GObjectClass parent_class;
-};
-
-struct _PurpleMediaCodec
-{
-	GObject parent;
-};
-
-#ifdef USE_VV
-struct _PurpleMediaCodecPrivate
-{
-	gint id;
-	char *encoding_name;
-	PurpleMediaSessionType media_type;
-	guint clock_rate;
-	guint channels;
-	GList *optional_params;
-};
-
-enum {
-	PROP_CODEC_0,
-	PROP_ID,
-	PROP_ENCODING_NAME,
-	PROP_MEDIA_TYPE,
-	PROP_CLOCK_RATE,
-	PROP_CHANNELS,
-	PROP_OPTIONAL_PARAMS,
-};
-
-static void
-purple_media_codec_init(PurpleMediaCodec *info)
-{
-	PurpleMediaCodecPrivate *priv =
-			PURPLE_MEDIA_CODEC_GET_PRIVATE(info);
-	priv->encoding_name = NULL;
-	priv->optional_params = NULL;
-}
-
-static void
-purple_media_codec_finalize(GObject *info)
-{
-	PurpleMediaCodecPrivate *priv =
-			PURPLE_MEDIA_CODEC_GET_PRIVATE(info);
-	g_free(priv->encoding_name);
-	for (; priv->optional_params; priv->optional_params =
-			g_list_delete_link(priv->optional_params,
-			priv->optional_params)) {
-		g_free(priv->optional_params->data);
-	}
-}
-
-static void
-purple_media_codec_set_property (GObject *object, guint prop_id,
-		const GValue *value, GParamSpec *pspec)
-{
-	PurpleMediaCodecPrivate *priv;
-	g_return_if_fail(PURPLE_IS_MEDIA_CODEC(object));
-
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(object);
-
-	switch (prop_id) {
-		case PROP_ID:
-			priv->id = g_value_get_uint(value);
-			break;
-		case PROP_ENCODING_NAME:
-			g_free(priv->encoding_name);
-			priv->encoding_name = g_value_dup_string(value);
-			break;
-		case PROP_MEDIA_TYPE:
-			priv->media_type = g_value_get_flags(value);
-			break;
-		case PROP_CLOCK_RATE:
-			priv->clock_rate = g_value_get_uint(value);
-			break;
-		case PROP_CHANNELS:
-			priv->channels = g_value_get_uint(value);
-			break;
-		case PROP_OPTIONAL_PARAMS:
-			priv->optional_params = g_value_get_pointer(value);
-			break;
-		default:	
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(
-					object, prop_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_media_codec_get_property (GObject *object, guint prop_id,
-		GValue *value, GParamSpec *pspec)
-{
-	PurpleMediaCodecPrivate *priv;
-	g_return_if_fail(PURPLE_IS_MEDIA_CODEC(object));
-	
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(object);
-
-	switch (prop_id) {
-		case PROP_ID:
-			g_value_set_uint(value, priv->id);
-			break;
-		case PROP_ENCODING_NAME:
-			g_value_set_string(value, priv->encoding_name);
-			break;
-		case PROP_MEDIA_TYPE:
-			g_value_set_flags(value, priv->media_type);
-			break;
-		case PROP_CLOCK_RATE:
-			g_value_set_uint(value, priv->clock_rate);
-			break;
-		case PROP_CHANNELS:
-			g_value_set_uint(value, priv->channels);
-			break;
-		case PROP_OPTIONAL_PARAMS:
-			g_value_set_pointer(value, priv->optional_params);
-			break;
-		default:	
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(
-					object, prop_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_media_codec_class_init(PurpleMediaCodecClass *klass)
-{
-	GObjectClass *gobject_class = (GObjectClass*)klass;
-	
-	gobject_class->finalize = purple_media_codec_finalize;
-	gobject_class->set_property = purple_media_codec_set_property;
-	gobject_class->get_property = purple_media_codec_get_property;
-
-	g_object_class_install_property(gobject_class, PROP_ID,
-			g_param_spec_uint("id",
-			"ID",
-			"The numeric identifier of the codec.",
-			0, G_MAXUINT, 0,
-			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_ENCODING_NAME,
-			g_param_spec_string("encoding-name",
-			"Encoding Name",
-			"The name of the codec.",
-			NULL,
-			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_MEDIA_TYPE,
-			g_param_spec_flags("media-type",
-			"Media Type",
-			"Whether this is an audio of video codec.",
-			PURPLE_TYPE_MEDIA_SESSION_TYPE,
-			PURPLE_MEDIA_NONE,
-			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_CLOCK_RATE,
-			g_param_spec_uint("clock-rate",
-			"Create Callback",
-			"The function called to create this element.",
-			0, G_MAXUINT, 0,
-			G_PARAM_READWRITE));
-
-	g_object_class_install_property(gobject_class, PROP_CHANNELS,
-			g_param_spec_uint("channels",
-			"Channels",
-			"The number of channels in this codec.",
-			0, G_MAXUINT, 0,
-			G_PARAM_READWRITE));
-	g_object_class_install_property(gobject_class, PROP_OPTIONAL_PARAMS,
-			g_param_spec_pointer("optional-params",
-			"Optional Params",
-			"A list of optional parameters for the codec.",
-			G_PARAM_READWRITE));
-
-	g_type_class_add_private(klass, sizeof(PurpleMediaCodecPrivate));
-}
-
-G_DEFINE_TYPE(PurpleMediaCodec,
-		purple_media_codec, G_TYPE_OBJECT);
-#else
-GType
-purple_media_codec_get_type()
-{
-	return G_TYPE_NONE;
-}
-#endif
-
-guint
-purple_media_codec_get_id(PurpleMediaCodec *codec)
-{
-	guint id;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), 0);
-	g_object_get(codec, "id", &id, NULL);
-	return id;
-}
-
-gchar *
-purple_media_codec_get_encoding_name(PurpleMediaCodec *codec)
-{
-	gchar *name;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), NULL);
-	g_object_get(codec, "encoding-name", &name, NULL);
-	return name;
-}
-
-guint
-purple_media_codec_get_clock_rate(PurpleMediaCodec *codec)
-{
-	guint clock_rate;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), 0);
-	g_object_get(codec, "clock-rate", &clock_rate, NULL);
-	return clock_rate;
-}
-
-guint
-purple_media_codec_get_channels(PurpleMediaCodec *codec)
-{
-	guint channels;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), 0);
-	g_object_get(codec, "channels", &channels, NULL);
-	return channels;
-}
-
-GList *
-purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec)
-{
-	GList *optional_params;
-	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), NULL);
-	g_object_get(codec, "optional-params", &optional_params, NULL);
-	return optional_params;
-}
-
-void
-purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec,
-		const gchar *name, const gchar *value)
-{
-#ifdef USE_VV
-	PurpleMediaCodecPrivate *priv;
-	PurpleKeyValuePair *new_param;
-
-	g_return_if_fail(codec != NULL);
-	g_return_if_fail(name != NULL && value != NULL);
-
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
-
-	new_param = g_new0(PurpleKeyValuePair, 1);
-	new_param->key = g_strdup(name);
-	new_param->value = g_strdup(value);
-	priv->optional_params = g_list_append(
-			priv->optional_params, new_param);
-#endif
-}
-
-void
-purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec,
-		PurpleKeyValuePair *param)
-{
-#ifdef USE_VV
-	PurpleMediaCodecPrivate *priv;
-
-	g_return_if_fail(codec != NULL && param != NULL);
-
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
-
-	g_free(param->key);
-	g_free(param->value);
-	g_free(param);
-
-	priv->optional_params =
-			g_list_remove(priv->optional_params, param);
-#endif
-}
-
-PurpleKeyValuePair *
-purple_media_codec_get_optional_parameter(PurpleMediaCodec *codec,
-		const gchar *name, const gchar *value)
-{
-#ifdef USE_VV
-	PurpleMediaCodecPrivate *priv;
-	GList *iter;
-
-	g_return_val_if_fail(codec != NULL, NULL);
-	g_return_val_if_fail(name != NULL, NULL);
-
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
-
-	for (iter = priv->optional_params; iter; iter = g_list_next(iter)) {
-		PurpleKeyValuePair *param = iter->data;
-		if (!g_ascii_strcasecmp(param->key, name) &&
-				(value == NULL ||
-				!g_ascii_strcasecmp(param->value, value)))
-			return param;
-	}
-#endif
-
-	return NULL;
-}
-
-PurpleMediaCodec *
-purple_media_codec_new(int id, const char *encoding_name,
-		PurpleMediaSessionType media_type, guint clock_rate)
-{
-	PurpleMediaCodec *codec =
-			g_object_new(PURPLE_TYPE_MEDIA_CODEC,
-			"id", id,
-			"encoding_name", encoding_name,
-			"media_type", media_type,
-			"clock-rate", clock_rate, NULL);
-	return codec;
-}
-
-static PurpleMediaCodec *
-purple_media_codec_copy(PurpleMediaCodec *codec)
-{
-#ifdef USE_VV
-	PurpleMediaCodecPrivate *priv;
-	PurpleMediaCodec *new_codec;
-	GList *iter;
-
-	if (codec == NULL)
-		return NULL;
-
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
-
-	new_codec = purple_media_codec_new(priv->id, priv->encoding_name,
-			priv->media_type, priv->clock_rate);
-	g_object_set(codec, "channels", priv->channels, NULL);
-
-	for (iter = priv->optional_params; iter; iter = g_list_next(iter)) {
-		PurpleKeyValuePair *param =
-				(PurpleKeyValuePair*)iter->data;
-		purple_media_codec_add_optional_parameter(new_codec,
-				param->key, param->value);
-	}
-
-	return new_codec;
-#else
-	return NULL;
-#endif
-}
-
-#ifdef USE_VV
-static FsCodec *
-purple_media_codec_to_fs(const PurpleMediaCodec *codec)
-{
-	PurpleMediaCodecPrivate *priv;
-	FsCodec *new_codec;
-	GList *iter;
-
-	if (codec == NULL)
-		return NULL;
-
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
-
-	new_codec = fs_codec_new(priv->id, priv->encoding_name,
-			purple_media_to_fs_media_type(priv->media_type),
-			priv->clock_rate);
-	new_codec->channels = priv->channels;
-
-	for (iter = priv->optional_params; iter; iter = g_list_next(iter)) {
-		PurpleKeyValuePair *param = (PurpleKeyValuePair*)iter->data;
-		fs_codec_add_optional_parameter(new_codec,
-				param->key, param->value);
-	}
-
-	return new_codec;
-}
-
-static PurpleMediaCodec *
-purple_media_codec_from_fs(const FsCodec *codec)
-{
-	PurpleMediaCodec *new_codec;
-	GList *iter;
-
-	if (codec == NULL)
-		return NULL;
-
-	new_codec = purple_media_codec_new(codec->id, codec->encoding_name,
-			purple_media_from_fs(codec->media_type,
-			FS_DIRECTION_BOTH), codec->clock_rate);
-	g_object_set(new_codec, "channels", codec->channels, NULL);
-
-	for (iter = codec->optional_params; iter; iter = g_list_next(iter)) {
-		FsCodecParameter *param = (FsCodecParameter*)iter->data;
-		purple_media_codec_add_optional_parameter(new_codec,
-				param->name, param->value);
-	}
-
-	return new_codec;
-}
-#endif
-
-gchar *
-purple_media_codec_to_string(const PurpleMediaCodec *codec)
-{
-#ifdef USE_VV
-	FsCodec *fscodec = purple_media_codec_to_fs(codec);
-	gchar *str = fs_codec_to_string(fscodec);
-	fs_codec_destroy(fscodec);
-	return str;
-#else
-	return g_strdup("");
-#endif
-}
-
-#ifdef USE_VV
-static GList *
-purple_media_codec_list_from_fs(GList *codecs)
-{
-	GList *new_list = NULL;
-
-	for (; codecs; codecs = g_list_next(codecs)) {
-		new_list = g_list_prepend(new_list,
-				purple_media_codec_from_fs(
-				codecs->data));
-	}
-
-	new_list = g_list_reverse(new_list);
-	return new_list;
-}
-
-static GList *
-purple_media_codec_list_to_fs(GList *codecs)
-{
-	GList *new_list = NULL;
-
-	for (; codecs; codecs = g_list_next(codecs)) {
-		new_list = g_list_prepend(new_list,
-				purple_media_codec_to_fs(
-				codecs->data));
-	}
-
-	new_list = g_list_reverse(new_list);
-	return new_list;
-}
-#endif
-
-GList *
-purple_media_codec_list_copy(GList *codecs)
-{
-	GList *new_list = NULL;
-
-	for (; codecs; codecs = g_list_next(codecs)) {
-		new_list = g_list_prepend(new_list,
-				purple_media_codec_copy(codecs->data));
-	}
-
-	new_list = g_list_reverse(new_list);
-	return new_list;
-}
-
-void
-purple_media_codec_list_free(GList *codecs)
-{
-	for (; codecs; codecs =
-			g_list_delete_link(codecs, codecs)) {
-		g_object_unref(codecs->data);
-	}
-}
-
-#ifdef USE_VV
 static PurpleMediaSession*
 purple_media_get_session(PurpleMedia *media, const gchar *sess_id)
 {
@@ -1722,14 +465,6 @@
 			g_hash_table_lookup(media->priv->sessions, sess_id) : NULL;
 }
 
-static FsParticipant*
-purple_media_get_participant(PurpleMedia *media, const gchar *name)
-{
-	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
-	return (FsParticipant*) (media->priv->participants) ?
-			g_hash_table_lookup(media->priv->participants, name) : NULL;
-}
-
 static PurpleMediaStream*
 purple_media_get_stream(PurpleMedia *media, const gchar *session, const gchar *participant)
 {
@@ -1785,58 +520,27 @@
 	g_hash_table_insert(media->priv->sessions, g_strdup(session->id), session);
 }
 
+#if 0
 static gboolean
 purple_media_remove_session(PurpleMedia *media, PurpleMediaSession *session)
 {
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
 	return g_hash_table_remove(media->priv->sessions, session->id);
 }
-
-static FsParticipant *
-purple_media_add_participant(PurpleMedia *media, const gchar *name)
-{
-	FsParticipant *participant;
-	GError *err = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
-
-	participant = purple_media_get_participant(media, name);
-
-	if (participant)
-		return participant;
-
-	participant = fs_conference_new_participant(media->priv->conference,
-						    (gchar*)name, &err);
-
-	if (err) {
-		purple_debug_error("media", "Error creating participant: %s\n",
-				   err->message);
-		g_error_free(err);
-		return NULL;
-	}
-
-	if (!media->priv->participants) {
-		purple_debug_info("media", "Creating hash table for participants\n");
-		media->priv->participants = g_hash_table_new_full(g_str_hash,
-				g_str_equal, g_free, NULL);
-	}
-
-	g_hash_table_insert(media->priv->participants, g_strdup(name), participant);
-
-	return participant;
-}
+#endif
 
 static PurpleMediaStream *
-purple_media_insert_stream(PurpleMediaSession *session, const gchar *name, FsStream *stream)
+purple_media_insert_stream(PurpleMediaSession *session,
+		const gchar *name, gboolean initiator)
 {
 	PurpleMediaStream *media_stream;
 	
 	g_return_val_if_fail(session != NULL, NULL);
 
 	media_stream = g_new0(PurpleMediaStream, 1);
-	media_stream->stream = stream;
 	media_stream->participant = g_strdup(name);
 	media_stream->session = session;
+	media_stream->initiator = initiator;
 
 	session->media->priv->streams =
 			g_list_append(session->media->priv->streams, media_stream);
@@ -1846,7 +550,7 @@
 
 static void
 purple_media_insert_local_candidate(PurpleMediaSession *session, const gchar *name,
-				     FsCandidate *candidate)
+				     PurpleMediaCandidate *candidate)
 {
 	PurpleMediaStream *stream;
 
@@ -1869,322 +573,25 @@
 #endif
 }
 
-#ifdef USE_VV
-static void 
-purple_media_set_src(PurpleMedia *media, const gchar *sess_id, GstElement *src)
-{
-	PurpleMediaSession *session;
-	GstPad *sinkpad;
-	GstPad *srcpad;
-
-	g_return_if_fail(PURPLE_IS_MEDIA(media));
-	g_return_if_fail(GST_IS_ELEMENT(src));
-
-	session = purple_media_get_session(media, sess_id);
-
-	if (session == NULL) {
-		purple_debug_warning("media", "purple_media_set_src: trying"
-				" to set src on non-existent session\n");
-		return;
-	}
-
-	if (session->src)
-		gst_object_unref(session->src);
-	session->src = src;
-	gst_element_set_locked_state(session->src, TRUE);
-
-	session->tee = gst_element_factory_make("tee", NULL);
-	gst_bin_add(GST_BIN(session->media->priv->confbin), session->tee);
-
-	/* This supposedly isn't necessary, but it silences some warnings */
-	if (GST_ELEMENT_PARENT(session->media->priv->confbin)
-			== GST_ELEMENT_PARENT(session->src)) {
-		GstPad *pad = gst_element_get_static_pad(session->tee, "sink");
-		GstPad *ghost = gst_ghost_pad_new(NULL, pad);
-		gst_object_unref(pad);
-		gst_pad_set_active(ghost, TRUE);
-		gst_element_add_pad(session->media->priv->confbin, ghost);
-	}
-
-	gst_element_set_state(session->tee, GST_STATE_PLAYING);
-	gst_element_link(session->src, session->media->priv->confbin);
-
-	g_object_get(session->session, "sink-pad", &sinkpad, NULL);
-	if (session->type & PURPLE_MEDIA_SEND_AUDIO) {
-		gchar *name = g_strdup_printf("volume_%s", session->id);
-		GstElement *level;
-		GstElement *volume = gst_element_factory_make("volume", name);
-		double input_volume = purple_prefs_get_int(
-				"/purple/media/audio/volume/input")/10.0;
-		g_free(name);
-		name = g_strdup_printf("sendlevel_%s", session->id);
-		level = gst_element_factory_make("level", name);
-		g_free(name);
-		gst_bin_add(GST_BIN(session->media->priv->confbin), volume);
-		gst_bin_add(GST_BIN(session->media->priv->confbin), level);
-		gst_element_set_state(level, GST_STATE_PLAYING);
-		gst_element_set_state(volume, GST_STATE_PLAYING);
-		gst_element_link(volume, level);
-		gst_element_link(session->tee, volume);
-		srcpad = gst_element_get_static_pad(level, "src");
-		g_object_set(volume, "volume", input_volume, NULL);
-	} else {
-		srcpad = gst_element_get_request_pad(session->tee, "src%d");
-	}
-	purple_debug_info("media", "connecting pad: %s\n", 
-			  gst_pad_link(srcpad, sinkpad) == GST_PAD_LINK_OK
-			  ? "success" : "failure");
-	gst_element_set_locked_state(session->src, FALSE);
-	gst_object_unref(session->src);
-}
-#endif
-
 #ifdef USE_GSTREAMER
 GstElement *
 purple_media_get_src(PurpleMedia *media, const gchar *sess_id)
 {
 #ifdef USE_VV
-	PurpleMediaSession *session;
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
-	session = purple_media_get_session(media, sess_id);
-	return (session != NULL) ? session->src : NULL;
+
+	if (PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend))
+		return purple_media_backend_fs2_get_src(
+				PURPLE_MEDIA_BACKEND_FS2(
+				media->priv->backend), sess_id);
+
+	g_return_val_if_reached(NULL);
 #else
 	return NULL;
 #endif
 }
 #endif /* USE_GSTREAMER */
 
-#ifdef USE_VV
-static PurpleMediaSession *
-purple_media_session_from_fs_stream(PurpleMedia *media, FsStream *stream)
-{
-	FsSession *fssession;
-	GList *values;
-
-	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
-	g_return_val_if_fail(FS_IS_STREAM(stream), NULL);
-
-	g_object_get(stream, "session", &fssession, NULL);
-
-	values = g_hash_table_get_values(media->priv->sessions);
-
-	for (; values; values = g_list_delete_link(values, values)) {
-		PurpleMediaSession *session = values->data;
-
-		if (session->session == fssession) {
-			g_list_free(values);
-			g_object_unref(fssession);
-			return session;
-		}
-	}
-
-	g_object_unref(fssession);
-	return NULL;
-}
-
-static gboolean
-media_bus_call(GstBus *bus, GstMessage *msg, PurpleMedia *media)
-{
-	switch(GST_MESSAGE_TYPE(msg)) {
-		case GST_MESSAGE_ELEMENT: {
-			if (g_signal_has_handler_pending(media,
-					purple_media_signals[LEVEL], 0, FALSE)
-					&& gst_structure_has_name(
-					gst_message_get_structure(msg), "level")) {
-				GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg));
-				gchar *name;
-				gchar *participant = NULL;
-				PurpleMediaSession *session = NULL;
-				gdouble rms_db;
-				gdouble percent;
-				const GValue *list;
-				const GValue *value;
-
-				if (!PURPLE_IS_MEDIA(media) ||
-						GST_ELEMENT_PARENT(src) !=
-						media->priv->confbin)
-					break;
-
-				name = gst_element_get_name(src);
-				if (!strncmp(name, "sendlevel_", 10)) {
-					session = purple_media_get_session(
-							media, name+10);
-				} else {
-					GList *iter = media->priv->streams;
-					for (; iter; iter = g_list_next(iter)) {
-						PurpleMediaStream *stream = iter->data;
-						if (stream->level == src) {
-							session = stream->session;
-							participant = stream->participant;
-							break;
-						}
-					}
-				}
-				g_free(name);
-				if (!session)
-					break;
-
-				list = gst_structure_get_value(
-						gst_message_get_structure(msg), "rms");
-				value = gst_value_list_get_value(list, 0);
-				rms_db = g_value_get_double(value);
-				percent = pow(10, rms_db / 20) * 5;
-				if(percent > 1.0)
-					percent = 1.0;
-
-				g_signal_emit(media, purple_media_signals[LEVEL],
-						0, session->id, participant, percent);
-				break;
-			}
-			if (!FS_IS_CONFERENCE(GST_MESSAGE_SRC(msg)) ||
-					!PURPLE_IS_MEDIA(media) ||
-					media->priv->conference !=
-					FS_CONFERENCE(GST_MESSAGE_SRC(msg)))
-				break;
-
-			if (gst_structure_has_name(msg->structure, "farsight-error")) {
-				FsError error_no;
-				gst_structure_get_enum(msg->structure, "error-no",
-						FS_TYPE_ERROR, (gint*)&error_no);
-				switch (error_no) {
-					case FS_ERROR_NO_CODECS:
-						purple_media_error(media, _("No codecs found. Install some GStreamer codecs found in GStreamer plugins packages."));
-						purple_media_end(media, NULL, NULL);
-						break;
-					case FS_ERROR_NO_CODECS_LEFT:
-						purple_media_error(media, _("No codecs left. Your codec preferences in fs-codecs.conf are too strict."));
-						purple_media_end(media, NULL, NULL);
-						break;
-					case FS_ERROR_UNKNOWN_CNAME:
-					/*
-					 * Unknown CName is only a problem for the
-					 * multicast transmitter which isn't used.
-					 * It is also deprecated.
-					 */
-						break;
-					default:
-						purple_debug_error("media", "farsight-error: %i: %s\n", error_no,
-							  	gst_structure_get_string(msg->structure, "error-msg"));
-						break;
-				}
-
-				if (FS_ERROR_IS_FATAL(error_no)) {
-					purple_media_error(media, _("A non-recoverable Farsight2 error has occurred."));
-					purple_media_end(media, NULL, NULL);
-				}
-			} else if (gst_structure_has_name(msg->structure,
-					"farsight-new-local-candidate")) {
-				FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream"));
-				FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "candidate"));
-				PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream);
-				purple_media_new_local_candidate_cb(stream, local_candidate, session);
-			} else if (gst_structure_has_name(msg->structure,
-					"farsight-local-candidates-prepared")) {
-				FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream"));
-				PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream);
-				purple_media_candidates_prepared_cb(stream, session);
-			} else if (gst_structure_has_name(msg->structure,
-					"farsight-new-active-candidate-pair")) {
-				FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream"));
-				FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "local-candidate"));
-				FsCandidate *remote_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "remote-candidate"));
-				PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream);
-				purple_media_candidate_pair_established_cb(stream, local_candidate, remote_candidate, session);
-			} else if (gst_structure_has_name(msg->structure,
-					"farsight-recv-codecs-changed")) {
-				GList *codecs = g_value_get_boxed(gst_structure_get_value(msg->structure, "codecs"));
-				FsCodec *codec = codecs->data;
-				purple_debug_info("media", "farsight-recv-codecs-changed: %s\n", codec->encoding_name);
-				
-			} else if (gst_structure_has_name(msg->structure,
-					"farsight-component-state-changed")) {
-				FsStreamState fsstate = g_value_get_enum(gst_structure_get_value(msg->structure, "state"));
-				guint component = g_value_get_uint(gst_structure_get_value(msg->structure, "component"));
-				const gchar *state;
-				switch (fsstate) {
-					case FS_STREAM_STATE_FAILED:
-						state = "FAILED";
-						break;
-					case FS_STREAM_STATE_DISCONNECTED:
-						state = "DISCONNECTED";
-						break;
-					case FS_STREAM_STATE_GATHERING:
-						state = "GATHERING";
-						break;
-					case FS_STREAM_STATE_CONNECTING:
-						state = "CONNECTING";
-						break;
-					case FS_STREAM_STATE_CONNECTED:
-						state = "CONNECTED";
-						break;
-					case FS_STREAM_STATE_READY:
-						state = "READY";
-						break;
-					default:
-						state = "UNKNOWN";
-						break;
-				}
-				purple_debug_info("media", "farsight-component-state-changed: component: %u state: %s\n", component, state);
-			} else if (gst_structure_has_name(msg->structure,
-					"farsight-send-codec-changed")) {
-				FsCodec *codec = g_value_get_boxed(gst_structure_get_value(msg->structure, "codec"));
-				gchar *codec_str = fs_codec_to_string(codec);
-				purple_debug_info("media", "farsight-send-codec-changed: codec: %s\n", codec_str);
-				g_free(codec_str);
-			} else if (gst_structure_has_name(msg->structure,
-					"farsight-codecs-changed")) {
-				GList *sessions = g_hash_table_get_values(PURPLE_MEDIA(media)->priv->sessions);
-				FsSession *fssession = g_value_get_object(gst_structure_get_value(msg->structure, "session"));
-				for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
-					PurpleMediaSession *session = sessions->data;
-					if (session->session == fssession) {
-						gchar *session_id = g_strdup(session->id);
-						g_signal_emit(media, purple_media_signals[CODECS_CHANGED], 0, session_id);
-						g_free(session_id);
-						g_list_free(sessions);
-						break;
-					}
-				}
-			}
-			break;
-		}
-		case GST_MESSAGE_ERROR: {
-			GstElement *element = GST_ELEMENT(GST_MESSAGE_SRC(msg));
-			GstElement *lastElement = NULL;
-			while (!GST_IS_PIPELINE(element)) {
-				if (element == media->priv->confbin) {
-					purple_media_error(media, _("Conference error"));
-					purple_media_end(media, NULL, NULL);
-					break;
-				}
-				lastElement = element;
-				element = GST_ELEMENT_PARENT(element);
-			}
-			if (GST_IS_PIPELINE(element)) {
-				GList *sessions = g_hash_table_get_values(media->priv->sessions);
-				for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
-					PurpleMediaSession *session = sessions->data;
-
-					if (session->src == lastElement) {
-						if (session->type & PURPLE_MEDIA_AUDIO)
-							purple_media_error(media, _("Error with your microphone"));
-						else
-							purple_media_error(media, _("Error with your webcam"));
-						purple_media_end(media, NULL, NULL);
-						break;
-					}
-				}
-				g_list_free(sessions);
-			}
-		}
-		default:
-			break;
-	}
-
-	return TRUE;
-}
-#endif
-
 PurpleAccount *
 purple_media_get_account(PurpleMedia *media)
 {
@@ -2245,12 +652,99 @@
 		const gchar *session_id, const gchar *participant)
 {
 #ifdef USE_VV
+	GList *iter, *sessions = NULL, *participants = NULL;
+
 	g_return_if_fail(PURPLE_IS_MEDIA(media));
-	if (session_id == NULL && participant == NULL) {
+
+	iter = purple_media_get_streams(media, session_id, participant);
+
+	/* Free matching streams */
+	for (; iter; iter = g_list_delete_link(iter, iter)) {
+		PurpleMediaStream *stream = iter->data;
+
+		g_signal_emit(media, purple_media_signals[STATE_CHANGED],
+				0, PURPLE_MEDIA_STATE_END,
+				stream->session->id, stream->participant);
+
+		media->priv->streams =
+				g_list_remove(media->priv->streams, stream);
+
+		if (g_list_find(sessions, stream->session) == NULL)
+			sessions = g_list_prepend(sessions, stream->session);
+
+		if (g_list_find_custom(participants, stream->participant,
+				(GCompareFunc)strcmp) == NULL)
+			participants = g_list_prepend(participants,
+					g_strdup(stream->participant));
+
+		purple_media_stream_free(stream);
+	}
+
+	iter = media->priv->streams;
+
+	/* Reduce to list of sessions to remove */
+	for (; iter; iter = g_list_next(iter)) {
+		PurpleMediaStream *stream = iter->data;
+
+		sessions = g_list_remove(sessions, stream->session);
+	}
+
+	/* Free sessions with no streams left */
+	for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
+		PurpleMediaSession *session = sessions->data;
+
+		g_signal_emit(media, purple_media_signals[STATE_CHANGED],
+				0, PURPLE_MEDIA_STATE_END,
+				session->id, NULL);
+
+		g_hash_table_remove(media->priv->sessions, session->id);
+		purple_media_session_free(session);
+	}
+
+	iter = media->priv->streams;
+
+	/* Reduce to list of participants to remove */
+	for (; iter; iter = g_list_next(iter)) {
+		PurpleMediaStream *stream = iter->data;
+		GList *tmp;
+
+		tmp = g_list_find_custom(participants,
+				stream->participant, (GCompareFunc)strcmp);
+
+		if (tmp != NULL) {
+			g_free(tmp->data);
+			participants = g_list_delete_link(participants,	tmp);
+		}
+	}
+
+	/* Remove participants with no streams left (just emit the signal) */
+	for (; participants; participants =
+			g_list_delete_link(participants, participants)) {
+		gchar *participant = participants->data;
+		GList *link = g_list_find_custom(media->priv->participants,
+				participant, (GCompareFunc)strcmp);
+
+		g_signal_emit(media, purple_media_signals[STATE_CHANGED],
+				0, PURPLE_MEDIA_STATE_END,
+				NULL, participant);
+
+		if (link != NULL) {
+			g_free(link->data);
+			media->priv->participants = g_list_delete_link(
+					media->priv->participants, link);
+		}
+
+		g_free(participant);
+	}
+
+	/* Free the conference if no sessions left */
+	if (media->priv->sessions != NULL &&
+			g_hash_table_size(media->priv->sessions) == 0) {
 		g_signal_emit(media, purple_media_signals[STATE_CHANGED],
 				0, PURPLE_MEDIA_STATE_END,
 				NULL, NULL);
 		g_object_unref(media);
+		return;
 	}
 #endif
 }
@@ -2264,6 +758,72 @@
 	g_return_if_fail(PURPLE_IS_MEDIA(media));
 
 	if (type == PURPLE_MEDIA_INFO_ACCEPT) {
+		GList *streams, *sessions = NULL, *participants = NULL;
+
+		g_return_if_fail(PURPLE_IS_MEDIA(media));
+
+		streams = purple_media_get_streams(media,
+				session_id, participant);
+
+		/* Emit stream acceptance */
+		for (; streams; streams =
+				g_list_delete_link(streams, streams)) {
+			PurpleMediaStream *stream = streams->data;
+
+			stream->accepted = TRUE;
+
+			g_signal_emit(media,
+					purple_media_signals[STREAM_INFO],
+					0, type, stream->session->id,
+					stream->participant, local);
+
+			if (g_list_find(sessions, stream->session) == NULL)
+				sessions = g_list_prepend(sessions,
+						stream->session);
+
+			if (g_list_find_custom(participants,
+					stream->participant,
+					(GCompareFunc)strcmp) == NULL)
+				participants = g_list_prepend(participants,
+						g_strdup(stream->participant));
+		}
+
+		/* Emit session acceptance */
+		for (; sessions; sessions =
+				g_list_delete_link(sessions, sessions)) {
+			PurpleMediaSession *session = sessions->data;
+
+			if (purple_media_accepted(media, session->id, NULL))
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0,
+						PURPLE_MEDIA_INFO_ACCEPT,
+						session->id, NULL, local);
+		}
+
+		/* Emit participant acceptance */
+		for (; participants; participants = g_list_delete_link(
+				participants, participants)) {
+			gchar *participant = participants->data;
+
+			if (purple_media_accepted(media, NULL, participant))
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0,
+						PURPLE_MEDIA_INFO_ACCEPT,
+						NULL, participant, local);
+
+			g_free(participant);
+		}
+
+		/* Emit conference acceptance */
+		if (purple_media_accepted(media, NULL, NULL))
+			g_signal_emit(media,
+					purple_media_signals[STREAM_INFO],
+					0, PURPLE_MEDIA_INFO_ACCEPT,
+					NULL, NULL, local);
+
+		return;
+	} else if (type == PURPLE_MEDIA_INFO_HANGUP ||
+			type == PURPLE_MEDIA_INFO_REJECT) {
 		GList *streams;
 
 		g_return_if_fail(PURPLE_IS_MEDIA(media));
@@ -2271,337 +831,189 @@
 		streams = purple_media_get_streams(media,
 				session_id, participant);
 
+		/* Emit for stream */
 		for (; streams; streams =
 				g_list_delete_link(streams, streams)) {
 			PurpleMediaStream *stream = streams->data;
-			g_object_set(G_OBJECT(stream->stream), "direction",
-					purple_media_to_fs_stream_direction(
-					stream->session->type), NULL);
-			stream->accepted = TRUE;
+
+			g_signal_emit(media,
+					purple_media_signals[STREAM_INFO],
+					0, type, stream->session->id,
+					stream->participant, local);
+		}
 
-			if (stream->remote_candidates != NULL &&
-					stream->initiator == FALSE) {
-				GError *err = NULL;
-				fs_stream_set_remote_candidates(stream->stream,
-						stream->remote_candidates, &err);
+		if (session_id != NULL && participant != NULL) {
+			/* Everything that needs to be emitted has been */
+		} else if (session_id == NULL && participant == NULL) {
+			/* Emit for everything in the conference */
+			GList *sessions = NULL;
+			GList *participants = media->priv->participants;
 
-				if (err) {
-					purple_debug_error("media", "Error adding remote"
-							" candidates: %s\n", err->message);
-					g_error_free(err);
-				}
+			if (media->priv->sessions != NULL)
+				sessions = g_hash_table_get_values(
+					media->priv->sessions);
+
+			/* Emit for sessions */
+			for (; sessions; sessions = g_list_delete_link(
+					sessions, sessions)) {
+				PurpleMediaSession *session = sessions->data;
+
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0, type,
+						session->id, NULL, local);
 			}
-		}
-	} else if (local == TRUE && (type == PURPLE_MEDIA_INFO_MUTE ||
-			type == PURPLE_MEDIA_INFO_UNMUTE)) {
-		GList *sessions;
-		gboolean active = (type == PURPLE_MEDIA_INFO_MUTE);
+
+			/* Emit for participants */
+			for (; participants; participants =
+					g_list_next(participants)) {
+				gchar *participant = participants->data;
 
-		g_return_if_fail(PURPLE_IS_MEDIA(media));
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0, type,
+						NULL, participant, local);
+			}
 
-		if (session_id == NULL)
-			sessions = g_hash_table_get_values(
-					media->priv->sessions);
-		else
-			sessions = g_list_prepend(NULL,
+			/* Emit for conference */
+			g_signal_emit(media,
+					purple_media_signals[STREAM_INFO],
+					0, type, NULL, NULL, local);
+		} else if (session_id != NULL) {
+			/* Emit just the specific session */
+			PurpleMediaSession *session =
 					purple_media_get_session(
-					media, session_id));
+					media, session_id);
 
-		purple_debug_info("media", "Turning mute %s\n",
-				active ? "on" : "off");
-
-		for (; sessions; sessions = g_list_delete_link(
-				sessions, sessions)) {
-			PurpleMediaSession *session = sessions->data;
-			if (session->type & PURPLE_MEDIA_SEND_AUDIO) {
-				gchar *name = g_strdup_printf("volume_%s",
-						session->id);
-				GstElement *volume = gst_bin_get_by_name(
-						GST_BIN(session->media->
-						priv->confbin), name);
-				g_free(name);
-				g_object_set(volume, "mute", active, NULL);
+			if (session == NULL) {
+				purple_debug_warning("media",
+						"Couldn't find session"
+						" to hangup/reject.\n");
+			} else {
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0, type,
+						session->id, NULL, local);
+			}
+		} else if (participant != NULL) {
+			/* Emit just the specific participant */
+			if (!g_list_find_custom(media->priv->participants,
+					participant, (GCompareFunc)strcmp)) {
+				purple_debug_warning("media",
+						"Couldn't find participant"
+						" to hangup/reject.\n");
+			} else {
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0, type, NULL,
+						participant, local);
 			}
 		}
-	} else if (local == TRUE && (type == PURPLE_MEDIA_INFO_PAUSE ||
-			type == PURPLE_MEDIA_INFO_UNPAUSE)) {
-		gboolean active = (type == PURPLE_MEDIA_INFO_PAUSE);
-		GList *streams = purple_media_get_streams(media,
-				session_id, participant);
-		for (; streams; streams = g_list_delete_link(streams, streams)) {
-			PurpleMediaStream *stream = streams->data;
-			if (stream->session->type & PURPLE_MEDIA_SEND_VIDEO) {
-				stream->paused = active;
 
-				if (!stream->held)
-					g_object_set(stream->stream, "direction",
-							purple_media_to_fs_stream_direction(
-							stream->session->type & ((active) ?
-							~PURPLE_MEDIA_SEND_VIDEO :
-							PURPLE_MEDIA_VIDEO)), NULL);
-			}
-		}
-	} else if (local == TRUE && (type == PURPLE_MEDIA_INFO_HOLD ||
-			type == PURPLE_MEDIA_INFO_UNHOLD)) {
-		GList *streams;
-		gboolean active = (type == PURPLE_MEDIA_INFO_HOLD);
-
-		g_return_if_fail(PURPLE_IS_MEDIA(media));
-
-		streams = purple_media_get_streams(media,
-				session_id, participant);
-		for (; streams; streams = g_list_delete_link(streams, streams)) {
-			PurpleMediaStream *stream = streams->data;
-			stream->held = active;
-			if (stream->session->type & PURPLE_MEDIA_VIDEO) {
-				FsStreamDirection direction;
-
-				direction = ((active) ?
-						~PURPLE_MEDIA_VIDEO :
-						PURPLE_MEDIA_VIDEO);
-				if (!active && stream->paused)
-					direction &= ~PURPLE_MEDIA_SEND_VIDEO;
-
-				g_object_set(stream->stream, "direction",
-						purple_media_to_fs_stream_direction(
-						stream->session->type & direction), NULL);
-			} else if (stream->session->type & PURPLE_MEDIA_AUDIO) {
-				g_object_set(stream->stream, "direction",
-						purple_media_to_fs_stream_direction(
-						stream->session->type & ((active) ?
-						~PURPLE_MEDIA_AUDIO :
-						PURPLE_MEDIA_AUDIO)), NULL);
-			}
-		}
+		purple_media_end(media, session_id, participant);
+		return;
 	}
 
 	g_signal_emit(media, purple_media_signals[STREAM_INFO],
 			0, type, session_id, participant, local);
-
-	if (type == PURPLE_MEDIA_INFO_HANGUP ||
-			type == PURPLE_MEDIA_INFO_REJECT) {
-		purple_media_end(media, session_id, participant);
-	}
 #endif
 }
 
 #ifdef USE_VV
 static void
-purple_media_new_local_candidate_cb(FsStream *stream,
-				    FsCandidate *local_candidate,
-				    PurpleMediaSession *session)
+purple_media_new_local_candidate_cb(PurpleMediaBackend *backend,
+		const gchar *sess_id, const gchar *participant,
+		PurpleMediaCandidate *candidate, PurpleMedia *media)
 {
-	gchar *name;
-	FsParticipant *participant;
-	PurpleMediaCandidate *candidate;
-
-	g_return_if_fail(FS_IS_STREAM(stream));
-	g_return_if_fail(session != NULL);
+	PurpleMediaSession *session =
+			purple_media_get_session(media, sess_id);
 
-	purple_debug_info("media", "got new local candidate: %s\n", local_candidate->foundation);
-	g_object_get(stream, "participant", &participant, NULL);
-	g_object_get(participant, "cname", &name, NULL);
-	g_object_unref(participant);
-
-	purple_media_insert_local_candidate(session, name, fs_candidate_copy(local_candidate));
+	purple_media_insert_local_candidate(session, participant,
+			purple_media_candidate_copy(candidate));
 
-	candidate = purple_media_candidate_from_fs(local_candidate);
 	g_signal_emit(session->media, purple_media_signals[NEW_CANDIDATE],
-		      0, session->id, name, candidate);
-	g_object_unref(candidate);
-
-	g_free(name);
+		      0, session->id, participant, candidate);
 }
 
 static void
-purple_media_candidates_prepared_cb(FsStream *stream, PurpleMediaSession *session)
+purple_media_candidates_prepared_cb(PurpleMediaBackend *backend,
+		const gchar *sess_id, const gchar *name, PurpleMedia *media)
 {
-	gchar *name;
-	FsParticipant *participant;
 	PurpleMediaStream *stream_data;
 
-	g_return_if_fail(FS_IS_STREAM(stream));
-	g_return_if_fail(session != NULL);
+	g_return_if_fail(PURPLE_IS_MEDIA(media));
 
-	g_object_get(stream, "participant", &participant, NULL);
-	g_object_get(participant, "cname", &name, NULL);
-	g_object_unref(participant);
-
-	stream_data = purple_media_get_stream(session->media, session->id, name);
+	stream_data = purple_media_get_stream(media, sess_id, name);
 	stream_data->candidates_prepared = TRUE;
 
-	g_signal_emit(session->media,
-			purple_media_signals[CANDIDATES_PREPARED],
-			0, session->id, name);
-
-	g_free(name);
+	g_signal_emit(media, purple_media_signals[CANDIDATES_PREPARED],
+			0, sess_id, name);
 }
 
 /* callback called when a pair of transport candidates (local and remote)
  * has been established */
 static void
-purple_media_candidate_pair_established_cb(FsStream *fsstream,
-					   FsCandidate *native_candidate,
-					   FsCandidate *remote_candidate,
-					   PurpleMediaSession *session)
+purple_media_candidate_pair_established_cb(PurpleMediaBackend *backend,
+		const gchar *sess_id, const gchar *name,
+		PurpleMediaCandidate *local_candidate,
+		PurpleMediaCandidate *remote_candidate,
+		PurpleMedia *media)
 {
-	gchar *name;
-	FsParticipant *participant;
 	PurpleMediaStream *stream;
 	GList *iter;
-
-	g_return_if_fail(FS_IS_STREAM(fsstream));
-	g_return_if_fail(session != NULL);
+	guint id;
 
-	g_object_get(fsstream, "participant", &participant, NULL);
-	g_object_get(participant, "cname", &name, NULL);
-	g_object_unref(participant);
+	g_return_if_fail(PURPLE_IS_MEDIA(media));
 
-	stream = purple_media_get_stream(session->media, session->id, name);
+	stream = purple_media_get_stream(media, sess_id, name);
+	id = purple_media_candidate_get_component_id(local_candidate);
 
 	iter = stream->active_local_candidates;
 	for(; iter; iter = g_list_next(iter)) {
-		FsCandidate *c = iter->data;
-		if (native_candidate->component_id == c->component_id) {
-			fs_candidate_destroy(c);
+		PurpleMediaCandidate *c = iter->data;
+		if (id == purple_media_candidate_get_component_id(c)) {
+			g_object_unref(c);
 			stream->active_local_candidates =
 					g_list_delete_link(iter, iter);
 			stream->active_local_candidates = g_list_prepend(
 					stream->active_local_candidates,
-					fs_candidate_copy(native_candidate));
+					purple_media_candidate_copy(
+					local_candidate));
 			break;
 		}
 	}
 	if (iter == NULL)
 		stream->active_local_candidates = g_list_prepend(
 				stream->active_local_candidates,
-				fs_candidate_copy(native_candidate));
+				purple_media_candidate_copy(
+				local_candidate));
+
+	id = purple_media_candidate_get_component_id(local_candidate);
 
 	iter = stream->active_remote_candidates;
 	for(; iter; iter = g_list_next(iter)) {
-		FsCandidate *c = iter->data;
-		if (native_candidate->component_id == c->component_id) {
-			fs_candidate_destroy(c);
+		PurpleMediaCandidate *c = iter->data;
+		if (id == purple_media_candidate_get_component_id(c)) {
+			g_object_unref(c);
 			stream->active_remote_candidates =
 					g_list_delete_link(iter, iter);
 			stream->active_remote_candidates = g_list_prepend(
 					stream->active_remote_candidates,
-					fs_candidate_copy(remote_candidate));
+					purple_media_candidate_copy(
+					remote_candidate));
 			break;
 		}
 	}
 	if (iter == NULL)
 		stream->active_remote_candidates = g_list_prepend(
 				stream->active_remote_candidates,
-				fs_candidate_copy(remote_candidate));
+				purple_media_candidate_copy(
+				remote_candidate));
 
 	purple_debug_info("media", "candidate pair established\n");
 }
 
-static gboolean
-purple_media_connected_cb(PurpleMediaStream *stream)
-{
-	g_return_val_if_fail(stream != NULL, FALSE);
-
-	stream->connected_cb_id = 0;
-
-	purple_media_manager_create_output_window(
-			stream->session->media->priv->manager,
-			stream->session->media,
-			stream->session->id, stream->participant);
-
-	g_signal_emit(stream->session->media,
-			purple_media_signals[STATE_CHANGED],
-			0, PURPLE_MEDIA_STATE_CONNECTED,
-			stream->session->id, stream->participant);
-	return FALSE;
-}
-
 static void
-purple_media_src_pad_added_cb(FsStream *fsstream, GstPad *srcpad,
-			      FsCodec *codec, PurpleMediaStream *stream)
+purple_media_codecs_changed_cb(PurpleMediaBackend *backend,
+		const gchar *sess_id, PurpleMedia *media)
 {
-	PurpleMediaPrivate *priv;
-	GstPad *sinkpad;
-
-	g_return_if_fail(FS_IS_STREAM(fsstream));
-	g_return_if_fail(stream != NULL);
-
-	priv = stream->session->media->priv;
-
-	if (stream->src == NULL) {
-		GstElement *sink = NULL;
-
-		if (codec->media_type == FS_MEDIA_TYPE_AUDIO) {
-			GstElement *queue = NULL;
-			double output_volume = purple_prefs_get_int(
-					"/purple/media/audio/volume/output")/10.0;
-			/*
-			 * Should this instead be:
-			 *  audioconvert ! audioresample ! liveadder !
-			 *   audioresample ! audioconvert ! realsink
-			 */
-			queue = gst_element_factory_make("queue", NULL);
-			stream->volume = gst_element_factory_make(
-					"volume", NULL);
-			g_object_set(stream->volume, "volume",
-					output_volume, NULL);
-			stream->level = gst_element_factory_make(
-					"level", NULL);
-			stream->src = gst_element_factory_make(
-					"liveadder", NULL);
-			sink = purple_media_manager_get_element(priv->manager,
-					PURPLE_MEDIA_RECV_AUDIO,
-					stream->session->media,
-					stream->session->id,
-					stream->participant);
-			gst_bin_add(GST_BIN(priv->confbin), queue);
-			gst_bin_add(GST_BIN(priv->confbin), stream->volume);
-			gst_bin_add(GST_BIN(priv->confbin), stream->level);
-			gst_bin_add(GST_BIN(priv->confbin), sink);
-			gst_element_set_state(sink, GST_STATE_PLAYING);
-			gst_element_set_state(stream->level, GST_STATE_PLAYING);
-			gst_element_set_state(stream->volume, GST_STATE_PLAYING);
-			gst_element_set_state(queue, GST_STATE_PLAYING);
-			gst_element_link(stream->level, sink);
-			gst_element_link(stream->volume, stream->level);
-			gst_element_link(queue, stream->volume);
-			sink = queue;
-		} else if (codec->media_type == FS_MEDIA_TYPE_VIDEO) {
-			stream->src = gst_element_factory_make(
-					"fsfunnel", NULL);
-			sink = gst_element_factory_make(
-					"fakesink", NULL);
-			g_object_set(G_OBJECT(sink), "async", FALSE, NULL);
-			gst_bin_add(GST_BIN(priv->confbin), sink);
-			gst_element_set_state(sink, GST_STATE_PLAYING);
-		}
-		stream->tee = gst_element_factory_make("tee", NULL);
-		gst_bin_add_many(GST_BIN(priv->confbin),
-				stream->src, stream->tee, NULL);
-		gst_element_set_state(stream->tee, GST_STATE_PLAYING);
-		gst_element_set_state(stream->src, GST_STATE_PLAYING);
-		gst_element_link_many(stream->src, stream->tee, sink, NULL);
-	}
-
-	sinkpad = gst_element_get_request_pad(stream->src, "sink%d");
-	gst_pad_link(srcpad, sinkpad);
-	gst_object_unref(sinkpad);
-
-	stream->connected_cb_id = purple_timeout_add(0,
-			(GSourceFunc)purple_media_connected_cb, stream);
-}
-
-static void
-purple_media_element_added_cb(FsElementAddedNotifier *self,
-		GstBin *bin, GstElement *element, gpointer user_data)
-{
-	/*
-	 * Hack to make H264 work with Gmail video.
-	 */
-	if (!strncmp(GST_ELEMENT_NAME(element), "x264", 4)) {
-		g_object_set(GST_OBJECT(element), "cabac", FALSE, NULL);
-	}
+	g_signal_emit(media, purple_media_signals[CODECS_CHANGED], 0, sess_id);
 }
 #endif  /* USE_VV */
 
@@ -2613,97 +1025,21 @@
 {
 #ifdef USE_VV
 	PurpleMediaSession *session;
-	FsParticipant *participant = NULL;
 	PurpleMediaStream *stream = NULL;
-	FsMediaType media_type = purple_media_to_fs_media_type(type);
-	FsStreamDirection type_direction =
-			purple_media_to_fs_stream_direction(type);
-	gboolean is_nice = !strcmp(transmitter, "nice");
 
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
 
+	if (!purple_media_backend_add_stream(media->priv->backend,
+			sess_id, who, type, initiator, transmitter,
+			num_params, params)) {
+		purple_debug_error("media", "Error adding stream.\n");
+		return FALSE;
+	}
+
 	session = purple_media_get_session(media, sess_id);
 
 	if (!session) {
-		GError *err = NULL;
-		GList *codec_conf = NULL, *iter = NULL;
-		gchar *filename = NULL;
-		PurpleMediaSessionType session_type;
-		GstElement *src = NULL;
-
 		session = g_new0(PurpleMediaSession, 1);
-
-		session->session = fs_conference_new_session(
-				media->priv->conference, media_type, &err);
-
-		if (err != NULL) {
-			purple_media_error(media, _("Error creating session: %s"), err->message);
-			g_error_free(err);
-			g_free(session);
-			return FALSE;
-		}
-
-		filename = g_build_filename(purple_user_dir(), "fs-codec.conf", NULL);
-		codec_conf = fs_codec_list_from_keyfile(filename, &err);
-		g_free(filename);
-
-		if (err != NULL) {
-			if (err->code == 4)
-				purple_debug_info("media", "Couldn't read "
-						"fs-codec.conf: %s\n",
-						err->message);
-			else
-				purple_debug_error("media", "Error reading "
-						"fs-codec.conf: %s\n",
-						err->message);
-			g_error_free(err);
-		}
-
-		/*
-		 * Add SPEEX if the configuration file doesn't exist or
-		 * there isn't a speex entry.
-		 */
-		for (iter = codec_conf; iter; iter = g_list_next(iter)) {
-			FsCodec *codec = iter->data;
-			if (!g_ascii_strcasecmp(codec->encoding_name, "speex"))
-				break;
-		}
-
-		if (iter == NULL) {
-			codec_conf = g_list_prepend(codec_conf,
-					fs_codec_new(FS_CODEC_ID_ANY,
-					"SPEEX", FS_MEDIA_TYPE_AUDIO, 8000));
-			codec_conf = g_list_prepend(codec_conf,
-					fs_codec_new(FS_CODEC_ID_ANY,
-					"SPEEX", FS_MEDIA_TYPE_AUDIO, 16000));
-		}
-
-		fs_session_set_codec_preferences(session->session, codec_conf, NULL);
-
-		/*
-		 * Removes a 5-7 second delay before
-		 * receiving the src-pad-added signal.
-		 * Only works for non-multicast FsRtpSessions.
-		 */
-		if (is_nice || !strcmp(transmitter, "rawudp"))
-			g_object_set(G_OBJECT(session->session),
-					"no-rtcp-timeout", 0, NULL);
-
-		/*
-		 * Hack to make x264 work with Gmail video.
-		 */
-		if (is_nice && !strcmp(sess_id, "google-video")) {
-			FsElementAddedNotifier *notifier =
-					fs_element_added_notifier_new();
-			g_signal_connect(G_OBJECT(notifier), "element-added",
-					G_CALLBACK(purple_media_element_added_cb),
-					stream);
-			fs_element_added_notifier_add(notifier,
-					GST_BIN(media->priv->conference));
-		}
-
-		fs_codec_list_destroy(codec_conf);
-
 		session->id = g_strdup(sess_id);
 		session->media = media;
 		session->type = type;
@@ -2713,152 +1049,23 @@
 		g_signal_emit(media, purple_media_signals[STATE_CHANGED],
 				0, PURPLE_MEDIA_STATE_NEW,
 				session->id, NULL);
-
-		if (type_direction & FS_DIRECTION_SEND) {
-			session_type = purple_media_from_fs(media_type,
-					FS_DIRECTION_SEND);
-			src = purple_media_manager_get_element(
-					media->priv->manager, session_type,
-					media, session->id, who);
-			if (!GST_IS_ELEMENT(src)) {
-				purple_debug_error("media",
-						"Error creating src for session %s\n",
-						session->id);
-				purple_media_end(media, session->id, NULL);
-				return FALSE;
-			}
-
-			purple_media_set_src(media, session->id, src);
-			gst_element_set_state(session->src, GST_STATE_PLAYING);
-			purple_media_manager_create_output_window(
-					media->priv->manager,
-					session->media,
-					session->id, NULL);
-		}
-	}
-
-	if (!(participant = purple_media_add_participant(media, who))) {
-		purple_media_remove_session(media, session);
-		g_free(session);
-		return FALSE;
-	} else {
-		g_signal_emit(media, purple_media_signals[STATE_CHANGED],
-				0, PURPLE_MEDIA_STATE_NEW,
-				NULL, who);
 	}
 
-	stream = purple_media_get_stream(media, sess_id, who);
-
-	if (!stream) {
-		GError *err = NULL;
-		FsStream *fsstream = NULL;
-		const gchar *stun_ip = purple_network_get_stun_ip();
-		const gchar *turn_ip = purple_network_get_turn_ip();
-		guint new_num_params =
-					!stun_ip && !turn_ip ? num_params + 1 :
-					(stun_ip && is_nice) && turn_ip ?
-					num_params + 3 : num_params + 2;
-		guint next_param_index = num_params;
-		GParameter *param = g_new0(GParameter, new_num_params);
-		memcpy(param, params, sizeof(GParameter) * num_params);
-
-		/* set controlling mode according to direction */
-		param[next_param_index].name = "controlling-mode";
-		g_value_init(&param[next_param_index].value, G_TYPE_BOOLEAN);
-		g_value_set_boolean(&param[next_param_index].value, initiator);
-		next_param_index++;
-		
-		if (stun_ip || turn_ip) {
-			if (stun_ip) {
-				purple_debug_info("media", 
-					"setting property stun-ip on new stream: %s\n", stun_ip);
-
-				param[next_param_index].name = "stun-ip";
-				g_value_init(&param[next_param_index].value, G_TYPE_STRING);
-				g_value_set_string(&param[next_param_index].value, stun_ip);
-				next_param_index++;
-			}
-
-			if (turn_ip && is_nice) {
-				GValueArray *relay_info = g_value_array_new(0);
-				GValue value;
-				gint turn_port = 
-					purple_prefs_get_int("/purple/network/turn_port");
-				const gchar *username =
-					purple_prefs_get_string("/purple/network/turn_username");
-				const gchar *password =
-					purple_prefs_get_string("/purple/network/turn_password");
-				GstStructure *turn_setup = gst_structure_new("relay-info",
-					"ip", G_TYPE_STRING, turn_ip, 
-					"port", G_TYPE_UINT, turn_port,
-					"username", G_TYPE_STRING, username,
-					"password", G_TYPE_STRING, password,
-					NULL);
+	if (!g_list_find_custom(media->priv->participants,
+			who, (GCompareFunc)strcmp)) {
+		media->priv->participants = g_list_prepend(
+				media->priv->participants, g_strdup(who));
 
-				if (turn_setup) {
-					memset(&value, 0, sizeof(GValue));
-					g_value_init(&value, GST_TYPE_STRUCTURE);
-					gst_value_set_structure(&value, turn_setup);
-					relay_info = g_value_array_append(relay_info, &value);
-					gst_structure_free(turn_setup);
-
-					purple_debug_info("media",
-						"setting property relay-info on new stream\n");
-					param[next_param_index].name = "relay-info";
-					g_value_init(&param[next_param_index].value, 
-						G_TYPE_VALUE_ARRAY);
-					g_value_set_boxed(&param[next_param_index].value,
-						relay_info);
-					g_value_array_free(relay_info);
-				} else {
-					purple_debug_error("media", "Error relay info");
-					g_object_unref(participant);
-					g_hash_table_remove(media->priv->participants, who);
-					purple_media_remove_session(media, session);
-					g_free(session);
-					return FALSE;
-				}
-			}
-		}
+		g_signal_emit_by_name(media, "state-changed",
+				PURPLE_MEDIA_STATE_NEW, NULL, who);
+	}
 
-		fsstream = fs_session_new_stream(session->session,
-					participant, initiator == TRUE ?
-					type_direction : (type_direction &
-					FS_DIRECTION_RECV), transmitter,
-					new_num_params, param, &err);
-		g_free(param);
-
-		if (fsstream == NULL) {
-			purple_debug_error("media",
-					"Error creating stream: %s\n",
-					err && err->message ?
-					err->message : "NULL");
-			if (err)
-				g_error_free(err);
-			g_object_unref(participant);
-			g_hash_table_remove(media->priv->participants, who);
-			purple_media_remove_session(media, session);
-			g_free(session);
-			return FALSE;
-		}
-
-		stream = purple_media_insert_stream(session, who, fsstream);
-		stream->initiator = initiator;
-
-		/* callback for source pad added (new stream source ready) */
-		g_signal_connect(G_OBJECT(fsstream),
-				 "src-pad-added", G_CALLBACK(purple_media_src_pad_added_cb), stream);
+	if (purple_media_get_stream(media, sess_id, who) == NULL) {
+		stream = purple_media_insert_stream(session, who, initiator);
 
 		g_signal_emit(media, purple_media_signals[STATE_CHANGED],
 				0, PURPLE_MEDIA_STATE_NEW,
 				session->id, who);
-	} else {
-		if (purple_media_to_fs_stream_direction(stream->session->type)
-				!= type_direction) {
-			/* change direction */
-			g_object_set(stream->stream, "direction",
-					type_direction, NULL);
-		}
 	}
 
 	return TRUE;
@@ -2893,22 +1100,9 @@
 purple_media_get_codecs(PurpleMedia *media, const gchar *sess_id)
 {
 #ifdef USE_VV
-	GList *fscodecs;
-	GList *codecs;
-	PurpleMediaSession *session;
-
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
 
-	session = purple_media_get_session(media, sess_id);
-
-	if (session == NULL)
-		return NULL;
-
-	g_object_get(G_OBJECT(session->session),
-		     "codecs", &fscodecs, NULL);
-	codecs = purple_media_codec_list_from_fs(fscodecs);
-	fs_codec_list_destroy(fscodecs);
-	return codecs;
+	return purple_media_backend_get_codecs(media->priv->backend, sess_id);
 #else
 	return NULL;
 #endif
@@ -2919,11 +1113,10 @@
                                   const gchar *participant)
 {
 #ifdef USE_VV
-	PurpleMediaStream *stream;
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
-	stream = purple_media_get_stream(media, sess_id, participant);
-	return stream ? purple_media_candidate_list_from_fs(
-			stream->local_candidates) : NULL;
+
+	return purple_media_backend_get_local_candidates(media->priv->backend,
+			sess_id, participant);
 #else
 	return NULL;
 #endif
@@ -2936,7 +1129,6 @@
 {
 #ifdef USE_VV
 	PurpleMediaStream *stream;
-	GError *err = NULL;
 
 	g_return_if_fail(PURPLE_IS_MEDIA(media));
 	stream = purple_media_get_stream(media, sess_id, participant);
@@ -2951,18 +1143,10 @@
 	}
 
 	stream->remote_candidates = g_list_concat(stream->remote_candidates,
-			purple_media_candidate_list_to_fs(remote_candidates));
-
-	if (stream->initiator == TRUE || stream->accepted == TRUE) {
-		fs_stream_set_remote_candidates(stream->stream,
-				stream->remote_candidates, &err);
+			purple_media_candidate_list_copy(remote_candidates));
 
-		if (err) {
-			purple_debug_error("media", "Error adding remote"
-					" candidates: %s\n", err->message);
-			g_error_free(err);
-		}
-	}
+	purple_media_backend_add_remote_candidates(media->priv->backend,
+			sess_id, participant, remote_candidates);
 #endif
 }
 
@@ -2980,7 +1164,7 @@
 	PurpleMediaStream *stream;
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
 	stream = purple_media_get_stream(media, sess_id, participant);
-	return purple_media_candidate_list_from_fs(
+	return purple_media_candidate_list_copy(
 			stream->active_local_candidates);
 #else
 	return NULL;
@@ -2995,7 +1179,7 @@
 	PurpleMediaStream *stream;
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
 	stream = purple_media_get_stream(media, sess_id, participant);
-	return purple_media_candidate_list_from_fs(
+	return purple_media_candidate_list_copy(
 			stream->active_remote_candidates);
 #else
 	return NULL;
@@ -3008,29 +1192,10 @@
                                const gchar *participant, GList *codecs)
 {
 #ifdef USE_VV
-	PurpleMediaStream *stream;
-	FsStream *fsstream;
-	GList *fscodecs;
-	GError *err = NULL;
-
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
-	stream = purple_media_get_stream(media, sess_id, participant);
-
-	if (stream == NULL)
-		return FALSE;
 
-	fsstream = stream->stream;
-	fscodecs = purple_media_codec_list_to_fs(codecs);
-	fs_stream_set_remote_codecs(fsstream, fscodecs, &err);
-	fs_codec_list_destroy(fscodecs);
-
-	if (err) {
-		purple_debug_error("media", "Error setting remote codecs: %s\n",
-				   err->message);
-		g_error_free(err);
-		return FALSE;
-	}
-	return TRUE;
+	return purple_media_backend_set_remote_codecs(media->priv->backend,
+			sess_id, participant, codecs);
 #else
 	return FALSE;
 #endif
@@ -3067,27 +1232,10 @@
 purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec)
 {
 #ifdef USE_VV
-	PurpleMediaSession *session;
-	FsCodec *fscodec;
-	GError *err = NULL;
-
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
 
-	session = purple_media_get_session(media, sess_id);
-
-	if (session != NULL)
-		return FALSE;
-
-	fscodec = purple_media_codec_to_fs(codec);
-	fs_session_set_send_codec(session->session, fscodec, &err);
-	fs_codec_destroy(fscodec);
-
-	if (err) {
-		purple_debug_error("media", "Error setting send codec\n");
-		g_error_free(err);
-		return FALSE;
-	}
-	return TRUE;
+	return purple_media_backend_set_send_codec(
+			media->priv->backend, sess_id, codec);
 #else
 	return FALSE;
 #endif
@@ -3097,40 +1245,10 @@
 purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id)
 {
 #ifdef USE_VV
-	gboolean ret;
-
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
 
-	if (sess_id != NULL) {
-		PurpleMediaSession *session;
-		session = purple_media_get_session(media, sess_id);
-
-		if (session == NULL)
-			return FALSE;
-		if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
-				PURPLE_MEDIA_SEND_VIDEO))
-			g_object_get(session->session,
-					"codecs-ready", &ret, NULL);
-		else
-			ret = TRUE;
-	} else {
-		GList *values = g_hash_table_get_values(media->priv->sessions);
-		for (; values; values = g_list_delete_link(values, values)) {
-			PurpleMediaSession *session = values->data;
-			if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
-					PURPLE_MEDIA_SEND_VIDEO))
-				g_object_get(session->session,
-						"codecs-ready", &ret, NULL);
-			else
-				ret = TRUE;
-
-			if (ret == FALSE)
-				break;
-		}
-		if (values != NULL)
-			g_list_free(values);
-	}
-	return ret;
+	return purple_media_backend_codecs_ready(
+			media->priv->backend, sess_id);
 #else
 	return FALSE;
 #endif
@@ -3206,31 +1324,13 @@
 		const gchar *session_id, double level)
 {
 #ifdef USE_VV
-	GList *sessions;
-
 	g_return_if_fail(PURPLE_IS_MEDIA(media));
-
-	purple_prefs_set_int("/purple/media/audio/volume/input", level);
-
-	if (session_id == NULL)
-		sessions = g_hash_table_get_values(media->priv->sessions);
-	else
-		sessions = g_list_append(NULL,
-				purple_media_get_session(media, session_id));
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend));
 
-	for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
-		PurpleMediaSession *session = sessions->data;
-
-		if (session->type & PURPLE_MEDIA_SEND_AUDIO) {
-			gchar *name = g_strdup_printf("volume_%s",
-					session->id);
-			GstElement *volume = gst_bin_get_by_name(
-					GST_BIN(session->media->priv->confbin),
-					name);
-			g_free(name);
-			g_object_set(volume, "volume", level/10.0, NULL);
-		}
-	}
+	purple_media_backend_fs2_set_input_volume(
+			PURPLE_MEDIA_BACKEND_FS2(
+			media->priv->backend),
+			session_id, level);
 #endif
 }
 
@@ -3239,23 +1339,13 @@
 		double level)
 {
 #ifdef USE_VV
-	GList *streams;
-
 	g_return_if_fail(PURPLE_IS_MEDIA(media));
-
-	purple_prefs_set_int("/purple/media/audio/volume/output", level);
-
-	streams = purple_media_get_streams(media,
-			session_id, participant);
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend));
 
-	for (; streams; streams = g_list_delete_link(streams, streams)) {
-		PurpleMediaStream *stream = streams->data;
-
-		if (stream->session->type & PURPLE_MEDIA_RECV_AUDIO
-				&& GST_IS_ELEMENT(stream->volume)) {
-			g_object_set(stream->volume, "volume", level/10.0, NULL);
-		}
-	}
+	purple_media_backend_fs2_set_output_volume(
+			PURPLE_MEDIA_BACKEND_FS2(
+			media->priv->backend),
+			session_id, participant, level);
 #endif
 }
 
@@ -3303,16 +1393,11 @@
 #ifdef USE_VV
 	g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
 
-	if (session_id != NULL && participant == NULL) {
-		PurpleMediaSession *session =
-				purple_media_get_session(media, session_id);
-		return (session != NULL) ? session->tee : NULL;
-	} else if (session_id != NULL && participant != NULL) {
-		PurpleMediaStream *stream =
-				purple_media_get_stream(media,
+	if (PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend))
+		return purple_media_backend_fs2_get_tee(
+				PURPLE_MEDIA_BACKEND_FS2(
+				media->priv->backend),
 				session_id, participant);
-		return (stream != NULL) ? stream->tee : NULL;
-	}
 	g_return_val_if_reached(NULL);
 #else
 	return NULL;
--- a/libpurple/media.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/media.h	Thu Feb 18 21:38:43 2010 +0000
@@ -27,26 +27,15 @@
 #ifndef _PURPLE_MEDIA_H_
 #define _PURPLE_MEDIA_H_
 
+#include "media/candidate.h"
+#include "media/codec.h"
+#include "media/enum-types.h"
+
 #include <glib.h>
 #include <glib-object.h>
 
 G_BEGIN_DECLS
 
-#define PURPLE_TYPE_MEDIA_CANDIDATE           (purple_media_candidate_get_type())
-#define PURPLE_MEDIA_CANDIDATE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
-#define PURPLE_MEDIA_CANDIDATE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
-#define PURPLE_IS_MEDIA_CANDIDATE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CANDIDATE))
-#define PURPLE_IS_MEDIA_CANDIDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CANDIDATE))
-#define PURPLE_MEDIA_CANDIDATE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
-
-#define PURPLE_TYPE_MEDIA_CODEC           (purple_media_codec_get_type())
-#define PURPLE_MEDIA_CODEC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
-#define PURPLE_MEDIA_CODEC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
-#define PURPLE_IS_MEDIA_CODEC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CODEC))
-#define PURPLE_IS_MEDIA_CODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CODEC))
-#define PURPLE_MEDIA_CODEC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
-
-#define PURPLE_TYPE_MEDIA_SESSION_TYPE (purple_media_session_type_get_type())
 #define PURPLE_TYPE_MEDIA            (purple_media_get_type())
 #define PURPLE_MEDIA(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA, PurpleMedia))
 #define PURPLE_MEDIA_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA, PurpleMediaClass))
@@ -54,79 +43,8 @@
 #define PURPLE_IS_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA))
 #define PURPLE_MEDIA_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA, PurpleMediaClass))
 
-#define PURPLE_TYPE_MEDIA_CANDIDATE_TYPE (purple_media_candidate_type_get_type())
-#define PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL (purple_media_network_protocol_get_type())
-#define PURPLE_MEDIA_TYPE_STATE      (purple_media_state_changed_get_type())
-#define PURPLE_MEDIA_TYPE_INFO_TYPE	(purple_media_info_type_get_type())
-
 /** An opaque structure representing a media call. */
 typedef struct _PurpleMedia PurpleMedia;
-/** An opaque structure representing a network candidate (IP Address and port pair). */
-typedef struct _PurpleMediaCandidate PurpleMediaCandidate;
-/** An opaque structure representing an audio or video codec. */
-typedef struct _PurpleMediaCodec PurpleMediaCodec;
-
-/** Media caps */
-typedef enum {
-	PURPLE_MEDIA_CAPS_NONE = 0,
-	PURPLE_MEDIA_CAPS_AUDIO = 1,
-	PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION = 1 << 1,
-	PURPLE_MEDIA_CAPS_VIDEO = 1 << 2,
-	PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION = 1 << 3,
-	PURPLE_MEDIA_CAPS_AUDIO_VIDEO = 1 << 4,
-	PURPLE_MEDIA_CAPS_MODIFY_SESSION = 1 << 5,
-	PURPLE_MEDIA_CAPS_CHANGE_DIRECTION = 1 << 6
-} PurpleMediaCaps;
-
-/** Media session types */
-typedef enum {
-	PURPLE_MEDIA_NONE	= 0,
-	PURPLE_MEDIA_RECV_AUDIO = 1 << 0,
-	PURPLE_MEDIA_SEND_AUDIO = 1 << 1,
-	PURPLE_MEDIA_RECV_VIDEO = 1 << 2,
-	PURPLE_MEDIA_SEND_VIDEO = 1 << 3,
-	PURPLE_MEDIA_AUDIO = PURPLE_MEDIA_RECV_AUDIO | PURPLE_MEDIA_SEND_AUDIO,
-	PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO
-} PurpleMediaSessionType;
-
-/** Media state-changed types */
-typedef enum {
-	PURPLE_MEDIA_STATE_NEW = 0,
-	PURPLE_MEDIA_STATE_CONNECTED,
-	PURPLE_MEDIA_STATE_END
-} PurpleMediaState;
-
-/** Media info types */
-typedef enum {
-	PURPLE_MEDIA_INFO_HANGUP = 0,
-	PURPLE_MEDIA_INFO_ACCEPT,
-	PURPLE_MEDIA_INFO_REJECT,
-	PURPLE_MEDIA_INFO_MUTE,
-	PURPLE_MEDIA_INFO_UNMUTE,
-	PURPLE_MEDIA_INFO_PAUSE,
-	PURPLE_MEDIA_INFO_UNPAUSE,
-	PURPLE_MEDIA_INFO_HOLD,
-	PURPLE_MEDIA_INFO_UNHOLD
-} PurpleMediaInfoType;
-
-typedef enum {
-	PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
-	PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
-	PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
-	PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
-	PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST
-} PurpleMediaCandidateType;
-
-typedef enum {
-	PURPLE_MEDIA_COMPONENT_NONE = 0,
-	PURPLE_MEDIA_COMPONENT_RTP = 1,
-	PURPLE_MEDIA_COMPONENT_RTCP = 2
-} PurpleMediaComponentType;
-
-typedef enum {
-	PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
-	PURPLE_MEDIA_NETWORK_PROTOCOL_TCP
-} PurpleMediaNetworkProtocol;
 
 #include "signals.h"
 #include "util.h"
@@ -136,33 +54,6 @@
 #endif
 
 /**
- * Gets the media session type's GType
- *
- * @return The media session type's GType.
- *
- * @since 2.6.0
- */
-GType purple_media_session_type_get_type(void);
-
-/**
- * Gets the media candidate type's GType
- *
- * @return The media candidate type's GType.
- *
- * @since 2.6.0
- */
-GType purple_media_candidate_type_get_type(void);
-
-/**
- * Gets the media network protocol's GType
- *
- * @return The media network protocol's GType.
- *
- * @since 2.6.0
- */
-GType purple_media_network_protocol_get_type(void);
-
-/**
  * Gets the media class's GType
  *
  * @return The media class's GType.
@@ -172,187 +63,6 @@
 GType purple_media_get_type(void);
 
 /**
- * Gets the type of the state-changed enum
- *
- * @return The state-changed enum's GType
- *
- * @since 2.6.0
- */
-GType purple_media_state_changed_get_type(void);
-
-/**
- * Gets the type of the info type enum
- *
- * @return The info type enum's GType
- *
- * @since 2.6.0
- */
-GType purple_media_info_type_get_type(void);
-
-/**
- * Gets the type of the media candidate structure.
- *
- * @return The media canditate's GType
- *
- * @since 2.6.0
- */
-GType purple_media_candidate_get_type(void);
-
-/**
- * Creates a PurpleMediaCandidate instance.
- *
- * @param foundation The foundation of the candidate.
- * @param component_id The component this candidate is for.
- * @param type The type of candidate.
- * @param proto The protocol this component is for.
- * @param ip The IP address of this component.
- * @param port The network port.
- *
- * @return The newly created PurpleMediaCandidate instance.
- *
- * @since 2.6.0
- */
-PurpleMediaCandidate *purple_media_candidate_new(
-		const gchar *foundation, guint component_id,
-		PurpleMediaCandidateType type,
-		PurpleMediaNetworkProtocol proto,
-		const gchar *ip, guint port);
-
-/**
- * Copies a GList of PurpleMediaCandidate and its contents.
- *
- * @param candidates The list of candidates to be copied.
- *
- * @return The copy of the GList.
- *
- * @since 2.6.0
- */
-GList *purple_media_candidate_list_copy(GList *candidates);
-
-/**
- * Frees a GList of PurpleMediaCandidate and its contents.
- *
- * @param candidates The list of candidates to be freed.
- *
- * @since 2.6.0
- */
-void purple_media_candidate_list_free(GList *candidates);
-
-gchar *purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate);
-guint purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate);
-gchar *purple_media_candidate_get_ip(PurpleMediaCandidate *candidate);
-guint16 purple_media_candidate_get_port(PurpleMediaCandidate *candidate);
-gchar *purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate);
-guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate);
-PurpleMediaNetworkProtocol purple_media_candidate_get_protocol(
-		PurpleMediaCandidate *candidate);
-guint32 purple_media_candidate_get_priority(PurpleMediaCandidate *candidate);
-PurpleMediaCandidateType purple_media_candidate_get_candidate_type(
-		PurpleMediaCandidate *candidate);
-gchar *purple_media_candidate_get_username(PurpleMediaCandidate *candidate);
-gchar *purple_media_candidate_get_password(PurpleMediaCandidate *candidate);
-guint purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate);
-
-/**
- * Gets the type of the media codec structure.
- *
- * @return The media codec's GType
- *
- * @since 2.6.0
- */
-GType purple_media_codec_get_type(void);
-
-/**
- * Creates a new PurpleMediaCodec instance.
- *
- * @param id Codec identifier.
- * @param encoding_name Name of the media type this encodes.
- * @param media_type PurpleMediaSessionType of this codec.
- * @param clock_rate The clock rate this codec encodes at, if applicable.
- *
- * @return The newly created PurpleMediaCodec.
- *
- * @since 2.6.0
- */
-PurpleMediaCodec *purple_media_codec_new(int id, const char *encoding_name,
-		PurpleMediaSessionType media_type, guint clock_rate);
-
-guint purple_media_codec_get_id(PurpleMediaCodec *codec);
-gchar *purple_media_codec_get_encoding_name(PurpleMediaCodec *codec);
-guint purple_media_codec_get_clock_rate(PurpleMediaCodec *codec);
-guint purple_media_codec_get_channels(PurpleMediaCodec *codec);
-GList *purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec);
-
-/**
- * Creates a string representation of the codec.
- *
- * @param codec The codec to create the string of.
- *
- * @return The new string representation.
- *
- * @since 2.6.0
- */
-gchar *purple_media_codec_to_string(const PurpleMediaCodec *codec);
-
-/**
- * Adds an optional parameter to the codec.
- *
- * @param codec The codec to add the parameter to.
- * @param name The name of the parameter to add.
- * @param value The value of the parameter to add.
- *
- * @since 2.6.0
- */
-void purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec,
-		const gchar *name, const gchar *value);
-
-/**
- * Removes an optional parameter from the codec.
- *
- * @param codec The codec to remove the parameter from.
- * @param param A pointer to the parameter to remove.
- *
- * @since 2.6.0
- */
-void purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec,
-		PurpleKeyValuePair *param);
-
-/**
- * Gets an optional parameter based on the values given.
- *
- * @param codec The codec to find the parameter in.
- * @param name The name of the parameter to search for.
- * @param value The value to search for or NULL.
- *
- * @return The value found or NULL.
- *
- * @since 2.6.0
- */
-PurpleKeyValuePair *purple_media_codec_get_optional_parameter(
-		PurpleMediaCodec *codec, const gchar *name,
-		const gchar *value);
-
-/**
- * Copies a GList of PurpleMediaCodec and its contents.
- *
- * @param codecs The list of codecs to be copied.
- *
- * @return The copy of the GList.
- *
- * @since 2.6.0
- */
-GList *purple_media_codec_list_copy(GList *codecs);
-
-/**
- * Frees a GList of PurpleMediaCodec and its contents.
- *
- * @param codecs The list of codecs to be freed.
- *
- * @since 2.6.0
- */
-void purple_media_codec_list_free(GList *codecs);
-
-/**
  * Gets a list of session IDs.
  *
  * @param media The media session from which to retrieve session IDs.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/backend-fs2.c	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,2038 @@
+/**
+ * @file backend-fs2.c Farsight 2 backend for media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#include "internal.h"
+
+#include "backend-fs2.h"
+
+#ifdef USE_VV
+#include "backend-iface.h"
+#include "debug.h"
+#include "network.h"
+#include "media-gst.h"
+
+#include <gst/farsight/fs-conference-iface.h>
+#include <gst/farsight/fs-element-added-notifier.h>
+
+/** @copydoc _PurpleMediaBackendFs2Class */
+typedef struct _PurpleMediaBackendFs2Class PurpleMediaBackendFs2Class;
+/** @copydoc _PurpleMediaBackendFs2Private */
+typedef struct _PurpleMediaBackendFs2Private PurpleMediaBackendFs2Private;
+/** @copydoc _PurpleMediaBackendFs2Session */
+typedef struct _PurpleMediaBackendFs2Session PurpleMediaBackendFs2Session;
+/** @copydoc _PurpleMediaBackendFs2Stream */
+typedef struct _PurpleMediaBackendFs2Stream PurpleMediaBackendFs2Stream;
+
+#define PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj) \
+		(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
+		PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2Private))
+
+static void purple_media_backend_iface_init(PurpleMediaBackendIface *iface);
+
+static gboolean
+gst_bus_cb(GstBus *bus, GstMessage *msg, PurpleMediaBackendFs2 *self);
+static void
+state_changed_cb(PurpleMedia *media, PurpleMediaState state,
+		gchar *sid, gchar *name, PurpleMediaBackendFs2 *self);
+static void
+stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type,
+		gchar *sid, gchar *name, gboolean local,
+		PurpleMediaBackendFs2 *self);
+
+static gboolean purple_media_backend_fs2_add_stream(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *who,
+		PurpleMediaSessionType type, gboolean initiator,
+		const gchar *transmitter,
+		guint num_params, GParameter *params);
+static void purple_media_backend_fs2_add_remote_candidates(
+		PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *remote_candidates);
+static gboolean purple_media_backend_fs2_codecs_ready(PurpleMediaBackend *self,
+		const gchar *sess_id);
+static GList *purple_media_backend_fs2_get_codecs(PurpleMediaBackend *self,
+		const gchar *sess_id);
+static GList *purple_media_backend_fs2_get_local_candidates(
+		PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant);
+static gboolean purple_media_backend_fs2_set_remote_codecs(
+		PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *codecs);
+static gboolean purple_media_backend_fs2_set_send_codec(
+		PurpleMediaBackend *self, const gchar *sess_id,
+		PurpleMediaCodec *codec);
+
+struct _PurpleMediaBackendFs2Class
+{
+	GObjectClass parent_class;
+};
+
+struct _PurpleMediaBackendFs2
+{
+	GObject parent;
+};
+
+G_DEFINE_TYPE_WITH_CODE(PurpleMediaBackendFs2, purple_media_backend_fs2,
+		G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(
+		PURPLE_TYPE_MEDIA_BACKEND, purple_media_backend_iface_init));
+
+struct _PurpleMediaBackendFs2Stream
+{
+	PurpleMediaBackendFs2Session *session;
+	gchar *participant;
+	FsStream *stream;
+
+	GstElement *src;
+	GstElement *tee;
+	GstElement *volume;
+	GstElement *level;
+
+	GList *local_candidates;
+	GList *remote_candidates;
+
+	guint connected_cb_id;
+};
+
+struct _PurpleMediaBackendFs2Session
+{
+	PurpleMediaBackendFs2 *backend;
+	gchar *id;
+	FsSession *session;
+
+	GstElement *src;
+	GstElement *tee;
+
+	PurpleMediaSessionType type;
+};
+
+struct _PurpleMediaBackendFs2Private
+{
+	PurpleMedia *media;
+	GstElement *confbin;
+	FsConference *conference;
+	gchar *conference_type;
+
+	GHashTable *sessions;
+	GHashTable *participants;
+
+	GList *streams;
+};
+
+enum {
+	PROP_0,
+	PROP_CONFERENCE_TYPE,
+	PROP_MEDIA,
+};
+
+static void
+purple_media_backend_fs2_init(PurpleMediaBackendFs2 *self)
+{
+}
+
+static void
+purple_media_backend_fs2_dispose(GObject *obj)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj);
+	GList *iter = NULL;
+
+	purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n");
+
+	if (priv->confbin) {
+		GstElement *pipeline;
+
+		pipeline = purple_media_manager_get_pipeline(
+				purple_media_get_manager(priv->media));
+
+		gst_element_set_locked_state(priv->confbin, TRUE);
+		gst_element_set_state(GST_ELEMENT(priv->confbin),
+				GST_STATE_NULL);
+
+		if (pipeline) {
+			GstBus *bus;
+			gst_bin_remove(GST_BIN(pipeline), priv->confbin);
+			bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
+			g_signal_handlers_disconnect_matched(G_OBJECT(bus),
+					G_SIGNAL_MATCH_FUNC |
+					G_SIGNAL_MATCH_DATA,
+					0, 0, 0, gst_bus_cb, obj);
+			gst_object_unref(bus);
+		} else {
+			purple_debug_warning("backend-fs2", "Unable to "
+					"properly dispose the conference. "
+					"Couldn't get the pipeline.\n");
+		}
+
+		priv->confbin = NULL;
+		priv->conference = NULL;
+
+	}
+
+	if (priv->sessions) {
+		GList *sessions = g_hash_table_get_values(priv->sessions);
+
+		for (; sessions; sessions =
+				g_list_delete_link(sessions, sessions)) {
+			PurpleMediaBackendFs2Session *session =
+					sessions->data;
+
+			if (session->session) {
+				g_object_unref(session->session);
+				session->session = NULL;
+			}
+		}
+	}
+
+	if (priv->participants) {
+		GList *participants =
+				g_hash_table_get_values(priv->participants);
+		for (; participants; participants = g_list_delete_link(
+				participants, participants))
+			g_object_unref(participants->data);
+		priv->participants = NULL;
+	}
+
+	for (iter = priv->streams; iter; iter = g_list_next(iter)) {
+		PurpleMediaBackendFs2Stream *stream = iter->data;
+		if (stream->stream) {
+			g_object_unref(stream->stream);
+			stream->stream = NULL;
+		}
+	}
+
+	if (priv->media) {
+		g_object_remove_weak_pointer(G_OBJECT(priv->media),
+				(gpointer*)&priv->media);
+		priv->media = NULL;
+	}
+
+	G_OBJECT_CLASS(purple_media_backend_fs2_parent_class)->dispose(obj);
+}
+
+static void
+purple_media_backend_fs2_finalize(GObject *obj)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj);
+
+	purple_debug_info("backend-fs2", "purple_media_backend_fs2_finalize\n");
+
+	g_free(priv->conference_type);
+
+	for (; priv->streams; priv->streams =
+			g_list_delete_link(priv->streams, priv->streams)) {
+		PurpleMediaBackendFs2Stream *stream = priv->streams->data;
+
+		/* Remove the connected_cb timeout */
+		if (stream->connected_cb_id != 0)
+			purple_timeout_remove(stream->connected_cb_id);
+
+		g_free(stream->participant);
+
+		if (stream->local_candidates)
+			fs_candidate_list_destroy(stream->local_candidates);
+
+		if (stream->remote_candidates)
+			fs_candidate_list_destroy(stream->remote_candidates);
+
+		g_free(stream);
+	}
+
+	if (priv->sessions) {
+		GList *sessions = g_hash_table_get_values(priv->sessions);
+
+		for (; sessions; sessions =
+				g_list_delete_link(sessions, sessions)) {
+			PurpleMediaBackendFs2Session *session =
+					sessions->data;
+			g_free(session->id);
+			g_free(session);
+		}
+
+		g_hash_table_destroy(priv->sessions);
+	}
+
+	G_OBJECT_CLASS(purple_media_backend_fs2_parent_class)->finalize(obj);
+}
+
+static void
+purple_media_backend_fs2_set_property(GObject *object, guint prop_id,
+		const GValue *value, GParamSpec *pspec)
+{
+	PurpleMediaBackendFs2Private *priv;
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(object));
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(object);
+
+	switch (prop_id) {
+		case PROP_CONFERENCE_TYPE:
+			priv->conference_type = g_value_dup_string(value);
+			break;
+		case PROP_MEDIA:
+			priv->media = g_value_get_object(value);
+
+			if (priv->media == NULL)
+				break;
+
+			g_object_add_weak_pointer(G_OBJECT(priv->media),
+					(gpointer*)&priv->media);
+
+			g_signal_connect(G_OBJECT(priv->media),
+					"state-changed",
+					G_CALLBACK(state_changed_cb),
+					PURPLE_MEDIA_BACKEND_FS2(object));
+			g_signal_connect(G_OBJECT(priv->media), "stream-info",
+					G_CALLBACK(stream_info_cb),
+					PURPLE_MEDIA_BACKEND_FS2(object));
+			break;
+		default:	
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(
+					object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_media_backend_fs2_get_property(GObject *object, guint prop_id,
+		GValue *value, GParamSpec *pspec)
+{
+	PurpleMediaBackendFs2Private *priv;
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(object));
+	
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(object);
+
+	switch (prop_id) {
+		case PROP_CONFERENCE_TYPE:
+			g_value_set_string(value, priv->conference_type);
+			break;
+		case PROP_MEDIA:
+			g_value_set_object(value, priv->media);
+			break;
+		default:	
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(
+					object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_media_backend_fs2_class_init(PurpleMediaBackendFs2Class *klass)
+{
+	GObjectClass *gobject_class = (GObjectClass*)klass;
+
+	gobject_class->dispose = purple_media_backend_fs2_dispose;
+	gobject_class->finalize = purple_media_backend_fs2_finalize;
+	gobject_class->set_property = purple_media_backend_fs2_set_property;
+	gobject_class->get_property = purple_media_backend_fs2_get_property;
+
+	g_object_class_override_property(gobject_class, PROP_CONFERENCE_TYPE,
+			"conference-type");
+	g_object_class_override_property(gobject_class, PROP_MEDIA, "media");
+
+	g_type_class_add_private(klass, sizeof(PurpleMediaBackendFs2Private));
+}
+
+static void
+purple_media_backend_iface_init(PurpleMediaBackendIface *iface)
+{
+	iface->add_stream = purple_media_backend_fs2_add_stream;
+	iface->add_remote_candidates =
+			purple_media_backend_fs2_add_remote_candidates;
+	iface->codecs_ready = purple_media_backend_fs2_codecs_ready;
+	iface->get_codecs = purple_media_backend_fs2_get_codecs;
+	iface->get_local_candidates =
+			purple_media_backend_fs2_get_local_candidates;
+	iface->set_remote_codecs = purple_media_backend_fs2_set_remote_codecs;
+	iface->set_send_codec = purple_media_backend_fs2_set_send_codec;
+}
+
+static FsMediaType
+session_type_to_fs_media_type(PurpleMediaSessionType type)
+{
+	if (type & PURPLE_MEDIA_AUDIO)
+		return FS_MEDIA_TYPE_AUDIO;
+	else if (type & PURPLE_MEDIA_VIDEO)
+		return FS_MEDIA_TYPE_VIDEO;
+	else
+		return 0;
+}
+
+static FsStreamDirection
+session_type_to_fs_stream_direction(PurpleMediaSessionType type)
+{
+	if ((type & PURPLE_MEDIA_AUDIO) == PURPLE_MEDIA_AUDIO ||
+			(type & PURPLE_MEDIA_VIDEO) == PURPLE_MEDIA_VIDEO)
+		return FS_DIRECTION_BOTH;
+	else if ((type & PURPLE_MEDIA_SEND_AUDIO) ||
+			(type & PURPLE_MEDIA_SEND_VIDEO))
+		return FS_DIRECTION_SEND;
+	else if ((type & PURPLE_MEDIA_RECV_AUDIO) ||
+			(type & PURPLE_MEDIA_RECV_VIDEO))
+		return FS_DIRECTION_RECV;
+	else
+		return FS_DIRECTION_NONE;
+}
+
+static PurpleMediaSessionType
+session_type_from_fs(FsMediaType type, FsStreamDirection direction)
+{
+	PurpleMediaSessionType result = PURPLE_MEDIA_NONE;
+	if (type == FS_MEDIA_TYPE_AUDIO) {
+		if (direction & FS_DIRECTION_SEND)
+			result |= PURPLE_MEDIA_SEND_AUDIO;
+		if (direction & FS_DIRECTION_RECV)
+			result |= PURPLE_MEDIA_RECV_AUDIO;
+	} else if (type == FS_MEDIA_TYPE_VIDEO) {
+		if (direction & FS_DIRECTION_SEND)
+			result |= PURPLE_MEDIA_SEND_VIDEO;
+		if (direction & FS_DIRECTION_RECV)
+			result |= PURPLE_MEDIA_RECV_VIDEO;
+	}
+	return result;
+}
+
+static FsCandidate *
+candidate_to_fs(PurpleMediaCandidate *candidate)
+{
+	FsCandidate *fscandidate;
+	gchar *foundation;
+	guint component_id;
+	gchar *ip;
+	guint port;
+	gchar *base_ip;
+	guint base_port;
+	PurpleMediaNetworkProtocol proto;
+	guint32 priority;
+	PurpleMediaCandidateType type;
+	gchar *username;
+	gchar *password;
+	guint ttl;
+
+	if (candidate == NULL)
+		return NULL;
+
+	g_object_get(G_OBJECT(candidate),
+			"foundation", &foundation,
+			"component-id", &component_id,
+			"ip", &ip,
+			"port", &port,
+			"base-ip", &base_ip,
+			"base-port", &base_port,
+			"protocol", &proto,
+			"priority", &priority,
+			"type", &type,
+			"username", &username,
+			"password", &password,
+			"ttl", &ttl,
+			NULL);
+
+	fscandidate = fs_candidate_new(foundation,
+			component_id, type,
+			proto, ip, port);
+
+	fscandidate->base_ip = base_ip;
+	fscandidate->base_port = base_port;
+	fscandidate->priority = priority;
+	fscandidate->username = username;
+	fscandidate->password = password;
+	fscandidate->ttl = ttl;
+
+	g_free(foundation);
+	g_free(ip);
+	return fscandidate;
+}
+
+static GList *
+candidate_list_to_fs(GList *candidates)
+{
+	GList *new_list = NULL;
+
+	for (; candidates; candidates = g_list_next(candidates)) {
+		new_list = g_list_prepend(new_list,
+				candidate_to_fs(candidates->data));
+	}
+
+	new_list = g_list_reverse(new_list);
+	return new_list;
+}
+
+static PurpleMediaCandidate *
+candidate_from_fs(FsCandidate *fscandidate)
+{
+	PurpleMediaCandidate *candidate;
+
+	if (fscandidate == NULL)
+		return NULL;
+
+	candidate = purple_media_candidate_new(fscandidate->foundation,
+		fscandidate->component_id, fscandidate->type,
+		fscandidate->proto, fscandidate->ip, fscandidate->port);
+	g_object_set(candidate,
+			"base-ip", fscandidate->base_ip,
+			"base-port", fscandidate->base_port,
+			"priority", fscandidate->priority,
+			"username", fscandidate->username,
+			"password", fscandidate->password,
+			"ttl", fscandidate->ttl, NULL);
+	return candidate;
+}
+
+static GList *
+candidate_list_from_fs(GList *candidates)
+{
+	GList *new_list = NULL;
+
+	for (; candidates; candidates = g_list_next(candidates)) {
+		new_list = g_list_prepend(new_list,
+			candidate_from_fs(candidates->data));
+	}
+
+	new_list = g_list_reverse(new_list);
+	return new_list;
+}
+
+static FsCodec *
+codec_to_fs(const PurpleMediaCodec *codec)
+{
+	FsCodec *new_codec;
+	gint id;
+	char *encoding_name;
+	PurpleMediaSessionType media_type;
+	guint clock_rate;
+	guint channels;
+	GList *iter;
+
+	if (codec == NULL)
+		return NULL;
+
+	g_object_get(G_OBJECT(codec),
+			"id", &id,
+			"encoding-name", &encoding_name,
+			"media-type", &media_type,
+			"clock-rate", &clock_rate,
+			"channels", &channels,
+			"optional-params", &iter,
+			NULL);
+
+	new_codec = fs_codec_new(id, encoding_name,
+			session_type_to_fs_media_type(media_type),
+			clock_rate);
+	new_codec->channels = channels;
+
+	for (; iter; iter = g_list_next(iter)) {
+		PurpleKeyValuePair *param = (PurpleKeyValuePair*)iter->data;
+		fs_codec_add_optional_parameter(new_codec,
+				param->key, param->value);
+	}
+
+	g_free(encoding_name);
+	return new_codec;
+}
+
+static PurpleMediaCodec *
+codec_from_fs(const FsCodec *codec)
+{
+	PurpleMediaCodec *new_codec;
+	GList *iter;
+
+	if (codec == NULL)
+		return NULL;
+
+	new_codec = purple_media_codec_new(codec->id, codec->encoding_name,
+			session_type_from_fs(codec->media_type,
+			FS_DIRECTION_BOTH), codec->clock_rate);
+	g_object_set(new_codec, "channels", codec->channels, NULL);
+
+	for (iter = codec->optional_params; iter; iter = g_list_next(iter)) {
+		FsCodecParameter *param = (FsCodecParameter*)iter->data;
+		purple_media_codec_add_optional_parameter(new_codec,
+				param->name, param->value);
+	}
+
+	return new_codec;
+}
+
+static GList *
+codec_list_from_fs(GList *codecs)
+{
+	GList *new_list = NULL;
+
+	for (; codecs; codecs = g_list_next(codecs)) {
+		new_list = g_list_prepend(new_list,
+				codec_from_fs(codecs->data));
+	}
+
+	new_list = g_list_reverse(new_list);
+	return new_list;
+}
+
+static GList *
+codec_list_to_fs(GList *codecs)
+{
+	GList *new_list = NULL;
+
+	for (; codecs; codecs = g_list_next(codecs)) {
+		new_list = g_list_prepend(new_list,
+				codec_to_fs(codecs->data));
+	}
+
+	new_list = g_list_reverse(new_list);
+	return new_list;
+}
+
+static PurpleMediaBackendFs2Session *
+get_session(PurpleMediaBackendFs2 *self, const gchar *sess_id)
+{
+	PurpleMediaBackendFs2Private *priv;
+	PurpleMediaBackendFs2Session *session = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+
+	if (priv->sessions != NULL)
+		session = g_hash_table_lookup(priv->sessions, sess_id);
+
+	return session;
+}
+
+static FsParticipant *
+get_participant(PurpleMediaBackendFs2 *self, const gchar *name)
+{
+	PurpleMediaBackendFs2Private *priv;
+	FsParticipant *participant = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+
+	if (priv->participants != NULL)
+		participant = g_hash_table_lookup(priv->participants, name);
+
+	return participant;
+}
+
+static PurpleMediaBackendFs2Stream *
+get_stream(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, const gchar *name)
+{
+	PurpleMediaBackendFs2Private *priv;
+	GList *streams;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	streams = priv->streams;
+
+	for (; streams; streams = g_list_next(streams)) {
+		PurpleMediaBackendFs2Stream *stream = streams->data;
+		if (!strcmp(stream->session->id, sess_id) &&
+				!strcmp(stream->participant, name))
+			return stream;
+	}
+
+	return NULL;
+}
+
+static GList *
+get_streams(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, const gchar *name)
+{
+	PurpleMediaBackendFs2Private *priv;
+	GList *streams, *ret = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	streams = priv->streams;
+
+	for (; streams; streams = g_list_next(streams)) {
+		PurpleMediaBackendFs2Stream *stream = streams->data;
+
+		if (sess_id != NULL && strcmp(stream->session->id, sess_id))
+			continue;
+		else if (name != NULL && strcmp(stream->participant, name))
+			continue;
+		else
+			ret = g_list_prepend(ret, stream);
+	}
+
+	ret = g_list_reverse(ret);
+	return ret;
+}
+
+static PurpleMediaBackendFs2Session *
+get_session_from_fs_stream(PurpleMediaBackendFs2 *self, FsStream *stream)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	FsSession *fssession;
+	GList *values;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
+	g_return_val_if_fail(FS_IS_STREAM(stream), NULL);
+
+	g_object_get(stream, "session", &fssession, NULL);
+
+	values = g_hash_table_get_values(priv->sessions);
+
+	for (; values; values = g_list_delete_link(values, values)) {
+		PurpleMediaBackendFs2Session *session = values->data;
+
+		if (session->session == fssession) {
+			g_list_free(values);
+			g_object_unref(fssession);
+			return session;
+		}
+	}
+
+	g_object_unref(fssession);
+	return NULL;
+}
+
+static void
+gst_handle_message_element(GstBus *bus, GstMessage *msg,
+		PurpleMediaBackendFs2 *self)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg));
+	static guint level_id = 0;
+
+	if (level_id == 0)
+		level_id = g_signal_lookup("level", PURPLE_TYPE_MEDIA);
+
+	if (g_signal_has_handler_pending(priv->media, level_id, 0, FALSE)
+			&& gst_structure_has_name(
+			gst_message_get_structure(msg), "level")) {
+		GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg));
+		gchar *name;
+		gchar *participant = NULL;
+		PurpleMediaBackendFs2Session *session = NULL;
+		gdouble rms_db;
+		gdouble percent;
+		const GValue *list;
+		const GValue *value;
+
+		if (!PURPLE_IS_MEDIA(priv->media) ||
+				GST_ELEMENT_PARENT(src) != priv->confbin)
+			return;
+
+		name = gst_element_get_name(src);
+
+		if (!strncmp(name, "sendlevel_", 10)) {
+			session = get_session(self, name+10);
+		} else {
+			GList *iter = priv->streams;
+			PurpleMediaBackendFs2Stream *stream;
+			for (; iter; iter = g_list_next(iter)) {
+				stream = iter->data;
+				if (stream->level == src) {
+					session = stream->session;
+					participant = stream->participant;
+					break;
+				}
+			}
+		}
+
+		g_free(name);
+
+		if (!session)
+			return;
+
+		list = gst_structure_get_value(
+				gst_message_get_structure(msg), "rms");
+		value = gst_value_list_get_value(list, 0);
+		rms_db = g_value_get_double(value);
+		percent = pow(10, rms_db / 20) * 5;
+
+		if(percent > 1.0)
+			percent = 1.0;
+
+		g_signal_emit(priv->media, level_id, 0,
+				session->id, participant, percent);
+		return;
+	}
+
+	if (!FS_IS_CONFERENCE(src) || !PURPLE_IS_MEDIA_BACKEND(self) ||
+			priv->conference != FS_CONFERENCE(src))
+		return;
+
+	if (gst_structure_has_name(msg->structure, "farsight-error")) {
+		FsError error_no;
+		gst_structure_get_enum(msg->structure, "error-no",
+				FS_TYPE_ERROR, (gint*)&error_no);
+		switch (error_no) {
+			case FS_ERROR_NO_CODECS:
+				purple_media_error(priv->media, _("No codecs"
+						" found. Install some"
+						" GStreamer codecs found"
+						" in GStreamer plugins"
+						" packages."));
+				purple_media_end(priv->media, NULL, NULL);
+				break;
+			case FS_ERROR_NO_CODECS_LEFT:
+				purple_media_error(priv->media, _("No codecs"
+						" left. Your codec"
+						" preferences in"
+						" fs-codecs.conf are too"
+						" strict."));
+				purple_media_end(priv->media, NULL, NULL);
+				break;
+			case FS_ERROR_UNKNOWN_CNAME:
+			/*
+			 * Unknown CName is only a problem for the
+			 * multicast transmitter which isn't used.
+			 * It is also deprecated.
+			 */
+				break;
+			default:
+				purple_debug_error("backend-fs2",
+						"farsight-error: %i: %s\n",
+						error_no,
+					  	gst_structure_get_string(
+						msg->structure, "error-msg"));
+				break;
+		}
+
+		if (FS_ERROR_IS_FATAL(error_no)) {
+			purple_media_error(priv->media, _("A non-recoverable "
+					"Farsight2 error has occurred."));
+			purple_media_end(priv->media, NULL, NULL);
+		}
+	} else if (gst_structure_has_name(msg->structure,
+			"farsight-new-local-candidate")) {
+		const GValue *value;
+		FsStream *stream;
+		FsCandidate *local_candidate;
+		PurpleMediaCandidate *candidate;
+		FsParticipant *participant;
+		PurpleMediaBackendFs2Session *session;
+		PurpleMediaBackendFs2Stream *media_stream;
+		gchar *name;
+
+		value = gst_structure_get_value(msg->structure, "stream");
+		stream = g_value_get_object(value);
+		value = gst_structure_get_value(msg->structure, "candidate");
+		local_candidate = g_value_get_boxed(value);
+
+		session = get_session_from_fs_stream(self, stream);
+
+		purple_debug_info("backend-fs2",
+				"got new local candidate: %s\n",
+				local_candidate->foundation);
+
+		g_object_get(stream, "participant", &participant, NULL);
+		g_object_get(participant, "cname", &name, NULL);
+		g_object_unref(participant);
+
+		media_stream = get_stream(self, session->id, name);
+		media_stream->local_candidates = g_list_append(
+				media_stream->local_candidates,
+				fs_candidate_copy(local_candidate));
+
+		candidate = candidate_from_fs(local_candidate);
+		g_signal_emit_by_name(self, "new-candidate",
+				session->id, name, candidate);
+		g_object_unref(candidate);
+	} else if (gst_structure_has_name(msg->structure,
+			"farsight-local-candidates-prepared")) {
+		const GValue *value;
+		FsStream *stream;
+		FsParticipant *participant;
+		PurpleMediaBackendFs2Session *session;
+		gchar *name;
+
+		value = gst_structure_get_value(msg->structure, "stream");
+		stream = g_value_get_object(value);
+		session = get_session_from_fs_stream(self, stream);
+
+		g_object_get(stream, "participant", &participant, NULL);
+		g_object_get(participant, "cname", &name, NULL);
+		g_object_unref(participant);
+
+		g_signal_emit_by_name(self, "candidates-prepared",
+				session->id, name);
+	} else if (gst_structure_has_name(msg->structure,
+			"farsight-new-active-candidate-pair")) {
+		const GValue *value;
+		FsStream *stream;
+		FsCandidate *local_candidate;
+		FsCandidate *remote_candidate;
+		FsParticipant *participant;
+		PurpleMediaBackendFs2Session *session;
+		PurpleMediaCandidate *lcandidate, *rcandidate;
+		gchar *name;
+
+		value = gst_structure_get_value(msg->structure, "stream");
+		stream = g_value_get_object(value);
+		value = gst_structure_get_value(msg->structure,
+				"local-candidate");
+		local_candidate = g_value_get_boxed(value);
+		value = gst_structure_get_value(msg->structure,
+				"remote-candidate");
+		remote_candidate = g_value_get_boxed(value);
+
+		g_object_get(stream, "participant", &participant, NULL);
+		g_object_get(participant, "cname", &name, NULL);
+		g_object_unref(participant);
+
+		session = get_session_from_fs_stream(self, stream);
+
+		lcandidate = candidate_from_fs(local_candidate);
+		rcandidate = candidate_from_fs(remote_candidate);
+
+		g_signal_emit_by_name(self, "active-candidate-pair",
+				session->id, name, lcandidate, rcandidate);
+
+		g_object_unref(lcandidate);
+		g_object_unref(rcandidate);
+	} else if (gst_structure_has_name(msg->structure,
+			"farsight-recv-codecs-changed")) {
+		const GValue *value;
+		GList *codecs;
+		FsCodec *codec;
+
+		value = gst_structure_get_value(msg->structure, "codecs");
+		codecs = g_value_get_boxed(value);
+		codec = codecs->data;
+
+		purple_debug_info("backend-fs2",
+				"farsight-recv-codecs-changed: %s\n",
+				codec->encoding_name);
+	} else if (gst_structure_has_name(msg->structure,
+			"farsight-component-state-changed")) {
+		const GValue *value;
+		FsStreamState fsstate;
+		guint component;
+		const gchar *state;
+
+		value = gst_structure_get_value(msg->structure, "state");
+		fsstate = g_value_get_enum(value);
+		value = gst_structure_get_value(msg->structure, "component");
+		component = g_value_get_uint(value);
+
+		switch (fsstate) {
+			case FS_STREAM_STATE_FAILED:
+				state = "FAILED";
+				break;
+			case FS_STREAM_STATE_DISCONNECTED:
+				state = "DISCONNECTED";
+				break;
+			case FS_STREAM_STATE_GATHERING:
+				state = "GATHERING";
+				break;
+			case FS_STREAM_STATE_CONNECTING:
+				state = "CONNECTING";
+				break;
+			case FS_STREAM_STATE_CONNECTED:
+				state = "CONNECTED";
+				break;
+			case FS_STREAM_STATE_READY:
+				state = "READY";
+				break;
+			default:
+				state = "UNKNOWN";
+				break;
+		}
+
+		purple_debug_info("backend-fs2",
+				"farsight-component-state-changed: "
+				"component: %u state: %s\n",
+				component, state);
+	} else if (gst_structure_has_name(msg->structure,
+			"farsight-send-codec-changed")) {
+		const GValue *value;
+		FsCodec *codec;
+		gchar *codec_str;
+
+		value = gst_structure_get_value(msg->structure, "codec");
+		codec = g_value_get_boxed(value);
+		codec_str = fs_codec_to_string(codec);
+
+		purple_debug_info("backend-fs2",
+				"farsight-send-codec-changed: codec: %s\n",
+				codec_str);
+
+		g_free(codec_str);
+	} else if (gst_structure_has_name(msg->structure,
+			"farsight-codecs-changed")) {
+		const GValue *value;
+		FsSession *fssession;
+		GList *sessions;
+
+		value = gst_structure_get_value(msg->structure, "session");
+		fssession = g_value_get_object(value);
+		sessions = g_hash_table_get_values(priv->sessions);
+
+		for (; sessions; sessions =
+				g_list_delete_link(sessions, sessions)) {
+			PurpleMediaBackendFs2Session *session = sessions->data;
+			gchar *session_id;
+
+			if (session->session != fssession)
+				continue;
+
+			session_id = g_strdup(session->id);
+			g_signal_emit_by_name(self, "codecs-changed",
+					session_id);
+			g_free(session_id);
+			g_list_free(sessions);
+			break;
+		}
+	}
+}
+
+static void
+gst_handle_message_error(GstBus *bus, GstMessage *msg,
+		PurpleMediaBackendFs2 *self)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	GstElement *element = GST_ELEMENT(GST_MESSAGE_SRC(msg));
+	GstElement *lastElement = NULL;
+	GList *sessions;
+
+	while (!GST_IS_PIPELINE(element)) {
+		if (element == priv->confbin)
+			break;
+
+		lastElement = element;
+		element = GST_ELEMENT_PARENT(element);
+	}
+
+	if (!GST_IS_PIPELINE(element))
+		return;
+
+	sessions = purple_media_get_session_ids(priv->media);
+
+	for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
+		if (purple_media_get_src(priv->media, sessions->data)
+				!= lastElement)
+			continue;
+
+		if (purple_media_get_session_type(priv->media, sessions->data)
+				& PURPLE_MEDIA_AUDIO)
+			purple_media_error(priv->media,
+					_("Error with your microphone"));
+		else
+			purple_media_error(priv->media,
+					_("Error with your webcam"));
+
+		break;
+	}
+
+	g_list_free(sessions);
+
+	purple_media_error(priv->media, _("Conference error"));
+	purple_media_end(priv->media, NULL, NULL);
+}
+
+static gboolean
+gst_bus_cb(GstBus *bus, GstMessage *msg, PurpleMediaBackendFs2 *self)
+{
+	switch(GST_MESSAGE_TYPE(msg)) {
+		case GST_MESSAGE_ELEMENT:
+			gst_handle_message_element(bus, msg, self);
+			break;
+		case GST_MESSAGE_ERROR:
+			gst_handle_message_error(bus, msg, self);
+			break;
+		default:
+			break;
+	}
+
+	return TRUE;
+}
+
+static void
+state_changed_cb(PurpleMedia *media, PurpleMediaState state,
+		gchar *sid, gchar *name, PurpleMediaBackendFs2 *self)
+{
+}
+
+static void
+stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type,
+		gchar *sid, gchar *name, gboolean local,
+		PurpleMediaBackendFs2 *self)
+{
+	if (type == PURPLE_MEDIA_INFO_ACCEPT && sid != NULL && name != NULL) {
+		PurpleMediaBackendFs2Stream *stream =
+				get_stream(self, sid, name);
+		GError *err = NULL;
+
+		g_object_set(G_OBJECT(stream->stream), "direction",
+				session_type_to_fs_stream_direction(
+				stream->session->type), NULL);
+
+		if (stream->remote_candidates == NULL ||
+				purple_media_is_initiator(media, sid, name))
+			return;
+
+		fs_stream_set_remote_candidates(stream->stream,
+				stream->remote_candidates, &err);
+
+		if (err == NULL)
+			return;
+
+		purple_debug_error("backend-fs2", "Error adding "
+				"remote candidates: %s\n",
+				err->message);
+		g_error_free(err);
+	} else if (local == TRUE && (type == PURPLE_MEDIA_INFO_MUTE ||
+			type == PURPLE_MEDIA_INFO_UNMUTE)) {
+		PurpleMediaBackendFs2Private *priv =
+				PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+		gboolean active = (type == PURPLE_MEDIA_INFO_MUTE);
+		GList *sessions;
+
+		if (sid == NULL)
+			sessions = g_hash_table_get_values(priv->sessions);
+		else
+			sessions = g_list_prepend(NULL,
+					get_session(self, sid));
+
+		purple_debug_info("media", "Turning mute %s\n",
+				active ? "on" : "off");
+
+		for (; sessions; sessions = g_list_delete_link(
+				sessions, sessions)) {
+			PurpleMediaBackendFs2Session *session =
+					sessions->data;
+
+			if (session->type & PURPLE_MEDIA_SEND_AUDIO) {
+				gchar *name = g_strdup_printf("volume_%s",
+						session->id);
+				GstElement *volume = gst_bin_get_by_name(
+						GST_BIN(priv->confbin), name);
+				g_free(name);
+				g_object_set(volume, "mute", active, NULL);
+			}
+		}
+	} else if (local == TRUE && (type == PURPLE_MEDIA_INFO_PAUSE ||
+			type == PURPLE_MEDIA_INFO_UNPAUSE)) {
+		gboolean active = (type == PURPLE_MEDIA_INFO_PAUSE);
+		GList *streams = get_streams(self, sid, name);
+		for (; streams; streams =
+				g_list_delete_link(streams, streams)) {
+			PurpleMediaBackendFs2Stream *stream = streams->data;
+			if (stream->session->type & PURPLE_MEDIA_SEND_VIDEO) {
+				g_object_set(stream->stream, "direction",
+						session_type_to_fs_stream_direction(
+						stream->session->type & ((active) ?
+						~PURPLE_MEDIA_SEND_VIDEO :
+						PURPLE_MEDIA_VIDEO)), NULL);
+			}
+		}
+	}
+}
+
+static gboolean
+init_conference(PurpleMediaBackendFs2 *self)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	GstElement *pipeline;
+	GstBus *bus;
+	gchar *name;
+
+	priv->conference = FS_CONFERENCE(
+			gst_element_factory_make(priv->conference_type, NULL));
+
+	if (priv->conference == NULL) {
+		purple_debug_error("backend-fs2", "Conference == NULL\n");
+		return FALSE;
+	}
+
+	pipeline = purple_media_manager_get_pipeline(
+			purple_media_get_manager(priv->media));
+
+	if (pipeline == NULL) {
+		purple_debug_error("backend-fs2",
+				"Couldn't retrieve pipeline.\n");
+		return FALSE;
+	}
+
+	name = g_strdup_printf("conf_%p", priv->conference);
+	priv->confbin = gst_bin_new(name);
+	if (priv->confbin == NULL) {
+		purple_debug_error("backend-fs2",
+				"Couldn't create confbin.\n");
+		return FALSE;
+	}
+
+	g_free(name);
+
+	bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
+	if (bus == NULL) {
+		purple_debug_error("backend-fs2",
+				"Couldn't get the pipeline's bus.\n");
+		return FALSE;
+	}
+
+	g_signal_connect(G_OBJECT(bus), "message",
+			G_CALLBACK(gst_bus_cb), self);
+	gst_object_unref(bus);
+
+	if (!gst_bin_add(GST_BIN(pipeline),
+			GST_ELEMENT(priv->confbin))) {
+		purple_debug_error("backend-fs2", "Couldn't add confbin "
+				"element to the pipeline\n");
+		return FALSE;
+	}
+
+	if (!gst_bin_add(GST_BIN(priv->confbin),
+			GST_ELEMENT(priv->conference))) {
+		purple_debug_error("backend-fs2", "Couldn't add conference "
+				"element to the confbin\n");
+		return FALSE;
+	}
+
+	if (gst_element_set_state(GST_ELEMENT(priv->confbin),
+			GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) {
+		purple_debug_error("backend-fs2",
+				"Failed to start conference.\n");
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+static void
+gst_element_added_cb(FsElementAddedNotifier *self,
+		GstBin *bin, GstElement *element, gpointer user_data)
+{
+	/*
+	 * Hack to make H264 work with Gmail video.
+	 */
+	if (!strncmp(GST_ELEMENT_NAME(element), "x264", 4)) {
+		g_object_set(GST_OBJECT(element), "cabac", FALSE, NULL);
+	}
+}
+
+static gboolean
+create_src(PurpleMediaBackendFs2 *self, const gchar *sess_id,
+		PurpleMediaSessionType type)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	PurpleMediaBackendFs2Session *session;
+	PurpleMediaSessionType session_type;
+	FsMediaType media_type = session_type_to_fs_media_type(type);
+	FsStreamDirection type_direction =
+			session_type_to_fs_stream_direction(type);
+	GstElement *src;
+	GstPad *sinkpad, *srcpad;
+
+	if ((type_direction & FS_DIRECTION_SEND) == 0)
+		return TRUE;
+ 
+	session_type = session_type_from_fs(
+			media_type, FS_DIRECTION_SEND);
+	src = purple_media_manager_get_element(
+			purple_media_get_manager(priv->media),
+			session_type, priv->media, sess_id, NULL);
+
+	if (!GST_IS_ELEMENT(src)) {
+		purple_debug_error("backend-fs2",
+				"Error creating src for session %s\n",
+				sess_id);
+		return FALSE;
+	}
+
+	session = get_session(self, sess_id);
+
+	if (session == NULL) {
+		purple_debug_warning("backend-fs2",
+				"purple_media_set_src: trying to set"
+				" src on non-existent session\n");
+		return FALSE;
+	}
+
+	if (session->src)
+		gst_object_unref(session->src);
+
+	session->src = src;
+	gst_element_set_locked_state(session->src, TRUE);
+
+	session->tee = gst_element_factory_make("tee", NULL);
+	gst_bin_add(GST_BIN(priv->confbin), session->tee);
+
+	/* This supposedly isn't necessary, but it silences some warnings */
+	if (GST_ELEMENT_PARENT(priv->confbin)
+			== GST_ELEMENT_PARENT(session->src)) {
+		GstPad *pad = gst_element_get_static_pad(session->tee, "sink");
+		GstPad *ghost = gst_ghost_pad_new(NULL, pad);
+		gst_object_unref(pad);
+		gst_pad_set_active(ghost, TRUE);
+		gst_element_add_pad(priv->confbin, ghost);
+	}
+
+	gst_element_set_state(session->tee, GST_STATE_PLAYING);
+	gst_element_link(session->src, priv->confbin);
+
+	g_object_get(session->session, "sink-pad", &sinkpad, NULL);
+	if (session->type & PURPLE_MEDIA_SEND_AUDIO) {
+		gchar *name = g_strdup_printf("volume_%s", session->id);
+		GstElement *level;
+		GstElement *volume = gst_element_factory_make("volume", name);
+		double input_volume = purple_prefs_get_int(
+				"/purple/media/audio/volume/input")/10.0;
+		g_free(name);
+		name = g_strdup_printf("sendlevel_%s", session->id);
+		level = gst_element_factory_make("level", name);
+		g_free(name);
+		gst_bin_add(GST_BIN(priv->confbin), volume);
+		gst_bin_add(GST_BIN(priv->confbin), level);
+		gst_element_set_state(level, GST_STATE_PLAYING);
+		gst_element_set_state(volume, GST_STATE_PLAYING);
+		gst_element_link(volume, level);
+		gst_element_link(session->tee, volume);
+		srcpad = gst_element_get_static_pad(level, "src");
+		g_object_set(volume, "volume", input_volume, NULL);
+	} else {
+		srcpad = gst_element_get_request_pad(session->tee, "src%d");
+	}
+
+	purple_debug_info("backend-fs2", "connecting pad: %s\n", 
+			  gst_pad_link(srcpad, sinkpad) == GST_PAD_LINK_OK
+			  ? "success" : "failure");
+	gst_element_set_locked_state(session->src, FALSE);
+	gst_object_unref(session->src);
+
+	gst_element_set_state(session->src, GST_STATE_PLAYING);
+
+	purple_media_manager_create_output_window(purple_media_get_manager(
+			priv->media), priv->media, sess_id, NULL);
+
+	return TRUE;
+}
+
+static gboolean
+create_session(PurpleMediaBackendFs2 *self, const gchar *sess_id,
+		PurpleMediaSessionType type, gboolean initiator,
+		const gchar *transmitter)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	PurpleMediaBackendFs2Session *session;
+	GError *err = NULL;
+	GList *codec_conf = NULL, *iter = NULL;
+	gchar *filename = NULL;
+	gboolean is_nice = !strcmp(transmitter, "nice");
+
+	session = g_new0(PurpleMediaBackendFs2Session, 1);
+
+	session->session = fs_conference_new_session(priv->conference,
+			session_type_to_fs_media_type(type), &err);
+
+	if (err != NULL) {
+		purple_media_error(priv->media,
+				_("Error creating session: %s"),
+				err->message);
+		g_error_free(err);
+		g_free(session);
+		return FALSE;
+	}
+
+	filename = g_build_filename(purple_user_dir(), "fs-codec.conf", NULL);
+	codec_conf = fs_codec_list_from_keyfile(filename, &err);
+	g_free(filename);
+
+	if (err != NULL) {
+		if (err->code == 4)
+			purple_debug_info("backend-fs2", "Couldn't read "
+					"fs-codec.conf: %s\n",
+					err->message);
+		else
+			purple_debug_error("backend-fs2", "Error reading "
+					"fs-codec.conf: %s\n",
+					err->message);
+		g_error_free(err);
+	}
+
+	/*
+	 * Add SPEEX if the configuration file doesn't exist or
+	 * there isn't a speex entry.
+	 */
+	for (iter = codec_conf; iter; iter = g_list_next(iter)) {
+		FsCodec *codec = iter->data;
+		if (!g_ascii_strcasecmp(codec->encoding_name, "speex"))
+			break;
+	}
+
+	if (iter == NULL) {
+		codec_conf = g_list_prepend(codec_conf,
+				fs_codec_new(FS_CODEC_ID_ANY,
+				"SPEEX", FS_MEDIA_TYPE_AUDIO, 8000));
+		codec_conf = g_list_prepend(codec_conf,
+				fs_codec_new(FS_CODEC_ID_ANY,
+				"SPEEX", FS_MEDIA_TYPE_AUDIO, 16000));
+	}
+
+	fs_session_set_codec_preferences(session->session, codec_conf, NULL);
+	fs_codec_list_destroy(codec_conf);
+
+	/*
+	 * Removes a 5-7 second delay before
+	 * receiving the src-pad-added signal.
+	 * Only works for non-multicast FsRtpSessions.
+	 */
+	if (is_nice || !strcmp(transmitter, "rawudp"))
+		g_object_set(G_OBJECT(session->session),
+				"no-rtcp-timeout", 0, NULL);
+
+	/*
+	 * Hack to make x264 work with Gmail video.
+	 */
+	if (is_nice && !strcmp(sess_id, "google-video")) {
+		FsElementAddedNotifier *notifier =
+				fs_element_added_notifier_new();
+		g_signal_connect(G_OBJECT(notifier), "element-added",
+				G_CALLBACK(gst_element_added_cb), NULL);
+		fs_element_added_notifier_add(notifier,
+				GST_BIN(priv->conference));
+	}
+
+	session->id = g_strdup(sess_id);
+	session->backend = self;
+	session->type = type;
+
+	if (!priv->sessions) {
+		purple_debug_info("backend-fs2",
+				"Creating hash table for sessions\n");
+		priv->sessions = g_hash_table_new(g_str_hash, g_str_equal);
+	}
+
+	g_hash_table_insert(priv->sessions, g_strdup(session->id), session);
+
+	if (!create_src(self, sess_id, type)) {
+		purple_debug_info("backend-fs2", "Error creating the src\n");
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+static gboolean
+create_participant(PurpleMediaBackendFs2 *self, const gchar *name)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	FsParticipant *participant;
+	GError *err = NULL;
+
+	participant = fs_conference_new_participant(
+			priv->conference, name, &err);
+
+	if (err) {
+		purple_debug_error("backend-fs2",
+				"Error creating participant: %s\n",
+				err->message);
+		g_error_free(err);
+		return FALSE;
+	}
+
+	if (!priv->participants) {
+		purple_debug_info("backend-fs2",
+				"Creating hash table for participants\n");
+		priv->participants = g_hash_table_new_full(g_str_hash,
+				g_str_equal, g_free, NULL);
+	}
+
+	g_hash_table_insert(priv->participants, g_strdup(name), participant);
+
+	return TRUE;
+}
+
+static gboolean
+src_pad_added_cb_cb(PurpleMediaBackendFs2Stream *stream)
+{
+	PurpleMediaBackendFs2Private *priv;
+
+	g_return_val_if_fail(stream != NULL, FALSE);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(stream->session->backend);
+	stream->connected_cb_id = 0;
+
+	purple_media_manager_create_output_window(
+			purple_media_get_manager(priv->media), priv->media,
+			stream->session->id, stream->participant);
+
+	g_signal_emit_by_name(priv->media, "state-changed",
+			PURPLE_MEDIA_STATE_CONNECTED,
+			stream->session->id, stream->participant);
+	return FALSE;
+}
+
+static void
+src_pad_added_cb(FsStream *fsstream, GstPad *srcpad,
+		FsCodec *codec, PurpleMediaBackendFs2Stream *stream)
+{
+	PurpleMediaBackendFs2Private *priv;
+	GstPad *sinkpad;
+
+	g_return_if_fail(FS_IS_STREAM(fsstream));
+	g_return_if_fail(stream != NULL);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(stream->session->backend);
+
+	if (stream->src == NULL) {
+		GstElement *sink = NULL;
+
+		if (codec->media_type == FS_MEDIA_TYPE_AUDIO) {
+			GstElement *queue = NULL;
+			double output_volume = purple_prefs_get_int(
+					"/purple/media/audio/volume/output")/10.0;
+			/*
+			 * Should this instead be:
+			 *  audioconvert ! audioresample ! liveadder !
+			 *   audioresample ! audioconvert ! realsink
+			 */
+			queue = gst_element_factory_make("queue", NULL);
+			stream->volume = gst_element_factory_make(
+					"volume", NULL);
+			g_object_set(stream->volume, "volume",
+					output_volume, NULL);
+			stream->level = gst_element_factory_make(
+					"level", NULL);
+			stream->src = gst_element_factory_make(
+					"liveadder", NULL);
+			sink = purple_media_manager_get_element(
+					purple_media_get_manager(priv->media),
+					PURPLE_MEDIA_RECV_AUDIO, priv->media,
+					stream->session->id,
+					stream->participant);
+			gst_bin_add(GST_BIN(priv->confbin), queue);
+			gst_bin_add(GST_BIN(priv->confbin), stream->volume);
+			gst_bin_add(GST_BIN(priv->confbin), stream->level);
+			gst_bin_add(GST_BIN(priv->confbin), sink);
+			gst_element_set_state(sink, GST_STATE_PLAYING);
+			gst_element_set_state(stream->level, GST_STATE_PLAYING);
+			gst_element_set_state(stream->volume, GST_STATE_PLAYING);
+			gst_element_set_state(queue, GST_STATE_PLAYING);
+			gst_element_link(stream->level, sink);
+			gst_element_link(stream->volume, stream->level);
+			gst_element_link(queue, stream->volume);
+			sink = queue;
+		} else if (codec->media_type == FS_MEDIA_TYPE_VIDEO) {
+			stream->src = gst_element_factory_make(
+					"fsfunnel", NULL);
+			sink = gst_element_factory_make(
+					"fakesink", NULL);
+			g_object_set(G_OBJECT(sink), "async", FALSE, NULL);
+			gst_bin_add(GST_BIN(priv->confbin), sink);
+			gst_element_set_state(sink, GST_STATE_PLAYING);
+		}
+		stream->tee = gst_element_factory_make("tee", NULL);
+		gst_bin_add_many(GST_BIN(priv->confbin),
+				stream->src, stream->tee, NULL);
+		gst_element_set_state(stream->tee, GST_STATE_PLAYING);
+		gst_element_set_state(stream->src, GST_STATE_PLAYING);
+		gst_element_link_many(stream->src, stream->tee, sink, NULL);
+	}
+
+	sinkpad = gst_element_get_request_pad(stream->src, "sink%d");
+	gst_pad_link(srcpad, sinkpad);
+	gst_object_unref(sinkpad);
+
+	stream->connected_cb_id = purple_timeout_add(0,
+			(GSourceFunc)src_pad_added_cb_cb, stream);
+}
+
+static gboolean
+create_stream(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, const gchar *who,
+		PurpleMediaSessionType type, gboolean initiator,
+		const gchar *transmitter,
+		guint num_params, GParameter *params)
+{
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	GError *err = NULL;
+	FsStream *fsstream = NULL;
+	const gchar *stun_ip = purple_network_get_stun_ip();
+	const gchar *turn_ip = purple_network_get_turn_ip();
+	guint _num_params = num_params;
+	GParameter *_params = g_new0(GParameter, num_params + 3);
+	FsStreamDirection type_direction =
+			session_type_to_fs_stream_direction(type);
+	PurpleMediaBackendFs2Session *session;
+	PurpleMediaBackendFs2Stream *stream;
+	FsParticipant *participant;
+
+	memcpy(_params, params, sizeof(GParameter) * num_params);
+
+	/* set the controlling mode parameter */
+	_params[_num_params].name = "controlling-mode";
+	g_value_init(&_params[_num_params].value, G_TYPE_BOOLEAN);
+	g_value_set_boolean(&_params[_num_params].value, initiator);
+	++_num_params;
+
+	if (stun_ip) {
+		purple_debug_info("backend-fs2", 
+			"Setting stun-ip on new stream: %s\n", stun_ip);
+
+		_params[_num_params].name = "stun-ip";
+		g_value_init(&_params[_num_params].value, G_TYPE_STRING);
+		g_value_set_string(&_params[_num_params].value, stun_ip);
+		++_num_params;
+	}
+
+	if (turn_ip && !strcmp("nice", transmitter)) {
+		GValueArray *relay_info = g_value_array_new(0);
+		GValue value;
+		gint turn_port = purple_prefs_get_int(
+				"/purple/network/turn_port");
+		const gchar *username =	purple_prefs_get_string(
+				"/purple/network/turn_username");
+		const gchar *password = purple_prefs_get_string(
+				"/purple/network/turn_password");
+		GstStructure *turn_setup = gst_structure_new("relay-info",
+				"ip", G_TYPE_STRING, turn_ip, 
+				"port", G_TYPE_UINT, turn_port,
+				"username", G_TYPE_STRING, username,
+				"password", G_TYPE_STRING, password,
+				NULL);
+
+		if (!turn_setup) {
+			purple_debug_error("backend-fs2",
+					"Error creating relay info structure");
+			return FALSE;
+		}
+
+		memset(&value, 0, sizeof(GValue));
+		g_value_init(&value, GST_TYPE_STRUCTURE);
+		gst_value_set_structure(&value, turn_setup);
+		relay_info = g_value_array_append(relay_info, &value);
+		gst_structure_free(turn_setup);
+
+		purple_debug_info("backend-fs2",
+			"Setting relay-info on new stream\n");
+		_params[_num_params].name = "relay-info";
+		g_value_init(&_params[_num_params].value, 
+			G_TYPE_VALUE_ARRAY);
+		g_value_set_boxed(&_params[_num_params].value,
+			relay_info);
+		g_value_array_free(relay_info);
+	}
+
+	session = get_session(self, sess_id);
+
+	if (session == NULL) {
+		purple_debug_error("backend-fs2",
+				"Couldn't find session to create stream.\n");
+		return FALSE;
+	}
+
+	participant = get_participant(self, who);
+
+	if (participant == NULL) {
+		purple_debug_error("backend-fs2", "Couldn't find "
+				"participant to create stream.\n");
+		return FALSE;
+	}
+
+	fsstream = fs_session_new_stream(session->session, participant,
+			initiator == TRUE ? type_direction :
+			(type_direction & FS_DIRECTION_RECV), transmitter,
+			_num_params, _params, &err);
+	g_free(_params);
+
+	if (fsstream == NULL) {
+		if (err) {
+			purple_debug_error("backend-fs2",
+					"Error creating stream: %s\n",
+					err && err->message ?
+					err->message : "NULL");
+			g_error_free(err);
+		} else
+			purple_debug_error("backend-fs2",
+					"Error creating stream\n");
+		return FALSE;
+	}
+
+	stream = g_new0(PurpleMediaBackendFs2Stream, 1);
+	stream->participant = g_strdup(who);
+	stream->session = session;
+	stream->stream = fsstream;
+
+	priv->streams =	g_list_append(priv->streams, stream);
+
+	g_signal_connect(G_OBJECT(fsstream), "src-pad-added",
+			G_CALLBACK(src_pad_added_cb), stream);
+
+	return TRUE;
+}
+
+static gboolean
+purple_media_backend_fs2_add_stream(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *who,
+		PurpleMediaSessionType type, gboolean initiator,
+		const gchar *transmitter,
+		guint num_params, GParameter *params)
+{
+	PurpleMediaBackendFs2 *backend = PURPLE_MEDIA_BACKEND_FS2(self);
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(backend);
+	PurpleMediaBackendFs2Stream *stream;
+
+	if (priv->conference == NULL && !init_conference(backend)) {
+		purple_debug_error("backend-fs2",
+				"Error initializing the conference.\n");
+		return FALSE;
+	}
+
+	if (get_session(backend, sess_id) == NULL &&
+			!create_session(backend, sess_id, type,
+			initiator, transmitter)) {
+		purple_debug_error("backend-fs2",
+				"Error creating the session.\n");
+		return FALSE;
+	}
+
+	if (get_participant(backend, who) == NULL &&
+			!create_participant(backend, who)) {
+		purple_debug_error("backend-fs2",
+				"Error creating the participant.\n");
+		return FALSE;
+	}
+
+	stream = get_stream(backend, sess_id, who);
+
+	if (stream != NULL) {
+		FsStreamDirection type_direction =
+				session_type_to_fs_stream_direction(type);
+
+		if (session_type_to_fs_stream_direction(
+				stream->session->type) != type_direction) {
+			/* change direction */
+			g_object_set(stream->stream, "direction",
+					type_direction, NULL);
+		}
+	} else if (!create_stream(backend, sess_id, who, type,
+			initiator, transmitter, num_params, params)) {
+		purple_debug_error("backend-fs2",
+				"Error creating the stream.\n");
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+static void
+purple_media_backend_fs2_add_remote_candidates(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *remote_candidates)
+{
+	PurpleMediaBackendFs2Private *priv;
+	PurpleMediaBackendFs2Stream *stream;
+	GError *err = NULL;
+
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self));
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	stream = get_stream(PURPLE_MEDIA_BACKEND_FS2(self),
+			sess_id, participant);
+
+	if (stream == NULL) {
+		purple_debug_error("backend-fs2",
+				"purple_media_add_remote_candidates: "
+				"couldn't find stream %s %s.\n",
+				sess_id ? sess_id : "(null)",
+				participant ? participant : "(null)");
+		return;
+	}
+
+	stream->remote_candidates = g_list_concat(stream->remote_candidates,
+			candidate_list_to_fs(remote_candidates));
+
+	if (purple_media_is_initiator(priv->media, sess_id, participant) ||
+			purple_media_accepted(
+			priv->media, sess_id, participant)) {
+		fs_stream_set_remote_candidates(stream->stream,
+				stream->remote_candidates, &err);
+
+		if (err) {
+			purple_debug_error("backend-fs2", "Error adding remote"
+					" candidates: %s\n", err->message);
+			g_error_free(err);
+		}
+	}
+}
+
+static gboolean
+purple_media_backend_fs2_codecs_ready(PurpleMediaBackend *self,
+		const gchar *sess_id)
+{
+	PurpleMediaBackendFs2Private *priv;
+	gboolean ret;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+
+	if (sess_id != NULL) {
+		PurpleMediaBackendFs2Session *session = get_session(
+				PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
+
+		if (session == NULL)
+			return FALSE;
+
+		if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
+				PURPLE_MEDIA_SEND_VIDEO))
+			g_object_get(session->session,
+					"codecs-ready", &ret, NULL);
+		else
+			ret = TRUE;
+	} else {
+		GList *values = g_hash_table_get_values(priv->sessions);
+
+		for (; values; values = g_list_delete_link(values, values)) {
+			PurpleMediaBackendFs2Session *session = values->data;
+			if (session->type & (PURPLE_MEDIA_SEND_AUDIO |
+					PURPLE_MEDIA_SEND_VIDEO))
+				g_object_get(session->session,
+						"codecs-ready", &ret, NULL);
+			else
+				ret = TRUE;
+
+			if (ret == FALSE)
+				break;
+		}
+
+		if (values != NULL)
+			g_list_free(values);
+	}
+
+	return ret;
+}
+
+static GList *
+purple_media_backend_fs2_get_codecs(PurpleMediaBackend *self,
+		const gchar *sess_id)
+{
+	PurpleMediaBackendFs2Private *priv;
+	PurpleMediaBackendFs2Session *session;
+	GList *fscodecs;
+	GList *codecs;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+
+	session = get_session(PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
+
+	if (session == NULL)
+		return NULL;
+
+	g_object_get(G_OBJECT(session->session),
+		     "codecs", &fscodecs, NULL);
+	codecs = codec_list_from_fs(fscodecs);
+	fs_codec_list_destroy(fscodecs);
+
+	return codecs;
+}
+
+static GList *
+purple_media_backend_fs2_get_local_candidates(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant)
+{
+	PurpleMediaBackendFs2Stream *stream;
+	GList *candidates = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
+
+	stream = get_stream(PURPLE_MEDIA_BACKEND_FS2(self),
+			sess_id, participant);
+
+	if (stream != NULL)
+		candidates = candidate_list_from_fs(
+				stream->local_candidates);
+	return candidates;
+}
+
+static gboolean
+purple_media_backend_fs2_set_remote_codecs(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *codecs)
+{
+	PurpleMediaBackendFs2Stream *stream;
+	GList *fscodecs;
+	GError *err = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
+	stream = get_stream(PURPLE_MEDIA_BACKEND_FS2(self),
+			sess_id, participant);
+
+	if (stream == NULL)
+		return FALSE;
+
+	fscodecs = codec_list_to_fs(codecs);
+	fs_stream_set_remote_codecs(stream->stream, fscodecs, &err);
+	fs_codec_list_destroy(fscodecs);
+
+	if (err) {
+		purple_debug_error("backend-fs2",
+				"Error setting remote codecs: %s\n",
+				err->message);
+		g_error_free(err);
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+static gboolean
+purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self,
+		const gchar *sess_id, PurpleMediaCodec *codec)
+{
+	PurpleMediaBackendFs2Session *session;
+	FsCodec *fscodec;
+	GError *err = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
+
+	session = get_session(PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
+
+	if (session == NULL)
+		return FALSE;
+
+	fscodec = codec_to_fs(codec);
+	fs_session_set_send_codec(session->session, fscodec, &err);
+	fs_codec_destroy(fscodec);
+
+	if (err) {
+		purple_debug_error("media", "Error setting send codec\n");
+		g_error_free(err);
+		return FALSE;
+	}
+
+	return TRUE;
+}
+#else
+GType
+purple_media_backend_fs2_get_type(void)
+{
+	return G_TYPE_NONE;
+}
+#endif /* USE_VV */
+
+#ifdef USE_GSTREAMER
+GstElement *
+purple_media_backend_fs2_get_src(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id)
+{
+#ifdef USE_VV
+	PurpleMediaBackendFs2Session *session = get_session(self, sess_id);
+	return session != NULL ? session->src : NULL;
+#else
+	return NULL;
+#endif
+}
+
+GstElement *
+purple_media_backend_fs2_get_tee(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, const gchar *who)
+{
+#ifdef USE_VV
+	if (sess_id != NULL && who == NULL) {
+		PurpleMediaBackendFs2Session *session =
+				get_session(self, sess_id);
+		return (session != NULL) ? session->tee : NULL;
+	} else if (sess_id != NULL && who != NULL) {
+		PurpleMediaBackendFs2Stream *stream =
+				get_stream(self, sess_id, who);
+		return (stream != NULL) ? stream->tee : NULL;
+	}
+
+#endif /* USE_VV */
+	g_return_val_if_reached(NULL);
+}
+
+void
+purple_media_backend_fs2_set_input_volume(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, double level)
+{
+#ifdef USE_VV
+	PurpleMediaBackendFs2Private *priv;
+	GList *sessions;
+
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self));
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+
+	purple_prefs_set_int("/purple/media/audio/volume/input", level);
+
+	if (sess_id == NULL)
+		sessions = g_hash_table_get_values(priv->sessions);
+	else
+		sessions = g_list_append(NULL, get_session(self, sess_id));
+
+	for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
+		PurpleMediaBackendFs2Session *session = sessions->data;
+
+		if (session->type & PURPLE_MEDIA_SEND_AUDIO) {
+			gchar *name = g_strdup_printf("volume_%s",
+					session->id);
+			GstElement *volume = gst_bin_get_by_name(
+					GST_BIN(priv->confbin), name);
+			g_free(name);
+			g_object_set(volume, "volume", level/10.0, NULL);
+		}
+	}
+#endif /* USE_VV */
+}
+
+void
+purple_media_backend_fs2_set_output_volume(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, const gchar *who, double level)
+{
+#ifdef USE_VV
+	PurpleMediaBackendFs2Private *priv;
+	GList *streams;
+
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self));
+
+	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+
+	purple_prefs_set_int("/purple/media/audio/volume/output", level);
+
+	streams = get_streams(self, sess_id, who);
+
+	for (; streams; streams = g_list_delete_link(streams, streams)) {
+		PurpleMediaBackendFs2Stream *stream = streams->data;
+
+		if (stream->session->type & PURPLE_MEDIA_RECV_AUDIO
+				&& GST_IS_ELEMENT(stream->volume)) {
+			g_object_set(stream->volume, "volume",
+					level/10.0, NULL);
+		}
+	}
+#endif /* USE_VV */
+}
+#endif /* USE_GSTREAMER */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/backend-fs2.h	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,77 @@
+/**
+ * @file backend-fs2.h Farsight 2 backend for media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file should not yet be part of libpurple's API.
+ * It should remain internal only for now.
+ */
+
+#ifndef _MEDIA_BACKEND_FS2_H_
+#define _MEDIA_BACKEND_FS2_H_
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PURPLE_TYPE_MEDIA_BACKEND_FS2            (purple_media_backend_fs2_get_type())
+#define PURPLE_IS_MEDIA_BACKEND_FS2(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_BACKEND_FS2))
+#define PURPLE_IS_MEDIA_BACKEND_FS2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_BACKEND_FS2))
+#define PURPLE_MEDIA_BACKEND_FS2(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2))
+#define PURPLE_MEDIA_BACKEND_FS2_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2))
+#define PURPLE_MEDIA_BACKEND_FS2_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2))
+
+/** An opaque structure representing the Farsight 2 media backend. */
+typedef struct _PurpleMediaBackendFs2 PurpleMediaBackendFs2;
+
+/**
+ * Gets the type of the Farsight 2 media backend object.
+ *
+ * @return The Farsight 2 media backend's GType
+ *
+ * @since 2.7.0
+ */
+GType purple_media_backend_fs2_get_type(void);
+
+/*
+ * Temporary function in order to be able to test while
+ * integrating with PurpleMedia
+ */
+#include <gst/gst.h>
+GstElement *purple_media_backend_fs2_get_src(
+		PurpleMediaBackendFs2 *self,
+		const gchar *sess_id);
+GstElement *purple_media_backend_fs2_get_tee(
+		PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, const gchar *who);
+void purple_media_backend_fs2_set_input_volume(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, double level);
+void purple_media_backend_fs2_set_output_volume(PurpleMediaBackendFs2 *self,
+		const gchar *sess_id, const gchar *who, double level);
+/* end tmp */
+
+G_END_DECLS
+
+#endif /* _MEDIA_BACKEND_FS2_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/backend-iface.c	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,194 @@
+/**
+ * @file backend-iface.c Interface for media backend
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#include "backend-iface.h"
+
+#include "marshallers.h"
+
+enum {
+	S_ERROR,
+	CANDIDATES_PREPARED,
+	CODECS_CHANGED,
+	NEW_CANDIDATE,
+	ACTIVE_CANDIDATE_PAIR,
+	LAST_SIGNAL
+};
+
+static guint purple_media_backend_signals[LAST_SIGNAL] = {0};
+
+static void
+purple_media_backend_base_init(gpointer iface)
+{
+	static gboolean is_initialized = FALSE;
+
+	if (is_initialized)
+		return;
+
+	g_object_interface_install_property(iface,
+			g_param_spec_string("conference-type",
+			"Conference Type",
+			"The type of conference that this backend "
+			"has been created to provide.",
+			NULL,
+			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+	g_object_interface_install_property(iface,
+			g_param_spec_object("media",
+			"Purple Media",
+			"The media object that this backend is bound to.",
+			PURPLE_TYPE_MEDIA,
+			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+
+	purple_media_backend_signals[S_ERROR] =
+			g_signal_new("error", G_TYPE_FROM_CLASS(iface),
+			G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+			g_cclosure_marshal_VOID__STRING,
+			G_TYPE_NONE, 1, G_TYPE_STRING);
+	purple_media_backend_signals[CANDIDATES_PREPARED] =
+			g_signal_new("candidates-prepared",
+			G_TYPE_FROM_CLASS(iface),
+			G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+			purple_smarshal_VOID__STRING_STRING,
+			G_TYPE_NONE, 2, G_TYPE_STRING,
+			G_TYPE_STRING);
+	purple_media_backend_signals[CODECS_CHANGED] =
+			g_signal_new("codecs-changed",
+			G_TYPE_FROM_CLASS(iface),
+			G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+			g_cclosure_marshal_VOID__STRING,
+			G_TYPE_NONE, 1, G_TYPE_STRING);
+	purple_media_backend_signals[NEW_CANDIDATE] =
+			g_signal_new("new-candidate",
+			G_TYPE_FROM_CLASS(iface),
+			G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+			purple_smarshal_VOID__POINTER_POINTER_OBJECT,
+			G_TYPE_NONE, 3, G_TYPE_POINTER,
+			G_TYPE_POINTER, PURPLE_TYPE_MEDIA_CANDIDATE);
+	purple_media_backend_signals[ACTIVE_CANDIDATE_PAIR] =
+			g_signal_new("active-candidate-pair",
+			G_TYPE_FROM_CLASS(iface),
+			G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+			purple_smarshal_VOID__STRING_STRING_OBJECT_OBJECT,
+			G_TYPE_NONE, 4, G_TYPE_STRING, G_TYPE_STRING,
+			PURPLE_TYPE_MEDIA_CANDIDATE,
+			PURPLE_TYPE_MEDIA_CANDIDATE);
+
+	is_initialized = TRUE;
+}
+
+GType
+purple_media_backend_get_type(void)
+{
+	static GType iface_type = 0;
+	if (iface_type == 0) {
+		static const GTypeInfo info = {
+			sizeof(PurpleMediaBackendIface),
+			purple_media_backend_base_init,
+			NULL,
+			NULL,
+			NULL,
+			NULL,
+			0,
+			0,
+			NULL,
+			NULL
+		};
+
+		iface_type = g_type_register_static (G_TYPE_INTERFACE,
+				"PurpleMediaBackend", &info, 0);
+	}
+
+	return iface_type;
+}
+
+gboolean
+purple_media_backend_add_stream(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *who,
+		PurpleMediaSessionType type, gboolean initiator,
+		const gchar *transmitter,
+		guint num_params, GParameter *params)
+{
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
+	return PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->add_stream(self,
+			sess_id, who, type, initiator, transmitter,
+			num_params, params);
+}
+
+void
+purple_media_backend_add_remote_candidates(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *remote_candidates)
+{
+	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND(self));
+	PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->add_remote_candidates(self,
+			sess_id, participant, remote_candidates);
+}
+
+gboolean
+purple_media_backend_codecs_ready(PurpleMediaBackend *self,
+		const gchar *sess_id)
+{
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
+	return PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->codecs_ready(self,
+			sess_id);
+}
+
+GList *
+purple_media_backend_get_codecs(PurpleMediaBackend *self,
+		const gchar *sess_id)
+{
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), NULL);
+	return PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->get_codecs(self,
+			sess_id);
+}
+
+GList *
+purple_media_backend_get_local_candidates(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant)
+{
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), NULL);
+	return PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->
+			get_local_candidates(self,
+			sess_id, participant);
+}
+
+gboolean
+purple_media_backend_set_remote_codecs(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *codecs)
+{
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
+	return PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->set_remote_codecs(
+			self, sess_id, participant, codecs);
+}
+
+gboolean
+purple_media_backend_set_send_codec(PurpleMediaBackend *self,
+		const gchar *sess_id, PurpleMediaCodec *codec)
+{
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
+	return PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->set_send_codec(self,
+			sess_id, codec);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/backend-iface.h	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,196 @@
+/**
+ * @file backend-iface.h Interface for media backends
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#ifndef _MEDIA_BACKEND_IFACE_H_
+#define _MEDIA_BACKEND_IFACE_H_
+
+#include "codec.h"
+#include "enum-types.h"
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PURPLE_TYPE_MEDIA_BACKEND		(purple_media_backend_get_type())
+#define PURPLE_IS_MEDIA_BACKEND(obj)		(G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_BACKEND))
+#define PURPLE_MEDIA_BACKEND(obj)		(G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_BACKEND, PurpleMediaBackend))
+#define PURPLE_MEDIA_BACKEND_GET_INTERFACE(inst)(G_TYPE_INSTANCE_GET_INTERFACE((inst), PURPLE_TYPE_MEDIA_BACKEND, PurpleMediaBackendIface))
+
+/** A placeholder to represent any media backend */
+typedef struct _PurpleMediaBackend PurpleMediaBackend;
+/** A structure to derive media backends from. */
+typedef struct _PurpleMediaBackendIface PurpleMediaBackendIface;
+
+struct _PurpleMediaBackendIface
+{
+	GTypeInterface parent_iface; /**< The parent iface class */ 
+
+	/** Implementable functions called with purple_media_backend_* */
+	gboolean (*add_stream) (PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *who,
+		PurpleMediaSessionType type, gboolean initiator,
+		const gchar *transmitter,
+		guint num_params, GParameter *params);
+	void (*add_remote_candidates) (PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *remote_candidates);
+	gboolean (*codecs_ready) (PurpleMediaBackend *self,
+		const gchar *sess_id);
+	GList *(*get_codecs) (PurpleMediaBackend *self,
+		const gchar *sess_id);
+	GList *(*get_local_candidates) (PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant);
+	gboolean (*set_remote_codecs) (PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *codecs);
+	gboolean (*set_send_codec) (PurpleMediaBackend *self,
+		const gchar *sess_id, PurpleMediaCodec *codec);
+};
+
+/**
+ * Gets the media backend's GType.
+ *
+ * @return The media backend's GType.
+ *
+ * @since 2.7.0
+ */
+GType purple_media_backend_get_type(void);
+
+/**
+ * Creates and adds a stream to the media backend.
+ *
+ * @param self The backend to add the stream to.
+ * @param sess_id The session id of the stream to add.
+ * @param who The remote participant of the stream to add.
+ * @param type The media type and direction of the stream to add.
+ * @param initiator True if the local user initiated the stream.
+ * @param transmitter The string id of the tranmsitter to use.
+ * @param num_params The number of parameters in the param parameter.
+ * @param params The additional parameters to pass when creating the stream.
+ *
+ * @return True if the stream was successfully created, othewise False.
+ *
+ * @since 2.7.0
+ */
+gboolean purple_media_backend_add_stream(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *who,
+		PurpleMediaSessionType type, gboolean initiator,
+		const gchar *transmitter,
+		guint num_params, GParameter *params);
+
+/**
+ * Add remote candidates to a stream.
+ *
+ * @param self The backend the stream is in.
+ * @param sess_id The session id associated with the stream.
+ * @param participant The participant associated with the stream.
+ * @param remote_candidates The list of remote candidates to add.
+ *
+ * @since 2.7.0
+ */
+void purple_media_backend_add_remote_candidates(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *remote_candidates);
+
+/**
+ * Get whether or not a session's codecs are ready.
+ *
+ * A codec is ready if all of the attributes and additional
+ * parameters have been collected.
+ *
+ * @param self The media backend the session is in.
+ * @param sess_id The session id of the session to check.
+ *
+ * @return True if the codecs are ready, otherwise False.
+ *
+ * @since 2.7.0
+ */
+gboolean purple_media_backend_codecs_ready(PurpleMediaBackend *self,
+		const gchar *sess_id);
+
+/**
+ * Gets the codec intersection list for a session.
+ *
+ * The intersection list consists of all codecs that are compatible
+ * between the local and remote software.
+ *
+ * @param self The media backend the session is in.
+ * @param sess_id The session id of the session to use.
+ *
+ * @return The codec intersection list.
+ *
+ * @since 2.7.0
+ */
+GList *purple_media_backend_get_codecs(PurpleMediaBackend *self,
+		const gchar *sess_id);
+
+/**
+ * Gets the list of local candidates for a stream.
+ *
+ * @param self The media backend the stream is in.
+ * @param sess_id The session id associated with the stream.
+ * @param particilant The participant associated with the stream.
+ *
+ * @return The list of local candidates.
+ *
+ * @since 2.7.0
+ */
+GList *purple_media_backend_get_local_candidates(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant);
+
+/**
+ * Sets the remote codecs on a stream.
+ *
+ * @param self The media backend the stream is in.
+ * @param sess_id The session id the stream is associated with.
+ * @param participant The participant the stream is associated with.
+ * @param codecs The list of remote codecs to set.
+ *
+ * @return True if the remote codecs were set successfully, otherwise False.
+ *
+ * @since 2.7.0
+ */
+gboolean purple_media_backend_set_remote_codecs(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		GList *codecs);
+
+/**
+ * Sets which codec format to send media content in for a session.
+ *
+ * @param self The media backend the session is in.
+ * @param sess_id The session id of the session to set the codec for.
+ * @param codec The codec to set.
+ *
+ * @return True if set successfully, otherwise False.
+ *
+ * @since 2.7.0
+ */
+gboolean purple_media_backend_set_send_codec(PurpleMediaBackend *self,
+		const gchar *sess_id, PurpleMediaCodec *codec);
+
+G_END_DECLS
+
+#endif /* _MEDIA_BACKEND_IFACE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/candidate.c	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,495 @@
+/**
+ * @file candidate.c Candidate for Media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#include "candidate.h"
+
+/** @copydoc _PurpleMediaCandidateClass */
+typedef struct _PurpleMediaCandidateClass PurpleMediaCandidateClass;
+/** @copydoc _PurpleMediaCandidatePrivate */
+typedef struct _PurpleMediaCandidatePrivate PurpleMediaCandidatePrivate;
+
+#define PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(obj) \
+		(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
+		PURPLE_TYPE_MEDIA_CANDIDATE, \
+		PurpleMediaCandidatePrivate))
+
+
+struct _PurpleMediaCandidateClass
+{
+	GObjectClass parent_class;
+};
+
+struct _PurpleMediaCandidate
+{
+	GObject parent;
+};
+
+G_DEFINE_TYPE(PurpleMediaCandidate, purple_media_candidate, G_TYPE_OBJECT);
+
+struct _PurpleMediaCandidatePrivate
+{
+	gchar *foundation;
+	guint component_id;
+	gchar *ip;
+	guint16 port;
+	gchar *base_ip;
+	guint16 base_port;
+	PurpleMediaNetworkProtocol proto;
+	guint32 priority;
+	PurpleMediaCandidateType type;
+	gchar *username;
+	gchar *password;
+	guint ttl;
+};
+
+enum {
+	PROP_CANDIDATE_0,
+	PROP_FOUNDATION,
+	PROP_COMPONENT_ID,
+	PROP_IP,
+	PROP_PORT,
+	PROP_BASE_IP,
+	PROP_BASE_PORT,
+	PROP_PROTOCOL,
+	PROP_PRIORITY,
+	PROP_TYPE,
+	PROP_USERNAME,
+	PROP_PASSWORD,
+	PROP_TTL,
+};
+
+static void
+purple_media_candidate_init(PurpleMediaCandidate *info)
+{
+	PurpleMediaCandidatePrivate *priv =
+			PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(info);
+	priv->foundation = NULL;
+	priv->component_id = 0;
+	priv->ip = NULL;
+	priv->port = 0;
+	priv->base_ip = NULL;
+	priv->proto = PURPLE_MEDIA_NETWORK_PROTOCOL_UDP;
+	priv->priority = 0;
+	priv->type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST;
+	priv->username = NULL;
+	priv->password = NULL;
+	priv->ttl = 0;
+}
+
+static void
+purple_media_candidate_finalize(GObject *info)
+{
+	PurpleMediaCandidatePrivate *priv =
+			PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(info);
+
+	g_free(priv->foundation);
+	g_free(priv->ip);
+	g_free(priv->base_ip);
+	g_free(priv->username);
+	g_free(priv->password);
+}
+
+static void
+purple_media_candidate_set_property (GObject *object, guint prop_id,
+		const GValue *value, GParamSpec *pspec)
+{
+	PurpleMediaCandidatePrivate *priv;
+	g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
+
+	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(object);
+
+	switch (prop_id) {
+		case PROP_FOUNDATION:
+			g_free(priv->foundation);
+			priv->foundation = g_value_dup_string(value);
+			break;
+		case PROP_COMPONENT_ID:
+			priv->component_id = g_value_get_uint(value);
+			break;
+		case PROP_IP:
+			g_free(priv->ip);
+			priv->ip = g_value_dup_string(value);
+			break;
+		case PROP_PORT:
+			priv->port = g_value_get_uint(value);
+			break;
+		case PROP_BASE_IP:
+			g_free(priv->base_ip);
+			priv->base_ip = g_value_dup_string(value);
+			break;
+		case PROP_BASE_PORT:
+			priv->base_port = g_value_get_uint(value);
+			break;
+		case PROP_PROTOCOL:
+			priv->proto = g_value_get_enum(value);
+			break;
+		case PROP_PRIORITY:
+			priv->priority = g_value_get_uint(value);
+			break;
+		case PROP_TYPE:
+			priv->type = g_value_get_enum(value);
+			break;
+		case PROP_USERNAME:
+			g_free(priv->username);
+			priv->username = g_value_dup_string(value);
+			break;
+		case PROP_PASSWORD:
+			g_free(priv->password);
+			priv->password = g_value_dup_string(value);
+			break;
+		case PROP_TTL:
+			priv->ttl = g_value_get_uint(value);
+			break;
+		default:	
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(
+					object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_media_candidate_get_property (GObject *object, guint prop_id,
+		GValue *value, GParamSpec *pspec)
+{
+	PurpleMediaCandidatePrivate *priv;
+	g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
+	
+	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(object);
+
+	switch (prop_id) {
+		case PROP_FOUNDATION:
+			g_value_set_string(value, priv->foundation);
+			break;
+		case PROP_COMPONENT_ID:
+			g_value_set_uint(value, priv->component_id);
+			break;
+		case PROP_IP:
+			g_value_set_string(value, priv->ip);
+			break;
+		case PROP_PORT:
+			g_value_set_uint(value, priv->port);
+			break;
+		case PROP_BASE_IP:
+			g_value_set_string(value, priv->base_ip);
+			break;
+		case PROP_BASE_PORT:
+			g_value_set_uint(value, priv->base_port);
+			break;
+		case PROP_PROTOCOL:
+			g_value_set_enum(value, priv->proto);
+			break;
+		case PROP_PRIORITY:
+			g_value_set_uint(value, priv->priority);
+			break;
+		case PROP_TYPE:
+			g_value_set_enum(value, priv->type);
+			break;
+		case PROP_USERNAME:
+			g_value_set_string(value, priv->username);
+			break;
+		case PROP_PASSWORD:
+			g_value_set_string(value, priv->password);
+			break;
+		case PROP_TTL:
+			g_value_set_uint(value, priv->ttl);
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(
+					object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_media_candidate_class_init(PurpleMediaCandidateClass *klass)
+{
+	GObjectClass *gobject_class = (GObjectClass*)klass;
+	
+	gobject_class->finalize = purple_media_candidate_finalize;
+	gobject_class->set_property = purple_media_candidate_set_property;
+	gobject_class->get_property = purple_media_candidate_get_property;
+
+	g_object_class_install_property(gobject_class, PROP_FOUNDATION,
+			g_param_spec_string("foundation",
+			"Foundation",
+			"The foundation of the candidate.",
+			NULL,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_COMPONENT_ID,
+			g_param_spec_uint("component-id",
+			"Component ID",
+			"The component id of the candidate.",
+			0, G_MAXUINT, 0,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_IP,
+			g_param_spec_string("ip",
+			"IP Address",
+			"The IP address of the candidate.",
+			NULL,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_PORT,
+			g_param_spec_uint("port",
+			"Port",
+			"The port of the candidate.",
+			0, G_MAXUINT16, 0,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_BASE_IP,
+			g_param_spec_string("base-ip",
+			"Base IP",
+			"The internal IP address of the candidate.",
+			NULL,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_BASE_PORT,
+			g_param_spec_uint("base-port",
+			"Base Port",
+			"The internal port of the candidate.",
+			0, G_MAXUINT16, 0,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_PROTOCOL,
+			g_param_spec_enum("protocol",
+			"Protocol",
+			"The protocol of the candidate.",
+			PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL,
+			PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_PRIORITY,
+			g_param_spec_uint("priority",
+			"Priority",
+			"The priority of the candidate.",
+			0, G_MAXUINT32, 0,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_TYPE,
+			g_param_spec_enum("type",
+			"Type",
+			"The type of the candidate.",
+			PURPLE_TYPE_MEDIA_CANDIDATE_TYPE,
+			PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_USERNAME,
+			g_param_spec_string("username",
+			"Username",
+			"The username used to connect to the candidate.",
+			NULL,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_PASSWORD,
+			g_param_spec_string("password",
+			"Password",
+			"The password use to connect to the candidate.",
+			NULL,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_TTL,
+			g_param_spec_uint("ttl",
+			"TTL",
+			"The TTL of the candidate.",
+			0, G_MAXUINT, 0,
+			G_PARAM_READWRITE));
+
+	g_type_class_add_private(klass, sizeof(PurpleMediaCandidatePrivate));
+}
+
+PurpleMediaCandidate *
+purple_media_candidate_new(const gchar *foundation, guint component_id,
+		PurpleMediaCandidateType type,
+		PurpleMediaNetworkProtocol proto,
+		const gchar *ip, guint port)
+{
+	return g_object_new(PURPLE_TYPE_MEDIA_CANDIDATE,
+			"foundation", foundation,
+			"component-id", component_id,
+			"type", type,
+			"protocol", proto,
+			"ip", ip,
+			"port", port, NULL);
+}
+
+PurpleMediaCandidate *
+purple_media_candidate_copy(PurpleMediaCandidate *candidate)
+{
+	PurpleMediaCandidatePrivate *priv;
+	PurpleMediaCandidate *new_candidate;
+
+	if (candidate == NULL)
+		return NULL;
+
+	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(candidate);
+
+	new_candidate = purple_media_candidate_new(priv->foundation,
+			priv->component_id, priv->type, priv->proto,
+			priv->ip, priv->port);
+	g_object_set(new_candidate,
+			"base-ip", priv->base_ip,
+			"base-port", priv->base_port,
+			"priority", priv->priority,
+			"username", priv->username,
+			"password", priv->password,
+			"ttl", priv->ttl, NULL);
+	return new_candidate;
+}
+
+GList *
+purple_media_candidate_list_copy(GList *candidates)
+{
+	GList *new_list = NULL;
+
+	for (; candidates; candidates = g_list_next(candidates)) {
+		new_list = g_list_prepend(new_list,
+				purple_media_candidate_copy(candidates->data));
+	}
+
+	new_list = g_list_reverse(new_list);
+	return new_list;
+}
+
+void
+purple_media_candidate_list_free(GList *candidates)
+{
+	for (; candidates; candidates =
+			g_list_delete_link(candidates, candidates)) {
+		g_object_unref(candidates->data);
+	}
+}
+
+gchar *
+purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate)
+{
+	gchar *foundation;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
+	g_object_get(candidate, "foundation", &foundation, NULL);
+	return foundation;
+}
+
+guint
+purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate)
+{
+	guint component_id;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
+	g_object_get(candidate, "component-id", &component_id, NULL);
+	return component_id;
+}
+
+gchar *
+purple_media_candidate_get_ip(PurpleMediaCandidate *candidate)
+{
+	gchar *ip;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
+	g_object_get(candidate, "ip", &ip, NULL);
+	return ip;
+}
+
+guint16
+purple_media_candidate_get_port(PurpleMediaCandidate *candidate)
+{
+	guint port;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
+	g_object_get(candidate, "port", &port, NULL);
+	return port;
+}
+
+gchar *
+purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate)
+{
+	gchar *base_ip;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
+	g_object_get(candidate, "base-ip", &base_ip, NULL);
+	return base_ip;
+}
+
+guint16
+purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate)
+{
+	guint base_port;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
+	g_object_get(candidate, "base_port", &base_port, NULL);
+	return base_port;
+}
+
+PurpleMediaNetworkProtocol
+purple_media_candidate_get_protocol(PurpleMediaCandidate *candidate)
+{
+	PurpleMediaNetworkProtocol protocol;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate),
+			PURPLE_MEDIA_NETWORK_PROTOCOL_UDP);
+	g_object_get(candidate, "protocol", &protocol, NULL);
+	return protocol;
+}
+
+guint32
+purple_media_candidate_get_priority(PurpleMediaCandidate *candidate)
+{
+	guint priority;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
+	g_object_get(candidate, "priority", &priority, NULL);
+	return priority;
+}
+
+PurpleMediaCandidateType
+purple_media_candidate_get_candidate_type(PurpleMediaCandidate *candidate)
+{
+	PurpleMediaCandidateType type;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate),
+			PURPLE_MEDIA_CANDIDATE_TYPE_HOST);
+	g_object_get(candidate, "type", &type, NULL);
+	return type;
+}
+
+gchar *
+purple_media_candidate_get_username(PurpleMediaCandidate *candidate)
+{
+	gchar *username;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
+	g_object_get(candidate, "username", &username, NULL);
+	return username;
+}
+
+gchar *
+purple_media_candidate_get_password(PurpleMediaCandidate *candidate)
+{
+	gchar *password;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
+	g_object_get(candidate, "password", &password, NULL);
+	return password;
+}
+
+guint
+purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate)
+{
+	guint ttl;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
+	g_object_get(candidate, "ttl", &ttl, NULL);
+	return ttl;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/candidate.h	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,252 @@
+/**
+ * @file candidate.h Candidate for Media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#ifndef _PURPLE_MEDIA_CANDIDATE_H_
+#define _PURPLE_MEDIA_CANDIDATE_H_
+
+#include "enum-types.h"
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PURPLE_TYPE_MEDIA_CANDIDATE            (purple_media_candidate_get_type())
+#define PURPLE_IS_MEDIA_CANDIDATE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CANDIDATE))
+#define PURPLE_IS_MEDIA_CANDIDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CANDIDATE))
+#define PURPLE_MEDIA_CANDIDATE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
+#define PURPLE_MEDIA_CANDIDATE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
+#define PURPLE_MEDIA_CANDIDATE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
+
+/** An opaque structure representing a network candidate (IP Address and port pair). */
+typedef struct _PurpleMediaCandidate PurpleMediaCandidate;
+
+/**
+ * Gets the type of the media candidate structure.
+ *
+ * @return The media canditate's GType
+ *
+ * @since 2.6.0
+ */
+GType purple_media_candidate_get_type(void);
+
+/**
+ * Creates a PurpleMediaCandidate instance.
+ *
+ * @param foundation The foundation of the candidate.
+ * @param component_id The component this candidate is for.
+ * @param type The type of candidate.
+ * @param proto The protocol this component is for.
+ * @param ip The IP address of this component.
+ * @param port The network port.
+ *
+ * @return The newly created PurpleMediaCandidate instance.
+ *
+ * @since 2.6.0
+ */
+PurpleMediaCandidate *purple_media_candidate_new(
+		const gchar *foundation, guint component_id,
+		PurpleMediaCandidateType type,
+		PurpleMediaNetworkProtocol proto,
+		const gchar *ip, guint port);
+
+/**
+ * Copies a PurpleMediaCandidate.
+ *
+ * @param candidate The candidate to copy.
+ *
+ * @return The copy of the PurpleMediaCandidate.
+ *
+ * @since 2.7.0
+ */
+PurpleMediaCandidate *purple_media_candidate_copy(
+		PurpleMediaCandidate *candidate);
+
+/**
+ * Copies a GList of PurpleMediaCandidate and its contents.
+ *
+ * @param candidates The list of candidates to be copied.
+ *
+ * @return The copy of the GList.
+ *
+ * @since 2.6.0
+ */
+GList *purple_media_candidate_list_copy(GList *candidates);
+
+/**
+ * Frees a GList of PurpleMediaCandidate and its contents.
+ *
+ * @param candidates The list of candidates to be freed.
+ *
+ * @since 2.6.0
+ */
+void purple_media_candidate_list_free(GList *candidates);
+
+/**
+ * Gets the foundation (identifier) from the candidate.
+ *
+ * @param candidate The candidate to get the foundation from.
+ *
+ * @return The foundation.
+ *
+ * @since 2.6.0
+ */
+gchar *purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the component id (rtp or rtcp)
+ *
+ * @param candidate The candidate to get the compnent id from.
+ *
+ * @return The component id.
+ *
+ * @since 2.6.0
+ */
+guint purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the IP address.
+ *
+ * @param candidate The candidate to get the IP address from.
+ *
+ * @return The IP address.
+ *
+ * @since 2.6.0
+ */
+gchar *purple_media_candidate_get_ip(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the port.
+ *
+ * @param candidate The candidate to get the port from.
+ *
+ * @return The port.
+ *
+ * @since 2.6.0
+ */
+guint16 purple_media_candidate_get_port(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the base (internal) IP address.
+ *
+ * This can be NULL.
+ *
+ * @param candidate The candidate to get the base IP address from.
+ *
+ * @return The base IP address.
+ *
+ * @since 2.6.0
+ */
+gchar *purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the base (internal) port.
+ *
+ * Invalid if the base IP is NULL.
+ *
+ * @param candidate The candidate to get the base port.
+ *
+ * @return The base port.
+ *
+ * @since 2.6.0
+ */
+guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the protocol (TCP or UDP).
+ *
+ * @param candidate The candidate to get the protocol from.
+ *
+ * @return The protocol.
+ *
+ * @since 2.6.0
+ */
+PurpleMediaNetworkProtocol purple_media_candidate_get_protocol(
+		PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the priority.
+ *
+ * @param candidate The candidate to get the priority from.
+ *
+ * @return The priority.
+ *
+ * @since 2.6.0
+ */
+guint32 purple_media_candidate_get_priority(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the candidate type.
+ *
+ * @param candidate The candidate to get the candidate type from.
+ *
+ * @return The candidate type.
+ *
+ * @since 2.6.0
+ */
+PurpleMediaCandidateType purple_media_candidate_get_candidate_type(
+		PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the username.
+ *
+ * This can be NULL. It depends on the transmission type.
+ *
+ * @param The candidate to get the username from.
+ *
+ * @return The username.
+ *
+ * @since 2.6.0
+ */
+gchar *purple_media_candidate_get_username(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the password.
+ *
+ * This can be NULL. It depends on the transmission type.
+ *
+ * @param The candidate to get the password from.
+ *
+ * @return The password.
+ *
+ * @since 2.6.0
+ */
+gchar *purple_media_candidate_get_password(PurpleMediaCandidate *candidate);
+
+/**
+ * Gets the TTL.
+ *
+ * @param The candidate to get the TTL from.
+ *
+ * @return The TTL.
+ *
+ * @since 2.6.0
+ */
+guint purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate);
+
+G_END_DECLS
+
+#endif  /* _PURPLE_MEDIA_CANDIDATE_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/codec.c	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,419 @@
+/**
+ * @file codec.c Codec for Media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#include "codec.h"
+
+/** @copydoc _PurpleMediaCodecClass */
+typedef struct _PurpleMediaCodecClass PurpleMediaCodecClass;
+/** @copydoc _PurpleMediaCodecPrivate */
+typedef struct _PurpleMediaCodecPrivate PurpleMediaCodecPrivate;
+
+#define PURPLE_MEDIA_CODEC_GET_PRIVATE(obj) \
+		(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
+		PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodecPrivate))
+
+struct _PurpleMediaCodecClass
+{
+	GObjectClass parent_class;
+};
+
+struct _PurpleMediaCodec
+{
+	GObject parent;
+};
+
+G_DEFINE_TYPE(PurpleMediaCodec, purple_media_codec, G_TYPE_OBJECT);
+
+struct _PurpleMediaCodecPrivate
+{
+	gint id;
+	char *encoding_name;
+	PurpleMediaSessionType media_type;
+	guint clock_rate;
+	guint channels;
+	GList *optional_params;
+};
+
+enum {
+	PROP_CODEC_0,
+	PROP_ID,
+	PROP_ENCODING_NAME,
+	PROP_MEDIA_TYPE,
+	PROP_CLOCK_RATE,
+	PROP_CHANNELS,
+	PROP_OPTIONAL_PARAMS,
+};
+
+static void
+purple_media_codec_init(PurpleMediaCodec *info)
+{
+	PurpleMediaCodecPrivate *priv =
+			PURPLE_MEDIA_CODEC_GET_PRIVATE(info);
+	priv->encoding_name = NULL;
+	priv->optional_params = NULL;
+}
+
+static void
+purple_media_codec_finalize(GObject *info)
+{
+	PurpleMediaCodecPrivate *priv =
+			PURPLE_MEDIA_CODEC_GET_PRIVATE(info);
+	g_free(priv->encoding_name);
+	for (; priv->optional_params; priv->optional_params =
+			g_list_delete_link(priv->optional_params,
+			priv->optional_params)) {
+		g_free(priv->optional_params->data);
+	}
+}
+
+static void
+purple_media_codec_set_property (GObject *object, guint prop_id,
+		const GValue *value, GParamSpec *pspec)
+{
+	PurpleMediaCodecPrivate *priv;
+	g_return_if_fail(PURPLE_IS_MEDIA_CODEC(object));
+
+	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(object);
+
+	switch (prop_id) {
+		case PROP_ID:
+			priv->id = g_value_get_uint(value);
+			break;
+		case PROP_ENCODING_NAME:
+			g_free(priv->encoding_name);
+			priv->encoding_name = g_value_dup_string(value);
+			break;
+		case PROP_MEDIA_TYPE:
+			priv->media_type = g_value_get_flags(value);
+			break;
+		case PROP_CLOCK_RATE:
+			priv->clock_rate = g_value_get_uint(value);
+			break;
+		case PROP_CHANNELS:
+			priv->channels = g_value_get_uint(value);
+			break;
+		case PROP_OPTIONAL_PARAMS:
+			priv->optional_params = g_value_get_pointer(value);
+			break;
+		default:	
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(
+					object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_media_codec_get_property (GObject *object, guint prop_id,
+		GValue *value, GParamSpec *pspec)
+{
+	PurpleMediaCodecPrivate *priv;
+	g_return_if_fail(PURPLE_IS_MEDIA_CODEC(object));
+	
+	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(object);
+
+	switch (prop_id) {
+		case PROP_ID:
+			g_value_set_uint(value, priv->id);
+			break;
+		case PROP_ENCODING_NAME:
+			g_value_set_string(value, priv->encoding_name);
+			break;
+		case PROP_MEDIA_TYPE:
+			g_value_set_flags(value, priv->media_type);
+			break;
+		case PROP_CLOCK_RATE:
+			g_value_set_uint(value, priv->clock_rate);
+			break;
+		case PROP_CHANNELS:
+			g_value_set_uint(value, priv->channels);
+			break;
+		case PROP_OPTIONAL_PARAMS:
+			g_value_set_pointer(value, priv->optional_params);
+			break;
+		default:	
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(
+					object, prop_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_media_codec_class_init(PurpleMediaCodecClass *klass)
+{
+	GObjectClass *gobject_class = (GObjectClass*)klass;
+	
+	gobject_class->finalize = purple_media_codec_finalize;
+	gobject_class->set_property = purple_media_codec_set_property;
+	gobject_class->get_property = purple_media_codec_get_property;
+
+	g_object_class_install_property(gobject_class, PROP_ID,
+			g_param_spec_uint("id",
+			"ID",
+			"The numeric identifier of the codec.",
+			0, G_MAXUINT, 0,
+			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_ENCODING_NAME,
+			g_param_spec_string("encoding-name",
+			"Encoding Name",
+			"The name of the codec.",
+			NULL,
+			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_MEDIA_TYPE,
+			g_param_spec_flags("media-type",
+			"Media Type",
+			"Whether this is an audio of video codec.",
+			PURPLE_TYPE_MEDIA_SESSION_TYPE,
+			PURPLE_MEDIA_NONE,
+			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_CLOCK_RATE,
+			g_param_spec_uint("clock-rate",
+			"Create Callback",
+			"The function called to create this element.",
+			0, G_MAXUINT, 0,
+			G_PARAM_READWRITE));
+
+	g_object_class_install_property(gobject_class, PROP_CHANNELS,
+			g_param_spec_uint("channels",
+			"Channels",
+			"The number of channels in this codec.",
+			0, G_MAXUINT, 0,
+			G_PARAM_READWRITE));
+	g_object_class_install_property(gobject_class, PROP_OPTIONAL_PARAMS,
+			g_param_spec_pointer("optional-params",
+			"Optional Params",
+			"A list of optional parameters for the codec.",
+			G_PARAM_READWRITE));
+
+	g_type_class_add_private(klass, sizeof(PurpleMediaCodecPrivate));
+}
+
+PurpleMediaCodec *
+purple_media_codec_new(int id, const char *encoding_name,
+		PurpleMediaSessionType media_type, guint clock_rate)
+{
+	PurpleMediaCodec *codec =
+			g_object_new(PURPLE_TYPE_MEDIA_CODEC,
+			"id", id,
+			"encoding_name", encoding_name,
+			"media_type", media_type,
+			"clock-rate", clock_rate, NULL);
+	return codec;
+}
+
+guint
+purple_media_codec_get_id(PurpleMediaCodec *codec)
+{
+	guint id;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), 0);
+	g_object_get(codec, "id", &id, NULL);
+	return id;
+}
+
+gchar *
+purple_media_codec_get_encoding_name(PurpleMediaCodec *codec)
+{
+	gchar *name;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), NULL);
+	g_object_get(codec, "encoding-name", &name, NULL);
+	return name;
+}
+
+guint
+purple_media_codec_get_clock_rate(PurpleMediaCodec *codec)
+{
+	guint clock_rate;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), 0);
+	g_object_get(codec, "clock-rate", &clock_rate, NULL);
+	return clock_rate;
+}
+
+guint
+purple_media_codec_get_channels(PurpleMediaCodec *codec)
+{
+	guint channels;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), 0);
+	g_object_get(codec, "channels", &channels, NULL);
+	return channels;
+}
+
+GList *
+purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec)
+{
+	GList *optional_params;
+	g_return_val_if_fail(PURPLE_IS_MEDIA_CODEC(codec), NULL);
+	g_object_get(codec, "optional-params", &optional_params, NULL);
+	return optional_params;
+}
+
+void
+purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec,
+		const gchar *name, const gchar *value)
+{
+	PurpleMediaCodecPrivate *priv;
+	PurpleKeyValuePair *new_param;
+
+	g_return_if_fail(codec != NULL);
+	g_return_if_fail(name != NULL && value != NULL);
+
+	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+
+	new_param = g_new0(PurpleKeyValuePair, 1);
+	new_param->key = g_strdup(name);
+	new_param->value = g_strdup(value);
+	priv->optional_params = g_list_append(
+			priv->optional_params, new_param);
+}
+
+void
+purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec,
+		PurpleKeyValuePair *param)
+{
+	PurpleMediaCodecPrivate *priv;
+
+	g_return_if_fail(codec != NULL && param != NULL);
+
+	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+
+	g_free(param->key);
+	g_free(param->value);
+	g_free(param);
+
+	priv->optional_params =
+			g_list_remove(priv->optional_params, param);
+}
+
+PurpleKeyValuePair *
+purple_media_codec_get_optional_parameter(PurpleMediaCodec *codec,
+		const gchar *name, const gchar *value)
+{
+	PurpleMediaCodecPrivate *priv;
+	GList *iter;
+
+	g_return_val_if_fail(codec != NULL, NULL);
+	g_return_val_if_fail(name != NULL, NULL);
+
+	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+
+	for (iter = priv->optional_params; iter; iter = g_list_next(iter)) {
+		PurpleKeyValuePair *param = iter->data;
+		if (!g_ascii_strcasecmp(param->key, name) &&
+				(value == NULL ||
+				!g_ascii_strcasecmp(param->value, value)))
+			return param;
+	}
+
+	return NULL;
+}
+
+PurpleMediaCodec *
+purple_media_codec_copy(PurpleMediaCodec *codec)
+{
+	PurpleMediaCodecPrivate *priv;
+	PurpleMediaCodec *new_codec;
+	GList *iter;
+
+	if (codec == NULL)
+		return NULL;
+
+	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+
+	new_codec = purple_media_codec_new(priv->id, priv->encoding_name,
+			priv->media_type, priv->clock_rate);
+	g_object_set(codec, "channels", priv->channels, NULL);
+
+	for (iter = priv->optional_params; iter; iter = g_list_next(iter)) {
+		PurpleKeyValuePair *param =
+				(PurpleKeyValuePair*)iter->data;
+		purple_media_codec_add_optional_parameter(new_codec,
+				param->key, param->value);
+	}
+
+	return new_codec;
+}
+
+GList *
+purple_media_codec_list_copy(GList *codecs)
+{
+	GList *new_list = NULL;
+
+	for (; codecs; codecs = g_list_next(codecs)) {
+		new_list = g_list_prepend(new_list,
+				purple_media_codec_copy(codecs->data));
+	}
+
+	new_list = g_list_reverse(new_list);
+	return new_list;
+}
+
+void
+purple_media_codec_list_free(GList *codecs)
+{
+	for (; codecs; codecs =
+			g_list_delete_link(codecs, codecs)) {
+		g_object_unref(codecs->data);
+	}
+}
+
+gchar *
+purple_media_codec_to_string(const PurpleMediaCodec *codec)
+{
+	PurpleMediaCodecPrivate *priv;
+	GString *string = NULL;
+	GList *item;
+	gchar *charstring;
+	const gchar *media_type_str = NULL;
+
+	if (codec == NULL)
+		return g_strdup("(NULL)");
+
+	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+
+	string = g_string_new("");
+
+	if (priv->media_type & PURPLE_MEDIA_AUDIO)
+		media_type_str = "audio";
+	else if (priv->media_type & PURPLE_MEDIA_VIDEO)
+		media_type_str = "video";
+
+	g_string_printf(string, "%d: %s %s clock:%d channels:%d", priv->id,
+			media_type_str, priv->encoding_name,
+			priv->clock_rate, priv->channels);
+
+	for (item = priv->optional_params; item; item = g_list_next (item)) {
+		PurpleKeyValuePair *param = item->data;
+		g_string_append_printf (string, " %s=%s",
+				param->key, (gchar *)param->value);
+	}
+
+	charstring = string->str;
+	g_string_free (string, FALSE);
+
+	return charstring;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/codec.h	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,213 @@
+/**
+ * @file codec.h Codec for Media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#ifndef _PURPLE_MEDIA_CODEC_H_
+#define _PURPLE_MEDIA_CODEC_H_
+
+#include "enum-types.h"
+
+/** An opaque structure representing an audio or video codec. */
+typedef struct _PurpleMediaCodec PurpleMediaCodec;
+
+#include "../util.h"
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PURPLE_TYPE_MEDIA_CODEC            (purple_media_codec_get_type())
+#define PURPLE_IS_MEDIA_CODEC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CODEC))
+#define PURPLE_IS_MEDIA_CODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CODEC))
+#define PURPLE_MEDIA_CODEC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
+#define PURPLE_MEDIA_CODEC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
+#define PURPLE_MEDIA_CODEC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
+
+
+/**
+ * Gets the type of the media codec structure.
+ *
+ * @return The media codec's GType
+ *
+ * @since 2.6.0
+ */
+GType purple_media_codec_get_type(void);
+
+/**
+ * Creates a new PurpleMediaCodec instance.
+ *
+ * @param id Codec identifier.
+ * @param encoding_name Name of the media type this encodes.
+ * @param media_type PurpleMediaSessionType of this codec.
+ * @param clock_rate The clock rate this codec encodes at, if applicable.
+ *
+ * @return The newly created PurpleMediaCodec.
+ *
+ * @since 2.6.0
+ */
+PurpleMediaCodec *purple_media_codec_new(int id, const char *encoding_name,
+		PurpleMediaSessionType media_type, guint clock_rate);
+
+/**
+ * Gets the codec id.
+ *
+ * @param The codec to get the id from.
+ *
+ * @return The codec id.
+ *
+ * @since 2.6.0
+ */
+guint purple_media_codec_get_id(PurpleMediaCodec *codec);
+
+/**
+ * Gets the encoding name.
+ *
+ * @param The codec to get the encoding name from.
+ *
+ * @return The encoding name.
+ *
+ * @since 2.6.0
+ */
+gchar *purple_media_codec_get_encoding_name(PurpleMediaCodec *codec);
+
+/**
+ * Gets the clock rate.
+ *
+ * @param The codec to get the clock rate from.
+ *
+ * @return The clock rate.
+ *
+ * @since 2.6.0
+ */
+guint purple_media_codec_get_clock_rate(PurpleMediaCodec *codec);
+
+/**
+ * Gets the number of channels.
+ *
+ * @param The codec to get the number of channels from.
+ *
+ * @return The number of channels.
+ *
+ * @since 2.6.0
+ */
+guint purple_media_codec_get_channels(PurpleMediaCodec *codec);
+
+/**
+ * Gets a list of the optional parameters.
+ *
+ * The list consists of PurpleKeyValuePair's. 
+ *
+ * @param The codec to get the optional parameters from.
+ *
+ * @return The list of optional parameters.
+ *
+ * @since 2.6.0
+ */
+GList *purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec);
+
+/**
+ * Adds an optional parameter to the codec.
+ *
+ * @param codec The codec to add the parameter to.
+ * @param name The name of the parameter to add.
+ * @param value The value of the parameter to add.
+ *
+ * @since 2.6.0
+ */
+void purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec,
+		const gchar *name, const gchar *value);
+
+/**
+ * Removes an optional parameter from the codec.
+ *
+ * @param codec The codec to remove the parameter from.
+ * @param param A pointer to the parameter to remove.
+ *
+ * @since 2.6.0
+ */
+void purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec,
+		PurpleKeyValuePair *param);
+
+/**
+ * Gets an optional parameter based on the values given.
+ *
+ * @param codec The codec to find the parameter in.
+ * @param name The name of the parameter to search for.
+ * @param value The value to search for or NULL.
+ *
+ * @return The value found or NULL.
+ *
+ * @since 2.6.0
+ */
+PurpleKeyValuePair *purple_media_codec_get_optional_parameter(
+		PurpleMediaCodec *codec, const gchar *name,
+		const gchar *value);
+
+/**
+ * Copies a PurpleMediaCodec object.
+ *
+ * @param codec The codec to copy.
+ *
+ * @return The copy of the codec.
+ *
+ * @since 2.7.0
+ */
+PurpleMediaCodec *purple_media_codec_copy(PurpleMediaCodec *codec);
+
+/**
+ * Copies a GList of PurpleMediaCodec and its contents.
+ *
+ * @param codecs The list of codecs to be copied.
+ *
+ * @return The copy of the GList.
+ *
+ * @since 2.6.0
+ */
+GList *purple_media_codec_list_copy(GList *codecs);
+
+/**
+ * Frees a GList of PurpleMediaCodec and its contents.
+ *
+ * @param codecs The list of codecs to be freed.
+ *
+ * @since 2.6.0
+ */
+void purple_media_codec_list_free(GList *codecs);
+
+/**
+ * Creates a string representation of the codec.
+ *
+ * @param codec The codec to create the string of.
+ *
+ * @return The new string representation.
+ *
+ * @since 2.6.0
+ */
+gchar *purple_media_codec_to_string(const PurpleMediaCodec *codec);
+
+G_END_DECLS
+
+#endif  /* _PURPLE_MEDIA_CODEC_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/enum-types.c	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,213 @@
+/**
+ * @file enum-types.c Enum types for Media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#include "enum-types.h"
+
+/*
+ * PurpleMediaCandidateType
+ */
+
+GType
+purple_media_candidate_type_get_type()
+{
+	static GType type = 0;
+	if (type == 0) {
+		static const GEnumValue values[] = {
+			{ PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
+					"PURPLE_MEDIA_CANDIDATE_TYPE_HOST",
+					"host" },
+			{ PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
+					"PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX",
+					"srflx" },
+			{ PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
+					"PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX",
+					"prflx" },
+			{ PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
+					"PURPLE_MEDIA_CANDIDATE_TYPE_RELAY",
+					"relay" },
+			{ PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST,
+					"PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST",
+					"multicast" },
+			{ 0, NULL, NULL }
+		};
+		type = g_enum_register_static("PurpleMediaCandidateType",
+				values);
+	}
+	return type;
+}
+
+/*
+ * PurpleMediaCaps
+ */
+
+GType
+purple_media_caps_get_type()
+{
+	static GType type = 0;
+	if (type == 0) {
+		static const GEnumValue values[] = {
+			{ PURPLE_MEDIA_CAPS_NONE,
+					"PURPLE_MEDIA_CAPS_NONE", "none" },
+			{ PURPLE_MEDIA_CAPS_AUDIO,
+					"PURPLE_MEDIA_CAPS_AUDIO", "audio" },
+			{ PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION,
+					"PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION",
+					"audio-single-direction" },
+			{ PURPLE_MEDIA_CAPS_VIDEO,
+					"PURPLE_MEDIA_CAPS_VIDEO", "video" },
+			{ PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION,
+					"PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION",
+					"video-single-direction" },
+			{ PURPLE_MEDIA_CAPS_AUDIO_VIDEO,
+					"PURPLE_MEDIA_CAPS_AUDIO_VIDEO",
+					"audio-video" },
+			{ PURPLE_MEDIA_CAPS_MODIFY_SESSION,
+					"PURPLE_MEDIA_CAPS_MODIFY_SESSION",
+					"modify-session" },
+			{ PURPLE_MEDIA_CAPS_CHANGE_DIRECTION,
+					"PURPLE_MEDIA_CAPS_CHANGE_DIRECTION",
+					"change-direction" },
+			{ 0, NULL, NULL }
+		};
+		type = g_enum_register_static("PurpleMediaCaps", values);
+	}
+	return type;
+}
+
+/*
+ * PurpleMediaInfoType
+ */
+
+GType
+purple_media_info_type_get_type()
+{
+	static GType type = 0;
+	if (type == 0) {
+		static const GEnumValue values[] = {
+			{ PURPLE_MEDIA_INFO_HANGUP,
+					"PURPLE_MEDIA_INFO_HANGUP", "hangup" },
+			{ PURPLE_MEDIA_INFO_ACCEPT,
+					"PURPLE_MEDIA_INFO_ACCEPT", "accept" },
+			{ PURPLE_MEDIA_INFO_REJECT,
+					"PURPLE_MEDIA_INFO_REJECT", "reject" },
+			{ PURPLE_MEDIA_INFO_MUTE,
+					"PURPLE_MEDIA_INFO_MUTE", "mute" },
+			{ PURPLE_MEDIA_INFO_UNMUTE,
+					"PURPLE_MEDIA_INFO_UNMUTE", "unmute" },
+			{ PURPLE_MEDIA_INFO_PAUSE,
+					"PURPLE_MEDIA_INFO_PAUSE", "pause" },
+			{ PURPLE_MEDIA_INFO_UNPAUSE,
+					"PURPLE_MEDIA_INFO_UNPAUSE", "unpause" },
+			{ PURPLE_MEDIA_INFO_HOLD,
+					"PURPLE_MEDIA_INFO_HOLD", "hold" },
+			{ PURPLE_MEDIA_INFO_UNHOLD,
+					"PURPLE_MEDIA_INFO_HOLD", "unhold" },
+			{ 0, NULL, NULL }
+		};
+		type = g_enum_register_static("PurpleMediaInfoType", values);
+	}
+	return type;
+}
+
+/*
+ * PurpleMediaNetworkProtocol
+ */
+
+GType
+purple_media_network_protocol_get_type()
+{
+	static GType type = 0;
+	if (type == 0) {
+		static const GEnumValue values[] = {
+			{ PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
+					"PURPLE_MEDIA_NETWORK_PROTOCOL_UDP",
+					"udp" },
+			{ PURPLE_MEDIA_NETWORK_PROTOCOL_TCP,
+					"PURPLE_MEDIA_NETWORK_PROTOCOL_TCP",
+					"tcp" },
+			{ 0, NULL, NULL }
+		};
+		type = g_enum_register_static("PurpleMediaNetworkProtocol",
+				values);
+	}
+	return type;
+}
+
+/*
+ * PurpleMediaSessionType
+ */
+
+GType
+purple_media_session_type_get_type()
+{
+	static GType type = 0;
+	if (type == 0) {
+		static const GFlagsValue values[] = {
+			{ PURPLE_MEDIA_NONE,
+				"PURPLE_MEDIA_NONE", "none" },
+			{ PURPLE_MEDIA_RECV_AUDIO,
+				"PURPLE_MEDIA_RECV_AUDIO", "recv-audio" },
+			{ PURPLE_MEDIA_SEND_AUDIO,
+				"PURPLE_MEDIA_SEND_AUDIO", "send-audio" },
+			{ PURPLE_MEDIA_RECV_VIDEO,
+				"PURPLE_MEDIA_RECV_VIDEO", "recv-video" },
+			{ PURPLE_MEDIA_SEND_VIDEO,
+				"PURPLE_MEDIA_SEND_VIDEO", "send-audio" },
+			{ PURPLE_MEDIA_AUDIO,
+				"PURPLE_MEDIA_AUDIO", "audio" },
+			{ PURPLE_MEDIA_VIDEO,
+				"PURPLE_MEDIA_VIDEO", "video" },
+			{ 0, NULL, NULL }
+		};
+		type = g_flags_register_static(
+				"PurpleMediaSessionType", values);
+	}
+	return type;
+}
+
+/*
+ * PurpleMediaState
+ */
+
+GType
+purple_media_state_changed_get_type()
+{
+	static GType type = 0;
+	if (type == 0) {
+		static const GEnumValue values[] = {
+			{ PURPLE_MEDIA_STATE_NEW,
+				"PURPLE_MEDIA_STATE_NEW", "new" },
+			{ PURPLE_MEDIA_STATE_CONNECTED,
+				"PURPLE_MEDIA_STATE_CONNECTED", "connected" },
+			{ PURPLE_MEDIA_STATE_END,
+				"PURPLE_MEDIA_STATE_END", "end" },
+			{ 0, NULL, NULL }
+		};
+		type = g_enum_register_static("PurpleMediaState", values);
+	}
+	return type;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/media/enum-types.h	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,162 @@
+/**
+ * @file enum-types.h Enum types for Media API
+ * @ingroup core
+ */
+
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#ifndef _PURPLE_MEDIA_ENUM_TYPES_H_
+#define _PURPLE_MEDIA_ENUM_TYPES_H_
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PURPLE_TYPE_MEDIA_CANDIDATE_TYPE   (purple_media_candidate_type_get_type())
+#define PURPLE_MEDIA_TYPE_CAPS	           (purple_media_caps_get_type())
+#define PURPLE_MEDIA_TYPE_INFO_TYPE	   (purple_media_info_type_get_type())
+#define PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL (purple_media_network_protocol_get_type())
+#define PURPLE_TYPE_MEDIA_SESSION_TYPE     (purple_media_session_type_get_type())
+#define PURPLE_MEDIA_TYPE_STATE            (purple_media_state_changed_get_type())
+
+/** Media candidate types */
+typedef enum {
+	PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
+	PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
+	PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
+	PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
+	PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST,
+} PurpleMediaCandidateType;
+
+/** Media caps */
+typedef enum {
+	PURPLE_MEDIA_CAPS_NONE = 0,
+	PURPLE_MEDIA_CAPS_AUDIO = 1,
+	PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION = 1 << 1,
+	PURPLE_MEDIA_CAPS_VIDEO = 1 << 2,
+	PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION = 1 << 3,
+	PURPLE_MEDIA_CAPS_AUDIO_VIDEO = 1 << 4,
+	PURPLE_MEDIA_CAPS_MODIFY_SESSION = 1 << 5,
+	PURPLE_MEDIA_CAPS_CHANGE_DIRECTION = 1 << 6,
+} PurpleMediaCaps;
+
+/** Media component types */
+typedef enum {
+	PURPLE_MEDIA_COMPONENT_NONE = 0,
+	PURPLE_MEDIA_COMPONENT_RTP = 1,
+	PURPLE_MEDIA_COMPONENT_RTCP = 2,
+} PurpleMediaComponentType;
+
+/** Media info types */
+typedef enum {
+	PURPLE_MEDIA_INFO_HANGUP = 0,
+	PURPLE_MEDIA_INFO_ACCEPT,
+	PURPLE_MEDIA_INFO_REJECT,
+	PURPLE_MEDIA_INFO_MUTE,
+	PURPLE_MEDIA_INFO_UNMUTE,
+	PURPLE_MEDIA_INFO_PAUSE,
+	PURPLE_MEDIA_INFO_UNPAUSE,
+	PURPLE_MEDIA_INFO_HOLD,
+	PURPLE_MEDIA_INFO_UNHOLD,
+} PurpleMediaInfoType;
+
+/** Media network protocols */
+typedef enum {
+	PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
+	PURPLE_MEDIA_NETWORK_PROTOCOL_TCP,
+} PurpleMediaNetworkProtocol;
+
+/** Media session types */
+typedef enum {
+	PURPLE_MEDIA_NONE	= 0,
+	PURPLE_MEDIA_RECV_AUDIO = 1 << 0,
+	PURPLE_MEDIA_SEND_AUDIO = 1 << 1,
+	PURPLE_MEDIA_RECV_VIDEO = 1 << 2,
+	PURPLE_MEDIA_SEND_VIDEO = 1 << 3,
+	PURPLE_MEDIA_AUDIO = PURPLE_MEDIA_RECV_AUDIO | PURPLE_MEDIA_SEND_AUDIO,
+	PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO
+} PurpleMediaSessionType;
+
+/** Media state-changed types */
+typedef enum {
+	PURPLE_MEDIA_STATE_NEW = 0,
+	PURPLE_MEDIA_STATE_CONNECTED,
+	PURPLE_MEDIA_STATE_END,
+} PurpleMediaState;
+
+/**
+ * Gets the media candidate type's GType
+ *
+ * @return The media candidate type's GType.
+ *
+ * @since 2.6.0
+ */
+GType purple_media_candidate_type_get_type(void);
+
+/**
+ * Gets the type of the media caps flags
+ *
+ * @return The media caps flags' GType
+ *
+ * @since 2.7.0
+ */
+GType purple_media_caps_get_type(void);
+
+/**
+ * Gets the type of the info type enum
+ *
+ * @return The info type enum's GType
+ *
+ * @since 2.6.0
+ */
+GType purple_media_info_type_get_type(void);
+
+/**
+ * Gets the media network protocol's GType
+ *
+ * @return The media network protocol's GType.
+ *
+ * @since 2.6.0
+ */
+GType purple_media_network_protocol_get_type(void);
+
+/**
+ * Gets the media session type's GType
+ *
+ * @return The media session type's GType.
+ *
+ * @since 2.6.0
+ */
+GType purple_media_session_type_get_type(void);
+
+/**
+ * Gets the type of the state-changed enum
+ *
+ * @return The state-changed enum's GType
+ *
+ * @since 2.6.0
+ */
+GType purple_media_state_changed_get_type(void);
+
+G_END_DECLS
+
+#endif  /* _PURPLE_MEDIA_ENUM_TYPES_ */
--- a/libpurple/mediamanager.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/mediamanager.c	Thu Feb 18 21:38:43 2010 +0000
@@ -37,8 +37,8 @@
 #endif
 
 #ifdef USE_VV
+#include <media/backend-fs2.h>
 
-#include <gst/farsight/fs-conference-iface.h>
 #include <gst/farsight/fs-element-added-notifier.h>
 #include <gst/interfaces/xoverlay.h>
 
@@ -80,6 +80,7 @@
 	GList *elements;
 	GList *output_windows;
 	gulong next_output_window_id;
+	GType backend_type;
 
 	PurpleMediaElementInfo *video_src;
 	PurpleMediaElementInfo *video_sink;
@@ -100,6 +101,7 @@
 
 enum {
 	INIT_MEDIA,
+	UI_CAPS_CHANGED,
 	LAST_SIGNAL
 };
 static guint purple_media_manager_signals[LAST_SIGNAL] = {0};
@@ -148,6 +150,15 @@
 		purple_smarshal_BOOLEAN__OBJECT_POINTER_STRING,
 		G_TYPE_BOOLEAN, 3, PURPLE_TYPE_MEDIA,
 		G_TYPE_POINTER, G_TYPE_STRING);
+
+	purple_media_manager_signals[UI_CAPS_CHANGED] = g_signal_new ("ui-caps-changed",
+		G_TYPE_FROM_CLASS (klass),
+		G_SIGNAL_RUN_LAST,
+		0, NULL, NULL,
+		purple_smarshal_VOID__FLAGS_FLAGS,
+		G_TYPE_NONE, 2, PURPLE_MEDIA_TYPE_CAPS,
+		PURPLE_MEDIA_TYPE_CAPS);
+
 	g_type_class_add_private(klass, sizeof(PurpleMediaManagerPrivate));
 }
 
@@ -157,6 +168,9 @@
 	media->priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media);
 	media->priv->medias = NULL;
 	media->priv->next_output_window_id = 1;
+#ifdef USE_VV
+	media->priv->backend_type = PURPLE_TYPE_MEDIA_BACKEND_FS2;
+#endif
 
 	purple_prefs_add_none("/purple/media");
 	purple_prefs_add_none("/purple/media/audio");
@@ -304,34 +318,15 @@
 {
 #ifdef USE_VV
 	PurpleMedia *media;
-	FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL));
-	GstStateChangeReturn ret;
 	gboolean signal_ret;
 
-	if (conference == NULL) {
-		purple_conv_present_error(remote_user, account,
-					  _("Error creating conference."));
-		purple_debug_error("media", "Conference == NULL\n");
-		return NULL;
-	}
-
 	media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
 			     "manager", manager,
 			     "account", account,
-			     "conference", conference,
+			     "conference-type", conference_type,
 			     "initiator", initiator,
 			     NULL));
 
-	ret = gst_element_set_state(GST_ELEMENT(conference), GST_STATE_PLAYING);
-
-	if (ret == GST_STATE_CHANGE_FAILURE) {
-		purple_conv_present_error(remote_user, account,
-					  _("Error creating conference."));
-		purple_debug_error("media", "Failed to start conference.\n");
-		g_object_unref(media);
-		return NULL;
-	}
-
 	g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0,
 			media, account, remote_user, &signal_ret);
 
@@ -894,8 +889,17 @@
 		PurpleMediaCaps caps)
 {
 #ifdef USE_VV
+	PurpleMediaCaps oldcaps;
+
 	g_return_if_fail(PURPLE_IS_MEDIA_MANAGER(manager));
+
+	oldcaps = manager->priv->ui_caps;
 	manager->priv->ui_caps = caps;
+
+	if (caps != oldcaps)
+		g_signal_emit(manager,
+				purple_media_manager_signals[UI_CAPS_CHANGED],
+				0, caps, oldcaps);
 #endif
 }
 
@@ -911,6 +915,30 @@
 #endif
 }
 
+void
+purple_media_manager_set_backend_type(PurpleMediaManager *manager,
+		GType backend_type)
+{
+#ifdef USE_VV
+	g_return_if_fail(PURPLE_IS_MEDIA_MANAGER(manager));
+
+	manager->priv->backend_type = backend_type;
+#endif
+}
+
+GType
+purple_media_manager_get_backend_type(PurpleMediaManager *manager)
+{	
+#ifdef USE_VV
+	g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager),
+			PURPLE_MEDIA_CAPS_NONE);
+
+	return manager->priv->backend_type;
+#else
+	return G_TYPE_NONE;
+#endif
+}
+
 #ifdef USE_GSTREAMER
 
 /*
--- a/libpurple/mediamanager.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/mediamanager.h	Thu Feb 18 21:38:43 2010 +0000
@@ -213,6 +213,28 @@
  */
 PurpleMediaCaps purple_media_manager_get_ui_caps(PurpleMediaManager *manager);
 
+/**
+ * Sets which media backend type media objects will use.
+ *
+ * @param manager The manager to set the caps on.
+ * @param backend_type The media backend type to use.
+ *
+ * @since 2.7.0
+ */
+void purple_media_manager_set_backend_type(PurpleMediaManager *manager,
+		GType backend_type);
+
+/**
+ * Gets which media backend type media objects will use.
+ *
+ * @param manager The manager to get the media backend type from.
+ *
+ * @return The type of media backend type media objects will use.
+ *
+ * @since 2.7.0
+ */
+GType purple_media_manager_get_backend_type(PurpleMediaManager *manager);
+
 /*}@*/
 
 #ifdef __cplusplus
--- a/libpurple/network.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/network.c	Thu Feb 18 21:38:43 2010 +0000
@@ -32,6 +32,9 @@
 #include <netinet/in.h>
 #include <net/if.h>
 #include <sys/ioctl.h>
+#ifdef HAVE_GETIFADDRS
+#include <ifaddrs.h>
+#endif
 #else
 #include <nspapi.h>
 #endif
@@ -160,7 +163,7 @@
 	struct ifconf ifc;
 	struct ifreq *ifr;
 	struct sockaddr_in *sinptr;
-	guint32 lhost = htonl(127 * 256 * 256 * 256 + 1);
+	guint32 lhost = htonl((127 << 24) + 1); /* 127.0.0.1 */
 	long unsigned int add;
 	int source = fd;
 
@@ -200,6 +203,85 @@
 	return "0.0.0.0";
 }
 
+GList *
+purple_network_get_all_local_system_ips(void)
+{
+#if defined(HAVE_GETIFADDRS) && defined(HAVE_INET_NTOP)
+	GList *result = NULL;
+	struct ifaddrs *start, *ifa;
+	int ret;
+
+	ret = getifaddrs(&start);
+	if (ret < 0) {
+		purple_debug_warning("network",
+				"getifaddrs() failed: %s\n", g_strerror(errno));
+		return NULL;
+	}
+
+	for (ifa = start; ifa; ifa = ifa->ifa_next) {
+		int family = ifa->ifa_addr ? ifa->ifa_addr->sa_family : AF_UNSPEC;
+		char host[INET6_ADDRSTRLEN];
+		const char *tmp = NULL;
+
+		if ((family != AF_INET && family != AF_INET6) || ifa->ifa_flags & IFF_LOOPBACK)
+			continue;
+
+		if (family == AF_INET)
+			tmp = inet_ntop(family, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, host, sizeof(host));
+		else {
+			struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)ifa->ifa_addr;
+			/* Peer-peer link-local communication is a big TODO.  I am not sure
+			 * how communicating link-local addresses is supposed to work, and
+			 * it seems like it would require attempting the cartesian product
+			 * of the local and remote interfaces to see if any match (eww).
+			 */
+			if (!IN6_IS_ADDR_LINKLOCAL(&sockaddr->sin6_addr))
+				tmp = inet_ntop(family, &sockaddr->sin6_addr, host, sizeof(host));
+		}
+		if (tmp != NULL)
+			result = g_list_prepend(result, g_strdup(tmp));
+	}
+
+	freeifaddrs(start);
+
+	return g_list_reverse(result);
+#else /* HAVE_GETIFADDRS && HAVE_INET_NTOP */
+	GList *result = NULL;
+	int source = socket(PF_INET,SOCK_STREAM, 0);
+	char buffer[1024];
+	char *tmp;
+	struct ifconf ifc;
+	struct ifreq *ifr;
+
+	ifc.ifc_len = sizeof(buffer);
+	ifc.ifc_req = (struct ifreq *)buffer;
+	ioctl(source, SIOCGIFCONF, &ifc);
+	close(source);
+
+	tmp = buffer;
+	while (tmp < buffer + ifc.ifc_len) {
+		char dst[INET_ADDRSTRLEN];
+
+		ifr = (struct ifreq *)tmp;
+		tmp += HX_SIZE_OF_IFREQ(*ifr);
+
+		if (ifr->ifr_addr.sa_family == AF_INET) {
+			struct sockaddr_in *sinptr = (struct sockaddr_in *)&ifr->ifr_addr;
+
+			inet_ntop(AF_INET, &sinptr->sin_addr, dst,
+				sizeof(dst));
+			purple_debug_info("network", 
+				"found local i/f with address %s on IPv4\n", dst);
+			if (!purple_strequal(dst, "127.0.0.1")) {
+				result = g_list_append(result, g_strdup(dst));
+			}
+		}
+	}
+
+	return result;
+#endif /* HAVE_GETIFADDRS && HAVE_INET_NTOP */
+}
+
 const char *
 purple_network_get_my_ip(int fd)
 {
--- a/libpurple/network.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/network.h	Thu Feb 18 21:38:43 2010 +0000
@@ -88,6 +88,17 @@
 const char *purple_network_get_local_system_ip(int fd);
 
 /**
+ * Returns all IP addresses of the local system.
+ *
+ * @note The caller must free this list, this function currently only
+ *       handles IPv4 addresses
+ * @since 2.7.0
+ *
+ * @return A list of local IP addresses.
+ */
+GList *purple_network_get_all_local_system_ips(void);
+
+/**
  * Returns the IP address that should be used anywhere a
  * public IP addresses is needed (listening for an incoming
  * file transfer, etc).
--- a/libpurple/plugin.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/plugin.c	Thu Feb 18 21:38:43 2010 +0000
@@ -254,11 +254,7 @@
 		 *
 		 * G_MODULE_BIND_LOCAL was added in glib 2.3.3.
 		 */
-#if GLIB_CHECK_VERSION(2,3,3)
 		plugin->handle = g_module_open(filename, G_MODULE_BIND_LOCAL);
-#else
-		plugin->handle = g_module_open(filename, 0);
-#endif
 
 		if (plugin->handle == NULL)
 		{
@@ -287,11 +283,7 @@
 				purple_debug_error("plugins", "%s is not loadable: %s\n",
 						 plugin->path, plugin->error);
 			}
-#if GLIB_CHECK_VERSION(2,3,3)
 			plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
-#else
-			plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY);
-#endif
 
 			if (plugin->handle == NULL)
 			{
--- a/libpurple/plugins/autoaccept.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/plugins/autoaccept.c	Thu Feb 18 21:38:43 2010 +0000
@@ -28,13 +28,7 @@
 
 /* System headers */
 #include <glib.h>
-#if GLIB_CHECK_VERSION(2,6,0)
-#	include <glib/gstdio.h>
-#else
-#	include <sys/types.h>
-#	include <sys/stat.h>
-#	define	g_mkdir mkdir
-#endif
+#include <glib/gstdio.h>
 
 /* Purple headers */
 #include <plugin.h>
--- a/libpurple/plugins/perl/perl-common.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/plugins/perl/perl-common.c	Thu Feb 18 21:38:43 2010 +0000
@@ -472,74 +472,74 @@
 }
 
 SV *
-purple_perl_sv_from_vargs(const PurpleValue *value, va_list *args, void ***copy_arg)
+purple_perl_sv_from_vargs(const PurpleValue *value, va_list args, void ***copy_arg)
 {
 	if (purple_value_is_outgoing(value)) {
 		switch (purple_value_get_type(value)) {
 			case PURPLE_TYPE_SUBTYPE:
-				if ((*copy_arg = va_arg(*args, void **)) == NULL)
+				if ((*copy_arg = va_arg(args, void **)) == NULL)
 					return &PL_sv_undef;
 
 				return purple_perl_sv_from_subtype(value, *(void **)*copy_arg);
 
 			case PURPLE_TYPE_BOOLEAN:
-				if ((*copy_arg = (void *)va_arg(*args, gboolean *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, gboolean *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSViv(*(gboolean *)*copy_arg);
 
 			case PURPLE_TYPE_INT:
-				if ((*copy_arg = (void *)va_arg(*args, int *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, int *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSViv(*(int *)*copy_arg);
 
 			case PURPLE_TYPE_UINT:
-				if ((*copy_arg = (void *)va_arg(*args, unsigned int *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, unsigned int *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSVuv(*(unsigned int *)*copy_arg);
 
 			case PURPLE_TYPE_LONG:
-				if ((*copy_arg = (void *)va_arg(*args, long *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, long *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSViv(*(long *)*copy_arg);
 
 			case PURPLE_TYPE_ULONG:
-				if ((*copy_arg = (void *)va_arg(*args,
+				if ((*copy_arg = (void *)va_arg(args,
 												unsigned long *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSVuv(*(unsigned long *)*copy_arg);
 
 			case PURPLE_TYPE_INT64:
-				if ((*copy_arg = (void *)va_arg(*args, gint64 *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, gint64 *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSViv(*(gint64 *)*copy_arg);
 
 			case PURPLE_TYPE_UINT64:
-				if ((*copy_arg = (void *)va_arg(*args, guint64 *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, guint64 *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSVuv(*(guint64 *)*copy_arg);
 
 			case PURPLE_TYPE_STRING:
-				if ((*copy_arg = (void *)va_arg(*args, char **)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, char **)) == NULL)
 					return &PL_sv_undef;
 
 				return newSVGChar(*(char **)*copy_arg);
 
 			case PURPLE_TYPE_POINTER:
-				if ((*copy_arg = va_arg(*args, void **)) == NULL)
+				if ((*copy_arg = va_arg(args, void **)) == NULL)
 					return &PL_sv_undef;
 
 				return newSViv((IV)*(void **)*copy_arg);
 
 			case PURPLE_TYPE_BOXED:
 				/* Uh.. I dunno. Try this? */
-				if ((*copy_arg = va_arg(*args, void **)) == NULL)
+				if ((*copy_arg = va_arg(args, void **)) == NULL)
 					return &PL_sv_undef;
 
 				return sv_2mortal(purple_perl_bless_object(
@@ -553,40 +553,40 @@
 	} else {
 		switch (purple_value_get_type(value)) {
 			case PURPLE_TYPE_SUBTYPE:
-				if ((*copy_arg = va_arg(*args, void *)) == NULL)
+				if ((*copy_arg = va_arg(args, void *)) == NULL)
 					return &PL_sv_undef;
 
 				return purple_perl_sv_from_subtype(value, *copy_arg);
 
 			case PURPLE_TYPE_BOOLEAN:
-				*copy_arg = GINT_TO_POINTER( va_arg(*args, gboolean) );
+				*copy_arg = GINT_TO_POINTER( va_arg(args, gboolean) );
 
 				return newSViv((gboolean)GPOINTER_TO_INT(*copy_arg));
 
 			case PURPLE_TYPE_INT:
-				*copy_arg = GINT_TO_POINTER( va_arg(*args, int) );
+				*copy_arg = GINT_TO_POINTER( va_arg(args, int) );
 
 				return newSViv(GPOINTER_TO_INT(*copy_arg));
 
 			case PURPLE_TYPE_UINT:
-				*copy_arg = GUINT_TO_POINTER(va_arg(*args, unsigned int));
+				*copy_arg = GUINT_TO_POINTER(va_arg(args, unsigned int));
 
 				return newSVuv(GPOINTER_TO_UINT(*copy_arg));
 
 			case PURPLE_TYPE_LONG:
-				*copy_arg = (void *)va_arg(*args, long);
+				*copy_arg = (void *)va_arg(args, long);
 
 				return newSViv((long)*copy_arg);
 
 			case PURPLE_TYPE_ULONG:
-				*copy_arg = (void *)va_arg(*args, unsigned long);
+				*copy_arg = (void *)va_arg(args, unsigned long);
 
 				return newSVuv((unsigned long)*copy_arg);
 
 			case PURPLE_TYPE_INT64:
 #if 0
 				/* XXX This yells and complains. */
-				*copy_arg = va_arg(*args, gint64);
+				*copy_arg = va_arg(args, gint64);
 
 				return newSViv(*copy_arg);
 #endif
@@ -595,27 +595,27 @@
 			case PURPLE_TYPE_UINT64:
 				/* XXX This also yells and complains. */
 #if 0
-				*copy_arg = (void *)va_arg(*args, guint64);
+				*copy_arg = (void *)va_arg(args, guint64);
 
 				return newSVuv(*copy_arg);
 #endif
 				break;
 
 			case PURPLE_TYPE_STRING:
-				if ((*copy_arg = (void *)va_arg(*args, char *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, char *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSVGChar((char *)*copy_arg);
 
 			case PURPLE_TYPE_POINTER:
-				if ((*copy_arg = (void *)va_arg(*args, void *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, void *)) == NULL)
 					return &PL_sv_undef;
 
 				return newSViv((IV)*copy_arg);
 
 			case PURPLE_TYPE_BOXED:
 				/* Uh.. I dunno. Try this? */
-				if ((*copy_arg = (void *)va_arg(*args, void *)) == NULL)
+				if ((*copy_arg = (void *)va_arg(args, void *)) == NULL)
 					return &PL_sv_undef;
 
 				return sv_2mortal(purple_perl_bless_object(*copy_arg,
--- a/libpurple/plugins/perl/perl-common.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/plugins/perl/perl-common.h	Thu Feb 18 21:38:43 2010 +0000
@@ -65,7 +65,7 @@
 #endif
 
 void *purple_perl_data_from_sv(PurpleValue *value, SV *sv);
-SV *purple_perl_sv_from_vargs(const PurpleValue *value, va_list *args,
+SV *purple_perl_sv_from_vargs(const PurpleValue *value, va_list args,
                             void ***copy_arg);
 SV *purple_perl_sv_from_fun(PurplePlugin *plugin, SV *callback);
 #endif /* _PURPLE_PERL_COMMON_H_ */
--- a/libpurple/plugins/perl/perl-handlers.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/plugins/perl/perl-handlers.c	Thu Feb 18 21:38:43 2010 +0000
@@ -298,11 +298,7 @@
 
 	for (i = 0; i < value_count; i++) {
 		sv_args[i] = purple_perl_sv_from_vargs(values[i],
-#ifdef VA_COPY_AS_ARRAY
 		                                       args,
-#else
-		                                       (va_list*)&args,
-#endif
 		                                       &copy_args[i]);
 
 		XPUSHs(sv_args[i]);
--- a/libpurple/plugins/perl/scripts/signals-test.pl	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/plugins/perl/scripts/signals-test.pl	Thu Feb 18 21:38:43 2010 +0000
@@ -44,6 +44,11 @@
 	Purple::Debug::misc("signals test in perl", "$data (" . $account->get_username() . ", $sender, $message, $flags)\n");
 }
 
+sub timeout_cb
+{
+	Purple::Debug::misc("signals test in perl", "timeout elapsed\n");
+}
+
 sub plugin_load
 {
 	my $plugin = shift;
@@ -71,6 +76,9 @@
 					\&conv_received_msg, "received im message");
 	Purple::Signal::connect($conv, "received-chat-msg", $plugin,
 					\&conv_received_msg, "received chat message");
+
+
+	Purple::timeout_add($plugin, 10, \&timeout_cb);
 }
 
 sub plugin_unload
--- a/libpurple/protocols/bonjour/parser.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/bonjour/parser.c	Thu Feb 18 21:38:43 2010 +0000
@@ -102,7 +102,7 @@
 			attrib[attrib_len] = '\0';
 
 			txt = attrib;
-			attrib = purple_unescape_html(txt);
+			attrib = purple_unescape_text(txt);
 			g_free(txt);
 			xmlnode_set_attrib_full(node, name, attrib_ns, prefix, attrib);
 			g_free(attrib);
--- a/libpurple/protocols/jabber/bosh.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/bosh.c	Thu Feb 18 21:38:43 2010 +0000
@@ -476,6 +476,18 @@
 		/* jabber_process_packet might free child */
 		xmlnode *next = child->next;
 		if (child->type == XMLNODE_TYPE_TAG) {
+			const char *xmlns = xmlnode_get_namespace(child);
+			/*
+			 * Workaround for non-compliant servers that don't stamp
+			 * the right xmlns on these packets.  See #11315.
+			 */
+			if ((xmlns == NULL /* shouldn't happen, but is equally wrong */ ||
+					g_str_equal(xmlns, NS_BOSH)) &&
+				(g_str_equal(child->name, "iq") ||
+				 g_str_equal(child->name, "message") ||
+				 g_str_equal(child->name, "presence"))) {
+				xmlnode_set_namespace(child, NS_XMPP_CLIENT);
+			}
 			jabber_process_packet(js, &child);
 		}
 
--- a/libpurple/protocols/jabber/buddy.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Thu Feb 18 21:38:43 2010 +0000
@@ -57,6 +57,36 @@
 	gchar *last_message;
 } JabberBuddyInfo;
 
+static void
+jabber_buddy_resource_free(JabberBuddyResource *jbr)
+{
+	g_return_if_fail(jbr != NULL);
+
+	jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr);
+
+	while(jbr->commands) {
+		JabberAdHocCommands *cmd = jbr->commands->data;
+		g_free(cmd->jid);
+		g_free(cmd->node);
+		g_free(cmd->name);
+		g_free(cmd);
+		jbr->commands = g_list_delete_link(jbr->commands, jbr->commands);
+	}
+
+	while (jbr->caps.exts) {
+		g_free(jbr->caps.exts->data);
+		jbr->caps.exts = g_list_delete_link(jbr->caps.exts, jbr->caps.exts);
+	}
+
+	g_free(jbr->name);
+	g_free(jbr->status);
+	g_free(jbr->thread_id);
+	g_free(jbr->client.name);
+	g_free(jbr->client.version);
+	g_free(jbr->client.os);
+	g_free(jbr);
+}
+
 void jabber_buddy_free(JabberBuddy *jb)
 {
 	g_return_if_fail(jb != NULL);
@@ -91,6 +121,10 @@
 	return jb;
 }
 
+/* Returns -1 if a is a higher priority resource than b, or is
+ * "more available" than b.  0 if they're the same, and 1 if b is
+ * higher priority/more available than a.
+ */
 static gint resource_compare_cb(gconstpointer a, gconstpointer b)
 {
 	const JabberBuddyResource *jbra = a;
@@ -98,9 +132,10 @@
 	JabberBuddyState state_a, state_b;
 
 	if (jbra->priority != jbrb->priority)
-		return jbra->priority > jbrb->priority ? 1 : -1;
+		return jbra->priority > jbrb->priority ? -1 : 1;
 
 	/* Fold the states for easier comparison */
+	/* TODO: Differentiate online/chat and away/dnd? */
 	switch (jbra->state) {
 		case JABBER_BUDDY_STATE_ONLINE:
 		case JABBER_BUDDY_STATE_CHAT:
@@ -146,105 +181,74 @@
 			return 0;
 		else if ((jbra->idle && !jbrb->idle) ||
 				(jbra->idle && jbrb->idle && jbra->idle < jbrb->idle))
-			return -1;
+			return 1;
 		else
-			return 1;
+			return -1;
 	}
 
 	if (state_a == JABBER_BUDDY_STATE_ONLINE)
-		return 1;
+		return -1;
 	else if (state_a == JABBER_BUDDY_STATE_AWAY &&
 				(state_b == JABBER_BUDDY_STATE_XA ||
 				 state_b == JABBER_BUDDY_STATE_UNAVAILABLE ||
 				 state_b == JABBER_BUDDY_STATE_UNKNOWN))
-		return 1;
+		return -1;
 	else if (state_a == JABBER_BUDDY_STATE_XA &&
 				(state_b == JABBER_BUDDY_STATE_UNAVAILABLE ||
 				 state_b == JABBER_BUDDY_STATE_UNKNOWN))
-		return 1;
+		return -1;
 	else if (state_a == JABBER_BUDDY_STATE_UNAVAILABLE &&
 				state_b == JABBER_BUDDY_STATE_UNKNOWN)
-		return 1;
+		return -1;
 
-	return -1;
+	return 1;
 }
 
 JabberBuddyResource *jabber_buddy_find_resource(JabberBuddy *jb,
 		const char *resource)
 {
-	JabberBuddyResource *jbr = NULL;
 	GList *l;
 
-	if(!jb)
+	if (!jb)
 		return NULL;
 
-	for(l = jb->resources; l; l = l->next)
+	if (resource == NULL)
+		return jb->resources ? jb->resources->data : NULL;
+
+	for (l = jb->resources; l; l = l->next)
 	{
-		JabberBuddyResource *tmp = (JabberBuddyResource *) l->data;
-		if (!jbr && !resource) {
-			jbr = tmp;
-		} else if (!resource) {
-			if (resource_compare_cb(tmp, jbr) > 0)
-				jbr = tmp;
-		} else if(tmp->name) {
-			if(!strcmp(tmp->name, resource)) {
-				jbr = tmp;
-				break;
-			}
-		}
+		JabberBuddyResource *jbr = l->data;
+		if (g_str_equal(resource, jbr->name))
+			return jbr;
 	}
 
-	return jbr;
+	return NULL;
 }
 
 JabberBuddyResource *jabber_buddy_track_resource(JabberBuddy *jb, const char *resource,
 		int priority, JabberBuddyState state, const char *status)
 {
+	/* TODO: Optimization: Only reinsert if priority+state changed */
 	JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource);
-	if(!jbr) {
+	if (jbr) {
+		jb->resources = g_list_remove(jb->resources, jbr);
+	} else {
 		jbr = g_new0(JabberBuddyResource, 1);
 		jbr->jb = jb;
 		jbr->name = g_strdup(resource);
 		jbr->capabilities = JABBER_CAP_NONE;
 		jbr->tz_off = PURPLE_NO_TZ_OFF;
-		jb->resources = g_list_append(jb->resources, jbr);
 	}
 	jbr->priority = priority;
 	jbr->state = state;
 	g_free(jbr->status);
 	jbr->status = g_strdup(status);
 
+	jb->resources = g_list_insert_sorted(jb->resources, jbr,
+	                                     resource_compare_cb);
 	return jbr;
 }
 
-void jabber_buddy_resource_free(JabberBuddyResource *jbr)
-{
-	g_return_if_fail(jbr != NULL);
-
-	jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr);
-
-	while(jbr->commands) {
-		JabberAdHocCommands *cmd = jbr->commands->data;
-		g_free(cmd->jid);
-		g_free(cmd->node);
-		g_free(cmd->name);
-		g_free(cmd);
-		jbr->commands = g_list_delete_link(jbr->commands, jbr->commands);
-	}
-
-	if (jbr->caps.exts) {
-		g_list_foreach(jbr->caps.exts, (GFunc)g_free, NULL);
-		g_list_free(jbr->caps.exts);
-	}
-	g_free(jbr->name);
-	g_free(jbr->status);
-	g_free(jbr->thread_id);
-	g_free(jbr->client.name);
-	g_free(jbr->client.version);
-	g_free(jbr->client.os);
-	g_free(jbr);
-}
-
 void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource)
 {
 	JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource);
@@ -797,6 +801,8 @@
 		jbr = jabber_buddy_find_resource(jbi->jb, resource_name);
 		add_jbr_info(jbi, resource_name, jbr);
 	} else {
+		/* TODO: This is in priority-ascending order (lowest prio first), because
+		 * everything is prepended.  Is that ok? */
 		for (resources = jbi->jb->resources; resources; resources = resources->next) {
 			jbr = resources->data;
 
@@ -980,28 +986,25 @@
 	char *text;
 	char *serverside_alias = NULL;
 	xmlnode *vcard;
-	PurpleBuddy *b;
+	PurpleAccount *account;
 	JabberBuddyInfo *jbi = data;
 	PurpleNotifyUserInfo *user_info;
 
-	if(!jbi)
-		return;
+	g_return_if_fail(jbi != NULL);
 
 	jabber_buddy_info_remove_id(jbi, id);
 
-	if(!from)
+	if (type == JABBER_IQ_ERROR) {
+		purple_debug_info("jabber", "Got error response for vCard\n");
+		jabber_buddy_info_show_if_ready(jbi);
 		return;
-
-	if(!jabber_buddy_find(js, from, FALSE))
-		return;
-
-	/* XXX: handle the error case */
+	}
 
 	user_info = jbi->user_info;
-	bare_jid = jabber_get_bare_jid(from);
+	account = purple_connection_get_account(js->gc);
+	bare_jid = jabber_get_bare_jid(from ? from : purple_account_get_username(account));
 
-	b = purple_find_buddy(js->gc->account, bare_jid);
-
+	/* TODO: Is the query xmlns='vcard-temp' version of this still necessary? */
 	if((vcard = xmlnode_get_child(packet, "vCard")) ||
 			(vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
 		xmlnode *child;
@@ -1183,8 +1186,7 @@
 						purple_notify_user_info_add_pair(user_info, (photo ? _("Photo") : _("Logo")), img_text);
 
 						hash = jabber_calculate_data_sha1sum(data, size);
-						purple_buddy_icons_set_for_user(js->gc->account, bare_jid,
-								data, size, hash);
+						purple_buddy_icons_set_for_user(account, bare_jid, data, size, hash);
 						g_free(hash);
 						g_free(img_text);
 					}
@@ -1196,8 +1198,10 @@
 	}
 
 	if (serverside_alias) {
+		PurpleBuddy *b;
 		/* If we found a serverside alias, set it and tell the core */
-		serv_got_alias(js->gc, from, serverside_alias);
+		serv_got_alias(js->gc, bare_jid, serverside_alias);
+		b = purple_find_buddy(account, bare_jid);
 		if (b) {
 			purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", serverside_alias);
 		}
@@ -1363,9 +1367,6 @@
 
 	jabber_buddy_info_remove_id(jbi, id);
 
-	if(!from)
-		return;
-
 	if (type == JABBER_IQ_RESULT) {
 		if((query = xmlnode_get_child(packet, "query"))) {
 			seconds = xmlnode_get_attrib(query, "seconds");
@@ -1587,9 +1588,18 @@
 	jabber_iq_send(iq);
 
 	if (is_bare_jid) {
-		for(resources = jb->resources; resources; resources = resources->next) {
-			JabberBuddyResource *jbr = resources->data;
-			dispatch_queries_for_resource(js, jbi, is_bare_jid, jid, jbr);
+		if (jb->resources) {
+			for(resources = jb->resources; resources; resources = resources->next) {
+				JabberBuddyResource *jbr = resources->data;
+				dispatch_queries_for_resource(js, jbi, is_bare_jid, jid, jbr);
+			}
+		} else {
+			/* user is offline, send a jabber:iq:last to find out last time online */
+			iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
+			xmlnode_set_attrib(iq->node, "to", jid);
+			jabber_iq_set_callback(iq, jabber_last_offline_parse, jbi);
+			jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
+			jabber_iq_send(iq);
 		}
 	} else {
 		JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, slash + 1);
@@ -1601,15 +1611,6 @@
 					"JabberBuddyResource!\n", jid);
 	}
 
-	if (!jb->resources && is_bare_jid) {
-		/* user is offline, send a jabber:iq:last to find out last time online */
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
-		xmlnode_set_attrib(iq->node, "to", jid);
-		jabber_iq_set_callback(iq, jabber_last_offline_parse, jbi);
-		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
-		jabber_iq_send(iq);
-	}
-
 	js->pending_buddy_info_requests = g_slist_prepend(js->pending_buddy_info_requests, jbi);
 	jbi->timeout_handle = purple_timeout_add_seconds(30, jabber_buddy_get_info_timeout, jbi);
 }
@@ -1914,116 +1915,6 @@
 }
 
 
-const char *
-jabber_buddy_state_get_name(JabberBuddyState state)
-{
-	switch(state) {
-		case JABBER_BUDDY_STATE_UNKNOWN:
-			return _("Unknown");
-		case JABBER_BUDDY_STATE_ERROR:
-			return _("Error");
-		case JABBER_BUDDY_STATE_UNAVAILABLE:
-			return _("Offline");
-		case JABBER_BUDDY_STATE_ONLINE:
-			return _("Available");
-		case JABBER_BUDDY_STATE_CHAT:
-			return _("Chatty");
-		case JABBER_BUDDY_STATE_AWAY:
-			return _("Away");
-		case JABBER_BUDDY_STATE_XA:
-			return _("Extended Away");
-		case JABBER_BUDDY_STATE_DND:
-			return _("Do Not Disturb");
-	}
-
-	return _("Unknown");
-}
-
-JabberBuddyState jabber_buddy_status_id_get_state(const char *id) {
-	if(!id)
-		return JABBER_BUDDY_STATE_UNKNOWN;
-	if(!strcmp(id, "available"))
-		return JABBER_BUDDY_STATE_ONLINE;
-	if(!strcmp(id, "freeforchat"))
-		return JABBER_BUDDY_STATE_CHAT;
-	if(!strcmp(id, "away"))
-		return JABBER_BUDDY_STATE_AWAY;
-	if(!strcmp(id, "extended_away"))
-		return JABBER_BUDDY_STATE_XA;
-	if(!strcmp(id, "dnd"))
-		return JABBER_BUDDY_STATE_DND;
-	if(!strcmp(id, "offline"))
-		return JABBER_BUDDY_STATE_UNAVAILABLE;
-	if(!strcmp(id, "error"))
-		return JABBER_BUDDY_STATE_ERROR;
-
-	return JABBER_BUDDY_STATE_UNKNOWN;
-}
-
-const struct {
-	const char *name;
-	JabberBuddyState state;
-} show_state_pairs[] = {
-	{ "available", JABBER_BUDDY_STATE_ONLINE },
-	{ "chat",      JABBER_BUDDY_STATE_CHAT },
-	{ "away",      JABBER_BUDDY_STATE_AWAY },
-	{ "xa",        JABBER_BUDDY_STATE_XA },
-	{ "dnd",       JABBER_BUDDY_STATE_DND },
-	{ "offline",   JABBER_BUDDY_STATE_UNAVAILABLE },
-	{ "error",     JABBER_BUDDY_STATE_ERROR },
-	{ NULL,        JABBER_BUDDY_STATE_UNKNOWN }
-};
-
-JabberBuddyState jabber_buddy_show_get_state(const char *id)
-{
-	int i;
-
-	g_return_val_if_fail(id != NULL, JABBER_BUDDY_STATE_UNKNOWN);
-
-	for (i = 0; show_state_pairs[i].name; ++i)
-		if (g_str_equal(id, show_state_pairs[i].name))
-			return show_state_pairs[i].state;
-
-	purple_debug_warning("jabber", "Invalid value of presence <show/> "
-	                     "attribute: %s\n", id);
-	return JABBER_BUDDY_STATE_UNKNOWN;
-}
-
-const char *
-jabber_buddy_state_get_show(JabberBuddyState state)
-{
-	int i;
-
-	for (i = 0; show_state_pairs[i].name; ++i)
-		if (state == show_state_pairs[i].state)
-			return show_state_pairs[i].name;
-
-/*	purple_debug_warning("jabber", "Unknown buddy state: %d\n", state); */
-	return NULL;
-}
-
-const char *jabber_buddy_state_get_status_id(JabberBuddyState state) {
-	switch(state) {
-		case JABBER_BUDDY_STATE_CHAT:
-			return "freeforchat";
-		case JABBER_BUDDY_STATE_AWAY:
-			return "away";
-		case JABBER_BUDDY_STATE_XA:
-			return "extended_away";
-		case JABBER_BUDDY_STATE_DND:
-			return "dnd";
-		case JABBER_BUDDY_STATE_ONLINE:
-			return "available";
-		case JABBER_BUDDY_STATE_UNKNOWN:
-			return "available";
-		case JABBER_BUDDY_STATE_ERROR:
-			return "error";
-		case JABBER_BUDDY_STATE_UNAVAILABLE:
-			return "offline";
-	}
-	return NULL;
-}
-
 static void user_search_result_add_buddy_cb(PurpleConnection *gc, GList *row, void *user_data)
 {
 	/* XXX find out the jid */
--- a/libpurple/protocols/jabber/buddy.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/buddy.h	Thu Feb 18 21:38:43 2010 +0000
@@ -24,23 +24,20 @@
 #ifndef PURPLE_JABBER_BUDDY_H_
 #define PURPLE_JABBER_BUDDY_H_
 
-typedef enum {
-	JABBER_BUDDY_STATE_UNKNOWN = -2,
-	JABBER_BUDDY_STATE_ERROR = -1,
-	JABBER_BUDDY_STATE_UNAVAILABLE = 0,
-	JABBER_BUDDY_STATE_ONLINE,
-	JABBER_BUDDY_STATE_CHAT,
-	JABBER_BUDDY_STATE_AWAY,
-	JABBER_BUDDY_STATE_XA,
-	JABBER_BUDDY_STATE_DND
-} JabberBuddyState;
-
 typedef struct _JabberBuddy JabberBuddy;
 
 #include "jabber.h"
 #include "caps.h"
+#include "jutil.h"
 
 struct _JabberBuddy {
+	/**
+	 * A sorted list of resources in priority descending order.
+	 * This means that the first resource in the list is the
+	 * "most available" (see resource_compare_cb in buddy.c for
+	 * details).  Don't play with this yourself, let
+	 * jabber_buddy_track_resource and jabber_buddy_remove_resource do it.
+	 */
 	GList *resources;
 	char *error_msg;
 	enum {
@@ -100,7 +97,6 @@
 		const char *resource);
 JabberBuddyResource *jabber_buddy_track_resource(JabberBuddy *jb, const char *resource,
 		int priority, JabberBuddyState state, const char *status);
-void jabber_buddy_resource_free(JabberBuddyResource *jbr);
 void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource);
 void jabber_buddy_get_info(PurpleConnection *gc, const char *who);
 
@@ -110,12 +106,6 @@
 void jabber_setup_set_info(PurplePluginAction *action);
 void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img);
 
-const char *jabber_buddy_state_get_name(JabberBuddyState state);
-const char *jabber_buddy_state_get_status_id(JabberBuddyState state);
-const char *jabber_buddy_state_get_show(JabberBuddyState state);
-JabberBuddyState jabber_buddy_status_id_get_state(const char *id);
-JabberBuddyState jabber_buddy_show_get_state(const char *id);
-
 void jabber_user_search(JabberStream *js, const char *directory);
 void jabber_user_search_begin(PurplePluginAction *);
 
--- a/libpurple/protocols/jabber/chat.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/chat.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1048,7 +1048,8 @@
 	return TRUE;
 }
 
-gboolean jabber_chat_role_user(JabberChat *chat, const char *who, const char *role)
+gboolean jabber_chat_role_user(JabberChat *chat, const char *who,
+                               const char *role, const char *why)
 {
 	char *to;
 	JabberIq *iq;
@@ -1071,6 +1072,10 @@
 	item = xmlnode_new_child(query, "item");
 	xmlnode_set_attrib(item, "nick", jcm->handle);
 	xmlnode_set_attrib(item, "role", role);
+	if (why) {
+		xmlnode *reason = xmlnode_new_child(item, "reason");
+		xmlnode_insert_data(reason, why, -1);
+	}
 
 	jabber_iq_send(iq);
 
@@ -1138,37 +1143,6 @@
 	return TRUE;
 }
 
-gboolean jabber_chat_kick_user(JabberChat *chat, const char *who, const char *why)
-{
-	JabberIq *iq;
-	JabberChatMember *jcm = g_hash_table_lookup(chat->members, who);
-	char *to;
-	xmlnode *query, *item, *reason;
-
-	if(!jcm || !jcm->jid)
-		return FALSE;
-
-	iq = jabber_iq_new_query(chat->js, JABBER_IQ_SET,
-			"http://jabber.org/protocol/muc#admin");
-
-	to = g_strdup_printf("%s@%s", chat->room, chat->server);
-	xmlnode_set_attrib(iq->node, "to", to);
-	g_free(to);
-
-	query = xmlnode_get_child(iq->node, "query");
-	item = xmlnode_new_child(query, "item");
-	xmlnode_set_attrib(item, "jid", jcm->jid);
-	xmlnode_set_attrib(item, "role", "none");
-	if(why) {
-		reason = xmlnode_new_child(item, "reason");
-		xmlnode_insert_data(reason, why, -1);
-	}
-
-	jabber_iq_send(iq);
-
-	return TRUE;
-}
-
 static void jabber_chat_disco_traffic_cb(JabberStream *js, const char *from,
                                          JabberIqType type, const char *id,
                                          xmlnode *packet, gpointer data)
--- a/libpurple/protocols/jabber/chat.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/chat.h	Thu Feb 18 21:38:43 2010 +0000
@@ -100,7 +100,7 @@
 		const char *affiliation);
 gboolean jabber_chat_affiliation_list(JabberChat *chat, const char *affiliation);
 gboolean jabber_chat_role_user(JabberChat *chat, const char *who,
-		const char *role);
+		const char *role, const char *why);
 gboolean jabber_chat_role_list(JabberChat *chat, const char *role);
 gboolean jabber_chat_kick_user(JabberChat *chat, const char *who,
 		const char *why);
--- a/libpurple/protocols/jabber/google.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/google.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1407,7 +1407,7 @@
 	JabberStream *js;
 	JabberChat *chat;
 	gchar *room;
-	guint32 tmp, a, b;
+	gchar *uuid = purple_uuid_random();
 
 	g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
 
@@ -1416,26 +1416,14 @@
 	g_return_if_fail(gc != NULL);
 	js = purple_connection_get_protocol_data(gc);
 
-	/* Generate a version 4 UUID */
-	tmp = g_random_int();
-	a = 0x4000 | (tmp & 0xFFF); /* 0x4000 to 0x4FFF */
-	tmp >>= 12;
-	b = ((1 << 3) << 12) | (tmp & 0x3FFF); /* 0x8000 to 0xBFFF */
-
-	tmp = g_random_int();
-	room = g_strdup_printf("private-chat-%08x-%04x-%04x-%04x-%04x%08x",
-			g_random_int(),
-			tmp & 0xFFFF,
-			a,
-			b,
-			(tmp >> 16) & 0xFFFF, g_random_int());
-
+	room = g_strdup_printf("private-chat-%s", uuid);	
 	chat = jabber_join_chat(js, room, GOOGLE_GROUPCHAT_SERVER, js->user->node,
 	                        NULL, NULL);
 	if (chat) {
 		chat->muc = TRUE;
-		jabber_chat_invite(gc, chat->id, "", buddy->name);
+		jabber_chat_invite(gc, chat->id, "", purple_buddy_get_name(buddy));
 	}
 
 	g_free(room);
+	g_free(uuid);
 }
--- a/libpurple/protocols/jabber/iq.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/iq.c	Thu Feb 18 21:38:43 2010 +0000
@@ -43,8 +43,8 @@
 #include "utsname.h"
 #endif
 
-GHashTable *iq_handlers = NULL;
-GHashTable *signal_iq_handlers = NULL;
+static GHashTable *iq_handlers = NULL;
+static GHashTable *signal_iq_handlers = NULL;
 
 JabberIq *jabber_iq_new(JabberStream *js, JabberIqType type)
 {
@@ -379,7 +379,7 @@
 		}
 	}
 
-	purple_debug_info("jabber", "jabber_iq_parse\n");
+	purple_debug_misc("jabber", "Unhandled IQ with id %s\n", id);
 
 	/* If we get here, send the default error reply mandated by XMPP-CORE */
 	if(type == JABBER_IQ_SET || type == JABBER_IQ_GET) {
--- a/libpurple/protocols/jabber/jabber.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Thu Feb 18 21:38:43 2010 +0000
@@ -952,6 +952,10 @@
 	if (js == NULL)
 		return;
 
+	/* TODO: Remove this at some point.  Added 2010-02-14 (v2.6.6) */
+	if (g_str_equal("proxy.jabber.org", purple_account_get_string(account, "ft_proxies", "")))
+		purple_account_set_string(account, "ft_proxies", JABBER_DEFAULT_FT_PROXIES);
+
 	/*
 	 * Calculate the avatar hash for our current image so we know (when we
 	 * fetch our vCard and PEP avatar) if we should send our avatar to the
@@ -2739,9 +2743,10 @@
 		char **nicks = g_strsplit(args[1], " ", -1);
 
 		for (i = 0; nicks[i]; i++)
-			if (!jabber_chat_role_user(chat, nicks[i], args[0])) {
+			if (!jabber_chat_role_user(chat, nicks[i], args[0], NULL)) {
 				*error = g_strdup_printf(_("Unable to set role \"%s\" for user: %s"),
 										 args[0], nicks[i]);
+				g_strfreev(nicks);
 				return PURPLE_CMD_RET_FAILED;
 			}
 
@@ -2796,7 +2801,7 @@
 	if(!chat || !args || !args[0])
 		return PURPLE_CMD_RET_FAILED;
 
-	if(!jabber_chat_kick_user(chat, args[0], args[1])) {
+	if(!jabber_chat_role_user(chat, args[0], "none", args[1])) {
 		*error = g_strdup_printf(_("Unable to kick user %s"), args[0]);
 		return PURPLE_CMD_RET_FAILED;
 	}
@@ -2898,6 +2903,11 @@
 {
 	JabberStream *js = conv->account->gc->proto_data;
 	const gchar *who;
+	gchar *description;
+	PurpleBuddy *buddy;
+	const char *alias;
+	PurpleAttentionType *attn = 
+		purple_get_attention_type_from_code(conv->account, 0);
 
 	if (!args || !args[0]) {
 		/* use the buddy from conversation, if it's a one-to-one conversation */
@@ -2910,27 +2920,18 @@
 		who = args[0];
 	}
 
-	if (_jabber_send_buzz(js, who, error)) {
-		const gchar *alias;
-		gchar *str;
-		PurpleBuddy *buddy =
-			purple_find_buddy(purple_connection_get_account(conv->account->gc),
-				who);
-
-		if (buddy != NULL)
-			alias = purple_buddy_get_contact_alias(buddy);
-		else
-			alias = who;
-
-		str = g_strdup_printf(_("Buzzing %s..."), alias);
-		purple_conversation_write(conv, NULL, str,
-			PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, time(NULL));
-		g_free(str);
-
-		return PURPLE_CMD_RET_OK;
-	} else {
-		return PURPLE_CMD_RET_FAILED;
-	}
+	buddy = purple_find_buddy(conv->account, who);
+	if (buddy != NULL)
+		alias = purple_buddy_get_contact_alias(buddy);
+	else
+		alias = who;
+	
+	description = 
+		g_strdup_printf(purple_attention_type_get_outgoing_desc(attn), alias);
+	purple_conversation_write(conv, NULL, description, 
+		PURPLE_MESSAGE_NOTIFY | PURPLE_MESSAGE_SYSTEM, time(NULL));
+	g_free(description);
+	return _jabber_send_buzz(js, who, error)  ? PURPLE_CMD_RET_OK : PURPLE_CMD_RET_FAILED;
 }
 
 GList *jabber_attention_types(PurpleAccount *account)
@@ -3168,8 +3169,9 @@
 			purple_account_get_connection(account)->proto_data;
 	JabberBuddy *jb;
 	JabberBuddyResource *jbr;
-	PurpleMediaCaps caps = PURPLE_MEDIA_CAPS_NONE;
+	PurpleMediaCaps total = PURPLE_MEDIA_CAPS_NONE;
 	gchar *resource;
+	GList *specific = NULL, *l;
 
 	if (!js) {
 		purple_debug_info("jabber",
@@ -3177,20 +3179,37 @@
 		return FALSE;
 	}
 
-	if ((resource = jabber_get_resource(who)) != NULL) {
+	jb = jabber_buddy_find(js, who, FALSE);
+
+	if (!jb || !jb->resources) {
+		/* no resources online, we're trying to get caps for someone
+		 * whose presence we're not subscribed to, or
+		 * someone who is offline. */
+		return total;
+
+	} else if ((resource = jabber_get_resource(who)) != NULL) {
 		/* they've specified a resource, no need to ask or
 		 * default or anything, just do it */
-
-		jb = jabber_buddy_find(js, who, FALSE);
 		jbr = jabber_buddy_find_resource(jb, resource);
 		g_free(resource);
 
 		if (!jbr) {
 			purple_debug_error("jabber", "jabber_get_media_caps:"
 					" Can't find resource %s\n", who);
-			return caps;
+			return total;
 		}
 
+		l = specific = g_list_prepend(specific, jbr);
+
+	} else {
+		/* we've got multiple resources, combine their caps */
+		l = jb->resources;
+	}
+
+	for (; l; l = l->next) {
+		PurpleMediaCaps caps = PURPLE_MEDIA_CAPS_NONE;
+		jbr = l->data;
+
 		if (jabber_resource_has_capability(jbr,
 				JINGLE_APP_RTP_SUPPORT_AUDIO))
 			caps |= PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION |
@@ -3219,38 +3238,15 @@
 			if (jabber_resource_has_capability(jbr, NS_GOOGLE_VIDEO))
 				caps |= PURPLE_MEDIA_CAPS_AUDIO_VIDEO;
 		}
-		return caps;
+
+		total |= caps;
 	}
 
-	jb = jabber_buddy_find(js, who, FALSE);
-
-	if(!jb || !jb->resources) {
-		/* no resources online, we're trying to get caps for someone
-		 * whose presence we're not subscribed to, or
-		 * someone who is offline. */
-		return caps;
-	} else if(!jb->resources->next) {
-		/* only 1 resource online (probably our most common case) */
-		gchar *name;
-		jbr = jb->resources->data;
-		name = g_strdup_printf("%s/%s", who, jbr->name);
-		caps = jabber_get_media_caps(account, name);
-		g_free(name);
-	} else {
-		/* we've got multiple resources, combine their caps */
-		GList *l;
-
-		for(l = jb->resources; l; l = l->next)
-		{
-			gchar *name;
-			jbr = l->data;
-			name = g_strdup_printf("%s/%s", who, jbr->name);
-			caps |= jabber_get_media_caps(account, name);
-			g_free(name);
-		}
+	if (specific) {
+		g_list_free(specific);
 	}
 
-	return caps;
+	return total;
 #else
 	return PURPLE_MEDIA_CAPS_NONE;
 #endif
@@ -3542,6 +3538,9 @@
 	jabber_add_feature(JINGLE_APP_RTP_SUPPORT_VIDEO, jabber_video_enabled);
 	jabber_add_feature(JINGLE_TRANSPORT_RAWUDP, 0);
 	jabber_add_feature(JINGLE_TRANSPORT_ICEUDP, 0);
+
+	g_signal_connect(G_OBJECT(purple_media_manager_get()), "ui-caps-changed",
+			G_CALLBACK(jabber_caps_broadcast_change), NULL);
 #endif
 
 	jabber_auth_init();
--- a/libpurple/protocols/jabber/jabber.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/jabber.h	Thu Feb 18 21:38:43 2010 +0000
@@ -81,6 +81,7 @@
 #define CAPS0115_NODE "http://pidgin.im/"
 
 #define JABBER_DEFAULT_REQUIRE_TLS    TRUE
+#define JABBER_DEFAULT_FT_PROXIES     "proxy.eu.jabber.org"
 
 /* Index into attention_types list */
 #define JABBER_BUZZ 0
--- a/libpurple/protocols/jabber/jingle/rtp.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/jingle/rtp.c	Thu Feb 18 21:38:43 2010 +0000
@@ -468,13 +468,22 @@
 
 	g_return_if_fail(JINGLE_IS_SESSION(session));
 
-	if (type == PURPLE_MEDIA_INFO_HANGUP) {
+	if (type == PURPLE_MEDIA_INFO_HANGUP ||
+			type == PURPLE_MEDIA_INFO_REJECT) {
 		jabber_iq_send(jingle_session_terminate_packet(
-				session, "success"));
-		g_object_unref(session);
-	} else if (type == PURPLE_MEDIA_INFO_REJECT) {
-		jabber_iq_send(jingle_session_terminate_packet(
-				session, "decline"));
+				session, type == PURPLE_MEDIA_INFO_HANGUP ?
+				"success" : "decline"));
+
+		g_signal_handlers_disconnect_by_func(G_OBJECT(media),
+				G_CALLBACK(jingle_rtp_state_changed_cb),
+				session);
+		g_signal_handlers_disconnect_by_func(G_OBJECT(media),
+				G_CALLBACK(jingle_rtp_stream_info_cb),
+				session);
+		g_signal_handlers_disconnect_by_func(G_OBJECT(media),
+				G_CALLBACK(jingle_rtp_new_candidate_cb),
+				session);
+
 		g_object_unref(session);
 	} else if (type == PURPLE_MEDIA_INFO_ACCEPT &&
 			jingle_session_is_initiator(session) == FALSE) {
--- a/libpurple/protocols/jabber/jingle/session.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/jingle/session.c	Thu Feb 18 21:38:43 2010 +0000
@@ -371,7 +371,6 @@
 	return session;
 }
 
-#if GLIB_CHECK_VERSION(2,4,0)
 static gboolean find_by_jid_ghr(gpointer key,
 		gpointer value, gpointer user_data)
 {
@@ -391,58 +390,12 @@
 	return FALSE;
 }
 
-#else /* GLIB_CHECK_VERSION 2.4.0 */
-
-/* Ugly code; g_hash_table_find version above is much nicer */
-struct session_find_jid
-{
-	const gchar *jid;
-	JingleSession *ret;
-	gboolean use_bare;
-};
-
-static void find_by_jid_ghr(gpointer key, gpointer value, gpointer user_data)
-{
-	JingleSession *session = (JingleSession *)value;
-	struct session_find_jid *data = user_data;
-	gchar *remote_jid;
-	gchar *cmp_jid;
-
-	if (data->ret != NULL)
-		return;
-
-	remote_jid = jingle_session_get_remote_jid(session);
-	cmp_jid = data->use_bare ? jabber_get_bare_jid(remote_jid)
-				: g_strdup(remote_jid);
-	g_free(remote_jid);
-
-	if (g_str_equal(data->jid, cmp_jid))
-		data->ret = session;
-
-	g_free(cmp_jid);
-}
-#endif /* GLIB_CHECK_VERSION 2.4.0 */
-
 JingleSession *
 jingle_session_find_by_jid(JabberStream *js, const gchar *jid)
 {
-#if GLIB_CHECK_VERSION(2,4,0)
 	return js->sessions != NULL ?
 			g_hash_table_find(js->sessions,
 			find_by_jid_ghr, (gpointer)jid) : NULL; 
-#else
-	struct session_find_jid data;
-
-	if (js->sessions == NULL)
-		return NULL;
-
-	data.jid = jid;
-	data.ret = NULL;
-	data.use_bare = strchr(jid, '/') == NULL;
-
-	g_hash_table_foreach(js->sessions, find_by_jid_ghr, &data);
-	return data.ret;
-#endif
 }
 
 static xmlnode *
--- a/libpurple/protocols/jabber/jutil.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/jutil.c	Thu Feb 18 21:38:43 2010 +0000
@@ -651,21 +651,79 @@
 	return equal;
 }
 
-PurpleConversation *
-jabber_find_unnormalized_conv(const char *name, PurpleAccount *account)
+static const struct {
+		const char *status_id; /* link to core */
+		const char *show; /* The show child's cdata in a presence stanza */
+		const char *readable; /* readable representation */
+		JabberBuddyState state;
+} jabber_statuses[] = {
+	{ "offline",       NULL,   N_("Offline"),        JABBER_BUDDY_STATE_UNAVAILABLE },
+	{ "available",     NULL,   N_("Available"),      JABBER_BUDDY_STATE_ONLINE},
+	{ "freeforchat",   "chat", N_("Chatty"),         JABBER_BUDDY_STATE_CHAT },
+	{ "away",          "away", N_("Away"),           JABBER_BUDDY_STATE_AWAY },
+	{ "extended_away", "xa",   N_("Extended Away"),  JABBER_BUDDY_STATE_XA },
+	{ "dnd",           "dnd",  N_("Do Not Disturb"), JABBER_BUDDY_STATE_DND },
+	{ "error",         NULL,   N_("Error"),          JABBER_BUDDY_STATE_ERROR }
+};
+
+const char *
+jabber_buddy_state_get_name(const JabberBuddyState state)
 {
-	PurpleConversation *c = NULL;
-	GList *cnv;
+	int i;
+	for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
+		if (jabber_statuses[i].state == state)
+			return _(jabber_statuses[i].readable);
+
+	return _("Unknown");
+}
 
-	g_return_val_if_fail(name != NULL, NULL);
+JabberBuddyState
+jabber_buddy_status_id_get_state(const char *id)
+{
+	int i;
+	if (!id)
+		return JABBER_BUDDY_STATE_UNKNOWN;
+
+	for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
+		if (g_str_equal(id, jabber_statuses[i].status_id))
+			return jabber_statuses[i].state;
 
-	for(cnv = purple_get_conversations(); cnv; cnv = cnv->next) {
-		c = (PurpleConversation*)cnv->data;
-		if(purple_conversation_get_type(c) == PURPLE_CONV_TYPE_IM &&
-				!purple_utf8_strcasecmp(name, purple_conversation_get_name(c)) &&
-				account == purple_conversation_get_account(c))
-			return c;
-	}
+	return JABBER_BUDDY_STATE_UNKNOWN;
+}
+
+JabberBuddyState jabber_buddy_show_get_state(const char *id)
+{
+	int i;
+
+	g_return_val_if_fail(id != NULL, JABBER_BUDDY_STATE_UNKNOWN);
+
+	for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
+		if (jabber_statuses[i].show && g_str_equal(id, jabber_statuses[i].show))
+			return jabber_statuses[i].state;
+
+	purple_debug_warning("jabber", "Invalid value of presence <show/> "
+	                     "attribute: %s\n", id);
+	return JABBER_BUDDY_STATE_UNKNOWN;
+}
+
+const char *
+jabber_buddy_state_get_show(JabberBuddyState state)
+{
+	int i;
+	for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
+		if (state == jabber_statuses[i].state)
+			return jabber_statuses[i].show;
+
+	return NULL;
+}
+
+const char *
+jabber_buddy_state_get_status_id(JabberBuddyState state)
+{
+	int i;
+	for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
+		if (state == jabber_statuses[i].state)
+			return jabber_statuses[i].status_id;
 
 	return NULL;
 }
--- a/libpurple/protocols/jabber/jutil.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/jutil.h	Thu Feb 18 21:38:43 2010 +0000
@@ -30,6 +30,17 @@
 	char *resource;
 } JabberID;
 
+typedef enum {
+	JABBER_BUDDY_STATE_UNKNOWN = -2,
+	JABBER_BUDDY_STATE_ERROR = -1,
+	JABBER_BUDDY_STATE_UNAVAILABLE = 0,
+	JABBER_BUDDY_STATE_ONLINE,
+	JABBER_BUDDY_STATE_CHAT,
+	JABBER_BUDDY_STATE_AWAY,
+	JABBER_BUDDY_STATE_XA,
+	JABBER_BUDDY_STATE_DND
+} JabberBuddyState;
+
 #include "jabber.h"
 
 JabberID* jabber_id_new(const char *str);
@@ -63,7 +74,16 @@
  */
 char *jabber_saslprep(const char *);
 
-PurpleConversation *jabber_find_unnormalized_conv(const char *name, PurpleAccount *account);
+/* state -> readable name */
+const char *jabber_buddy_state_get_name(JabberBuddyState state);
+/* state -> core id */
+const char *jabber_buddy_state_get_status_id(JabberBuddyState state);
+/* state -> show attr (for presence stanza) */
+const char *jabber_buddy_state_get_show(JabberBuddyState state);
+/* core id -> state */
+JabberBuddyState jabber_buddy_status_id_get_state(const char *id);
+/* show attr (presence stanza) -> state */
+JabberBuddyState jabber_buddy_show_get_state(const char *id);
 
 char *jabber_calculate_data_sha1sum(gconstpointer data, size_t len);
 #endif /* PURPLE_JABBER_JUTIL_H_ */
--- a/libpurple/protocols/jabber/libxmpp.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/libxmpp.c	Thu Feb 18 21:38:43 2010 +0000
@@ -385,7 +385,7 @@
 						  "ft_proxies",
 						/* TODO: Is this an acceptable default?
 						 * Also, keep this in sync as they add more servers */
-						  "proxy.eu.jabber.org");
+						  JABBER_DEFAULT_FT_PROXIES);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
 						  option);
 
--- a/libpurple/protocols/jabber/message.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/message.c	Thu Feb 18 21:38:43 2010 +0000
@@ -59,33 +59,37 @@
 static void handle_chat(JabberMessage *jm)
 {
 	JabberID *jid = jabber_id_new(jm->from);
-	char *from;
 
+	PurpleConnection *gc;
+	PurpleAccount *account;
 	JabberBuddy *jb;
 	JabberBuddyResource *jbr;
 
 	if(!jid)
 		return;
 
+	gc = jm->js->gc;
+	account = purple_connection_get_account(gc);
+
 	jb = jabber_buddy_find(jm->js, jm->from, TRUE);
 	jbr = jabber_buddy_find_resource(jb, jid->resource);
 
-	if(jabber_find_unnormalized_conv(jm->from, jm->js->gc->account)) {
-		from = g_strdup(jm->from);
-	} else  if(jid->node) {
-		if(jid->resource) {
-			PurpleConversation *conv;
+	if (jid->resource) {
+		/*
+		 * We received a message from a specific resource, so we probably want a
+		 * reply to go to this specific resource (i.e. bind/lock the
+		 * conversation to this resource).
+		 *
+		 * This works because purple_conv_im_send gets the name from
+		 * purple_conversation_get_name()
+		 */
+		PurpleConversation *conv;
 
-			from = g_strdup_printf("%s@%s", jid->node, jid->domain);
-			conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, jm->js->gc->account);
-			if(conv) {
-				purple_conversation_set_name(conv, jm->from);
-				}
-			g_free(from);
+		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, jm->from, account);
+		if (conv && !g_str_equal(jm->from, purple_conversation_get_name(conv))) {
+			purple_debug_info("jabber", "Binding conversation to %s\n", jm->from);
+			purple_conversation_set_name(conv, jm->from);
 		}
-		from = g_strdup(jm->from);
-	} else {
-		from = g_strdup(jid->domain);
 	}
 
 	if(!jm->xhtml && !jm->body) {
@@ -97,19 +101,19 @@
 		}
 
 		if(JM_STATE_COMPOSING == jm->chat_state) {
-			serv_got_typing(jm->js->gc, from, 0, PURPLE_TYPING);
+			serv_got_typing(gc, jm->from, 0, PURPLE_TYPING);
 		} else if(JM_STATE_PAUSED == jm->chat_state) {
-			serv_got_typing(jm->js->gc, from, 0, PURPLE_TYPED);
+			serv_got_typing(gc, jm->from, 0, PURPLE_TYPED);
 		} else if(JM_STATE_GONE == jm->chat_state) {
 			PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
-					from, jm->js->gc->account);
+					jm->from, account);
 			if (conv && jid->node && jid->domain) {
 				char buf[256];
 				PurpleBuddy *buddy;
 
 				g_snprintf(buf, sizeof(buf), "%s@%s", jid->node, jid->domain);
 
-				if ((buddy = purple_find_buddy(jm->js->gc->account, buf))) {
+				if ((buddy = purple_find_buddy(account, buf))) {
 					const char *who;
 					char *escaped;
 
@@ -127,10 +131,10 @@
 					                        PURPLE_MESSAGE_SYSTEM, time(NULL));
 				}
 			}
-			serv_got_typing_stopped(jm->js->gc, from);
+			serv_got_typing_stopped(gc, jm->from);
 
 		} else {
-			serv_got_typing_stopped(jm->js->gc, from);
+			serv_got_typing_stopped(gc, jm->from);
 		}
 	} else {
 		if(jbr) {
@@ -149,12 +153,9 @@
 			jm->body = jabber_google_format_to_html(jm->body);
 			g_free(tmp);
 		}
-		serv_got_im(jm->js->gc, from, jm->xhtml ? jm->xhtml : jm->body, 0,
-				jm->sent);
+		serv_got_im(gc, jm->from, jm->xhtml ? jm->xhtml : jm->body, 0, jm->sent);
 	}
 
-
-	g_free(from);
 	jabber_id_free(jid);
 }
 
@@ -929,20 +930,13 @@
 }
 
 static gboolean
-jabber_conv_support_custom_smileys(const PurpleConnection *gc,
+jabber_conv_support_custom_smileys(JabberStream *js,
 								   PurpleConversation *conv,
 								   const gchar *who)
 {
-	JabberStream *js = (JabberStream *) gc->proto_data;
 	JabberBuddy *jb;
 	JabberChat *chat;
 
-	if (!js) {
-		purple_debug_error("jabber",
-			"jabber_conv_support_custom_smileys: could not find stream\n");
-		return FALSE;
-	}
-
 	switch (purple_conversation_get_type(conv)) {
 		case PURPLE_CONV_TYPE_IM:
 			jb = jabber_buddy_find(js, who, FALSE);
@@ -978,7 +972,7 @@
 		purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, jm->to,
 			account);
 
-	if (jabber_conv_support_custom_smileys(jm->js->gc, conv, jm->to)) {
+	if (jabber_conv_support_custom_smileys(jm->js, conv, jm->to)) {
 		GList *found_smileys = jabber_message_xhtml_find_smileys(xhtml);
 
 		if (found_smileys) {
--- a/libpurple/protocols/jabber/parser.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/parser.c	Thu Feb 18 21:38:43 2010 +0000
@@ -89,7 +89,7 @@
 			char *attrib = g_strndup((gchar *)attributes[i+3], attrib_len);
 
 			txt = attrib;
-			attrib = purple_unescape_html(txt);
+			attrib = purple_unescape_text(txt);
 			g_free(txt);
 			xmlnode_set_attrib_full(node, name, attrib_ns, prefix, attrib);
 			g_free(attrib);
--- a/libpurple/protocols/jabber/presence.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/presence.c	Thu Feb 18 21:38:43 2010 +0000
@@ -66,7 +66,12 @@
 {
 	PurpleAccount *account;
 	PurplePresence *presence;
+	JabberBuddy *jb;
+	JabberBuddyResource *jbr;
 	const char *username;
+	JabberBuddyState state;
+	char *msg;
+	int priority;
 
 	g_return_if_fail(js->user != NULL);
 
@@ -75,29 +80,27 @@
 	presence = purple_account_get_presence(account);
 	if (status == NULL)
 		status = purple_presence_get_active_status(presence);
+	purple_status_to_jabber(status, &state, &msg, &priority);
 
-	if (purple_find_buddy(account, username)) {
-		JabberBuddy *jb = jabber_buddy_find(js, username, TRUE);
-		JabberBuddyResource *jbr;
-		JabberBuddyState state;
-		char *msg;
-		int priority;
-
-		g_return_if_fail(jb != NULL);
-
-		purple_status_to_jabber(status, &state, &msg, &priority);
+	jb = js->user_jb;
 
-		if (state == JABBER_BUDDY_STATE_UNAVAILABLE ||
-				state == JABBER_BUDDY_STATE_UNKNOWN) {
-			jabber_buddy_remove_resource(jb, js->user->resource);
-		} else {
-			jbr = jabber_buddy_track_resource(jb, js->user->resource, priority,
-					state, msg);
-			jbr->idle = purple_presence_is_idle(presence) ?
-					purple_presence_get_idle_time(presence) : 0;
-		}
+	if (state == JABBER_BUDDY_STATE_UNAVAILABLE ||
+			state == JABBER_BUDDY_STATE_UNKNOWN) {
+		jabber_buddy_remove_resource(jb, js->user->resource);
+	} else {
+		jbr = jabber_buddy_track_resource(jb, js->user->resource, priority,
+				state, msg);
+		jbr->idle = purple_presence_is_idle(presence) ?
+				purple_presence_get_idle_time(presence) : 0;
+	}
 
-		if ((jbr = jabber_buddy_find_resource(jb, NULL))) {
+	/*
+	 * While we need to track the status of this resource, the core
+	 * only cares if we're on our own buddy list.
+	 */
+	if (purple_find_buddy(account, username)) {
+		jbr = jabber_buddy_find_resource(jb, NULL);
+		if (jbr) {
 			purple_prpl_got_user_status(account, username,
 					jabber_buddy_state_get_status_id(jbr->state),
 					"priority", jbr->priority,
@@ -109,8 +112,8 @@
 					msg ? "message" : NULL, msg,
 					NULL);
 		}
-		g_free(msg);
 	}
+	g_free(msg);
 }
 
 void jabber_set_status(PurpleAccount *account, PurpleStatus *status)
@@ -468,6 +471,10 @@
 	jbr->caps.info = info;
 	jbr->caps.exts = exts;
 
+	purple_prpl_got_media_caps(
+			purple_connection_get_account(userdata->js->gc),
+			userdata->from);
+
 	if (info == NULL)
 		goto out;
 
@@ -512,6 +519,7 @@
 	PurpleConvChatBuddyFlags flags = PURPLE_CBFLAGS_NONE;
 	gboolean delayed = FALSE;
 	const gchar *stamp = NULL; /* from <delayed/> element */
+	PurpleAccount *account;
 	PurpleBuddy *b = NULL;
 	char *buddy_name;
 	JabberBuddyState state = JABBER_BUDDY_STATE_UNKNOWN;
@@ -533,6 +541,8 @@
 	if (signal_return)
 		return;
 
+	account = purple_connection_get_account(js->gc);
+
 	jid = jabber_id_new(from);
 	if (jid == NULL) {
 		purple_debug_error("jabber", "Ignoring presence with malformed 'from' "
@@ -569,12 +579,10 @@
 	} else if (g_str_equal(type, "subscribe")) {
 		struct _jabber_add_permit *jap = g_new0(struct _jabber_add_permit, 1);
 		gboolean onlist = FALSE;
-		PurpleAccount *account;
 		PurpleBuddy *buddy;
 		JabberBuddy *jb = NULL;
 		xmlnode *nick;
 
-		account = purple_connection_get_account(js->gc);
 		buddy = purple_find_buddy(account, from);
 		nick = xmlnode_get_child_with_namespace(packet, "nick", "http://jabber.org/protocol/nick");
 		if (nick)
@@ -685,6 +693,7 @@
 		idle += offset;
 	}
 
+	/* DEALING WITH CHATS */
 	if(jid->node && (chat = jabber_chat_find(js, jid->node, jid->domain))) {
 		static int i = 1;
 
@@ -758,7 +767,7 @@
 											" you like to configure it, or"
 											" accept the default settings?"),
 										/* Default Action */ 1,
-										purple_connection_get_account(js->gc), NULL, chat->conv,
+										account, NULL, chat->conv,
 										chat, 2,
 										_("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure),
 										_("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room));
@@ -964,13 +973,31 @@
 			g_free(nickname);
 			g_return_if_reached();
 		}
+		/* End of DEALING WITH CHATS...about 5000 lines ago */
 	} else {
+		/* DEALING WITH CONTACT (i.e. not a chat) */
+		PurpleConversation *conv;
+
 		buddy_name = g_strdup_printf("%s%s%s", jid->node ? jid->node : "",
 									 jid->node ? "@" : "", jid->domain);
-		if((b = purple_find_buddy(js->gc->account, buddy_name)) == NULL) {
+
+		/*
+		 * Unbind/unlock from sending messages to a specific resource on
+		 * presence changes.  This is locked to a specific resource when
+		 * receiving a message (in message.c).
+		 */
+		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
+				buddy_name, account);
+		if (conv) {
+			purple_debug_info("jabber", "Changed conversation binding from %s to %s\n",
+					purple_conversation_get_name(conv), buddy_name);
+			purple_conversation_set_name(conv, buddy_name);
+		}
+
+		if((b = purple_find_buddy(account, buddy_name)) == NULL) {
 			if (jb != js->user_jb) {
 				purple_debug_warning("jabber", "Got presence for unknown buddy %s on account %s (%p)\n",
-									 buddy_name, purple_account_get_username(js->gc->account), js->gc->account);
+									 buddy_name, purple_account_get_username(account), account);
 				jabber_id_free(jid);
 				g_free(avatar_hash);
 				g_free(buddy_name);
@@ -1011,12 +1038,7 @@
 		if(state == JABBER_BUDDY_STATE_ERROR ||
 				(type && (g_str_equal(type, "unavailable") ||
 				          g_str_equal(type, "unsubscribed")))) {
-			PurpleConversation *conv;
-
 			jabber_buddy_remove_resource(jb, jid->resource);
-			if((conv = jabber_find_unnormalized_conv(from, js->gc->account)))
-				purple_conversation_set_name(conv, buddy_name);
-
 		} else {
 			jbr = jabber_buddy_track_resource(jb, jid->resource, priority,
 					state, status);
@@ -1029,12 +1051,12 @@
 
 		if((found_jbr = jabber_buddy_find_resource(jb, NULL))) {
 			jabber_google_presence_incoming(js, buddy_name, found_jbr);
-			purple_prpl_got_user_status(js->gc->account, buddy_name, jabber_buddy_state_get_status_id(found_jbr->state), "priority", found_jbr->priority, "message", found_jbr->status, NULL);
-			purple_prpl_got_user_idle(js->gc->account, buddy_name, found_jbr->idle, found_jbr->idle);
+			purple_prpl_got_user_status(account, buddy_name, jabber_buddy_state_get_status_id(found_jbr->state), "priority", found_jbr->priority, "message", found_jbr->status, NULL);
+			purple_prpl_got_user_idle(account, buddy_name, found_jbr->idle, found_jbr->idle);
 			if (nickname)
 				serv_got_alias(js->gc, buddy_name, nickname);
 		} else {
-			purple_prpl_got_user_status(js->gc->account, buddy_name, "offline", status ? "message" : NULL, status, NULL);
+			purple_prpl_got_user_status(account, buddy_name, "offline", status ? "message" : NULL, status, NULL);
 		}
 		g_free(buddy_name);
 	}
--- a/libpurple/protocols/jabber/roster.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/roster.c	Thu Feb 18 21:38:43 2010 +0000
@@ -259,7 +259,16 @@
 					seen_empty = TRUE;
 				}
 
-				groups = g_slist_prepend(groups, group_name);
+				/*
+				 * See the note in add_purple_buddy_to_groups; the core handles
+				 * names case-insensitively and this is required to not
+				 * end up with duplicates if a buddy is in, e.g.,
+				 * 'XMPP' and 'xmpp'
+				 */
+				if (g_slist_find_custom(groups, group_name, (GCompareFunc)purple_utf8_strcasecmp))
+					g_free(group_name);
+				else
+					groups = g_slist_prepend(groups, group_name);
 			}
 
 			add_purple_buddy_to_groups(js, jid, name, groups);
@@ -276,6 +285,12 @@
 	}
 #endif
 
+	if (type == JABBER_IQ_SET) {
+		JabberIq *ack = jabber_iq_new(js, JABBER_IQ_RESULT);
+		jabber_iq_set_id(ack, id);
+		jabber_iq_send(ack);
+	}
+
 	js->currently_parsing_roster_push = FALSE;
 }
 
--- a/libpurple/protocols/jabber/si.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/jabber/si.c	Thu Feb 18 21:38:43 2010 +0000
@@ -852,8 +852,11 @@
 	/* If we successfully started listening locally */
 	if (sock >= 0) {
 		gchar *jid;
-		const char *local_ip, *public_ip;
-
+		GList *local_ips =
+			purple_network_get_all_local_system_ips();
+		const char *public_ip;
+		gboolean has_public_ip = FALSE;
+		
 		jsx->local_streamhost_fd = sock;
 
 		jid = g_strdup_printf("%s@%s/%s", jsx->js->user->node,
@@ -861,19 +864,24 @@
 		xfer->local_port = purple_network_get_port_from_fd(sock);
 		g_snprintf(port, sizeof(port), "%hu", xfer->local_port);
 
-		/* Include the localhost's IP (for in-network transfers) */
-		local_ip = purple_network_get_local_system_ip(jsx->js->fd);
-		if (strcmp(local_ip, "0.0.0.0") != 0) {
+		public_ip = purple_network_get_my_ip(jsx->js->fd);
+
+		/* Include the localhost's IPs (for in-network transfers) */
+		while (local_ips) {
+			gchar *local_ip = local_ips->data;
 			streamhost_count++;
 			streamhost = xmlnode_new_child(query, "streamhost");
 			xmlnode_set_attrib(streamhost, "jid", jid);
 			xmlnode_set_attrib(streamhost, "host", local_ip);
 			xmlnode_set_attrib(streamhost, "port", port);
+			if (purple_strequal(local_ip, public_ip))
+				has_public_ip = TRUE;
+			g_free(local_ip);
+			local_ips = g_list_delete_link(local_ips, local_ips);
 		}
 
 		/* Include the public IP (assuming that there is a port mapped somehow) */
-		public_ip = purple_network_get_my_ip(jsx->js->fd);
-		if (strcmp(public_ip, local_ip) != 0 && strcmp(public_ip, "0.0.0.0") != 0) {
+		if (!has_public_ip && strcmp(public_ip, "0.0.0.0") != 0) {
 			streamhost_count++;
 			streamhost = xmlnode_new_child(query, "streamhost");
 			xmlnode_set_attrib(streamhost, "jid", jid);
--- a/libpurple/protocols/msn/msg.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msn/msg.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1043,7 +1043,6 @@
 
 			else
 				purple_prpl_got_attention(account->gc, user, MSN_NUDGE);
-
 		} else {
 			purple_prpl_got_attention(account->gc, user, MSN_NUDGE);
 		}
--- a/libpurple/protocols/msn/nexus.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msn/nexus.c	Thu Feb 18 21:38:43 2010 +0000
@@ -244,15 +244,6 @@
 	gpointer data;
 };
 
-#if !GLIB_CHECK_VERSION(2, 12, 0)
-static gboolean
-nexus_remove_all_cb(gpointer key, gpointer val, gpointer data)
-{
-	return TRUE;
-}
-#endif
-
-
 static gboolean
 nexus_parse_token(MsnNexus *nexus, int id, xmlnode *node)
 {
@@ -281,12 +272,7 @@
 	if (token_str == NULL)
 		return FALSE;
 
-#if GLIB_CHECK_VERSION(2, 12, 0)
 	g_hash_table_remove_all(nexus->tokens[id].token);
-#else
-	g_hash_table_foreach_remove(nexus->tokens[id].token,
-		nexus_remove_all_cb, NULL);
-#endif
 
 	elems = g_strsplit(token_str, "&", 0);
 
--- a/libpurple/protocols/msn/notification.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msn/notification.c	Thu Feb 18 21:38:43 2010 +0000
@@ -361,81 +361,6 @@
 	msn_cmdproc_send_trans(cmdproc, trans);
 }
 
-#if 0
-static void
-ubm_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload,
-			 size_t len)
-{
-	MsnMessage *msg;
-	PurpleConnection *gc;
-	const char *passport;
-	const char *content_type;
-
-	purple_debug_info("msn", "Process UBM payload:%.*s\n", (guint)len, payload);
-	msg = msn_message_new_from_cmd(cmdproc->session, cmd);
-
-	msn_message_parse_payload(msg, payload, len,MSG_LINE_DEM,MSG_BODY_DEM);
-	if (purple_debug_is_verbose())
-		msn_message_show_readable(msg, "Notification", TRUE);
-
-	gc = cmdproc->session->account->gc;
-	passport = msg->remote_user;
-
-	content_type = msn_message_get_content_type(msg);
-	purple_debug_info("msn", "type:%s\n", content_type);
-	if(!strcmp(content_type,"text/plain")){
-		const char *value;
-		const char *body;
-		char *body_enc;
-		char *body_final = NULL;
-		size_t body_len;
-
-		body = msn_message_get_bin_data(msg, &body_len);
-		body_enc = g_markup_escape_text(body, body_len);
-
-		if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL)	{
-			char *pre, *post;
-
-			msn_parse_format(value, &pre, &post);
-			body_final = g_strdup_printf("%s%s%s", pre ? pre : "",
-							body_enc ? body_enc : "", post ? post : "");
-			g_free(pre);
-			g_free(post);
-		}
-		g_free(body_enc);
-		serv_got_im(gc, passport, body_final, 0, time(NULL));
-		g_free(body_final);
-	}
-	if(!strcmp(content_type,"text/x-msmsgscontrol")){
-		if(msn_message_get_attr(msg, "TypingUser") != NULL){
-			serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT,
-						PURPLE_TYPING);
-		}
-	}
-	if(!strcmp(content_type,"text/x-msnmsgr-datacast")){
-		char *username, *str;
-		PurpleAccount *account;
-		PurpleBuddy *buddy;
-		const char *user;
-
-		account = cmdproc->session->account;
-		user = msg->remote_user;
-
-		if ((buddy = purple_find_buddy(account, user)) != NULL){
-			username = g_markup_escape_text(purple_buddy_get_alias(buddy), -1);
-		}else{
-			username = g_markup_escape_text(user, -1);
-		}
-
-		str = g_strdup_printf(_("%s just sent you a Nudge!"), username);
-		g_free(username);
-		msn_session_report_user(cmdproc->session,user,str,PURPLE_MESSAGE_SYSTEM);
-		g_free(str);
-	}
-	msn_message_destroy(msg);
-}
-#endif
-
 /*Yahoo msg process*/
 static void
 ubm_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
@@ -1624,11 +1549,7 @@
 	 *  6: Album
 	 *  7: ?
 	 */
-#if GLIB_CHECK_VERSION(2,6,0)
 	strings  = g_strv_length(cmedia_array);
-#else
-	while (cmedia_array[++strings] != NULL);
-#endif
 
 	if (strings >= 4 && !strcmp(cmedia_array[2], "1")) {
 		if (user->extinfo == NULL)
--- a/libpurple/protocols/msn/slp.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msn/slp.c	Thu Feb 18 21:38:43 2010 +0000
@@ -741,11 +741,10 @@
 	if (!strncmp(body, "INVITE", strlen("INVITE")))
 	{
 		char *branch;
+		char *call_id;
 		char *content;
 		char *content_type;
 
-		slpcall = msn_slpcall_new(slplink);
-
 		/* From: <msnmsgr:buddy@hotmail.com> */
 #if 0
 		slpcall->remote_user = get_token(body, "From: <msnmsgr:", ">\r\n");
@@ -753,7 +752,7 @@
 
 		branch = get_token(body, ";branch={", "}");
 
-		slpcall->id = get_token(body, "Call-ID: {", "}");
+		call_id = get_token(body, "Call-ID: {", "}");
 
 #if 0
 		long content_len = -1;
@@ -767,13 +766,15 @@
 
 		content = get_token(body, "\r\n\r\n", NULL);
 
-		if (branch && content_type && content)
+		if (branch && call_id && content_type && content)
 		{
+			slpcall = msn_slpcall_new(slplink);
+			slpcall->id = call_id;
 			got_invite(slpcall, branch, content_type, content);
 		}
 		else
 		{
-			msn_slpcall_destroy(slpcall);
+			g_free(call_id);
 			slpcall = NULL;
 		}
 
--- a/libpurple/protocols/msn/slpcall.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msn/slpcall.c	Thu Feb 18 21:38:43 2010 +0000
@@ -199,7 +199,7 @@
 
 	slpcall = NULL;
 	body = slpmsg->buffer;
-	body_len = slpmsg->size;
+	body_len = slpmsg->offset;
 
 	if (slpmsg->flags == 0x0 || slpmsg->flags == 0x1000000)
 	{
--- a/libpurple/protocols/msn/slplink.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msn/slplink.c	Thu Feb 18 21:38:43 2010 +0000
@@ -585,15 +585,16 @@
 	}
 	else if (slpmsg->size && slpmsg->buffer)
 	{
-		if (G_MAXSIZE - len < offset || (offset + len) > slpmsg->size)
+		if (G_MAXSIZE - len < offset || (offset + len) > slpmsg->size || slpmsg->offset != offset)
 		{
 			purple_debug_error("msn",
 				"Oversized slpmsg - msgsize=%lld offset=%" G_GUINT64_FORMAT " len=%" G_GSIZE_FORMAT "\n",
 				slpmsg->size, offset, len);
 			g_return_if_reached();
+		} else {
+			memcpy(slpmsg->buffer + offset, data, len);
+			slpmsg->offset += len;
 		}
-		else
-			memcpy(slpmsg->buffer + offset, data, len);
 	}
 
 	if ((slpmsg->flags == 0x20 ||
--- a/libpurple/protocols/msn/slpmsg.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msn/slpmsg.h	Thu Feb 18 21:38:43 2010 +0000
@@ -57,7 +57,18 @@
 	gboolean ft;
 	PurpleStoredImage *img;
 	guchar *buffer;
+
+	/**
+	 * For outgoing messages this is the number of bytes from buffer that
+	 * have already been sent out.  For incoming messages this is the
+	 * number of bytes that have been written to buffer.
+	 */
 	long long offset;
+
+	/**
+	 * This is the size of buffer, unless this is an outgoing file transfer,
+	 * in which case this is the size of the file.
+	 */
 	long long size;
 
 	GList *msgs; /**< The real messages. */
--- a/libpurple/protocols/msnp9/msn.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/msnp9/msn.c	Thu Feb 18 21:38:43 2010 +0000
@@ -775,7 +775,8 @@
 
 	gc->proto_data = session;
 	gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_FORMATTING_WBFO | PURPLE_CONNECTION_NO_BGCOLOR |
-		PURPLE_CONNECTION_NO_FONTSIZE | PURPLE_CONNECTION_NO_URLDESC | PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY;
+		PURPLE_CONNECTION_NO_FONTSIZE | PURPLE_CONNECTION_NO_URLDESC | PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY |
+		PURPLE_CONNECTION_ALLOW_ATTENTION;
 
 	msn_session_set_login_step(session, MSN_LOGIN_STEP_START);
 
--- a/libpurple/protocols/mxit/multimx.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/mxit/multimx.c	Thu Feb 18 21:38:43 2010 +0000
@@ -304,7 +304,7 @@
 	serv_got_joined_chat(gc, multimx->chatid, multimx->roomname);
 
 	/* Send ".list" command to GroupChat server to retrieve current member-list */
-	mxit_send_message(session, multimx->roomid, ".list", FALSE);
+	mxit_send_message(session, multimx->roomid, ".list", FALSE, FALSE);
 }
 
 
@@ -579,7 +579,7 @@
 	}
 
 	/* Send packet to MXit */
-	mxit_send_message(session, multimx->roomid, message, TRUE);
+	mxit_send_message(session, multimx->roomid, message, TRUE, FALSE);
 	
 	/* Determine our nickname to display */
 	if (session->profile && (session->profile->nickname[0] != '\0'))		/* default is profile name (since that's what everybody else sees) */
--- a/libpurple/protocols/mxit/mxit.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/mxit/mxit.c	Thu Feb 18 21:38:43 2010 +0000
@@ -58,9 +58,10 @@
 {
 	PurpleAccount*		account;
 	PurpleConnection*	con;
-	gchar**				parts	= NULL;
-	gchar*				link	= NULL;
+	gchar**				parts		= NULL;
+	gchar*				link		= NULL;
 	gsize				len;
+	gboolean			is_command	= FALSE;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_link_click (%s)\n", link64 );
 
@@ -92,7 +93,7 @@
 	con = purple_account_get_connection( account );
 
 	/* send click message back to MXit */
-	mxit_send_message( con->proto_data, parts[3], parts[4], FALSE );
+	mxit_send_message( con->proto_data, parts[3], parts[4], FALSE, is_command );
 
 	g_free( link );
 	link = NULL;
@@ -188,7 +189,11 @@
 
 	/* find the buddy object */
 	buddy = purple_find_buddy( session->acc, who );
-	if ( ( !buddy ) || ( !buddy->proto_data ) )
+	if ( !buddy )
+		return;
+
+	contact = purple_buddy_get_protocol_data(buddy);
+	if ( !contact )
 		return;
 
 	/* we ignore all conversations with which we have chatted with in this session */
@@ -196,7 +201,6 @@
 		return;
 
 	/* determite if this buddy is a MXit service */
-	contact = buddy->proto_data;
 	switch ( contact->type ) {
 		case MXIT_TYPE_BOT :
 		case MXIT_TYPE_CHATROOM :
@@ -205,7 +209,7 @@
 				tmp = g_strdup_printf("<font color=\"#999999\">%s</font>\n", _( "Loading menu..." ));
 				serv_got_im( session->con, who, tmp, PURPLE_MESSAGE_NOTIFY, time( NULL ) );
 				g_free(tmp);
-				mxit_send_message( session, who, " ", FALSE );
+				mxit_send_message( session, who, " ", FALSE, FALSE );
 		default :
 				break;
 	}
@@ -258,11 +262,15 @@
  */
 static const char* mxit_list_emblem( PurpleBuddy* buddy )
 {
-	struct contact*	contact = buddy->proto_data;
+	struct contact*	contact = purple_buddy_get_protocol_data(buddy);
 
 	if ( !contact )
 		return NULL;
 
+	/* subscription state is Pending, Rejected or Deleted */
+	if ( contact->subtype != MXIT_SUBTYPE_BOTH )
+		return "not-authorized";
+
 	switch ( contact-> type ) {
 		case MXIT_TYPE_JABBER :			/* external contacts via MXit */
 		case MXIT_TYPE_MSN :
@@ -295,7 +303,7 @@
  */
 char* mxit_status_text( PurpleBuddy* buddy )
 {
-	struct contact*	contact = buddy->proto_data;
+	struct contact*	contact = purple_buddy_get_protocol_data(buddy);
 
 	if ( !contact )
 		return NULL;
@@ -320,7 +328,7 @@
  */
 static void mxit_tooltip( PurpleBuddy* buddy, PurpleNotifyUserInfo* info, gboolean full )
 {
-	struct contact*	contact = buddy->proto_data;
+	struct contact*	contact = purple_buddy_get_protocol_data(buddy);
 
 	if ( !contact )
 		return;
@@ -390,7 +398,7 @@
 {
 	purple_debug_info( MXIT_PLUGIN_ID, "Sending message '%s' to buddy '%s'\n", message, who );
 
-	mxit_send_message( gc->proto_data, who, message, TRUE );
+	mxit_send_message( gc->proto_data, who, message, TRUE, FALSE );
 
 	return 1;		/* echo to conversation window */
 }
@@ -423,6 +431,7 @@
 
 	statusmsg1 = purple_markup_strip_html( purple_status_get_attr_string( status, "message" ) );
 	statusmsg2 = g_strndup( statusmsg1, CP_MAX_STATUS_MSG );
+
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_set_status: '%s'\n", statusmsg2 );
 
 	/* update presence state */
@@ -455,7 +464,7 @@
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_free_buddy\n" );
 
-	contact = buddy->proto_data;
+	contact = purple_buddy_get_protocol_data(buddy);
 	if ( contact ) {
 		if ( contact->statusMsg )
 			g_free( contact->statusMsg );
@@ -463,7 +472,8 @@
 			g_free( contact->avatarId );
 		g_free( contact );
 	}
-	buddy->proto_data = NULL;
+
+	purple_buddy_set_protocol_data(buddy, NULL);
 }
 
 
--- a/libpurple/protocols/mxit/profile.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/mxit/profile.c	Thu Feb 18 21:38:43 2010 +0000
@@ -115,9 +115,9 @@
 
 	buddy = purple_find_buddy( session->acc, username );
 	if ( buddy ) {
-		purple_notify_user_info_add_pair( info, _( "Alias" ), buddy->alias );
+		purple_notify_user_info_add_pair( info, _( "Alias" ), purple_buddy_get_alias( buddy ) );
 		purple_notify_user_info_add_section_break( info );
-		contact = buddy->proto_data;
+		contact = purple_buddy_get_protocol_data(buddy);
 	}
 
 	purple_notify_user_info_add_pair( info, _( "Nick Name" ), profile->nickname );
--- a/libpurple/protocols/mxit/protocol.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/mxit/protocol.c	Thu Feb 18 21:38:43 2010 +0000
@@ -695,12 +695,12 @@
  *  @param to			The username of the recipient
  *  @param msg			The message text
  */
-void mxit_send_message( struct MXitSession* session, const char* to, const char* msg, gboolean parse_markup )
+void mxit_send_message( struct MXitSession* session, const char* to, const char* msg, gboolean parse_markup, gboolean is_command )
 {
 	char		data[CP_MAX_PACKET];
 	char*		markuped_msg;
 	int			datalen;
-	int			msgtype = CP_MSGTYPE_NORMAL;
+	int			msgtype = ( is_command ? CP_MSGTYPE_COMMAND : CP_MSGTYPE_NORMAL );
 
 	/* first we need to convert the markup from libPurple to MXit format */
 	if ( parse_markup )
@@ -1254,6 +1254,7 @@
 {
 	PurpleStatus*	status;
 	int				presence;
+	const char*		statusmsg;
 	const char*		profilelist[] = { CP_PROFILE_BIRTHDATE, CP_PROFILE_GENDER, CP_PROFILE_HIDENUMBER, CP_PROFILE_FULLNAME,
 									CP_PROFILE_TITLE, CP_PROFILE_FIRSTNAME, CP_PROFILE_LASTNAME, CP_PROFILE_EMAIL,
 									CP_PROFILE_MOBILENR };
@@ -1272,13 +1273,21 @@
 	/* update presence status */
 	status = purple_account_get_active_status( session->acc );
 	presence = mxit_convert_presence( purple_status_get_id( status ) );
-	if ( presence != MXIT_PRESENCE_ONLINE ) {
+	statusmsg = purple_status_get_attr_string( status, "message" );
+
+	if ( ( presence != MXIT_PRESENCE_ONLINE ) || ( statusmsg ) ) {
 		/* when logging into MXit, your default presence is online. but with the UI, one can change
 		 * the presence to whatever. in the case where its changed to a different presence setting
 		 * we need to send an update to the server, otherwise the user's presence will be out of
 		 * sync between the UI and MXit.
 		 */
-		mxit_send_presence( session, presence, purple_status_get_attr_string( status, "message" ) );
+		char* statusmsg1 = purple_markup_strip_html( statusmsg );
+		char* statusmsg2 = g_strndup( statusmsg1, CP_MAX_STATUS_MSG );
+
+		mxit_send_presence( session, presence, statusmsg2 );
+
+		g_free( statusmsg1 );
+		g_free( statusmsg2 );
 	}
 
 	/* save extra info if this is a HTTP connection */
--- a/libpurple/protocols/mxit/protocol.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/mxit/protocol.h	Thu Feb 18 21:38:43 2010 +0000
@@ -273,7 +273,7 @@
 
 void mxit_send_presence( struct MXitSession* session, int presence, const char* statusmsg );
 void mxit_send_mood( struct MXitSession* session, int mood );
-void mxit_send_message( struct MXitSession* session, const char* to, const char* msg, gboolean parse_markup );
+void mxit_send_message( struct MXitSession* session, const char* to, const char* msg, gboolean parse_markup, gboolean is_command );
 
 void mxit_send_extprofile_update( struct MXitSession* session, const char* password, unsigned int nr_attrib, const char* attributes );
 void mxit_send_extprofile_request( struct MXitSession* session, const char* username, unsigned int nr_attrib, const char* attribute[] );
--- a/libpurple/protocols/mxit/roster.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/mxit/roster.c	Thu Feb 18 21:38:43 2010 +0000
@@ -318,7 +318,7 @@
 
 		/* create new buddy */
 		buddy = purple_buddy_new( session->acc, contact->username, contact->alias );
-		buddy->proto_data = contact;
+		purple_buddy_set_protocol_data(buddy, contact);
 
 		/* add new buddy to list */
 		purple_blist_add_buddy( buddy, NULL, group, NULL );
@@ -326,13 +326,15 @@
 	else {
 		/* buddy was found in the group */
 
+		gpointer data = NULL;
+
 		/* now update the buddy's alias */
 		purple_blist_alias_buddy( buddy, contact->alias );
 
 		/* replace the buddy's contact struct */
-		if ( buddy->proto_data )
-			free( buddy->proto_data );
-		buddy->proto_data = contact;
+		if ( ( data = purple_buddy_get_protocol_data( buddy ) ) )
+			free( data );
+		purple_buddy_set_protocol_data( buddy, contact );
 	}
 
 	/* load buddy's avatar id */
@@ -379,7 +381,7 @@
 		return;
 	}
 
-	contact = buddy->proto_data;
+	contact = purple_buddy_get_protocol_data( buddy );
 	if ( !contact )
 		return;
 
@@ -439,9 +441,12 @@
 	for ( i = 0; i < g_slist_length( list ); i++ ) {
 		buddy = g_slist_nth_data( list, i );
 
-		if ( !buddy->proto_data ) {
+		if ( !purple_buddy_get_protocol_data( buddy ) ) {
+			const gchar *alias = purple_buddy_get_alias( buddy );
+			const gchar *name = purple_buddy_get_name( buddy );
+
 			/* this buddy should be removed, because we did not receive him in our roster update from MXit */
-			purple_debug_info( MXIT_PLUGIN_ID, "Removed 'old' buddy from the blist '%s' (%s)\n", buddy->alias, buddy->name );
+			purple_debug_info( MXIT_PLUGIN_ID, "Removed 'old' buddy from the blist '%s' (%s)\n", alias, name );
 			purple_blist_remove_buddy( buddy );
 		}
 	}
@@ -535,7 +540,7 @@
 		return FALSE;
 	}
 
-	contact = buddy->proto_data;
+	contact = purple_buddy_get_protocol_data( buddy );
 	if ( !contact )
 		return FALSE;
 
@@ -560,10 +565,13 @@
 	GSList*				list	= NULL;
 	PurpleBuddy*		mxbuddy	= NULL;
 	unsigned int		i;
+	const gchar *		buddy_name = purple_buddy_get_name( buddy );
+	const gchar *		buddy_alias = purple_buddy_get_alias( buddy );
+	const gchar *		group_name = purple_group_get_name( group );
 
-	purple_debug_info( MXIT_PLUGIN_ID, "mxit_add_buddy '%s' (group='%s')\n", buddy->name, group->name );
+	purple_debug_info( MXIT_PLUGIN_ID, "mxit_add_buddy '%s' (group='%s')\n", buddy_name, group_name );
 
-	list = purple_find_buddies( session->acc, buddy->name );
+	list = purple_find_buddies( session->acc, buddy_name );
 	if ( g_slist_length( list ) == 1 ) {
 		purple_debug_info( MXIT_PLUGIN_ID, "mxit_add_buddy (scenario 1) (list:%i)\n", g_slist_length( list ) );
 		/*
@@ -572,7 +580,7 @@
 		 * you accept an invite.  so in that case the user is already
 		 * in our blist and ready to be chatted to.
 		 */
-		mxit_send_invite( session, buddy->name, buddy->alias, group->name );
+		mxit_send_invite( session, buddy_name, buddy_alias, group_name );
 	}
 	else {
 		purple_debug_info( MXIT_PLUGIN_ID, "mxit_add_buddy (scenario 2) (list:%i)\n", g_slist_length( list ) );
@@ -585,17 +593,17 @@
 		for ( i = 0; i < g_slist_length( list ); i++ ) {
 			mxbuddy = g_slist_nth_data( list, i );
 
-			if ( mxbuddy->proto_data != NULL ) {
+			if ( purple_buddy_get_protocol_data( mxbuddy ) != NULL ) {
 				/* this is our REAL MXit buddy! */
 
 				/* now update the buddy's alias */
-				purple_blist_alias_buddy( mxbuddy, buddy->alias );
+				purple_blist_alias_buddy( mxbuddy, buddy_alias );
 
 				/* now update the buddy's group */
 //				mxbuddy = mxit_update_buddy_group( session, mxbuddy, group );
 
 				/* send the update to the MXit server */
-				mxit_send_update_contact( session, mxbuddy->name, mxbuddy->alias, group->name );
+				mxit_send_update_contact( session, purple_buddy_get_name( mxbuddy ), purple_buddy_get_alias( mxbuddy ), group_name );
 			}
 		}
 	}
@@ -623,10 +631,11 @@
 void mxit_remove_buddy( PurpleConnection* gc, PurpleBuddy* buddy, PurpleGroup* group )
 {
 	struct MXitSession*	session	= (struct MXitSession*) gc->proto_data;
+	const gchar *		buddy_name = purple_buddy_get_name( buddy );
 
-	purple_debug_info( MXIT_PLUGIN_ID, "mxit_remove_buddy '%s'\n", buddy->name );
+	purple_debug_info( MXIT_PLUGIN_ID, "mxit_remove_buddy '%s'\n", buddy_name );
 
-	mxit_send_remove( session, buddy->name );
+	mxit_send_remove( session, buddy_name );
 }
 
 
@@ -659,7 +668,7 @@
 		return;
 	}
 
-	mxit_send_update_contact( session, who, alias, group->name );
+	mxit_send_update_contact( session, who, alias, purple_group_get_name( group ) );
 }
 
 
@@ -685,7 +694,7 @@
 		return;
 	}
 
-	mxit_send_update_contact( session, who, buddy->alias, new_group );
+	mxit_send_update_contact( session, who, purple_buddy_get_alias( buddy ), new_group );
 }
 
 
@@ -704,7 +713,7 @@
 	PurpleBuddy*		buddy	= NULL;
 	GList*				item	= NULL;
 
-	purple_debug_info( MXIT_PLUGIN_ID, "mxit_rename_group from '%s' to '%s\n", old_name, group->name );
+	purple_debug_info( MXIT_PLUGIN_ID, "mxit_rename_group from '%s' to '%s\n", old_name, purple_group_get_name( group ) );
 
 	//  TODO: Might be more efficient to use the "rename group" command (cmd=29).
 
@@ -712,7 +721,7 @@
 	item = moved_buddies;
 	while ( item ) {
 		buddy = item->data;
-		mxit_send_update_contact( session, buddy->name, buddy->alias, group->name );
+		mxit_send_update_contact( session, purple_buddy_get_name( buddy ), purple_buddy_get_alias( buddy ), purple_group_get_name( group ) );
 		item = g_list_next( item );
 	}
 }
--- a/libpurple/protocols/myspace/user.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/myspace/user.c	Thu Feb 18 21:38:43 2010 +0000
@@ -54,11 +54,13 @@
 
 	user = purple_buddy_get_protocol_data(buddy);
 	if (create && !user) {
+		PurpleBlistNode *node = PURPLE_BLIST_NODE(buddy);
+
 		/* No MsimUser for this buddy; make one. */
 
 		user = g_new0(MsimUser, 1);
 		user->buddy = buddy;
-		user->id = purple_blist_node_get_int(&buddy->node, "UserID");
+		user->id = purple_blist_node_get_int(node, "UserID");
 		purple_buddy_set_protocol_data(buddy, user);
 	}
 
--- a/libpurple/protocols/qq/buddy_memo.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/qq/buddy_memo.c	Thu Feb 18 21:38:43 2010 +0000
@@ -119,7 +119,7 @@
 
 	who = uid_to_purple_name(bd_uid);
 	buddy = purple_find_buddy(account, who);
-	if (buddy == NULL || buddy->proto_data == NULL) {
+	if (buddy == NULL || purple_buddy_get_protocol_data(buddy) == NULL) {
 		g_free(who);
 		purple_debug_info("QQ", "Error...Can NOT find %d!\n", bd_uid);
 		return;
--- a/libpurple/protocols/yahoo/libymsg.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/yahoo/libymsg.c	Thu Feb 18 21:38:43 2010 +0000
@@ -541,6 +541,9 @@
 					case YAHOO_FEDERATION_IBM:
 						norm_bud = g_strconcat("ibm/", temp, NULL);
 						break;
+					case YAHOO_FEDERATION_PBX:
+						norm_bud = g_strconcat("pbx/", temp, NULL);
+						break;
 					case YAHOO_FEDERATION_NONE:
 						norm_bud = g_strdup(temp);
 						break;
@@ -833,6 +836,9 @@
 			case YAHOO_FEDERATION_IBM:
 				fed_from = g_strconcat("ibm/", from, NULL);
 				break;
+			case YAHOO_FEDERATION_PBX:
+				fed_from = g_strconcat("pbx/", from, NULL);
+				break;
 			case YAHOO_FEDERATION_NONE:
 			default:
 				break;
@@ -844,7 +850,7 @@
 			serv_got_typing_stopped(gc, fed_from);
 		
 		if (fed_from != from)
-			g_free(fed_from);			
+			g_free(fed_from);
 	
 	} else if (!g_ascii_strncasecmp(msg, "GAME", strlen("GAME"))) {
 		PurpleBuddy *bud = purple_find_buddy(account, from);
@@ -999,6 +1005,9 @@
 					case YAHOO_FEDERATION_IBM:
 						im->fed_from = g_strconcat("ibm/",im->from, NULL);
 						break;
+					case YAHOO_FEDERATION_PBX:
+						im->fed_from = g_strconcat("pbx/",im->from, NULL);
+						break;
 					case YAHOO_FEDERATION_NONE:
 					default:
 						im->fed_from = g_strdup(im->from);
@@ -1010,7 +1019,7 @@
 			/* peer session id */
 			if (im && (pair->key == 11)) {
 				/* disconnect the peer if connected through p2p and sends wrong value for session id */
-				if( (im->fed == YAHOO_FEDERATION_NONE) && (pkt_type == YAHOO_PKT_TYPE_P2P) 
+				if( (im->fed == YAHOO_FEDERATION_NONE) && (pkt_type == YAHOO_PKT_TYPE_P2P)
 						&& (yd->session_id != strtol(pair->value, NULL, 10)) )
 				{
 					purple_debug_warning("yahoo","p2p: %s sent us message with wrong session id. Disconnecting p2p connection to peer\n", im->fed_from);
@@ -1116,9 +1125,12 @@
 		m = m2;
 		purple_util_chrreplace(m, '\r', '\n');
 		if (!strcmp(m, "<ding>")) {
+			PurpleConversation *conv = NULL;
 			char *username;
 
 			username = g_markup_escape_text(im->fed_from, -1);
+			conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY,
+				username, account);
 			purple_prpl_got_attention(gc, username, YAHOO_BUZZ);
 			g_free(username);
 			g_free(m);
@@ -1764,11 +1776,8 @@
 		char *crumb = NULL;
 		char *crypt = NULL;
 
-#if GLIB_CHECK_VERSION(2,6,0)
 		totalelements = g_strv_length(split_data);
-#else
-		while (split_data[++totalelements] != NULL);
-#endif
+
 		if (totalelements >= 4) {
 			response_no = strtol(split_data[0], NULL, 10);
 			crumb = g_strdup(split_data[1] + strlen("crumb="));
@@ -1850,11 +1859,8 @@
 		int response_no = -1;
 		char *token = NULL;
 
-#if GLIB_CHECK_VERSION(2,6,0)
 		totalelements = g_strv_length(split_data);
-#else
-		while (split_data[++totalelements] != NULL);
-#endif
+
 		if(totalelements == 1)
 			response_no = strtol(split_data[0], NULL, 10);
 		else if(totalelements >= 2) {
@@ -4259,15 +4265,19 @@
 		validate_data_child = xmlnode_get_child(validate_data_root, "carrier");
 		carrier = xmlnode_get_data(validate_data_child);
 
-		purple_debug_info("yahoo","SMS validate data: Mobile:%s, Status:%s, Carrier:%s\n", mobile_no, status, carrier);
-
-		if( strcmp(status, "Valid") == 0) {
-			g_hash_table_insert(yd->sms_carrier, g_strdup_printf("+%s", mobile_no), g_strdup(carrier));
-			yahoo_send_im(sms_cb_data->gc, sms_cb_data->who, sms_cb_data->what, PURPLE_MESSAGE_SEND);
-		}
-		else	{
-			g_hash_table_insert(yd->sms_carrier, g_strdup_printf("+%s", mobile_no), g_strdup("Unknown"));
-			purple_conversation_write(conv, NULL, _("Can't send SMS. Unknown mobile carrier."), PURPLE_MESSAGE_SYSTEM, time(NULL));
+		purple_debug_info("yahoo", "SMS validate data: %s\n", webdata);
+
+		if (status && g_str_equal(status, "Valid") == 0) {
+			g_hash_table_insert(yd->sms_carrier,
+					g_strdup_printf("+%s", mobile_no), g_strdup(carrier));
+			yahoo_send_im(sms_cb_data->gc, sms_cb_data->who,
+					sms_cb_data->what, PURPLE_MESSAGE_SEND);
+		} else {
+			g_hash_table_insert(yd->sms_carrier,
+					g_strdup_printf("+%s", mobile_no), g_strdup("Unknown"));
+			purple_conversation_write(conv, NULL,
+					_("Can't send SMS. Unknown mobile carrier."),
+					PURPLE_MESSAGE_SYSTEM, time(NULL));
 		}
 
 		xmlnode_free(validate_data_child);
@@ -4424,6 +4434,7 @@
 		case YAHOO_FEDERATION_MSN:
 		case YAHOO_FEDERATION_OCS:
 		case YAHOO_FEDERATION_IBM:
+		case YAHOO_FEDERATION_PBX:
 			fed_who += 4;
 			break;
 		case YAHOO_FEDERATION_NONE:
@@ -4524,6 +4535,7 @@
 			case YAHOO_FEDERATION_MSN:
 			case YAHOO_FEDERATION_OCS:
 			case YAHOO_FEDERATION_IBM:
+			case YAHOO_FEDERATION_PBX:
 				fed_who += 4;
 				break;
 			case YAHOO_FEDERATION_NONE:
--- a/libpurple/protocols/yahoo/libymsg.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/yahoo/libymsg.h	Thu Feb 18 21:38:43 2010 +0000
@@ -138,7 +138,8 @@
 	YAHOO_FEDERATION_NONE = 0, /* No federation - Yahoo! network */
 	YAHOO_FEDERATION_OCS = 1,  /* LCS or OCS private networks */
 	YAHOO_FEDERATION_MSN = 2,  /* MSN or Windows Live network */
-	YAHOO_FEDERATION_IBM = 9   /* IBM/Sametime network */
+	YAHOO_FEDERATION_IBM = 9,  /* IBM/Sametime network */
+	YAHOO_FEDERATION_PBX = 100 /* Yahoo! Pingbox service */
 } YahooFederation;
 
 
--- a/libpurple/protocols/yahoo/util.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/yahoo/util.c	Thu Feb 18 21:38:43 2010 +0000
@@ -932,6 +932,8 @@
 			fed = YAHOO_FEDERATION_OCS;
 		else if (!g_ascii_strncasecmp(who, "ibm", 3))
 			fed = YAHOO_FEDERATION_IBM;
+		else if (!g_ascii_strncasecmp(who, "pbx", 3))
+			fed = YAHOO_FEDERATION_PBX;
 	}
 	return fed;
 }
--- a/libpurple/protocols/yahoo/yahoo_filexfer.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/yahoo/yahoo_filexfer.c	Thu Feb 18 21:38:43 2010 +0000
@@ -509,9 +509,6 @@
 		return 0;
 	}
 
-	if ((purple_xfer_get_bytes_sent(xfer) + len) >= purple_xfer_get_size(xfer))
-		purple_xfer_set_completed(xfer, TRUE);
-
 	return len;
 }
 
--- a/libpurple/protocols/yahoo/yahoo_friend.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/protocols/yahoo/yahoo_friend.c	Thu Feb 18 21:38:43 2010 +0000
@@ -186,6 +186,9 @@
 		case YAHOO_FEDERATION_IBM:
 			who = g_strconcat("ibm/", temp, NULL);
 			break;
+		case YAHOO_FEDERATION_PBX:
+			who = g_strconcat("pbx/", temp, NULL);
+			break;
 		case YAHOO_FEDERATION_NONE:
 			who = g_strdup(temp);
 			break;
--- a/libpurple/proxy.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/proxy.c	Thu Feb 18 21:38:43 2010 +0000
@@ -2100,8 +2100,12 @@
 	addr = connect_data->hosts->data;
 	connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data);
 #ifdef HAVE_INET_NTOP
-	inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr,
-			ipaddr, sizeof(ipaddr));
+	if (addr->sa_family == AF_INET)
+		inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr,
+				ipaddr, sizeof(ipaddr));
+	else if (addr->sa_family == AF_INET6)
+		inet_ntop(addr->sa_family, &((struct sockaddr_in6 *)addr)->sin6_addr,
+				ipaddr, sizeof(ipaddr));
 #else
 	memcpy(ipaddr, inet_ntoa(((struct sockaddr_in *)addr)->sin_addr),
 			sizeof(ipaddr));
--- a/libpurple/prpl.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/prpl.c	Thu Feb 18 21:38:43 2010 +0000
@@ -288,8 +288,10 @@
 
 	/* The buddy is no longer online, they are therefore by definition not
 	 * still typing to us. */
-	if (!purple_status_is_online(status))
+	if (!purple_status_is_online(status)) {
 		serv_got_typing_stopped(purple_account_get_connection(account), name);
+		purple_prpl_got_media_caps(account, name);
+	}
 }
 
 void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name,
@@ -407,6 +409,16 @@
 	return statuses;
 }
 
+static void
+purple_prpl_attention(PurpleConversation *conv, const char *who,
+	guint type, PurpleMessageFlags flags, time_t mtime)
+{
+	PurpleAccount *account = purple_conversation_get_account(conv);
+	purple_signal_emit(purple_conversations_get_handle(),
+		flags == PURPLE_MESSAGE_SEND ? "sent-attention" : "got-attention",
+		account, who, conv, type);
+}
+
 void
 purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_code)
 {
@@ -452,6 +464,7 @@
 
 	conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, gc->account, who);
 	purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, description, flags, mtime);
+	purple_prpl_attention(conv, who, type_code, PURPLE_MESSAGE_SEND, time(NULL));
 
 	g_free(description);
 }
@@ -503,7 +516,15 @@
 void
 purple_prpl_got_attention(PurpleConnection *gc, const char *who, guint type_code)
 {
+	PurpleConversation *conv = NULL;
+	PurpleAccount *account = purple_connection_get_account(gc);
+
 	got_attention(gc, -1, who, type_code);
+	conv = 
+		purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, who, account);
+	if (conv)
+		purple_prpl_attention(conv, who, type_code, PURPLE_MESSAGE_RECV,
+			time(NULL));
 }
 
 void
@@ -560,6 +581,39 @@
 	return PURPLE_MEDIA_CAPS_NONE;
 }
 
+void
+purple_prpl_got_media_caps(PurpleAccount *account, const char *name)
+{
+#ifdef USE_VV
+	GSList *list;
+
+	g_return_if_fail(account != NULL);
+	g_return_if_fail(name    != NULL);
+
+	if ((list = purple_find_buddies(account, name)) == NULL)
+		return;
+
+	while (list) {
+		PurpleBuddy *buddy = list->data;
+		PurpleMediaCaps oldcaps = purple_buddy_get_media_caps(buddy);
+		PurpleMediaCaps newcaps = 0;
+		const gchar *bname = purple_buddy_get_name(buddy);
+		list = g_slist_delete_link(list, list);
+
+		
+		newcaps = purple_prpl_get_media_caps(account, bname);
+		purple_buddy_set_media_caps(buddy, newcaps);
+
+		if (oldcaps == newcaps)
+			continue;
+
+		purple_signal_emit(purple_blist_get_handle(),
+				"buddy-caps-changed", buddy,
+				newcaps, oldcaps);
+	}
+#endif
+}
+
 /**************************************************************************
  * Protocol Plugin Subsystem API
  **************************************************************************/
--- a/libpurple/prpl.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/prpl.h	Thu Feb 18 21:38:43 2010 +0000
@@ -909,6 +909,17 @@
 					const char *who,
 					PurpleMediaSessionType type);
 
+/**
+ * Signals that the prpl received capabilities for the given contact.
+ *
+ * This function is intended to be used only by prpls.
+ *
+ * @param account The account the user is on.
+ * @param who The name of the contact for which capabilities have been received.
+ * @since 2.7.0
+ */
+void purple_prpl_got_media_caps(PurpleAccount *account, const char *who);
+
 /*@}*/
 
 /**************************************************************************/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-2-uninstalled.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,22 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+abs_srcdir=@abs_srcdir@
+abs_builddir=@abs_builddir@
+
+abs_top_srcdir=@abs_top_srcdir@
+abs_top_builddir=@abs_top_builddir@
+
+plugindir=${libdir}/purple-@PURPLE_MAJOR_VERSION@
+
+Name: libpurple
+Description: libpurple is a GLib-based instant messenger library.
+Version: @VERSION@
+Requires: glib-2.0
+Cflags: -I${abs_top_srcdir} -I${abs_top_builddir}
+Libs: ${abs_builddir}/libpurple.la
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-2.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+plugindir=${libdir}/purple-@PURPLE_MAJOR_VERSION@
+
+Name: libpurple
+Description: libpurple is a GLib-based instant messenger library.
+Version: @VERSION@
+Requires: glib-2.0
+Cflags: -I${includedir}
+Libs: -L${libdir} -lpurple
--- a/libpurple/purple-uninstalled.pc.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/purple-uninstalled.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -9,6 +9,8 @@
 abs_srcdir=@abs_srcdir@
 abs_builddir=@abs_builddir@
 
+plugindir=${libdir}/purple-@PURPLE_MAJOR_VERSION@
+
 Name: libpurple
 Description: libpurple is a GLib-based instant messenger library.
 Version: @VERSION@
--- a/libpurple/purple.pc.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/purple.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -6,6 +6,8 @@
 datadir=@datadir@
 sysconfdir=@sysconfdir@
 
+plugindir=${libdir}/purple-@PURPLE_MAJOR_VERSION@
+
 Name: libpurple
 Description: libpurple is a GLib-based instant messenger library.
 Version: @VERSION@
--- a/libpurple/sound.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/sound.h	Thu Feb 18 21:38:43 2010 +0000
@@ -51,6 +51,7 @@
 	PURPLE_SOUND_CHAT_SAY,         /**< Someone else says somthing in a chat. */
 	PURPLE_SOUND_POUNCE_DEFAULT,   /**< Default sound for a buddy pounce.     */
 	PURPLE_SOUND_CHAT_NICK,        /**< Someone says your name in a chat.     */
+	PURPLE_SOUND_GOT_ATTENTION,	   /**< Got an attention					  */
 	PURPLE_NUM_SOUNDS              /**< Total number of sounds.               */
 
 } PurpleSoundEventID;
--- a/libpurple/util.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/util.c	Thu Feb 18 21:38:43 2010 +0000
@@ -220,50 +220,12 @@
 gchar *
 purple_base64_encode(const guchar *data, gsize len)
 {
-#if GLIB_CHECK_VERSION(2,12,0)
 	return g_base64_encode(data, len);
-#else
-	char *out, *rv;
-
-	g_return_val_if_fail(data != NULL, NULL);
-	g_return_val_if_fail(len > 0,  NULL);
-
-	rv = out = g_malloc(((len/3)+1)*4 + 1);
-
-	for (; len >= 3; len -= 3)
-	{
-		*out++ = alphabet[data[0] >> 2];
-		*out++ = alphabet[((data[0] << 4) & 0x30) | (data[1] >> 4)];
-		*out++ = alphabet[((data[1] << 2) & 0x3c) | (data[2] >> 6)];
-		*out++ = alphabet[data[2] & 0x3f];
-		data += 3;
-	}
-
-	if (len > 0)
-	{
-		unsigned char fragment;
-
-		*out++ = alphabet[data[0] >> 2];
-		fragment = (data[0] << 4) & 0x30;
-
-		if (len > 1)
-			fragment |= data[1] >> 4;
-
-		*out++ = alphabet[fragment];
-		*out++ = (len < 2) ? '=' : alphabet[(data[1] << 2) & 0x3c];
-		*out++ = '=';
-	}
-
-	*out = '\0';
-
-	return rv;
-#endif /* GLIB < 2.12.0 */
 }
 
 guchar *
 purple_base64_decode(const char *str, gsize *ret_len)
 {
-#if GLIB_CHECK_VERSION(2,12,0)
 	/*
 	 * We want to allow ret_len to be NULL for backward compatibility,
 	 * but g_base64_decode() requires a valid length variable.  So if
@@ -271,69 +233,6 @@
 	 */
 	gsize unused;
 	return g_base64_decode(str, ret_len != NULL ? ret_len : &unused);
-#else
-	guchar *out = NULL;
-	char tmp = 0;
-	const char *c;
-	gint32 tmp2 = 0;
-	int len = 0, n = 0;
-
-	g_return_val_if_fail(str != NULL, NULL);
-
-	c = str;
-
-	while (*c) {
-		if (*c >= 'A' && *c <= 'Z') {
-			tmp = *c - 'A';
-		} else if (*c >= 'a' && *c <= 'z') {
-			tmp = 26 + (*c - 'a');
-		} else if (*c >= '0' && *c <= 57) {
-			tmp = 52 + (*c - '0');
-		} else if (*c == '+') {
-			tmp = 62;
-		} else if (*c == '/') {
-			tmp = 63;
-		} else if (*c == '\r' || *c == '\n') {
-			c++;
-			continue;
-		} else if (*c == '=') {
-			if (n == 3) {
-				out = g_realloc(out, len + 2);
-				out[len] = (guchar)(tmp2 >> 10) & 0xff;
-				len++;
-				out[len] = (guchar)(tmp2 >> 2) & 0xff;
-				len++;
-			} else if (n == 2) {
-				out = g_realloc(out, len + 1);
-				out[len] = (guchar)(tmp2 >> 4) & 0xff;
-				len++;
-			}
-			break;
-		}
-		tmp2 = ((tmp2 << 6) | (tmp & 0xff));
-		n++;
-		if (n == 4) {
-			out = g_realloc(out, len + 3);
-			out[len] = (guchar)((tmp2 >> 16) & 0xff);
-			len++;
-			out[len] = (guchar)((tmp2 >> 8) & 0xff);
-			len++;
-			out[len] = (guchar)(tmp2 & 0xff);
-			len++;
-			tmp2 = 0;
-			n = 0;
-		}
-		c++;
-	}
-
-	out = g_realloc(out, len + 1);
-	out[len] = 0;
-
-	if (ret_len != NULL)
-		*ret_len = len;
-
-	return out;
-#endif /* GLIB < 2.12.0 */
 }
 
 /**************************************************************************
@@ -2468,6 +2367,31 @@
 	return g_string_free(ret, FALSE);
 }
 
+char *purple_unescape_text(const char *in)
+{
+    GString *ret;
+    const char *c = in;
+
+    if (in == NULL)
+        return NULL;
+
+    ret = g_string_new("");
+    while (*c) {
+        int len;
+        const char *ent;
+
+        if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) {
+            g_string_append(ret, ent);
+            c += len;
+        } else {
+            g_string_append_c(ret, *c);
+            c++;
+        }
+    }
+
+    return g_string_free(ret, FALSE);
+}
+
 char *purple_unescape_html(const char *html)
 {
 	GString *ret;
@@ -2656,56 +2580,7 @@
 
 int purple_build_dir (const char *path, int mode)
 {
-#if GLIB_CHECK_VERSION(2,8,0)
 	return g_mkdir_with_parents(path, mode);
-#else
-	char *dir, **components, delim[] = { G_DIR_SEPARATOR, '\0' };
-	int cur, len;
-
-	g_return_val_if_fail(path != NULL, -1);
-
-	dir = g_new0(char, strlen(path) + 1);
-	components = g_strsplit(path, delim, -1);
-	len = 0;
-	for (cur = 0; components[cur] != NULL; cur++) {
-		/* If you don't know what you're doing on both
-		 * win32 and *NIX, stay the hell away from this code */
-		if(cur > 1)
-			dir[len++] = G_DIR_SEPARATOR;
-		strcpy(dir + len, components[cur]);
-		len += strlen(components[cur]);
-		if(cur == 0)
-			dir[len++] = G_DIR_SEPARATOR;
-
-		if(g_file_test(dir, G_FILE_TEST_IS_DIR)) {
-			continue;
-#ifdef _WIN32
-		/* allow us to create subdirs on UNC paths
-		 * (\\machinename\path\to\blah)
-		 * g_file_test() doesn't work on "\\machinename" */
-		} else if (cur == 2 && dir[0] == '\\' && dir[1] == '\\'
-				&& components[cur + 1] != NULL) {
-			continue;
-#endif
-		} else if(g_file_test(dir, G_FILE_TEST_EXISTS)) {
-			purple_debug_warning("build_dir", "bad path: %s\n", path);
-			g_strfreev(components);
-			g_free(dir);
-			return -1;
-		}
-
-		if (g_mkdir(dir, mode) < 0) {
-			purple_debug_warning("build_dir", "mkdir: %s\n", g_strerror(errno));
-			g_strfreev(components);
-			g_free(dir);
-			return -1;
-		}
-	}
-
-	g_strfreev(components);
-	g_free(dir);
-	return 0;
-#endif
 }
 
 /*
@@ -3218,30 +3093,13 @@
 gboolean
 purple_str_has_prefix(const char *s, const char *p)
 {
-#if GLIB_CHECK_VERSION(2,2,0)
 	return g_str_has_prefix(s, p);
-#else
-	g_return_val_if_fail(s != NULL, FALSE);
-	g_return_val_if_fail(p != NULL, FALSE);
-
-	return (!strncmp(s, p, strlen(p)));
-#endif
 }
 
 gboolean
 purple_str_has_suffix(const char *s, const char *x)
 {
-#if GLIB_CHECK_VERSION(2,2,0)
 	return g_str_has_suffix(s, x);
-#else
-	int off;
-
-	g_return_val_if_fail(s != NULL, FALSE);
-	g_return_val_if_fail(x != NULL, FALSE);
-
-	off = strlen(s) - strlen(x);
-	return (off >= 0 && purple_strequal(s + off, x));
-#endif
 }
 
 char *
@@ -5138,18 +4996,25 @@
 const gchar *
 purple_get_host_name(void)
 {
-#if GLIB_CHECK_VERSION(2,8,0)
 	return g_get_host_name();
-#else
-	static char hostname[256];
-	int ret = gethostname(hostname, sizeof(hostname));
-	hostname[sizeof(hostname) - 1] = '\0';
-
-	if (ret == -1 || hostname[0] == '\0') {
-		purple_debug_info("purple_get_host_name: ", "could not find host name");
-		return "localhost";
-	} else {
-		return hostname;
-	}
-#endif
 }
+
+gchar *
+purple_uuid_random(void)
+{
+	guint32 tmp, a, b;
+
+	tmp = g_random_int();
+	a = 0x4000 | (tmp & 0xFFF); /* 0x4000 to 0x4FFF */
+	tmp >>= 12;
+	b = ((1 << 3) << 12) | (tmp & 0x3FFF); /* 0x8000 to 0xBFFF */
+
+	tmp = g_random_int();
+
+	return g_strdup_printf("%08x-%04x-%04x-%04x-%04x%08x",
+			g_random_int(),
+			tmp & 0xFFFF,
+			a,
+			b,
+			(tmp >> 16) & 0xFFFF, g_random_int());
+}
--- a/libpurple/util.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/util.h	Thu Feb 18 21:38:43 2010 +0000
@@ -42,6 +42,7 @@
 typedef struct _PurpleKeyValuePair PurpleKeyValuePair;
 
 #include "account.h"
+#include "signals.h"
 #include "xmlnode.h"
 #include "notify.h"
 
@@ -515,16 +516,35 @@
 char *purple_markup_linkify(const char *str);
 
 /**
- * Unescapes HTML entities to their literal characters. Also translates
- * "<br>" to "\n".
- * For example "&amp;" is replaced by '&' and so on.
- * Actually only "&amp;", "&quot;", "&lt;" and "&gt;" are currently
- * supported.
+ * Unescapes HTML entities to their literal characters in the text.
+ * For example "&amp;" is replaced by '&' and so on.  Also converts
+ * numerical entities (e.g. "&#38;" is also '&').
+ *
+ * This function currently supports the following named entities:
+ *     "&amp;", "&lt;", "&gt;", "&copy;", "&quot;", "&reg;", "&apos;"
+ *
+ * purple_unescape_html() is similar, but also converts "<br>" into "\n".
+ *
+ * @param text The string in which to unescape any HTML entities
+ *
+ * @return The text with HTML entities literalized.  You must g_free
+ *         this string when finished with it.
+ *
+ * @see purple_unescape_html()
+ * @since 2.7.0
+ */
+char *purple_unescape_text(const char *text);
+
+/**
+ * Unescapes HTML entities to their literal characters and converts
+ * "<br>" to "\n".  See purple_unescape_text() for more details.
  *
  * @param html The string in which to unescape any HTML entities
  *
  * @return The text with HTML entities literalized.  You must g_free
  *         this string when finished with it.
+ *
+ * @see purple_unescape_text()
  */
 char *purple_unescape_html(const char *html);
 
@@ -1427,6 +1447,14 @@
  */
 const gchar *purple_get_host_name(void);
 
+/**
+ * Returns a type 4 (random) UUID
+ *
+ * @return A UUID, caller is responsible for freeing it
+ * @since 2.7.0
+ */
+gchar *purple_uuid_random(void);
+
 #ifdef __cplusplus
 }
 #endif
--- a/libpurple/win32/global.mak	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/win32/global.mak	Thu Feb 18 21:38:43 2010 +0000
@@ -12,7 +12,7 @@
 WIN32_DEV_TOP ?= $(PIDGIN_TREE_TOP)/../win32-dev
 ASPELL_TOP ?= $(WIN32_DEV_TOP)/aspell-dev-0-50-3-3
 GTKSPELL_TOP ?= $(WIN32_DEV_TOP)/gtkspell-2.0.11-daa1
-GTK_TOP ?= $(WIN32_DEV_TOP)/gtk_2_0
+GTK_TOP ?= $(WIN32_DEV_TOP)/gtk_2_0-2.14
 GTK_BIN ?= $(GTK_TOP)/bin
 BONJOUR_TOP ?= $(WIN32_DEV_TOP)/Bonjour_SDK
 LIBXML2_TOP ?= $(WIN32_DEV_TOP)/libxml2-2.6.30
--- a/libpurple/win32/libc_interface.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/win32/libc_interface.c	Thu Feb 18 21:38:43 2010 +0000
@@ -469,65 +469,7 @@
 /* stdio.h */
 
 int wpurple_rename (const char *oldname, const char *newname) {
-
-#if GLIB_CHECK_VERSION(2,8,5)
-
 	return g_rename(oldname, newname);
-
-#else
-
-	/* This is a ugly, but we still compile with 2.6.10 but use newer runtimes */
-	struct stat oldstat, newstat;
-
-	/* As of Glib 2.8.5, g_rename() uses MoveFileEx() with MOVEFILE_REPLACE_EXISTING to behave more sanely */
-	if (glib_check_version(2, 8, 5) == NULL) {
-		return g_rename(oldname, newname);
-	}
-
-	if(g_stat(oldname, &oldstat) == 0) {
-		/* newname exists */
-		if(g_stat(newname, &newstat) == 0) {
-			/* oldname is a dir */
-			if(S_ISDIR(oldstat.st_mode)) {
-				if(!S_ISDIR(newstat.st_mode)) {
-					return g_rename(oldname, newname);
-				}
-				/* newname is a dir */
-				else {
-					/* This is not quite right.. If newname is empty and
-					   is not a sub dir of oldname, newname should be
-					   deleted and oldname should be renamed.
-					*/
-					purple_debug(PURPLE_DEBUG_WARNING, "wpurple", "wpurple_rename does not behave here as it should\n");
-					return g_rename(oldname, newname);
-				}
-			}
-			/* oldname is not a dir */
-			else {
-				/* newname is a dir */
-				if(S_ISDIR(newstat.st_mode)) {
-					errno = EISDIR;
-					return -1;
-				}
-				/* newname is not a dir */
-				else {
-					g_remove(newname);
-					return g_rename(oldname, newname);
-				}
-			}
-		}
-		/* newname doesn't exist */
-		else
-			return g_rename(oldname, newname);
-	}
-	else {
-		/* oldname doesn't exist */
-		errno = ENOENT;
-		return -1;
-	}
-
-#endif
-
 }
 
 /* time.h */
@@ -1129,54 +1071,7 @@
 wpurple_g_access (const gchar *filename,
 	  int          mode)
 {
-#if GLIB_CHECK_VERSION(2,8,0)
-
 	return g_access(filename, mode);
-
-#else
-
-  if (G_WIN32_HAVE_WIDECHAR_API ())
-    {
-      wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
-      int retval;
-      int save_errno;
-
-      if (wfilename == NULL)
-	{
-	  errno = EINVAL;
-	  return -1;
-	}
-
-      retval = _waccess (wfilename, mode);
-      save_errno = errno;
-
-      g_free (wfilename);
-
-      errno = save_errno;
-      return retval;
-    }
-  else
-    {
-      gchar *cp_filename = g_locale_from_utf8 (filename, -1, NULL, NULL, NULL);
-      int retval;
-      int save_errno;
-
-      if (cp_filename == NULL)
-	{
-	  errno = EINVAL;
-	  return -1;
-	}
-
-      retval = access (cp_filename, mode);
-      save_errno = errno;
-
-      g_free (cp_filename);
-
-      errno = save_errno;
-      return retval;
-    }
-
-#endif
 }
 
 
--- a/libpurple/win32/libc_interface.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/win32/libc_interface.h	Thu Feb 18 21:38:43 2010 +0000
@@ -115,11 +115,6 @@
 #define close( fd ) \
 wpurple_close( fd )
 
-#if !GLIB_CHECK_VERSION(2,8,0)
-#define g_access( filename, mode) \
-wpurple_g_access( filename, mode )
-#endif
-
 #ifndef sleep
 #define sleep(x) Sleep((x)*1000)
 #endif
@@ -140,14 +135,12 @@
 #define rename( oldname, newname ) \
 wpurple_rename( oldname, newname )
 
-#if GLIB_CHECK_VERSION(2,6,0)
 #ifdef g_rename
 # undef g_rename
 #endif
 /* This is necessary because we want rename on win32 to be able to overwrite an existing file, it is done in internal.h if GLib < 2.6*/
 #define g_rename(oldname, newname) \
 wpurple_rename(oldname, newname)
-#endif
 
 /* sys/stat.h */
 #define fchmod(a,b)
--- a/libpurple/win32/libc_internal.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/win32/libc_internal.h	Thu Feb 18 21:38:43 2010 +0000
@@ -141,10 +141,6 @@
 int wpurple_gethostname(char *name, size_t size);
 
 
-#if !GLIB_CHECK_VERSION(2,8,0)
-int wpurple_g_access(const gchar *filename, int mode);
-#endif
-
 /* stdio.h */
 int wpurple_rename(const char *oldname, const char *newname);
 
--- a/libpurple/win32/libpurplerc.rc.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/win32/libpurplerc.rc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -18,7 +18,7 @@
         VALUE "FileDescription", "LibPurple Library"
         VALUE "FileVersion", "@PURPLE_VERSION@"
         VALUE "InternalName", "libpurple"
-        VALUE "LegalCopyright", "Copyright (C) 1998-2007 The Pidgin developer community (See the COPYRIGHT file in the source distribution)."
+        VALUE "LegalCopyright", "Copyright (C) 1998-2010 The Pidgin developer community (See the COPYRIGHT file in the source distribution)."
         VALUE "OriginalFilename", "libpurple.dll"
         VALUE "ProductName", "LibPurple"
         VALUE "ProductVersion", "@PURPLE_VERSION@"
--- a/libpurple/win32/targets.mak	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/win32/targets.mak	Thu Feb 18 21:38:43 2010 +0000
@@ -23,7 +23,7 @@
 
 $(PIDGIN_REVISION_H): $(PIDGIN_REVISION_RAW_TXT)
 	if [ -f $< ]; then \
-		sed 's/^\(.\+\)$$/#define REVISION "\1"/' $< > $@; \
+		sed 's/^\(.\{1,\}\)$$/#define REVISION "\1"/' $< > $@; \
 	fi
 	[ -f $@ ] || echo "#define REVISION \"unknown\"" > $@
 
--- a/libpurple/win32/win32dep.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/win32/win32dep.c	Thu Feb 18 21:38:43 2010 +0000
@@ -30,14 +30,6 @@
 #include "notify.h"
 
 /*
- *  DEFINES & MACROS
- */
-
-/* For shfolder.dll */
-typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHA)(HWND, int, HANDLE, DWORD, LPSTR);
-typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHW)(HWND, int, HANDLE, DWORD, LPWSTR);
-
-/*
  * LOCALS
  */
 static char *app_data_dir = NULL, *install_dir = NULL,
@@ -115,37 +107,12 @@
 
 /* Get paths to special Windows folders. */
 gchar *wpurple_get_special_folder(int folder_type) {
-	static LPFNSHGETFOLDERPATHA MySHGetFolderPathA = NULL;
-	static LPFNSHGETFOLDERPATHW MySHGetFolderPathW = NULL;
 	gchar *retval = NULL;
-
-	if (!MySHGetFolderPathW) {
-		MySHGetFolderPathW = (LPFNSHGETFOLDERPATHW)
-			wpurple_find_and_loadproc("shfolder.dll", "SHGetFolderPathW");
-	}
-
-	if (MySHGetFolderPathW) {
-		wchar_t utf_16_dir[MAX_PATH + 1];
+	wchar_t utf_16_dir[MAX_PATH + 1];
 
-		if (SUCCEEDED(MySHGetFolderPathW(NULL, folder_type, NULL,
-						SHGFP_TYPE_CURRENT, utf_16_dir))) {
-			retval = g_utf16_to_utf8(utf_16_dir, -1, NULL, NULL, NULL);
-		}
-	}
-
-	if (!retval) {
-		if (!MySHGetFolderPathA) {
-			MySHGetFolderPathA = (LPFNSHGETFOLDERPATHA)
-				wpurple_find_and_loadproc("shfolder.dll", "SHGetFolderPathA");
-		}
-		if (MySHGetFolderPathA) {
-			char locale_dir[MAX_PATH + 1];
-
-			if (SUCCEEDED(MySHGetFolderPathA(NULL, folder_type, NULL,
-							SHGFP_TYPE_CURRENT, locale_dir))) {
-				retval = g_locale_to_utf8(locale_dir, -1, NULL, NULL, NULL);
-			}
-		}
+	if (SUCCEEDED(SHGetFolderPathW(NULL, folder_type, NULL,
+					SHGFP_TYPE_CURRENT, utf_16_dir))) {
+		retval = g_utf16_to_utf8(utf_16_dir, -1, NULL, NULL, NULL);
 	}
 
 	return retval;
@@ -156,20 +123,11 @@
 
 	if (!initialized) {
 		char *tmp = NULL;
-		if (G_WIN32_HAVE_WIDECHAR_API()) {
-			wchar_t winstall_dir[MAXPATHLEN];
-			if (GetModuleFileNameW(NULL, winstall_dir,
-					MAXPATHLEN) > 0) {
-				tmp = g_utf16_to_utf8(winstall_dir, -1,
-					NULL, NULL, NULL);
-			}
-		} else {
-			gchar cpinstall_dir[MAXPATHLEN];
-			if (GetModuleFileNameA(NULL, cpinstall_dir,
-					MAXPATHLEN) > 0) {
-				tmp = g_locale_to_utf8(cpinstall_dir,
-					-1, NULL, NULL, NULL);
-			}
+		wchar_t winstall_dir[MAXPATHLEN];
+		if (GetModuleFileNameW(NULL, winstall_dir,
+				MAXPATHLEN) > 0) {
+			tmp = g_utf16_to_utf8(winstall_dir, -1,
+				NULL, NULL, NULL);
 		}
 
 		if (tmp == NULL) {
@@ -246,61 +204,33 @@
 	HKEY reg_key;
 	gboolean success = FALSE;
 
-	if(G_WIN32_HAVE_WIDECHAR_API()) {
-		wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
-			NULL, NULL);
-
-		if(RegOpenKeyExW(rootkey, wc_subkey, 0,
-				KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
-			wchar_t *wc_valname = NULL;
-
-			if (valname)
-				wc_valname = g_utf8_to_utf16(valname, -1,
-					NULL, NULL, NULL);
+	wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
+		NULL, NULL);
 
-			if(value) {
-				wchar_t *wc_value = g_utf8_to_utf16(value, -1,
-					NULL, NULL, NULL);
-				int len = (wcslen(wc_value) * sizeof(wchar_t)) + 1;
-				if(RegSetValueExW(reg_key, wc_valname, 0, REG_SZ,
-						(LPBYTE)wc_value, len
-						) == ERROR_SUCCESS)
-					success = TRUE;
-				g_free(wc_value);
-			} else
-				if(RegDeleteValueW(reg_key, wc_valname) ==  ERROR_SUCCESS)
-					success = TRUE;
+	if(RegOpenKeyExW(rootkey, wc_subkey, 0,
+			KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
+		wchar_t *wc_valname = NULL;
+
+		if (valname)
+			wc_valname = g_utf8_to_utf16(valname, -1,
+				NULL, NULL, NULL);
 
-			g_free(wc_valname);
-		}
-		g_free(wc_subkey);
-	} else {
-		char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL,
-			NULL, NULL);
-		if(RegOpenKeyExA(rootkey, cp_subkey, 0,
-				KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
-			char *cp_valname = NULL;
-			if(valname)
-				cp_valname = g_locale_from_utf8(valname, -1,
-					NULL, NULL, NULL);
+		if(value) {
+			wchar_t *wc_value = g_utf8_to_utf16(value, -1,
+				NULL, NULL, NULL);
+			int len = (wcslen(wc_value) * sizeof(wchar_t)) + 1;
+			if(RegSetValueExW(reg_key, wc_valname, 0, REG_SZ,
+					(LPBYTE)wc_value, len
+					) == ERROR_SUCCESS)
+				success = TRUE;
+			g_free(wc_value);
+		} else
+			if(RegDeleteValueW(reg_key, wc_valname) ==  ERROR_SUCCESS)
+				success = TRUE;
 
-			if (value) {
-				char *cp_value = g_locale_from_utf8(value, -1,
-					NULL, NULL, NULL);
-				int len = strlen(cp_value) + 1;
-				if(RegSetValueExA(reg_key, cp_valname, 0, REG_SZ,
-						cp_value, len
-						) == ERROR_SUCCESS)
-					success = TRUE;
-				g_free(cp_value);
-			} else
-				if(RegDeleteValueA(reg_key, cp_valname) ==  ERROR_SUCCESS)
-					success = TRUE;
-
-			g_free(cp_valname);
-		}
-		g_free(cp_subkey);
+		g_free(wc_valname);
 	}
+	g_free(wc_subkey);
 
 	if(reg_key != NULL)
 		RegCloseKey(reg_key);
@@ -312,17 +242,11 @@
 	HKEY reg_key = NULL;
 	LONG rv;
 
-	if(G_WIN32_HAVE_WIDECHAR_API()) {
-		wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
-			NULL, NULL);
-		rv = RegOpenKeyExW(rootkey, wc_subkey, 0, access, &reg_key);
-		g_free(wc_subkey);
-	} else {
-		char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL,
-			NULL, NULL);
-		rv = RegOpenKeyExA(rootkey, cp_subkey, 0, access, &reg_key);
-		g_free(cp_subkey);
-	}
+	wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
+		NULL, NULL);
+	rv = RegOpenKeyExW(rootkey, wc_subkey, 0, access, &reg_key);
+
+	g_free(wc_subkey);
 
 	if (rv != ERROR_SUCCESS) {
 		char *errmsg = g_win32_error_message(rv);
@@ -340,19 +264,11 @@
 static gboolean _reg_read(HKEY reg_key, const char *valname, LPDWORD type, LPBYTE data, LPDWORD data_len) {
 	LONG rv;
 
-	if(G_WIN32_HAVE_WIDECHAR_API()) {
-		wchar_t *wc_valname = NULL;
-		if (valname)
-			wc_valname = g_utf8_to_utf16(valname, -1, NULL, NULL, NULL);
-		rv = RegQueryValueExW(reg_key, wc_valname, 0, type, data, data_len);
-		g_free(wc_valname);
-	} else {
-		char *cp_valname = NULL;
-		if(valname)
-			cp_valname = g_locale_from_utf8(valname, -1, NULL, NULL, NULL);
-		rv = RegQueryValueExA(reg_key, cp_valname, 0, type, data, data_len);
-		g_free(cp_valname);
-	}
+	wchar_t *wc_valname = NULL;
+	if (valname)
+		wc_valname = g_utf8_to_utf16(valname, -1, NULL, NULL, NULL);
+	rv = RegQueryValueExW(reg_key, wc_valname, 0, type, data, data_len);
+	g_free(wc_valname);
 
 	if (rv != ERROR_SUCCESS) {
 		char *errmsg = g_win32_error_message(rv);
@@ -389,24 +305,13 @@
 
 	if(reg_key) {
 		if(_reg_read(reg_key, valname, &type, NULL, &nbytes) && type == REG_SZ) {
-			LPBYTE data;
-			if(G_WIN32_HAVE_WIDECHAR_API())
-				data = (LPBYTE) g_new(wchar_t, ((nbytes + 1) / sizeof(wchar_t)) + 1);
-			else
-				data = (LPBYTE) g_malloc(nbytes + 1);
+			LPBYTE data = (LPBYTE) g_new(wchar_t, ((nbytes + 1) / sizeof(wchar_t)) + 1);
 
 			if(_reg_read(reg_key, valname, &type, data, &nbytes)) {
-				if(G_WIN32_HAVE_WIDECHAR_API()) {
-					wchar_t *wc_temp = (wchar_t*) data;
-					wc_temp[nbytes / sizeof(wchar_t)] = '\0';
-					result = g_utf16_to_utf8(wc_temp, -1,
-						NULL, NULL, NULL);
-				} else {
-					char *cp_temp = (char*) data;
-					cp_temp[nbytes] = '\0';
-					result = g_locale_to_utf8(cp_temp, -1,
-						NULL, NULL, NULL);
-				}
+				wchar_t *wc_temp = (wchar_t*) data;
+				wc_temp[nbytes / sizeof(wchar_t)] = '\0';
+				result = g_utf16_to_utf8(wc_temp, -1,
+					NULL, NULL, NULL);
 			}
 			g_free(data);
 		}
--- a/libpurple/xmlnode.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/libpurple/xmlnode.c	Thu Feb 18 21:38:43 2010 +0000
@@ -590,7 +590,7 @@
 			int attrib_len = attributes[i+4] - attributes[i+3];
 			char *attrib = g_strndup((const char *)attributes[i+3], attrib_len);
 			txt = attrib;
-			attrib = purple_unescape_html(txt);
+			attrib = purple_unescape_text(txt);
 			g_free(txt);
 			xmlnode_set_attrib_full(node, name, NULL, prefix, attrib);
 			g_free(attrib);
--- a/pidgin/Makefile.am	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/Makefile.am	Thu Feb 18 21:38:43 2010 +0000
@@ -48,6 +48,7 @@
 		win32/nsis/translations/kurdish.nsh \
 		win32/nsis/translations/lithuanian.nsh \
 		win32/nsis/translations/norwegian.nsh \
+		win32/nsis/translations/norwegian_nynorsk.nsh \
 		win32/nsis/translations/persian.nsh \
 		win32/nsis/translations/polish.nsh \
 		win32/nsis/translations/portuguese.nsh \
@@ -74,17 +75,12 @@
 
 pidgin_SOURCES = \
 	eggtrayicon.c \
-	pidgincombobox.c \
 	pidginstock.c \
 	gtkaccount.c \
 	gtkblist.c \
 	gtkblist-theme.c \
 	gtkblist-theme-loader.c \
-	gtkcelllayout.c \
 	gtkcellrendererexpander.c \
-	gtkcellrendererprogress.c \
-	gtkcellview.c \
-	gtkcellviewmenuitem.c \
 	gtkcertmgr.c \
 	gtkconn.c \
 	gtkconv.c \
@@ -92,9 +88,9 @@
 	gtkdialogs.c \
 	gtkdnd-hints.c \
 	gtkdocklet.c \
+	gtkdocklet-gtk.c \
 	gtkdocklet-x11.c \
 	gtkeventloop.c \
-	gtkexpander.c \
 	gtkft.c \
 	gtkicon-theme.c \
 	gtkicon-theme-loader.c \
@@ -135,13 +131,8 @@
 	gtkblist.h \
 	gtkblist-theme.h \
 	gtkblist-theme-loader.h \
-	gtkcelllayout.h \
 	gtkcellrendererexpander.h \
-	gtkcellrendererprogress.h \
-	gtkcellview.h \
-	gtkcellviewmenuitem.h \
 	gtkcertmgr.h \
-	pidgincombobox.h \
 	gtkconn.h \
 	gtkconv.h \
 	gtkconvwin.h \
@@ -150,7 +141,6 @@
 	gtkdnd-hints.h \
 	gtkdocklet.h \
 	gtkeventloop.h \
-	gtkexpander.h \
 	gtkft.h \
 	gtkicon-theme.h \
 	gtkicon-theme-loader.h \
--- a/pidgin/Makefile.mingw	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/Makefile.mingw	Thu Feb 18 21:38:43 2010 +0000
@@ -61,7 +61,6 @@
 			gtkblist-theme.c \
 			gtkblist.c \
 			gtkcellrendererexpander.c \
-			gtkcellrendererprogress.c \
 			gtkcertmgr.c \
 			gtkconn.c \
 			gtkconv.c \
@@ -70,7 +69,6 @@
 			gtkdnd-hints.c \
 			gtkdocklet.c \
 			gtkeventloop.c \
-			gtkexpander.c \
 			gtkft.c \
 			gtkicon-theme-loader.c \
 			gtkicon-theme.c \
--- a/pidgin/gtkaccount.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkaccount.c	Thu Feb 18 21:38:43 2010 +0000
@@ -474,9 +474,7 @@
 
 	/* Username */
 	dialog->username_entry = gtk_entry_new();
-#if GTK_CHECK_VERSION(2,10,0)
 	g_object_set(G_OBJECT(dialog->username_entry), "truncate-multiline", TRUE, NULL);
-#endif
 
 	add_pref_box(dialog, vbox, _("_Username:"), dialog->username_entry);
 
@@ -2081,25 +2079,12 @@
 	return ret;
 }
 
-#if !GTK_CHECK_VERSION(2,2,0)
-static void
-get_selected_helper(GtkTreeModel *model, GtkTreePath *path,
-					GtkTreeIter *iter, gpointer user_data)
-{
-	*((gboolean *)user_data) = TRUE;
-}
-#endif
-
 static void
 account_selected_cb(GtkTreeSelection *sel, AccountsWindow *dialog)
 {
 	gboolean selected = FALSE;
 
-#if GTK_CHECK_VERSION(2,2,0)
 	selected = (gtk_tree_selection_count_selected_rows(sel) > 0);
-#else
-	gtk_tree_selection_selected_foreach(sel, get_selected_helper, &selected);
-#endif
 
 	gtk_widget_set_sensitive(dialog->modify_button, selected);
 	gtk_widget_set_sensitive(dialog->delete_button, selected);
--- a/pidgin/gtkblist.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkblist.c	Thu Feb 18 21:38:43 2010 +0000
@@ -137,13 +137,9 @@
 static struct pidgin_blist_sort_method *current_sort_method = NULL;
 static void sort_method_none(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter);
 
-/* The functions we use for sorting aren't available in gtk 2.0.x, and
- * segfault in 2.2.0.  2.2.1 is known to work, so I'll require that */
-#if GTK_CHECK_VERSION(2,2,1)
 static void sort_method_alphabetical(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter);
 static void sort_method_status(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter);
 static void sort_method_log_activity(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter);
-#endif
 static PidginBuddyList *gtkblist = NULL;
 
 static GList *groups_tree(void);
@@ -201,7 +197,6 @@
 
 static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data)
 {
-#if GTK_CHECK_VERSION(2,2,0)
 	if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) {
 		if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN)
 			purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE);
@@ -223,28 +218,6 @@
 		if (!(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED))
 			pidgin_blist_refresh_timer(purple_get_blist());
 	}
-#else
-	/* At least gtk+ 2.0.6 does not properly set the change_mask when unsetting a
-	 * GdkWindowState flag. To work around, the window state will be explicitly
-	 * queried on these older versions of gtk+. See pidgin ticket #739.
-	 */
-	GdkWindowState new_window_state = gdk_window_get_state(G_OBJECT(gtkblist->window->window));
-
-	if(new_window_state & GDK_WINDOW_STATE_WITHDRAWN) {
-		purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE);
-	} else {
-		purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", TRUE);
-		pidgin_blist_refresh_timer(purple_get_blist());
-	}
-
-	if(new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
-		purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", TRUE);
-	else
-		purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", FALSE);
-
-	if (!(new_window_state & GDK_WINDOW_STATE_ICONIFIED))
-		pidgin_blist_refresh_timer(purple_get_blist());
-#endif
 
 	return FALSE;
 }
@@ -434,7 +407,6 @@
 	gtk_blist_join_chat(chat);
 }
 
-#if GTK_CHECK_VERSION(2,6,0)
 static void gtk_blist_renderer_editing_cancelled_cb(GtkCellRenderer *renderer, PurpleBuddyList *list)
 {
 	editing_blist = FALSE;
@@ -483,7 +455,6 @@
 	}
 	editing_blist = TRUE;
 }
-#endif
 
 static void
 gtk_blist_do_personize(GList *merges)
@@ -763,12 +734,8 @@
 	g_object_set(G_OBJECT(gtkblist->text_rend), "editable", TRUE, NULL);
 	gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), FALSE);
 	gtk_widget_grab_focus(gtkblist->treeview);
-#if GTK_CHECK_VERSION(2,2,0)
 	gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(gtkblist->treeview), path,
 			gtkblist->text_column, gtkblist->text_rend, TRUE);
-#else
-	gtk_tree_view_set_cursor(GTK_TREE_VIEW(gtkblist->treeview), path, gtkblist->text_column, TRUE);
-#endif
 	gtk_tree_path_free(path);
 }
 
@@ -1241,9 +1208,9 @@
 
 		purple_blist_node_set_bool(node, "collapsed", TRUE);
 
-		for(cnode = node->child; cnode; cnode = cnode->next) {
+		for(cnode = purple_blist_node_get_first_child(node); cnode; cnode = purple_blist_node_get_sibling_next(cnode)) {
 			if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) {
-				gtknode = cnode->ui_data;
+				gtknode = purple_blist_node_get_ui_data(cnode);
 				if (!gtknode->contact_expanded)
 					continue;
 				gtknode->contact_expanded = FALSE;
@@ -1275,7 +1242,7 @@
 		else
 			buddy = (PurpleBuddy*)node;
 
-		pidgin_dialogs_im_with_user(buddy->account, buddy->name);
+		pidgin_dialogs_im_with_user(purple_buddy_get_account(buddy), purple_buddy_get_name(buddy));
 	} else if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
 		gtk_blist_join_chat((PurpleChat *)node);
 	} else if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
@@ -1295,9 +1262,9 @@
 	if(gtk_tree_selection_get_selected(sel, NULL, &iter)){
 		gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
 		if (PURPLE_BLIST_NODE_IS_BUDDY(node))
-			purple_blist_request_add_chat(NULL, (PurpleGroup*)node->parent->parent, NULL, NULL);
+			purple_blist_request_add_chat(NULL, purple_buddy_get_group(PURPLE_BUDDY(node)), NULL, NULL);
 		if (PURPLE_BLIST_NODE_IS_CONTACT(node) || PURPLE_BLIST_NODE_IS_CHAT(node))
-			purple_blist_request_add_chat(NULL, (PurpleGroup*)node->parent, NULL, NULL);
+			purple_blist_request_add_chat(NULL, purple_contact_get_group(PURPLE_CONTACT(node)), NULL, NULL);
 		else if (PURPLE_BLIST_NODE_IS_GROUP(node))
 			purple_blist_request_add_chat(NULL, (PurpleGroup*)node, NULL, NULL);
 	}
@@ -1315,13 +1282,13 @@
 	if(gtk_tree_selection_get_selected(sel, NULL, &iter)){
 		gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
 		if (PURPLE_BLIST_NODE_IS_BUDDY(node)) {
-			purple_blist_request_add_buddy(NULL, NULL, ((PurpleGroup*)node->parent->parent)->name,
-					NULL);
-		} else if (PURPLE_BLIST_NODE_IS_CONTACT(node)
-				|| PURPLE_BLIST_NODE_IS_CHAT(node)) {
-			purple_blist_request_add_buddy(NULL, NULL, ((PurpleGroup*)node->parent)->name, NULL);
+			PurpleGroup *group = purple_buddy_get_group(PURPLE_BUDDY(node));
+			purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(group), NULL);
+		} else if (PURPLE_BLIST_NODE_IS_CONTACT(node) || PURPLE_BLIST_NODE_IS_CHAT(node)) {
+			PurpleGroup *group = purple_contact_get_group(PURPLE_CONTACT(node));
+			purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(group), NULL);
 		} else if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
-			purple_blist_request_add_buddy(NULL, NULL, ((PurpleGroup*)node)->name, NULL);
+			purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(PURPLE_GROUP(node)), NULL);
 		}
 	}
 	else {
@@ -1373,11 +1340,11 @@
 	if(!PURPLE_BLIST_NODE_IS_CONTACT(node))
 		return;
 
-	gtknode = (struct _pidgin_blist_node *)node->ui_data;
+	gtknode = purple_blist_node_get_ui_data(node);
 
 	gtknode->contact_expanded = TRUE;
 
-	for(bnode = node->child; bnode; bnode = bnode->next) {
+	for(bnode = purple_blist_node_get_first_child(node); bnode; bnode = purple_blist_node_get_sibling_next(bnode)) {
 		pidgin_blist_update(NULL, bnode);
 	}
 
@@ -1392,7 +1359,7 @@
 		/* Let the treeview draw so it knows where to scroll */
 		ex->treeview = GTK_TREE_VIEW(gtkblist->treeview);
 		ex->path = path;
-		ex->node = node->child;
+		ex->node = purple_blist_node_get_first_child(node);
 		g_idle_add(scroll_to_expanded_cell, ex);
 	}
 }
@@ -1406,11 +1373,11 @@
 	if(!PURPLE_BLIST_NODE_IS_CONTACT(node))
 		return;
 
-	gtknode = (struct _pidgin_blist_node *)node->ui_data;
+	gtknode = purple_blist_node_get_ui_data(node);
 
 	gtknode->contact_expanded = FALSE;
 
-	for(bnode = node->child; bnode; bnode = bnode->next) {
+	for(bnode = purple_blist_node_get_first_child(node); bnode; bnode = purple_blist_node_get_sibling_next(bnode)) {
 		pidgin_blist_update(NULL, bnode);
 	}
 }
@@ -1501,10 +1468,10 @@
 	submenu = gtk_menu_new();
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
 
-	for (group = purple_blist_get_root(); group; group = group->next) {
-		if (group->type != PURPLE_BLIST_GROUP_NODE)
+	for (group = purple_blist_get_root(); group; group = purple_blist_node_get_sibling_next(group)) {
+		if (!PURPLE_BLIST_NODE_IS_GROUP(group))
 			continue;
-		if (group == node->parent)
+		if (group == purple_blist_node_get_parent(node))
 			continue;
 		menuitem = pidgin_new_item_from_stock(submenu, purple_group_get_name((PurpleGroup *)group), NULL,
 						      G_CALLBACK(gtk_blist_menu_move_to_cb), node, 0, 0, NULL);
@@ -1515,6 +1482,8 @@
 
 void
 pidgin_blist_make_buddy_menu(GtkWidget *menu, PurpleBuddy *buddy, gboolean sub) {
+	PurpleAccount *account = NULL;
+	PurpleConnection *pc = NULL;
 	PurplePluginProtocolInfo *prpl_info;
 	PurpleContact *contact;
 	PurpleBlistNode *node;
@@ -1523,13 +1492,16 @@
 	g_return_if_fail(menu);
 	g_return_if_fail(buddy);
 
-	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(buddy->account->gc->prpl);
-
-	node = (PurpleBlistNode*)buddy;
+	account = purple_buddy_get_account(buddy);
+	pc = purple_account_get_connection(account);
+	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(pc));
+
+	node = PURPLE_BLIST_NODE(buddy);
 
 	contact = purple_buddy_get_contact(buddy);
 	if (contact) {
-		contact_expanded = ((struct _pidgin_blist_node *)(((PurpleBlistNode*)contact)->ui_data))->contact_expanded;
+		PidginBlistNode *node = purple_blist_node_get_ui_data(PURPLE_BLIST_NODE(contact));
+		contact_expanded = node->contact_expanded;
 	}
 
 	if (prpl_info && prpl_info->get_info) {
@@ -3065,7 +3037,6 @@
 						current_height-1,td->avatar_width+2, td->avatar_height+2);
 		}
 
-#if GTK_CHECK_VERSION(2,2,0)
 		if (td->status_icon) {
 			if (dir == GTK_TEXT_DIR_RTL)
 				gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon,
@@ -3092,16 +3063,6 @@
 					current_height + ((td->name_height / 2) - (PRPL_SIZE / 2)),
 					-1 , -1, GDK_RGB_DITHER_NONE, 0, 0);
 
-#else
-		if (td->status_icon) {
-			gdk_pixbuf_render_to_drawable(td->status_icon, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 12, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
-		}
-		if(td->avatar)
-			gdk_pixbuf_render_to_drawable(td->avatar,
-					GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0,
-					max_width - (td->avatar_width + TOOLTIP_BORDER),
-					current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
-#endif
 		if (td->name_layout) {
 			if (dir == GTK_TEXT_DIR_RTL) {
 				gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
@@ -3480,12 +3441,13 @@
 	/* Help */
 	{ N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL },
 	{ N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP },
+	{ "/Help/sep1", NULL, NULL, 0, "<Separator>", NULL },
+	{ N_("/Help/_Build Information"), NULL, pidgin_dialogs_buildinfo, 0, "<Item>", NULL },
 	{ N_("/Help/_Debug Window"), NULL, toggle_debug, 0, "<Item>", NULL },
-#if GTK_CHECK_VERSION(2,6,0)
+	{ N_("/Help/De_veloper Information"), NULL, pidgin_dialogs_developers, 0, "<Item>", NULL },
+	{ N_("/Help/_Translator Information"), NULL, pidgin_dialogs_translators, 0, "<Item>", NULL },
+	{ "/Help/sep2", NULL, NULL, 0, "<Separator>", NULL },
 	{ N_("/Help/_About"), NULL, pidgin_dialogs_about, 4,  "<StockItem>", GTK_STOCK_ABOUT },
-#else
-	{ N_("/Help/_About"), NULL, pidgin_dialogs_about, 4,  "<Item>", NULL },
-#endif
 };
 
 /*********************************************************
@@ -4114,44 +4076,11 @@
 				g_free(tmp);
 				tmp = new;
 			}
-			/* add ... to messages that are too long, GTK 2.6+ does it automatically */
-#if !GTK_CHECK_VERSION(2,6,0)
-			if(tmp) {
-				char buf[32];
-				char *c = tmp;
-				int length = 0, vis=0;
-				gboolean inside = FALSE;
-				g_strdelimit(tmp, "\n", ' ');
-				purple_str_strip_char(tmp, '\r');
-
-				while(*c && vis < 20) {
-					if(*c == '&')
-						inside = TRUE;
-					else if(*c == ';')
-						inside = FALSE;
-					if(!inside)
-						vis++;
-					c = g_utf8_next_char(c); /* this is fun */
-				}
-
-				length = c - tmp;
-
-				if(vis == 20)
-					g_snprintf(buf, sizeof(buf), "%%.%ds...", length);
-				else
-					g_snprintf(buf, sizeof(buf), "%%s ");
-
-				statustext = g_strdup_printf(buf, tmp);
-
-				g_free(tmp);
-			}
-#else
 			if(tmp) {
 				g_strdelimit(tmp, "\n", ' ');
 				purple_str_strip_char(tmp, '\r');
 			}
 			statustext = tmp;
-#endif
 		}
 
 		if(!purple_presence_is_online(presence) && !statustext)
@@ -4710,11 +4639,9 @@
 	const char *id;
 
 	pidgin_blist_sort_method_reg("none", _("Manually"), sort_method_none);
-#if GTK_CHECK_VERSION(2,2,1)
 	pidgin_blist_sort_method_reg("alphabetical", _("Alphabetically"), sort_method_alphabetical);
 	pidgin_blist_sort_method_reg("status", _("By status"), sort_method_status);
 	pidgin_blist_sort_method_reg("log_size", _("By recent log activity"), sort_method_log_activity);
-#endif
 
 	id = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/blist/sort_type");
 	if (id == NULL) {
@@ -4738,9 +4665,7 @@
 	}
 
 	redo_buddy_list(purple_get_blist(), FALSE, FALSE);
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_tree_view_columns_autosize(GTK_TREE_VIEW(gtkblist->treeview));
-#endif
 
 	if (node)
 	{
@@ -4776,11 +4701,7 @@
 
 	/* this is far too ugly thanks to me not wanting to fix #3989 properly right now */
 	if (priv->error_scrollbook != NULL) {
-#if GTK_CHECK_VERSION(2,2,0)
 		errors = gtk_notebook_get_n_pages(GTK_NOTEBOOK(priv->error_scrollbook->notebook));
-#else
-		errors = g_list_length(GTK_NOTEBOOK(priv->error_scrollbook->notebook)->children);
-#endif
 	}
 	if ((list = purple_accounts_get_all_active()) != NULL || errors) {
 		gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkblist->notebook), 1);
@@ -4857,23 +4778,11 @@
 	gdk_window_set_cursor(widget->window, gtkblist->hand_cursor);
 
 	if (gtkblist->headline_close) {
-#if GTK_CHECK_VERSION(2,2,0)
 		gdk_draw_pixbuf(widget->window, NULL, gtkblist->headline_close,
-#else
-		gdk_pixbuf_render_to_drawable(gtkblist->headline_close,
-				GDK_DRAWABLE(widget->window), NULL,
-#endif
 					0, 0,
 					widget->allocation.width - 2 - HEADLINE_CLOSE_SIZE, 2,
 					HEADLINE_CLOSE_SIZE, HEADLINE_CLOSE_SIZE,
 					GDK_RGB_DITHER_NONE, 0, 0);
-#if 0
-		/* The presence of one opening paren in each branch of
-		 * GTK_CHECK_VERSION confuses vim's bracket matching for the
-		 * rest of the file.
-		 */
-		)
-#endif
 		gtk_paint_focus(widget->style, widget->window, GTK_STATE_PRELIGHT,
 				NULL, widget, NULL,
 				widget->allocation.width - HEADLINE_CLOSE_SIZE - 3, 1,
@@ -5232,9 +5141,7 @@
 	gtk_label_set_markup(GTK_LABEL(label), markup);
 	g_free(markup);
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-#if GTK_CHECK_VERSION(2,6,0)
 	g_object_set(G_OBJECT(label), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 #if GTK_CHECK_VERSION(2,12,0)
 	{ /* avoid unused variable warnings on pre-2.12 Gtk */
 		char *description =
@@ -5437,12 +5344,7 @@
 		return;
 
 	tooltips = gtk_tooltips_new ();
-#if GLIB_CHECK_VERSION(2,10,0)
 	g_object_ref_sink (tooltips);
-#else
-	g_object_ref(tooltips);
-	gtk_object_sink(GTK_OBJECT(tooltips));
-#endif
 
 	gtk_tooltips_force_window (tooltips);
 #if GTK_CHECK_VERSION(2, 12, 0)
@@ -5550,10 +5452,8 @@
 	gtk_tree_view_column_set_attributes(column, rend,
 					    "visible", GROUP_EXPANDER_VISIBLE_COLUMN,
 					    "expander-visible", GROUP_EXPANDER_COLUMN,
-#if GTK_CHECK_VERSION(2,6,0)
 					    "sensitive", GROUP_EXPANDER_COLUMN,
 					    "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 					    NULL);
 
 	/* contact */
@@ -5562,10 +5462,8 @@
 	gtk_tree_view_column_set_attributes(column, rend,
 					    "visible", CONTACT_EXPANDER_VISIBLE_COLUMN,
 					    "expander-visible", CONTACT_EXPANDER_COLUMN,
-#if GTK_CHECK_VERSION(2,6,0)
 					    "sensitive", CONTACT_EXPANDER_COLUMN,
 					    "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 					    NULL);
 
 	for (i = 0; i < 5; i++) {
@@ -5577,9 +5475,7 @@
 			gtk_tree_view_column_set_attributes(column, rend,
 							    "pixbuf", STATUS_ICON_COLUMN,
 							    "visible", STATUS_ICON_VISIBLE_COLUMN,
-#if GTK_CHECK_VERSION(2,6,0)
 							    "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 							    NULL);
 			g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL);
 
@@ -5588,20 +5484,14 @@
 			gtkblist->text_rend = rend = gtk_cell_renderer_text_new();
 			gtk_tree_view_column_pack_start(column, rend, TRUE);
 			gtk_tree_view_column_set_attributes(column, rend,
-#if GTK_CHECK_VERSION(2,6,0)
 							    "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 							    "markup", NAME_COLUMN,
 							    NULL);
-#if GTK_CHECK_VERSION(2,6,0)
 			g_signal_connect(G_OBJECT(rend), "editing-started", G_CALLBACK(gtk_blist_renderer_editing_started_cb), NULL);
 			g_signal_connect(G_OBJECT(rend), "editing-canceled", G_CALLBACK(gtk_blist_renderer_editing_cancelled_cb), list);
-#endif
 			g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), list);
 			g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL);
-#if GTK_CHECK_VERSION(2,6,0)
 			g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 			/* idle */
 			rend = gtk_cell_renderer_text_new();
@@ -5610,9 +5500,7 @@
 			gtk_tree_view_column_set_attributes(column, rend,
 							    "markup", IDLE_COLUMN,
 							    "visible", IDLE_VISIBLE_COLUMN,
-#if GTK_CHECK_VERSION(2,6,0)
 							    "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 							    NULL);
 		} else if (emblem == i) {
 			/* emblem */
@@ -5620,9 +5508,7 @@
 			g_object_set(rend, "xalign", 1.0, "yalign", 0.5, "ypad", 0, "xpad", 3, NULL);
 			gtk_tree_view_column_pack_start(column, rend, FALSE);
 			gtk_tree_view_column_set_attributes(column, rend, "pixbuf", EMBLEM_COLUMN,
-#if GTK_CHECK_VERSION(2,6,0)
 									  "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 									  "visible", EMBLEM_VISIBLE_COLUMN, NULL);
 
 		} else if (protocol_icon == i) {
@@ -5632,9 +5518,7 @@
 			gtk_tree_view_column_set_attributes(column, rend,
 							   "pixbuf", PROTOCOL_ICON_COLUMN,
 							   "visible", PROTOCOL_ICON_VISIBLE_COLUMN,
-#if GTK_CHECK_VERSION(2,6,0)
 							   "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 							  NULL);
 			g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL);
 
@@ -5644,9 +5528,7 @@
 			g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL);
 			gtk_tree_view_column_pack_start(column, rend, FALSE);
 			gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN,
-#if GTK_CHECK_VERSION(2,6,0)
 							    "cell-background-gdk", BGCOLOR_COLUMN,
-#endif
 							    "visible", BUDDY_ICON_VISIBLE_COLUMN,
 							    NULL);
 		}
@@ -6833,9 +6715,6 @@
 			return;
 	}
 
-#if !GTK_CHECK_VERSION(2,6,0)
-	gtk_tree_view_columns_autosize(GTK_TREE_VIEW(gtkblist->treeview));
-#endif
 }
 
 static void pidgin_blist_destroy(PurpleBuddyList *list)
@@ -7634,8 +7513,6 @@
 			sibling ? &sibling_iter : NULL);
 }
 
-#if GTK_CHECK_VERSION(2,2,1)
-
 static void sort_method_alphabetical(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter)
 {
 	GtkTreeIter more_z;
@@ -7879,8 +7756,6 @@
 	}
 }
 
-#endif
-
 static void
 plugin_act(GtkObject *obj, PurplePluginAction *pam)
 {
--- a/pidgin/gtkblist.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkblist.h	Thu Feb 18 21:38:43 2010 +0000
@@ -132,9 +132,9 @@
 	gpointer priv;                   /**< Pointer to opaque private data */
 };
 
-#define PIDGIN_BLIST(list) ((PidginBuddyList *)(list)->ui_data)
+#define PIDGIN_BLIST(list) ((PidginBuddyList *)purple_blist_get_ui_data())
 #define PIDGIN_IS_PIDGIN_BLIST(list) \
-	((list)->ui_ops == pidgin_blist_get_ui_ops())
+	(purple_blist_get_ui_ops() == pidgin_blist_get_ui_ops())
 
 /**************************************************************************
  * @name GTK+ Buddy List API
@@ -196,11 +196,14 @@
 void pidgin_blist_update_refresh_timeout(void);
 
 /**
- * Returns the blist emblem
+ * Returns the blist emblem.
+ *
+ * This may be an existing pixbuf that has been given an additional ref,
+ * so it shouldn't be modified.
  *
  * @param node   The node to return an emblem for
  *
- * @return  A newly created GdkPixbuf, or NULL
+ * @return  A GdkPixbuf for the emblem to show, or NULL
  */
 GdkPixbuf *
 pidgin_blist_get_emblem(PurpleBlistNode *node);
--- a/pidgin/gtkcelllayout.c	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,283 +0,0 @@
-/* gtkcelllayout.c
- * Copyright (C) 2003  Kristian Rietveld  <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-/*
-#include <config.h>
-*/
-#include <gtk/gtkversion.h>
-#if !GTK_CHECK_VERSION(2,4,0)
-#include "gtkcelllayout.h"
-
-GType
-gtk_cell_layout_get_type (void)
-{
-  static GType cell_layout_type = 0;
-
-  if (! cell_layout_type)
-    {
-      static const GTypeInfo cell_layout_info =
-      {
-        sizeof (GtkCellLayoutIface),
-        NULL,
-        NULL,
-        NULL,
-        NULL,
-        NULL,
-        0,
-        0,
-        NULL
-      };
-
-      cell_layout_type =
-        g_type_register_static (G_TYPE_INTERFACE, "PidginCellLayout",
-                                &cell_layout_info, 0);
-
-      g_type_interface_add_prerequisite (cell_layout_type, G_TYPE_OBJECT);
-    }
-
-  return cell_layout_type;
-}
-
-/**
- * gtk_cell_layout_pack_start:
- * @cell_layout: A #GtkCellLayout.
- * @cell: A #GtkCellRenderer.
- * @expand: %TRUE if @cell is to be given extra space allocated to @cell_layout.
- *
- * Packs the @cell into the beginning of @cell_layout. If @expand is %FALSE,
- * then the @cell is allocated no more space than it needs. Any unused space
- * is divided evenly between cells for which @expand is %TRUE.
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_pack_start (GtkCellLayout   *cell_layout,
-                            GtkCellRenderer *cell,
-                            gboolean         expand)
-{
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->pack_start) (cell_layout,
-                                                           cell,
-                                                           expand);
-}
-
-/**
- * gtk_cell_layout_pack_end:
- * @cell_layout: A #GtkCellLayout.
- * @cell: A #GtkCellRenderer.
- * @expand: %TRUE if @cell is to be given extra space allocated to @cell_layout.
- *
- * Adds the @cell to the end of @cell_layout. If @expand is %FALSE, then the
- * @cell is allocated no more space than it needs. Any unused space is
- * divided evenly between cells for which @expand is %TRUE.
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_pack_end (GtkCellLayout   *cell_layout,
-                          GtkCellRenderer *cell,
-                          gboolean         expand)
-{
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->pack_end) (cell_layout,
-                                                         cell,
-                                                         expand);
-}
-
-/**
- * gtk_cell_layout_clear:
- * @cell_layout: A #GtkCellLayout.
- *
- * Unsets all the mappings on all renderers on @cell_layout and
- * removes all renderers from @cell_layout.
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_clear (GtkCellLayout *cell_layout)
-{
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-
-  (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->clear) (cell_layout);
-}
-
-static void
-gtk_cell_layout_set_attributesv (GtkCellLayout   *cell_layout,
-                                 GtkCellRenderer *cell,
-                                 va_list          args)
-{
-  gchar *attribute;
-  gint column;
-  GtkCellLayoutIface *iface;
-
-  attribute = va_arg (args, gchar *);
-
-  iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
-
-  (* iface->clear_attributes) (cell_layout, cell);
-
-  while (attribute != NULL)
-    {
-      column = va_arg (args, gint);
-      (* iface->add_attribute) (cell_layout, cell, attribute, column);
-      attribute = va_arg (args, gchar *);
-    }
-}
-
-/**
- * gtk_cell_layout_set_attributes:
- * @cell_layout: A #GtkCellLayout.
- * @cell: A #GtkCellRenderer.
- * @Varargs: A %NULL-terminated list of attributes.
- *
- * Sets the attributes in list as the attributes of @cell_layout. The
- * attributes should be in attribute/column order, as in
- * gtk_cell_layout_add_attribute(). All existing attributes are removed, and
- * replaced with the new attributes.
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_set_attributes (GtkCellLayout   *cell_layout,
-                                GtkCellRenderer *cell,
-                                ...)
-{
-  va_list args;
-
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  va_start (args, cell);
-  gtk_cell_layout_set_attributesv (cell_layout, cell, args);
-  va_end (args);
-}
-
-/**
- * gtk_cell_layout_add_attribute:
- * @cell_layout: A #GtkCellLayout.
- * @cell: A #GtkCellRenderer.
- * @attribute: An attribute on the renderer.
- * @column: The column position on the model to get the attribute from.
- *
- * Adds an attribute mapping to the list in @cell_layout. The @column is the
- * column of the model to get a value from, and the @attribute is the
- * parameter on @cell to be set from the value. So for example if column 2
- * of the model contains strings, you could have the "text" attribute of a
- * #GtkCellRendererText get its values from column 2.
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_add_attribute (GtkCellLayout   *cell_layout,
-                               GtkCellRenderer *cell,
-                               const gchar     *attribute,
-                               gint             column)
-{
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-  g_return_if_fail (attribute != NULL);
-  g_return_if_fail (column >= 0);
-
-  (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->add_attribute) (cell_layout,
-                                                              cell,
-                                                              attribute,
-                                                              column);
-}
-
-/**
- * gtk_cell_layout_set_cell_data_func:
- * @cell_layout: A #GtkCellLayout.
- * @cell: A #GtkCellRenderer.
- * @func: The #GtkCellLayoutDataFunc to use.
- * @func_data: The user data for @func.
- * @destroy: The destroy notification for @func_data.
- *
- * Sets the #GtkCellLayoutDataFunc to use for @cell_layout. This function
- * is used instead of the standard attributes mapping for setting the
- * column value, and should set the value of @cell_layout's cell renderer(s)
- * as appropriate. @func may be %NULL to remove and older one.
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_set_cell_data_func (GtkCellLayout         *cell_layout,
-                                    GtkCellRenderer       *cell,
-                                    GtkCellLayoutDataFunc  func,
-                                    gpointer               func_data,
-                                    GDestroyNotify         destroy)
-{
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->set_cell_data_func) (cell_layout,
-                                                                   cell,
-                                                                   func,
-                                                                   func_data,
-                                                                   destroy);
-}
-
-/**
- * gtk_cell_layout_clear_attributes:
- * @cell_layout: A #GtkCellLayout.
- * @cell: A #GtkCellRenderer to clear the attribute mapping on.
- *
- * Clears all existing attributes previously set with
- * gtk_cell_layout_set_attributes().
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_clear_attributes (GtkCellLayout   *cell_layout,
-                                  GtkCellRenderer *cell)
-{
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->clear_attributes) (cell_layout,
-                                                                 cell);
-}
-
-/**
- * gtk_cell_layout_reorder:
- * @cell_layout: A #GtkCellLayout.
- * @cell: A #GtkCellRenderer to reorder.
- * @position: New position to insert @cell at.
- *
- * Re-inserts @cell at @position. Note that @cell has already to be packed
- * into @cell_layout for this to function properly.
- *
- * Since: 2.4
- */
-void
-gtk_cell_layout_reorder (GtkCellLayout   *cell_layout,
-                         GtkCellRenderer *cell,
-                         gint             position)
-{
-  g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->reorder) (cell_layout,
-                                                        cell,
-                                                        position);
-}
-#endif /* Gtk 2.4 */
--- a/pidgin/gtkcelllayout.h	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/* gtkcelllayout.h
- * Copyright (C) 2003  Kristian Rietveld  <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-#ifndef __GTK_CELL_LAYOUT_H__
-#define __GTK_CELL_LAYOUT_H__
-
-#include <glib-object.h>
-
-#include <gtk/gtkcellrenderer.h>
-#include <gtk/gtktreeviewcolumn.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_CELL_LAYOUT            (gtk_cell_layout_get_type ())
-#define GTK_CELL_LAYOUT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_LAYOUT, GtkCellLayout))
-#define GTK_IS_CELL_LAYOUT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_LAYOUT))
-#define GTK_CELL_LAYOUT_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTK_TYPE_CELL_LAYOUT, GtkCellLayoutIface))
-
-typedef struct _GtkCellLayout           GtkCellLayout; /* dummy typedef */
-typedef struct _GtkCellLayoutIface      GtkCellLayoutIface;
-
-/* keep in sync with GtkTreeCellDataFunc */
-typedef void (* GtkCellLayoutDataFunc) (GtkCellLayout   *cell_layout,
-                                        GtkCellRenderer *cell,
-                                        GtkTreeModel    *tree_model,
-                                        GtkTreeIter     *iter,
-                                        gpointer         data);
-
-struct _GtkCellLayoutIface
-{
-  GTypeInterface g_iface;
-
-  /* Virtual Table */
-  void (* pack_start)         (GtkCellLayout         *cell_layout,
-                               GtkCellRenderer       *cell,
-                               gboolean               expand);
-  void (* pack_end)           (GtkCellLayout         *cell_layout,
-                               GtkCellRenderer       *cell,
-                               gboolean               expand);
-  void (* clear)              (GtkCellLayout         *cell_layout);
-  void (* add_attribute)      (GtkCellLayout         *cell_layout,
-                               GtkCellRenderer       *cell,
-                               const gchar           *attribute,
-                               gint                   column);
-  void (* set_cell_data_func) (GtkCellLayout         *cell_layout,
-                               GtkCellRenderer       *cell,
-                               GtkCellLayoutDataFunc  func,
-                               gpointer               func_data,
-                               GDestroyNotify         destroy);
-  void (* clear_attributes)   (GtkCellLayout         *cell_layout,
-                               GtkCellRenderer       *cell);
-  void (* reorder)            (GtkCellLayout         *cell_layout,
-                               GtkCellRenderer       *cell,
-                               gint                   position);
-};
-
-GType gtk_cell_layout_get_type           (void);
-void  gtk_cell_layout_pack_start         (GtkCellLayout         *cell_layout,
-                                          GtkCellRenderer       *cell,
-                                          gboolean               expand);
-void  gtk_cell_layout_pack_end           (GtkCellLayout         *cell_layout,
-                                          GtkCellRenderer       *cell,
-                                          gboolean               expand);
-void  gtk_cell_layout_clear              (GtkCellLayout         *cell_layout);
-void  gtk_cell_layout_set_attributes     (GtkCellLayout         *cell_layout,
-                                          GtkCellRenderer       *cell,
-                                          ...);
-void  gtk_cell_layout_add_attribute      (GtkCellLayout         *cell_layout,
-                                          GtkCellRenderer       *cell,
-                                          const gchar           *attribute,
-                                          gint                   column);
-void  gtk_cell_layout_set_cell_data_func (GtkCellLayout         *cell_layout,
-                                          GtkCellRenderer       *cell,
-                                          GtkCellLayoutDataFunc  func,
-                                          gpointer               func_data,
-                                          GDestroyNotify         destroy);
-void  gtk_cell_layout_clear_attributes   (GtkCellLayout         *cell_layout,
-                                          GtkCellRenderer       *cell);
-void  gtk_cell_layout_reorder            (GtkCellLayout         *cell_layout,
-                                          GtkCellRenderer       *cell,
-                                          gint                   position);
-
-
-G_END_DECLS
-
-#endif /* __GTK_CELL_LAYOUT_H__ */
--- a/pidgin/gtkcellrendererexpander.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkcellrendererexpander.c	Thu Feb 18 21:38:43 2010 +0000
@@ -246,13 +246,8 @@
 	width = cell_area->width;
 	height = cell_area->height;
 
-#if GTK_CHECK_VERSION(2,6,0)
 	if (!cell->sensitive)
 		state = GTK_STATE_INSENSITIVE;
-#else
-	if (GTK_WIDGET_STATE(widget) == GTK_STATE_INSENSITIVE)
-		state = GTK_STATE_INSENSITIVE;
-#endif
 	else if (flags & GTK_CELL_RENDERER_PRELIT)
 		state = GTK_STATE_PRELIGHT;
 	else if (GTK_WIDGET_HAS_FOCUS (widget) && flags & GTK_CELL_RENDERER_SELECTED)
--- a/pidgin/gtkcellrendererprogress.c	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,296 +0,0 @@
-/*
- * @file gtkcellrendererprogress.c GTK+ Cell Renderer Progress
- * @ingroup pidgin
- */
-
-/* pidgin
- *
- * Pidgin is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
- *
- */
-
-/* This is taken largely from GtkCellRenderer[Text|Pixbuf|Toggle] by
- * Jonathon Blandford <jrb@redhat.com> for RedHat, Inc.
- */
-
-#include "gtkcellrendererprogress.h"
-
-static void pidgin_cell_renderer_progress_get_property  (GObject                    *object,
-						      guint                       param_id,
-						      GValue                     *value,
-						      GParamSpec                 *pspec);
-static void pidgin_cell_renderer_progress_set_property  (GObject                    *object,
-						      guint                       param_id,
-						      const GValue               *value,
-						      GParamSpec                 *pspec);
-static void pidgin_cell_renderer_progress_init       (PidginCellRendererProgress      *cellprogress);
-static void pidgin_cell_renderer_progress_class_init (PidginCellRendererProgressClass *class);
-static void pidgin_cell_renderer_progress_get_size   (GtkCellRenderer            *cell,
-						   GtkWidget                  *widget,
-						   GdkRectangle               *cell_area,
-						   gint                       *x_offset,
-						   gint                       *y_offset,
-						   gint                       *width,
-						   gint                       *height);
-static void pidgin_cell_renderer_progress_render     (GtkCellRenderer            *cell,
-						   GdkWindow                  *window,
-						   GtkWidget                  *widget,
-						   GdkRectangle               *background_area,
-						   GdkRectangle               *cell_area,
-						   GdkRectangle               *expose_area,
-						   guint                       flags);
-#if 0
-static gboolean pidgin_cell_renderer_progress_activate  (GtkCellRenderer            *cell,
-						      GdkEvent                   *event,
-						      GtkWidget                  *widget,
-						      const gchar                *path,
-						      GdkRectangle               *background_area,
-						      GdkRectangle               *cell_area,
-						      guint                       flags);
-#endif
-static void  pidgin_cell_renderer_progress_finalize (GObject *gobject);
-
-enum {
-	LAST_SIGNAL
-};
-
-enum {
-	PROP_0,
-	PROP_PERCENTAGE,
-	PROP_TEXT,
-	PROP_SHOW_TEXT
-};
-
-static gpointer parent_class;
-/* static guint progress_cell_renderer_signals [LAST_SIGNAL]; */
-
-GType  pidgin_cell_renderer_progress_get_type (void)
-{
-	static GType cell_progress_type = 0;
-
-	if (!cell_progress_type)
-		{
-			static const GTypeInfo cell_progress_info =
-				{
-					sizeof (PidginCellRendererProgressClass),
-					NULL,           /* base_init */
-					NULL,           /* base_finalize */
-					(GClassInitFunc) pidgin_cell_renderer_progress_class_init,
-					NULL,           /* class_finalize */
-					NULL,           /* class_data */
-					sizeof (PidginCellRendererProgress),
-					0,              /* n_preallocs */
-					(GInstanceInitFunc) pidgin_cell_renderer_progress_init,
-					NULL		/* value_table */
-				};
-
-			cell_progress_type =
-				g_type_register_static (GTK_TYPE_CELL_RENDERER,
-										"PidginCellRendererProgress",
-										&cell_progress_info, 0);
-		}
-
-	return cell_progress_type;
-}
-
-static void pidgin_cell_renderer_progress_init (PidginCellRendererProgress *cellprogress)
-{
-	GTK_CELL_RENDERER(cellprogress)->mode = GTK_CELL_RENDERER_MODE_INERT;
-	GTK_CELL_RENDERER(cellprogress)->xpad = 2;
-	GTK_CELL_RENDERER(cellprogress)->ypad = 2;
-}
-
-static void pidgin_cell_renderer_progress_class_init (PidginCellRendererProgressClass *class)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS(class);
-	GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(class);
-
-	parent_class = g_type_class_peek_parent (class);
-	object_class->finalize = pidgin_cell_renderer_progress_finalize;
-
-	object_class->get_property = pidgin_cell_renderer_progress_get_property;
-	object_class->set_property = pidgin_cell_renderer_progress_set_property;
-
-	cell_class->get_size = pidgin_cell_renderer_progress_get_size;
-	cell_class->render   = pidgin_cell_renderer_progress_render;
-
-	g_object_class_install_property (object_class,
-					 PROP_PERCENTAGE,
-					 g_param_spec_double ("percentage",
-							      "Percentage",
-							      "The fractional progress to display",
-							      0, 1, 0,
-							      G_PARAM_READWRITE));
-	g_object_class_install_property (object_class,
-					 PROP_TEXT,
-					 g_param_spec_string ("text",
-							      "Text",
-							      "Text to overlay over progress bar",
-							      NULL,
-							      G_PARAM_READWRITE));
-	g_object_class_install_property(object_class,
-					PROP_SHOW_TEXT,
-					g_param_spec_string("text_set",
-							    "Text set",
-							    "Whether to overlay text on the progress bar",
-							    FALSE,
-							    G_PARAM_READABLE | G_PARAM_WRITABLE));
-}
-
-static void pidgin_cell_renderer_progress_finalize (GObject *object)
-{
-/*
-	PidginCellRendererProgress *cellprogress = PIDGIN_CELL_RENDERER_PROGRESS(object);
-*/
-
-	(* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-static void pidgin_cell_renderer_progress_get_property (GObject    *object,
-						     guint      param_id,
-						     GValue     *value,
-						     GParamSpec *psec)
-{
-	PidginCellRendererProgress *cellprogress = PIDGIN_CELL_RENDERER_PROGRESS(object);
-
-	switch (param_id)
-		{
-		case PROP_PERCENTAGE:
-			g_value_set_double(value, cellprogress->progress);
-			break;
-		case PROP_TEXT:
-			g_value_set_string(value, cellprogress->text);
-			break;
-		case PROP_SHOW_TEXT:
-			g_value_set_boolean(value, cellprogress->text_set);
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, psec);
-			break;
-		}
-}
-
-static void pidgin_cell_renderer_progress_set_property (GObject      *object,
-						     guint        param_id,
-						     const GValue *value,
-						     GParamSpec   *pspec)
-{
-	PidginCellRendererProgress *cellprogress = PIDGIN_CELL_RENDERER_PROGRESS (object);
-
-	switch (param_id)
-		{
-		case PROP_PERCENTAGE:
-			cellprogress->progress = g_value_get_double(value);
-			break;
-		case PROP_TEXT:
-			if (cellprogress->text)
-				g_free(cellprogress->text);
-			cellprogress->text = g_strdup(g_value_get_string(value));
-			g_object_notify(object, "text");
-			break;
-		case PROP_SHOW_TEXT:
-			cellprogress->text_set = g_value_get_boolean(value);
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
-			break;
-		}
-}
-
-GtkCellRenderer *pidgin_cell_renderer_progress_new(void)
-{
-	return g_object_new(PIDGIN_TYPE_GTK_CELL_RENDERER_PROGRESS, NULL);
-}
-
-static void pidgin_cell_renderer_progress_get_size (GtkCellRenderer *cell,
-						 GtkWidget       *widget,
-						 GdkRectangle    *cell_area,
-						 gint            *x_offset,
-						 gint            *y_offset,
-						 gint            *width,
-						 gint            *height)
-{
-	gint calc_width;
-	gint calc_height;
-
-	calc_width = (gint) cell->xpad * 2 + 50;
-	calc_height = (gint) cell->ypad * 2 + 12;
-
-	if (width)
-		*width = calc_width;
-
-	if (height)
-		*height = calc_height;
-
-	if (cell_area)
-		{
-			if (x_offset)
-				{
-					*x_offset = cell->xalign * (cell_area->width - calc_width);
-					*x_offset = MAX (*x_offset, 0);
-				}
-			if (y_offset)
-				{
-					*y_offset = cell->yalign * (cell_area->height - calc_height);
-					*y_offset = MAX (*y_offset, 0);
-				}
-		}
-}
-
-
-static void pidgin_cell_renderer_progress_render (GtkCellRenderer *cell,
-					       GdkWindow       *window,
-					       GtkWidget       *widget,
-					       GdkRectangle    *background_area,
-					       GdkRectangle    *cell_area,
-					       GdkRectangle    *expose_area,
-					       guint            flags)
-{
-	PidginCellRendererProgress *cellprogress = (PidginCellRendererProgress *) cell;
-
-	gint width, height;
-	GtkStateType state;
-
-	width = cell_area->width;
-	height = cell_area->height;
-
-	if (GTK_WIDGET_HAS_FOCUS (widget))
-		state = GTK_STATE_ACTIVE;
-	else
-		state = GTK_STATE_NORMAL;
-
-	width -= cell->xpad*2;
-	height -= cell->ypad*2;
-
-	gtk_paint_box (widget->style,
-		       window,
-		       GTK_STATE_NORMAL, GTK_SHADOW_IN,
-		       NULL, widget, "trough",
-		       cell_area->x + cell->xpad,
-		       cell_area->y + cell->ypad,
-		       width - 1, height - 1);
-	gtk_paint_box (widget->style,
-		       window,
-		       state, GTK_SHADOW_OUT,
-		       NULL, widget, "bar",
-		       cell_area->x + cell->xpad + 1,
-		       cell_area->y + cell->ypad + 1,
-		       (width - 3) * cellprogress->progress,
-		       height - 3);
-}
--- a/pidgin/gtkcellrendererprogress.h	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/* gtkxcellrendererprogress.h
- * Pidgin is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
- *
- */
-#ifndef _PIDGINCELLRENDERERPROGRESS_H_
-#define _PIDGINCELLRENDERERPROGRESS_H_
-
-#include <gtk/gtk.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-#define PIDGIN_TYPE_GTK_CELL_RENDERER_PROGRESS         (pidgin_cell_renderer_progress_get_type())
-#define PIDGIN_CELL_RENDERER_PROGRESS(obj)         (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_GTK_CELL_RENDERER_PROGRESS, PidginCellRendererProgress))
-#define PIDGIN_CELL_RENDERER_PROGRESS_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), PIDGIN_TYPE_GTK_CELL_RENDERER_PROGRESS, PidginCellRendererProgressClass))
-#define PIDGIN_IS_GTK_CELL_PROGRESS_PROGRESS(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIDGIN_TYPE_GTK_CELL_RENDERER_PROGRESS))
-#define PIDGIN_IS_GTK_CELL_PROGRESS_PROGRESS_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), PIDGIN_TYPE_GTK_CELL_RENDERER_PROGRESS))
-#define PIDGIN_CELL_RENDERER_PROGRESS_GET_CLASS(obj)         (G_TYPE_INSTANCE_GET_CLASS ((obj), PIDGIN_TYPE_GTK_CELL_RENDERER_PROGRESS, PidginCellRendererProgressClass))
-
-typedef struct _PidginCellRendererProgress PidginCellRendererProgress;
-typedef struct _PidginCellRendererProgressClass PidginCellRendererProgressClass;
-
-struct _PidginCellRendererProgress {
-	GtkCellRenderer parent;
-
-	gdouble progress;
-	gchar *text;
-	gboolean text_set;
-};
-
-struct _PidginCellRendererProgressClass {
-	GtkCellRendererClass parent_class;
-};
-
-GType            pidgin_cell_renderer_progress_get_type     (void);
-GtkCellRenderer  *pidgin_cell_renderer_progress_new          (void);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _PIDGINCELLRENDERERPROGRESS_H_ */
--- a/pidgin/gtkcellview.c	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1002 +0,0 @@
-/* gtkellview.c
- * Copyright (C) 2002, 2003  Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-/*
-#include <config.h>
-*/
-#include "gtkcellview.h"
-#include <gtk/gtkversion.h>
-#if !GTK_CHECK_VERSION(2,6,0)
-#if GTK_CHECK_VERSION(2,4,0)
-#include <gtk/gtkcelllayout.h>
-#else
-#include "gtkcelllayout.h"
-#endif
-#include <gtk/gtksignal.h>
-#include <gtk/gtkcellrenderertext.h>
-#include <gtk/gtkcellrendererpixbuf.h>
-#include <gobject/gmarshal.h>
-
-#define P_(x) (x)
-
-typedef struct _GtkCellViewCellInfo GtkCellViewCellInfo;
-struct _GtkCellViewCellInfo
-{
-  GtkCellRenderer *cell;
-
-  gint requested_width;
-  gint real_width;
-  guint expand : 1;
-  guint pack : 1;
-
-  GSList *attributes;
-
-  GtkCellLayoutDataFunc func;
-  gpointer func_data;
-  GDestroyNotify destroy;
-};
-
-struct _GtkCellViewPrivate
-{
-  GtkTreeModel *model;
-  GtkTreeRowReference *displayed_row;
-  GList *cell_list;
-  gint spacing;
-
-  GdkColor background;
-  gboolean background_set;
-};
-
-
-static void        gtk_cell_view_class_init               (GtkCellViewClass *klass);
-static void        gtk_cell_view_cell_layout_init         (GtkCellLayoutIface *iface);
-static void        gtk_cell_view_get_property             (GObject           *object,
-                                                           guint             param_id,
-                                                           GValue           *value,
-                                                           GParamSpec       *pspec);
-static void        gtk_cell_view_set_property             (GObject          *object,
-                                                           guint             param_id,
-                                                           const GValue     *value,
-                                                           GParamSpec       *pspec);
-static void        gtk_cell_view_init                     (GtkCellView      *cellview);
-static void        gtk_cell_view_finalize                 (GObject          *object);
-static void        gtk_cell_view_style_set                (GtkWidget        *widget,
-                                                           GtkStyle         *previous_style);
-static void        gtk_cell_view_size_request             (GtkWidget        *widget,
-                                                           GtkRequisition   *requisition);
-static void        gtk_cell_view_size_allocate            (GtkWidget        *widget,
-                                                           GtkAllocation    *allocation);
-static gboolean    gtk_cell_view_expose                   (GtkWidget        *widget,
-                                                           GdkEventExpose   *event);
-static void        gtk_cell_view_set_valuesv              (GtkCellView      *cellview,
-                                                           GtkCellRenderer  *renderer,
-                                                           va_list           args);
-static GtkCellViewCellInfo *gtk_cell_view_get_cell_info   (GtkCellView      *cellview,
-                                                           GtkCellRenderer  *renderer);
-static void        gtk_cell_view_set_cell_data            (GtkCellView      *cellview);
-
-
-static void        gtk_cell_view_cell_layout_pack_start        (GtkCellLayout         *layout,
-                                                                GtkCellRenderer       *renderer,
-                                                                gboolean               expand);
-static void        gtk_cell_view_cell_layout_pack_end          (GtkCellLayout         *layout,
-                                                                GtkCellRenderer       *renderer,
-                                                                gboolean               expand);
-static void        gtk_cell_view_cell_layout_add_attribute     (GtkCellLayout         *layout,
-                                                                GtkCellRenderer       *renderer,
-                                                                const gchar           *attribute,
-                                                                gint                   column);
-static void       gtk_cell_view_cell_layout_clear              (GtkCellLayout         *layout);
-static void       gtk_cell_view_cell_layout_clear_attributes   (GtkCellLayout         *layout,
-                                                                GtkCellRenderer       *renderer);
-static void       gtk_cell_view_cell_layout_set_cell_data_func (GtkCellLayout         *layout,
-                                                                GtkCellRenderer       *cell,
-                                                                GtkCellLayoutDataFunc  func,
-                                                                gpointer               func_data,
-                                                                GDestroyNotify         destroy);
-static void       gtk_cell_view_cell_layout_reorder            (GtkCellLayout         *layout,
-                                                                GtkCellRenderer       *cell,
-                                                                gint                   position);
-
-
-enum
-{
-  PROP_0,
-  PROP_BACKGROUND,
-  PROP_BACKGROUND_GDK,
-  PROP_BACKGROUND_SET
-};
-
-static GtkObjectClass *parent_class = NULL;
-
-
-GType
-gtk_cell_view_get_type (void)
-{
-  static GType cell_view_type = 0;
-
-  if (!cell_view_type)
-    {
-      static const GTypeInfo cell_view_info =
-        {
-          sizeof (GtkCellViewClass),
-          NULL, /* base_init */
-          NULL, /* base_finalize */
-          (GClassInitFunc) gtk_cell_view_class_init,
-          NULL, /* class_finalize */
-          NULL, /* class_data */
-          sizeof (GtkCellView),
-          0,
-          (GInstanceInitFunc) gtk_cell_view_init
-        };
-
-      static const GInterfaceInfo cell_layout_info =
-       {
-         (GInterfaceInitFunc) gtk_cell_view_cell_layout_init,
-         NULL,
-         NULL
-       };
-
-      cell_view_type = g_type_register_static (GTK_TYPE_WIDGET, "PidginCellView",
-                                               &cell_view_info, 0);
-
-      g_type_add_interface_static (cell_view_type, GTK_TYPE_CELL_LAYOUT,
-                                   &cell_layout_info);
-    }
-
-  return cell_view_type;
-}
-
-static void
-gtk_cell_view_class_init (GtkCellViewClass *klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->get_property = gtk_cell_view_get_property;
-  gobject_class->set_property = gtk_cell_view_set_property;
-  gobject_class->finalize = gtk_cell_view_finalize;
-
-  widget_class->expose_event = gtk_cell_view_expose;
-  widget_class->size_allocate = gtk_cell_view_size_allocate;
-  widget_class->size_request = gtk_cell_view_size_request;
-  widget_class->style_set = gtk_cell_view_style_set;
-
-  /* properties */
-  g_object_class_install_property (gobject_class,
-                                   PROP_BACKGROUND,
-                                   g_param_spec_string ("background",
-                                                        P_("Background color name"),
-                                                        P_("Background color as a string"),
-                                                        NULL,
-                                                        G_PARAM_WRITABLE));
-  g_object_class_install_property (gobject_class,
-                                   PROP_BACKGROUND_GDK,
-                                   g_param_spec_boxed ("background_gdk",
-                                                      P_("Background color"),
-                                                      P_("Background color as a GdkColor"),
-                                                      GDK_TYPE_COLOR,
-                                                      G_PARAM_READABLE | G_PARAM_WRITABLE));
-
-#define ADD_SET_PROP(propname, propval, nick, blurb) g_object_class_install_property (gobject_class, propval, g_param_spec_boolean (propname, nick, blurb, FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE))
-
-  ADD_SET_PROP ("background_set", PROP_BACKGROUND_SET,
-                P_("Background set"),
-                P_("Whether this tag affects the background color"));
-}
-
-static void
-gtk_cell_view_cell_layout_init (GtkCellLayoutIface *iface)
-{
-  iface->pack_start = gtk_cell_view_cell_layout_pack_start;
-  iface->pack_end = gtk_cell_view_cell_layout_pack_end;
-  iface->clear = gtk_cell_view_cell_layout_clear;
-  iface->add_attribute = gtk_cell_view_cell_layout_add_attribute;
-  iface->set_cell_data_func = gtk_cell_view_cell_layout_set_cell_data_func;
-  iface->clear_attributes = gtk_cell_view_cell_layout_clear_attributes;
-  iface->reorder = gtk_cell_view_cell_layout_reorder;
-}
-
-static void
-gtk_cell_view_get_property (GObject    *object,
-                            guint       param_id,
-                            GValue     *value,
-                            GParamSpec *pspec)
-{
-  GtkCellView *view = GTK_CELL_VIEW (object);
-
-  switch (param_id)
-    {
-      case PROP_BACKGROUND_GDK:
-        {
-          GdkColor color;
-
-          color = view->priv->background;
-
-          g_value_set_boxed (value, &color);
-        }
-        break;
-      case PROP_BACKGROUND_SET:
-        g_value_set_boolean (value, view->priv->background_set);
-        break;
-      default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-        break;
-    }
-}
-
-static void
-gtk_cell_view_set_property (GObject      *object,
-                            guint         param_id,
-                            const GValue *value,
-                            GParamSpec   *pspec)
-{
-  GtkCellView *view = GTK_CELL_VIEW (object);
-
-  switch (param_id)
-    {
-      case PROP_BACKGROUND:
-        {
-          GdkColor color;
-
-          if (!g_value_get_string (value))
-            gtk_cell_view_set_background_color (view, NULL);
-          else if (gdk_color_parse (g_value_get_string (value), &color))
-            gtk_cell_view_set_background_color (view, &color);
-          else
-            g_warning ("Don't know color `%s'", g_value_get_string (value));
-
-          g_object_notify (object, "background_gdk");
-        }
-        break;
-      case PROP_BACKGROUND_GDK:
-        gtk_cell_view_set_background_color (view, g_value_get_boxed (value));
-        break;
-      case PROP_BACKGROUND_SET:
-        view->priv->background_set = g_value_get_boolean (value);
-        break;
-      default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-        break;
-    }
-}
-
-static void
-gtk_cell_view_init (GtkCellView *cellview)
-{
-  GTK_WIDGET_SET_FLAGS (cellview, GTK_NO_WINDOW);
-
-  cellview->priv = g_new0(GtkCellViewPrivate,1);
-}
-
-static void
-gtk_cell_view_style_set (GtkWidget *widget,
-                         GtkStyle  *previous_style)
-{
-  if (previous_style && GTK_WIDGET_REALIZED (widget))
-    gdk_window_set_background (widget->window,
-                               &widget->style->base[GTK_WIDGET_STATE (widget)]);
-}
-
-static void
-gtk_cell_view_finalize (GObject *object)
-{
-  GtkCellView *cellview = GTK_CELL_VIEW (object);
-
-  gtk_cell_view_cell_layout_clear (GTK_CELL_LAYOUT (cellview));
-
-  if (cellview->priv->model)
-     g_object_unref (cellview->priv->model);
-
-  if (cellview->priv->displayed_row)
-     gtk_tree_row_reference_free (cellview->priv->displayed_row);
-
-  if (G_OBJECT_CLASS (parent_class)->finalize)
-    (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-
-  g_free (cellview->priv);
-}
-
-static void
-gtk_cell_view_size_request (GtkWidget      *widget,
-                            GtkRequisition *requisition)
-{
-  GList *i;
-  gboolean first_cell = TRUE;
-  GtkCellView *cellview;
-
-  cellview = GTK_CELL_VIEW (widget);
-
-  requisition->width = 0;
-  requisition->height = 0;
-
-  if (cellview->priv->displayed_row)
-    gtk_cell_view_set_cell_data (cellview);
-
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      gint width, height;
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
-
-      if (!info->cell->visible)
-        continue;
-
-      if (!first_cell)
-        requisition->width += cellview->priv->spacing;
-
-      gtk_cell_renderer_get_size (info->cell, widget, NULL, NULL, NULL,
-                                  &width, &height);
-
-      info->requested_width = width;
-      requisition->width += width;
-      requisition->height = MAX (requisition->height, height);
-
-      first_cell = FALSE;
-    }
-}
-
-static void
-gtk_cell_view_size_allocate (GtkWidget     *widget,
-                             GtkAllocation *allocation)
-{
-  GList *i;
-  gint expand_cell_count = 0;
-  gint full_requested_width = 0;
-  gint extra_space;
-  GtkCellView *cellview;
-
-  widget->allocation = *allocation;
-
-  cellview = GTK_CELL_VIEW (widget);
-
-  /* checking how much extra space we have */
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
-
-      if (!info->cell->visible)
-        continue;
-
-      if (info->expand)
-        expand_cell_count++;
-
-      full_requested_width += info->requested_width;
-    }
-
-  extra_space = widget->allocation.width - full_requested_width;
-  if (extra_space < 0)
-    extra_space = 0;
-  else if (extra_space > 0 && expand_cell_count > 0)
-    extra_space /= expand_cell_count;
-
-  /* iterate list for PACK_START cells */
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
-
-      if (info->pack == GTK_PACK_END)
-        continue;
-
-      if (!info->cell->visible)
-        continue;
-
-      info->real_width = info->requested_width + (info->expand ? extra_space : 0);
-    }
-
-  /* iterate list for PACK_END cells */
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
-
-      if (info->pack == GTK_PACK_START)
-        continue;
-
-      if (!info->cell->visible)
-        continue;
-
-      info->real_width = info->requested_width + (info->expand ? extra_space : 0);
-    }
-}
-
-static gboolean
-gtk_cell_view_expose (GtkWidget      *widget,
-                      GdkEventExpose *event)
-{
-  GList *i;
-  GtkCellView *cellview;
-  GdkRectangle area;
-  GtkCellRendererState state;
-  gboolean rtl = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL);
-
-  cellview = GTK_CELL_VIEW (widget);
-
-  if (! GTK_WIDGET_DRAWABLE (widget))
-    return FALSE;
-
-  /* "blank" background */
-  if (cellview->priv->background_set)
-    {
-      GdkGC *gc;
-
-      gc = gdk_gc_new (GTK_WIDGET (cellview)->window);
-      gdk_gc_set_rgb_fg_color (gc, &cellview->priv->background);
-
-      gdk_draw_rectangle (GTK_WIDGET (cellview)->window,
-                          gc,
-                          TRUE,
-
-                          /*0, 0,*/
-                          widget->allocation.x,
-                          widget->allocation.y,
-
-                          widget->allocation.width,
-                          widget->allocation.height);
-
-      g_object_unref (G_OBJECT (gc));
-    }
-
-  /* set cell data (if available) */
-  if (cellview->priv->displayed_row)
-    gtk_cell_view_set_cell_data (cellview);
-  else if (cellview->priv->model)
-    return FALSE;
-
-  /* render cells */
-  area = widget->allocation;
-
-  /* we draw on our very own window, initialize x and y to zero */
-  area.x = widget->allocation.x + (rtl ? widget->allocation.width : 0);
-  area.y = widget->allocation.y;
-
-  if (GTK_WIDGET_STATE (widget) == GTK_STATE_PRELIGHT)
-    state = GTK_CELL_RENDERER_PRELIT;
-  else
-    state = 0;
-
-  /* PACK_START */
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
-
-      if (info->pack == GTK_PACK_END)
-        continue;
-
-      if (!info->cell->visible)
-        continue;
-
-      area.width = info->real_width;
-      if (rtl)
-         area.x -= area.width;
-
-      gtk_cell_renderer_render (info->cell,
-                                event->window,
-                                widget,
-                                /* FIXME! */
-                                &area, &area, &event->area, state);
-
-      if (!rtl)
-         area.x += info->real_width;
-    }
-
-   area.x = rtl ? widget->allocation.x : (widget->allocation.x + widget->allocation.width);
-
-  /* PACK_END */
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
-
-      if (info->pack == GTK_PACK_START)
-        continue;
-
-      if (!info->cell->visible)
-        continue;
-
-      area.width = info->real_width;
-      if (!rtl)
-         area.x -= area.width;
-
-      gtk_cell_renderer_render (info->cell,
-                                widget->window,
-                                widget,
-                                /* FIXME ! */
-                                &area, &area, &event->area, state);
-      if (rtl)
-         area.x += info->real_width;
-    }
-
-  return FALSE;
-}
-
-static GtkCellViewCellInfo *
-gtk_cell_view_get_cell_info (GtkCellView     *cellview,
-                             GtkCellRenderer *renderer)
-{
-  GList *i;
-
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
-
-      if (info->cell == renderer)
-        return info;
-    }
-
-  return NULL;
-}
-
-static void
-gtk_cell_view_set_cell_data (GtkCellView *cellview)
-{
-  GList *i;
-  GtkTreeIter iter;
-  GtkTreePath *path;
-
-  g_return_if_fail (cellview->priv->displayed_row != NULL);
-
-  path = gtk_tree_row_reference_get_path (cellview->priv->displayed_row);
-  gtk_tree_model_get_iter (cellview->priv->model, &iter, path);
-  gtk_tree_path_free (path);
-
-  for (i = cellview->priv->cell_list; i; i = i->next)
-    {
-      GSList *j;
-      GtkCellViewCellInfo *info = i->data;
-
-      g_object_freeze_notify (G_OBJECT (info->cell));
-
-      for (j = info->attributes; j && j->next; j = j->next->next)
-        {
-          gchar *property = j->data;
-          gint column = GPOINTER_TO_INT (j->next->data);
-          GValue value = {0, };
-
-          gtk_tree_model_get_value (cellview->priv->model, &iter,
-                                    column, &value);
-          g_object_set_property (G_OBJECT (info->cell),
-                                 property, &value);
-          g_value_unset (&value);
-        }
-
-      if (info->func)
-	(* info->func) (GTK_CELL_LAYOUT (cellview),
-			info->cell,
-			cellview->priv->model,
-			&iter,
-			info->func_data);
-
-      g_object_thaw_notify (G_OBJECT (info->cell));
-    }
-}
-
-/* GtkCellLayout implementation */
-static void
-gtk_cell_view_cell_layout_pack_start (GtkCellLayout   *layout,
-                                      GtkCellRenderer *renderer,
-                                      gboolean         expand)
-{
-  GtkCellViewCellInfo *info;
-  GtkCellView *cellview = GTK_CELL_VIEW (layout);
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cellview));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
-  g_return_if_fail (!gtk_cell_view_get_cell_info (cellview, renderer));
-
-  g_object_ref (G_OBJECT (renderer));
-  gtk_object_sink (GTK_OBJECT (renderer));
-
-  info = g_new0 (GtkCellViewCellInfo, 1);
-  info->cell = renderer;
-  info->expand = expand ? TRUE : FALSE;
-  info->pack = GTK_PACK_START;
-
-  cellview->priv->cell_list = g_list_append (cellview->priv->cell_list, info);
-}
-
-static void
-gtk_cell_view_cell_layout_pack_end (GtkCellLayout   *layout,
-                                    GtkCellRenderer *renderer,
-                                    gboolean         expand)
-{
-  GtkCellViewCellInfo *info;
-  GtkCellView *cellview = GTK_CELL_VIEW (layout);
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cellview));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
-  g_return_if_fail (!gtk_cell_view_get_cell_info (cellview, renderer));
-
-  g_object_ref (G_OBJECT (renderer));
-  gtk_object_sink (GTK_OBJECT (renderer));
-
-  info = g_new0 (GtkCellViewCellInfo, 1);
-  info->cell = renderer;
-  info->expand = expand ? TRUE : FALSE;
-  info->pack = GTK_PACK_END;
-
-  cellview->priv->cell_list = g_list_append (cellview->priv->cell_list, info);
-}
-
-static void
-gtk_cell_view_cell_layout_add_attribute (GtkCellLayout   *layout,
-                                         GtkCellRenderer *renderer,
-                                         const gchar     *attribute,
-                                         gint             column)
-{
-  GtkCellViewCellInfo *info;
-  GtkCellView *cellview = GTK_CELL_VIEW (layout);
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cellview));
-  info = gtk_cell_view_get_cell_info (cellview, renderer);
-  g_return_if_fail (info != NULL);
-
-  info->attributes = g_slist_prepend (info->attributes,
-                                      GINT_TO_POINTER (column));
-  info->attributes = g_slist_prepend (info->attributes,
-                                      g_strdup (attribute));
-}
-
-static void
-gtk_cell_view_cell_layout_clear (GtkCellLayout *layout)
-{
-  GtkCellView *cellview = GTK_CELL_VIEW (layout);
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cellview));
-
-  while (cellview->priv->cell_list)
-    {
-      GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)cellview->priv->cell_list->data;
-
-      gtk_cell_view_cell_layout_clear_attributes (layout, info->cell);
-      g_object_unref (G_OBJECT (info->cell));
-      g_free (info);
-      cellview->priv->cell_list = g_list_delete_link (cellview->priv->cell_list,
-						      cellview->priv->cell_list);
-    }
-}
-
-static void
-gtk_cell_view_cell_layout_set_cell_data_func (GtkCellLayout         *layout,
-                                              GtkCellRenderer       *cell,
-                                              GtkCellLayoutDataFunc  func,
-                                              gpointer               func_data,
-                                              GDestroyNotify         destroy)
-{
-  GtkCellView *cellview = GTK_CELL_VIEW (layout);
-  GtkCellViewCellInfo *info;
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cellview));
-
-  info = gtk_cell_view_get_cell_info (cellview, cell);
-  g_return_if_fail (info != NULL);
-
-  if (info->destroy)
-    {
-      GDestroyNotify d = info->destroy;
-
-      info->destroy = NULL;
-      d (info->func_data);
-    }
-
-  info->func = func;
-  info->func_data = func_data;
-  info->destroy = destroy;
-}
-
-static void
-gtk_cell_view_cell_layout_clear_attributes (GtkCellLayout   *layout,
-                                            GtkCellRenderer *renderer)
-{
-  GtkCellViewCellInfo *info;
-  GtkCellView *cellview = GTK_CELL_VIEW (layout);
-  GSList *list;
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cellview));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
-
-  info = gtk_cell_view_get_cell_info (cellview, renderer);
-  if (info != NULL)
-    {
-      list = info->attributes;
-      while (list && list->next)
-	{
-	  g_free (list->data);
-	  list = list->next->next;
-	}
-
-      g_slist_free (info->attributes);
-      info->attributes = NULL;
-    }
-}
-
-static void
-gtk_cell_view_cell_layout_reorder (GtkCellLayout   *layout,
-                                   GtkCellRenderer *cell,
-                                   gint             position)
-{
-  GList *link;
-  GtkCellViewCellInfo *info;
-  GtkCellView *cellview = GTK_CELL_VIEW (layout);
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cellview));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  info = gtk_cell_view_get_cell_info (cellview, cell);
-
-  g_return_if_fail (info != NULL);
-  g_return_if_fail (position >= 0);
-
-  link = g_list_find (cellview->priv->cell_list, info);
-
-  g_return_if_fail (link != NULL);
-
-  cellview->priv->cell_list = g_list_remove_link (cellview->priv->cell_list,
-                                                  link);
-  cellview->priv->cell_list = g_list_insert (cellview->priv->cell_list,
-                                             info, position);
-
-  gtk_widget_queue_draw (GTK_WIDGET (cellview));
-}
-
-/* public API */
-GtkWidget *
-gtk_cell_view_new (void)
-{
-  GtkCellView *cellview;
-
-  cellview = GTK_CELL_VIEW (g_object_new (gtk_cell_view_get_type (), NULL));
-
-  return GTK_WIDGET (cellview);
-}
-
-GtkWidget *
-gtk_cell_view_new_with_text (const gchar *text)
-{
-  GtkCellView *cellview;
-  GtkCellRenderer *renderer;
-  GValue value = {0, };
-
-  cellview = GTK_CELL_VIEW (gtk_cell_view_new ());
-
-  renderer = gtk_cell_renderer_text_new ();
-  gtk_cell_view_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
-                                        renderer, TRUE);
-
-  g_value_init (&value, G_TYPE_STRING);
-  g_value_set_string (&value, text);
-  gtk_cell_view_set_values (cellview, renderer, "text", &value, NULL);
-  g_value_unset (&value);
-
-  return GTK_WIDGET (cellview);
-}
-
-GtkWidget *
-gtk_cell_view_new_with_markup (const gchar *markup)
-{
-  GtkCellView *cellview;
-  GtkCellRenderer *renderer;
-  GValue value = {0, };
-
-  cellview = GTK_CELL_VIEW (gtk_cell_view_new ());
-
-  renderer = gtk_cell_renderer_text_new ();
-  gtk_cell_view_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
-                                        renderer, TRUE);
-
-  g_value_init (&value, G_TYPE_STRING);
-  g_value_set_string (&value, markup);
-  gtk_cell_view_set_values (cellview, renderer, "markup", &value, NULL);
-  g_value_unset (&value);
-
-  return GTK_WIDGET (cellview);
-}
-
-GtkWidget *
-gtk_cell_view_new_with_pixbuf (GdkPixbuf *pixbuf)
-{
-  GtkCellView *cellview;
-  GtkCellRenderer *renderer;
-  GValue value = {0, };
-
-  cellview = GTK_CELL_VIEW (gtk_cell_view_new ());
-
-  renderer = gtk_cell_renderer_pixbuf_new ();
-  gtk_cell_view_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
-                                        renderer, TRUE);
-
-  g_value_init (&value, GDK_TYPE_PIXBUF);
-  g_value_set_object (&value, pixbuf);
-  gtk_cell_view_set_values (cellview, renderer, "pixbuf", &value, NULL);
-  g_value_unset (&value);
-
-  return GTK_WIDGET (cellview);
-}
-
-void
-gtk_cell_view_set_value (GtkCellView     *cell_view,
-                         GtkCellRenderer *renderer,
-                         gchar           *property,
-                         GValue          *value)
-{
-  g_return_if_fail (GTK_IS_CELL_VIEW (cell_view));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
-
-  g_object_set_property (G_OBJECT (renderer), property, value);
-
-  /* force resize and redraw */
-  gtk_widget_queue_resize (GTK_WIDGET (cell_view));
-  gtk_widget_queue_draw (GTK_WIDGET (cell_view));
-}
-
-static void
-gtk_cell_view_set_valuesv (GtkCellView     *cell_view,
-                           GtkCellRenderer *renderer,
-                           va_list          args)
-{
-  gchar *attribute;
-  GValue *value;
-
-  attribute = va_arg (args, gchar *);
-
-  while (attribute)
-    {
-      value = va_arg (args, GValue *);
-      gtk_cell_view_set_value (cell_view, renderer, attribute, value);
-      attribute = va_arg (args, gchar *);
-    }
-}
-
-void
-gtk_cell_view_set_values (GtkCellView     *cell_view,
-                          GtkCellRenderer *renderer,
-                          ...)
-{
-  va_list args;
-
-  g_return_if_fail (GTK_IS_CELL_VIEW (cell_view));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
-  g_return_if_fail (gtk_cell_view_get_cell_info (cell_view, renderer));
-
-  va_start (args, renderer);
-  gtk_cell_view_set_valuesv (cell_view, renderer, args);
-  va_end (args);
-}
-
-void
-gtk_cell_view_set_model (GtkCellView  *cell_view,
-                         GtkTreeModel *model)
-{
-  g_return_if_fail (GTK_IS_CELL_VIEW (cell_view));
-  g_return_if_fail (GTK_IS_TREE_MODEL (model));
-
-  if (cell_view->priv->model)
-    {
-      if (cell_view->priv->displayed_row)
-        gtk_tree_row_reference_free (cell_view->priv->displayed_row);
-      cell_view->priv->displayed_row = NULL;
-
-      g_object_unref (G_OBJECT (cell_view->priv->model));
-      cell_view->priv->model = NULL;
-    }
-
-  cell_view->priv->model = model;
-
-  if (cell_view->priv->model)
-    g_object_ref (G_OBJECT (cell_view->priv->model));
-}
-
-/**
- * gtk_cell_view_set_displayed_row:
- * @cell_view: a #GtkCellView
- * @path: a #GtkTreePath or %NULL to unset.
- *
- * Sets the row of the model that is currently displayed
- * by the #GtkCellView. If the path is unset, then the
- * contents of the cellview "stick" at their last value;
- * this is not normally a desired result, but may be
- * a needed intermediate state if say, the model for
- * the #GtkCellView becomes temporarily empty.
- **/
-void
-gtk_cell_view_set_displayed_row (GtkCellView *cell_view,
-                                 GtkTreePath *path)
-{
-  g_return_if_fail (GTK_IS_CELL_VIEW (cell_view));
-  g_return_if_fail (GTK_IS_TREE_MODEL (cell_view->priv->model));
-
-  if (cell_view->priv->displayed_row)
-    gtk_tree_row_reference_free (cell_view->priv->displayed_row);
-
-  if (path)
-    {
-      cell_view->priv->displayed_row =
-	gtk_tree_row_reference_new (cell_view->priv->model, path);
-    }
-  else
-    cell_view->priv->displayed_row = NULL;
-
-  /* force resize and redraw */
-  gtk_widget_queue_resize (GTK_WIDGET (cell_view));
-  gtk_widget_queue_draw (GTK_WIDGET (cell_view));
-}
-
-GtkTreePath *
-gtk_cell_view_get_displayed_row (GtkCellView *cell_view)
-{
-  g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), NULL);
-
-  if (!cell_view->priv->displayed_row)
-    return NULL;
-
-  return gtk_tree_row_reference_get_path (cell_view->priv->displayed_row);
-}
-
-gboolean
-gtk_cell_view_get_size_of_row (GtkCellView    *cell_view,
-                               GtkTreePath    *path,
-                               GtkRequisition *requisition)
-{
-  GtkTreeRowReference *tmp;
-  GtkRequisition req;
-
-  g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), FALSE);
-  g_return_val_if_fail (path != NULL, FALSE);
-  g_return_val_if_fail (requisition != NULL, FALSE);
-
-  tmp = cell_view->priv->displayed_row;
-  cell_view->priv->displayed_row =
-    gtk_tree_row_reference_new (cell_view->priv->model, path);
-
-  gtk_cell_view_size_request (GTK_WIDGET (cell_view), requisition);
-
-  gtk_tree_row_reference_free (cell_view->priv->displayed_row);
-  cell_view->priv->displayed_row = tmp;
-
-  /* restore actual size info */
-  gtk_cell_view_size_request (GTK_WIDGET (cell_view), &req);
-
-  return TRUE;
-}
-
-void
-gtk_cell_view_set_background_color (GtkCellView    *view,
-                                    const GdkColor *color)
-{
-  g_return_if_fail (GTK_IS_CELL_VIEW (view));
-
-  if (color)
-    {
-      if (!view->priv->background_set)
-        {
-          view->priv->background_set = TRUE;
-          g_object_notify (G_OBJECT (view), "background_set");
-        }
-
-      view->priv->background = *color;
-    }
-  else
-    {
-      if (view->priv->background_set)
-        {
-          view->priv->background_set = FALSE;
-          g_object_notify (G_OBJECT (view), "background_set");
-        }
-    }
-}
-#endif /* Gtk 2.6 */
--- a/pidgin/gtkcellview.h	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/* gtkcellview.h
- * Copyright (C) 2002, 2003  Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-#ifndef __GTK_CELL_VIEW_H__
-#define __GTK_CELL_VIEW_H__
-
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkcellrenderer.h>
-#include <gtk/gtktreemodel.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_CELL_VIEW                (gtk_cell_view_get_type ())
-#define GTK_CELL_VIEW(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_VIEW, GtkCellView))
-#define GTK_CELL_VIEW_CLASS(vtable)       (G_TYPE_CHECK_CLASS_CAST ((vtable), GTK_TYPE_CELL_VIEW, GtkCellViewClass))
-#define GTK_IS_CELL_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_VIEW))
-#define GTK_IS_CELL_VIEW_CLASS(vtable)    (G_TYPE_CHECK_CLASS_TYPE ((vtable), GTK_TYPE_CELL_VIEW))
-#define GTK_CELL_VIEW_GET_CLASS(inst)     (G_TYPE_INSTANCE_GET_CLASS ((inst), GTK_TYPE_CELL_VIEW, GtkCellViewClass))
-
-typedef struct _GtkCellView             GtkCellView;
-typedef struct _GtkCellViewClass        GtkCellViewClass;
-typedef struct _GtkCellViewPrivate      GtkCellViewPrivate;
-
-struct _GtkCellView
-{
-  GtkWidget parent_instance;
-
-  /*< private >*/
-  GtkCellViewPrivate *priv;
-};
-
-struct _GtkCellViewClass
-{
-  GtkWidgetClass parent_class;
-};
-
-GType             gtk_cell_view_get_type               (void);
-GtkWidget        *gtk_cell_view_new                    (void);
-GtkWidget        *gtk_cell_view_new_with_text          (const gchar     *text);
-GtkWidget        *gtk_cell_view_new_with_markup        (const gchar     *markup);
-GtkWidget        *gtk_cell_view_new_with_pixbuf        (GdkPixbuf       *pixbuf);
-
-
-void              gtk_cell_view_set_value               (GtkCellView     *cell_view,
-                                                         GtkCellRenderer *renderer,
-                                                         gchar           *property,
-                                                         GValue          *value);
-void              gtk_cell_view_set_values              (GtkCellView     *cell_view,
-                                                         GtkCellRenderer *renderer,
-                                                         ...);
-
-void              gtk_cell_view_set_model               (GtkCellView     *cell_view,
-                                                         GtkTreeModel    *model);
-void              gtk_cell_view_set_displayed_row       (GtkCellView     *cell_view,
-                                                         GtkTreePath     *path);
-GtkTreePath      *gtk_cell_view_get_displayed_row       (GtkCellView     *cell_view);
-gboolean          gtk_cell_view_get_size_of_row         (GtkCellView     *cell_view,
-                                                         GtkTreePath     *path,
-                                                         GtkRequisition  *requisition);
-
-void              gtk_cell_view_set_background_color    (GtkCellView     *cell_view,
-                                                         const GdkColor  *color);
-
-G_END_DECLS
-
-#endif /* __GTK_CELL_VIEW_H__ */
--- a/pidgin/gtkcellviewmenuitem.c	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-/* gtkcellviewmenuitem.c
- * Copyright (C) 2003  Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-/*
-#include <config.h>
-*/
-#include <gtk/gtkversion.h>
-#if !GTK_CHECK_VERSION(2,6,0)
-#include "gtkcellviewmenuitem.h"
-#include "gtkcellview.h"
-
-struct _GtkCellViewMenuItemPrivate
-{
-  GtkWidget *cell_view;
-};
-
-static void gtk_cell_view_menu_item_init       (GtkCellViewMenuItem      *item);
-static void gtk_cell_view_menu_item_class_init (GtkCellViewMenuItemClass *klass);
-static void gtk_cell_view_menu_item_finalize   (GObject                  *object);
-
-
-GType
-gtk_cell_view_menu_item_get_type (void)
-{
-  static GType cell_view_menu_item_type = 0;
-
-  if (!cell_view_menu_item_type)
-    {
-      static const GTypeInfo cell_view_menu_item_info =
-        {
-          sizeof (GtkCellViewMenuItemClass),
-          NULL,
-          NULL,
-          (GClassInitFunc) gtk_cell_view_menu_item_class_init,
-          NULL,
-          NULL,
-          sizeof (GtkCellViewMenuItem),
-          0,
-          (GInstanceInitFunc) gtk_cell_view_menu_item_init
-        };
-
-      cell_view_menu_item_type =
-        g_type_register_static (GTK_TYPE_MENU_ITEM, "PidginCellViewMenuItem",
-                                &cell_view_menu_item_info, 0);
-    }
-
-  return cell_view_menu_item_type;
-}
-
-static void
-gtk_cell_view_menu_item_class_init (GtkCellViewMenuItemClass *klass)
-{
-  GObjectClass *object_class;
-
-  object_class = (GObjectClass *)klass;
-  object_class->finalize = gtk_cell_view_menu_item_finalize;
-}
-
-static void
-gtk_cell_view_menu_item_init (GtkCellViewMenuItem *item)
-{
-  item->priv = g_new0(GtkCellViewMenuItemPrivate,1);
-}
-
-GtkWidget *
-gtk_cell_view_menu_item_new (void)
-{
-  GtkCellViewMenuItem *item;
-
-  item = g_object_new (GTK_TYPE_CELL_VIEW_MENU_ITEM, NULL);
-
-  item->priv->cell_view = gtk_cell_view_new ();
-  gtk_container_add (GTK_CONTAINER (item), item->priv->cell_view);
-  gtk_widget_show (item->priv->cell_view);
-
-  return GTK_WIDGET (item);
-}
-
-GtkWidget *
-gtk_cell_view_menu_item_new_with_pixbuf (GdkPixbuf *pixbuf)
-{
-  GtkCellViewMenuItem *item;
-
-  item = g_object_new (GTK_TYPE_CELL_VIEW_MENU_ITEM, NULL);
-
-  item->priv->cell_view = gtk_cell_view_new_with_pixbuf (pixbuf);
-  gtk_container_add (GTK_CONTAINER (item), item->priv->cell_view);
-  gtk_widget_show (item->priv->cell_view);
-
-  return GTK_WIDGET (item);
-}
-
-GtkWidget *
-gtk_cell_view_menu_item_new_with_text (const gchar *text)
-{
-  GtkCellViewMenuItem *item;
-
-  item = g_object_new (GTK_TYPE_CELL_VIEW_MENU_ITEM, NULL);
-
-  item->priv->cell_view = gtk_cell_view_new_with_text (text);
-  gtk_container_add (GTK_CONTAINER (item), item->priv->cell_view);
-  gtk_widget_show (item->priv->cell_view);
-
-  return GTK_WIDGET (item);
-}
-
-GtkWidget *
-gtk_cell_view_menu_item_new_with_markup (const gchar *markup)
-{
-  GtkCellViewMenuItem *item;
-
-  item = g_object_new (GTK_TYPE_CELL_VIEW_MENU_ITEM, NULL);
-
-  item->priv->cell_view = gtk_cell_view_new_with_markup (markup);
-  gtk_container_add (GTK_CONTAINER (item), item->priv->cell_view);
-  gtk_widget_show (item->priv->cell_view);
-
-  return GTK_WIDGET (item);
-}
-
-GtkWidget *
-gtk_cell_view_menu_item_new_from_model (GtkTreeModel *model,
-                                        GtkTreePath  *path)
-{
-  GtkCellViewMenuItem *item;
-
-  item = g_object_new (GTK_TYPE_CELL_VIEW_MENU_ITEM, NULL);
-
-  item->priv->cell_view = gtk_cell_view_new ();
-  gtk_container_add (GTK_CONTAINER (item), item->priv->cell_view);
-
-  gtk_cell_view_set_model (GTK_CELL_VIEW (item->priv->cell_view), model);
-  gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (item->priv->cell_view), path);
-
-  gtk_widget_show (item->priv->cell_view);
-
-  return GTK_WIDGET (item);
-}
-
-static void
-gtk_cell_view_menu_item_finalize (GObject *object)
-{
-  GtkCellViewMenuItem *item = GTK_CELL_VIEW_MENU_ITEM (object);
-
-  g_free (item->priv);
-}
-#endif /* Gtk 2.6 */
--- a/pidgin/gtkcellviewmenuitem.h	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/* gtkcellviewmenuitem.h
- * Copyright (C) 2003  Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-#ifndef __GTK_CELL_VIEW_MENU_ITEM_H__
-#define __GTK_CELL_VIEW_MENU_ITEM_H__
-
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtktreemodel.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_CELL_VIEW_MENU_ITEM              (gtk_cell_view_menu_item_get_type ())
-#define GTK_CELL_VIEW_MENU_ITEM(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_VIEW_MENU_ITEM, GtkCellViewMenuItem))
-#define GTK_CELL_VIEW_MENU_ITEM_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CELL_VIEW_MENU_ITEM, GtkCellViewMenuItemClass))
-#define GTK_IS_CELL_VIEW_MENU_ITEM(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_VIEW_MENU_ITEM))
-#define GTK_IS_CELL_VIEW_MENU_ITEM_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CELL_VIEW_MENU_ITEM))
-#define GTK_CELL_VIEW_MENU_ITEM_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CELL_VIEW_MENU_ITEM, GtkCellViewMenuItemClass))
-
-
-typedef struct _GtkCellViewMenuItem        GtkCellViewMenuItem;
-typedef struct _GtkCellViewMenuItemClass   GtkCellViewMenuItemClass;
-typedef struct _GtkCellViewMenuItemPrivate GtkCellViewMenuItemPrivate;
-
-struct _GtkCellViewMenuItem
-{
-  GtkMenuItem parent_instance;
-
-  /*< private >*/
-  GtkCellViewMenuItemPrivate *priv;
-};
-
-struct _GtkCellViewMenuItemClass
-{
-  GtkMenuItemClass parent_class;
-};
-
-
-GType      gtk_cell_view_menu_item_get_type        (void);
-GtkWidget *gtk_cell_view_menu_item_new             (void);
-
-GtkWidget *gtk_cell_view_menu_item_new_with_pixbuf (GdkPixbuf   *pixbuf);
-GtkWidget *gtk_cell_view_menu_item_new_with_text   (const gchar *text);
-GtkWidget *gtk_cell_view_menu_item_new_with_markup (const gchar *markup);
-
-GtkWidget *gtk_cell_view_menu_item_new_from_model  (GtkTreeModel *model,
-                                                    GtkTreePath  *path);
-
-
-G_END_DECLS
-
-#endif /* __GTK_CELL_VIEW_MENU_ITEM_H__ */
--- a/pidgin/gtkconv.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkconv.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1075,11 +1075,7 @@
 	gdk_window_set_cursor(gtkblist->window->window, cursor);
 	gdk_window_set_cursor(win->window->window, cursor);
 	gdk_cursor_unref(cursor);
-#if GTK_CHECK_VERSION(2,4,0)
 	gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window)));
-#else
-	gdk_flush();
-#endif
 
 	name = purple_conversation_get_name(conv);
 	account = purple_conversation_get_account(conv);
@@ -1115,114 +1111,13 @@
 	clear_conversation_scrollback(conv);
 }
 
-struct _search {
-	PidginWindow *gtkwin;
-	GtkWidget *entry;
-};
-
-static void do_search_cb(GtkWidget *widget, gint resp, struct _search *s)
-{
-	PurpleConversation *conv;
-	PidginConversation *gtk_active_conv;
-	GList *iter;
-
-	conv = pidgin_conv_window_get_active_conversation(s->gtkwin);
-	gtk_active_conv = PIDGIN_CONVERSATION(conv);
-
-	switch (resp)
-	{
-		case GTK_RESPONSE_OK:
-			/* clear highlighting except the active conversation window
-			 * highlight the keywords in the active conversation window */
-			for (iter = pidgin_conv_window_get_gtkconvs(s->gtkwin) ; iter ; iter = iter->next)
-			{
-				PidginConversation *gtkconv = iter->data;
-
-				if (gtkconv != gtk_active_conv)
-				{
-					gtk_imhtml_search_clear(GTK_IMHTML(gtkconv->imhtml));
-				}
-				else
-				{
-					gtk_imhtml_search_find(GTK_IMHTML(gtk_active_conv->imhtml),
-					                       gtk_entry_get_text(GTK_ENTRY(s->entry)));
-				}
-			}
-			break;
-
-		case GTK_RESPONSE_DELETE_EVENT:
-		case GTK_RESPONSE_CLOSE:
-			/* clear the keyword highlighting in all the conversation windows */
-			for (iter = pidgin_conv_window_get_gtkconvs(s->gtkwin); iter; iter=iter->next)
-			{
-				PidginConversation *gconv = iter->data;
-				gtk_imhtml_search_clear(GTK_IMHTML(gconv->imhtml));
-			}
-
-			gtk_widget_destroy(s->gtkwin->dialogs.search);
-			s->gtkwin->dialogs.search = NULL;
-			g_free(s);
-			break;
-	}
-}
-
 static void
 menu_find_cb(gpointer data, guint action, GtkWidget *widget)
 {
 	PidginWindow *gtkwin = data;
-	GtkWidget *hbox;
-	GtkWidget *img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION,
-						  gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE));
-	GtkWidget *label;
-	struct _search *s;
-
-	if (gtkwin->dialogs.search) {
-		gtk_window_present(GTK_WINDOW(gtkwin->dialogs.search));
-		return;
-	}
-
-	s = g_malloc(sizeof(struct _search));
-	s->gtkwin = gtkwin;
-
-	gtkwin->dialogs.search = gtk_dialog_new_with_buttons(_("Find"),
-			GTK_WINDOW(gtkwin->window), GTK_DIALOG_DESTROY_WITH_PARENT,
-			GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
-			GTK_STOCK_FIND, GTK_RESPONSE_OK, NULL);
-	gtk_dialog_set_default_response(GTK_DIALOG(gtkwin->dialogs.search),
-									GTK_RESPONSE_OK);
-	g_signal_connect(G_OBJECT(gtkwin->dialogs.search), "response",
-					 G_CALLBACK(do_search_cb), s);
-
-	gtk_container_set_border_width(GTK_CONTAINER(gtkwin->dialogs.search), PIDGIN_HIG_BOX_SPACE);
-	gtk_window_set_resizable(GTK_WINDOW(gtkwin->dialogs.search), FALSE);
-	gtk_dialog_set_has_separator(GTK_DIALOG(gtkwin->dialogs.search), FALSE);
-	gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(gtkwin->dialogs.search)->vbox), PIDGIN_HIG_BORDER);
-	gtk_container_set_border_width(
-		GTK_CONTAINER(GTK_DIALOG(gtkwin->dialogs.search)->vbox), PIDGIN_HIG_BOX_SPACE);
-
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
-	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(gtkwin->dialogs.search)->vbox),
-					  hbox);
-	gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
-
-	gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
-	gtk_dialog_set_response_sensitive(GTK_DIALOG(gtkwin->dialogs.search),
-									  GTK_RESPONSE_OK, FALSE);
-
-	label = gtk_label_new(NULL);
-	gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Search for:"));
-	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
-	s->entry = gtk_entry_new();
-	gtk_entry_set_activates_default(GTK_ENTRY(s->entry), TRUE);
-	gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(s->entry));
-	g_signal_connect(G_OBJECT(s->entry), "changed",
-					 G_CALLBACK(pidgin_set_sensitive_if_input),
-					 gtkwin->dialogs.search);
-	gtk_box_pack_start(GTK_BOX(hbox), s->entry, FALSE, FALSE, 0);
-
-	gtk_widget_show_all(gtkwin->dialogs.search);
-	gtk_widget_grab_focus(s->entry);
+	PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(gtkwin);
+	gtk_widget_show_all(gtkconv->quickfind.container);
+	gtk_widget_grab_focus(gtkconv->quickfind.entry);
 }
 
 #ifdef USE_VV
@@ -1255,6 +1150,18 @@
 }
 
 static void
+menu_get_attention_cb(gpointer data, guint action, GtkWidget *widget)
+{
+	PidginWindow *win = data;
+	PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
+
+	if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
+		purple_prpl_send_attention(purple_conversation_get_gc(conv), 
+			purple_conversation_get_name(conv), 0);
+	}
+}
+
+static void
 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget)
 {
 	PidginWindow *win = data;
@@ -2048,11 +1955,7 @@
 			case GDK_period:
 				gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook),
 						gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), curconv),
-#if GTK_CHECK_VERSION(2,2,0)
 						(curconv + 1) % gtk_notebook_get_n_pages(GTK_NOTEBOOK(win->notebook)));
-#else
-						(curconv + 1) % g_list_length(GTK_NOTEBOOK(win->notebook)->children));
-#endif
 				return TRUE;
 				break;
 			case GDK_F6:
@@ -2320,6 +2223,11 @@
 	gtkconv = PIDGIN_CONVERSATION(conv);
 	old_conv = gtkconv->active_conv;
 
+	purple_debug_info("gtkconv", "setting active conversation on toolbar %p\n",
+		conv);
+	gtk_imhtmltoolbar_switch_active_conversation(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), 
+		conv);
+
 	if (old_conv == conv)
 		return;
 
@@ -3183,6 +3091,7 @@
 #endif
 
 	{ N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE },
+	{ N_("/Conversation/Get _Attention"), NULL, menu_get_attention_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION },
 	{ N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb,
 			0, "<Item>", NULL },
 	{ N_("/Conversation/_Get Info"), "<CTL>O", menu_get_info_cb, 0,
@@ -3567,6 +3476,9 @@
 		gtk_item_factory_get_widget(win->menu.item_factory,
 		                            N_("/Conversation/Send File..."));
 
+	g_object_set_data(G_OBJECT(win->window), "get_attention",
+		gtk_item_factory_get_widget(win->menu.item_factory,
+			                    N_("/Conversation/Get Attention")));
 	win->menu.add_pounce =
 		gtk_item_factory_get_widget(win->menu.item_factory,
 		                            N_("/Conversation/Add Buddy Pounce..."));
@@ -3885,7 +3797,7 @@
 	gtk_size_group_add_widget(sg, image);
 
 	/* Make our menu item */
-	text = g_strdup_printf("%s (%s)", name, purple_account_get_username(account));
+	text = g_strdup_printf("%s (%s)", name, purple_account_get_name_for_display(account));
 	menuitem = gtk_radio_menu_item_new_with_label(*group, text);
 	g_free(text);
 	*group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem));
@@ -4114,7 +4026,6 @@
 		color = (GdkColor*)get_nick_color(gtkconv, name);
 	}
 
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_list_store_insert_with_values(ls, &iter,
 /*
 * The GTK docs are mute about the effects of the "row" value for performance.
@@ -4132,18 +4043,6 @@
 			CHAT_USERS_COLOR_COLUMN, color,
 			CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
 			-1);
-#else
-	gtk_list_store_append(ls, &iter);
-	gtk_list_store_set(ls, &iter,
-			CHAT_USERS_ICON_STOCK_COLUMN,  stock,
-			CHAT_USERS_ALIAS_COLUMN, alias,
-			CHAT_USERS_ALIAS_KEY_COLUMN, alias_key,
-			CHAT_USERS_NAME_COLUMN,  name,
-			CHAT_USERS_FLAGS_COLUMN, flags,
-			CHAT_USERS_COLOR_COLUMN, color,
-			CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
-			-1);
-#endif
 
 	if (is_me && color)
 		gdk_color_free(color);
@@ -4816,9 +4715,7 @@
 
 	/* Setup the label telling how many people are in the room. */
 	gtkchat->count = gtk_label_new(_("0 people in room"));
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_label_set_ellipsize(GTK_LABEL(gtkchat->count), PANGO_ELLIPSIZE_END);
-#endif
 	gtk_box_pack_start(GTK_BOX(lbox), gtkchat->count, FALSE, FALSE, 0);
 	gtk_widget_show(gtkchat->count);
 
@@ -4888,10 +4785,8 @@
 	purple_signal_connect(blist_handle, "blist-node-aliased",
 						gtkchat, PURPLE_CALLBACK(blist_node_aliased_cb), conv);
 
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_tree_view_column_set_expand(col, TRUE);
 	g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 	gtk_tree_view_append_column(GTK_TREE_VIEW(list), col);
 
@@ -4929,6 +4824,121 @@
 	return FALSE;
 }
 
+/* Close button {{{ */
+static gboolean
+close_button_left_cb(GtkWidget *widget, GdkEventCrossing *event, GtkLabel *label)
+{
+	static GdkCursor *ptr = NULL;
+	if (ptr == NULL) {
+		ptr = gdk_cursor_new(GDK_LEFT_PTR);
+	}
+
+	gtk_label_set_markup(label, "×");
+	gdk_window_set_cursor(event->window, ptr);
+	return FALSE;
+}
+
+static gboolean
+close_button_entered_cb(GtkWidget *widget, GdkEventCrossing *event, GtkLabel *label)
+{
+	static GdkCursor *hand = NULL;
+	if (hand == NULL) {
+		hand = gdk_cursor_new(GDK_HAND2);
+	}
+
+	gtk_label_set_markup(label, "<u>×</u>");
+	gdk_window_set_cursor(event->window, hand);
+	return FALSE;
+}
+
+static GtkWidget *
+create_close_button(void)
+{
+	GtkWidget *ebox = gtk_event_box_new();
+	GtkWidget *close_image;
+
+	gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE);
+	gtk_widget_set_events(ebox, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
+	close_image = gtk_label_new("×");
+	g_signal_connect(G_OBJECT(ebox), "enter-notify-event", G_CALLBACK(close_button_entered_cb), close_image);
+	g_signal_connect(G_OBJECT(ebox), "leave-notify-event", G_CALLBACK(close_button_left_cb), close_image);
+	gtk_widget_show(close_image);
+	gtk_container_add(GTK_CONTAINER(ebox), close_image);
+
+	return ebox;
+}
+
+/* }}} */
+
+/* Quick Find {{{ */
+static gboolean
+pidgin_conv_end_quickfind(PidginConversation *gtkconv)
+{
+	gtk_widget_modify_base(gtkconv->quickfind.entry, GTK_STATE_NORMAL, NULL);
+
+	gtk_imhtml_search_clear(GTK_IMHTML(gtkconv->imhtml));
+	gtk_widget_hide_all(gtkconv->quickfind.container);
+
+	gtk_widget_grab_focus(gtkconv->entry);
+	return TRUE;
+}
+
+static gboolean
+quickfind_process_input(GtkWidget *entry, GdkEventKey *event, PidginConversation *gtkconv)
+{
+	switch (event->keyval) {
+		case GDK_Return:
+		case GDK_KP_Enter:
+			if (gtk_imhtml_search_find(GTK_IMHTML(gtkconv->imhtml), gtk_entry_get_text(GTK_ENTRY(entry)))) {
+				gtk_widget_modify_base(gtkconv->quickfind.entry, GTK_STATE_NORMAL, NULL);
+			} else {
+				GdkColor col;
+				col.red = 0xffff;
+				col.green = 0xafff;
+				col.blue = 0xafff;
+				gtk_widget_modify_base(gtkconv->quickfind.entry, GTK_STATE_NORMAL, &col);
+			}
+			break;
+		case GDK_Escape:
+			pidgin_conv_end_quickfind(gtkconv);
+			break;
+		default:
+			return FALSE;
+	}
+	return TRUE;
+}
+
+static void
+pidgin_conv_setup_quickfind(PidginConversation *gtkconv, GtkWidget *container)
+{
+	GtkWidget *widget = gtk_hbox_new(FALSE, 0);
+	GtkWidget *label, *entry, *close;
+
+	gtk_box_pack_start(GTK_BOX(container), widget, FALSE, FALSE, 0);
+
+	close = create_close_button();
+	gtk_box_pack_start(GTK_BOX(widget), close, FALSE, FALSE, 0);
+	gtk_tooltips_set_tip(gtkconv->tooltips, close,
+	                     _("Close Find bar"), NULL);
+
+	label = gtk_label_new(_("Find:"));
+	gtk_box_pack_start(GTK_BOX(widget), label, FALSE, FALSE, 10);
+
+	entry = gtk_entry_new();
+	gtk_box_pack_start(GTK_BOX(widget), entry, TRUE, TRUE, 0);
+
+	gtkconv->quickfind.entry = entry;
+	gtkconv->quickfind.container = widget;
+
+	/* Hook to signals and stuff */
+	g_signal_connect(G_OBJECT(entry), "key_press_event",
+			G_CALLBACK(quickfind_process_input), gtkconv);
+	g_signal_connect_swapped(G_OBJECT(close), "button-press-event",
+			G_CALLBACK(pidgin_conv_end_quickfind), gtkconv);
+}
+
+/* }}} */
+
 static GtkWidget *
 setup_common_pane(PidginConversation *gtkconv)
 {
@@ -4947,9 +4957,7 @@
 
 	/* Setup the info pane */
 	event_box = gtk_event_box_new();
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), FALSE);
-#endif
 	gtk_widget_show(event_box);
 	gtkconv->infopane_hbox = gtk_hbox_new(FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(vbox), event_box, FALSE, FALSE, 0);
@@ -5019,9 +5027,7 @@
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "markup", CONV_TEXT_COLUMN, NULL);
 	g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL);
 
-#if GTK_CHECK_VERSION(2, 6, 0)
 	g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 	rend = gtk_cell_renderer_pixbuf_new();
 	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE);
@@ -5071,6 +5077,8 @@
 	g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event",
 	                 G_CALLBACK(refocus_entry_cb), gtkconv);
 
+	pidgin_conv_setup_quickfind(gtkconv, vbox);
+
 	gtkconv->lower_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, FALSE, FALSE, 0);
 	gtk_widget_show(gtkconv->lower_hbox);
@@ -6164,10 +6172,8 @@
 
 	ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)));
 
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls),  GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID,
 										 GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID);
-#endif
 
 	l = cbuddies;
 	while (l != NULL) {
@@ -6269,12 +6275,7 @@
 							   CHAT_USERS_NAME_COLUMN, &val, -1);
 
 			if (!purple_utf8_strcasecmp((char *)l->data, val)) {
-#if GTK_CHECK_VERSION(2,2,0)
 				f = gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
-#else
-				gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
-				f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
-#endif
 			}
 			else
 				f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
@@ -6532,6 +6533,7 @@
 		/* Deal with menu items */
 		gtk_widget_show(win->menu.view_log);
 		gtk_widget_show(win->menu.send_file);
+		gtk_widget_show(g_object_get_data(G_OBJECT(win->window), "get_attention"));
 		gtk_widget_show(win->menu.add_pounce);
 		gtk_widget_show(win->menu.get_info);
 		gtk_widget_hide(win->menu.invite);
@@ -6560,6 +6562,7 @@
 		/* Deal with menu items */
 		gtk_widget_show(win->menu.view_log);
 		gtk_widget_hide(win->menu.send_file);
+		gtk_widget_hide(g_object_get_data(G_OBJECT(win->window), "get_attention"));
 		gtk_widget_hide(win->menu.add_pounce);
 		gtk_widget_hide(win->menu.get_info);
 		gtk_widget_show(win->menu.invite);
@@ -6637,6 +6640,7 @@
 			gtk_widget_set_sensitive(win->menu.send_file,
 									 (prpl_info->send_file != NULL && (!prpl_info->can_receive_file ||
 									  prpl_info->can_receive_file(gc, purple_conversation_get_name(conv)))));
+			gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(win->window), "get_attention"), (prpl_info->send_attention != NULL));
 			gtk_widget_set_sensitive(win->menu.alias,
 									 (account != NULL) &&
 									 (purple_find_buddy(account, purple_conversation_get_name(conv)) != NULL));
@@ -6657,6 +6661,8 @@
 		/* Then deal with menu items */
 		gtk_widget_set_sensitive(win->menu.view_log, TRUE);
 		gtk_widget_set_sensitive(win->menu.send_file, FALSE);
+		gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(win->window),
+			"get_attention"), FALSE);
 		gtk_widget_set_sensitive(win->menu.add_pounce, TRUE);
 		gtk_widget_set_sensitive(win->menu.get_info, FALSE);
 		gtk_widget_set_sensitive(win->menu.invite, FALSE);
@@ -6790,31 +6796,7 @@
 				? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text))
 				: NULL;
 			char *esc = NULL, *tmp;
-#if GTK_CHECK_VERSION(2,6,0)
 			esc = topic ? g_markup_escape_text(topic, -1) : NULL;
-#else
-			/* GTK < 2.6 doesn't have auto ellipsization, so we do a crude
-			 * trucation to prevent forcing the window to be as wide as the topic */
-			int len = 0;
-			char *c;
-
-			if (topic != NULL) {
-				tmp = g_strdup(topic);
-				c = tmp;
-				while(*c && len < 72) {
-					c = g_utf8_next_char(c);
-					len++;
-				}
-				if (len == 72) {
-					*c = '\0';
-					c = g_strdup_printf("%s...", tmp);
-					g_free(tmp);
-					tmp = c;
-				}
-				esc = g_markup_escape_text(tmp, -1);
-				g_free(tmp);
-			}
-#endif
 			tmp = g_markup_escape_text(purple_conversation_get_title(conv), -1);
 			markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>",
 						tmp, esc  && *esc ? "\n" : "",
@@ -7165,9 +7147,7 @@
 
 	event = gtk_event_box_new();
 	gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event);
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE);
-#endif
 	gtk_widget_add_events(event,
                               GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
 	g_signal_connect(G_OBJECT(event), "button-press-event",
@@ -7240,12 +7220,7 @@
 	horiz = (gtk_notebook_get_tab_pos(notebook) == GTK_POS_TOP ||
 			gtk_notebook_get_tab_pos(notebook) == GTK_POS_BOTTOM);
 
-#if GTK_CHECK_VERSION(2,2,0)
 	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook));
-#else
-	/* this is hacky, but it's only for Gtk 2.0.0... */
-	count = g_list_length(GTK_NOTEBOOK(notebook)->children);
-#endif
 
 	for (i = 0; i < count; i++) {
 
@@ -8249,9 +8224,7 @@
 		}
 		gtk_rc_parse_string(str->str);
 		g_string_free(str, TRUE);
-#if GTK_CHECK_VERSION(2,4,0)
 		gtk_rc_reset_styles(settings);
-#endif
 	}
 }
 
@@ -8498,16 +8471,6 @@
 	return FALSE;
 }
 
-#if !GTK_CHECK_VERSION(2,6,0)
-/* Courtesy of Galeon! */
-static void
-tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state)
-{
-	if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE)
-		gtk_widget_set_state(widget, GTK_STATE_NORMAL);
-}
-#endif
-
 static void
 notebook_init_grab(PidginWindow *gtkwin, GtkWidget *widget)
 {
@@ -9149,9 +9112,7 @@
 	entry = gtk_entry_new();
 	gtk_entry_set_has_frame(GTK_ENTRY(entry), FALSE);
 	gtk_entry_set_width_chars(GTK_ENTRY(entry), 10);
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_entry_set_alignment(GTK_ENTRY(entry), 0.5);
-#endif
 
 	gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), entry, TRUE, TRUE, 0);
 	/* after the tab label */
@@ -9350,9 +9311,7 @@
 	GtkPositionType pos;
 	GtkWidget *testidea;
 	GtkWidget *menubar;
-#if GTK_CHECK_VERSION(2,6,0)
 	GdkModifierType state;
-#endif
 
 	win = g_malloc0(sizeof(PidginWindow));
 
@@ -9360,10 +9319,9 @@
 
 	/* Create the window. */
 	win->window = pidgin_create_window(NULL, 0, "conversation", TRUE);
-#if GTK_CHECK_VERSION(2,6,0)
 	if (!gtk_get_current_event_state(&state))
 		gtk_window_set_focus_on_map(GTK_WINDOW(win->window), FALSE);
-#endif
+
 	/* Etan: I really think this entire function call should happen only
 	 * when we are on Windows but I was informed that back before we used
 	 * to save the window position we stored the window size, so I'm
@@ -9506,37 +9464,17 @@
 }
 
 static gboolean
-close_button_left_cb(GtkWidget *widget, GdkEventCrossing *event, GtkLabel *label)
-{
-	static GdkCursor *ptr = NULL;
-	if (ptr == NULL) {
-		ptr = gdk_cursor_new(GDK_LEFT_PTR);
-	}
-
-	gtk_label_set_markup(label, "×");
-	gdk_window_set_cursor(event->window, ptr);
-	return FALSE;
-}
-
-static gboolean
-close_button_entered_cb(GtkWidget *widget, GdkEventCrossing *event, GtkLabel *label)
-{
-	static GdkCursor *hand = NULL;
-	if (hand == NULL) {
-		hand = gdk_cursor_new(GDK_HAND2);
-	}
-
-	gtk_label_set_markup(label, "<u>×</u>");
-	gdk_window_set_cursor(event->window, hand);
-	return FALSE;
-}
-
-static gboolean
 gtkconv_tab_set_tip(GtkWidget *widget, GdkEventCrossing *event, PidginConversation *gtkconv)
 {
 #if GTK_CHECK_VERSION(2, 12, 0)
 #define gtk_tooltips_set_tip(tips, w, l, p)  gtk_widget_set_tooltip_text(w, l)
 #endif
+/* PANGO_VERSION_CHECK macro was introduced in 1.15. So we need this double check. */
+#ifndef PANGO_VERSION_CHECK
+#define pango_layout_is_ellipsized(l) TRUE
+#elif !PANGO_VERSION_CHECK(1,16,0)
+#define pango_layout_is_ellipsized(l) TRUE
+#endif
 	PangoLayout *layout;
 
 	layout = gtk_label_get_layout(GTK_LABEL(gtkconv->tab_label));
@@ -9555,7 +9493,6 @@
 	PurpleConversation *conv = gtkconv->active_conv;
 	PidginConversation *focus_gtkconv;
 	GtkWidget *tab_cont = gtkconv->tab_cont;
-	GtkWidget *close_image;
 	PurpleConversationType conv_type;
 	const gchar *tmp_lab;
 
@@ -9569,32 +9506,13 @@
 
 
 	/* Close button. */
-	gtkconv->close = gtk_event_box_new();
-#if GTK_CHECK_VERSION(2,4,0)
-	gtk_event_box_set_visible_window(GTK_EVENT_BOX(gtkconv->close), FALSE);
-#endif
-	gtk_widget_set_events(gtkconv->close, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
-	close_image = gtk_label_new("×");
-	g_signal_connect(G_OBJECT(gtkconv->close), "enter-notify-event", G_CALLBACK(close_button_entered_cb), close_image);
-	g_signal_connect(G_OBJECT(gtkconv->close), "leave-notify-event", G_CALLBACK(close_button_left_cb), close_image);
-	gtk_widget_show(close_image);
-	gtk_container_add(GTK_CONTAINER(gtkconv->close), close_image);
+	gtkconv->close = create_close_button();
 	gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->close,
 	                     _("Close conversation"), NULL);
 
 	g_signal_connect(G_OBJECT(gtkconv->close), "button-press-event",
 			 G_CALLBACK(close_conv_cb), gtkconv);
 
-#if !GTK_CHECK_VERSION(2,6,0)
-	/*
-	* I love Galeon. They have a fix for that stupid annoying visible
-	* border bug. I love you guys! -- ChipX86
-	*/
-	/* This is fixed properly in some version of Gtk before 2.6.0  */
-	g_signal_connect(G_OBJECT(gtkconv->close), "state_changed",
-	                 G_CALLBACK(tab_close_button_state_changed_cb), NULL);
-#endif
-
 	/* Status icon. */
 	gtkconv->icon = gtk_image_new();
 	gtkconv->menu_icon = gtk_image_new();
@@ -9663,7 +9581,6 @@
 	else if (purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == (GTK_POS_RIGHT|8))
 		angle = 270;
 
-#if GTK_CHECK_VERSION(2,6,0)
 	if (!angle) {
 		g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_END,  NULL);
 		gtk_label_set_width_chars(GTK_LABEL(gtkconv->tab_label), 4);
@@ -9680,7 +9597,6 @@
 	}
 
 	gtk_label_set_angle(GTK_LABEL(gtkconv->tab_label), angle);
-#endif
 
 #if 0
 	gtk_misc_set_alignment(GTK_MISC(gtkconv->tab_label), 0.00, 0.5);
@@ -9703,9 +9619,7 @@
 	}
 
 	ebox = gtk_event_box_new();
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE);
-#endif
 	gtk_container_add(GTK_CONTAINER(ebox), gtkconv->tabby);
 	g_signal_connect(G_OBJECT(ebox), "enter-notify-event",
 			G_CALLBACK(gtkconv_tab_set_tip), gtkconv);
--- a/pidgin/gtkconv.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkconv.h	Thu Feb 18 21:38:43 2010 +0000
@@ -177,6 +177,12 @@
 		int timer;
 		GList *current;
 	} attach;
+
+	/* Quick Find (since 2.7.0) */
+	struct {
+		GtkWidget *entry;
+		GtkWidget *container;
+	} quickfind;
 };
 
 /*@}*/
--- a/pidgin/gtkdebug.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkdebug.c	Thu Feb 18 21:38:43 2010 +0000
@@ -686,7 +686,7 @@
 	width  = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/debug/width");
 	height = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/debug/height");
 
-	win->window = pidgin_create_dialog(_("Debug Window"), 0, "debug", TRUE);
+	win->window = pidgin_create_window(_("Debug Window"), 0, "debug", TRUE);
 	purple_debug_info("gtkdebug", "Setting dimensions to %d, %d\n",
 					width, height);
 
@@ -714,15 +714,14 @@
 #endif /* HAVE_REGEX_H */
 
 	/* Setup the vbox */
-	vbox = pidgin_dialog_get_vbox(GTK_DIALOG(win->window));
+	vbox = gtk_vbox_new(FALSE, 0);
+	gtk_container_add(GTK_CONTAINER(win->window), vbox);
 
 	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/toolbar")) {
 		/* Setup our top button bar thingie. */
 		toolbar = gtk_toolbar_new();
 		gtk_toolbar_set_tooltips(GTK_TOOLBAR(toolbar), TRUE);
-#if GTK_CHECK_VERSION(2,4,0)
 		gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolbar), TRUE);
-#endif
 		g_signal_connect(G_OBJECT(toolbar), "button-press-event", G_CALLBACK(toolbar_context), win);
 
 		gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),
--- a/pidgin/gtkdialogs.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkdialogs.c	Thu Feb 18 21:38:43 2010 +0000
@@ -46,8 +46,6 @@
 
 static GList *dialogwindows = NULL;
 
-static GtkWidget *about = NULL;
-
 struct _PidginGroupMergeObject {
 	PurpleGroup* parent;
 	char *new_name;
@@ -210,6 +208,7 @@
 	{N_("Occitan"),             "oc", "Yannig Marchegay", "yannig@marchegay.org"},
 	{N_("Oriya"),               "or", "Manoj Kumar Giri", "giri.manojkr@gmail.com"},
 	{N_("Punjabi"),             "pa", "Amanpreet Singh Alam", "aalam@users.sf.net"},
+	{N_("Polish"),              "pl", "Piotr Drąg", "piotrdrag@gmail.com"},
 	{N_("Polish"),              "pl", "Piotr Makowski", "pmakowski@aviary.pl"},
 	{N_("Portuguese"),          "pt", "Duarte Henriques", "duarte_henriques@myrealbox.com"},
 	{N_("Portuguese-Brazil"),   "pt_BR", "Rodrigo Luiz Marques Flores", "rodrigomarquesflores@gmail.com"},
@@ -356,11 +355,9 @@
 	}
 }
 
-static void destroy_about(void)
+static void destroy_win(GtkWidget *button, GtkWidget *win)
 {
-	if (about != NULL)
-		gtk_widget_destroy(about);
-	about = NULL;
+	gtk_widget_destroy(win);
 }
 
 #if 0
@@ -403,130 +400,129 @@
 }
 #endif
 
-void pidgin_dialogs_about()
+/* Note: Frees 'string' */
+static GtkWidget *
+pidgin_build_help_dialog(const char *title, const char *role, GString *string)
 {
-	GtkWidget *vbox;
-	GtkWidget *logo;
-	GtkWidget *frame;
-	GtkWidget *text;
-	GtkWidget *button;
-	GtkTextIter iter;
-	GString *str;
-	AtkObject *obj;
-	char* filename, *tmp;
+	GtkWidget *win, *vbox, *frame, *logo, *imhtml, *button;
 	GdkPixbuf *pixbuf;
-	PidginBuddyList *buddylist;
-
-	if (about != NULL) {
-		gtk_window_present(GTK_WINDOW(about));
-		return;
-	}
+	GtkTextIter iter;
+	AtkObject *obj;
+	char *filename, *tmp;
 
-	tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME);
-	about = pidgin_create_dialog(tmp, PIDGIN_HIG_BORDER, "about", TRUE);
-	g_free(tmp);
-	gtk_window_set_default_size(GTK_WINDOW(about), 340, 450);
-
-	vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(about), FALSE, PIDGIN_HIG_BORDER);
+	win = pidgin_create_dialog(title, PIDGIN_HIG_BORDER, role, TRUE);
+	vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(win), FALSE, PIDGIN_HIG_BORDER);
+	gtk_window_set_default_size(GTK_WINDOW(win), 450, 450);
 
 	/* Generate a logo with a version number */
-	logo = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	gtk_widget_realize(logo);
 	filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "logo.png", NULL);
 	pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 	g_free(filename);
+
 #if 0  /* Don't versionize the logo when the logo has the version in it */
 	pidgin_logo_versionize(&pixbuf, logo);
 #endif
-	gtk_widget_destroy(logo);
+
+	/* Insert the logo */
 	logo = gtk_image_new_from_pixbuf(pixbuf);
 	g_object_unref(G_OBJECT(pixbuf));
-	/* Insert the logo */
 	obj = gtk_widget_get_accessible(logo);
 	tmp = g_strconcat(PIDGIN_NAME, " " DISPLAY_VERSION, NULL);
 	atk_object_set_description(obj, tmp);
 	g_free(tmp);
 	gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, FALSE, 0);
 
-	frame = pidgin_create_imhtml(FALSE, &text, NULL, NULL);
-	gtk_imhtml_set_format_functions(GTK_IMHTML(text), GTK_IMHTML_ALL ^ GTK_IMHTML_SMILEY);
+	frame = pidgin_create_imhtml(FALSE, &imhtml, NULL, NULL);
+	gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_SMILEY);
 	gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
 
+	gtk_imhtml_append_text(GTK_IMHTML(imhtml), string->str, GTK_IMHTML_NO_SCROLL);
+	gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(imhtml)), &iter);
+	gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(imhtml)), &iter);
+
+	button = pidgin_dialog_add_button(GTK_DIALOG(win), GTK_STOCK_CLOSE,
+	                G_CALLBACK(destroy_win), win);
+
+	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+	gtk_widget_grab_default(button);
+
+	gtk_widget_show_all(win);
+	gtk_window_present(GTK_WINDOW(win));
+
+	g_string_free(string, TRUE);
+
+	return win;
+}
+
+void pidgin_dialogs_about(void)
+{
+	GString *str;
+	char *tmp;
+	static GtkWidget *about = NULL;
+
+	if (about != NULL) {
+		gtk_window_present(GTK_WINDOW(about));
+		return;
+	}
+
 	str = g_string_sized_new(4096);
 
 	g_string_append_printf(str,
-		"<CENTER><FONT SIZE=\"4\"><B>%s %s</B></FONT></CENTER><BR>(libpurple %s)<BR>%s<BR><BR>", PIDGIN_NAME, DISPLAY_VERSION, purple_core_get_version(), REVISION);
+		"<CENTER><FONT SIZE=\"4\"><B>%s %s</B></FONT></CENTER> (libpurple %s)"
+		"<BR>%s<BR><BR>", PIDGIN_NAME, DISPLAY_VERSION,
+		purple_core_get_version(), REVISION);
+
+	g_string_append_printf(str,
+		_("%s is a messaging client based on libpurple which is capable of "
+		  "connecting to multiple messaging services at once.  %s is written "
+		  "in C using GTK+.  %s is released, and may be modified and "
+		  "redistributed,  under the terms of the GPL version 2 (or later).  "
+		  "A copy of the GPL is distributed with %s.  %s is copyrighted by "
+		  "its contributors, a list of whom is also distributed with %s.  "
+		  "There is no warranty for %s.<BR><BR>"), PIDGIN_NAME, PIDGIN_NAME,
+		PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME);
+
+	g_string_append_printf(str,
+			_("<FONT SIZE=\"4\"><B>Helpful Resources</B></FONT><BR>\t<A "
+			  "HREF=\"%s\">Website</A><BR>\t<A HREF=\"%s\">Frequently Asked "
+			  "Questions</A><BR>\tIRC Channel: #pidgin on irc.freenode.net<BR>"
+			  "\tXMPP MUC: devel@conference.pidgin.im<BR><BR>"), PURPLE_WEBSITE,
+			"http://developer.pidgin.im/wiki/FAQ");
 
 	g_string_append_printf(str,
-		_("%s is a graphical modular messaging client based on "
-		  "libpurple which is capable of connecting to "
-		  "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, "
-		  "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, "
-		  "MySpaceIM, Gadu-Gadu, and QQ all at once.  "
-		  "It is written using GTK+.<BR><BR>"
-		  "You may modify and redistribute the program under "
-		  "the terms of the GPL (version 2 or later).  A copy of the GPL is "
-		  "contained in the 'COPYING' file distributed with %s.  "
-		  "%s is copyrighted by its contributors.  See the 'COPYRIGHT' "
-		  "file for the complete list of contributors.  We provide no "
-		  "warranty for this program.<BR><BR>"), PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME);
+			_("<font size=\"4\"><b>Help from other Pidgin users</b></font> is "
+			  "available by e-mailing <a "
+			  "href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>"
+			  "This is a <b>public</b> mailing list! "
+			  "(<a href=\"http://pidgin.im/pipermail/support/\">archive</a>)<br/>"
+			  "We can't help with third-party protocols or plugins!<br/>"
+			  "This list's primary language is <b>English</b>.  You are "
+			  "welcome to post in another language, but the responses may "
+			  "be less helpful.<br/>"));
 
-	g_string_append(str, "<FONT SIZE=\"4\">URL:</FONT> <A HREF=\""
-				PURPLE_WEBSITE "\">" PURPLE_WEBSITE "</A><BR/><BR/>");
-	g_string_append_printf(str, _("<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\""
-				"http://developer.pidgin.im/wiki/FAQ\">"
-				"http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"));
-	g_string_append_printf(str,
-			_("<font size=\"4\">Help from other Pidgin users:</font> "
-			"<a href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>"
-			"This is a <b>public</b> mailing list! "
-			"(<a href=\"http://pidgin.im/pipermail/support/\">archive</a>)<br/>"
-			"We can't help with 3rd party protocols or plugins!<br/>"
-			"This list's primary language is <b>English</b>.  You are "
-			"welcome to post in another language, but the responses may "
-			"be less helpful.<br/><br/>"));
-	g_string_append_printf(str, _("<FONT SIZE=\"4\">IRC Channel:</FONT> "
-				"#pidgin on irc.freenode.net<BR><BR>"));
-	g_string_append_printf(str, _("<FONT SIZE=\"4\">XMPP MUC:</FONT> "
-				"devel@conference.pidgin.im<BR><BR>"));
+	tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME);
+	about = pidgin_build_help_dialog(tmp, "about", str);
+	g_signal_connect(G_OBJECT(about), "destroy", G_CALLBACK(gtk_widget_destroyed), &about);
+	g_free(tmp);
+}
 
-	/* Current Developers */
-	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
-						   _("Current Developers"));
-	add_developers(str, developers);
-	g_string_append(str, "<BR/>");
-
-	/* Crazy Patch Writers */
-	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
-						   _("Crazy Patch Writers"));
-	add_developers(str, patch_writers);
-	g_string_append(str, "<BR/>");
-
-	/* Retired Developers */
-	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
-						   _("Retired Developers"));
-	add_developers(str, retired_developers);
-	g_string_append(str, "<BR/>");
+void pidgin_dialogs_buildinfo(void)
+{
+	GString *str;
+	char *tmp;
+	static GtkWidget *buildinfo = NULL;
 
-	/* Retired Crazy Patch Writers */
-	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
-						   _("Retired Crazy Patch Writers"));
-	add_developers(str, retired_patch_writers);
-	g_string_append(str, "<BR/>");
+	if (buildinfo != NULL) {
+		gtk_window_present(GTK_WINDOW(buildinfo));
+		return;
+	}
 
-	/* Current Translators */
-	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
-						   _("Current Translators"));
-	add_translators(str, translators);
-	g_string_append(str, "<BR/>");
+	str = g_string_sized_new(4096);
 
-	/* Past Translators */
-	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
-						   _("Past Translators"));
-	add_translators(str, past_translators);
-	g_string_append(str, "<BR/>");
+	g_string_append_printf(str,
+		"<FONT SIZE=\"4\"><B>%s %s</B></FONT> (libpurple %s)<BR>%s<BR><BR>", PIDGIN_NAME, DISPLAY_VERSION, purple_core_get_version(), REVISION);
 
-	g_string_append_printf(str, "<FONT SIZE=\"4\">%s</FONT><br/>", _("Debugging Information"));
+	g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s</B></FONT><br/>", _("Build Information"));
 
 	/* The following primarly intented for user/developer interaction and thus
 	   ought not be translated */
@@ -703,31 +699,82 @@
 
 	/* End of not to be translated section */
 
-	gtk_imhtml_append_text(GTK_IMHTML(text), str->str, GTK_IMHTML_NO_SCROLL);
-	g_string_free(str, TRUE);
+	tmp = g_strdup_printf(_("%s Build Information"), PIDGIN_NAME);
+	buildinfo = pidgin_build_help_dialog(tmp, "buildinfo", str);
+	g_signal_connect(G_OBJECT(buildinfo), "destroy", G_CALLBACK(gtk_widget_destroyed), &buildinfo);
+	g_free(tmp);
+}
 
-	gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
-	gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
+void pidgin_dialogs_developers(void)
+{
+	GString *str;
+	char *tmp;
+	static GtkWidget *developer_info = NULL;
+
+	if (developer_info != NULL) {
+		gtk_window_present(GTK_WINDOW(developer_info));
+		return;
+	}
 
-	/* Close Button */
-	button = pidgin_dialog_add_button(GTK_DIALOG(about), GTK_STOCK_CLOSE,
-	                G_CALLBACK(destroy_about), about);
+	str = g_string_sized_new(4096);
+
+	/* Current Developers */
+	g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
+						   _("Current Developers"));
+	add_developers(str, developers);
+	g_string_append(str, "<BR/>");
 
-	g_signal_connect(G_OBJECT(about), "destroy",
-					 G_CALLBACK(destroy_about), G_OBJECT(about));
+	/* Crazy Patch Writers */
+	g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
+						   _("Crazy Patch Writers"));
+	add_developers(str, patch_writers);
+	g_string_append(str, "<BR/>");
+
+	/* Retired Developers */
+	g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
+						   _("Retired Developers"));
+	add_developers(str, retired_developers);
+	g_string_append(str, "<BR/>");
 
-	/* this makes the sizes not work? */
-	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
-	gtk_widget_grab_default(button);
+	/* Retired Crazy Patch Writers */
+	g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
+						   _("Retired Crazy Patch Writers"));
+	add_developers(str, retired_patch_writers);
+
+	tmp = g_strdup_printf(_("%s Developer Information"), PIDGIN_NAME);
+	developer_info = pidgin_build_help_dialog(tmp, "developer_info", str);
+	g_signal_connect(G_OBJECT(developer_info), "destroy", G_CALLBACK(gtk_widget_destroyed), &developer_info);
+	g_free(tmp);
+}
+
+void pidgin_dialogs_translators(void)
+{
+	GString *str;
+	char *tmp;
+	static GtkWidget *translator_info = NULL;
 
-	/* Let's give'em something to talk about -- woah woah woah */
-	buddylist = pidgin_blist_get_default_gtk_blist();
-	if (buddylist)
-		gtk_window_set_transient_for(GTK_WINDOW(about),
-				GTK_WINDOW(buddylist->window));
+	if (translator_info != NULL) {
+		gtk_window_present(GTK_WINDOW(translator_info));
+		return;
+	}
+
+	str = g_string_sized_new(4096);
 
-	gtk_widget_show_all(about);
-	gtk_window_present(GTK_WINDOW(about));
+	/* Current Translators */
+	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
+						   _("Current Translators"));
+	add_translators(str, translators);
+	g_string_append(str, "<BR/>");
+
+	/* Past Translators */
+	g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
+						   _("Past Translators"));
+	add_translators(str, past_translators);
+
+	tmp = g_strdup_printf(_("%s Translator Information"), PIDGIN_NAME);
+	translator_info = pidgin_build_help_dialog(tmp, "translator_info", str);
+	g_signal_connect(G_OBJECT(translator_info), "destroy", G_CALLBACK(gtk_widget_destroyed), &translator_info);
+	g_free(tmp);
 }
 
 static void
--- a/pidgin/gtkdialogs.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkdialogs.h	Thu Feb 18 21:38:43 2010 +0000
@@ -33,6 +33,9 @@
 /* Functions in gtkdialogs.c (these should actually stay in this file) */
 void pidgin_dialogs_destroy_all(void);
 void pidgin_dialogs_about(void);
+void pidgin_dialogs_buildinfo(void);
+void pidgin_dialogs_developers(void);
+void pidgin_dialogs_translators(void);
 void pidgin_dialogs_im(void);
 void pidgin_dialogs_im_with_user(PurpleAccount *, const char *);
 void pidgin_dialogs_info(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/gtkdocklet-gtk.c	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,160 @@
+/*
+ * System tray icon (aka docklet) plugin for Purple
+ *
+ * Copyright (C) 2007 Anders Hasselqvist
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include "internal.h"
+#include "pidgin.h"
+#include "debug.h"
+#include "prefs.h"
+#include "pidginstock.h"
+#include "gtkdocklet.h"
+
+#if GTK_CHECK_VERSION(2,10,0)
+
+/* globals */
+GtkStatusIcon *docklet = NULL;
+
+static void
+docklet_gtk_status_activated_cb(GtkStatusIcon *status_icon, gpointer user_data)
+{
+	pidgin_docklet_clicked(1); 
+}
+
+static void
+docklet_gtk_status_clicked_cb(GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data)
+{
+	pidgin_docklet_clicked(button); 
+}
+
+static void
+docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending)
+{
+	const gchar *icon_name = NULL;
+
+	switch (status) {
+		case PURPLE_STATUS_OFFLINE:
+			icon_name = PIDGIN_STOCK_TRAY_OFFLINE;
+			break;
+		case PURPLE_STATUS_AWAY:
+			icon_name = PIDGIN_STOCK_TRAY_AWAY;
+			break;
+		case PURPLE_STATUS_UNAVAILABLE:
+			icon_name = PIDGIN_STOCK_TRAY_BUSY;
+			break;
+		case PURPLE_STATUS_EXTENDED_AWAY:
+			icon_name = PIDGIN_STOCK_TRAY_XA;
+			break;
+		case PURPLE_STATUS_INVISIBLE:
+			icon_name = PIDGIN_STOCK_TRAY_INVISIBLE;
+			break;
+		default:
+			icon_name = PIDGIN_STOCK_TRAY_AVAILABLE;
+			break;
+	}
+
+	if (pending)
+		icon_name = PIDGIN_STOCK_TRAY_PENDING;
+	if (connecting)
+		icon_name = PIDGIN_STOCK_TRAY_CONNECT;
+
+	if (icon_name) {
+		gtk_status_icon_set_from_icon_name(docklet, icon_name);
+	}
+}
+
+static void
+docklet_gtk_status_set_tooltip(gchar *tooltip)
+{
+	if (tooltip) {
+		gtk_status_icon_set_tooltip(docklet, tooltip);
+	} else {
+		gtk_status_icon_set_tooltip(docklet, NULL);
+	}
+}
+
+static void
+docklet_gtk_status_position_menu(GtkMenu *menu,
+                                 int *x, int *y, gboolean *push_in,
+                                 gpointer user_data)
+{
+	gtk_status_icon_position_menu(menu, x, y, push_in, docklet);
+}
+
+static void
+docklet_gtk_status_destroy(void)
+{
+	g_return_if_fail(docklet != NULL);
+
+	pidgin_docklet_remove();
+	
+	g_object_unref(G_OBJECT(docklet));
+	docklet = NULL;
+
+	purple_debug_info("docklet", "GTK+ destroyed\n");
+}
+
+static void
+docklet_gtk_status_create(gboolean recreate)
+{
+	if (docklet) {
+		/* if this is being called when a tray icon exists, it's because
+		   something messed up. try destroying it before we proceed,
+		   although docklet_refcount may be all hosed. hopefully won't happen. */
+		purple_debug_warning("docklet", "trying to create icon but it already exists?\n");
+		docklet_gtk_status_destroy();
+	}
+
+	docklet = gtk_status_icon_new();
+	g_return_if_fail(docklet != NULL);
+
+	g_signal_connect(G_OBJECT(docklet), "activate", G_CALLBACK(docklet_gtk_status_activated_cb), NULL);
+	g_signal_connect(G_OBJECT(docklet), "popup-menu", G_CALLBACK(docklet_gtk_status_clicked_cb), NULL);
+
+	pidgin_docklet_embedded();
+	gtk_status_icon_set_visible(docklet, TRUE);
+	purple_debug_info("docklet", "GTK+ created\n");
+}
+
+static void
+docklet_gtk_status_create_ui_op(void)
+{
+	docklet_gtk_status_create(FALSE);
+}
+
+static struct docklet_ui_ops ui_ops =
+{
+	docklet_gtk_status_create_ui_op,
+	docklet_gtk_status_destroy,
+	docklet_gtk_status_update_icon,
+	NULL,
+	docklet_gtk_status_set_tooltip,
+	docklet_gtk_status_position_menu
+};
+
+void
+docklet_ui_init(void)
+{
+	pidgin_docklet_set_ui_ops(&ui_ops);
+	gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(),
+		DATADIR G_DIR_SEPARATOR_S "pixmaps" G_DIR_SEPARATOR_S "pidgin" G_DIR_SEPARATOR_S "tray");
+}
+
+#endif  /* GTK_CHECK_VERSION(2,10,0) */
+
--- a/pidgin/gtkdocklet-x11.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkdocklet-x11.c	Thu Feb 18 21:38:43 2010 +0000
@@ -34,6 +34,8 @@
 #include "gtkdocklet.h"
 #include <gdk/gdkkeysyms.h>
 
+#if !GTK_CHECK_VERSION(2,10,0)
+
 #define SHORT_EMBED_TIMEOUT 5000
 #define LONG_EMBED_TIMEOUT 15000
 
@@ -59,7 +61,7 @@
 static void
 docklet_x11_embedded_cb(GtkWidget *widget, void *data)
 {
-	purple_debug(PURPLE_DEBUG_INFO, "docklet", "embedded\n");
+	purple_debug(PURPLE_DEBUG_INFO, "docklet", "X11 embedded\n");
 
 	g_source_remove(embed_timeout);
 	embed_timeout = 0;
@@ -70,7 +72,7 @@
 static void
 docklet_x11_destroyed_cb(GtkWidget *widget, void *data)
 {
-	purple_debug(PURPLE_DEBUG_INFO, "docklet", "destroyed\n");
+	purple_debug(PURPLE_DEBUG_INFO, "docklet", "X11 destroyed\n");
 
 	pidgin_docklet_remove();
 
@@ -205,7 +207,6 @@
 	}
 }
 
-#if GTK_CHECK_VERSION(2,2,0)
 static void
 docklet_x11_position_menu(GtkMenu *menu, int *x, int *y, gboolean *push_in,
 						  gpointer user_data)
@@ -230,7 +231,6 @@
 
 	*push_in = TRUE;
 }
-#endif
 
 static void
 docklet_x11_destroy(void)
@@ -254,7 +254,7 @@
 
 	image = NULL;
 
-	purple_debug(PURPLE_DEBUG_INFO, "docklet", "destroyed\n");
+	purple_debug(PURPLE_DEBUG_INFO, "docklet", "X11 destroyed\n");
 }
 
 static gboolean
@@ -265,7 +265,7 @@
 	 * loaded so that it can embed automatically if/when a notification
 	 * area becomes available.
 	 */
-	purple_debug_info("docklet", "failed to embed within timeout\n");
+	purple_debug_info("docklet", "X11 failed to embed within timeout\n");
 	pidgin_docklet_remove();
 
 	return FALSE;
@@ -328,7 +328,7 @@
 		}
 	}
 
-	purple_debug(PURPLE_DEBUG_INFO, "docklet", "created\n");
+	purple_debug(PURPLE_DEBUG_INFO, "docklet", "X11 created\n");
 }
 
 static void
@@ -344,11 +344,7 @@
 	docklet_x11_update_icon,
 	docklet_x11_blank_icon,
 	docklet_x11_set_tooltip,
-#if GTK_CHECK_VERSION(2,2,0)
 	docklet_x11_position_menu
-#else
-	NULL
-#endif
 };
 
 void
@@ -358,3 +354,6 @@
 	purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet/x11");
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded", FALSE);
 }
+
+#endif  /* !GTK_CHECK_VERSION(2,10,0) */
+
--- a/pidgin/gtkdocklet.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkdocklet.h	Thu Feb 18 21:38:43 2010 +0000
@@ -49,7 +49,7 @@
 void pidgin_docklet_uninit(void);
 void*pidgin_docklet_get_handle(void);
 
-/* function in gtkdocklet-{x11,win32}.c */
+/* function in gtkdocklet-{gtk,x11,win32}.c */
 void docklet_ui_init(void);
 
 #endif /* _GTKDOCKLET_H_ */
--- a/pidgin/gtkexpander.c	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1659 +0,0 @@
-/* GTK - The GIMP Toolkit
- *
- * Copyright (C) 2003 Sun Microsystems, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- *
- * Authors:
- *	Mark McLoughlin <mark@skynet.ie>
- */
-
-/*
-#include <config.h>
-*/
-
-#include <gtk/gtkversion.h>
-#if !GTK_CHECK_VERSION(2,4,0)
-#include "gtkexpander.h"
-
-#include <gtk/gtklabel.h>
-#include <gtk/gtkcontainer.h>
-#include <gtk/gtkmarshal.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkprivate.h>
-#include <gdk/gdkkeysyms.h>
-
-#define P_(x) (x)
-
-#define DEFAULT_EXPANDER_SIZE 10
-#define DEFAULT_EXPANDER_SPACING 2
-
-enum
-{
-  PROP_0,
-  PROP_EXPANDED,
-  PROP_LABEL,
-  PROP_USE_UNDERLINE,
-  PROP_USE_MARKUP,
-  PROP_SPACING,
-  PROP_LABEL_WIDGET
-};
-
-struct _GtkExpanderPrivate
-{
-  GtkWidget        *label_widget;
-  GdkWindow        *event_window;
-  gint              spacing;
-
-  GtkExpanderStyle  expander_style;
-  guint             animation_timeout;
-
-  guint             expanded : 1;
-  guint             use_underline : 1;
-  guint             use_markup : 1;
-  guint             button_down : 1;
-  guint             prelight : 1;
-};
-
-static void gtk_expander_class_init (GtkExpanderClass *klass);
-static void gtk_expander_init       (GtkExpander      *expander);
-
-static void gtk_expander_set_property (GObject          *object,
-				       guint             prop_id,
-				       const GValue     *value,
-				       GParamSpec       *pspec);
-static void gtk_expander_get_property (GObject          *object,
-				       guint             prop_id,
-				       GValue           *value,
-				       GParamSpec       *pspec);
-
-static void gtk_expander_finalize (GObject *object);
-
-static void gtk_expander_destroy (GtkObject *object);
-
-static void     gtk_expander_realize        (GtkWidget        *widget);
-static void     gtk_expander_unrealize      (GtkWidget        *widget);
-static void     gtk_expander_size_request   (GtkWidget        *widget,
-					     GtkRequisition   *requisition);
-static void     gtk_expander_size_allocate  (GtkWidget        *widget,
-					     GtkAllocation    *allocation);
-static void     gtk_expander_map            (GtkWidget        *widget);
-static void     gtk_expander_unmap          (GtkWidget        *widget);
-static gboolean gtk_expander_expose         (GtkWidget        *widget,
-					     GdkEventExpose   *event);
-static gboolean gtk_expander_button_press   (GtkWidget        *widget,
-					     GdkEventButton   *event);
-static gboolean gtk_expander_button_release (GtkWidget        *widget,
-					     GdkEventButton   *event);
-static gboolean gtk_expander_enter_notify   (GtkWidget        *widget,
-					     GdkEventCrossing *event);
-static gboolean gtk_expander_leave_notify   (GtkWidget        *widget,
-					     GdkEventCrossing *event);
-static gboolean gtk_expander_focus          (GtkWidget        *widget,
-					     GtkDirectionType  direction);
-static void     gtk_expander_grab_notify    (GtkWidget        *widget,
-					     gboolean          was_grabbed);
-static void     gtk_expander_state_changed  (GtkWidget        *widget,
-					     GtkStateType      previous_state);
-
-static void gtk_expander_add    (GtkContainer *container,
-				 GtkWidget    *widget);
-static void gtk_expander_remove (GtkContainer *container,
-				 GtkWidget    *widget);
-static void gtk_expander_forall (GtkContainer *container,
-				 gboolean        include_internals,
-				 GtkCallback     callback,
-				 gpointer        callback_data);
-
-static void gtk_expander_activate (GtkExpander *expander);
-
-static void get_expander_bounds (GtkExpander  *expander,
-				 GdkRectangle *rect);
-
-static GtkBinClass *parent_class = NULL;
-
-GType
-gtk_expander_get_type (void)
-{
-  static GType expander_type = 0;
-
-  if (!expander_type)
-    {
-      static const GTypeInfo expander_info =
-      {
-	sizeof (GtkExpanderClass),
-	NULL,		/* base_init */
-	NULL,		/* base_finalize */
-	(GClassInitFunc) gtk_expander_class_init,
-	NULL,		/* class_finalize */
-	NULL,		/* class_data */
-	sizeof (GtkExpander),
-	0,		/* n_preallocs */
-	(GInstanceInitFunc) gtk_expander_init,
-      };
-
-      expander_type = g_type_register_static (GTK_TYPE_BIN,
-					      "GtkExpander",
-					      &expander_info, 0);
-    }
-
-  return expander_type;
-}
-
-static void
-gtk_expander_class_init (GtkExpanderClass *klass)
-{
-  GObjectClass *gobject_class;
-  GtkObjectClass *object_class;
-  GtkWidgetClass *widget_class;
-  GtkContainerClass *container_class;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class   = (GObjectClass *) klass;
-  object_class    = (GtkObjectClass *) klass;
-  widget_class    = (GtkWidgetClass *) klass;
-  container_class = (GtkContainerClass *) klass;
-
-  gobject_class->set_property = gtk_expander_set_property;
-  gobject_class->get_property = gtk_expander_get_property;
-  gobject_class->finalize     = gtk_expander_finalize;
-
-  object_class->destroy = gtk_expander_destroy;
-
-  widget_class->realize              = gtk_expander_realize;
-  widget_class->unrealize            = gtk_expander_unrealize;
-  widget_class->size_request         = gtk_expander_size_request;
-  widget_class->size_allocate        = gtk_expander_size_allocate;
-  widget_class->map                  = gtk_expander_map;
-  widget_class->unmap                = gtk_expander_unmap;
-  widget_class->expose_event         = gtk_expander_expose;
-  widget_class->button_press_event   = gtk_expander_button_press;
-  widget_class->button_release_event = gtk_expander_button_release;
-  widget_class->enter_notify_event   = gtk_expander_enter_notify;
-  widget_class->leave_notify_event   = gtk_expander_leave_notify;
-  widget_class->focus                = gtk_expander_focus;
-  widget_class->grab_notify          = gtk_expander_grab_notify;
-  widget_class->state_changed        = gtk_expander_state_changed;
-
-  container_class->add    = gtk_expander_add;
-  container_class->remove = gtk_expander_remove;
-  container_class->forall = gtk_expander_forall;
-
-  klass->activate = gtk_expander_activate;
-
-  g_object_class_install_property (gobject_class,
-				   PROP_EXPANDED,
-				   g_param_spec_boolean ("expanded",
-							 P_("Expanded"),
-							 P_("Whether the expander has been opened to reveal the child widget"),
-							 FALSE,
-							 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (gobject_class,
-				   PROP_LABEL,
-				   g_param_spec_string ("label",
-							P_("Label"),
-							P_("Text of the expander's label"),
-							NULL,
-							G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (gobject_class,
-				   PROP_USE_UNDERLINE,
-				   g_param_spec_boolean ("use_underline",
-							 P_("Use underline"),
-							 P_("If set, an underline in the text indicates the next character should be used for the mnemonic accelerator key"),
-							 FALSE,
-							 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (gobject_class,
-				   PROP_USE_MARKUP,
-				   g_param_spec_boolean ("use_markup",
-							 P_("Use markup"),
-							 P_("The text of the label includes XML markup. See pango_parse_markup()"),
-							 FALSE,
-							 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (gobject_class,
-				   PROP_SPACING,
-				   g_param_spec_int ("spacing",
-						     P_("Spacing"),
-						     P_("Space to put between the label and the child"),
-						     0,
-						     G_MAXINT,
-						     0,
-						     G_PARAM_READWRITE));
-
-  g_object_class_install_property (gobject_class,
-				   PROP_LABEL_WIDGET,
-				   g_param_spec_object ("label_widget",
-							P_("Label widget"),
-							P_("A widget to display in place of the usual expander label"),
-							GTK_TYPE_WIDGET,
-							G_PARAM_READWRITE));
-
-  gtk_widget_class_install_style_property (widget_class,
-					   g_param_spec_int ("expander-size",
-							     P_("Expander Size"),
-							     P_("Size of the expander arrow"),
-							     0,
-							     G_MAXINT,
-							     DEFAULT_EXPANDER_SIZE,
-							     G_PARAM_READABLE));
-
-  gtk_widget_class_install_style_property (widget_class,
-					   g_param_spec_int ("expander-spacing",
-							     P_("Indicator Spacing"),
-							     P_("Spacing around expander arrow"),
-							     0,
-							     G_MAXINT,
-							     DEFAULT_EXPANDER_SPACING,
-							     G_PARAM_READABLE));
-
-  widget_class->activate_signal =
-    g_signal_new ("activate",
-		  G_TYPE_FROM_CLASS (gobject_class),
-		  G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-		  G_STRUCT_OFFSET (GtkExpanderClass, activate),
-		  NULL, NULL,
-		  gtk_marshal_VOID__VOID,
-		  G_TYPE_NONE, 0);
-}
-
-static void
-gtk_expander_finalize (GObject *obj)
-{
-	GtkExpander *self = (GtkExpander *)obj;
-
-	g_free(self->priv);
-
-	G_OBJECT_CLASS(parent_class)->finalize (obj);
-}
-
-static void
-gtk_expander_init (GtkExpander *expander)
-{
-  GtkExpanderPrivate *priv;
-
-  expander->priv = priv = g_new0(GtkExpanderPrivate, 1);
-
-  GTK_WIDGET_SET_FLAGS (expander, GTK_CAN_FOCUS);
-  GTK_WIDGET_SET_FLAGS (expander, GTK_NO_WINDOW);
-
-  priv->label_widget = NULL;
-  priv->event_window = NULL;
-  priv->spacing = 0;
-
-  priv->expander_style = GTK_EXPANDER_COLLAPSED;
-  priv->animation_timeout = 0;
-
-  priv->expanded = FALSE;
-  priv->use_underline = FALSE;
-  priv->use_markup = FALSE;
-  priv->button_down = FALSE;
-  priv->prelight = FALSE;
-}
-
-static void
-gtk_expander_set_property (GObject      *object,
-			   guint         prop_id,
-			   const GValue *value,
-			   GParamSpec   *pspec)
-{
-  GtkExpander *expander = GTK_EXPANDER (object);
-
-  switch (prop_id)
-    {
-    case PROP_EXPANDED:
-      gtk_expander_set_expanded (expander, g_value_get_boolean (value));
-      break;
-    case PROP_LABEL:
-      gtk_expander_set_label (expander, g_value_get_string (value));
-      break;
-    case PROP_USE_UNDERLINE:
-      gtk_expander_set_use_underline (expander, g_value_get_boolean (value));
-      break;
-    case PROP_USE_MARKUP:
-      gtk_expander_set_use_markup (expander, g_value_get_boolean (value));
-      break;
-    case PROP_SPACING:
-      gtk_expander_set_spacing (expander, g_value_get_int (value));
-      break;
-    case PROP_LABEL_WIDGET:
-      gtk_expander_set_label_widget (expander, g_value_get_object (value));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-gtk_expander_get_property (GObject    *object,
-			   guint       prop_id,
-			   GValue     *value,
-			   GParamSpec *pspec)
-{
-  GtkExpander *expander = GTK_EXPANDER (object);
-  GtkExpanderPrivate *priv = expander->priv;
-
-  switch (prop_id)
-    {
-    case PROP_EXPANDED:
-      g_value_set_boolean (value, priv->expanded);
-      break;
-    case PROP_LABEL:
-      g_value_set_string (value, gtk_expander_get_label (expander));
-      break;
-    case PROP_USE_UNDERLINE:
-      g_value_set_boolean (value, priv->use_underline);
-      break;
-    case PROP_USE_MARKUP:
-      g_value_set_boolean (value, priv->use_markup);
-      break;
-    case PROP_SPACING:
-      g_value_set_int (value, priv->spacing);
-      break;
-    case PROP_LABEL_WIDGET:
-      g_value_set_object (value,
-			  priv->label_widget ?
-			  G_OBJECT (priv->label_widget) : NULL);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-gtk_expander_destroy (GtkObject *object)
-{
-  GtkExpanderPrivate *priv = GTK_EXPANDER (object)->priv;
-
-  if (priv->animation_timeout)
-    {
-      g_source_remove (priv->animation_timeout);
-      priv->animation_timeout = 0;
-    }
-
-  GTK_OBJECT_CLASS (parent_class)->destroy (object);
-}
-
-static void
-gtk_expander_realize (GtkWidget *widget)
-{
-  GtkExpanderPrivate *priv;
-  GdkWindowAttr attributes;
-  gint attributes_mask;
-  gint border_width;
-  GdkRectangle expander_rect;
-
-  priv = GTK_EXPANDER (widget)->priv;
-  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
-  border_width = GTK_CONTAINER (widget)->border_width;
-
-  get_expander_bounds (GTK_EXPANDER (widget), &expander_rect);
-
-  attributes.window_type = GDK_WINDOW_CHILD;
-  attributes.x = widget->allocation.x + border_width;
-  attributes.y = expander_rect.y;
-  attributes.width = MAX (widget->allocation.width - 2 * border_width, 1);
-  attributes.height = expander_rect.width;
-  attributes.wclass = GDK_INPUT_ONLY;
-  attributes.event_mask = gtk_widget_get_events (widget)     |
-				GDK_BUTTON_PRESS_MASK        |
-				GDK_BUTTON_RELEASE_MASK      |
-				GDK_ENTER_NOTIFY_MASK        |
-				GDK_LEAVE_NOTIFY_MASK;
-
-  attributes_mask = GDK_WA_X | GDK_WA_Y;
-
-  widget->window = gtk_widget_get_parent_window (widget);
-  g_object_ref (widget->window);
-
-  priv->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),
-				       &attributes, attributes_mask);
-  gdk_window_set_user_data (priv->event_window, widget);
-
-  widget->style = gtk_style_attach (widget->style, widget->window);
-  gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
-}
-
-static void
-gtk_expander_unrealize (GtkWidget *widget)
-{
-  GtkExpanderPrivate *priv = GTK_EXPANDER (widget)->priv;
-
-  if (priv->event_window)
-    {
-      gdk_window_set_user_data (priv->event_window, NULL);
-      gdk_window_destroy (priv->event_window);
-      priv->event_window = NULL;
-    }
-
-  GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
-}
-
-static void
-gtk_expander_size_request (GtkWidget      *widget,
-			   GtkRequisition *requisition)
-{
-  GtkExpander *expander;
-  GtkBin *bin;
-  GtkExpanderPrivate *priv;
-  gint border_width;
-  gint expander_size;
-  gint expander_spacing;
-  gboolean interior_focus;
-  gint focus_width;
-  gint focus_pad;
-
-  bin = GTK_BIN (widget);
-  expander = GTK_EXPANDER (widget);
-  priv = expander->priv;
-
-  border_width = GTK_CONTAINER (widget)->border_width;
-
-  gtk_widget_style_get (widget,
-			"interior-focus", &interior_focus,
-			"focus-line-width", &focus_width,
-			"focus-padding", &focus_pad,
-			"expander-size", &expander_size,
-			"expander-spacing", &expander_spacing,
-			NULL);
-
-  requisition->width = expander_size + 2 * expander_spacing +
-		       2 * focus_width + 2 * focus_pad;
-  requisition->height = interior_focus ? (2 * focus_width + 2 * focus_pad) : 0;
-
-  if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
-    {
-      GtkRequisition label_requisition;
-
-      gtk_widget_size_request (priv->label_widget, &label_requisition);
-
-      requisition->width  += label_requisition.width;
-      requisition->height += label_requisition.height;
-    }
-
-  requisition->height = MAX (expander_size + 2 * expander_spacing, requisition->height);
-
-  if (!interior_focus)
-    requisition->height += 2 * focus_width + 2 * focus_pad;
-
-  if (bin->child && GTK_WIDGET_CHILD_VISIBLE (bin->child))
-    {
-      GtkRequisition child_requisition;
-
-      gtk_widget_size_request (bin->child, &child_requisition);
-
-      requisition->width = MAX (requisition->width, child_requisition.width);
-      requisition->height += child_requisition.height + priv->spacing;
-    }
-
-  requisition->width  += 2 * border_width;
-  requisition->height += 2 * border_width;
-}
-
-static void
-get_expander_bounds (GtkExpander  *expander,
-		     GdkRectangle *rect)
-{
-  GtkWidget *widget;
-  GtkBin *bin;
-  GtkExpanderPrivate *priv;
-  gint border_width;
-  gint expander_size;
-  gint expander_spacing;
-  gboolean interior_focus;
-  gint focus_width;
-  gint focus_pad;
-  gboolean ltr;
-
-  widget = GTK_WIDGET (expander);
-  bin = GTK_BIN (expander);
-  priv = expander->priv;
-
-  border_width = GTK_CONTAINER (expander)->border_width;
-
-  gtk_widget_style_get (widget,
-			"interior-focus", &interior_focus,
-			"focus-line-width", &focus_width,
-			"focus-padding", &focus_pad,
-			"expander-size", &expander_size,
-			"expander-spacing", &expander_spacing,
-			NULL);
-
-  ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
-
-  rect->x = widget->allocation.x + border_width;
-  rect->y = widget->allocation.y + border_width;
-
-  if (ltr)
-    rect->x += expander_spacing;
-  else
-    rect->x += widget->allocation.width - 2 * border_width -
-               expander_spacing - expander_size;
-
-  if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
-    {
-      GtkAllocation label_allocation;
-
-      label_allocation = priv->label_widget->allocation;
-
-      if (expander_size < label_allocation.height)
-	rect->y += focus_width + focus_pad + (label_allocation.height - expander_size) / 2;
-      else
-	rect->y += expander_spacing;
-    }
-  else
-    {
-      rect->y += expander_spacing;
-    }
-
-  if (!interior_focus)
-    {
-      if (ltr)
-	rect->x += focus_width + focus_pad;
-      else
-	rect->x -= focus_width + focus_pad;
-      rect->y += focus_width + focus_pad;
-    }
-
-  rect->width = rect->height = expander_size;
-}
-
-static void
-gtk_expander_size_allocate (GtkWidget     *widget,
-			    GtkAllocation *allocation)
-{
-  GtkExpander *expander;
-  GtkBin *bin;
-  GtkExpanderPrivate *priv;
-  GtkRequisition child_requisition;
-  gboolean child_visible = FALSE;
-  gint border_width;
-  gint expander_size;
-  gint expander_spacing;
-  gboolean interior_focus;
-  gint focus_width;
-  gint focus_pad;
-  gint label_height;
-
-  expander = GTK_EXPANDER (widget);
-  bin = GTK_BIN (widget);
-  priv = expander->priv;
-
-  border_width = GTK_CONTAINER (widget)->border_width;
-
-  gtk_widget_style_get (widget,
-			"interior-focus", &interior_focus,
-			"focus-line-width", &focus_width,
-			"focus-padding", &focus_pad,
-			"expander-size", &expander_size,
-			"expander-spacing", &expander_spacing,
-			NULL);
-
-  child_requisition.width = 0;
-  child_requisition.height = 0;
-  if (bin->child && GTK_WIDGET_CHILD_VISIBLE (bin->child))
-    {
-      child_visible = TRUE;
-      gtk_widget_get_child_requisition (bin->child, &child_requisition);
-    }
-
-  widget->allocation = *allocation;
-
-  if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
-    {
-      GtkAllocation label_allocation;
-      GtkRequisition label_requisition;
-      gboolean ltr;
-
-      gtk_widget_get_child_requisition (priv->label_widget, &label_requisition);
-
-      ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
-
-      if (ltr)
-	label_allocation.x = (widget->allocation.x +
-                              border_width + focus_width + focus_pad +
-                              expander_size + 2 * expander_spacing);
-      else
-        label_allocation.x = (widget->allocation.x + widget->allocation.width -
-                              (label_requisition.width +
-                               border_width + focus_width + focus_pad +
-                               expander_size + 2 * expander_spacing));
-
-      label_allocation.y = widget->allocation.y + border_width + focus_width + focus_pad;
-
-      label_allocation.width = MIN (label_requisition.width,
-				    allocation->width - 2 * border_width -
-				    expander_size - 2 * expander_spacing -
-				    2 * focus_width - 2 * focus_pad);
-      label_allocation.width = MAX (label_allocation.width, 1);
-
-      label_allocation.height = MIN (label_requisition.height,
-				     allocation->height - 2 * border_width -
-				     2 * focus_width - 2 * focus_pad -
-				     (child_visible ? priv->spacing : 0));
-      label_allocation.height = MAX (label_allocation.height, 1);
-
-      gtk_widget_size_allocate (priv->label_widget, &label_allocation);
-
-      label_height = label_allocation.height;
-    }
-  else
-    {
-      label_height = 0;
-    }
-
-  if (GTK_WIDGET_REALIZED (widget))
-    {
-      GdkRectangle rect;
-
-      get_expander_bounds (expander, &rect);
-
-      gdk_window_move_resize (priv->event_window,
-			      allocation->x + border_width, rect.y,
-			      MAX (allocation->width - 2 * border_width, 1), rect.width);
-    }
-
-  if (child_visible)
-    {
-      GtkAllocation child_allocation;
-      gint top_height;
-
-      top_height = MAX (2 * expander_spacing + expander_size,
-			label_height +
-			(interior_focus ? 2 * focus_width + 2 * focus_pad : 0));
-
-      child_allocation.x = widget->allocation.x + border_width;
-      child_allocation.y = widget->allocation.y + border_width + top_height + priv->spacing;
-
-      if (!interior_focus)
-	child_allocation.y += 2 * focus_width + 2 * focus_pad;
-
-      child_allocation.width = MAX (allocation->width - 2 * border_width, 1);
-
-      child_allocation.height = allocation->height - top_height -
-				2 * border_width - priv->spacing -
-				(!interior_focus ? 2 * focus_width + 2 * focus_pad : 0);
-      child_allocation.height = MAX (child_allocation.height, 1);
-
-      gtk_widget_size_allocate (bin->child, &child_allocation);
-    }
-}
-
-static void
-gtk_expander_map (GtkWidget *widget)
-{
-  GtkExpanderPrivate *priv = GTK_EXPANDER (widget)->priv;
-
-  if (priv->label_widget)
-    gtk_widget_map (priv->label_widget);
-
-  GTK_WIDGET_CLASS (parent_class)->map (widget);
-
-  if (priv->event_window)
-    gdk_window_show (priv->event_window);
-}
-
-static void
-gtk_expander_unmap (GtkWidget *widget)
-{
-  GtkExpanderPrivate *priv = GTK_EXPANDER (widget)->priv;
-
-  if (priv->event_window)
-    gdk_window_hide (priv->event_window);
-
-  GTK_WIDGET_CLASS (parent_class)->unmap (widget);
-
-  if (priv->label_widget)
-    gtk_widget_unmap (priv->label_widget);
-}
-
-static void
-gtk_expander_paint_prelight (GtkExpander *expander)
-{
-  GtkWidget *widget;
-  GtkContainer *container;
-  GtkExpanderPrivate *priv;
-  GdkRectangle area;
-  gboolean interior_focus;
-  int focus_width;
-  int focus_pad;
-  int expander_size;
-  int expander_spacing;
-
-  priv = expander->priv;
-  widget = GTK_WIDGET (expander);
-  container = GTK_CONTAINER (expander);
-
-  gtk_widget_style_get (widget,
-			"interior-focus", &interior_focus,
-			"focus-line-width", &focus_width,
-			"focus-padding", &focus_pad,
-			"expander-size", &expander_size,
-			"expander-spacing", &expander_spacing,
-			NULL);
-
-  area.x = widget->allocation.x + container->border_width;
-  area.y = widget->allocation.y + container->border_width;
-  area.width = widget->allocation.width - (2 * container->border_width);
-
-  if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
-    area.height = priv->label_widget->allocation.height;
-  else
-    area.height = 0;
-
-  area.height += interior_focus ? (focus_width + focus_pad) * 2 : 0;
-  area.height = MAX (area.height, expander_size + 2 * expander_spacing);
-  area.height += !interior_focus ? (focus_width + focus_pad) * 2 : 0;
-
-  gtk_paint_flat_box (widget->style, widget->window,
-		      GTK_STATE_PRELIGHT,
-		      GTK_SHADOW_ETCHED_OUT,
-		      &area, widget, "expander",
-		      area.x, area.y,
-		      area.width, area.height);
-}
-
-static void
-gtk_expander_paint (GtkExpander *expander)
-{
-  GtkWidget *widget;
-  GdkRectangle clip;
-  GtkStateType state;
-
-  widget = GTK_WIDGET (expander);
-
-  get_expander_bounds (expander, &clip);
-
-  state = widget->state;
-  if (expander->priv->prelight)
-    {
-      state = GTK_STATE_PRELIGHT;
-
-      gtk_expander_paint_prelight (expander);
-    }
-
-  gtk_paint_expander (widget->style,
-		      widget->window,
-		      state,
-		      &clip,
-		      widget,
-		      "expander",
-		      clip.x + clip.width / 2,
-		      clip.y + clip.height / 2,
-		      expander->priv->expander_style);
-}
-
-static void
-gtk_expander_paint_focus (GtkExpander  *expander,
-			  GdkRectangle *area)
-{
-  GtkWidget *widget;
-  GtkExpanderPrivate *priv;
-  gint x, y, width, height;
-  gboolean interior_focus;
-  gint border_width;
-  gint focus_width;
-  gint focus_pad;
-  gint expander_size;
-  gint expander_spacing;
-  gboolean ltr;
-
-  widget = GTK_WIDGET (expander);
-  priv = expander->priv;
-
-  border_width = GTK_CONTAINER (widget)->border_width;
-
-  gtk_widget_style_get (widget,
-			"interior-focus", &interior_focus,
-			"focus-line-width", &focus_width,
-			"focus-padding", &focus_pad,
-			"expander-size", &expander_size,
-			"expander-spacing", &expander_spacing,
-			NULL);
-
-  ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL;
-
-  x = widget->allocation.x + border_width;
-  y = widget->allocation.y + border_width;
-
-  if (ltr && interior_focus)
-    x += expander_spacing * 2 + expander_size;
-
-  width = height = 0;
-
-  if (priv->label_widget && GTK_WIDGET_VISIBLE (priv->label_widget))
-    {
-      GtkAllocation label_allocation = priv->label_widget->allocation;
-
-      width  = label_allocation.width;
-      height = label_allocation.height;
-    }
-
-  if (!interior_focus)
-    {
-      width += expander_size + 2 * expander_spacing;
-      height = MAX (height, expander_size + 2 * expander_spacing);
-    }
-
-  width  += 2 * focus_pad + 2 * focus_width;
-  height += 2 * focus_pad + 2 * focus_width;
-
-  gtk_paint_focus (widget->style, widget->window, GTK_WIDGET_STATE (widget),
-		   area, widget, "expander",
-		   x, y, width, height);
-}
-
-static gboolean
-gtk_expander_expose (GtkWidget      *widget,
-		     GdkEventExpose *event)
-{
-  if (GTK_WIDGET_DRAWABLE (widget))
-    {
-      GtkExpander *expander = GTK_EXPANDER (widget);
-
-      gtk_expander_paint (expander);
-
-      if (GTK_WIDGET_HAS_FOCUS (expander))
-	gtk_expander_paint_focus (expander, &event->area);
-
-      GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
-    }
-
-  return FALSE;
-}
-
-static gboolean
-gtk_expander_button_press (GtkWidget      *widget,
-			   GdkEventButton *event)
-{
-  GtkExpander *expander = GTK_EXPANDER (widget);
-
-  if (event->button == 1 && event->window == expander->priv->event_window)
-    {
-      expander->priv->button_down = TRUE;
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-static gboolean
-gtk_expander_button_release (GtkWidget      *widget,
-			     GdkEventButton *event)
-{
-  GtkExpander *expander = GTK_EXPANDER (widget);
-
-  if (event->button == 1 && expander->priv->button_down)
-    {
-      gtk_widget_activate (widget);
-      expander->priv->button_down = FALSE;
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-static void
-gtk_expander_grab_notify (GtkWidget *widget,
-			  gboolean   was_grabbed)
-{
-  if (!was_grabbed)
-    GTK_EXPANDER (widget)->priv->button_down = FALSE;
-}
-
-static void
-gtk_expander_state_changed (GtkWidget    *widget,
-			    GtkStateType  previous_state)
-{
-  if (!GTK_WIDGET_IS_SENSITIVE (widget))
-    GTK_EXPANDER (widget)->priv->button_down = FALSE;
-}
-
-static void
-gtk_expander_redraw_expander (GtkExpander *expander)
-{
-  GtkWidget *widget;
-
-  widget = GTK_WIDGET (expander);
-
-  if (GTK_WIDGET_REALIZED (widget))
-    gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);
-}
-
-static gboolean
-gtk_expander_enter_notify (GtkWidget        *widget,
-			   GdkEventCrossing *event)
-{
-  GtkExpander *expander = GTK_EXPANDER (widget);
-  GtkWidget *event_widget;
-
-  event_widget = gtk_get_event_widget ((GdkEvent *) event);
-
-  if (event_widget == widget &&
-      event->detail != GDK_NOTIFY_INFERIOR)
-    {
-      expander->priv->prelight = TRUE;
-
-      if (expander->priv->label_widget)
-	gtk_widget_set_state (expander->priv->label_widget, GTK_STATE_PRELIGHT);
-
-      gtk_expander_redraw_expander (expander);
-    }
-
-  return FALSE;
-}
-
-static gboolean
-gtk_expander_leave_notify (GtkWidget        *widget,
-			   GdkEventCrossing *event)
-{
-  GtkExpander *expander = GTK_EXPANDER (widget);
-  GtkWidget *event_widget;
-
-  event_widget = gtk_get_event_widget ((GdkEvent *) event);
-
-  if (event_widget == widget &&
-      event->detail != GDK_NOTIFY_INFERIOR)
-    {
-      expander->priv->prelight = FALSE;
-
-      if (expander->priv->label_widget)
-	gtk_widget_set_state (expander->priv->label_widget, GTK_STATE_NORMAL);
-
-      gtk_expander_redraw_expander (expander);
-    }
-
-  return FALSE;
-}
-
-typedef enum
-{
-  FOCUS_NONE,
-  FOCUS_WIDGET,
-  FOCUS_LABEL,
-  FOCUS_CHILD
-} FocusSite;
-
-static gboolean
-focus_current_site (GtkExpander      *expander,
-		    GtkDirectionType  direction)
-{
-  GtkWidget *current_focus;
-
-  current_focus = GTK_CONTAINER (expander)->focus_child;
-
-  if (!current_focus)
-    return FALSE;
-
-  return gtk_widget_child_focus (current_focus, direction);
-}
-
-static gboolean
-focus_in_site (GtkExpander      *expander,
-	       FocusSite         site,
-	       GtkDirectionType  direction)
-{
-  switch (site)
-    {
-    case FOCUS_WIDGET:
-      gtk_widget_grab_focus (GTK_WIDGET (expander));
-      return TRUE;
-    case FOCUS_LABEL:
-      if (expander->priv->label_widget)
-	return gtk_widget_child_focus (expander->priv->label_widget, direction);
-      else
-	return FALSE;
-    case FOCUS_CHILD:
-      {
-	GtkWidget *child = gtk_bin_get_child (GTK_BIN (expander));
-
-	if (child && GTK_WIDGET_CHILD_VISIBLE (child))
-	  return gtk_widget_child_focus (child, direction);
-	else
-	  return FALSE;
-      }
-    case FOCUS_NONE:
-      break;
-    }
-
-  g_assert_not_reached ();
-  return FALSE;
-}
-
-static FocusSite
-get_next_site (GtkExpander      *expander,
-	       FocusSite         site,
-	       GtkDirectionType  direction)
-{
-  gboolean ltr;
-
-  ltr = gtk_widget_get_direction (GTK_WIDGET (expander)) != GTK_TEXT_DIR_RTL;
-
-  switch (site)
-    {
-    case FOCUS_NONE:
-      switch (direction)
-	{
-	case GTK_DIR_TAB_BACKWARD:
-	case GTK_DIR_LEFT:
-	case GTK_DIR_UP:
-	  return FOCUS_CHILD;
-	case GTK_DIR_TAB_FORWARD:
-	case GTK_DIR_DOWN:
-	case GTK_DIR_RIGHT:
-	  return FOCUS_WIDGET;
-	}
-    case FOCUS_WIDGET:
-      switch (direction)
-	{
-	case GTK_DIR_TAB_BACKWARD:
-	case GTK_DIR_UP:
-	  return FOCUS_NONE;
-	case GTK_DIR_LEFT:
-	  return ltr ? FOCUS_NONE : FOCUS_LABEL;
-	case GTK_DIR_TAB_FORWARD:
-	case GTK_DIR_DOWN:
-	  return FOCUS_LABEL;
-	case GTK_DIR_RIGHT:
-	  return ltr ? FOCUS_LABEL : FOCUS_NONE;
-	  break;
-	}
-    case FOCUS_LABEL:
-      switch (direction)
-	{
-	case GTK_DIR_TAB_BACKWARD:
-	case GTK_DIR_UP:
-	  return FOCUS_WIDGET;
-	case GTK_DIR_LEFT:
-	  return ltr ? FOCUS_WIDGET : FOCUS_CHILD;
-	case GTK_DIR_TAB_FORWARD:
-	case GTK_DIR_DOWN:
-	  return FOCUS_CHILD;
-	case GTK_DIR_RIGHT:
-	  return ltr ? FOCUS_CHILD : FOCUS_WIDGET;
-	  break;
-	}
-    case FOCUS_CHILD:
-      switch (direction)
-	{
-	case GTK_DIR_TAB_BACKWARD:
-	case GTK_DIR_LEFT:
-	case GTK_DIR_UP:
-	  return FOCUS_LABEL;
-	case GTK_DIR_TAB_FORWARD:
-	case GTK_DIR_DOWN:
-	case GTK_DIR_RIGHT:
-	  return FOCUS_NONE;
-	}
-    }
-
-  g_assert_not_reached ();
-  return FOCUS_NONE;
-}
-
-static gboolean
-gtk_expander_focus (GtkWidget        *widget,
-		    GtkDirectionType  direction)
-{
-  GtkExpander *expander = GTK_EXPANDER (widget);
-
-  if (!focus_current_site (expander, direction))
-    {
-      GtkWidget *old_focus_child;
-      gboolean widget_is_focus;
-      FocusSite site = FOCUS_NONE;
-
-      widget_is_focus = gtk_widget_is_focus (widget);
-      old_focus_child = GTK_CONTAINER (widget)->focus_child;
-
-      if (old_focus_child && old_focus_child == expander->priv->label_widget)
-	site = FOCUS_LABEL;
-      else if (old_focus_child)
-	site = FOCUS_CHILD;
-      else if (widget_is_focus)
-	site = FOCUS_WIDGET;
-
-      while ((site = get_next_site (expander, site, direction)) != FOCUS_NONE)
-	{
-	  if (focus_in_site (expander, site, direction))
-	    return TRUE;
-	}
-
-      return FALSE;
-    }
-
-  return TRUE;
-}
-
-static void
-gtk_expander_add (GtkContainer *container,
-		  GtkWidget    *widget)
-{
-  GTK_CONTAINER_CLASS (parent_class)->add (container, widget);
-
-  gtk_widget_set_child_visible (widget, GTK_EXPANDER (container)->priv->expanded);
-  gtk_widget_queue_resize (GTK_WIDGET (container));
-}
-
-static void
-gtk_expander_remove (GtkContainer *container,
-		     GtkWidget    *widget)
-{
-  GtkExpander *expander = GTK_EXPANDER (container);
-
-  if (GTK_EXPANDER (expander)->priv->label_widget == widget)
-    gtk_expander_set_label_widget (expander, NULL);
-  else
-    GTK_CONTAINER_CLASS (parent_class)->remove (container, widget);
-}
-
-static void
-gtk_expander_forall (GtkContainer *container,
-		     gboolean      include_internals,
-		     GtkCallback   callback,
-		     gpointer      callback_data)
-{
-  GtkBin *bin = GTK_BIN (container);
-  GtkExpanderPrivate *priv = GTK_EXPANDER (container)->priv;
-
-  if (bin->child)
-    (* callback) (bin->child, callback_data);
-
-  if (priv->label_widget)
-    (* callback) (priv->label_widget, callback_data);
-}
-
-static void
-gtk_expander_activate (GtkExpander *expander)
-{
-  gtk_expander_set_expanded (expander, !expander->priv->expanded);
-}
-
-
-/**
- * gtk_expander_new:
- * @label: the text of the label
- *
- * Creates a new expander using @label as the text of the label.
- *
- * Return value: a new #GtkExpander widget.
- *
- * Since: 2.4
- **/
-GtkWidget *
-gtk_expander_new (const gchar *label)
-{
-  return g_object_new (GTK_TYPE_EXPANDER, "label", label, NULL);
-}
-
-/**
- * gtk_expander_new_with_mnemonic:
- * @label: the text of the label with an underscore in front of the
- *         mnemonic character
- *
- * Creates a new expander using @label as the text of the label.
- * If characters in @label are preceded by an underscore, they are underlined.
- * If you need a literal underscore character in a label, use '__' (two
- * underscores). The first underlined character represents a keyboard
- * accelerator called a mnemonic.
- * Pressing Alt and that key activates the button.
- *
- * Return value: a new #GtkExpander widget.
- *
- * Since: 2.4
- **/
-GtkWidget *
-gtk_expander_new_with_mnemonic (const gchar *label)
-{
-  return g_object_new (GTK_TYPE_EXPANDER,
-		       "label", label,
-		       "use_underline", TRUE,
-		       NULL);
-}
-
-static gboolean
-gtk_expander_animation_timeout (GtkExpander *expander)
-{
-  GtkExpanderPrivate *priv = expander->priv;
-  GdkRectangle area;
-  gboolean finish = FALSE;
-
-  GDK_THREADS_ENTER();
-
-  if (GTK_WIDGET_REALIZED (expander))
-    {
-      get_expander_bounds (expander, &area);
-      gdk_window_invalidate_rect (GTK_WIDGET (expander)->window, &area, TRUE);
-    }
-
-  if (priv->expanded)
-    {
-      if (priv->expander_style == GTK_EXPANDER_COLLAPSED)
-	{
-	  priv->expander_style = GTK_EXPANDER_SEMI_EXPANDED;
-	}
-      else
-	{
-	  priv->expander_style = GTK_EXPANDER_EXPANDED;
-	  finish = TRUE;
-	}
-    }
-  else
-    {
-      if (priv->expander_style == GTK_EXPANDER_EXPANDED)
-	{
-	  priv->expander_style = GTK_EXPANDER_SEMI_COLLAPSED;
-	}
-      else
-	{
-	  priv->expander_style = GTK_EXPANDER_COLLAPSED;
-	  finish = TRUE;
-	}
-    }
-
-  if (finish)
-    {
-      priv->animation_timeout = 0;
-      if (GTK_BIN (expander)->child)
-	gtk_widget_set_child_visible (GTK_BIN (expander)->child, priv->expanded);
-      gtk_widget_queue_resize (GTK_WIDGET (expander));
-    }
-
-  GDK_THREADS_LEAVE();
-
-  return !finish;
-}
-
-static void
-gtk_expander_start_animation (GtkExpander *expander)
-{
-  GtkExpanderPrivate *priv = expander->priv;
-
-  if (priv->animation_timeout)
-    g_source_remove (priv->animation_timeout);
-
-  priv->animation_timeout =
-		g_timeout_add (50,
-			       (GSourceFunc) gtk_expander_animation_timeout,
-			       expander);
-}
-
-/**
- * gtk_expander_set_expanded:
- * @expander: a #GtkExpander
- * @expanded: whether the child widget is revealed
- *
- * Sets the state of the expander. Set to %TRUE, if you want
- * the child widget to be revealed, and %FALSE if you want the
- * child widget to be hidden.
- *
- * Since: 2.4
- **/
-void
-gtk_expander_set_expanded (GtkExpander *expander,
-			   gboolean     expanded)
-{
-  GtkExpanderPrivate *priv;
-
-  g_return_if_fail (GTK_IS_EXPANDER (expander));
-
-  priv = expander->priv;
-
-  expanded = expanded != FALSE;
-
-  if (priv->expanded != expanded)
-    {
-      priv->expanded = expanded;
-
-      if (GTK_WIDGET_REALIZED (expander))
-	{
-	  gtk_expander_start_animation (expander);
-	}
-      else
-	{
-	  priv->expander_style = expanded ? GTK_EXPANDER_EXPANDED :
-					    GTK_EXPANDER_COLLAPSED;
-
-	  if (GTK_BIN (expander)->child)
-	    {
-	      gtk_widget_set_child_visible (GTK_BIN (expander)->child, priv->expanded);
-	      gtk_widget_queue_resize (GTK_WIDGET (expander));
-	    }
-	}
-
-      g_object_notify (G_OBJECT (expander), "expanded");
-    }
-}
-
-/**
- * gtk_expander_get_expanded:
- * @expander:a #GtkExpander
- *
- * Queries a #GtkExpander and returns its current state. Returns %TRUE
- * if the child widget is revealed.
- *
- * See gtk_expander_set_expanded().
- *
- * Return value: the current state of the expander.
- *
- * Since: 2.4
- **/
-gboolean
-gtk_expander_get_expanded (GtkExpander *expander)
-{
-  g_return_val_if_fail (GTK_IS_EXPANDER (expander), FALSE);
-
-  return expander->priv->expanded;
-}
-
-/**
- * gtk_expander_set_spacing:
- * @expander: a #GtkExpander
- * @spacing: distance between the expander and child in pixels.
- *
- * Sets the spacing field of @expander, which is the number of pixels to
- * place between expander and the child.
- *
- * Since: 2.4
- **/
-void
-gtk_expander_set_spacing (GtkExpander *expander,
-			  gint         spacing)
-{
-  g_return_if_fail (GTK_IS_EXPANDER (expander));
-  g_return_if_fail (spacing >= 0);
-
-  if (expander->priv->spacing != spacing)
-    {
-      expander->priv->spacing = spacing;
-
-      gtk_widget_queue_resize (GTK_WIDGET (expander));
-
-      g_object_notify (G_OBJECT (expander), "spacing");
-    }
-}
-
-/**
- * gtk_expander_get_spacing:
- * @expander: a #GtkExpander
- *
- * Gets the value set by gtk_expander_set_spacing().
- *
- * Return value: spacing between the expander and child.
- *
- * Since: 2.4
- **/
-gint
-gtk_expander_get_spacing (GtkExpander *expander)
-{
-  g_return_val_if_fail (GTK_IS_EXPANDER (expander), 0);
-
-  return expander->priv->spacing;
-}
-
-/**
- * gtk_expander_set_label:
- * @expander: a #GtkExpander
- * @label: a string
- *
- * Sets the text of the label of the expander to @label.
- *
- * This will also clear any previously set labels.
- *
- * Since: 2.4
- **/
-void
-gtk_expander_set_label (GtkExpander *expander,
-			const gchar *label)
-{
-  g_return_if_fail (GTK_IS_EXPANDER (expander));
-
-  if (!label)
-    {
-      gtk_expander_set_label_widget (expander, NULL);
-    }
-  else
-    {
-      GtkWidget *child;
-
-      child = gtk_label_new (label);
-      gtk_label_set_use_underline (GTK_LABEL (child), expander->priv->use_underline);
-      gtk_label_set_use_markup (GTK_LABEL (child), expander->priv->use_markup);
-      gtk_widget_show (child);
-
-      gtk_expander_set_label_widget (expander, child);
-    }
-
-  g_object_notify (G_OBJECT (expander), "label");
-}
-
-/**
- * gtk_expander_get_label:
- * @expander: a #GtkExpander
- *
- * Fetches the text from the label of the expander, as set by
- * gtk_expander_set_label(). If the label text has not
- * been set the return value will be %NULL. This will be the
- * case if you create an empty button with gtk_button_new() to
- * use as a container.
- *
- * Return value: The text of the label widget. This string is owned
- * by the widget and must not be modified or freed.
- *
- * Since: 2.4
- **/
-G_CONST_RETURN char *
-gtk_expander_get_label (GtkExpander *expander)
-{
-  GtkExpanderPrivate *priv;
-
-  g_return_val_if_fail (GTK_IS_EXPANDER (expander), NULL);
-
-  priv = expander->priv;
-
-  if (priv->label_widget && GTK_IS_LABEL (priv->label_widget))
-    return gtk_label_get_text (GTK_LABEL (priv->label_widget));
-  else
-    return NULL;
-}
-
-/**
- * gtk_expander_set_use_underline:
- * @expander: a #GtkExpander
- * @use_underline: %TRUE if underlines in the text indicate mnemonics
- *
- * If true, an underline in the text of the expander label indicates
- * the next character should be used for the mnemonic accelerator key.
- *
- * Since: 2.4
- **/
-void
-gtk_expander_set_use_underline (GtkExpander *expander,
-				gboolean     use_underline)
-{
-  GtkExpanderPrivate *priv;
-
-  g_return_if_fail (GTK_IS_EXPANDER (expander));
-
-  priv = expander->priv;
-
-  use_underline = use_underline != FALSE;
-
-  if (priv->use_underline != use_underline)
-    {
-      priv->use_underline = use_underline;
-
-      if (priv->label_widget && GTK_IS_LABEL (priv->label_widget))
-	gtk_label_set_use_underline (GTK_LABEL (priv->label_widget), use_underline);
-
-      g_object_notify (G_OBJECT (expander), "use-underline");
-    }
-}
-
-/**
- * gtk_expander_get_use_underline:
- * @expander: a #GtkExpander
- *
- * Returns whether an embedded underline in the expander label indicates a
- * mnemonic. See gtk_expander_set_use_underline().
- *
- * Return value: %TRUE if an embedded underline in the expander label
- *               indicates the mnemonic accelerator keys.
- *
- * Since: 2.4
- **/
-gboolean
-gtk_expander_get_use_underline (GtkExpander *expander)
-{
-  g_return_val_if_fail (GTK_IS_EXPANDER (expander), FALSE);
-
-  return expander->priv->use_underline;
-}
-
-/**
- * gtk_expander_set_use_markup:
- * @expander: a #GtkExpander
- * @use_markup: %TRUE if the label's text should be parsed for markup
- *
- * Sets whether the text of the label contains markup in <link
- * linkend="PangoMarkupFormat">Pango's text markup
- * language</link>. See gtk_label_set_markup().
- *
- * Since: 2.4
- **/
-void
-gtk_expander_set_use_markup (GtkExpander *expander,
-			     gboolean     use_markup)
-{
-  GtkExpanderPrivate *priv;
-
-  g_return_if_fail (GTK_IS_EXPANDER (expander));
-
-  priv = expander->priv;
-
-  use_markup = use_markup != FALSE;
-
-  if (priv->use_markup != use_markup)
-    {
-      priv->use_markup = use_markup;
-
-      if (priv->label_widget && GTK_IS_LABEL (priv->label_widget))
-	gtk_label_set_use_markup (GTK_LABEL (priv->label_widget), use_markup);
-
-      g_object_notify (G_OBJECT (expander), "use-markup");
-    }
-}
-
-/**
- * gtk_expander_get_use_markup:
- * @expander: a #GtkExpander
- *
- * Returns whether the label's text is interpreted as marked up with
- * the <link linkend="PangoMarkupFormat">Pango text markup
- * language</link>. See gtk_expander_set_use_markup ().
- *
- * Return value: %TRUE if the label's text will be parsed for markup
- *
- * Since: 2.4
- **/
-gboolean
-gtk_expander_get_use_markup (GtkExpander *expander)
-{
-  g_return_val_if_fail (GTK_IS_EXPANDER (expander), FALSE);
-
-  return expander->priv->use_markup;
-}
-
-/**
- * gtk_expander_set_label_widget:
- * @expander: a #GtkExpander
- * @label_widget: the new label widget
- *
- * Set the label widget for the expander. This is the widget
- * that will appear embedded alongside the expander arrow.
- *
- * Since: 2.4
- **/
-void
-gtk_expander_set_label_widget (GtkExpander *expander,
-			       GtkWidget   *label_widget)
-{
-  GtkExpanderPrivate *priv;
-
-  g_return_if_fail (GTK_IS_EXPANDER (expander));
-  g_return_if_fail (label_widget == NULL || GTK_IS_WIDGET (label_widget));
-  g_return_if_fail (label_widget == NULL || label_widget->parent == NULL);
-
-  priv = expander->priv;
-
-  if (priv->label_widget == label_widget)
-    return;
-
-  if (priv->label_widget)
-    {
-      gtk_widget_set_state (priv->label_widget, GTK_STATE_NORMAL);
-      gtk_widget_unparent (priv->label_widget);
-    }
-
-  priv->label_widget = label_widget;
-
-  if (label_widget)
-    {
-      priv->label_widget = label_widget;
-
-      gtk_widget_set_parent (label_widget, GTK_WIDGET (expander));
-
-      if (priv->prelight)
-	gtk_widget_set_state (label_widget, GTK_STATE_PRELIGHT);
-    }
-
-  if (GTK_WIDGET_VISIBLE (expander))
-    gtk_widget_queue_resize (GTK_WIDGET (expander));
-
-  g_object_freeze_notify (G_OBJECT (expander));
-  g_object_notify (G_OBJECT (expander), "label-widget");
-  g_object_notify (G_OBJECT (expander), "label");
-  g_object_thaw_notify (G_OBJECT (expander));
-}
-
-/**
- * gtk_expander_get_label_widget:
- * @expander: a #GtkExpander
- *
- * Retrieves the label widget for the frame. See
- * gtk_expander_set_label_widget().
- *
- * Return value: the label widget, or %NULL if there is none.
- *
- * Since: 2.4
- **/
-GtkWidget *
-gtk_expander_get_label_widget (GtkExpander *expander)
-{
-  g_return_val_if_fail (GTK_IS_EXPANDER (expander), NULL);
-
-  return expander->priv->label_widget;
-}
-
-#define __GTK_EXPANDER_C__
-
-#endif /* Gtk 2.4 */
--- a/pidgin/gtkexpander.h	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/* GTK - The GIMP Toolkit
- *
- * Copyright (C) 2003 Sun Microsystems, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- *
- * Authors:
- *	Mark McLoughlin <mark@skynet.ie>
- */
-
-#ifndef __GTK_EXPANDER_H__
-#define __GTK_EXPANDER_H__
-
-#include <gtk/gtkbin.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_EXPANDER            (gtk_expander_get_type ())
-#define GTK_EXPANDER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_EXPANDER, GtkExpander))
-#define GTK_EXPANDER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_EXPANDER, GtkExpanderClass))
-#define GTK_IS_EXPANDER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_EXPANDER))
-#define GTK_IS_EXPANDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_EXPANDER))
-#define GTK_EXPANDER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_EXPANDER, GtkExpanderClass))
-
-typedef struct _GtkExpander        GtkExpander;
-typedef struct _GtkExpanderClass   GtkExpanderClass;
-typedef struct _GtkExpanderPrivate GtkExpanderPrivate;
-
-struct _GtkExpander
-{
-  GtkBin              bin;
-
-  GtkExpanderPrivate *priv;
-};
-
-struct _GtkExpanderClass
-{
-  GtkBinClass    parent_class;
-
-  /* Key binding signal; to get notification on the expansion
-   * state connect to notify:expanded.
-   */
-  void        (* activate) (GtkExpander *expander);
-};
-
-GType                 gtk_expander_get_type          (void) G_GNUC_CONST;
-
-GtkWidget            *gtk_expander_new               (const gchar *label);
-GtkWidget            *gtk_expander_new_with_mnemonic (const gchar *label);
-
-void                  gtk_expander_set_expanded      (GtkExpander *expander,
-						      gboolean     expanded);
-gboolean              gtk_expander_get_expanded      (GtkExpander *expander);
-
-/* Spacing between the expander/label and the child */
-void                  gtk_expander_set_spacing       (GtkExpander *expander,
-						      gint         spacing);
-gint                  gtk_expander_get_spacing       (GtkExpander *expander);
-
-void                  gtk_expander_set_label         (GtkExpander *expander,
-						      const gchar *label);
-G_CONST_RETURN gchar *gtk_expander_get_label         (GtkExpander *expander);
-
-void                  gtk_expander_set_use_underline (GtkExpander *expander,
-						      gboolean     use_underline);
-gboolean              gtk_expander_get_use_underline (GtkExpander *expander);
-
-void                  gtk_expander_set_use_markup    (GtkExpander *expander,
-						      gboolean    use_markup);
-gboolean              gtk_expander_get_use_markup    (GtkExpander *expander);
-
-void                  gtk_expander_set_label_widget  (GtkExpander *expander,
-						      GtkWidget   *label_widget);
-GtkWidget            *gtk_expander_get_label_widget  (GtkExpander *expander);
-
-G_END_DECLS
-
-#endif /* __GTK_EXPANDER_H__ */
--- a/pidgin/gtkft.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkft.c	Thu Feb 18 21:38:43 2010 +0000
@@ -32,10 +32,8 @@
 #include "prpl.h"
 #include "util.h"
 
-#include "gtkcellrendererprogress.h"
 #include "gtkft.h"
 #include "prefs.h"
-#include "gtkexpander.h"
 #include "pidginstock.h"
 #include "gtkutils.h"
 
@@ -460,27 +458,15 @@
 #ifdef _WIN32
 	/* If using Win32... */
 	int code;
-	if (G_WIN32_HAVE_WIDECHAR_API ()) {
-		wchar_t *wc_filename = g_utf8_to_utf16(
-				purple_xfer_get_local_filename(
-					dialog->selected_xfer),
-				-1, NULL, NULL, NULL);
-
-		code = (int) ShellExecuteW(NULL, NULL, wc_filename, NULL, NULL,
-				SW_SHOW);
+	wchar_t *wc_filename = g_utf8_to_utf16(
+			purple_xfer_get_local_filename(
+				dialog->selected_xfer),
+			-1, NULL, NULL, NULL);
 
-		g_free(wc_filename);
-	} else {
-		char *l_filename = g_locale_from_utf8(
-				purple_xfer_get_local_filename(
-					dialog->selected_xfer),
-				-1, NULL, NULL, NULL);
+	code = (int) ShellExecuteW(NULL, NULL, wc_filename, NULL, NULL,
+			SW_SHOW);
 
-		code = (int) ShellExecuteA(NULL, NULL, l_filename, NULL, NULL,
-				SW_SHOW);
-
-		g_free(l_filename);
-	}
+	g_free(wc_filename);
 
 	if (code == SE_ERR_ASSOCINCOMPLETE || code == SE_ERR_NOASSOC)
 	{
@@ -621,7 +607,7 @@
 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 
 	/* Progress bar column */
-	renderer = pidgin_cell_renderer_progress_new();
+	renderer = gtk_cell_renderer_progress_new();
 	column = gtk_tree_view_column_new_with_attributes(_("Progress"), renderer,
 				"percentage", COLUMN_PROGRESS, NULL);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
@@ -728,11 +714,11 @@
 	GtkWidget *window;
 	GtkWidget *vbox1, *vbox2;
 	GtkWidget *sw;
-	GtkWidget *button;
 	GtkWidget *expander;
 	GtkWidget *alignment;
 	GtkWidget *table;
 	GtkWidget *checkbox;
+	GtkWidget *bbox;
 
 	dialog = g_new0(PidginXferDialog, 1);
 	dialog->keep_open =
@@ -741,14 +727,16 @@
 		purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/filetransfer/clear_finished");
 
 	/* Create the window. */
-	dialog->window = window = pidgin_create_dialog(_("File Transfers"), PIDGIN_HIG_BORDER, "file transfer", TRUE);
+	dialog->window = window = pidgin_create_window(_("File Transfers"), PIDGIN_HIG_BORDER, "file transfer", TRUE);
 	gtk_window_set_default_size(GTK_WINDOW(window), 450, 250);
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
 					 G_CALLBACK(delete_win_cb), dialog);
 
 	/* Create the parent vbox for everything. */
-	vbox1 = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(window), FALSE, PIDGIN_HIG_BORDER);
+	vbox1 = gtk_vbox_new(FALSE, 0);
+	gtk_widget_show(vbox1);
+	gtk_container_add(GTK_CONTAINER(window), vbox1);
 
 	/* Create the main vbox for top half of the window. */
 	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
@@ -799,24 +787,36 @@
 	gtk_container_add(GTK_CONTAINER(alignment), table);
 	gtk_widget_show(table);
 
+	bbox = gtk_hbutton_box_new();
+	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+	gtk_box_set_spacing(GTK_BOX(bbox), PIDGIN_HIG_BOX_SPACE);
+	gtk_box_pack_end(GTK_BOX(vbox1), bbox, FALSE, TRUE, 0);
+	gtk_widget_show(bbox);
+
+#define ADD_BUTTON(b, label, callback, callbackdata) do { \
+		GtkWidget *button = gtk_button_new_from_stock(label); \
+		gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); \
+		g_signal_connect(G_OBJECT(button), "clicked", callback, callbackdata); \
+		gtk_widget_show(button); \
+		b = button; \
+	} while (0)
+
 	/* Open button */
-	button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_OPEN, G_CALLBACK(open_button_cb), dialog);
-	gtk_widget_set_sensitive(button, FALSE);
-	dialog->open_button = button;
+	ADD_BUTTON(dialog->open_button, GTK_STOCK_OPEN, G_CALLBACK(open_button_cb), dialog);
+	gtk_widget_set_sensitive(dialog->open_button, FALSE);
 
 	/* Remove button */
-	button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_REMOVE, G_CALLBACK(remove_button_cb), dialog);
-	gtk_widget_hide(button);
-	dialog->remove_button = button;
+	ADD_BUTTON(dialog->remove_button, GTK_STOCK_REMOVE, G_CALLBACK(remove_button_cb), dialog);
+	gtk_widget_hide(dialog->remove_button);
 
 	/* Stop button */
-	button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_STOP, G_CALLBACK(stop_button_cb), dialog);
-	gtk_widget_set_sensitive(button, FALSE);
-	dialog->stop_button = button;
+	ADD_BUTTON(dialog->stop_button, GTK_STOCK_STOP, G_CALLBACK(stop_button_cb), dialog);
+	gtk_widget_set_sensitive(dialog->stop_button, FALSE);
 
 	/* Close button */
-	button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, G_CALLBACK(close_button_cb), dialog);
-	dialog->close_button = button;
+	ADD_BUTTON(dialog->close_button, GTK_STOCK_CLOSE, G_CALLBACK(close_button_cb), dialog);
+
+#undef ADD_BUTTON
 
 #ifdef _WIN32
 	g_signal_connect(G_OBJECT(dialog->window), "show",
--- a/pidgin/gtkimhtml.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkimhtml.c	Thu Feb 18 21:38:43 2010 +0000
@@ -63,18 +63,8 @@
 
 #include <pango/pango-font.h>
 
-/* GTK+ < 2.4.x hack, see pidgin.h for details. */
-#if (!GTK_CHECK_VERSION(2,4,0))
-#define GTK_WRAP_WORD_CHAR GTK_WRAP_WORD
-#endif
-
 #define TOOLTIP_TIMEOUT 500
 
-/* GTK+ 2.0 hack */
-#if (!GTK_CHECK_VERSION(2,2,0))
-#define gtk_widget_get_clipboard(x, y) gtk_clipboard_get(y)
-#endif
-
 static GtkTextViewClass *parent_class = NULL;
 
 struct scalable_data {
@@ -552,10 +542,8 @@
 	gtk_window_set_title(GTK_WINDOW(imhtml->tip_window), "GtkIMHtml");
 	gtk_window_set_resizable (GTK_WINDOW (imhtml->tip_window), FALSE);
 	gtk_widget_set_name (imhtml->tip_window, "gtk-tooltips");
-#if GTK_CHECK_VERSION(2,10,0)
 	gtk_window_set_type_hint (GTK_WINDOW (imhtml->tip_window),
 		GDK_WINDOW_TYPE_HINT_TOOLTIP);
-#endif
 	g_signal_connect_swapped (G_OBJECT (imhtml->tip_window), "expose_event",
 							  G_CALLBACK (gtk_imhtml_tip_paint), imhtml);
 
@@ -760,32 +748,6 @@
 	return FALSE;
 }
 
-#if (!GTK_CHECK_VERSION(2,2,0))
-/*
- * XXX - This should be removed eventually.
- *
- * This function exists to work around a gross bug in GtkTextView.
- * Basically, we short circuit ctrl+a and ctrl+end because they make
- * el program go boom.
- *
- * It's supposed to be fixed in gtk2.2.  You can view the bug report at
- * http://bugzilla.gnome.org/show_bug.cgi?id=107939
- */
-static gboolean
-gtk_key_pressed_cb(GtkIMHtml *imhtml, GdkEventKey *event, gpointer data)
-{
-	if (event->state & GDK_CONTROL_MASK) {
-		switch (event->keyval) {
-			case 'a':
-			case GDK_Home:
-			case GDK_End:
-				return TRUE;
-		}
-	}
-	return FALSE;
-}
-#endif /* !(GTK+ >= 2.2.0) */
-
 static gint
 gtk_imhtml_expose_event (GtkWidget      *widget,
 			 GdkEventExpose *event)
@@ -1700,10 +1662,6 @@
 	g_signal_connect(G_OBJECT(imhtml), "motion-notify-event", G_CALLBACK(gtk_motion_event_notify), NULL);
 	g_signal_connect(G_OBJECT(imhtml), "leave-notify-event", G_CALLBACK(gtk_leave_event_notify), NULL);
 	g_signal_connect(G_OBJECT(imhtml), "enter-notify-event", G_CALLBACK(gtk_enter_event_notify), NULL);
-#if (!GTK_CHECK_VERSION(2,2,0))
-	/* See the comment for gtk_key_pressed_cb */
-	g_signal_connect(G_OBJECT(imhtml), "key_press_event", G_CALLBACK(gtk_key_pressed_cb), NULL);
-#endif
 	g_signal_connect(G_OBJECT(imhtml), "button_press_event", G_CALLBACK(gtk_imhtml_button_press_event), NULL);
 	g_signal_connect(G_OBJECT(imhtml->text_buffer), "insert-text", G_CALLBACK(preinsert_cb), imhtml);
 	g_signal_connect(G_OBJECT(imhtml->text_buffer), "delete_range", G_CALLBACK(delete_cb), imhtml);
@@ -2173,70 +2131,61 @@
 	return (*len > 0);
 }
 
-GtkIMHtmlSmiley *
-gtk_imhtml_smiley_get(GtkIMHtml *imhtml,
-	const gchar *sml,
-	const gchar *text)
-{
-	GtkSmileyTree *t;
+static GtkIMHtmlSmiley *gtk_imhtml_smiley_get_from_tree(GtkSmileyTree *t, const gchar *text)
+{
 	const gchar *x = text;
-	if (sml == NULL)
-		t = imhtml->default_smilies;
-	else
-		t = g_hash_table_lookup(imhtml->smiley_data, sml);
-
+	gchar *pos;
 
 	if (t == NULL)
-		return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
+		return NULL;
 
 	while (*x) {
-		gchar *pos;
-
-		if (!t->values) {
-			return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
-		}
-
-		pos = strchr (t->values->str, *x);
-		if (pos) {
-			t = t->children [GPOINTER_TO_INT(pos) - GPOINTER_TO_INT(t->values->str)];
-		} else {
-			return sml ? gtk_imhtml_smiley_get(imhtml, NULL, text) : NULL;
-		}
+		if (!t->values)
+			return NULL;
+
+		pos = strchr(t->values->str, *x);
+		if (!pos)
+			return NULL;
+
+		t = t->children[GPOINTER_TO_INT(pos) - GPOINTER_TO_INT(t->values->str)];
 		x++;
 	}
 
 	return t->image;
 }
 
+GtkIMHtmlSmiley *
+gtk_imhtml_smiley_get(GtkIMHtml *imhtml, const gchar *sml, const gchar *text)
+{
+	GtkIMHtmlSmiley *ret;
+
+	/* Look for custom smileys first */
+	if (sml != NULL) {
+		ret = gtk_imhtml_smiley_get_from_tree(g_hash_table_lookup(imhtml->smiley_data, sml), text);
+		if (ret != NULL)
+			return ret;
+	}
+
+	/* Fall back to check for default smileys */
+	return gtk_imhtml_smiley_get_from_tree(imhtml->default_smilies, text);
+}
+
 static GdkPixbufAnimation *
 gtk_smiley_get_image(GtkIMHtmlSmiley *smiley)
 {
-	if (!smiley->icon && smiley->file) {
-		smiley->icon = gdk_pixbuf_animation_new_from_file(smiley->file, NULL);
-	} else if (!smiley->icon && smiley->loader) {
-		smiley->icon = gdk_pixbuf_loader_get_animation(smiley->loader);
-		if (smiley->icon)
-			g_object_ref(G_OBJECT(smiley->icon));
+	if (!smiley->icon) {
+		if (smiley->file) {
+			smiley->icon = gdk_pixbuf_animation_new_from_file(smiley->file, NULL);
+		} else if (smiley->loader) {
+			smiley->icon = gdk_pixbuf_loader_get_animation(smiley->loader);
+			if (smiley->icon)
+				g_object_ref(G_OBJECT(smiley->icon));
+		}
 	}
 
 	return smiley->icon;
 }
 
-static GdkPixbufAnimation *
-gtk_smiley_tree_image (GtkIMHtml     *imhtml,
-		       const gchar   *sml,
-		       const gchar   *text)
-{
-	GtkIMHtmlSmiley *smiley;
-
-	smiley = gtk_imhtml_smiley_get(imhtml,sml,text);
-
-	if (!smiley)
-		return NULL;
-
-	return gtk_smiley_get_image(smiley);
-}
-
 #define VALID_TAG(x)	do { \
 			if (!g_ascii_strncasecmp (string, x ">", strlen (x ">"))) {	\
 				if (tag) *tag = g_strndup (string, strlen (x));		\
@@ -2695,6 +2644,8 @@
 	ws = g_malloc(len + 1);
 	ws[0] = '\0';
 
+	g_object_set_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_thismsg", GINT_TO_POINTER(0));
+
 	gtk_text_buffer_begin_user_action(imhtml->text_buffer);
 	while (pos < len) {
 		if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) {
@@ -3547,6 +3498,8 @@
 	}
 	gtk_text_buffer_delete(imhtml->text_buffer, start, end);
 
+	g_object_set_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_total", GINT_TO_POINTER(0));
+
 	g_object_unref(object);
 }
 
@@ -3703,22 +3656,12 @@
 	image->filesel = NULL;
 
 	if (save->data && save->datasize) {
-#if GLIB_CHECK_VERSION(2,8,0)
 		g_file_set_contents(filename, save->data, save->datasize, &error);
-#else
-		purple_util_write_data_to_file_absolute(filename, save->data, save->datasize);
-#endif
 	} else {
 		gchar *type = NULL;
-#if GTK_CHECK_VERSION(2,2,0)
 		GSList *formats = gdk_pixbuf_get_formats();
-#else
-		char *basename = g_path_get_basename(filename);
-		char *ext = strrchr(basename, '.');
-#endif
 		char *newfilename;
 
-#if GTK_CHECK_VERSION(2,2,0)
 		while (formats) {
 			GdkPixbufFormat *format = formats->data;
 			gchar **extensions = gdk_pixbuf_format_get_extensions(format);
@@ -3745,31 +3688,14 @@
 		}
 
 		g_slist_free(formats);
-#else
-		/* this is really ugly code, but I think it will work */
-		if (ext) {
-			ext++;
-			if (!g_ascii_strcasecmp(ext, "jpeg") || !g_ascii_strcasecmp(ext, "jpg"))
-				type = g_strdup("jpeg");
-			else if (!g_ascii_strcasecmp(ext, "png"))
-				type = g_strdup("png");
-		}
-
-		g_free(basename);
-#endif
 
 		/* If I can't find a valid type, I will just tell the user about it and then assume
 		   it's a png */
 		if (!type){
 			char *basename, *tmp;
 			char *dirname;
-#if GTK_CHECK_VERSION(2,4,0)
 			GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
 							_("<span size='larger' weight='bold'>Unrecognized file type</span>\n\nDefaulting to PNG."));
-#else
-			GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-							_("Unrecognized file type\n\nDefaulting to PNG."));
-#endif
 
 			g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
 			gtk_widget_show(dialog);
@@ -3798,20 +3724,14 @@
 	}
 
 	if (error){
-#if GTK_CHECK_VERSION(2,4,0)
 		GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
 				_("<span size='larger' weight='bold'>Error saving image</span>\n\n%s"), error->message);
-#else
-		GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-				_("Error saving image\n\n%s"), error->message);
-#endif
 		g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
 		gtk_widget_show(dialog);
 		g_error_free(error);
 	}
 }
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 static void
 image_save_check_if_exists_cb(GtkWidget *widget, gint response, GtkIMHtmlImageSave *save)
 {
@@ -3825,32 +3745,6 @@
 	}
 
 	filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
-#else /* FILECHOOSER */
-static void
-image_save_check_if_exists_cb(GtkWidget *button, GtkIMHtmlImageSave *save)
-{
-	gchar *filename;
-	GtkIMHtmlImage *image = (GtkIMHtmlImage *)save->image;
-
-	filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(image->filesel)));
-
-	if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
-		gchar *dirname;
-		/* append a / is needed */
-		if (filename[strlen(filename) - 1] != G_DIR_SEPARATOR) {
-			dirname = g_strconcat(filename, G_DIR_SEPARATOR_S, NULL);
-		} else {
-			dirname = g_strdup(filename);
-		}
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(image->filesel), dirname);
-		g_free(dirname);
-		g_free(filename);
-		return;
-	}
-#endif /* FILECHOOSER */
-#if 0 /* mismatched curly braces */
-	}
-#endif
 
 	/*
 	 * XXX - We should probably prompt the user to determine if they really
@@ -3868,15 +3762,6 @@
 	g_free(filename);
 }
 
-#if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
-static void
-image_save_cancel_cb(GtkIMHtmlImage *image)
-{
-	gtk_widget_destroy(image->filesel);
-	image->filesel = NULL;
-}
-#endif /* FILECHOOSER */
-
 static void
 gtk_imhtml_image_save(GtkWidget *w, GtkIMHtmlImageSave *save)
 {
@@ -3887,7 +3772,6 @@
 		return;
 	}
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	image->filesel = gtk_file_chooser_dialog_new(_("Save Image"),
 						NULL,
 						GTK_FILE_CHOOSER_ACTION_SAVE,
@@ -3899,17 +3783,6 @@
 		gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(image->filesel), image->filename);
 	g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(image->filesel)), "response",
 					 G_CALLBACK(image_save_check_if_exists_cb), save);
-#else /* FILECHOOSER */
-	image->filesel = gtk_file_selection_new(_("Save Image"));
-	if (image->filename != NULL)
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(image->filesel), image->filename);
-	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(image->filesel)), "delete_event",
-							 G_CALLBACK(image_save_cancel_cb), image);
-	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->cancel_button),
-							 "clicked", G_CALLBACK(image_save_cancel_cb), image);
-	g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->ok_button), "clicked",
-					 G_CALLBACK(image_save_check_if_exists_cb), save);
-#endif /* FILECHOOSER */
 
 	gtk_widget_show(image->filesel);
 }
@@ -4983,12 +4856,33 @@
 	GdkPixbufAnimation *annipixbuf = NULL;
 	GtkWidget *icon = NULL;
 	GtkTextChildAnchor *anchor = NULL;
-	char *unescaped = purple_unescape_html(smiley);
-	GtkIMHtmlSmiley *imhtml_smiley = gtk_imhtml_smiley_get(imhtml, sml, unescaped);
+	char *unescaped;
+	GtkIMHtmlSmiley *imhtml_smiley;
 	GtkWidget *ebox = NULL;
+	int numsmileys_thismsg, numsmileys_total;
+
+	/*
+	 * This GtkIMHtml has the maximum number of smileys allowed, so don't
+	 * add any more.  We do this for performance reasons, because smileys
+	 * are apparently pretty inefficient.  Hopefully we can remove this
+	 * restriction when we're using a better HTML widget.
+	 */
+	numsmileys_thismsg = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_thismsg"));
+	if (numsmileys_thismsg >= 30) {
+		gtk_text_buffer_insert(imhtml->text_buffer, iter, smiley, -1);
+		return;
+	}
+	numsmileys_total = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_total"));
+	if (numsmileys_total >= 300) {
+		gtk_text_buffer_insert(imhtml->text_buffer, iter, smiley, -1);
+		return;
+	}
+
+	unescaped = purple_unescape_html(smiley);
+	imhtml_smiley = gtk_imhtml_smiley_get(imhtml, sml, unescaped);
 
 	if (imhtml->format_functions & GTK_IMHTML_SMILEY) {
-		annipixbuf = gtk_smiley_tree_image(imhtml, sml, unescaped);
+		annipixbuf = imhtml_smiley ? gtk_smiley_get_image(imhtml_smiley) : NULL;
 		if (annipixbuf) {
 			if (gdk_pixbuf_animation_is_static_image(annipixbuf)) {
 				pixbuf = gdk_pixbuf_animation_get_static_image(annipixbuf);
@@ -5020,18 +4914,14 @@
 
 	if (imhtml_smiley && imhtml_smiley->flags & GTK_IMHTML_SMILEY_CUSTOM) {
 		ebox = gtk_event_box_new();
-#if GTK_CHECK_VERSION(2,4,0)
 		gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE);
-#endif
 		gtk_widget_show(ebox);
 	}
 
 	if (icon) {
-		char *text = g_strdup(unescaped); /* Do not g_free 'text'.
-		                                     It will be destroyed when 'anchor' is destroyed. */
 		anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
-		g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", text, g_free);
-		g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_tiptext", g_strdup(text), g_free);
+		g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free);
+		g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_tiptext", g_strdup(unescaped), g_free);
 		g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley), g_free);
 
 		/* This catches the expose events generated by animated
@@ -5044,20 +4934,24 @@
 		if (ebox)
 			gtk_container_add(GTK_CONTAINER(ebox), icon);
 		gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), ebox ? ebox : icon, anchor);
+
+		g_object_set_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_thismsg", GINT_TO_POINTER(numsmileys_thismsg + 1));
+		g_object_set_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_total", GINT_TO_POINTER(numsmileys_total + 1));
 	} else if (imhtml_smiley != NULL && (imhtml->format_functions & GTK_IMHTML_SMILEY)) {
 		anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter);
 		imhtml_smiley->anchors = g_slist_append(imhtml_smiley->anchors, g_object_ref(anchor));
 		if (ebox) {
 			GtkWidget *img = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_MENU);
-			char *text = g_strdup(unescaped);
 			gtk_container_add(GTK_CONTAINER(ebox), img);
 			gtk_widget_show(img);
-			g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", text, g_free);
-			g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_tiptext",
-				g_strdup(text), g_free);
+			g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free);
+			g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_tiptext", g_strdup(unescaped), g_free);
 			g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley), g_free);
 			gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), ebox, anchor);
 		}
+
+		g_object_set_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_thismsg", GINT_TO_POINTER(numsmileys_thismsg + 1));
+		g_object_set_data(G_OBJECT(imhtml), "gtkimhtml_numsmileys_total", GINT_TO_POINTER(numsmileys_total + 1));
 	} else {
 		gtk_text_buffer_insert(imhtml->text_buffer, iter, smiley, -1);
 	}
--- a/pidgin/gtkimhtmltoolbar.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Thu Feb 18 21:38:43 2010 +0000
@@ -33,6 +33,7 @@
 #include "request.h"
 #include "pidginstock.h"
 #include "util.h"
+#include "debug.h"
 
 #include "gtkdialogs.h"
 #include "gtkimhtmltoolbar.h"
@@ -478,35 +479,19 @@
 	GtkTextIter iter;
 	GtkTextMark *ins;
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	if (response != GTK_RESPONSE_ACCEPT)
-#else /* FILECHOOSER */
-	if (response != GTK_RESPONSE_OK)
-#endif /* FILECHOOSER */
 	{
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
 		return;
 	}
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
-#else /* FILECHOOSER */
-	filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget)));
-#endif /* FILECHOOSER */
 
 	if (filename == NULL) {
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
 		return;
 	}
 
-#if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
-	if (pidgin_check_if_dir(filename, GTK_FILE_SELECTION(widget))) {
-		g_free(filename);
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
-		return;
-	}
-#endif /* FILECHOOSER */
-
 	/* The following triggers a callback that closes the widget */
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
 
@@ -549,7 +534,6 @@
 	GtkWidget *window;
 
 	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) {
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 		window = gtk_file_chooser_dialog_new(_("Insert Image"),
 						NULL,
 						GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -559,12 +543,6 @@
 		gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT);
 		g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(window)),
 				"response", G_CALLBACK(do_insert_image_cb), toolbar);
-#else /* FILECHOOSER */
-		window = gtk_file_selection_new(_("Insert Image"));
-		gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK);
-		g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)),
-				"response", G_CALLBACK(do_insert_image_cb), toolbar);
-#endif /* FILECHOOSER */
 
 		gtk_widget_show(window);
 		toolbar->image_dialog = window;
@@ -921,6 +899,17 @@
 	gtk_widget_grab_focus(toolbar->imhtml);
 }
 
+static void send_attention_cb(GtkWidget *attention, GtkIMHtmlToolbar *toolbar)
+{
+	PurpleConversation *conv =
+		g_object_get_data(G_OBJECT(toolbar), "active_conv");
+	const gchar *who = purple_conversation_get_name(conv);
+	PurpleConnection *gc = purple_conversation_get_gc(conv);
+
+	toggle_button_set_active_block(GTK_TOGGLE_BUTTON(attention), FALSE, toolbar);
+	purple_prpl_send_attention(gc, who, 0);
+}
+
 static void update_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar)
 {
 	gtk_widget_set_sensitive(GTK_WIDGET(toolbar->bold), buttons & GTK_IMHTML_BOLD);
@@ -1241,6 +1230,8 @@
 		{PIDGIN_STOCK_TOOLBAR_INSERT_LINK, insert_link_cb, &toolbar->link, _("Insert Link")},
 		{"", NULL, NULL, NULL},
 		{PIDGIN_STOCK_TOOLBAR_SMILEY, insert_smiley_cb, &toolbar->smiley, _("Insert Smiley")},
+		/*{PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, send_attention_cb, 
+			g_object_get_data(G_OBJECT(toolbar->imhtml), "attention"), _("Send Attention")},*/
 		{NULL, NULL, NULL, NULL}
 	};
 	int iter;
@@ -1258,6 +1249,13 @@
 			button = gtk_vseparator_new();
 		gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 	}
+	/* create the attention button (this is a bit hacky to not break ABI) */
+	button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION);
+	g_signal_connect(G_OBJECT(button), "clicked",
+		G_CALLBACK(send_attention_cb), toolbar);
+	g_object_set_data(G_OBJECT(toolbar), "attention", button);
+	gtk_tooltips_set_tip(toolbar->tooltips, button, _("Send Attention"), NULL);
+	gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
 
 	gtk_box_pack_start(GTK_BOX(toolbar), hbox, FALSE, FALSE, 0);
 	g_object_set_data(G_OBJECT(toolbar), "wide-view", hbox);
@@ -1306,6 +1304,7 @@
 	GtkWidget *insert_button;
 	GtkWidget *font_button;
 	GtkWidget *smiley_button;
+	GtkWidget *attention_button;
 	GtkWidget *font_menu;
 	GtkWidget *insert_menu;
 	GtkWidget *menuitem;
@@ -1447,6 +1446,35 @@
 	g_signal_connect_swapped(G_OBJECT(smiley_button), "clicked", G_CALLBACK(gtk_button_clicked), toolbar->smiley);
 	gtk_widget_show_all(smiley_button);
 
+	/* Sep */
+	sep = gtk_vseparator_new();
+	gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0);
+	gtk_widget_show_all(sep);
+
+	/* Attention */
+	attention_button = gtk_button_new();
+	gtk_button_set_relief(GTK_BUTTON(attention_button), GTK_RELIEF_NONE);
+	bbox = gtk_hbox_new(FALSE, 3);
+	gtk_container_add(GTK_CONTAINER(attention_button), bbox);
+	image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, 
+		gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL));
+	gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0);
+	label = gtk_label_new_with_mnemonic(_("_Attention!"));
+	gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(box), attention_button, FALSE, FALSE, 0);
+	g_signal_connect_swapped(G_OBJECT(attention_button), "clicked", 
+		G_CALLBACK(gtk_button_clicked),
+	    g_object_get_data(G_OBJECT(toolbar), "attention"));
+	gtk_widget_show_all(attention_button);
+	
+	g_signal_connect(G_OBJECT(g_object_get_data(G_OBJECT(toolbar), "attention")),
+	        "notify::sensitive",
+			G_CALLBACK(button_sensitiveness_changed), attention_button);
+
+	/* set attention button to be greyed out until we get a conversation */
+	gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(toolbar), "attention"),
+		FALSE);
+	
 	gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0);
 	g_object_set_data(G_OBJECT(hbox), "lean-view", box);
 	gtk_widget_show(box);
@@ -1457,9 +1485,7 @@
 			G_CALLBACK(purple_prefs_trigger_callback), PIDGIN_PREFS_ROOT "/conversations/toolbar/wide",
 			NULL, G_CONNECT_AFTER | G_CONNECT_SWAPPED);
 
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE);
-#endif
 
 	gtk_widget_add_events(event, GDK_BUTTON_PRESS_MASK);
 	gtk_box_pack_start(GTK_BOX(hbox), event, TRUE, TRUE, 0);
@@ -1524,3 +1550,21 @@
 	g_free(toolbar->sml);
 	toolbar->sml = g_strdup(proto_id);
 }
+
+void gtk_imhtmltoolbar_switch_active_conversation(GtkIMHtmlToolbar *toolbar,
+	PurpleConversation *conv)
+{
+	PurpleConnection *gc = purple_conversation_get_gc(conv);
+	PurplePlugin *prpl = purple_connection_get_prpl(gc);
+	GtkWidget *attention =
+		g_object_get_data(G_OBJECT(toolbar), "attention");
+
+	g_object_set_data(G_OBJECT(toolbar), "active_conv", conv);
+	
+	/* gray out attention button on protocols that don't support it
+	 for the time being it is always disabled for chats */
+	gtk_widget_set_sensitive(attention,
+		conv && prpl && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM && 
+		PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->send_attention != NULL);
+}
+
--- a/pidgin/gtkimhtmltoolbar.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkimhtmltoolbar.h	Thu Feb 18 21:38:43 2010 +0000
@@ -90,6 +90,11 @@
 void gtk_imhtmltoolbar_attach    (GtkIMHtmlToolbar *toolbar, GtkWidget *imhtml);
 void gtk_imhtmltoolbar_associate_smileys (GtkIMHtmlToolbar *toolbar, const char *proto_id);
 
+/**
+ * @since 2.7.0
+ */
+void gtk_imhtmltoolbar_switch_active_conversation(GtkIMHtmlToolbar *toolbar,
+	PurpleConversation *conv);
 
 #ifdef __cplusplus
 }
--- a/pidgin/gtklog.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtklog.c	Thu Feb 18 21:38:43 2010 +0000
@@ -252,7 +252,6 @@
 		GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), iter);
 		gboolean first = !gtk_tree_path_prev(path);
 
-#if GTK_CHECK_VERSION(2,2,0)
 		if (!gtk_tree_store_remove(treestore, iter) && first)
 		{
 			/* iter was the last child at its level */
@@ -263,9 +262,7 @@
 				gtk_tree_store_remove(treestore, iter);
 			}
 		}
-#else
-		gtk_tree_store_remove(treestore, iter);
-#endif
+
 		gtk_tree_path_free(path);
 	}
 
--- a/pidgin/gtkmain.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkmain.c	Thu Feb 18 21:38:43 2010 +0000
@@ -805,9 +805,7 @@
 		return 1;
 	}
 
-#if GLIB_CHECK_VERSION(2,2,0)
 	g_set_application_name(PIDGIN_NAME);
-#endif /* glib-2.0 >= 2.2.0 */
 
 #ifdef _WIN32
 	winpidgin_init(hint);
--- a/pidgin/gtkmenutray.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkmenutray.c	Thu Feb 18 21:38:43 2010 +0000
@@ -138,9 +138,7 @@
 static void
 pidgin_menu_tray_init(PidginMenuTray *menu_tray) {
 	GtkWidget *widget = GTK_WIDGET(menu_tray);
-#if GTK_CHECK_VERSION(2,2,0)
 	GtkSettings *settings;
-#endif
 	gint height = -1;
 
 	gtk_menu_item_set_right_justified(GTK_MENU_ITEM(menu_tray), TRUE);
@@ -148,15 +146,11 @@
 	if(!GTK_IS_WIDGET(menu_tray->tray))
 		menu_tray->tray = gtk_hbox_new(FALSE, 0);
 
-#if GTK_CHECK_VERSION(2,2,0)
 	settings =
 		gtk_settings_get_for_screen(gtk_widget_get_screen(widget));
 
 	if(gtk_icon_size_lookup_for_settings(settings, GTK_ICON_SIZE_MENU,
 										 NULL, &height))
-#else
-	if(gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, NULL, &height))
-#endif
 	{
 		gtk_widget_set_size_request(widget, -1, height);
 	}
--- a/pidgin/gtknotify.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtknotify.c	Thu Feb 18 21:38:43 2010 +0000
@@ -627,12 +627,7 @@
 						PIDGIN_MAIL_DATA, &data, -1);
 				if (data && data->account == account) {
 					if (clear) {
-#if GTK_CHECK_VERSION(2,2,0)
 						advanced = gtk_tree_store_remove(treemodel, &iter);
-#else
-						gtk_tree_store_remove(treemodel, &iter);
-						advanced = (iter.stamp == 0) ? FALSE : TRUE;
-#endif
 						mail_dialog->total_count -= data->count;
 
 						if (data->purple_has_handle)
--- a/pidgin/gtkplugin.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkplugin.c	Thu Feb 18 21:38:43 2010 +0000
@@ -670,15 +670,11 @@
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
 
 	website_button = gtk_event_box_new();
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(website_button), FALSE);
-#endif
 
 	plugin_website = GTK_LABEL(gtk_label_new(NULL));
-#if GTK_CHECK_VERSION(2,6,0)
 	g_object_set(G_OBJECT(plugin_website),
 		"ellipsize", PANGO_ELLIPSIZE_MIDDLE, NULL);
-#endif
 	gtk_misc_set_alignment(GTK_MISC(plugin_website), 0, 0);
 	gtk_container_add(GTK_CONTAINER(website_button),
 		GTK_WIDGET(plugin_website));
@@ -778,10 +774,8 @@
 							"markup", 1,
 							"foreground-set", 3,
 							NULL);
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_tree_view_column_set_expand (col, TRUE);
 	g_object_set(rendt, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 	gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col);
 	gtk_tree_view_column_set_sort_column_id(col, 1);
 	g_object_unref(G_OBJECT(ls));
--- a/pidgin/gtkpounce.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkpounce.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1063,15 +1063,6 @@
 	return FALSE;
 }
 
-#if !GTK_CHECK_VERSION(2,2,0)
-static void
-count_selected_helper(GtkTreeModel *model, GtkTreePath *path,
-					GtkTreeIter *iter, gpointer user_data)
-{
-	(*(gint *)user_data)++;
-}
-#endif
-
 static void
 pounces_manager_connection_cb(PurpleConnection *gc, GtkWidget *add_button)
 {
@@ -1163,11 +1154,7 @@
 	PouncesManager *dialog = user_data;
 	int num_selected = 0;
 
-#if GTK_CHECK_VERSION(2,2,0)
 	num_selected = gtk_tree_selection_count_selected_rows(sel);
-#else
-	gtk_tree_selection_selected_foreach(sel, count_selected_helper, &num_selected);
-#endif
 
 	gtk_widget_set_sensitive(dialog->modify_button, (num_selected > 0));
 	gtk_widget_set_sensitive(dialog->delete_button, (num_selected > 0));
@@ -1546,53 +1533,7 @@
 				g_free(localecmd);
 			}
 #else /* !_WIN32 */
-			PROCESS_INFORMATION pi;
-			BOOL retval;
-			gchar *message = NULL;
-
-			memset(&pi, 0, sizeof(pi));
-
-			if (G_WIN32_HAVE_WIDECHAR_API ()) {
-				STARTUPINFOW si;
-				wchar_t *wc_cmd = g_utf8_to_utf16(command,
-						-1, NULL, NULL, NULL);
-
-				memset(&si, 0 , sizeof(si));
-				si.cb = sizeof(si);
-
-				retval = CreateProcessW(NULL, wc_cmd, NULL,
-						NULL, 0, 0, NULL, NULL,
-						&si, &pi);
-				g_free(wc_cmd);
-			} else {
-				STARTUPINFOA si;
-				char *l_cmd = g_locale_from_utf8(command,
-						-1, NULL, NULL, NULL);
-
-				memset(&si, 0 , sizeof(si));
-				si.cb = sizeof(si);
-
-				retval = CreateProcessA(NULL, l_cmd, NULL,
-						NULL, 0, 0, NULL, NULL,
-						&si, &pi);
-				g_free(l_cmd);
-			}
-
-			if (retval) {
-				CloseHandle(pi.hProcess);
-				CloseHandle(pi.hThread);
-			} else {
-				message = g_win32_error_message(GetLastError());
-			}
-
-			purple_debug_info("pounce",
-					"Pounce execute command called for: "
-					"%s\n%s%s%s",
-						command,
-						retval ? "" : "Error: ",
-						retval ? "" : message,
-						retval ? "" : "\n");
-			g_free(message);
+			winpidgin_shell_execute(command, "open", NULL);
 #endif /* !_WIN32 */
 		}
 	}
--- a/pidgin/gtkprefs.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkprefs.c	Thu Feb 18 21:38:43 2010 +0000
@@ -223,16 +223,8 @@
 
 	g_return_val_if_fail(menuitems != NULL, NULL);
 
-#if 0 /* GTK_CHECK_VERSION(2,4,0) */
-	if(type == PURPLE_PREF_INT)
-		model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
-	else if(type == PURPLE_PREF_STRING)
-		model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
-	dropdown = gtk_combo_box_new_with_model(model);
-#else
 	dropdown = gtk_option_menu_new();
 	menu = gtk_menu_new();
-#endif
 
 	if (type == PURPLE_PREF_INT)
 		stored_int = purple_prefs_get_int(key);
@@ -908,11 +900,11 @@
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), cell_rend, "pixbuf", 0, NULL);
 
 	cell_rend = gtk_cell_renderer_text_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (combo_box), cell_rend, FALSE);
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (combo_box), cell_rend, TRUE);
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), cell_rend, "markup", 1, NULL);
-/*#if GTK_CHECK_VERSION(2,6,0)
-			g_object_set(cell_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif*/
+#if GTK_CHECK_VERSION(2,6,0)
+	g_object_set(cell_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+#endif
 
 	gtk_drag_dest_set(combo_box, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, te,
 					sizeof(te) / sizeof(GtkTargetEntry) , GDK_ACTION_COPY | GDK_ACTION_MOVE);
@@ -1090,7 +1082,7 @@
 	g_signal_connect(G_OBJECT(prefs_blist_themes_combo_box), "changed",
 						(GCallback)prefs_set_blist_theme_cb, NULL);
 	gtk_size_group_add_widget(combo_sg, prefs_blist_themes_combo_box);
-	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_blist_themes_combo_box, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_blist_themes_combo_box, TRUE, TRUE, 0);
 
 	gtk_box_pack_start(GTK_BOX(vbox), themesel_hbox, FALSE, FALSE, 0);
 
@@ -1108,7 +1100,7 @@
 	g_signal_connect(G_OBJECT(prefs_status_themes_combo_box), "changed",
 						(GCallback)prefs_set_status_icon_theme_cb, NULL);
 	gtk_size_group_add_widget(combo_sg, prefs_status_themes_combo_box);
-	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_status_themes_combo_box, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_status_themes_combo_box, TRUE, TRUE, 0);
 
 	gtk_box_pack_start(GTK_BOX(vbox), themesel_hbox, FALSE, FALSE, 0);
 
@@ -1126,7 +1118,7 @@
 	g_signal_connect(G_OBJECT(prefs_sound_themes_combo_box), "changed",
 						(GCallback)prefs_set_sound_theme_cb, NULL);
 	gtk_size_group_add_widget(combo_sg, prefs_sound_themes_combo_box);
-	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_sound_themes_combo_box, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_sound_themes_combo_box, TRUE, TRUE, 0);
 
 	gtk_box_pack_start(GTK_BOX(vbox), themesel_hbox, FALSE, FALSE, 0);
 
@@ -1144,7 +1136,7 @@
 	g_signal_connect(G_OBJECT(prefs_smiley_themes_combo_box), "changed",
 						(GCallback)prefs_set_smiley_theme_cb, NULL);
 	gtk_size_group_add_widget(combo_sg, prefs_smiley_themes_combo_box);
-	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_smiley_themes_combo_box, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(themesel_hbox), prefs_smiley_themes_combo_box, TRUE, TRUE, 0);
 
 	gtk_box_pack_start(GTK_BOX(vbox), themesel_hbox, FALSE, FALSE, 0);
 
@@ -1419,10 +1411,8 @@
 					_("Bottom"), GTK_POS_BOTTOM,
 					_("Left"), GTK_POS_LEFT,
 					_("Right"), GTK_POS_RIGHT,
-#if GTK_CHECK_VERSION(2,6,0)
 					_("Left Vertical"), GTK_POS_LEFT|8,
 					_("Right Vertical"), GTK_POS_RIGHT|8,
-#endif
 					NULL);
 	gtk_size_group_add_widget(sg, label);
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
@@ -1445,11 +1435,27 @@
 
 #ifdef _WIN32
 static void
+apply_custom_font(void)
+{
+	PangoFontDescription *desc = NULL;
+	if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font")) {
+		const char *font = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/custom_font");
+		desc = pango_font_description_from_string(font);
+	}
+
+	gtk_widget_modify_font(sample_imhtml, desc);
+	if (desc)
+		pango_font_description_free(desc);
+
+}
+static void
 pidgin_custom_font_set(GtkFontButton *font_button, gpointer nul)
 {
+
 	purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/custom_font",
-				gtk_font_button_get_font_name(font_button))
-;
+				gtk_font_button_get_font_name(font_button));
+
+	apply_custom_font();
 }
 #endif
 
@@ -1501,7 +1507,7 @@
 		PIDGIN_PREFS_ROOT "/conversations/minimum_entry_lines",
 		1, 8, NULL);
 
-#if GTK_CHECK_VERSION(2,4,0) && defined _WIN32
+#ifdef _WIN32
 	{
 	GtkWidget *fontpref, *font_button, *hbox;
 	const char *font_name;
@@ -1522,6 +1528,7 @@
 	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font"))
 		gtk_widget_set_sensitive(hbox, FALSE);
 	g_signal_connect(G_OBJECT(fontpref), "clicked", G_CALLBACK(pidgin_toggle_sensitive), hbox);
+	g_signal_connect(G_OBJECT(fontpref), "clicked", G_CALLBACK(apply_custom_font), hbox);
 	g_signal_connect(G_OBJECT(font_button), "font-set", G_CALLBACK(pidgin_custom_font_set), NULL);
 
 	}
@@ -2712,12 +2719,7 @@
 static int
 prefs_notebook_add_page(const char *text, GtkWidget *page, int ind)
 {
-#if GTK_CHECK_VERSION(2,4,0)
 	return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text));
-#else
-	gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text));
-	return gtk_notebook_page_num(GTK_NOTEBOOK(prefsnotebook), page);
-#endif
 }
 
 static void
--- a/pidgin/gtkrequest.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkrequest.c	Thu Feb 18 21:38:43 2010 +0000
@@ -626,9 +626,7 @@
 	/* Create the dialog. */
 	data->dialog = dialog = gtk_dialog_new();
 
-#if GTK_CHECK_VERSION(2,10,0)
 	gtk_window_set_deletable(GTK_WINDOW(data->dialog), FALSE);
-#endif
 
 	if (title != NULL)
 		gtk_window_set_title(GTK_WINDOW(dialog), title);
@@ -1534,7 +1532,6 @@
 	}
 }
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 static void
 file_ok_check_if_exists_cb(GtkWidget *widget, gint response, PidginRequestData *data)
 {
@@ -1559,51 +1556,6 @@
 		}
 		g_free(current_folder);
 	}
-
-#else /* FILECHOOSER */
-
-static void
-file_ok_check_if_exists_cb(GtkWidget *button, PidginRequestData *data)
-{
-	const gchar *name;
-	gchar *current_folder;
-
-	generic_response_start(data);
-
-	name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->dialog));
-
-	/* If name is a directory then change directories */
-	if (data->type == PURPLE_REQUEST_FILE) {
-		if (pidgin_check_if_dir(name, GTK_FILE_SELECTION(data->dialog)))
-			return;
-	}
-
-	current_folder = g_path_get_dirname(name);
-
-	g_free(data->u.file.name);
-	if (data->type == PURPLE_REQUEST_FILE)
-		data->u.file.name = g_strdup(name);
-	else
-	{
-		if (g_file_test(name, G_FILE_TEST_IS_DIR))
-			data->u.file.name = g_strdup(name);
-		else
-			data->u.file.name = g_strdup(current_folder);
-	}
-
-	if (current_folder != NULL) {
-		if (data->u.file.savedialog) {
-			purple_prefs_set_path(PIDGIN_PREFS_ROOT "/filelocations/last_save_folder", current_folder);
-		} else {
-			purple_prefs_set_path(PIDGIN_PREFS_ROOT "/filelocations/last_open_folder", current_folder);
-		}
-		g_free(current_folder);
-	}
-
-#endif /* FILECHOOSER */
-#if 0 /* mismatched curly braces */
-	}
-#endif
 	if ((data->u.file.savedialog == TRUE) &&
 		(g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) {
 		purple_request_action(data, NULL, _("That file already exists"),
@@ -1616,20 +1568,6 @@
 		file_yes_no_cb(data, 1);
 }
 
-#if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
-static gboolean
-file_cancel_cb(PidginRequestData *data)
-{
-	generic_response_start(data);
-
-	if (data->cbs[0] != NULL)
-		((PurpleRequestFileCb)data->cbs[0])(data->user_data, NULL);
-
-	purple_request_close(data->type, data);
-	return FALSE;
-}
-#endif /* FILECHOOSER */
-
 static void *
 pidgin_request_file(const char *title, const char *filename,
 					  gboolean savedialog,
@@ -1640,9 +1578,7 @@
 	PidginRequestData *data;
 	GtkWidget *filesel;
 	const gchar *current_folder;
-#if GTK_CHECK_VERSION(2,4,0)
 	gboolean folder_set = FALSE;
-#endif
 
 	data = g_new0(PidginRequestData, 1);
 	data->type = PURPLE_REQUEST_FILE;
@@ -1653,7 +1589,6 @@
 	data->cbs[1] = ok_cb;
 	data->u.file.savedialog = savedialog;
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	filesel = gtk_file_chooser_dialog_new(
 						title ? title : (savedialog ? _("Save File...")
 													: _("Open File...")),
@@ -1699,30 +1634,6 @@
 #endif
 	g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(filesel)), "response",
 					 G_CALLBACK(file_ok_check_if_exists_cb), data);
-#else /* FILECHOOSER */
-	filesel = gtk_file_selection_new(
-			title ? title : (savedialog ? _("Save File...")
-				: _("Open File...")));
-	if (savedialog) {
-		current_folder = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/filelocations/last_save_folder");
-	} else {
-		current_folder = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/filelocations/last_open_folder");
-	}
-	if (current_folder != NULL) {
-		gchar *path = g_strdup_printf("%s%s", current_folder, G_DIR_SEPARATOR_S);
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), path);
-		g_free(path);
-	}
-	if (filename != NULL)
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), filename);
-
-	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)), "delete_event",
-							 G_CALLBACK(file_cancel_cb), data);
-	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
-					 "clicked", G_CALLBACK(file_cancel_cb), data);
-	g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked",
-					 G_CALLBACK(file_ok_check_if_exists_cb), data);
-#endif /* FILECHOOSER */
 
 	pidgin_auto_parent_window(filesel);
 
@@ -1750,7 +1661,6 @@
 	data->cbs[1] = ok_cb;
 	data->u.file.savedialog = FALSE;
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	dirsel = gtk_file_chooser_dialog_new(
 						title ? title : _("Select Folder..."),
 						NULL,
@@ -1765,16 +1675,6 @@
 
 	g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(dirsel)), "response",
 						G_CALLBACK(file_ok_check_if_exists_cb), data);
-#else
-	dirsel = gtk_file_selection_new(title ? title : _("Select Folder..."));
-
-	g_signal_connect_swapped(G_OBJECT(dirsel), "delete_event",
-							 G_CALLBACK(file_cancel_cb), data);
-	g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(dirsel)->cancel_button),
-					 "clicked", G_CALLBACK(file_cancel_cb), data);
-	g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dirsel)->ok_button), "clicked",
-					 G_CALLBACK(file_ok_check_if_exists_cb), data);
-#endif
 
 	data->dialog = dirsel;
 	pidgin_auto_parent_window(dirsel);
--- a/pidgin/gtksavedstatuses.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtksavedstatuses.c	Thu Feb 18 21:38:43 2010 +0000
@@ -34,7 +34,6 @@
 #include "util.h"
 
 #include "gtkblist.h"
-#include "gtkexpander.h"
 #include "pidgin.h"
 #include "gtkimhtml.h"
 #include "gtkimhtmltoolbar.h"
@@ -180,23 +179,6 @@
 	return FALSE;
 }
 
-#if !GTK_CHECK_VERSION(2,2,0)
-static void
-count_selected_helper(GtkTreeModel *model, GtkTreePath *path,
-					GtkTreeIter *iter, gpointer user_data)
-{
-	(*(gint *)user_data)++;
-}
-
-static void
-list_selected_helper(GtkTreeModel *model, GtkTreePath *path,
-					GtkTreeIter *iter, gpointer user_data)
-{
-	GList **list = (GList **)user_data;
-	*list = g_list_append(*list, gtk_tree_path_copy(path));
-}
-#endif
-
 static void
 status_window_use_cb(GtkButton *button, StatusWindow *dialog)
 {
@@ -207,11 +189,7 @@
 
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview));
 
-#if GTK_CHECK_VERSION(2,2,0)
 	num_selected = gtk_tree_selection_count_selected_rows(selection);
-#else
-	gtk_tree_selection_selected_foreach(selection, count_selected_helper, &num_selected);
-#endif
 	if (num_selected != 1)
 		/*
 		 * This shouldn't happen because the "Use" button should have
@@ -219,11 +197,7 @@
 		 */
 		return;
 
-#if GTK_CHECK_VERSION(2,2,0)
 	list = gtk_tree_selection_get_selected_rows(selection, NULL);
-#else
-	gtk_tree_selection_selected_foreach(selection, list_selected_helper, &list);
-#endif
 
 	if (gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model),
 								&iter, list->data))
@@ -311,11 +285,7 @@
 	gpointer handle;
 
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview));
-#if GTK_CHECK_VERSION(2,2,0)
 	sel_paths = gtk_tree_selection_get_selected_rows(selection, NULL);
-#else
-	gtk_tree_selection_selected_foreach(selection, list_selected_helper, &sel_paths);
-#endif
 
 	/* This is ugly because we're not allowed to modify the model from within
 	 * gtk_tree_selection_selected_foreach() and the GtkTreePaths can become invalid
@@ -365,11 +335,7 @@
 	int num_selected;
 	GtkTreeModel *model = GTK_TREE_MODEL(dialog->model);
 
-#if GTK_CHECK_VERSION(2,2,0)
 	sel_paths = gtk_tree_selection_get_selected_rows(sel, NULL);
-#else
-	gtk_tree_selection_selected_foreach(sel, list_selected_helper, &sel_paths);
-#endif
 
 	for (tmp = sel_paths, num_selected = 0; tmp; tmp = tmp->next, num_selected++) {
 		GtkTreeIter iter;
@@ -521,9 +487,7 @@
 	gtk_tree_view_column_pack_start(column, renderer, TRUE);
 	gtk_tree_view_column_add_attribute(column, renderer, "text",
 									   STATUS_WINDOW_COLUMN_TITLE);
-#if GTK_CHECK_VERSION(2,6,0)
 	g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 	column = gtk_tree_view_column_new();
 	gtk_tree_view_column_set_title(column, _("Type"));
@@ -550,9 +514,7 @@
 	gtk_tree_view_column_pack_start(column, renderer, TRUE);
 	gtk_tree_view_column_add_attribute(column, renderer, "text",
 									   STATUS_WINDOW_COLUMN_MESSAGE);
-#if GTK_CHECK_VERSION(2,6,0)
 	g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 	/* Enable CTRL+F searching */
 	gtk_tree_view_set_search_column(GTK_TREE_VIEW(treeview), STATUS_WINDOW_COLUMN_TITLE);
@@ -1869,9 +1831,7 @@
 	g_object_set(G_OBJECT(icon_rend),
 			"stock-size", gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL),
 			NULL);
-#if GTK_CHECK_VERSION(2,6,0)
 	g_object_set(text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), index);
 	g_signal_connect(G_OBJECT(combobox), "changed", G_CALLBACK(status_menu_cb), callback);
--- a/pidgin/gtkscrollbook.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkscrollbook.c	Thu Feb 18 21:38:43 2010 +0000
@@ -80,11 +80,7 @@
 {
 	int index, count;
 	index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook));
-#if GTK_CHECK_VERSION(2,2,0)
 	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook));
-#else
-	count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children);
-#endif
 
 	if (index + 1 < count)
 		gtk_notebook_set_current_page(GTK_NOTEBOOK(scroll_book->notebook), index + 1);
@@ -130,11 +126,7 @@
 {
 	int count;
 	int index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook));
-#if GTK_CHECK_VERSION(2,2,0)
 	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook));
-#else
-	count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children);
-#endif
 	refresh_scroll_box(scroll_book, index, count);
 }
 
@@ -149,11 +141,7 @@
 switch_page_cb(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, PidginScrollBook *scroll_book)
 {
 	int count;
-#if GTK_CHECK_VERSION(2,2,0)
 	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook));
-#else
-	count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children);
-#endif
 	refresh_scroll_box(scroll_book, page_num, count);
 }
 
@@ -268,9 +256,7 @@
 	/* Close */
 	eb = gtk_event_box_new();
 	gtk_box_pack_end(GTK_BOX(scroll_book->hbox), eb, FALSE, FALSE, 0);
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(eb), FALSE);
-#endif
 	gtk_widget_set_events(eb, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
 	close_button = gtk_label_new("×");
 	g_signal_connect(G_OBJECT(eb), "enter-notify-event", G_CALLBACK(close_button_entered_cb), close_button);
--- a/pidgin/gtksession.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtksession.c	Thu Feb 18 21:38:43 2010 +0000
@@ -163,10 +163,8 @@
 		ret[j++] = g_strdup(config_dir);
 	}
 
-#if GTK_CHECK_VERSION(2,2,0)
 	ret[j++] = g_strdup("--display");
 	ret[j++] = g_strdup((gchar *)gdk_display_get_name(gdk_display_get_default()));
-#endif
 
 	ret[j++] = NULL;
 
--- a/pidgin/gtksound.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtksound.c	Thu Feb 18 21:38:43 2010 +0000
@@ -72,7 +72,8 @@
 	{N_("Others talk in chat"), "chat_msg_recv", "receive.wav"},
 	/* this isn't a terminator, it's the buddy pounce default sound event ;-) */
 	{NULL, "pounce_default", "alert.wav"},
-	{N_("Someone says your username in chat"), "nick_said", "alert.wav"}
+	{N_("Someone says your username in chat"), "nick_said", "alert.wav"},
+	{N_("Attention received"), "got_attention", "alert.wav"}
 };
 
 static gboolean
@@ -144,7 +145,7 @@
 				   char *message, PurpleConversation *conv,
 				   PurpleMessageFlags flags, PurpleSoundEventID event)
 {
-	if (flags & PURPLE_MESSAGE_DELAYED)
+	if (flags & PURPLE_MESSAGE_DELAYED || flags & PURPLE_MESSAGE_NOTIFY)
 		return;
 
 	if (conv==NULL)
@@ -199,7 +200,7 @@
 {
 	PurpleConvChat *chat;
 
-	if (flags & PURPLE_MESSAGE_DELAYED)
+	if (flags & PURPLE_MESSAGE_DELAYED || flags & PURPLE_MESSAGE_NOTIFY)
 		return;
 
 	chat = purple_conversation_get_chat_data(conv);
@@ -219,6 +220,13 @@
 		play_conv_event(conv, event);
 }
 
+static void
+got_attention_cb(PurpleAccount *account, const char *who, 
+	PurpleConversation *conv, guint type, PurpleSoundEventID event)
+{
+	play_conv_event(conv, event);
+}
+
 /*
  * We mute sounds for the 10 seconds after you log in so that
  * you don't get flooded with sounds when the blist shows all
@@ -299,6 +307,10 @@
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/enabled/pounce_default", TRUE);
 	purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/file/pounce_default", "");
 	purple_prefs_add_string(PIDGIN_PREFS_ROOT "/sound/theme", "");
+	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/enabled/sent_attention", TRUE);
+	purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/file/sent_attention", "");
+	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/enabled/got_attention", TRUE);
+	purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/file/got_attention", "");
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/conv_focus", TRUE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/mute", FALSE);
 	purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/command", "");
@@ -345,6 +357,12 @@
 	purple_signal_connect(conv_handle, "received-chat-msg",
 						gtk_sound_handle, PURPLE_CALLBACK(chat_msg_received_cb),
 						GINT_TO_POINTER(PURPLE_SOUND_CHAT_SAY));
+	purple_signal_connect(conv_handle, "got-attention", gtk_sound_handle,
+						PURPLE_CALLBACK(got_attention_cb),
+						  GINT_TO_POINTER(PURPLE_SOUND_GOT_ATTENTION));
+	/* for the time being, don't handle sent-attention here, since playing a
+	 sound would result induplicate sounds. And fixing that would require changing the
+	 conversation signal for msg-recv */	
 }
 
 static void
@@ -539,18 +557,12 @@
 #else /* _WIN32 */
 	purple_debug_info("sound", "Playing %s\n", filename);
 
-	if (G_WIN32_HAVE_WIDECHAR_API ()) {
+	{
 		wchar_t *wc_filename = g_utf8_to_utf16(filename,
 				-1, NULL, NULL, NULL);
 		if (!PlaySoundW(wc_filename, NULL, SND_ASYNC | SND_FILENAME))
 			purple_debug(PURPLE_DEBUG_ERROR, "sound", "Error playing sound.\n");
 		g_free(wc_filename);
-	} else {
-		char *l_filename = g_locale_from_utf8(filename,
-				-1, NULL, NULL, NULL);
-		if (!PlaySoundA(l_filename, NULL, SND_ASYNC | SND_FILENAME))
-			purple_debug(PURPLE_DEBUG_ERROR, "sound", "Error playing sound.\n");
-		g_free(l_filename);
 	}
 #endif /* _WIN32 */
 
--- a/pidgin/gtkstatusbox.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkstatusbox.c	Thu Feb 18 21:38:43 2010 +0000
@@ -1180,7 +1180,6 @@
 	return FALSE;
 }
 
-#if GTK_CHECK_VERSION(2,6,0)
 static gboolean
 dropdown_store_row_separator_func(GtkTreeModel *model,
 								  GtkTreeIter *iter, gpointer data)
@@ -1194,7 +1193,6 @@
 
 	return FALSE;
 }
-#endif
 
 static void
 cache_pixbufs(PidginStatusBox *status_box)
@@ -1305,11 +1303,9 @@
 static void
 pidgin_status_box_list_position (PidginStatusBox *status_box, int *x, int *y, int *width, int *height)
 {
-#if GTK_CHECK_VERSION(2,2,0)
   GdkScreen *screen;
   gint monitor_num;
   GdkRectangle monitor;
-#endif
   GtkRequisition popup_req;
   GtkPolicyType hpolicy, vpolicy;
 
@@ -1335,7 +1331,6 @@
 
   *height = popup_req.height;
 
-#if GTK_CHECK_VERSION(2,2,0)
   screen = gtk_widget_get_screen (GTK_WIDGET (status_box));
   monitor_num = gdk_screen_get_monitor_at_window (screen,
 						  GTK_WIDGET (status_box)->window);
@@ -1368,7 +1363,6 @@
       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window),
 				      hpolicy, vpolicy);
     }
-#endif
 }
 
 static gboolean
@@ -1376,29 +1370,20 @@
 		      guint32    activate_time,
 		      gboolean   grab_keyboard)
 {
-  if ((gdk_pointer_grab (window, TRUE,
+	if ((gdk_pointer_grab (window, TRUE,
 			 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
 			 GDK_POINTER_MOTION_MASK,
 			 NULL, NULL, activate_time) == 0))
-    {
-      if (!grab_keyboard ||
-	  gdk_keyboard_grab (window, TRUE,
-			     activate_time) == 0)
-	return TRUE;
-      else
 	{
-#if GTK_CHECK_VERSION(2,2,0)
-	  gdk_display_pointer_ungrab (gdk_drawable_get_display (window),
-				      activate_time);
-#else
-	  gdk_pointer_ungrab(activate_time);
-	  gdk_keyboard_ungrab(activate_time);
-#endif
-	  return FALSE;
+		if (!grab_keyboard || gdk_keyboard_grab (window, TRUE, activate_time) == 0)
+			return TRUE;
+		else {
+			gdk_display_pointer_ungrab (gdk_drawable_get_display (window), activate_time);
+			return FALSE;
+		}
 	}
-    }
-
-  return FALSE;
+
+	return FALSE;
 }
 
 
@@ -1793,9 +1778,7 @@
 	gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->vsep, FALSE, FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->arrow, FALSE, FALSE, 0);
 	gtk_widget_show_all(status_box->toggle_button);
-#if GTK_CHECK_VERSION(2,4,0)
 	gtk_button_set_focus_on_click(GTK_BUTTON(status_box->toggle_button), FALSE);
-#endif
 
 	text_rend = gtk_cell_renderer_text_new();
 	icon_rend = gtk_cell_renderer_pixbuf_new();
@@ -1809,14 +1792,10 @@
 	}
 
 	gtk_window_set_resizable (GTK_WINDOW (status_box->popup_window), FALSE);
-#if GTK_CHECK_VERSION(2,10,0)
 	gtk_window_set_type_hint (GTK_WINDOW (status_box->popup_window),
 			GDK_WINDOW_TYPE_HINT_POPUP_MENU);
-#endif
-#if GTK_CHECK_VERSION(2,2,0)
 	gtk_window_set_screen (GTK_WINDOW (status_box->popup_window),
 			gtk_widget_get_screen (GTK_WIDGET (status_box)));
-#endif
 	status_box->popup_frame = gtk_frame_new (NULL);
 	gtk_frame_set_shadow_type (GTK_FRAME (status_box->popup_frame),
 			GTK_SHADOW_ETCHED_IN);
@@ -1843,10 +1822,8 @@
 	gtk_tree_selection_set_mode (sel, GTK_SELECTION_BROWSE);
 	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (status_box->tree_view),
 			FALSE);
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_tree_view_set_hover_selection (GTK_TREE_VIEW (status_box->tree_view),
 			TRUE);
-#endif
 	gtk_tree_view_set_model (GTK_TREE_VIEW (status_box->tree_view),
 			GTK_TREE_MODEL(status_box->dropdown_store));
 	status_box->column = gtk_tree_view_column_new ();
@@ -1864,9 +1841,7 @@
 	gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(status_box->tree_view),
 				pidgin_tree_view_search_equal_func, NULL, NULL);
 
-#if GTK_CHECK_VERSION(2, 6, 0)
 	g_object_set(text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 	status_box->icon_rend = gtk_cell_renderer_pixbuf_new();
 	status_box->text_rend = gtk_cell_renderer_text_new();
@@ -1877,9 +1852,7 @@
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, "stock-id", ICON_STOCK_COLUMN, NULL);
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, "markup", TEXT_COLUMN, NULL);
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), emblem_rend, "pixbuf", EMBLEM_COLUMN, "visible", EMBLEM_VISIBLE_COLUMN, NULL);
-#if GTK_CHECK_VERSION(2, 6, 0)
 	g_object_set(status_box->text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-#endif
 
 	status_box->vbox = gtk_vbox_new(0, FALSE);
 	status_box->sw = pidgin_create_imhtml(FALSE, &status_box->imhtml, NULL, NULL);
@@ -1924,9 +1897,7 @@
 	g_signal_connect(G_OBJECT(status_box->tree_view), "cursor-changed",
 					 G_CALLBACK(treeview_cursor_changed_cb), status_box->dropdown_store);
 
-#if GTK_CHECK_VERSION(2,6,0)
 	gtk_tree_view_set_row_separator_func(GTK_TREE_VIEW(status_box->tree_view), dropdown_store_row_separator_func, NULL, NULL);
-#endif
 
 	status_box->token_status_account = check_active_accounts_for_identical_statuses();
 
@@ -2210,14 +2181,12 @@
 {
 	/* Don't do anything unless GTK actually supports
 	 * gtk_combo_box_set_row_separator_func */
-#if GTK_CHECK_VERSION(2,6,0)
 	GtkTreeIter iter;
 
 	gtk_list_store_append(status_box->dropdown_store, &iter);
 	gtk_list_store_set(status_box->dropdown_store, &iter,
 			   TYPE_COLUMN, PIDGIN_STATUS_BOX_TYPE_SEPARATOR,
 			   -1);
-#endif
 }
 
 void
@@ -2241,7 +2210,6 @@
 static void
 pixbuf_size_prepared_cb(GdkPixbufLoader *loader, int width, int height, gpointer data)
 {
-#if GTK_CHECK_VERSION(2,2,0)
 	int w, h;
 	GtkIconSize icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MEDIUM);
 	gtk_icon_size_lookup(icon_size, &w, &h);
@@ -2250,7 +2218,6 @@
 	else if (width > height)
 		h = height * w / width;
 	gdk_pixbuf_loader_set_size(loader, w, h);
-#endif
 }
 
 static void
--- a/pidgin/gtkutils.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkutils.c	Thu Feb 18 21:38:43 2010 +0000
@@ -105,7 +105,6 @@
 void
 pidgin_setup_imhtml(GtkWidget *imhtml)
 {
-	PangoFontDescription *desc = NULL;
 	g_return_if_fail(imhtml != NULL);
 	g_return_if_fail(GTK_IS_IMHTML(imhtml));
 
@@ -115,15 +114,16 @@
 
 #ifdef _WIN32
 	if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font")) {
+		PangoFontDescription *desc;
 		const char *font = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/custom_font");
 		desc = pango_font_description_from_string(font);
+		if (desc) {
+			gtk_widget_modify_font(imhtml, desc);
+			pango_font_description_free(desc);
+		}
 	}
 #endif
 
-	if (desc) {
-		gtk_widget_modify_font(imhtml, desc);
-		pango_font_description_free(desc);
-	}
 }
 
 static
@@ -1247,7 +1247,6 @@
 							gboolean *push_in,
 							gpointer data)
 {
-#if GTK_CHECK_VERSION(2,2,0)
 	GtkWidget *widget;
 	GtkRequisition requisition;
 	GdkScreen *screen;
@@ -1388,7 +1387,6 @@
 	{
 		*y = monitor.y;
 	}
-#endif
 }
 
 
@@ -1630,7 +1628,6 @@
 			char key[64];
 			const char *itemname = NULL;
 
-#if GTK_CHECK_VERSION(2,6,0)
 			const char * const *langs;
 			int i;
 			langs = g_get_language_names();
@@ -1639,15 +1636,7 @@
 				itemname = purple_desktop_item_get_string(item, key);
 				break;
 			}
-#else
-			const char *lang = g_getenv("LANG");
-			char *dot;
-			dot = strchr(lang, '.');
-			if (dot)
-				*dot = '\0';
-			g_snprintf(key, sizeof(key), "Name[%s]", lang);
-			itemname = purple_desktop_item_get_string(item, key);
-#endif
+
 			if (!itemname)
 				itemname = purple_desktop_item_get_string(item, "Name");
 
@@ -1664,10 +1653,13 @@
 						       purple_desktop_item_get_string(item, "URL"), itemname);
 				break;
 			default:
-				/* I don't know if we really want to do anything here.  Most of the desktop item types are crap like
-				 * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really
-				 * send.  The only logical one is "Application," but do we really want to send a binary and nothing else?
-				 * Probably not.  I'll just give an error and return. */
+				/* I don't know if we really want to do anything here.  Most of
+				 * the desktop item types are crap like "MIME Type" (I have no
+				 * clue how that would be a desktop item) and "Comment"...
+				 * nothing we can really send.  The only logical one is
+				 * "Application," but do we really want to send a binary and
+				 * nothing else? Probably not.  I'll just give an error and
+				 * return. */
 				/* The original patch sent the icon used by the launcher.  That's probably wrong */
 				purple_notify_error(NULL, NULL, _("Cannot send launcher"),
 				                    _("You dragged a desktop launcher. Most "
@@ -1862,10 +1854,6 @@
 	return menuitem;
 }
 
-#if GTK_CHECK_VERSION(2,3,0)
-# define NEW_STYLE_COMPLETION
-#endif
-
 typedef struct
 {
 	GtkWidget *entry;
@@ -1874,97 +1862,9 @@
 	PidginFilterBuddyCompletionEntryFunc filter_func;
 	gpointer filter_func_user_data;
 
-#ifdef NEW_STYLE_COMPLETION
 	GtkListStore *store;
-#else
-	GCompletion *completion;
-	gboolean completion_started;
-	GList *log_items;
-#endif /* NEW_STYLE_COMPLETION */
 } PidginCompletionData;
 
-#ifndef NEW_STYLE_COMPLETION
-static gboolean
-completion_entry_event(GtkEditable *entry, GdkEventKey *event,
-					   PidginCompletionData *data)
-{
-	int pos, end_pos;
-
-	if (event->type == GDK_KEY_PRESS && event->keyval == GDK_Tab)
-	{
-		gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
-
-		if (data->completion_started &&
-			pos != end_pos && pos > 1 &&
-			end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
-		{
-			gtk_editable_select_region(entry, 0, 0);
-			gtk_editable_set_position(entry, -1);
-
-			return TRUE;
-		}
-	}
-	else if (event->type == GDK_KEY_PRESS && event->length > 0)
-	{
-		char *prefix, *nprefix;
-
-		gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
-
-		if (data->completion_started &&
-			pos != end_pos && pos > 1 &&
-			end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
-		{
-			char *temp;
-
-			temp = gtk_editable_get_chars(entry, 0, pos);
-			prefix = g_strconcat(temp, event->string, NULL);
-			g_free(temp);
-		}
-		else if (pos == end_pos && pos > 1 &&
-				 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
-		{
-			prefix = g_strconcat(gtk_entry_get_text(GTK_ENTRY(entry)),
-								 event->string, NULL);
-		}
-		else
-			return FALSE;
-
-		pos = strlen(prefix);
-		nprefix = NULL;
-
-		g_completion_complete(data->completion, prefix, &nprefix);
-
-		if (nprefix != NULL)
-		{
-			gtk_entry_set_text(GTK_ENTRY(entry), nprefix);
-			gtk_editable_set_position(entry, pos);
-			gtk_editable_select_region(entry, pos, -1);
-
-			data->completion_started = TRUE;
-
-			g_free(nprefix);
-			g_free(prefix);
-
-			return TRUE;
-		}
-
-		g_free(prefix);
-	}
-
-	return FALSE;
-}
-
-static void
-destroy_completion_data(GtkWidget *w, PidginCompletionData *data)
-{
-	g_list_foreach(data->completion->items, (GFunc)g_free, NULL);
-	g_completion_free(data->completion);
-
-	g_free(data);
-}
-#endif /* !NEW_STYLE_COMPLETION */
-
-#ifdef NEW_STYLE_COMPLETION
 static gboolean buddyname_completion_match_func(GtkEntryCompletion *completion,
 		const gchar *key, GtkTreeIter *iter, gpointer user_data)
 {
@@ -2098,7 +1998,6 @@
 
 	g_free(normalized_buddyname);
 }
-#endif /* NEW_STYLE_COMPLETION */
 
 static void get_log_set_name(PurpleLogSet *set, gpointer value, PidginCompletionData *data)
 {
@@ -2113,14 +2012,8 @@
 		entry.entry.logged_buddy = set;
 
 		if (filter_func(&entry, user_data)) {
-#ifdef NEW_STYLE_COMPLETION
 			add_buddyname_autocomplete_entry(data->store,
 												NULL, NULL, set->account, set->name);
-#else
-			/* Steal the name for the GCompletion. */
-			data->log_items = g_list_append(data->log_items, set->name);
-			set->name = set->normalized_name = NULL;
-#endif /* NEW_STYLE_COMPLETION */
 		}
 	}
 }
@@ -2133,14 +2026,7 @@
 	gpointer user_data = data->filter_func_user_data;
 	GHashTable *sets;
 
-#ifdef NEW_STYLE_COMPLETION
 	gtk_list_store_clear(data->store);
-#else
-	GList *item = g_list_append(NULL, NULL);
-
-	g_list_foreach(data->completion->items, (GFunc)g_free, NULL);
-	g_completion_clear_items(data->completion);
-#endif /* NEW_STYLE_COMPLETION */
 
 	for (gnode = purple_get_blist()->root; gnode != NULL; gnode = gnode->next)
 	{
@@ -2159,35 +2045,21 @@
 				entry.entry.buddy = (PurpleBuddy *) bnode;
 
 				if (filter_func(&entry, user_data)) {
-#ifdef NEW_STYLE_COMPLETION
 					add_buddyname_autocomplete_entry(data->store,
 														((PurpleContact *)cnode)->alias,
 														purple_buddy_get_contact_alias(entry.entry.buddy),
 														entry.entry.buddy->account,
 														entry.entry.buddy->name
 													 );
-#else
-					item->data = g_strdup(entry.entry.buddy->name);
-					g_completion_add_items(data->completion, item);
-#endif /* NEW_STYLE_COMPLETION */
 				}
 			}
 		}
 	}
 
-#ifndef NEW_STYLE_COMPLETION
-	g_list_free(item);
-	data->log_items = NULL;
-#endif /* NEW_STYLE_COMPLETION */
-
 	sets = purple_log_get_log_sets();
 	g_hash_table_foreach(sets, (GHFunc)get_log_set_name, data);
 	g_hash_table_destroy(sets);
 
-#ifndef NEW_STYLE_COMPLETION
-	g_completion_add_items(data->completion, data->log_items);
-	g_list_free(data->log_items);
-#endif /* NEW_STYLE_COMPLETION */
 }
 
 static void
@@ -2208,7 +2080,6 @@
 {
 	PidginCompletionData *data;
 
-#ifdef NEW_STYLE_COMPLETION
 	/*
 	 * Store the displayed completion value, the buddy name, the UTF-8
 	 * normalized & casefolded buddy name, the UTF-8 normalized &
@@ -2252,33 +2123,6 @@
 
 	gtk_entry_completion_set_text_column(completion, 0);
 
-#else /* !NEW_STYLE_COMPLETION */
-
-	data = g_new0(PidginCompletionData, 1);
-
-	data->entry = entry;
-	data->accountopt = accountopt;
-	if (filter_func == NULL) {
-		data->filter_func = pidgin_screenname_autocomplete_default_filter;
-		data->filter_func_user_data = NULL;
-	} else {
-		data->filter_func = filter_func;
-		data->filter_func_user_data = user_data;
-	}
-	data->completion = g_completion_new(NULL);
-	data->completion_started = FALSE;
-
-	add_completion_list(data);
-
-	g_completion_set_compare(data->completion, g_ascii_strncasecmp);
-
-	g_signal_connect(G_OBJECT(entry), "event",
-					 G_CALLBACK(completion_entry_event), data);
-	g_signal_connect(G_OBJECT(entry), "destroy",
-					 G_CALLBACK(destroy_completion_data), data);
-
-#endif /* !NEW_STYLE_COMPLETION */
-
 	purple_signal_connect(purple_connections_get_handle(), "signed-on", entry,
 						PURPLE_CALLBACK(repopulate_autocomplete), data);
 	purple_signal_connect(purple_connections_get_handle(), "signed-off", entry,
@@ -2322,11 +2166,7 @@
 	gdk_window_set_cursor(widget->window, cursor);
 	gdk_cursor_unref(cursor);
 
-#if GTK_CHECK_VERSION(2,4,0)
 	gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window)));
-#else
-	gdk_flush();
-#endif
 }
 
 void pidgin_clear_cursor(GtkWidget *widget)
@@ -2347,23 +2187,6 @@
 	gpointer data;
 };
 
-#if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
-static void
-icon_filesel_delete_cb(GtkWidget *w, struct _icon_chooser *dialog)
-{
-	if (dialog->icon_filesel != NULL)
-		gtk_widget_destroy(dialog->icon_filesel);
-
-	if (dialog->callback)
-		dialog->callback(NULL, dialog->data);
-
-	g_free(dialog);
-}
-#endif /* FILECHOOSER */
-
-
-
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 static void
 icon_filesel_choose_cb(GtkWidget *widget, gint response, struct _icon_chooser *dialog)
 {
@@ -2387,33 +2210,7 @@
 		g_free(current_folder);
 	}
 
-#else /* FILECHOOSER */
-static void
-icon_filesel_choose_cb(GtkWidget *w, struct _icon_chooser *dialog)
-{
-	char *filename, *current_folder;
-
-	filename = g_strdup(gtk_file_selection_get_filename(
-				GTK_FILE_SELECTION(dialog->icon_filesel)));
-
-	/* If they typed in a directory, change there */
-	if (pidgin_check_if_dir(filename,
-				GTK_FILE_SELECTION(dialog->icon_filesel)))
-	{
-		g_free(filename);
-		return;
-	}
-
-	current_folder = g_path_get_dirname(filename);
-	if (current_folder != NULL) {
-		purple_prefs_set_path(PIDGIN_PREFS_ROOT "/filelocations/last_icon_folder", current_folder);
-		g_free(current_folder);
-	}
-
-#endif /* FILECHOOSER */
-#if 0 /* mismatched curly braces */
-	}
-#endif
+
 	if (dialog->callback)
 		dialog->callback(filename, dialog->data);
 	gtk_widget_destroy(dialog->icon_filesel);
@@ -2423,11 +2220,7 @@
 
 
 static void
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 icon_preview_change_cb(GtkFileChooser *widget, struct _icon_chooser *dialog)
-#else /* FILECHOOSER */
-icon_preview_change_cb(GtkTreeSelection *sel, struct _icon_chooser *dialog)
-#endif /* FILECHOOSER */
 {
 	GdkPixbuf *pixbuf, *scale;
 	int height, width;
@@ -2435,13 +2228,8 @@
 	struct stat st;
 	char *filename;
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	filename = gtk_file_chooser_get_preview_filename(
 					GTK_FILE_CHOOSER(dialog->icon_filesel));
-#else /* FILECHOOSER */
-	filename = g_strdup(gtk_file_selection_get_filename(
-		GTK_FILE_SELECTION(dialog->icon_filesel)));
-#endif /* FILECHOOSER */
 
 	if (!filename || g_stat(filename, &st) || !(pixbuf = gdk_pixbuf_new_from_file(filename, NULL)))
 	{
@@ -2477,20 +2265,13 @@
 GtkWidget *pidgin_buddy_icon_chooser_new(GtkWindow *parent, void(*callback)(const char *, gpointer), gpointer data) {
 	struct _icon_chooser *dialog = g_new0(struct _icon_chooser, 1);
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	GtkWidget *vbox;
-#else
-	GtkWidget *hbox;
-	GtkWidget *tv;
-	GtkTreeSelection *sel;
-#endif /* FILECHOOSER */
 	const char *current_folder;
 
 	dialog->callback = callback;
 	dialog->data = data;
 
 	current_folder = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/filelocations/last_icon_folder");
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 
 	dialog->icon_filesel = gtk_file_chooser_dialog_new(_("Buddy Icon"),
 							   parent,
@@ -2521,39 +2302,6 @@
 	g_signal_connect(G_OBJECT(dialog->icon_filesel), "response",
 					 G_CALLBACK(icon_filesel_choose_cb), dialog);
 	icon_preview_change_cb(NULL, dialog);
-#else /* FILECHOOSER */
-	dialog->icon_filesel = gtk_file_selection_new(_("Buddy Icon"));
-	dialog->icon_preview = gtk_image_new();
-	dialog->icon_text = gtk_label_new(NULL);
-	if ((current_folder != NULL) && (*current_folder != '\0'))
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog->icon_filesel),
-										current_folder);
-
-	gtk_widget_set_size_request(GTK_WIDGET(dialog->icon_preview),-1, 50);
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
-	gtk_box_pack_start(
-		GTK_BOX(GTK_FILE_SELECTION(dialog->icon_filesel)->main_vbox),
-		hbox, FALSE, FALSE, 0);
-	gtk_box_pack_end(GTK_BOX(hbox), dialog->icon_preview,
-			 FALSE, FALSE, 0);
-	gtk_box_pack_end(GTK_BOX(hbox), dialog->icon_text, FALSE, FALSE, 0);
-
-	tv = GTK_FILE_SELECTION(dialog->icon_filesel)->file_list;
-	sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));
-
-	g_signal_connect(G_OBJECT(sel), "changed",
-					 G_CALLBACK(icon_preview_change_cb), dialog);
-	g_signal_connect(
-		G_OBJECT(GTK_FILE_SELECTION(dialog->icon_filesel)->ok_button),
-		"clicked",
-		G_CALLBACK(icon_filesel_choose_cb), dialog);
-	g_signal_connect(
-		G_OBJECT(GTK_FILE_SELECTION(dialog->icon_filesel)->cancel_button),
-		"clicked",
-		G_CALLBACK(icon_filesel_delete_cb), dialog);
-	g_signal_connect(G_OBJECT(dialog->icon_filesel), "destroy",
-					 G_CALLBACK(icon_filesel_delete_cb), dialog);
-#endif /* FILECHOOSER */
 
 #ifdef _WIN32
 	g_signal_connect(G_OBJECT(dialog->icon_filesel), "show",
@@ -2564,7 +2312,6 @@
 }
 
 
-#if GTK_CHECK_VERSION(2,2,0)
 static gboolean
 str_array_match(char **a, char **b)
 {
@@ -2578,22 +2325,16 @@
 				return TRUE;
 	return FALSE;
 }
-#endif
 
 gpointer
 pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path, size_t *len)
 {
 	PurplePluginProtocolInfo *prpl_info;
-#if GTK_CHECK_VERSION(2,2,0)
 	char **prpl_formats;
 	int width, height;
 	char **pixbuf_formats = NULL;
 	GdkPixbufFormat *format;
 	GdkPixbuf *pixbuf;
-#if !GTK_CHECK_VERSION(2,4,0)
-	GdkPixbufLoader *loader;
-#endif
-#endif
 	gchar *contents;
 	gsize length;
 
@@ -2602,22 +2343,8 @@
 	g_return_val_if_fail(prpl_info->icon_spec.format != NULL, NULL);
 
 
-#if GTK_CHECK_VERSION(2,2,0)
-#if GTK_CHECK_VERSION(2,4,0)
 	format = gdk_pixbuf_get_file_info(path, &width, &height);
-#else
-	loader = gdk_pixbuf_loader_new();
-	if (g_file_get_contents(path, &contents, &length, NULL)) {
-		gdk_pixbuf_loader_write(loader, contents, length, NULL);
-		g_free(contents);
-	}
-	gdk_pixbuf_loader_close(loader, NULL);
-	pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
-	width = gdk_pixbuf_get_width(pixbuf);
-	height = gdk_pixbuf_get_height(pixbuf);
-	format = gdk_pixbuf_loader_get_format(loader);
-	g_object_unref(G_OBJECT(loader));
-#endif
+
 	if (format == NULL)
 		return NULL;
 
@@ -2629,25 +2356,18 @@
 		   prpl_info->icon_spec.max_width >= width &&
 		   prpl_info->icon_spec.min_height <= height &&
 		   prpl_info->icon_spec.max_height >= height)))                   /* The icon is the correct size */
-#endif
 	{
-#if GTK_CHECK_VERSION(2,2,0)
 		g_strfreev(prpl_formats);
 		g_strfreev(pixbuf_formats);
-#endif
+
 		/* We don't need to scale the image. */
-
 		contents = NULL;
 		if (!g_file_get_contents(path, &contents, &length, NULL))
 		{
 			g_free(contents);
-#if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
-		g_object_unref(G_OBJECT(pixbuf));
-#endif
 			return NULL;
 		}
 	}
-#if GTK_CHECK_VERSION(2,2,0)
 	else
 	{
 		int i;
@@ -2769,156 +2489,8 @@
 	if (len)
 		*len = length;
 	return contents;
-#else
-	/*
-	 * The chosen icon wasn't the right size, and we're using
-	 * GTK+ 2.0 so we can't scale it.
-	 */
-	return NULL;
-#endif
 }
 
-#if !GTK_CHECK_VERSION(2,6,0)
-static void
-_gdk_file_scale_size_prepared_cb (GdkPixbufLoader *loader,
-		  int              width,
-		  int              height,
-		  gpointer         data)
-{
-	struct {
-		gint width;
-		gint height;
-		gboolean preserve_aspect_ratio;
-	} *info = data;
-
-	g_return_if_fail (width > 0 && height > 0);
-
-	if (info->preserve_aspect_ratio &&
-		(info->width > 0 || info->height > 0)) {
-		if (info->width < 0)
-		{
-			width = width * (double)info->height/(double)height;
-			height = info->height;
-		}
-		else if (info->height < 0)
-		{
-			height = height * (double)info->width/(double)width;
-			width = info->width;
-		}
-		else if ((double)height * (double)info->width >
-				 (double)width * (double)info->height) {
-			width = 0.5 + (double)width * (double)info->height / (double)height;
-			height = info->height;
-		} else {
-			height = 0.5 + (double)height * (double)info->width / (double)width;
-			width = info->width;
-		}
-	} else {
-			if (info->width > 0)
-				width = info->width;
-			if (info->height > 0)
-				height = info->height;
-	}
-
-#if GTK_CHECK_VERSION(2,2,0) /* 2.0 users are going to have very strangely sized things */
-	gdk_pixbuf_loader_set_size (loader, width, height);
-#else
-#warning  nosnilmot could not be bothered to fix this properly for you
-#warning  ... good luck ... your images may end up strange sizes
-#endif
-}
-
-GdkPixbuf *
-gdk_pixbuf_new_from_file_at_scale(const char *filename, int width, int height,
-				  				  gboolean preserve_aspect_ratio,
-								  GError **error)
-{
-	GdkPixbufLoader *loader;
-	GdkPixbuf       *pixbuf;
-	guchar buffer [4096];
-	int length;
-	FILE *f;
-	struct {
-		gint width;
-		gint height;
-		gboolean preserve_aspect_ratio;
-	} info;
-	GdkPixbufAnimation *animation;
-	GdkPixbufAnimationIter *iter;
-	gboolean has_frame;
-
-	g_return_val_if_fail (filename != NULL, NULL);
-	g_return_val_if_fail (width > 0 || width == -1, NULL);
-	g_return_val_if_fail (height > 0 || height == -1, NULL);
-
-	f = g_fopen (filename, "rb");
-	if (!f) {
-		gint save_errno = errno;
-		gchar *display_name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
-		g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (save_errno),
-					 _("Failed to open file '%s': %s"),
-					 display_name ? display_name : "(unknown)",
-					 g_strerror (save_errno));
-		g_free (display_name);
-		return NULL;
-	}
-
-	loader = gdk_pixbuf_loader_new ();
-
-	info.width = width;
-	info.height = height;
-	info.preserve_aspect_ratio = preserve_aspect_ratio;
-
-	g_signal_connect (loader, "size-prepared", G_CALLBACK (_gdk_file_scale_size_prepared_cb), &info);
-
-	has_frame = FALSE;
-	while (!has_frame && !feof (f) && !ferror (f)) {
-		length = fread (buffer, 1, sizeof (buffer), f);
-		if (length > 0)
-			if (!gdk_pixbuf_loader_write (loader, buffer, length, error)) {
-				gdk_pixbuf_loader_close (loader, NULL);
-				fclose (f);
-				g_object_unref (loader);
-				return NULL;
-			}
-
-		animation = gdk_pixbuf_loader_get_animation (loader);
-		if (animation) {
-			iter = gdk_pixbuf_animation_get_iter (animation, 0);
-			if (!gdk_pixbuf_animation_iter_on_currently_loading_frame (iter)) {
-				has_frame = TRUE;
-			}
-			g_object_unref (iter);
-		}
-	}
-
-	fclose (f);
-
-	if (!gdk_pixbuf_loader_close (loader, error) && !has_frame) {
-		g_object_unref (loader);
-		return NULL;
-	}
-
-	pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
-
-	if (!pixbuf) {
-		gchar *display_name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
-		g_object_unref (loader);
-		g_set_error (error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_FAILED,
-					 _("Failed to load image '%s': reason not known, probably a corrupt image file"),
-					 display_name ? display_name : "(unknown)");
-		g_free (display_name);
-		return NULL;
-	}
-
-	g_object_ref (pixbuf);
-
-	g_object_unref (loader);
-
-	return pixbuf;
-}
-#endif /* ! Gtk 2.6.0 */
-
 void pidgin_set_custom_buddy_icon(PurpleAccount *account, const char *who, const char *filename)
 {
 	PurpleBuddy *buddy;
@@ -2951,34 +2523,10 @@
 
 void pidgin_set_urgent(GtkWindow *window, gboolean urgent)
 {
-#if GTK_CHECK_VERSION(2,8,0)
-	gtk_window_set_urgency_hint(window, urgent);
-#elif defined _WIN32
+#if defined _WIN32
 	winpidgin_window_flash(window, urgent);
-#elif defined GDK_WINDOWING_X11
-	GdkWindow *gdkwin;
-	XWMHints *hints;
-
-	g_return_if_fail(window != NULL);
-
-	gdkwin = GTK_WIDGET(window)->window;
-
-	g_return_if_fail(gdkwin != NULL);
-
-	hints = XGetWMHints(GDK_WINDOW_XDISPLAY(gdkwin),
-	                    GDK_WINDOW_XWINDOW(gdkwin));
-	if(!hints)
-		hints = XAllocWMHints();
-
-	if (urgent)
-		hints->flags |= XUrgencyHint;
-	else
-		hints->flags &= ~XUrgencyHint;
-	XSetWMHints(GDK_WINDOW_XDISPLAY(gdkwin),
-	            GDK_WINDOW_XWINDOW(gdkwin), hints);
-	XFree(hints);
 #else
-	/* do something else? */
+	gtk_window_set_urgency_hint(window, urgent);
 #endif
 }
 
@@ -3287,31 +2835,6 @@
 	return dim_grey_string;
 }
 
-#if !GTK_CHECK_VERSION(2,2,0)
-GtkTreePath *
-gtk_tree_path_new_from_indices (gint first_index, ...)
-{
-	int arg;
-	va_list args;
-	GtkTreePath *path;
-
-	path = gtk_tree_path_new ();
-
-	va_start (args, first_index);
-	arg = first_index;
-
-	while (arg != -1)
-	{
-		gtk_tree_path_append_index (path, arg);
-		arg = va_arg (args, gint);
-	}
-
-	va_end (args);
-
-	return path;
-}
-#endif
-
 static void
 combo_box_changed_cb(GtkComboBox *combo_box, GtkEntry *entry)
 {
@@ -3457,7 +2980,6 @@
 	return FALSE;
 #endif
 #else
-#if GTK_CHECK_VERSION(2,4,0)
 	/* This finds the currently active window and makes that the parent window. */
 	GList *windows = NULL;
 	GtkWidget *parent = NULL;
@@ -3500,7 +3022,6 @@
 		gtk_window_set_transient_for(GTK_WINDOW(widget), GTK_WINDOW(parent));
 		return TRUE;
 	}
-#endif
 	return FALSE;
 #endif
 }
@@ -3584,23 +3105,13 @@
 #ifdef _WIN32
 	/* If using Win32... */
 	int code;
-	if (G_WIN32_HAVE_WIDECHAR_API()) {
-		wchar_t *wc_filename = g_utf8_to_utf16(
-				uri, -1, NULL, NULL, NULL);
-
-		code = (int)ShellExecuteW(NULL, NULL, wc_filename, NULL, NULL,
-				SW_SHOW);
-
-		g_free(wc_filename);
-	} else {
-		char *l_filename = g_locale_from_utf8(
-				uri, -1, NULL, NULL, NULL);
-
-		code = (int)ShellExecuteA(NULL, NULL, l_filename, NULL, NULL,
-				SW_SHOW);
-
-		g_free(l_filename);
-	}
+	wchar_t *wc_filename = g_utf8_to_utf16(
+			uri, -1, NULL, NULL, NULL);
+
+	code = (int)ShellExecuteW(NULL, NULL, wc_filename, NULL, NULL,
+			SW_SHOW);
+
+	g_free(wc_filename);
 
 	if (code == SE_ERR_ASSOCINCOMPLETE || code == SE_ERR_NOASSOC)
 	{
@@ -3697,13 +3208,10 @@
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
 
 	/* Open Containing Directory */
-#if GTK_CHECK_VERSION(2,6,0)
 	img = gtk_image_new_from_stock(GTK_STOCK_DIRECTORY, GTK_ICON_SIZE_MENU);
 	item = gtk_image_menu_item_new_with_mnemonic(_("Open _Containing Directory"));
 	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
-#else
-	item = gtk_menu_item_new_with_mnemonic(_("Open _Containing Directory"));
-#endif
+
 	g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(open_containing_cb), (gpointer)url);
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
 
@@ -3769,13 +3277,10 @@
 	url = gtk_imhtml_link_get_url(link);
 
 	/* Play Sound */
-#if GTK_CHECK_VERSION(2,6,0)
 	img = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU);
 	item = gtk_image_menu_item_new_with_mnemonic(_("_Play Sound"));
 	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img);
-#else
-	item = gtk_menu_item_new_with_mnemonic(_("_Play Sound"));
-#endif
+
 	g_signal_connect_swapped(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_link_activate), link);
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
 
@@ -3897,17 +3402,18 @@
 
 	do {
 		DWORD nameSize = 256;
-		char start[256];
-		/* I don't think we need to worry about non-ASCII protocol names */
-		ret = RegEnumKeyExA(HKEY_CLASSES_ROOT, idx++, start, &nameSize,
+		wchar_t start[256];
+		ret = RegEnumKeyExW(HKEY_CLASSES_ROOT, idx++, start, &nameSize,
 							NULL, NULL, NULL, NULL);
 		if (ret == ERROR_SUCCESS) {
 			HKEY reg_key = NULL;
-			ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, start, 0, KEY_READ, &reg_key);
+			ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, start, 0, KEY_READ, &reg_key);
 			if (ret == ERROR_SUCCESS) {
-				ret = RegQueryValueExA(reg_key, "URL Protocol", NULL, NULL, NULL, NULL);
+				ret = RegQueryValueExW(reg_key, L"URL Protocol", NULL, NULL, NULL, NULL);
 				if (ret == ERROR_SUCCESS) {
-					gchar *protocol = g_strdup_printf("%s:", start);
+					gchar *utf8 = g_utf16_to_utf8(start, -1, NULL, NULL, NULL);
+					gchar *protocol = g_strdup_printf("%s:", utf8);
+					g_free(utf8);
 					registered_url_handlers = g_slist_prepend(registered_url_handlers, protocol);
 					/* We still pass everything to the "http" "open" handler for security reasons */
 					gtk_imhtml_class_register_protocol(protocol, url_clicked_cb, link_context_menu);
--- a/pidgin/gtkutils.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkutils.h	Thu Feb 18 21:38:43 2010 +0000
@@ -648,17 +648,6 @@
  */
 gpointer pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path, size_t *len);
 
-#if !GTK_CHECK_VERSION(2,6,0)
-/**
- * Creates a new pixbuf by loading an image from a file. The image will
- * be scaled to fit in the requested size, optionally preserving the image's
- * aspect ratio.
- */
-GdkPixbuf *gdk_pixbuf_new_from_file_at_scale(const char *filename, int width, int height,
-											 gboolean preserve_aspect_ratio,
-											 GError **error);
-#endif
-
 #if !(defined PIDGIN_DISABLE_DEPRECATED) || (defined _PIDGIN_GTKUTILS_C_)
 /**
  * Set or unset a custom buddyicon for a user.
@@ -760,20 +749,6 @@
  */
 const char *pidgin_get_dim_grey_string(GtkWidget *widget);
 
-#if !GTK_CHECK_VERSION(2,2,0)
-/**
- * This is copied from Gtk to support Gtk 2.0
- *
- * Creates a new path with @a first_index and the varargs as indices.
- *
- * @param first_index    first integer
- * @param ...            list of integers terminated by -1
- *
- * @return               A newly created GtkTreePath.
- */
-GtkTreePath *gtk_tree_path_new_from_indices (gint first_index, ...);
-#endif
-
 /**
  * Create a simple text GtkComboBoxEntry equivalent
  *
--- a/pidgin/gtkwhiteboard.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/gtkwhiteboard.c	Thu Feb 18 21:38:43 2010 +0000
@@ -738,12 +738,24 @@
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)(data);
 
-	pidgin_whiteboard_clear(gtkwb->wb);
+	/* Confirm whether the user really wants to clear */
+	GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(gtkwb->window),
+											   GTK_DIALOG_DESTROY_WITH_PARENT,
+											   GTK_MESSAGE_QUESTION,
+											   GTK_BUTTONS_YES_NO,
+											   _("Do you really want to clear?"));
+	gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+	gtk_widget_destroy(dialog);
 
-	pidgin_whiteboard_set_canvas_as_icon(gtkwb);
+	if (response == GTK_RESPONSE_YES)
+	{
+		pidgin_whiteboard_clear(gtkwb->wb);
 
-	/* Do protocol specific clearing procedures */
-	purple_whiteboard_send_clear(gtkwb->wb);
+		pidgin_whiteboard_set_canvas_as_icon(gtkwb);
+
+		/* Do protocol specific clearing procedures */
+		purple_whiteboard_send_clear(gtkwb->wb);
+	}
 }
 
 static void pidgin_whiteboard_button_save_press(GtkWidget *widget, gpointer data)
@@ -755,7 +767,6 @@
 
 	int result;
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	dialog = gtk_file_chooser_dialog_new (_("Save File"),
 										  GTK_WINDOW(gtkwb->window),
 										  GTK_FILE_CHOOSER_ACTION_SAVE,
@@ -774,21 +785,15 @@
 	else
 		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), filename_for_existing_document);
 	*/
-#else
-	dialog = gtk_file_selection_new(_("Save File"));
-	gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog), "whiteboard.jpg");
-#endif
+
 	result = gtk_dialog_run(GTK_DIALOG(dialog));
 
 	if(result == GTK_RESPONSE_ACCEPT)
 	{
 		char *filename;
 
-#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 		filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-#else
-		filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog)));
-#endif
+
 		gtk_widget_destroy(dialog);
 
 		/* Makes an icon from the whiteboard's canvas 'image' */
--- a/pidgin/minidialog.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/minidialog.c	Thu Feb 18 21:38:43 2010 +0000
@@ -339,26 +339,20 @@
 
 	param_spec = g_param_spec_string("title", "title",
 		"String specifying the mini-dialog's title", NULL,
-#if GTK_CHECK_VERSION(2,8,0)
 		G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
-#endif
 		G_PARAM_READWRITE);
 	g_object_class_install_property (object_class, PROP_TITLE, param_spec);
 
 	param_spec = g_param_spec_string("description", "description",
 		"Description text for the mini-dialog, if desired", NULL,
-#if GTK_CHECK_VERSION(2,8,0)
 		G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
-#endif
 		G_PARAM_READWRITE);
 	g_object_class_install_property (object_class, PROP_DESCRIPTION, param_spec);
 
 	param_spec = g_param_spec_string("icon-name", "icon-name",
 		"String specifying the Gtk stock name of the dialog's icon",
 		NULL,
-#if GTK_CHECK_VERSION(2,8,0)
 		G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
-#endif
 		G_PARAM_READWRITE);
 	g_object_class_install_property (object_class, PROP_ICON_NAME, param_spec);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pidgin-2-uninstalled.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,21 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+abs_srcdir=@abs_srcdir@
+abs_builddir=@abs_builddir@
+
+abs_top_srcdir=@abs_top_srcdir@
+abs_top_builddir=@abs_top_builddir@
+
+plugindir=${libdir}/pidgin
+
+Name: Pidgin
+Description: Pidgin is a GTK2-based instant messenger application.
+Version: @VERSION@
+Requires: gtk+-2.0 purple
+Cflags: -I${abs_top_srcdir}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pidgin-2.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,15 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+plugindir=${libdir}/pidgin
+
+Name: Pidgin
+Description: Pidgin is a GTK2-based instant messenger application.
+Version: @VERSION@
+Requires: gtk+-2.0 purple
+Cflags: -I${includedir}
--- a/pidgin/pidgin-uninstalled.pc.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/pidgin-uninstalled.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -9,6 +9,8 @@
 abs_srcdir=@abs_srcdir@
 abs_builddir=@abs_builddir@
 
+plugindir=${libdir}/pidgin
+
 Name: Pidgin
 Description: Pidgin is a GTK2-based instant messenger application.
 Version: @VERSION@
--- a/pidgin/pidgin.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/pidgin.h	Thu Feb 18 21:38:43 2010 +0000
@@ -57,33 +57,6 @@
 #endif
 
 /*
- * This is backwards-compatibility code for older versions of GTK+ (< 2.4.x)
- * It defines the new wrap behavior (unknown in earlier versions)
- * as the old (slightly buggy) wrap behavior.
- * It also includes our back-ported GtkExpander
- */
-/** @cond */
-#if (!GTK_CHECK_VERSION(2,4,0))
-# define GTK_WRAP_WORD_CHAR GTK_WRAP_WORD
-# include "gtkexpander.h"
-#endif
-/** @endcond */
-
-/*
- * We include the sources for GtkComboBox and GtkCellView because
- * they don't exist in older versions of GTK+, and we use them
- * in a few places.
- */
-#if !GTK_CHECK_VERSION(2,6,0)
-#   include "gtkcellview.h"
-#   include "gtkcellviewmenuitem.h"
-#   include "pidgincombobox.h"
-#   if !GTK_CHECK_VERSION(2,4,0)
-#       include "gtkcelllayout.h"
-#   endif /* Less than GTK+ 2.4 */
-#endif /* Less than GTK+ 2.6 */
-
-/*
  * Spacings between components, as defined by the
  * GNOME Human Interface Guidelines.
  */
--- a/pidgin/pidgin.pc.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/pidgin.pc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -6,6 +6,8 @@
 datadir=@datadir@
 sysconfdir=@sysconfdir@
 
+plugindir=${libdir}/pidgin
+
 Name: Pidgin
 Description: Pidgin is a GTK2-based instant messenger application.
 Version: @VERSION@
--- a/pidgin/pidgincombobox.c	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3749 +0,0 @@
-/* pidgincombobox.c
- * Copyright (C) 2002, 2003  Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-/*
-#include <config.h>
-*/
-#include <gtk/gtkversion.h>
-#if !GTK_CHECK_VERSION(2,6,0)
-#include "pidgincombobox.h"
-
-#if !GTK_CHECK_VERSION(2,4,0)
-#include <gtk/gtkarrow.h>
-#include <gtk/gtkbindings.h>
-#include "gtkcelllayout.h"
-#include <gtk/gtkcellrenderertext.h>
-#include "gtkcellview.h"
-#include "gtkcellviewmenuitem.h"
-#include <gtk/gtkeventbox.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkliststore.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtktogglebutton.h>
-#include <gtk/gtktreeselection.h>
-/*
-#include <gtk/gtktreeprivate.h>
-*/
-#include <gtk/gtkvseparator.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkversion.h>
-
-#include <gdk/gdkkeysyms.h>
-
-#include <gobject/gvaluecollector.h>
-
-#include <string.h>
-#include <stdarg.h>
-
-#define P_(x) (x)
-
-/* WELCOME, to THE house of evil code */
-
-typedef struct _ComboCellInfo ComboCellInfo;
-struct _ComboCellInfo
-{
-  GtkCellRenderer *cell;
-  GSList *attributes;
-
-  GtkCellLayoutDataFunc func;
-  gpointer func_data;
-  GDestroyNotify destroy;
-
-  guint expand : 1;
-  guint pack : 1;
-};
-
-struct _GtkComboBoxPrivate
-{
-  GtkTreeModel *model;
-
-  gint col_column;
-  gint row_column;
-
-  gint wrap_width;
-
-  gint active_item;
-
-  GtkWidget *tree_view;
-  GtkTreeViewColumn *column;
-
-  GtkWidget *cell_view;
-  GtkWidget *cell_view_frame;
-
-  GtkWidget *button;
-  GtkWidget *box;
-  GtkWidget *arrow;
-  GtkWidget *separator;
-
-  GtkWidget *popup_widget;
-  GtkWidget *popup_window;
-  GtkWidget *popup_frame;
-
-  guint inserted_id;
-  guint deleted_id;
-  guint reordered_id;
-  guint changed_id;
-
-  gint width;
-  GSList *cells;
-
-  guint popup_in_progress : 1;
-  guint destroying : 1;
-};
-
-/* While debugging this evil code, I have learned that
- * there are actually 4 modes to this widget, which can
- * be characterized as follows
- *
- * 1) menu mode, no child added
- *
- * tree_view -> NULL
- * cell_view -> GtkCellView, regular child
- * cell_view_frame -> NULL
- * button -> GtkToggleButton set_parent to combo
- * box -> child of button
- * arrow -> child of box
- * separator -> child of box
- * popup_widget -> GtkMenu
- * popup_window -> NULL
- * popup_frame -> NULL
- *
- * 2) menu mode, child added
- *
- * tree_view -> NULL
- * cell_view -> NULL
- * cell_view_frame -> NULL
- * button -> GtkToggleButton set_parent to combo
- * box -> NULL
- * arrow -> GtkArrow, child of button
- * separator -> NULL
- * popup_widget -> GtkMenu
- * popup_window -> NULL
- * popup_frame -> NULL
- *
- * 3) list mode, no child added
- *
- * tree_view -> GtkTreeView, child of popup_frame
- * cell_view -> GtkCellView, regular child
- * cell_view_frame -> GtkFrame, set parent to combo
- * button -> GtkToggleButton, set_parent to combo
- * box -> NULL
- * arrow -> GtkArrow, child of button
- * separator -> NULL
- * popup_widget -> tree_view
- * popup_window -> GtkWindow
- * popup_frame -> GtkFrame, child of popup_window
- *
- * 4) list mode, child added
- *
- * tree_view -> GtkTreeView, child of popup_frame
- * cell_view -> NULL
- * cell_view_frame -> NULL
- * button -> GtkToggleButton, set_parent to combo
- * box -> NULL
- * arrow -> GtkArrow, child of button
- * separator -> NULL
- * popup_widget -> tree_view
- * popup_window -> GtkWindow
- * popup_frame -> GtkFrame, child of popup_window
- *
- */
-
-enum {
-  CHANGED,
-  LAST_SIGNAL
-};
-
-enum {
-  PROP_0,
-  PROP_MODEL,
-  PROP_WRAP_WIDTH,
-  PROP_ROW_SPAN_COLUMN,
-  PROP_COLUMN_SPAN_COLUMN,
-  PROP_ACTIVE
-};
-
-static GtkBinClass *parent_class = NULL;
-static guint combo_box_signals[LAST_SIGNAL] = {0,};
-
-#define BONUS_PADDING 4
-
-
-/* common */
-static void     gtk_combo_box_class_init           (GtkComboBoxClass *klass);
-static void     gtk_combo_box_cell_layout_init     (GtkCellLayoutIface *iface);
-static void     gtk_combo_box_init                 (GtkComboBox      *combo_box);
-static void     gtk_combo_box_finalize             (GObject          *object);
-static void     gtk_combo_box_destroy              (GtkObject        *object);
-
-static void     gtk_combo_box_set_property         (GObject         *object,
-                                                    guint            prop_id,
-                                                    const GValue    *value,
-                                                    GParamSpec      *spec);
-static void     gtk_combo_box_get_property         (GObject         *object,
-                                                    guint            prop_id,
-                                                    GValue          *value,
-                                                    GParamSpec      *spec);
-
-static void     gtk_combo_box_state_changed        (GtkWidget        *widget,
-			                            GtkStateType      previous);
-static void     gtk_combo_box_style_set            (GtkWidget       *widget,
-                                                    GtkStyle        *previous);
-static void     gtk_combo_box_button_toggled       (GtkWidget       *widget,
-                                                    gpointer         data);
-static void     gtk_combo_box_add                  (GtkContainer    *container,
-                                                    GtkWidget       *widget);
-static void     gtk_combo_box_remove               (GtkContainer    *container,
-                                                    GtkWidget       *widget);
-
-static ComboCellInfo *gtk_combo_box_get_cell_info  (GtkComboBox      *combo_box,
-                                                    GtkCellRenderer  *cell);
-
-static void     gtk_combo_box_menu_show            (GtkWidget        *menu,
-                                                    gpointer          user_data);
-static void     gtk_combo_box_menu_hide            (GtkWidget        *menu,
-                                                    gpointer          user_data);
-
-static void     gtk_combo_box_set_popup_widget     (GtkComboBox      *combo_box,
-                                                    GtkWidget        *popup);
-#if GTK_CHECK_VERSION(2,2,0)
-static void     gtk_combo_box_menu_position_below  (GtkMenu          *menu,
-                                                    gint             *x,
-                                                    gint             *y,
-                                                    gint             *push_in,
-                                                    gpointer          user_data);
-static void     gtk_combo_box_menu_position_over   (GtkMenu          *menu,
-                                                    gint             *x,
-                                                    gint             *y,
-                                                    gint             *push_in,
-                                                    gpointer          user_data);
-static void     gtk_combo_box_menu_position        (GtkMenu          *menu,
-                                                    gint             *x,
-                                                    gint             *y,
-                                                    gint             *push_in,
-                                                    gpointer          user_data);
-#endif
-
-static gint     gtk_combo_box_calc_requested_width (GtkComboBox      *combo_box,
-                                                    GtkTreePath      *path);
-static void     gtk_combo_box_remeasure            (GtkComboBox      *combo_box);
-
-static void     gtk_combo_box_unset_model          (GtkComboBox      *combo_box);
-
-static void     gtk_combo_box_size_request         (GtkWidget        *widget,
-                                                    GtkRequisition   *requisition);
-static void     gtk_combo_box_size_allocate        (GtkWidget        *widget,
-                                                    GtkAllocation    *allocation);
-static void     gtk_combo_box_forall               (GtkContainer     *container,
-                                                    gboolean          include_internals,
-                                                    GtkCallback       callback,
-                                                    gpointer          callback_data);
-static gboolean gtk_combo_box_expose_event         (GtkWidget        *widget,
-                                                    GdkEventExpose   *event);
-static gboolean gtk_combo_box_scroll_event         (GtkWidget        *widget,
-                                                    GdkEventScroll   *event);
-static void     gtk_combo_box_set_active_internal  (GtkComboBox      *combo_box,
-						    gint              index);
-static gboolean gtk_combo_box_key_press            (GtkWidget        *widget,
-						    GdkEventKey      *event,
-						    gpointer          data);
-
-/* listening to the model */
-static void     gtk_combo_box_model_row_inserted   (GtkTreeModel     *model,
-						    GtkTreePath      *path,
-						    GtkTreeIter      *iter,
-						    gpointer          user_data);
-static void     gtk_combo_box_model_row_deleted    (GtkTreeModel     *model,
-						    GtkTreePath      *path,
-						    gpointer          user_data);
-static void     gtk_combo_box_model_rows_reordered (GtkTreeModel     *model,
-						    GtkTreePath      *path,
-						    GtkTreeIter      *iter,
-						    gint             *new_order,
-						    gpointer          user_data);
-static void     gtk_combo_box_model_row_changed    (GtkTreeModel     *model,
-						    GtkTreePath      *path,
-						    GtkTreeIter      *iter,
-						    gpointer          data);
-
-/* list */
-static void     gtk_combo_box_list_position        (GtkComboBox      *combo_box,
-						    gint             *x,
-						    gint             *y,
-						    gint             *width,
-						    gint             *height);
-
-static void     gtk_combo_box_list_setup           (GtkComboBox      *combo_box);
-static void     gtk_combo_box_list_destroy         (GtkComboBox      *combo_box);
-
-static void     gtk_combo_box_list_remove_grabs    (GtkComboBox      *combo_box);
-
-static gboolean gtk_combo_box_list_button_released (GtkWidget        *widget,
-                                                    GdkEventButton   *event,
-                                                    gpointer          data);
-static gboolean gtk_combo_box_list_key_press       (GtkWidget        *widget,
-                                                    GdkEventKey      *event,
-                                                    gpointer          data);
-static gboolean gtk_combo_box_list_button_pressed  (GtkWidget        *widget,
-                                                    GdkEventButton   *event,
-                                                    gpointer          data);
-
-static void     gtk_combo_box_list_row_changed     (GtkTreeModel     *model,
-                                                    GtkTreePath      *path,
-                                                    GtkTreeIter      *iter,
-                                                    gpointer          data);
-
-/* menu */
-static void     gtk_combo_box_menu_setup           (GtkComboBox      *combo_box,
-                                                    gboolean          add_children);
-static void     gtk_combo_box_menu_fill            (GtkComboBox      *combo_box);
-static void     gtk_combo_box_menu_destroy         (GtkComboBox      *combo_box);
-
-static void     gtk_combo_box_item_get_size        (GtkComboBox      *combo_box,
-                                                    gint              index,
-                                                    gint             *cols,
-                                                    gint             *rows);
-static void     gtk_combo_box_relayout_item        (GtkComboBox      *combo_box,
-                                                    gint              index);
-static void     gtk_combo_box_relayout             (GtkComboBox      *combo_box);
-
-static gboolean gtk_combo_box_menu_button_press    (GtkWidget        *widget,
-                                                    GdkEventButton   *event,
-                                                    gpointer          user_data);
-static void     gtk_combo_box_menu_item_activate   (GtkWidget        *item,
-                                                    gpointer          user_data);
-static void     gtk_combo_box_menu_row_inserted    (GtkTreeModel     *model,
-                                                    GtkTreePath      *path,
-                                                    GtkTreeIter      *iter,
-                                                    gpointer          user_data);
-static void     gtk_combo_box_menu_row_deleted     (GtkTreeModel     *model,
-                                                    GtkTreePath      *path,
-                                                    gpointer          user_data);
-static void     gtk_combo_box_menu_rows_reordered  (GtkTreeModel     *model,
-						    GtkTreePath      *path,
-						    GtkTreeIter      *iter,
-						    gint             *new_order,
-						    gpointer          user_data);
-static void     gtk_combo_box_menu_row_changed     (GtkTreeModel     *model,
-                                                    GtkTreePath      *path,
-                                                    GtkTreeIter      *iter,
-                                                    gpointer          data);
-static gboolean gtk_combo_box_menu_key_press       (GtkWidget        *widget,
-						    GdkEventKey      *event,
-						    gpointer          data);
-
-/* cell layout */
-static void     gtk_combo_box_cell_layout_pack_start         (GtkCellLayout         *layout,
-                                                              GtkCellRenderer       *cell,
-                                                              gboolean               expand);
-static void     gtk_combo_box_cell_layout_pack_end           (GtkCellLayout         *layout,
-                                                              GtkCellRenderer       *cell,
-                                                              gboolean               expand);
-static void     gtk_combo_box_cell_layout_clear              (GtkCellLayout         *layout);
-static void     gtk_combo_box_cell_layout_add_attribute      (GtkCellLayout         *layout,
-                                                              GtkCellRenderer       *cell,
-                                                              const gchar           *attribute,
-                                                              gint                   column);
-static void     gtk_combo_box_cell_layout_set_cell_data_func (GtkCellLayout         *layout,
-                                                              GtkCellRenderer       *cell,
-                                                              GtkCellLayoutDataFunc  func,
-                                                              gpointer               func_data,
-                                                              GDestroyNotify         destroy);
-static void     gtk_combo_box_cell_layout_clear_attributes   (GtkCellLayout         *layout,
-                                                              GtkCellRenderer       *cell);
-static void     gtk_combo_box_cell_layout_reorder            (GtkCellLayout         *layout,
-                                                              GtkCellRenderer       *cell,
-                                                              gint                   position);
-static gboolean gtk_combo_box_mnemonic_activate              (GtkWidget    *widget,
-							      gboolean      group_cycling);
-
-static void     cell_view_sync_cells (GtkComboBox *combo_box,
-                                      GtkCellView *cell_view);
-
-#if !GTK_CHECK_VERSION(2,4,0)
-static void     gtk_menu_attach (GtkMenu   *menu,
-                                 GtkWidget *child,
-                                 guint      left_attach,
-                                 guint      right_attach,
-                                 guint      top_attach,
-                                 guint      bottom_attach);
-#endif
-
-GType
-gtk_combo_box_get_type (void)
-{
-  static GType combo_box_type = 0;
-
-  if (!combo_box_type)
-    {
-      static const GTypeInfo combo_box_info =
-        {
-          sizeof (GtkComboBoxClass),
-          NULL, /* base_init */
-          NULL, /* base_finalize */
-          (GClassInitFunc) gtk_combo_box_class_init,
-          NULL, /* class_finalize */
-          NULL, /* class_data */
-          sizeof (GtkComboBox),
-          0,
-          (GInstanceInitFunc) gtk_combo_box_init
-        };
-
-      static const GInterfaceInfo cell_layout_info =
-        {
-          (GInterfaceInitFunc) gtk_combo_box_cell_layout_init,
-          NULL,
-          NULL
-        };
-
-      combo_box_type = g_type_register_static (GTK_TYPE_BIN,
-                                               "PidginComboBox",
-                                               &combo_box_info,
-                                               0);
-
-      g_type_add_interface_static (combo_box_type,
-                                   GTK_TYPE_CELL_LAYOUT,
-                                   &cell_layout_info);
-    }
-
-  return combo_box_type;
-}
-
-/* common */
-static void
-gtk_combo_box_class_init (GtkComboBoxClass *klass)
-{
-  GObjectClass *object_class;
-  GtkBindingSet *binding_set;
-  GtkObjectClass *gtk_object_class;
-  GtkContainerClass *container_class;
-  GtkWidgetClass *widget_class;
-
-  binding_set = gtk_binding_set_by_class (klass);
-
-  container_class = (GtkContainerClass *)klass;
-  container_class->forall = gtk_combo_box_forall;
-  container_class->add = gtk_combo_box_add;
-  container_class->remove = gtk_combo_box_remove;
-
-  widget_class = (GtkWidgetClass *)klass;
-  widget_class->size_allocate = gtk_combo_box_size_allocate;
-  widget_class->size_request = gtk_combo_box_size_request;
-  widget_class->expose_event = gtk_combo_box_expose_event;
-  widget_class->scroll_event = gtk_combo_box_scroll_event;
-  widget_class->mnemonic_activate = gtk_combo_box_mnemonic_activate;
-  widget_class->style_set = gtk_combo_box_style_set;
-  widget_class->state_changed = gtk_combo_box_state_changed;
-
-  gtk_object_class = (GtkObjectClass *)klass;
-  gtk_object_class->destroy = gtk_combo_box_destroy;
-
-  object_class = (GObjectClass *)klass;
-  object_class->finalize = gtk_combo_box_finalize;
-  object_class->set_property = gtk_combo_box_set_property;
-  object_class->get_property = gtk_combo_box_get_property;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  /* signals */
-  combo_box_signals[CHANGED] =
-    g_signal_new ("changed",
-                  G_OBJECT_CLASS_TYPE (klass),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (GtkComboBoxClass, changed),
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-
-  /* properties */
-  g_object_class_install_property (object_class,
-                                   PROP_MODEL,
-                                   g_param_spec_object ("model",
-                                                        P_("ComboBox model"),
-                                                        P_("The model for the combo box"),
-                                                        GTK_TYPE_TREE_MODEL,
-                                                        G_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_WRAP_WIDTH,
-                                   g_param_spec_int ("wrap_width",
-                                                     P_("Wrap width"),
-                                                     P_("Wrap width for layouting the items in a grid"),
-                                                     0,
-                                                     G_MAXINT,
-                                                     0,
-                                                     G_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_ROW_SPAN_COLUMN,
-                                   g_param_spec_int ("row_span_column",
-                                                     P_("Row span column"),
-                                                     P_("TreeModel column containing the row span values"),
-                                                     0,
-                                                     G_MAXINT,
-                                                     0,
-                                                     G_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_COLUMN_SPAN_COLUMN,
-                                   g_param_spec_int ("column_span_column",
-                                                     P_("Column span column"),
-
-                                                     P_("TreeModel column containing the column span values"),
-                                                     0,
-                                                     G_MAXINT,
-                                                     0,
-                                                     G_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_ACTIVE,
-                                   g_param_spec_int ("active",
-                                                     P_("Active item"),
-                                                     P_("The item which is currently active"),
-                                                     -1,
-                                                     G_MAXINT,
-                                                     -1,
-                                                     G_PARAM_READWRITE));
-
-  gtk_widget_class_install_style_property (widget_class,
-                                           g_param_spec_boolean ("appears-as-list",
-                                                                 P_("Appears as list"),
-                                                                 P_("Whether combobox dropdowns should look like lists rather than menus"),
-                                                                 FALSE,
-                                                                 G_PARAM_READABLE));
-}
-
-static void
-gtk_combo_box_cell_layout_init (GtkCellLayoutIface *iface)
-{
-  iface->pack_start = gtk_combo_box_cell_layout_pack_start;
-  iface->pack_end = gtk_combo_box_cell_layout_pack_end;
-  iface->clear = gtk_combo_box_cell_layout_clear;
-  iface->add_attribute = gtk_combo_box_cell_layout_add_attribute;
-  iface->set_cell_data_func = gtk_combo_box_cell_layout_set_cell_data_func;
-  iface->clear_attributes = gtk_combo_box_cell_layout_clear_attributes;
-  iface->reorder = gtk_combo_box_cell_layout_reorder;
-}
-
-static void
-gtk_combo_box_init (GtkComboBox *combo_box)
-{
-  combo_box->priv = g_new0(GtkComboBoxPrivate,1);
-
-  combo_box->priv->cell_view = gtk_cell_view_new ();
-  gtk_widget_set_parent (combo_box->priv->cell_view, GTK_WIDGET (combo_box));
-  GTK_BIN (combo_box)->child = combo_box->priv->cell_view;
-  gtk_widget_show (combo_box->priv->cell_view);
-
-  combo_box->priv->width = 0;
-  combo_box->priv->wrap_width = 0;
-
-  combo_box->priv->active_item = -1;
-  combo_box->priv->col_column = -1;
-  combo_box->priv->row_column = -1;
-}
-
-static void
-gtk_combo_box_set_property (GObject      *object,
-                            guint         prop_id,
-                            const GValue *value,
-                            GParamSpec   *pspec)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (object);
-
-  switch (prop_id)
-    {
-      case PROP_MODEL:
-        gtk_combo_box_set_model (combo_box, g_value_get_object (value));
-        break;
-
-      case PROP_WRAP_WIDTH:
-        gtk_combo_box_set_wrap_width (combo_box, g_value_get_int (value));
-        break;
-
-      case PROP_ROW_SPAN_COLUMN:
-        gtk_combo_box_set_row_span_column (combo_box, g_value_get_int (value));
-        break;
-
-      case PROP_COLUMN_SPAN_COLUMN:
-        gtk_combo_box_set_column_span_column (combo_box, g_value_get_int (value));
-        break;
-
-      case PROP_ACTIVE:
-        gtk_combo_box_set_active (combo_box, g_value_get_int (value));
-        break;
-
-      default:
-        break;
-    }
-}
-
-static void
-gtk_combo_box_get_property (GObject    *object,
-                            guint       prop_id,
-                            GValue     *value,
-                            GParamSpec *pspec)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (object);
-
-  switch (prop_id)
-    {
-      case PROP_MODEL:
-        g_value_set_object (value, combo_box->priv->model);
-        break;
-
-      case PROP_WRAP_WIDTH:
-        g_value_set_int (value, combo_box->priv->wrap_width);
-        break;
-
-      case PROP_ROW_SPAN_COLUMN:
-        g_value_set_int (value, combo_box->priv->row_column);
-        break;
-
-      case PROP_COLUMN_SPAN_COLUMN:
-        g_value_set_int (value, combo_box->priv->col_column);
-        break;
-
-      case PROP_ACTIVE:
-        g_value_set_int (value, gtk_combo_box_get_active (combo_box));
-        break;
-
-      default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gtk_combo_box_state_changed (GtkWidget    *widget,
-			     GtkStateType  previous)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
-
-  if (GTK_WIDGET_REALIZED (widget))
-    {
-      if (combo_box->priv->tree_view && combo_box->priv->cell_view)
-	gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view),
-					    &widget->style->base[GTK_WIDGET_STATE (widget)]);
-    }
-
-  gtk_widget_queue_draw (widget);
-}
-
-static void
-gtk_combo_box_check_appearance (GtkComboBox *combo_box)
-{
-  gboolean appears_as_list;
-
-  /* if wrap_width > 0, then we are in grid-mode and forced to use
-   * unix style
-   */
-  if (combo_box->priv->wrap_width)
-    appears_as_list = FALSE;
-  else
-    gtk_widget_style_get (GTK_WIDGET (combo_box),
-			  "appears-as-list", &appears_as_list,
-			  NULL);
-
-  if (appears_as_list)
-    {
-      /* Destroy all the menu mode widgets, if they exist. */
-      if (GTK_IS_MENU (combo_box->priv->popup_widget))
-	gtk_combo_box_menu_destroy (combo_box);
-
-      /* Create the list mode widgets, if they don't already exist. */
-      if (!GTK_IS_TREE_VIEW (combo_box->priv->tree_view))
-	gtk_combo_box_list_setup (combo_box);
-    }
-  else
-    {
-      /* Destroy all the list mode widgets, if they exist. */
-      if (GTK_IS_TREE_VIEW (combo_box->priv->tree_view))
-	gtk_combo_box_list_destroy (combo_box);
-
-      /* Create the menu mode widgets, if they don't already exist. */
-      if (!GTK_IS_MENU (combo_box->priv->popup_widget))
-	gtk_combo_box_menu_setup (combo_box, TRUE);
-    }
-}
-
-static void
-gtk_combo_box_style_set (GtkWidget *widget,
-                         GtkStyle  *previous)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
-
-  gtk_combo_box_check_appearance (combo_box);
-
-  if (combo_box->priv->tree_view && combo_box->priv->cell_view)
-    gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view),
-					&widget->style->base[GTK_WIDGET_STATE (widget)]);
-}
-
-static void
-gtk_combo_box_button_toggled (GtkWidget *widget,
-                              gpointer   data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (data);
-
-  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
-    {
-      if (!combo_box->priv->popup_in_progress)
-        gtk_combo_box_popup (combo_box);
-    }
-  else
-    gtk_combo_box_popdown (combo_box);
-}
-
-static void
-gtk_combo_box_add (GtkContainer *container,
-                   GtkWidget    *widget)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (container);
-
-  if (combo_box->priv->cell_view && combo_box->priv->cell_view->parent)
-    {
-      gtk_widget_unparent (combo_box->priv->cell_view);
-      GTK_BIN (container)->child = NULL;
-      gtk_widget_queue_resize (GTK_WIDGET (container));
-    }
-
-  gtk_widget_set_parent (widget, GTK_WIDGET (container));
-  GTK_BIN (container)->child = widget;
-
-  if (combo_box->priv->cell_view &&
-      widget != combo_box->priv->cell_view)
-    {
-      /* since the cell_view was unparented, it's gone now */
-      combo_box->priv->cell_view = NULL;
-
-      if (!combo_box->priv->tree_view && combo_box->priv->separator)
-        {
-	  gtk_container_remove (GTK_CONTAINER (combo_box->priv->separator->parent),
-				combo_box->priv->separator);
-	  combo_box->priv->separator = NULL;
-
-          gtk_widget_queue_resize (GTK_WIDGET (container));
-        }
-      else if (combo_box->priv->cell_view_frame)
-        {
-          gtk_widget_unparent (combo_box->priv->cell_view_frame);
-          combo_box->priv->cell_view_frame = NULL;
-        }
-    }
-}
-
-static void
-gtk_combo_box_remove (GtkContainer *container,
-		      GtkWidget    *widget)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (container);
-  gboolean appears_as_list;
-
-  gtk_widget_unparent (widget);
-  GTK_BIN (container)->child = NULL;
-
-  if (combo_box->priv->destroying)
-    return;
-
-  gtk_widget_queue_resize (GTK_WIDGET (container));
-
-  if (!combo_box->priv->tree_view)
-    appears_as_list = FALSE;
-  else
-    appears_as_list = TRUE;
-
-  if (appears_as_list)
-    gtk_combo_box_list_destroy (combo_box);
-  else if (GTK_IS_MENU (combo_box->priv->popup_widget))
-    {
-      gtk_combo_box_menu_destroy (combo_box);
-      gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget));
-      combo_box->priv->popup_widget = NULL;
-    }
-
-  if (!combo_box->priv->cell_view)
-    {
-      combo_box->priv->cell_view = gtk_cell_view_new ();
-      gtk_widget_set_parent (combo_box->priv->cell_view, GTK_WIDGET (container));
-      GTK_BIN (container)->child = combo_box->priv->cell_view;
-
-      gtk_widget_show (combo_box->priv->cell_view);
-      gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view),
-			       combo_box->priv->model);
-      cell_view_sync_cells (combo_box, GTK_CELL_VIEW (combo_box->priv->cell_view));
-    }
-
-
-  if (appears_as_list)
-    gtk_combo_box_list_setup (combo_box);
-  else
-    gtk_combo_box_menu_setup (combo_box, TRUE);
-
-  gtk_combo_box_set_active_internal (combo_box, combo_box->priv->active_item);
-}
-
-static ComboCellInfo *
-gtk_combo_box_get_cell_info (GtkComboBox     *combo_box,
-                             GtkCellRenderer *cell)
-{
-  GSList *i;
-
-  for (i = combo_box->priv->cells; i; i = i->next)
-    {
-      ComboCellInfo *info = (ComboCellInfo *)i->data;
-
-      if (info && info->cell == cell)
-        return info;
-    }
-
-  return NULL;
-}
-
-static void
-gtk_combo_box_menu_show (GtkWidget *menu,
-                         gpointer   user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
-                                TRUE);
-  combo_box->priv->popup_in_progress = FALSE;
-}
-
-static void
-gtk_combo_box_menu_hide (GtkWidget *menu,
-                         gpointer   user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
-                                FALSE);
-}
-
-static void
-gtk_combo_box_detacher (GtkWidget *widget,
-			GtkMenu	  *menu)
-{
-  GtkComboBox *combo_box;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (widget));
-
-  combo_box = GTK_COMBO_BOX (widget);
-  g_return_if_fail (combo_box->priv->popup_widget == (GtkWidget*) menu);
-
-  g_signal_handlers_disconnect_by_func (menu,
-					gtk_combo_box_menu_show,
-					combo_box);
-  g_signal_handlers_disconnect_by_func (menu,
-					gtk_combo_box_menu_hide,
-					combo_box);
-
-  combo_box->priv->popup_widget = NULL;
-}
-
-static void
-gtk_combo_box_set_popup_widget (GtkComboBox *combo_box,
-                                GtkWidget   *popup)
-{
-  if (GTK_IS_MENU (combo_box->priv->popup_widget))
-    {
-      gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget));
-      combo_box->priv->popup_widget = NULL;
-    }
-  else if (combo_box->priv->popup_widget)
-    {
-      gtk_container_remove (GTK_CONTAINER (combo_box->priv->popup_frame),
-                            combo_box->priv->popup_widget);
-      g_object_unref (G_OBJECT (combo_box->priv->popup_widget));
-      combo_box->priv->popup_widget = NULL;
-    }
-
-  if (GTK_IS_MENU (popup))
-    {
-      if (combo_box->priv->popup_window)
-        {
-          gtk_widget_destroy (combo_box->priv->popup_window);
-          combo_box->priv->popup_window = NULL;
-	  combo_box->priv->popup_frame = NULL;
-        }
-
-      combo_box->priv->popup_widget = popup;
-
-      g_signal_connect (popup, "show",
-                        G_CALLBACK (gtk_combo_box_menu_show), combo_box);
-      g_signal_connect (popup, "hide",
-                        G_CALLBACK (gtk_combo_box_menu_hide), combo_box);
-
-      gtk_menu_attach_to_widget (GTK_MENU (popup),
-				 GTK_WIDGET (combo_box),
-				 gtk_combo_box_detacher);
-    }
-  else
-    {
-      if (!combo_box->priv->popup_window)
-        {
-          combo_box->priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP);
-	  gtk_window_set_resizable (GTK_WINDOW (combo_box->priv->popup_window), FALSE);
-#if GTK_CHECK_VERSION(2,2,0)
-          gtk_window_set_screen (GTK_WINDOW (combo_box->priv->popup_window),
-                                 gtk_widget_get_screen (GTK_WIDGET (combo_box)));
-#endif
-
-          combo_box->priv->popup_frame = gtk_frame_new (NULL);
-          gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->popup_frame),
-                                     GTK_SHADOW_ETCHED_IN);
-          gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_window),
-                             combo_box->priv->popup_frame);
-
-          gtk_widget_show (combo_box->priv->popup_frame);
-        }
-
-      gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_frame),
-                         popup);
-      gtk_widget_show (popup);
-      g_object_ref (G_OBJECT (popup));
-      combo_box->priv->popup_widget = popup;
-    }
-}
-
-#if GTK_CHECK_VERSION(2,2,0)
-static void
-gtk_combo_box_menu_position_below (GtkMenu  *menu,
-				   gint     *x,
-				   gint     *y,
-				   gint     *push_in,
-				   gpointer  user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-  gint sx, sy;
-  GtkWidget *child;
-  GtkRequisition req;
-  GdkScreen *screen;
-  gint monitor_num;
-  GdkRectangle monitor;
-
-  /* FIXME: is using the size request here broken? */
-   child = GTK_BIN (combo_box)->child;
-
-   gdk_window_get_origin (child->window, &sx, &sy);
-
-   if (GTK_WIDGET_NO_WINDOW (child))
-      {
-	sx += child->allocation.x;
-	sy += child->allocation.y;
-      }
-
-   gtk_widget_size_request (GTK_WIDGET (menu), &req);
-
-   if (gtk_widget_get_direction (GTK_WIDGET (combo_box)) == GTK_TEXT_DIR_LTR)
-     *x = sx;
-   else
-     *x = sx + child->allocation.width - req.width;
-   *y = sy;
-
-  screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
-  monitor_num = gdk_screen_get_monitor_at_window (screen,
-						  GTK_WIDGET (combo_box)->window);
-  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-
-  if (*x < monitor.x)
-    *x = monitor.x;
-  else if (*x + req.width > monitor.x + monitor.width)
-    *x = monitor.x + monitor.width - req.width;
-
-  if (monitor.y + monitor.height - *y - child->allocation.height >= req.height)
-    *y += child->allocation.height;
-  else if (*y - monitor.y >= req.height)
-    *y -= req.height;
-  else if (monitor.y + monitor.height - *y - child->allocation.height > *y - monitor.y)
-    *y += child->allocation.height;
-  else
-    *y -= req.height;
-
-   *push_in = FALSE;
-}
-
-static void
-gtk_combo_box_menu_position_over (GtkMenu  *menu,
-				  gint     *x,
-				  gint     *y,
-				  gboolean *push_in,
-				  gpointer  user_data)
-{
-  GtkComboBox *combo_box;
-  GtkWidget *active;
-  GtkWidget *child;
-  GtkWidget *widget;
-  GtkRequisition requisition;
-  GList *children;
-  gint screen_width;
-  gint menu_xpos;
-  gint menu_ypos;
-  gint menu_width;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (user_data));
-
-  combo_box = GTK_COMBO_BOX (user_data);
-  widget = GTK_WIDGET (combo_box);
-
-  gtk_widget_get_child_requisition (GTK_WIDGET (menu), &requisition);
-  menu_width = requisition.width;
-
-  active = gtk_menu_get_active (GTK_MENU (combo_box->priv->popup_widget));
-  gdk_window_get_origin (widget->window, &menu_xpos, &menu_ypos);
-
-  menu_xpos += widget->allocation.x;
-  menu_ypos += widget->allocation.y + widget->allocation.height / 2 - 2;
-
-  if (active != NULL)
-    {
-      gtk_widget_get_child_requisition (active, &requisition);
-      menu_ypos -= requisition.height / 2;
-    }
-
-  children = GTK_MENU_SHELL (combo_box->priv->popup_widget)->children;
-  while (children)
-    {
-      child = children->data;
-
-      if (active == child)
-	break;
-
-      if (GTK_WIDGET_VISIBLE (child))
-	{
-	  gtk_widget_get_child_requisition (child, &requisition);
-	  menu_ypos -= requisition.height;
-	}
-
-      children = children->next;
-    }
-
-  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-    menu_xpos = menu_xpos + widget->allocation.width - menu_width;
-
-  /* Clamp the position on screen */
-  screen_width = gdk_screen_get_width (gtk_widget_get_screen (widget));
-
-  if (menu_xpos < 0)
-    menu_xpos = 0;
-  else if ((menu_xpos + menu_width) > screen_width)
-    menu_xpos -= ((menu_xpos + menu_width) - screen_width);
-
-  *x = menu_xpos;
-  *y = menu_ypos;
-
-  *push_in = TRUE;
-}
-
-static void
-gtk_combo_box_menu_position (GtkMenu  *menu,
-			     gint     *x,
-			     gint     *y,
-			     gint     *push_in,
-			     gpointer  user_data)
-{
-  GtkComboBox *combo_box;
-  GtkWidget *menu_item;
-
-  combo_box = GTK_COMBO_BOX (user_data);
-
-  if (combo_box->priv->wrap_width > 0 || combo_box->priv->cell_view == NULL)
-    gtk_combo_box_menu_position_below (menu, x, y, push_in, user_data);
-  else
-    {
-      menu_item = gtk_menu_get_active (GTK_MENU (combo_box->priv->popup_widget));
-      if (menu_item)
-	gtk_menu_shell_select_item (GTK_MENU_SHELL (combo_box->priv->popup_widget),
-				    menu_item);
-
-      gtk_combo_box_menu_position_over (menu, x, y, push_in, user_data);
-    }
-
-}
-#endif /* Gtk 2.2 */
-
-static void
-gtk_combo_box_list_position (GtkComboBox *combo_box,
-			     gint        *x,
-			     gint        *y,
-			     gint        *width,
-			     gint        *height)
-{
-  GtkWidget *sample;
-  GtkRequisition popup_req;
-#if GTK_CHECK_VERSION(2,2,0)
-  GdkScreen *screen;
-  gint monitor_num;
-  GdkRectangle monitor;
-#endif
-
-  sample = GTK_BIN (combo_box)->child;
-
-  *width = sample->allocation.width;
-  gtk_widget_size_request (combo_box->priv->popup_window, &popup_req);
-  *height = popup_req.height;
-
-  gdk_window_get_origin (sample->window, x, y);
-
-  if (combo_box->priv->cell_view_frame)
-    {
-       *x -= GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-	     GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness;
-       *width += 2 * (GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-            GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness);
-    }
-
-  if (GTK_WIDGET_NO_WINDOW (sample))
-    {
-      *x += sample->allocation.x;
-      *y += sample->allocation.y;
-    }
-
-#if GTK_CHECK_VERSION(2,2,0)
-  screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
-  monitor_num = gdk_screen_get_monitor_at_window (screen,
-						  GTK_WIDGET (combo_box)->window);
-  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
-
-  if (*x < monitor.x)
-    *x = monitor.x;
-  else if (*x + *width > monitor.x + monitor.width)
-    *x = monitor.x + monitor.width - *width;
-
-  if (*y + sample->allocation.height + *height <= monitor.y + monitor.height)
-    *y += sample->allocation.height;
-  else
-    *y -= *height;
-#endif /* Gtk 2.2 */
-}
-
-/**
- * gtk_combo_box_popup:
- * @combo_box: a #GtkComboBox
- *
- * Pops up the menu or dropdown list of @combo_box.
- *
- * This function is mostly intended for use by accessibility technologies;
- * applications should have little use for it.
- *
- * Since: 2.4
- **/
-void
-gtk_combo_box_popup (GtkComboBox *combo_box)
-{
-  gint x, y, width, height;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  if (GTK_WIDGET_MAPPED (combo_box->priv->popup_widget))
-    return;
-
-  if (GTK_IS_MENU (combo_box->priv->popup_widget))
-    {
-      gtk_menu_set_active (GTK_MENU (combo_box->priv->popup_widget),
-			   combo_box->priv->active_item);
-
-      if (combo_box->priv->wrap_width == 0)
-	{
-          GtkRequisition requisition;
-
-	  width = GTK_WIDGET (combo_box)->allocation.width;
-          gtk_widget_size_request (combo_box->priv->popup_widget, &requisition);
-
-	  gtk_widget_set_size_request (combo_box->priv->popup_widget,
-                                       MAX (width, requisition.width), -1);
-	}
-
-      gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget),
-		      NULL, NULL,
-#if GTK_CHECK_VERSION(2,2,0)
-		      gtk_combo_box_menu_position,
-#else
-		      NULL,
-#endif
-		      combo_box, 0, 0);
-      return;
-    }
-
-  gtk_widget_show_all (combo_box->priv->popup_frame);
-  gtk_combo_box_list_position (combo_box, &x, &y, &width, &height);
-
-  gtk_widget_set_size_request (combo_box->priv->popup_window, width, -1);
-  gtk_window_move (GTK_WINDOW (combo_box->priv->popup_window), x, y);
-
-  /* popup */
-  gtk_widget_show (combo_box->priv->popup_window);
-
-  gtk_widget_grab_focus (combo_box->priv->popup_window);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
-                                TRUE);
-
-  if (!GTK_WIDGET_HAS_FOCUS (combo_box->priv->tree_view))
-    {
-      gdk_keyboard_grab (combo_box->priv->popup_window->window,
-                         FALSE, GDK_CURRENT_TIME);
-      gtk_widget_grab_focus (combo_box->priv->tree_view);
-    }
-
-  gtk_grab_add (combo_box->priv->popup_window);
-  gdk_pointer_grab (combo_box->priv->popup_window->window, TRUE,
-                    GDK_BUTTON_PRESS_MASK |
-                    GDK_BUTTON_RELEASE_MASK |
-                    GDK_POINTER_MOTION_MASK,
-                    NULL, NULL, GDK_CURRENT_TIME);
-
-  gtk_grab_add (combo_box->priv->tree_view);
-}
-
-/**
- * gtk_combo_box_popdown:
- * @combo_box: a #GtkComboBox
- *
- * Hides the menu or dropdown list of @combo_box.
- *
- * This function is mostly intended for use by accessibility technologies;
- * applications should have little use for it.
- *
- * Since: 2.4
- **/
-void
-gtk_combo_box_popdown (GtkComboBox *combo_box)
-{
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  if (!GTK_WIDGET_REALIZED (GTK_WIDGET (combo_box)))
-    return;
-
-  if (GTK_IS_MENU (combo_box->priv->popup_widget))
-    {
-      gtk_menu_popdown (GTK_MENU (combo_box->priv->popup_widget));
-      return;
-    }
-
-  gtk_combo_box_list_remove_grabs (combo_box);
-  gtk_widget_hide_all (combo_box->priv->popup_window);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
-                                FALSE);
-}
-
-static gint
-gtk_combo_box_calc_requested_width (GtkComboBox *combo_box,
-                                    GtkTreePath *path)
-{
-  gint padding;
-  GtkRequisition req;
-
-  if (combo_box->priv->cell_view)
-    gtk_widget_style_get (combo_box->priv->cell_view,
-                          "focus-line-width", &padding,
-                          NULL);
-  else
-    padding = 0;
-
-  /* add some pixels for good measure */
-  padding += BONUS_PADDING;
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_view_get_size_of_row (GTK_CELL_VIEW (combo_box->priv->cell_view),
-                                   path, &req);
-  else
-    req.width = 0;
-
-  return req.width + padding;
-}
-
-static void
-gtk_combo_box_remeasure (GtkComboBox *combo_box)
-{
-  GtkTreeIter iter;
-  GtkTreePath *path;
-  gint padding = 0;
-
-  if (!combo_box->priv->model ||
-      !gtk_tree_model_get_iter_first (combo_box->priv->model, &iter))
-    return;
-
-  combo_box->priv->width = 0;
-
-#if GTK_CHECK_VERSION(2,2,0)
-  path = gtk_tree_path_new_from_indices (0, -1);
-#else
-  path = gtk_tree_path_new_first();
-#endif
-
-  if (combo_box->priv->cell_view)
-    gtk_widget_style_get (combo_box->priv->cell_view,
-                          "focus-line-width", &padding,
-                          NULL);
-  else
-    padding = 0;
-
-  /* add some pixels for good measure */
-  padding += BONUS_PADDING;
-
-  do
-    {
-      GtkRequisition req;
-
-      if (combo_box->priv->cell_view)
-	gtk_cell_view_get_size_of_row (GTK_CELL_VIEW (combo_box->priv->cell_view),
-                                       path, &req);
-      else
-        req.width = 0;
-
-      combo_box->priv->width = MAX (combo_box->priv->width,
-                                    req.width + padding);
-
-      gtk_tree_path_next (path);
-    }
-  while (gtk_tree_model_iter_next (combo_box->priv->model, &iter));
-
-  gtk_tree_path_free (path);
-}
-
-static void
-gtk_combo_box_size_request (GtkWidget      *widget,
-                            GtkRequisition *requisition)
-{
-  gint width, height;
-  GtkRequisition bin_req;
-
-  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
-
-  /* common */
-  gtk_widget_size_request (GTK_BIN (widget)->child, &bin_req);
-  gtk_combo_box_remeasure (combo_box);
-  bin_req.width = MAX (bin_req.width, combo_box->priv->width);
-
-  gtk_combo_box_check_appearance (combo_box);
-
-  if (!combo_box->priv->tree_view)
-    {
-      /* menu mode */
-
-      if (combo_box->priv->cell_view)
-        {
-          GtkRequisition button_req, sep_req, arrow_req;
-          gint border_width, xthickness, ythickness;
-
-          gtk_widget_size_request (combo_box->priv->button, &button_req);
-          border_width = GTK_CONTAINER (combo_box->priv->button)->border_width;
-          xthickness = combo_box->priv->button->style->xthickness;
-          ythickness = combo_box->priv->button->style->ythickness;
-
-          bin_req.width = MAX (bin_req.width, combo_box->priv->width);
-
-          gtk_widget_size_request (combo_box->priv->separator, &sep_req);
-          gtk_widget_size_request (combo_box->priv->arrow, &arrow_req);
-
-          height = MAX (sep_req.height, arrow_req.height);
-          height = MAX (height, bin_req.height);
-
-          width = bin_req.width + sep_req.width + arrow_req.width;
-
-          height += border_width + 1 + ythickness * 2 + 4;
-          width += border_width + 1 + xthickness * 2 + 4;
-
-          requisition->width = width;
-          requisition->height = height;
-        }
-      else
-        {
-          GtkRequisition but_req;
-
-          gtk_widget_size_request (combo_box->priv->button, &but_req);
-
-          requisition->width = bin_req.width + but_req.width;
-          requisition->height = MAX (bin_req.height, but_req.height);
-        }
-    }
-  else
-    {
-      /* list mode */
-      GtkRequisition button_req, frame_req;
-
-      /* sample + frame */
-      *requisition = bin_req;
-
-      if (combo_box->priv->cell_view_frame)
-        {
-	  gtk_widget_size_request (combo_box->priv->cell_view_frame, &frame_req);
-          requisition->width += 2 *
-            (GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-             GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness);
-          requisition->height += 2 *
-            (GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-             GTK_WIDGET (combo_box->priv->cell_view_frame)->style->ythickness);
-        }
-
-      /* the button */
-      gtk_widget_size_request (combo_box->priv->button, &button_req);
-
-      requisition->height = MAX (requisition->height, button_req.height);
-      requisition->width += button_req.width;
-    }
-}
-
-static void
-gtk_combo_box_size_allocate (GtkWidget     *widget,
-                             GtkAllocation *allocation)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
-  GtkAllocation child;
-  GtkRequisition req;
-  gboolean is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
-
-  widget->allocation = *allocation;
-
-  gtk_combo_box_check_appearance (combo_box);
-
-  if (!combo_box->priv->tree_view)
-    {
-      if (combo_box->priv->cell_view)
-        {
-          gint border_width, xthickness, ythickness;
-          gint width;
-
-          /* menu mode */
-          gtk_widget_size_allocate (combo_box->priv->button, allocation);
-
-          /* set some things ready */
-          border_width = GTK_CONTAINER (combo_box->priv->button)->border_width;
-          xthickness = combo_box->priv->button->style->xthickness;
-          ythickness = combo_box->priv->button->style->ythickness;
-
-          child.x = allocation->x + border_width + 1 + xthickness + 2;
-          child.y = allocation->y + border_width + 1 + ythickness + 2;
-
-          width = MAX(1, allocation->width - (border_width + 1 + xthickness * 2 + 4));
-
-          /* handle the children */
-          gtk_widget_size_request (combo_box->priv->arrow, &req);
-          child.width = req.width;
-          child.height = MAX(1, allocation->height - 2 * (child.y - allocation->y));
-          if (!is_rtl)
-            child.x += width - req.width;
-          gtk_widget_size_allocate (combo_box->priv->arrow, &child);
-          if (is_rtl)
-            child.x += req.width;
-          gtk_widget_size_request (combo_box->priv->separator, &req);
-          child.width = req.width;
-          if (!is_rtl)
-            child.x -= req.width;
-          gtk_widget_size_allocate (combo_box->priv->separator, &child);
-
-          if (is_rtl)
-            {
-              child.x += req.width;
-              child.width = MAX(1, allocation->x + allocation->width
-                - (border_width + 1 + xthickness + 2) - child.x);
-            }
-          else
-            {
-              child.width = child.x;
-              child.x = allocation->x + border_width + 1 + xthickness + 2;
-              child.width = MAX(1, child.width - child.x);
-            }
-
-          gtk_widget_size_allocate (GTK_BIN (widget)->child, &child);
-        }
-      else
-        {
-          gtk_widget_size_request (combo_box->priv->button, &req);
-          if (is_rtl)
-            child.x = allocation->x;
-          else
-            child.x = allocation->x + allocation->width - req.width;
-          child.y = allocation->y;
-          child.width = req.width;
-          child.height = allocation->height;
-          gtk_widget_size_allocate (combo_box->priv->button, &child);
-
-          if (is_rtl)
-            child.x = allocation->x + req.width;
-          else
-            child.x = allocation->x;
-          child.y = allocation->y;
-          child.width = MAX(1, allocation->width - req.width);
-          gtk_widget_size_allocate (GTK_BIN (widget)->child, &child);
-        }
-    }
-  else
-    {
-      /* list mode */
-
-      /* button */
-      gtk_widget_size_request (combo_box->priv->button, &req);
-      if (is_rtl)
-        child.x = allocation->x;
-      else
-        child.x = allocation->x + allocation->width - req.width;
-      child.y = allocation->y;
-      child.width = req.width;
-      child.height = allocation->height;
-      gtk_widget_size_allocate (combo_box->priv->button, &child);
-
-      /* frame */
-      if (is_rtl)
-        child.x = allocation->x + req.width;
-      else
-        child.x = allocation->x;
-      child.y = allocation->y;
-      child.width = MAX (1, allocation->width - req.width);
-      child.height = allocation->height;
-
-      if (combo_box->priv->cell_view_frame)
-        {
-          gtk_widget_size_allocate (combo_box->priv->cell_view_frame, &child);
-
-          /* the sample */
-          child.x +=
-            GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-            GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness;
-          child.y +=
-            GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-            GTK_WIDGET (combo_box->priv->cell_view_frame)->style->ythickness;
-          child.width -= 2 * (
-            GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-            GTK_WIDGET (combo_box->priv->cell_view_frame)->style->xthickness);
-	  child.width = MAX(1,child.width);
-          child.height -= 2 * (
-            GTK_CONTAINER (combo_box->priv->cell_view_frame)->border_width +
-            GTK_WIDGET (combo_box->priv->cell_view_frame)->style->ythickness);
-	  child.height = MAX(1,child.height);
-        }
-
-      gtk_widget_size_allocate (GTK_BIN (combo_box)->child, &child);
-    }
-}
-
-static void
-gtk_combo_box_unset_model (GtkComboBox *combo_box)
-{
-  if (combo_box->priv->model)
-    {
-      g_signal_handler_disconnect (combo_box->priv->model,
-				   combo_box->priv->inserted_id);
-      g_signal_handler_disconnect (combo_box->priv->model,
-				   combo_box->priv->deleted_id);
-      g_signal_handler_disconnect (combo_box->priv->model,
-				   combo_box->priv->reordered_id);
-      g_signal_handler_disconnect (combo_box->priv->model,
-				   combo_box->priv->changed_id);
-    }
-
-  /* menu mode */
-  if (!combo_box->priv->tree_view)
-    {
-      if (combo_box->priv->popup_widget)
-        gtk_container_foreach (GTK_CONTAINER (combo_box->priv->popup_widget),
-                               (GtkCallback)gtk_widget_destroy, NULL);
-    }
-
-  if (combo_box->priv->model)
-    {
-      g_object_unref (G_OBJECT (combo_box->priv->model));
-      combo_box->priv->model = NULL;
-    }
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), NULL);
-}
-
-static void
-gtk_combo_box_forall (GtkContainer *container,
-                      gboolean      include_internals,
-                      GtkCallback   callback,
-                      gpointer      callback_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (container);
-
-  if (include_internals)
-    {
-      if (combo_box->priv->button)
-	(* callback) (combo_box->priv->button, callback_data);
-      if (combo_box->priv->cell_view_frame)
-	(* callback) (combo_box->priv->cell_view_frame, callback_data);
-    }
-
-  if (GTK_BIN (container)->child)
-    (* callback) (GTK_BIN (container)->child, callback_data);
-}
-
-static gboolean
-gtk_combo_box_expose_event (GtkWidget      *widget,
-                            GdkEventExpose *event)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
-
-  if (!combo_box->priv->tree_view)
-    {
-      gtk_container_propagate_expose (GTK_CONTAINER (widget),
-                                      combo_box->priv->button, event);
-    }
-  else
-    {
-      gtk_container_propagate_expose (GTK_CONTAINER (widget),
-                                      combo_box->priv->button, event);
-
-      if (combo_box->priv->cell_view_frame)
-        gtk_container_propagate_expose (GTK_CONTAINER (widget),
-                                        combo_box->priv->cell_view_frame, event);
-    }
-
-  gtk_container_propagate_expose (GTK_CONTAINER (widget),
-                                  GTK_BIN (widget)->child, event);
-
-  return FALSE;
-}
-
-static gboolean
-gtk_combo_box_scroll_event (GtkWidget          *widget,
-                            GdkEventScroll     *event)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
-  gint index;
-  gint items;
-
-  index = gtk_combo_box_get_active (combo_box);
-
-  if (index != -1)
-    {
-      items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL);
-
-      if (event->direction == GDK_SCROLL_UP)
-        index--;
-      else
-        index++;
-
-      gtk_combo_box_set_active (combo_box, CLAMP (index, 0, items - 1));
-    }
-
-  return TRUE;
-}
-
-/*
- * menu style
- */
-
-static void
-cell_view_sync_cells (GtkComboBox *combo_box,
-                      GtkCellView *cell_view)
-{
-  GSList *k;
-
-  for (k = combo_box->priv->cells; k; k = k->next)
-    {
-      GSList *j;
-      ComboCellInfo *info = (ComboCellInfo *)k->data;
-
-      if (info->pack == GTK_PACK_START)
-        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cell_view),
-                                    info->cell, info->expand);
-      else if (info->pack == GTK_PACK_END)
-        gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (cell_view),
-                                  info->cell, info->expand);
-
-      gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (cell_view),
-                                          info->cell,
-                                          info->func, info->func_data, NULL);
-
-      for (j = info->attributes; j; j = j->next->next)
-        {
-          gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (cell_view),
-                                         info->cell,
-                                         j->data,
-                                         GPOINTER_TO_INT (j->next->data));
-        }
-    }
-}
-
-static void
-gtk_combo_box_menu_setup (GtkComboBox *combo_box,
-                          gboolean     add_children)
-{
-  GtkWidget *menu;
-
-  if (combo_box->priv->cell_view)
-    {
-      combo_box->priv->button = gtk_toggle_button_new ();
-      g_signal_connect (combo_box->priv->button, "toggled",
-                        G_CALLBACK (gtk_combo_box_button_toggled), combo_box);
-      g_signal_connect_after (combo_box->priv->button, "key_press_event",
-			      G_CALLBACK (gtk_combo_box_key_press), combo_box);
-      gtk_widget_set_parent (combo_box->priv->button,
-                             GTK_BIN (combo_box)->child->parent);
-
-      combo_box->priv->box = gtk_hbox_new (FALSE, 0);
-      gtk_container_add (GTK_CONTAINER (combo_box->priv->button),
-			 combo_box->priv->box);
-
-      combo_box->priv->separator = gtk_vseparator_new ();
-      gtk_container_add (GTK_CONTAINER (combo_box->priv->box),
-			 combo_box->priv->separator);
-
-      combo_box->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
-      gtk_container_add (GTK_CONTAINER (combo_box->priv->box),
-			 combo_box->priv->arrow);
-
-      gtk_widget_show_all (combo_box->priv->button);
-    }
-  else
-    {
-      combo_box->priv->button = gtk_toggle_button_new ();
-      g_signal_connect (combo_box->priv->button, "toggled",
-                        G_CALLBACK (gtk_combo_box_button_toggled), combo_box);
-      g_signal_connect_after (combo_box, "key_press_event",
-			      G_CALLBACK (gtk_combo_box_key_press), combo_box);
-      gtk_widget_set_parent (combo_box->priv->button,
-                             GTK_BIN (combo_box)->child->parent);
-
-      combo_box->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
-      gtk_container_add (GTK_CONTAINER (combo_box->priv->button),
-                         combo_box->priv->arrow);
-      gtk_widget_show_all (combo_box->priv->button);
-    }
-
-  g_signal_connect (combo_box->priv->button, "button_press_event",
-                    G_CALLBACK (gtk_combo_box_menu_button_press),
-                    combo_box);
-
-  /* create our funky menu */
-  menu = gtk_menu_new ();
-  g_signal_connect (menu, "key_press_event",
-		    G_CALLBACK (gtk_combo_box_menu_key_press), combo_box);
-  gtk_combo_box_set_popup_widget (combo_box, menu);
-
-  /* add items */
-  if (add_children)
-    gtk_combo_box_menu_fill (combo_box);
-
-}
-
-static void
-gtk_combo_box_menu_fill (GtkComboBox *combo_box)
-{
-  gint i, items;
-  GtkWidget *menu;
-  GtkWidget *tmp;
-
-  if (!combo_box->priv->model)
-    return;
-
-  items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL);
-  menu = combo_box->priv->popup_widget;
-
-  for (i = 0; i < items; i++)
-    {
-      GtkTreePath *path;
-#if GTK_CHECK_VERSION(2,2,0)
-      path = gtk_tree_path_new_from_indices (i, -1);
-#else
-      char buf[32];
-      g_snprintf(buf, sizeof(buf), "%d", i);
-      path = gtk_tree_path_new_from_string(buf);
-#endif
-      tmp = gtk_cell_view_menu_item_new_from_model (combo_box->priv->model,
-                                                    path);
-      g_signal_connect (tmp, "activate",
-                        G_CALLBACK (gtk_combo_box_menu_item_activate),
-                        combo_box);
-
-      cell_view_sync_cells (combo_box,
-                            GTK_CELL_VIEW (GTK_BIN (tmp)->child));
-
-      gtk_menu_shell_append (GTK_MENU_SHELL (menu), tmp);
-
-      if (combo_box->priv->wrap_width)
-        gtk_combo_box_relayout_item (combo_box, i);
-
-      gtk_widget_show (tmp);
-
-      gtk_tree_path_free (path);
-    }
-}
-
-static void
-gtk_combo_box_menu_destroy (GtkComboBox *combo_box)
-{
-  g_signal_handlers_disconnect_matched (combo_box->priv->button,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
-                                        gtk_combo_box_menu_button_press, NULL);
-
-  /* unparent will remove our latest ref */
-  gtk_widget_unparent (combo_box->priv->button);
-
-  combo_box->priv->box = NULL;
-  combo_box->priv->button = NULL;
-  combo_box->priv->arrow = NULL;
-  combo_box->priv->separator = NULL;
-
-  /* changing the popup window will unref the menu and the children */
-}
-
-/*
- * grid
- */
-
-static void
-gtk_combo_box_item_get_size (GtkComboBox *combo_box,
-                             gint         index_,
-                             gint        *cols,
-                             gint        *rows)
-{
-  GtkTreeIter iter;
-
-  gtk_tree_model_iter_nth_child (combo_box->priv->model, &iter, NULL, index_);
-
-  if (cols)
-    {
-      if (combo_box->priv->col_column == -1)
-        *cols = 1;
-      else
-        gtk_tree_model_get (combo_box->priv->model, &iter,
-                            combo_box->priv->col_column, cols,
-                            -1);
-    }
-
-  if (rows)
-    {
-      if (combo_box->priv->row_column == -1)
-        *rows = 1;
-      else
-        gtk_tree_model_get (combo_box->priv->model, &iter,
-                            combo_box->priv->row_column, rows,
-                            -1);
-    }
-}
-
-static gboolean
-menu_occupied (GtkMenu *menu,
-               guint    left_attach,
-               guint    right_attach,
-               guint    top_attach,
-               guint    bottom_attach)
-{
-  GList *i;
-
-  g_return_val_if_fail (GTK_IS_MENU (menu), TRUE);
-  g_return_val_if_fail (left_attach < right_attach, TRUE);
-  g_return_val_if_fail (top_attach < bottom_attach, TRUE);
-
-  for (i = GTK_MENU_SHELL (menu)->children; i; i = i->next)
-    {
-      guint l, r, b, t;
-      gboolean h_intersect = FALSE;
-      gboolean v_intersect = FALSE;
-
-      gtk_container_child_get (GTK_CONTAINER (menu), i->data,
-                               "left_attach", &l,
-                               "right_attach", &r,
-                               "bottom_attach", &b,
-                               "top_attach", &t,
-                               NULL);
-
-      /* look if this item intersects with the given coordinates */
-      h_intersect  = left_attach <= l && l <= right_attach;
-      h_intersect &= left_attach <= r && r <= right_attach;
-
-      v_intersect  = top_attach <= t && t <= bottom_attach;
-      v_intersect &= top_attach <= b && b <= bottom_attach;
-
-      if (h_intersect && v_intersect)
-        return TRUE;
-    }
-
-  return FALSE;
-}
-
-static void
-gtk_combo_box_relayout_item (GtkComboBox *combo_box,
-                             gint         index)
-{
-  gint current_col = 0, current_row = 0;
-  gint rows, cols;
-  GList *list, *nth;
-  GtkWidget *item, *last;
-  GtkWidget *menu;
-
-  menu = combo_box->priv->popup_widget;
-  if (!GTK_IS_MENU_SHELL (menu))
-    return;
-
-  list = gtk_container_get_children (GTK_CONTAINER (menu));
-  nth = g_list_nth (list, index);
-  item = nth->data;
-  if (nth->prev)
-    last = nth->prev->data;
-  else
-    last = NULL;
-  g_list_free (list);
-
-  gtk_combo_box_item_get_size (combo_box, index, &cols, &rows);
-
-   if (combo_box->priv->col_column == -1 &&
-      combo_box->priv->row_column == -1 &&
-      last)
-    {
-      gtk_container_child_get (GTK_CONTAINER (menu),
-			       last,
-			       "right_attach", &current_col,
-			       "top_attach", &current_row,
-			       NULL);
-      if (current_col + cols > combo_box->priv->wrap_width)
-	{
-	  current_col = 0;
-	  current_row++;
-	}
-    }
-  else
-    {
-      /* look for a good spot */
-      while (1)
-	{
-	  if (current_col + cols > combo_box->priv->wrap_width)
-	    {
-	      current_col = 0;
-	      current_row++;
-	    }
-
-	  if (!menu_occupied (GTK_MENU (menu),
-			      current_col, current_col + cols,
-			      current_row, current_row + rows))
-	    break;
-
-	  current_col++;
-	}
-    }
-
-  /* set attach props */
-  gtk_menu_attach (GTK_MENU (menu), item,
-                   current_col, current_col + cols,
-                   current_row, current_row + rows);
-}
-
-static void
-gtk_combo_box_relayout (GtkComboBox *combo_box)
-{
-  GList *list, *j;
-  GtkWidget *menu;
-
-  menu = combo_box->priv->popup_widget;
-
-  /* do nothing unless we are in menu style and realized */
-  if (combo_box->priv->tree_view || !GTK_IS_MENU_SHELL (menu))
-    return;
-
-  /* get rid of all children */
-  list = gtk_container_get_children (GTK_CONTAINER (menu));
-
-  for (j = g_list_last (list); j; j = j->prev)
-    gtk_container_remove (GTK_CONTAINER (menu), j->data);
-
-  g_list_free (list);
-
-  /* and relayout */
-  gtk_combo_box_menu_fill (combo_box);
-}
-
-/* callbacks */
-static gboolean
-gtk_combo_box_menu_button_press (GtkWidget      *widget,
-                                 GdkEventButton *event,
-                                 gpointer        user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-
-  if (! GTK_IS_MENU (combo_box->priv->popup_widget))
-    return FALSE;
-
-  if (event->type == GDK_BUTTON_PRESS && event->button == 1)
-    {
-      combo_box->priv->popup_in_progress = TRUE;
-
-      gtk_menu_set_active (GTK_MENU (combo_box->priv->popup_widget),
-			   combo_box->priv->active_item);
-
-      if (combo_box->priv->wrap_width == 0)
-	{
-          GtkRequisition requisition;
-          gint width;
-
-	  width = GTK_WIDGET (combo_box)->allocation.width;
-          gtk_widget_size_request (combo_box->priv->popup_widget, &requisition);
-
-	  gtk_widget_set_size_request (combo_box->priv->popup_widget,
-                                       MAX (width, requisition.width), -1);
-	}
-
-      gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget),
-                      NULL, NULL,
-#if GTK_CHECK_VERSION(2,2,0)
-                      gtk_combo_box_menu_position,
-#else
-		      NULL,
-#endif
-		      combo_box, event->button, event->time);
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-static void
-gtk_combo_box_menu_item_activate (GtkWidget *item,
-                                  gpointer   user_data)
-{
-  gint index;
-  GtkWidget *menu;
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-
-  menu = combo_box->priv->popup_widget;
-  g_return_if_fail (GTK_IS_MENU (menu));
-
-  index = g_list_index (GTK_MENU_SHELL (menu)->children, item);
-
-  gtk_combo_box_set_active (combo_box, index);
-}
-
-static void
-gtk_combo_box_model_row_inserted (GtkTreeModel     *model,
-				  GtkTreePath      *path,
-				  GtkTreeIter      *iter,
-				  gpointer          user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-  gint index = gtk_tree_path_get_indices (path)[0];
-
-  if (combo_box->priv->active_item >= index)
-    combo_box->priv->active_item++;
-
-  if (!combo_box->priv->tree_view)
-    gtk_combo_box_menu_row_inserted (model, path, iter, user_data);
-}
-
-static void
-gtk_combo_box_model_row_deleted (GtkTreeModel     *model,
-				 GtkTreePath      *path,
-				 gpointer          user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-  gint index = gtk_tree_path_get_indices (path)[0];
-
-  if (!combo_box->priv->tree_view)
-    gtk_combo_box_menu_row_deleted (model, path, user_data);
-
-  if (index == combo_box->priv->active_item)
-    {
-      gint items = gtk_tree_model_iter_n_children (model, NULL);
-
-      if (items == 0)
-	gtk_combo_box_set_active_internal (combo_box, -1);
-      else if (index == items)
-	gtk_combo_box_set_active_internal (combo_box, index - 1);
-      else
-	gtk_combo_box_set_active_internal (combo_box, index);
-    }
-  else if (combo_box->priv->active_item > index)
-    combo_box->priv->active_item--;
-}
-
-static void
-gtk_combo_box_model_rows_reordered (GtkTreeModel    *model,
-				    GtkTreePath     *path,
-				    GtkTreeIter     *iter,
-				    gint            *new_order,
-				    gpointer         user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-  gint items = gtk_tree_model_iter_n_children (model, NULL);
-  gint i;
-
-  for (i = 0; i < items; i++)
-    if (new_order[i] == combo_box->priv->active_item)
-      {
-	combo_box->priv->active_item = i;
-	break;
-      }
-
-  if (!combo_box->priv->tree_view)
-    gtk_combo_box_menu_rows_reordered (model, path, iter, new_order, user_data);
-}
-
-static void
-gtk_combo_box_model_row_changed (GtkTreeModel     *model,
-				 GtkTreePath      *path,
-				 GtkTreeIter      *iter,
-				 gpointer          user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-  gint index = gtk_tree_path_get_indices (path)[0];
-
-  if (index == combo_box->priv->active_item &&
-      combo_box->priv->cell_view)
-    gtk_widget_queue_resize (GTK_WIDGET (combo_box->priv->cell_view));
-
-  if (combo_box->priv->tree_view)
-    gtk_combo_box_list_row_changed (model, path, iter, user_data);
-  else
-    gtk_combo_box_menu_row_changed (model, path, iter, user_data);
-}
-
-
-static void
-gtk_combo_box_menu_row_inserted (GtkTreeModel *model,
-                                 GtkTreePath  *path,
-                                 GtkTreeIter  *iter,
-                                 gpointer      user_data)
-{
-  GtkWidget *menu;
-  GtkWidget *item;
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-
-  if (!combo_box->priv->popup_widget)
-    return;
-
-  menu = combo_box->priv->popup_widget;
-  g_return_if_fail (GTK_IS_MENU (menu));
-
-  item = gtk_cell_view_menu_item_new_from_model (model, path);
-  g_signal_connect (item, "activate",
-                    G_CALLBACK (gtk_combo_box_menu_item_activate),
-                    combo_box);
-
-  cell_view_sync_cells (combo_box, GTK_CELL_VIEW (GTK_BIN (item)->child));
-
-  gtk_menu_shell_insert (GTK_MENU_SHELL (menu), item,
-                         gtk_tree_path_get_indices (path)[0]);
-  gtk_widget_show (item);
-}
-
-static void
-gtk_combo_box_menu_row_deleted (GtkTreeModel *model,
-                                GtkTreePath  *path,
-                                gpointer      user_data)
-{
-  gint index;
-  GtkWidget *menu;
-  GtkWidget *item;
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-
-  if (!combo_box->priv->popup_widget)
-    return;
-
-  index = gtk_tree_path_get_indices (path)[0];
-
-  menu = combo_box->priv->popup_widget;
-  g_return_if_fail (GTK_IS_MENU (menu));
-
-  item = g_list_nth_data (GTK_MENU_SHELL (menu)->children, index);
-  g_return_if_fail (GTK_IS_MENU_ITEM (item));
-
-  gtk_container_remove (GTK_CONTAINER (menu), item);
-}
-
-static void
-gtk_combo_box_menu_rows_reordered  (GtkTreeModel     *model,
-				    GtkTreePath      *path,
-				    GtkTreeIter      *iter,
-				    gint             *new_order,
-				    gpointer          user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-
-  gtk_combo_box_relayout (combo_box);
-}
-
-static void
-gtk_combo_box_menu_row_changed (GtkTreeModel *model,
-                                GtkTreePath  *path,
-                                GtkTreeIter  *iter,
-                                gpointer      user_data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-  gint width;
-
-  if (!combo_box->priv->popup_widget)
-    return;
-
-  if (combo_box->priv->wrap_width)
-    gtk_combo_box_relayout_item (combo_box,
-                                 gtk_tree_path_get_indices (path)[0]);
-
-  width = gtk_combo_box_calc_requested_width (combo_box, path);
-
-  if (width > combo_box->priv->width)
-    {
-      if (combo_box->priv->cell_view)
-	{
-	  gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1);
-	  gtk_widget_queue_resize (combo_box->priv->cell_view);
-	}
-      combo_box->priv->width = width;
-    }
-}
-
-/*
- * list style
- */
-
-static void
-gtk_combo_box_list_setup (GtkComboBox *combo_box)
-{
-  GSList *i;
-  GtkTreeSelection *sel;
-
-  combo_box->priv->button = gtk_toggle_button_new ();
-  gtk_widget_set_parent (combo_box->priv->button,
-                         GTK_BIN (combo_box)->child->parent);
-  g_signal_connect (combo_box->priv->button, "button_press_event",
-                    G_CALLBACK (gtk_combo_box_list_button_pressed), combo_box);
-  g_signal_connect (combo_box->priv->button, "toggled",
-                    G_CALLBACK (gtk_combo_box_button_toggled), combo_box);
-  g_signal_connect_after (combo_box, "key_press_event",
-			  G_CALLBACK (gtk_combo_box_key_press), combo_box);
-
-  combo_box->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
-  gtk_container_add (GTK_CONTAINER (combo_box->priv->button),
-                     combo_box->priv->arrow);
-  combo_box->priv->separator = NULL;
-  gtk_widget_show_all (combo_box->priv->button);
-
-  if (combo_box->priv->cell_view)
-    {
-      combo_box->priv->cell_view_frame = gtk_frame_new (NULL);
-      gtk_widget_set_parent (combo_box->priv->cell_view_frame,
-                             GTK_BIN (combo_box)->child->parent);
-      gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->cell_view_frame),
-                                 GTK_SHADOW_IN);
-
-      gtk_cell_view_set_background_color (GTK_CELL_VIEW (combo_box->priv->cell_view),
-					  &GTK_WIDGET (combo_box)->style->base[GTK_WIDGET_STATE (combo_box)]);
-
-      combo_box->priv->box = gtk_event_box_new ();
-      /*
-      gtk_event_box_set_visible_window (GTK_EVENT_BOX (combo_box->priv->box),
-					FALSE);
-      */
-
-      gtk_container_add (GTK_CONTAINER (combo_box->priv->cell_view_frame),
-			 combo_box->priv->box);
-
-      gtk_widget_show_all (combo_box->priv->cell_view_frame);
-
-      g_signal_connect (combo_box->priv->box, "button_press_event",
-			G_CALLBACK (gtk_combo_box_list_button_pressed),
-			combo_box);
-    }
-
-  combo_box->priv->tree_view = gtk_tree_view_new ();
-  sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (combo_box->priv->tree_view));
-  gtk_tree_selection_set_mode (sel, GTK_SELECTION_BROWSE);
-  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (combo_box->priv->tree_view),
-                                     FALSE);
-  /*
-  _gtk_tree_view_set_hover_selection (GTK_TREE_VIEW (combo_box->priv->tree_view),
-				      TRUE);
-  */
-  if (combo_box->priv->model)
-    gtk_tree_view_set_model (GTK_TREE_VIEW (combo_box->priv->tree_view),
-			     combo_box->priv->model);
-
-  g_signal_connect (combo_box->priv->tree_view, "button_press_event",
-                    G_CALLBACK (gtk_combo_box_list_button_pressed),
-                    combo_box);
-  g_signal_connect (combo_box->priv->tree_view, "button_release_event",
-                    G_CALLBACK (gtk_combo_box_list_button_released),
-                    combo_box);
-  g_signal_connect (combo_box->priv->tree_view, "key_press_event",
-                    G_CALLBACK (gtk_combo_box_list_key_press),
-                    combo_box);
-
-  combo_box->priv->column = gtk_tree_view_column_new ();
-  gtk_tree_view_append_column (GTK_TREE_VIEW (combo_box->priv->tree_view),
-                               combo_box->priv->column);
-
-  /* sync up */
-  for (i = combo_box->priv->cells; i; i = i->next)
-    {
-      GSList *j;
-      ComboCellInfo *info = (ComboCellInfo *)i->data;
-
-      if (info->pack == GTK_PACK_START)
-        gtk_tree_view_column_pack_start (combo_box->priv->column,
-                                         info->cell, info->expand);
-      else if (info->pack == GTK_PACK_END)
-        gtk_tree_view_column_pack_end (combo_box->priv->column,
-                                       info->cell, info->expand);
-
-      for (j = info->attributes; j; j = j->next->next)
-        {
-          gtk_tree_view_column_add_attribute (combo_box->priv->column,
-                                              info->cell,
-                                              j->data,
-                                              GPOINTER_TO_INT (j->next->data));
-        }
-    }
-
-  if (combo_box->priv->active_item != -1)
-    {
-      GtkTreePath *path;
-
-#if GTK_CHECK_VERSION(2,2,0)
-      path = gtk_tree_path_new_from_indices (combo_box->priv->active_item, -1);
-#else
-      char buf[32];
-      g_snprintf(buf, sizeof(buf), "%d", combo_box->priv->active_item);
-      path = gtk_tree_path_new_from_string(buf);
-#endif
-      if (path)
-        {
-          gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view),
-                                    path, NULL, FALSE);
-          gtk_tree_path_free (path);
-        }
-    }
-
-  /* set sample/popup widgets */
-  gtk_combo_box_set_popup_widget (combo_box, combo_box->priv->tree_view);
-
-  gtk_widget_show (combo_box->priv->tree_view);
-}
-
-static void
-gtk_combo_box_list_destroy (GtkComboBox *combo_box)
-{
-  /* disconnect signals */
-  g_signal_handlers_disconnect_matched (combo_box->priv->tree_view,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL, NULL, combo_box);
-  g_signal_handlers_disconnect_matched (combo_box->priv->button,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
-                                        gtk_combo_box_list_button_pressed,
-                                        NULL);
-  if (combo_box->priv->box)
-    g_signal_handlers_disconnect_matched (combo_box->priv->box,
-					  G_SIGNAL_MATCH_DATA,
-					  0, 0, NULL,
-					  gtk_combo_box_list_button_pressed,
-					  NULL);
-
-  /* destroy things (unparent will kill the latest ref from us)
-   * last unref on button will destroy the arrow
-   */
-  gtk_widget_unparent (combo_box->priv->button);
-  combo_box->priv->button = NULL;
-  combo_box->priv->arrow = NULL;
-
-  if (combo_box->priv->cell_view)
-    {
-      g_object_set (G_OBJECT (combo_box->priv->cell_view),
-                    "background_set", FALSE,
-                    NULL);
-    }
-
-  if (combo_box->priv->cell_view_frame)
-    {
-      gtk_widget_unparent (combo_box->priv->cell_view_frame);
-      combo_box->priv->cell_view_frame = NULL;
-      combo_box->priv->box = NULL;
-    }
-
-  gtk_widget_destroy (combo_box->priv->tree_view);
-
-  combo_box->priv->tree_view = NULL;
-  combo_box->priv->popup_widget = NULL;
-}
-
-/* callbacks */
-static void
-gtk_combo_box_list_remove_grabs (GtkComboBox *combo_box)
-{
-  if (combo_box->priv->tree_view &&
-      GTK_WIDGET_HAS_GRAB (combo_box->priv->tree_view))
-    {
-      gtk_grab_remove (combo_box->priv->tree_view);
-    }
-
-  if (combo_box->priv->popup_window &&
-      GTK_WIDGET_HAS_GRAB (combo_box->priv->popup_window))
-    {
-      gtk_grab_remove (combo_box->priv->popup_window);
-      gdk_keyboard_ungrab (GDK_CURRENT_TIME);
-      gdk_pointer_ungrab (GDK_CURRENT_TIME);
-    }
-}
-
-static gboolean
-gtk_combo_box_list_button_pressed (GtkWidget      *widget,
-                                   GdkEventButton *event,
-                                   gpointer        data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (data);
-
-  GtkWidget *ewidget = gtk_get_event_widget ((GdkEvent *)event);
-
-  if (ewidget == combo_box->priv->tree_view)
-    return TRUE;
-
-  if ((ewidget != combo_box->priv->button && ewidget != combo_box->priv->box) ||
-      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (combo_box->priv->button)))
-    return FALSE;
-
-  gtk_combo_box_popup (combo_box);
-
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo_box->priv->button),
-                                TRUE);
-
-  combo_box->priv->popup_in_progress = TRUE;
-
-  return TRUE;
-}
-
-static gboolean
-gtk_combo_box_list_button_released (GtkWidget      *widget,
-                                    GdkEventButton *event,
-                                    gpointer        data)
-{
-  gboolean ret;
-  GtkTreePath *path = NULL;
-
-  GtkComboBox *combo_box = GTK_COMBO_BOX (data);
-
-  gboolean popup_in_progress = FALSE;
-
-  GtkWidget *ewidget = gtk_get_event_widget ((GdkEvent *)event);
-
-  if (combo_box->priv->popup_in_progress)
-    {
-      popup_in_progress = TRUE;
-      combo_box->priv->popup_in_progress = FALSE;
-    }
-
-  if (ewidget != combo_box->priv->tree_view)
-    {
-      if (ewidget == combo_box->priv->button &&
-          !popup_in_progress &&
-          gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (combo_box->priv->button)))
-        {
-          gtk_combo_box_popdown (combo_box);
-          return TRUE;
-        }
-
-      /* released outside treeview */
-      if (ewidget != combo_box->priv->button)
-        {
-          gtk_combo_box_popdown (combo_box);
-
-          return TRUE;
-        }
-
-      return FALSE;
-    }
-
-  /* select something cool */
-  ret = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
-                                       event->x, event->y,
-                                       &path,
-                                       NULL, NULL, NULL);
-
-  if (!ret)
-    return TRUE; /* clicked outside window? */
-
-  gtk_combo_box_set_active (combo_box, gtk_tree_path_get_indices (path)[0]);
-  gtk_combo_box_popdown (combo_box);
-
-  gtk_tree_path_free (path);
-
-  return TRUE;
-}
-
-static gboolean
-gtk_combo_box_key_press (GtkWidget   *widget,
-			 GdkEventKey *event,
-			 gpointer     data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (data);
-  guint state = event->state & gtk_accelerator_get_default_mod_mask ();
-  gint items = 0;
-  gint index = gtk_combo_box_get_active (combo_box);
-  gint new_index;
-
-  if (combo_box->priv->model)
-    items = gtk_tree_model_iter_n_children (combo_box->priv->model, NULL);
-
-  if ((event->keyval == GDK_Down || event->keyval == GDK_KP_Down) &&
-      state == GDK_MOD1_MASK)
-    {
-      gtk_combo_box_popup (combo_box);
-
-      return TRUE;
-    }
-
-  switch (event->keyval)
-    {
-    case GDK_Down:
-    case GDK_KP_Down:
-      new_index = index + 1;
-      break;
-    case GDK_Up:
-    case GDK_KP_Up:
-      new_index = index - 1;
-      break;
-    case GDK_Page_Up:
-    case GDK_KP_Page_Up:
-    case GDK_Home:
-    case GDK_KP_Home:
-      new_index = 0;
-      break;
-    case GDK_Page_Down:
-    case GDK_KP_Page_Down:
-    case GDK_End:
-    case GDK_KP_End:
-      new_index = items - 1;
-      break;
-    default:
-      return FALSE;
-    }
-
-  if (items > 0)
-    gtk_combo_box_set_active (combo_box, CLAMP (new_index, 0, items - 1));
-
-  return TRUE;
-}
-
-static gboolean
-gtk_combo_box_menu_key_press (GtkWidget   *widget,
-			      GdkEventKey *event,
-			      gpointer     data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (data);
-  guint state = event->state & gtk_accelerator_get_default_mod_mask ();
-
-  if ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) &&
-      state == GDK_MOD1_MASK)
-    {
-      gtk_combo_box_popdown (combo_box);
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-static gboolean
-gtk_combo_box_list_key_press (GtkWidget   *widget,
-                              GdkEventKey *event,
-                              gpointer     data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (data);
-  guint state = event->state & gtk_accelerator_get_default_mod_mask ();
-
-  if (event->keyval == GDK_Escape ||
-      ((event->keyval == GDK_Up || event->keyval == GDK_KP_Up) &&
-       state == GDK_MOD1_MASK))
-    {
-      /* reset active item -- this is incredibly lame and ugly */
-      gtk_combo_box_set_active (combo_box,
-				gtk_combo_box_get_active (combo_box));
-
-      gtk_combo_box_popdown (combo_box);
-
-      return TRUE;
-    }
-
-  if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter ||
-      event->keyval == GDK_space || event->keyval == GDK_KP_Space)
-  {
-    gboolean ret = FALSE;
-    GtkTreeIter iter;
-    GtkTreeModel *model = NULL;
-
-    if (combo_box->priv->model)
-      {
-	GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (combo_box->priv->tree_view));
-
-	ret = gtk_tree_selection_get_selected (sel, &model, &iter);
-      }
-    if (ret)
-      {
-	GtkTreePath *path;
-
-	path = gtk_tree_model_get_path (model, &iter);
-	if (path)
-	  {
-	    gtk_combo_box_set_active (combo_box, gtk_tree_path_get_indices (path)[0]);
-	    gtk_tree_path_free (path);
-	  }
-      }
-
-    gtk_combo_box_popdown (combo_box);
-
-    return TRUE;
-  }
-
-  return FALSE;
-}
-
-static void
-gtk_combo_box_list_row_changed (GtkTreeModel *model,
-                                GtkTreePath  *path,
-                                GtkTreeIter  *iter,
-                                gpointer      data)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (data);
-  gint width;
-
-  width = gtk_combo_box_calc_requested_width (combo_box, path);
-
-  if (width > combo_box->priv->width)
-    {
-      if (combo_box->priv->cell_view)
-	{
-	  gtk_widget_set_size_request (combo_box->priv->cell_view, width, -1);
-	  gtk_widget_queue_resize (combo_box->priv->cell_view);
-	}
-      combo_box->priv->width = width;
-    }
-}
-
-/*
- * GtkCellLayout implementation
- */
-static void
-gtk_combo_box_cell_layout_pack_start (GtkCellLayout   *layout,
-                                      GtkCellRenderer *cell,
-                                      gboolean         expand)
-{
-  ComboCellInfo *info;
-  GtkComboBox *combo_box;
-  GtkWidget *menu;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  combo_box = GTK_COMBO_BOX (layout);
-
-  g_object_ref (G_OBJECT (cell));
-  gtk_object_sink (GTK_OBJECT (cell));
-
-  info = g_new0 (ComboCellInfo, 1);
-  info->cell = cell;
-  info->expand = expand;
-  info->pack = GTK_PACK_START;
-
-  combo_box->priv->cells = g_slist_append (combo_box->priv->cells, info);
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
-                                cell, expand);
-
-  if (combo_box->priv->column)
-    gtk_tree_view_column_pack_start (combo_box->priv->column, cell, expand);
-
-  menu = combo_box->priv->popup_widget;
-  if (GTK_IS_MENU (menu))
-    {
-      GList *i, *list;
-
-      list = gtk_container_get_children (GTK_CONTAINER (menu));
-      for (i = list; i; i = i->next)
-        {
-          GtkCellView *view;
-
-          if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
-            view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
-          else
-            view = GTK_CELL_VIEW (i->data);
-
-          gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (view), cell, expand);
-        }
-      g_list_free (list);
-    }
-}
-
-static void
-gtk_combo_box_cell_layout_pack_end (GtkCellLayout   *layout,
-                                    GtkCellRenderer *cell,
-                                    gboolean         expand)
-{
-  ComboCellInfo *info;
-  GtkComboBox *combo_box;
-  GtkWidget *menu;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  combo_box = GTK_COMBO_BOX (layout);
-
-  g_object_ref (G_OBJECT (cell));
-  gtk_object_sink (GTK_OBJECT (cell));
-
-  info = g_new0 (ComboCellInfo, 1);
-  info->cell = cell;
-  info->expand = expand;
-  info->pack = GTK_PACK_END;
-
-  combo_box->priv->cells = g_slist_append (combo_box->priv->cells, info);
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
-                              cell, expand);
-
-  if (combo_box->priv->column)
-    gtk_tree_view_column_pack_end (combo_box->priv->column, cell, expand);
-
-  menu = combo_box->priv->popup_widget;
-  if (GTK_IS_MENU (menu))
-    {
-      GList *i, *list;
-
-      list = gtk_container_get_children (GTK_CONTAINER (menu));
-      for (i = list; i; i = i->next)
-        {
-          GtkCellView *view;
-
-          if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
-            view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
-          else
-            view = GTK_CELL_VIEW (i->data);
-
-          gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (view), cell, expand);
-        }
-      g_list_free (list);
-    }
-}
-
-static void
-gtk_combo_box_cell_layout_clear (GtkCellLayout *layout)
-{
-  GtkWidget *menu;
-  GtkComboBox *combo_box;
-  GSList *i;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (layout));
-
-  combo_box = GTK_COMBO_BOX (layout);
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_layout_clear (GTK_CELL_LAYOUT (combo_box->priv->cell_view));
-
-  if (combo_box->priv->column)
-    gtk_tree_view_column_clear (combo_box->priv->column);
-
-  for (i = combo_box->priv->cells; i; i = i->next)
-    {
-     ComboCellInfo *info = (ComboCellInfo *)i->data;
-
-      gtk_combo_box_cell_layout_clear_attributes (layout, info->cell);
-      g_object_unref (G_OBJECT (info->cell));
-      g_free (info);
-      i->data = NULL;
-    }
-  g_slist_free (combo_box->priv->cells);
-  combo_box->priv->cells = NULL;
-
-  menu = combo_box->priv->popup_widget;
-  if (GTK_IS_MENU (menu))
-    {
-      GList *i, *list;
-
-      list = gtk_container_get_children (GTK_CONTAINER (menu));
-      for (i = list; i; i = i->next)
-        {
-          GtkCellView *view;
-
-          if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
-            view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
-          else
-            view = GTK_CELL_VIEW (i->data);
-
-          gtk_cell_layout_clear (GTK_CELL_LAYOUT (view));
-        }
-      g_list_free (list);
-    }
-}
-
-static void
-gtk_combo_box_cell_layout_add_attribute (GtkCellLayout   *layout,
-                                         GtkCellRenderer *cell,
-                                         const gchar     *attribute,
-                                         gint             column)
-{
-  ComboCellInfo *info;
-  GtkComboBox *combo_box;
-  GtkWidget *menu;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  combo_box = GTK_COMBO_BOX (layout);
-
-  info = gtk_combo_box_get_cell_info (combo_box, cell);
-
-  info->attributes = g_slist_prepend (info->attributes,
-                                      GINT_TO_POINTER (column));
-  info->attributes = g_slist_prepend (info->attributes,
-                                      g_strdup (attribute));
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
-                                   cell, attribute, column);
-
-  if (combo_box->priv->column)
-    gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box->priv->column),
-                                   cell, attribute, column);
-
-  menu = combo_box->priv->popup_widget;
-  if (GTK_IS_MENU (menu))
-    {
-      GList *i, *list;
-
-      list = gtk_container_get_children (GTK_CONTAINER (menu));
-      for (i = list; i; i = i->next)
-        {
-          GtkCellView *view;
-
-          if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
-            view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
-          else
-            view = GTK_CELL_VIEW (i->data);
-
-          gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (view), cell,
-                                         attribute, column);
-        }
-      g_list_free (list);
-    }
-
-  gtk_widget_queue_resize (GTK_WIDGET (combo_box));
-}
-
-static void
-gtk_combo_box_cell_layout_set_cell_data_func (GtkCellLayout         *layout,
-                                              GtkCellRenderer       *cell,
-                                              GtkCellLayoutDataFunc  func,
-                                              gpointer               func_data,
-                                              GDestroyNotify         destroy)
-{
-  ComboCellInfo *info;
-  GtkComboBox *combo_box;
-  GtkWidget *menu;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (layout));
-
-  combo_box = GTK_COMBO_BOX (layout);
-
-  info = gtk_combo_box_get_cell_info (combo_box, cell);
-  g_return_if_fail (info != NULL);
-
-  if (info->destroy)
-    {
-      GDestroyNotify d = info->destroy;
-
-      info->destroy = NULL;
-      d (info->func_data);
-    }
-
-  info->func = func;
-  info->func_data = func_data;
-  info->destroy = destroy;
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo_box->priv->cell_view), cell, func, func_data, NULL);
-
-  if (combo_box->priv->column)
-    gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo_box->priv->column), cell, func, func_data, NULL);
-
-  menu = combo_box->priv->popup_widget;
-  if (GTK_IS_MENU (menu))
-    {
-      GList *i, *list;
-
-      list = gtk_container_get_children (GTK_CONTAINER (menu));
-      for (i = list; i; i = i->next)
-        {
-          GtkCellView *view;
-
-          if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
-            view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
-          else
-            view = GTK_CELL_VIEW (i->data);
-
-          gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (view), cell,
-                                              func, func_data, NULL);
-        }
-      g_list_free (list);
-    }
-
-  gtk_widget_queue_resize (GTK_WIDGET (combo_box));
-}
-
-static void
-gtk_combo_box_cell_layout_clear_attributes (GtkCellLayout   *layout,
-                                            GtkCellRenderer *cell)
-{
-  ComboCellInfo *info;
-  GtkComboBox *combo_box;
-  GtkWidget *menu;
-  GSList *list;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  combo_box = GTK_COMBO_BOX (layout);
-
-  info = gtk_combo_box_get_cell_info (combo_box, cell);
-  if (info)
-    {
-      list = info->attributes;
-      while (list && list->next)
-	{
-	  g_free (list->data);
-	  list = list->next->next;
-	}
-      g_slist_free (info->attributes);
-      info->attributes = NULL;
-    }
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (combo_box->priv->cell_view), cell);
-
-  if (combo_box->priv->column)
-    gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (combo_box->priv->column), cell);
-
-  menu = combo_box->priv->popup_widget;
-  if (GTK_IS_MENU (menu))
-    {
-      GList *i, *list;
-
-      list = gtk_container_get_children (GTK_CONTAINER (menu));
-      for (i = list; i; i = i->next)
-        {
-          GtkCellView *view;
-
-          if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
-            view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
-          else
-            view = GTK_CELL_VIEW (i->data);
-
-          gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (view), cell);
-        }
-      g_list_free (list);
-    }
-
-  gtk_widget_queue_resize (GTK_WIDGET (combo_box));
-}
-
-static void
-gtk_combo_box_cell_layout_reorder (GtkCellLayout   *layout,
-                                   GtkCellRenderer *cell,
-                                   gint             position)
-{
-  ComboCellInfo *info;
-  GtkComboBox *combo_box;
-  GtkWidget *menu;
-  GSList *link;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (layout));
-  g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
-
-  combo_box = GTK_COMBO_BOX (layout);
-
-  info = gtk_combo_box_get_cell_info (combo_box, cell);
-
-  g_return_if_fail (info != NULL);
-  g_return_if_fail (position >= 0);
-
-  link = g_slist_find (combo_box->priv->cells, info);
-
-  g_return_if_fail (link != NULL);
-
-  combo_box->priv->cells = g_slist_delete_link (combo_box->priv->cells, link);
-  combo_box->priv->cells = g_slist_insert (combo_box->priv->cells, info,
-                                           position);
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_layout_reorder (GTK_CELL_LAYOUT (combo_box->priv->cell_view),
-                             cell, position);
-
-  if (combo_box->priv->column)
-    gtk_cell_layout_reorder (GTK_CELL_LAYOUT (combo_box->priv->column),
-                             cell, position);
-
-  menu = combo_box->priv->popup_widget;
-  if (GTK_IS_MENU (menu))
-    {
-      GList *i, *list;
-
-      list = gtk_container_get_children (GTK_CONTAINER (menu));
-      for (i = list; i; i = i->next)
-        {
-          GtkCellView *view;
-
-          if (GTK_IS_CELL_VIEW_MENU_ITEM (i->data))
-            view = GTK_CELL_VIEW (GTK_BIN (i->data)->child);
-          else
-            view = GTK_CELL_VIEW (i->data);
-
-          gtk_cell_layout_reorder (GTK_CELL_LAYOUT (view), cell, position);
-        }
-      g_list_free (list);
-    }
-
-  gtk_widget_queue_draw (GTK_WIDGET (combo_box));
-}
-
-/*
- * public API
- */
-
-/**
- * gtk_combo_box_new:
- *
- * Creates a new empty #GtkComboBox.
- *
- * Return value: A new #GtkComboBox.
- *
- * Since: 2.4
- */
-GtkWidget *
-gtk_combo_box_new (void)
-{
-  return GTK_WIDGET (g_object_new (GTK_TYPE_COMBO_BOX, NULL));
-}
-
-/**
- * gtk_combo_box_new_with_model:
- * @model: A #GtkTreeModel.
- *
- * Creates a new #GtkComboBox with the model initialized to @model.
- *
- * Return value: A new #GtkComboBox.
- *
- * Since: 2.4
- */
-GtkWidget *
-gtk_combo_box_new_with_model (GtkTreeModel *model)
-{
-  GtkComboBox *combo_box;
-
-  g_return_val_if_fail (GTK_IS_TREE_MODEL (model), NULL);
-
-  combo_box = GTK_COMBO_BOX (g_object_new (GTK_TYPE_COMBO_BOX,
-                                           "model", model,
-                                           NULL));
-
-  return GTK_WIDGET (combo_box);
-}
-
-/**
- * gtk_combo_box_set_wrap_width:
- * @combo_box: A #GtkComboBox.
- * @width: Preferred number of columns.
- *
- * Sets the wrap width of @combo_box to be @width. The wrap width is basically
- * the preferred number of columns when you want to the popup to be layed out
- * in a table.
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_set_wrap_width (GtkComboBox *combo_box,
-                              gint         width)
-{
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-  g_return_if_fail (width >= 0);
-
-  if (width != combo_box->priv->wrap_width)
-    {
-      combo_box->priv->wrap_width = width;
-
-      gtk_combo_box_check_appearance (combo_box);
-      gtk_combo_box_relayout (combo_box);
-
-      g_object_notify (G_OBJECT (combo_box), "wrap_width");
-    }
-}
-
-/**
- * gtk_combo_box_set_row_span_column:
- * @combo_box: A #GtkComboBox.
- * @row_span: A column in the model passed during construction.
- *
- * Sets the column with row span information for @combo_box to be @row_span.
- * The row span column contains integers which indicate how many rows
- * an item should span.
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_set_row_span_column (GtkComboBox *combo_box,
-                                   gint         row_span)
-{
-  gint col;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  col = gtk_tree_model_get_n_columns (combo_box->priv->model);
-  g_return_if_fail (row_span >= 0 && row_span < col);
-
-  if (row_span != combo_box->priv->row_column)
-    {
-      combo_box->priv->row_column = row_span;
-
-      gtk_combo_box_relayout (combo_box);
-
-      g_object_notify (G_OBJECT (combo_box), "row_span_column");
-    }
-}
-
-/**
- * gtk_combo_box_set_column_span_column:
- * @combo_box: A #GtkComboBox.
- * @column_span: A column in the model passed during construction.
- *
- * Sets the column with column span information for @combo_box to be
- * @column_span. The column span column contains integers which indicate
- * how many columns an item should span.
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_set_column_span_column (GtkComboBox *combo_box,
-                                      gint         column_span)
-{
-  gint col;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  col = gtk_tree_model_get_n_columns (combo_box->priv->model);
-  g_return_if_fail (column_span >= 0 && column_span < col);
-
-  if (column_span != combo_box->priv->col_column)
-    {
-      combo_box->priv->col_column = column_span;
-
-      gtk_combo_box_relayout (combo_box);
-
-      g_object_notify (G_OBJECT (combo_box), "column_span_column");
-    }
-}
-
-/**
- * gtk_combo_box_get_active:
- * @combo_box: A #GtkComboBox.
- *
- * Returns the index of the currently active item, or -1 if there's no
- * active item.
- *
- * Return value: An integer which is the index of the currently active item, or
- * -1 if there's no active item.
- *
- * Since: 2.4
- */
-gint
-gtk_combo_box_get_active (GtkComboBox *combo_box)
-{
-  g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), 0);
-
-  return combo_box->priv->active_item;
-}
-
-/**
- * gtk_combo_box_set_active:
- * @combo_box: A #GtkComboBox.
- * @index_: An index in the model passed during construction, or -1 to have
- * no active item.
- *
- * Sets the active item of @combo_box to be the item at @index.
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_set_active (GtkComboBox *combo_box,
-                          gint         index_)
-{
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-  /* -1 means "no item selected" */
-  g_return_if_fail (index_ >= -1);
-
-  if (combo_box->priv->active_item == index_)
-    return;
-
-  gtk_combo_box_set_active_internal (combo_box, index_);
-}
-
-static void
-gtk_combo_box_set_active_internal (GtkComboBox *combo_box,
-				   gint         index)
-{
-  GtkTreePath *path;
-
-  combo_box->priv->active_item = index;
-
-  if (index == -1)
-    {
-      if (combo_box->priv->tree_view)
-        gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (combo_box->priv->tree_view)));
-      else
-        {
-          GtkMenu *menu = GTK_MENU (combo_box->priv->popup_widget);
-
-          if (GTK_IS_MENU (menu))
-            gtk_menu_set_active (menu, -1);
-        }
-
-      if (combo_box->priv->cell_view)
-        gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), NULL);
-    }
-  else
-    {
-#if GTK_CHECK_VERSION(2,2,0)
-      path = gtk_tree_path_new_from_indices (index, -1);
-#else
-      char buf[32];
-      g_snprintf(buf, sizeof(buf), "%d", index);
-      path = gtk_tree_path_new_from_string(buf);
-#endif
-
-      if (combo_box->priv->tree_view)
-	gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view), path, NULL, FALSE);
-      else
-        {
-          GtkMenu *menu = GTK_MENU (combo_box->priv->popup_widget);
-
-          if (GTK_IS_MENU (menu))
-            gtk_menu_set_active (GTK_MENU (menu), index);
-        }
-
-      if (combo_box->priv->cell_view)
-	gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), path);
-
-      gtk_tree_path_free (path);
-    }
-
-  g_signal_emit_by_name (combo_box, "changed", NULL, NULL);
-}
-
-
-/**
- * gtk_combo_box_get_active_iter:
- * @combo_box: A #GtkComboBox
- * @iter: The uninitialized #GtkTreeIter.
- *
- * Sets @iter to point to the current active item, if it exists.
- *
- * Return value: %TRUE, if @iter was set
- *
- * Since: 2.4
- **/
-gboolean
-gtk_combo_box_get_active_iter (GtkComboBox     *combo_box,
-                               GtkTreeIter     *iter)
-{
-  GtkTreePath *path;
-  gint active;
-  gboolean retval;
-#if !GTK_CHECK_VERSION(2,2,0)
-  char buf[32];
-#endif
-
-  g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), FALSE);
-
-  active = gtk_combo_box_get_active (combo_box);
-  if (active < 0)
-    return FALSE;
-
-#if GTK_CHECK_VERSION(2,2,0)
-  path = gtk_tree_path_new_from_indices (active, -1);
-#else
-  g_snprintf(buf, sizeof(buf), "%d", active);
-  path = gtk_tree_path_new_from_string(buf);
-#endif
-  retval = gtk_tree_model_get_iter (gtk_combo_box_get_model (combo_box),
-                                    iter, path);
-  gtk_tree_path_free (path);
-
-  return retval;
-}
-
-/**
- * gtk_combo_box_set_active_iter:
- * @combo_box: A #GtkComboBox
- * @iter: The #GtkTreeIter.
- *
- * Sets the current active item to be the one referenced by @iter.
- * @iter must correspond to a path of depth one.
- *
- * Since: 2.4
- **/
-void
-gtk_combo_box_set_active_iter (GtkComboBox     *combo_box,
-                               GtkTreeIter     *iter)
-{
-  GtkTreePath *path;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  path = gtk_tree_model_get_path (gtk_combo_box_get_model (combo_box), iter);
-  g_return_if_fail (path != NULL);
-  g_return_if_fail (gtk_tree_path_get_depth (path) == 1);
-
-  gtk_combo_box_set_active (combo_box, gtk_tree_path_get_indices (path)[0]);
-  gtk_tree_path_free (path);
-}
-
-/**
- * gtk_combo_box_set_model:
- * @combo_box: A #GtkComboBox.
- * @model: A #GtkTreeModel.
- *
- * Sets the model used by @combo_box to be @model. Will unset a previously set
- * model (if applicable). If @model is %NULL, then it will unset the model.
- *
- * Note that this function does not clear the cell renderers, you have to
- * call gtk_combo_box_cell_layout_clear() yourself if you need to set up
- * different cell renderers for the new model.
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_set_model (GtkComboBox  *combo_box,
-                         GtkTreeModel *model)
-{
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  if (!model)
-    {
-      gtk_combo_box_unset_model (combo_box);
-      return;
-    }
-
-  g_return_if_fail (GTK_IS_TREE_MODEL (model));
-
-  if (model == combo_box->priv->model)
-    return;
-
-  if (combo_box->priv->model)
-    gtk_combo_box_unset_model (combo_box);
-
-  combo_box->priv->model = model;
-  g_object_ref (G_OBJECT (combo_box->priv->model));
-
-  combo_box->priv->inserted_id =
-    g_signal_connect (combo_box->priv->model, "row_inserted",
-		      G_CALLBACK (gtk_combo_box_model_row_inserted),
-		      combo_box);
-  combo_box->priv->deleted_id =
-    g_signal_connect (combo_box->priv->model, "row_deleted",
-		      G_CALLBACK (gtk_combo_box_model_row_deleted),
-		      combo_box);
-  combo_box->priv->reordered_id =
-    g_signal_connect (combo_box->priv->model, "rows_reordered",
-		      G_CALLBACK (gtk_combo_box_model_rows_reordered),
-		      combo_box);
-  combo_box->priv->changed_id =
-    g_signal_connect (combo_box->priv->model, "row_changed",
-		      G_CALLBACK (gtk_combo_box_model_row_changed),
-		      combo_box);
-
-  if (combo_box->priv->tree_view)
-    {
-      /* list mode */
-      gtk_tree_view_set_model (GTK_TREE_VIEW (combo_box->priv->tree_view),
-                               combo_box->priv->model);
-    }
-  else
-    {
-      /* menu mode */
-      if (combo_box->priv->popup_widget)
-	gtk_combo_box_menu_fill (combo_box);
-
-    }
-
-  if (combo_box->priv->cell_view)
-    gtk_cell_view_set_model (GTK_CELL_VIEW (combo_box->priv->cell_view),
-                             combo_box->priv->model);
-}
-
-/**
- * gtk_combo_box_get_model
- * @combo_box: A #GtkComboBox.
- *
- * Returns the #GtkTreeModel which is acting as data source for @combo_box.
- *
- * Return value: A #GtkTreeModel which was passed during construction.
- *
- * Since: 2.4
- */
-GtkTreeModel *
-gtk_combo_box_get_model (GtkComboBox *combo_box)
-{
-  g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), NULL);
-
-  return combo_box->priv->model;
-}
-
-
-/* convenience API for simple text combos */
-
-/**
- * gtk_combo_box_new_text:
- *
- * Convenience function which constructs a new text combo box, which is a
- * #GtkComboBox just displaying strings. If you use this function to create
- * a text combo box, you should only manipulate its data source with the
- * following convenience functions: gtk_combo_box_append_text(),
- * gtk_combo_box_insert_text(), gtk_combo_box_prepend_text() and
- * gtk_combo_box_remove_text().
- *
- * Return value: A new text combo box.
- *
- * Since: 2.4
- */
-GtkWidget *
-gtk_combo_box_new_text (void)
-{
-  GtkWidget *combo_box;
-  GtkCellRenderer *cell;
-  GtkListStore *store;
-
-  store = gtk_list_store_new (1, G_TYPE_STRING);
-  combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
-  g_object_unref (store);
-
-  cell = gtk_cell_renderer_text_new ();
-  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE);
-  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell,
-                                  "text", 0,
-                                  NULL);
-
-  return combo_box;
-}
-
-/**
- * gtk_combo_box_append_text:
- * @combo_box: A #GtkComboBox constructed using gtk_combo_box_new_text().
- * @text: A string.
- *
- * Appends @string to the list of strings stored in @combo_box. Note that
- * you can only use this function with combo boxes constructed with
- * gtk_combo_box_new_text().
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_append_text (GtkComboBox *combo_box,
-                           const gchar *text)
-{
-  GtkTreeIter iter;
-  GtkListStore *store;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-  g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
-  g_return_if_fail (text != NULL);
-
-  store = GTK_LIST_STORE (combo_box->priv->model);
-
-  gtk_list_store_append (store, &iter);
-  gtk_list_store_set (store, &iter, 0, text, -1);
-}
-
-/**
- * gtk_combo_box_insert_text:
- * @combo_box: A #GtkComboBox constructed using gtk_combo_box_new_text().
- * @position: An index to insert @text.
- * @text: A string.
- *
- * Inserts @string at @position in the list of strings stored in @combo_box.
- * Note that you can only use this function with combo boxes constructed
- * with gtk_combo_box_new_text().
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_insert_text (GtkComboBox *combo_box,
-                           gint         position,
-                           const gchar *text)
-{
-  GtkTreeIter iter;
-  GtkListStore *store;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-  g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
-  g_return_if_fail (position >= 0);
-  g_return_if_fail (text != NULL);
-
-  store = GTK_LIST_STORE (combo_box->priv->model);
-
-  gtk_list_store_insert (store, &iter, position);
-  gtk_list_store_set (store, &iter, 0, text, -1);
-}
-
-/**
- * gtk_combo_box_prepend_text:
- * @combo_box: A #GtkComboBox constructed with gtk_combo_box_new_text().
- * @text: A string.
- *
- * Prepends @string to the list of strings stored in @combo_box. Note that
- * you can only use this function with combo boxes constructed with
- * gtk_combo_box_new_text().
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_prepend_text (GtkComboBox *combo_box,
-                            const gchar *text)
-{
-  GtkTreeIter iter;
-  GtkListStore *store;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-  g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
-  g_return_if_fail (text != NULL);
-
-  store = GTK_LIST_STORE (combo_box->priv->model);
-
-  gtk_list_store_prepend (store, &iter);
-  gtk_list_store_set (store, &iter, 0, text, -1);
-}
-
-/**
- * gtk_combo_box_remove_text:
- * @combo_box: A #GtkComboBox constructed with gtk_combo_box_new_text().
- * @position: Index of the item to remove.
- *
- * Removes the string at @position from @combo_box. Note that you can only use
- * this function with combo boxes constructed with gtk_combo_box_new_text().
- *
- * Since: 2.4
- */
-void
-gtk_combo_box_remove_text (GtkComboBox *combo_box,
-                           gint         position)
-{
-  GtkTreeIter iter;
-  GtkListStore *store;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-  g_return_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model));
-  g_return_if_fail (position >= 0);
-
-  store = GTK_LIST_STORE (combo_box->priv->model);
-
-  if (gtk_tree_model_iter_nth_child (combo_box->priv->model, &iter,
-                                     NULL, position))
-    gtk_list_store_remove (store, &iter);
-}
-
-static gboolean
-gtk_combo_box_mnemonic_activate (GtkWidget *widget,
-				 gboolean   group_cycling)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
-
-  gtk_widget_grab_focus (combo_box->priv->button);
-
-  return TRUE;
-}
-
-static void
-gtk_combo_box_destroy (GtkObject *object)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (object);
-
-  gtk_combo_box_popdown (combo_box);
-
-  combo_box->priv->destroying = 1;
-
-  GTK_OBJECT_CLASS (parent_class)->destroy (object);
-  combo_box->priv->cell_view = NULL;
-
-  combo_box->priv->destroying = 0;
-}
-
-static void
-gtk_combo_box_finalize (GObject *object)
-{
-  GtkComboBox *combo_box = GTK_COMBO_BOX (object);
-  GSList *i;
-
-  if (GTK_IS_MENU (combo_box->priv->popup_widget))
-    {
-      gtk_combo_box_menu_destroy (combo_box);
-      gtk_menu_detach (GTK_MENU (combo_box->priv->popup_widget));
-      combo_box->priv->popup_widget = NULL;
-    }
-
-  if (GTK_IS_TREE_VIEW (combo_box->priv->tree_view))
-    gtk_combo_box_list_destroy (combo_box);
-
-  if (combo_box->priv->popup_window)
-    gtk_widget_destroy (combo_box->priv->popup_window);
-
-  gtk_combo_box_unset_model (combo_box);
-
-  for (i = combo_box->priv->cells; i; i = i->next)
-    {
-      ComboCellInfo *info = (ComboCellInfo *)i->data;
-      GSList *list = info->attributes;
-
-      if (info->destroy)
-	info->destroy (info->func_data);
-
-      while (list && list->next)
-	{
-	  g_free (list->data);
-	  list = list->next->next;
-	}
-      g_slist_free (info->attributes);
-
-      g_object_unref (G_OBJECT (info->cell));
-      g_free (info);
-    }
-   g_slist_free (combo_box->priv->cells);
-
-   g_free (combo_box->priv);
-
-   G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-/**
- * Code below this point has been pulled in from gtkmenu.c in 2.4.14
- * and is needed to provide gtk_menu_attach()
- */
-
-typedef struct
-{
-  gint left_attach;
-  gint right_attach;
-  gint top_attach;
-  gint bottom_attach;
-  gint effective_left_attach;
-  gint effective_right_attach;
-  gint effective_top_attach;
-  gint effective_bottom_attach;
-} AttachInfo;
-
-#define ATTACH_INFO_KEY "gtk-menu-child-attach-info-key"
-
-static AttachInfo *
-get_attach_info (GtkWidget *child)
-{
-  GObject *object = G_OBJECT (child);
-  AttachInfo *ai = g_object_get_data (object, ATTACH_INFO_KEY);
-
-  if (!ai)
-    {
-      ai = g_new0 (AttachInfo, 1);
-      g_object_set_data_full (object, ATTACH_INFO_KEY, ai, g_free);
-    }
-
-  return ai;
-}
-
-/**
- * gtk_menu_attach:
- * @menu: a #GtkMenu.
- * @child: a #GtkMenuItem.
- * @left_attach: The column number to attach the left side of the item to.
- * @right_attach: The column number to attach the right side of the item to.
- * @top_attach: The row number to attach the top of the item to.
- * @bottom_attach: The row number to attach the bottom of the item to.
- *
- * Adds a new #GtkMenuItem to a (table) menu. The number of 'cells' that
- * an item will occupy is specified by @left_attach, @right_attach,
- * @top_attach and @bottom_attach. These each represent the leftmost,
- * rightmost, uppermost and lower column and row numbers of the table.
- * (Columns and rows are indexed from zero).
- *
- * Note that this function is not related to gtk_menu_detach().
- *
- * Since: 2.4
- **/
-static void
-gtk_menu_attach (GtkMenu   *menu,
-                 GtkWidget *child,
-                 guint      left_attach,
-                 guint      right_attach,
-                 guint      top_attach,
-                 guint      bottom_attach)
-{
-  GtkMenuShell *menu_shell;
-
-  g_return_if_fail (GTK_IS_MENU (menu));
-  g_return_if_fail (GTK_IS_MENU_ITEM (child));
-  g_return_if_fail (child->parent == NULL ||
-		    child->parent == GTK_WIDGET (menu));
-  g_return_if_fail (left_attach < right_attach);
-  g_return_if_fail (top_attach < bottom_attach);
-
-  menu_shell = GTK_MENU_SHELL (menu);
-
-  if (!child->parent)
-    {
-      AttachInfo *ai = get_attach_info (child);
-
-      ai->left_attach = left_attach;
-      ai->right_attach = right_attach;
-      ai->top_attach = top_attach;
-      ai->bottom_attach = bottom_attach;
-
-      menu_shell->children = g_list_append (menu_shell->children, child);
-
-      gtk_widget_set_parent (child, GTK_WIDGET (menu));
-
-      /*
-      menu_queue_resize (menu);
-      */
-    }
-  else
-    {
-      gtk_container_child_set (GTK_CONTAINER (child->parent), child,
-			       "left_attach",   left_attach,
-			       "right_attach",  right_attach,
-			       "top_attach",    top_attach,
-			       "bottom_attach", bottom_attach,
-			       NULL);
-    }
-}
-#endif /* Gtk 2.4 */
-
-gchar *
-gtk_combo_box_get_active_text (GtkComboBox *combo_box)
-{
-  GtkTreeIter iter;
-  gchar *text = NULL;
-
-  /* g_return_val_if_fail (GTK_IS_LIST_STORE (combo_box->priv->model), NULL); */
-
-  if (gtk_combo_box_get_active_iter (combo_box, &iter))
-    gtk_tree_model_get (gtk_combo_box_get_model(combo_box), &iter,
-    			0, &text, -1);
-  return text;
-}
-
-#endif
--- a/pidgin/pidgincombobox.h	Wed Feb 10 20:53:32 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/* gtkcombobox.h
- * Copyright (C) 2002, 2003  Kristian Rietveld <kris@gtk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02111-1301, USA.
- */
-
-#ifndef __PIDGIN_COMBO_BOX_H__
-#define __PIDGIN_COMBO_BOX_H__
-
-#ifndef __GTK_COMBO_BOX_H__
-#define __GTK_COMBO_BOX_H__
-
-#include <gtk/gtkbin.h>
-#include <gtk/gtktreemodel.h>
-#include <gtk/gtktreeview.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_COMBO_BOX             (gtk_combo_box_get_type ())
-#define GTK_COMBO_BOX(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_COMBO_BOX, GtkComboBox))
-#define GTK_COMBO_BOX_CLASS(vtable)    (G_TYPE_CHECK_CLASS_CAST ((vtable), GTK_TYPE_COMBO_BOX, GtkComboBoxClass))
-#define GTK_IS_COMBO_BOX(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_COMBO_BOX))
-#define GTK_IS_COMBO_BOX_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), GTK_TYPE_COMBO_BOX))
-#define GTK_COMBO_BOX_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), GTK_TYPE_COMBO_BOX, GtkComboBoxClass))
-
-typedef struct _GtkComboBox        GtkComboBox;
-typedef struct _GtkComboBoxClass   GtkComboBoxClass;
-typedef struct _GtkComboBoxPrivate GtkComboBoxPrivate;
-
-struct _GtkComboBox
-{
-  GtkBin parent_instance;
-
-  /*< private >*/
-  GtkComboBoxPrivate *priv;
-};
-
-struct _GtkComboBoxClass
-{
-  GtkBinClass parent_class;
-
-  /* signals */
-  void     (* changed)          (GtkComboBox *combo_box);
-
-  /* Padding for future expansion */
-  void (*_gtk_reserved0) (void);
-  void (*_gtk_reserved1) (void);
-  void (*_gtk_reserved2) (void);
-  void (*_gtk_reserved3) (void);
-};
-
-
-/* construction */
-GType         gtk_combo_box_get_type         (void);
-GtkWidget    *gtk_combo_box_new              (void);
-GtkWidget    *gtk_combo_box_new_with_model   (GtkTreeModel    *model);
-
-/* grids */
-void          gtk_combo_box_set_wrap_width         (GtkComboBox *combo_box,
-                                                    gint         width);
-void          gtk_combo_box_set_row_span_column    (GtkComboBox *combo_box,
-                                                    gint         row_span);
-void          gtk_combo_box_set_column_span_column (GtkComboBox *combo_box,
-                                                    gint         column_span);
-
-/* get/set active item */
-gint          gtk_combo_box_get_active       (GtkComboBox     *combo_box);
-void          gtk_combo_box_set_active       (GtkComboBox     *combo_box,
-                                              gint             index_);
-gboolean      gtk_combo_box_get_active_iter  (GtkComboBox     *combo_box,
-                                              GtkTreeIter     *iter);
-void          gtk_combo_box_set_active_iter  (GtkComboBox     *combo_box,
-                                              GtkTreeIter     *iter);
-
-/* getters and setters */
-void          gtk_combo_box_set_model        (GtkComboBox     *combo_box,
-                                              GtkTreeModel    *model);
-GtkTreeModel *gtk_combo_box_get_model        (GtkComboBox     *combo_box);
-
-/* convenience -- text */
-GtkWidget    *gtk_combo_box_new_text         (void);
-void          gtk_combo_box_append_text      (GtkComboBox     *combo_box,
-                                              const gchar     *text);
-void          gtk_combo_box_insert_text      (GtkComboBox     *combo_box,
-                                              gint             position,
-                                              const gchar     *text);
-void          gtk_combo_box_prepend_text     (GtkComboBox     *combo_box,
-                                              const gchar     *text);
-void          gtk_combo_box_remove_text      (GtkComboBox     *combo_box,
-                                              gint             position);
-/* programmatic control */
-void          gtk_combo_box_popup            (GtkComboBox     *combo_box);
-void          gtk_combo_box_popdown          (GtkComboBox     *combo_box);
-
-G_END_DECLS
-
-#endif /* __GTK_COMBO_BOX_H__ */
-
-gchar        *gtk_combo_box_get_active_text  (GtkComboBox     *combo_box);
-
-#endif /* __PIDGIN_COMBOX_BOX_H__ */
--- a/pidgin/pidginstock.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/pidginstock.c	Thu Feb 18 21:38:43 2010 +0000
@@ -53,49 +53,29 @@
 } const stock_icons[] = {
 
 	{ PIDGIN_STOCK_ACTION,          NULL,      GTK_STOCK_EXECUTE          },
-#if GTK_CHECK_VERSION(2,6,0)
 	{ PIDGIN_STOCK_ALIAS,           NULL,      GTK_STOCK_EDIT             },
-#else
-	{ PIDGIN_STOCK_ALIAS,           "buttons", "edit.png"                 },
-#endif
 	{ PIDGIN_STOCK_CHAT,            NULL,      GTK_STOCK_JUMP_TO          },
 	{ PIDGIN_STOCK_CLEAR,           NULL,      GTK_STOCK_CLEAR            },
 	{ PIDGIN_STOCK_CLOSE_TABS,      NULL,      GTK_STOCK_CLOSE            },
 	{ PIDGIN_STOCK_DEBUG,           NULL,      GTK_STOCK_PROPERTIES       },
 	{ PIDGIN_STOCK_DOWNLOAD,        NULL,      GTK_STOCK_GO_DOWN          },
-#if GTK_CHECK_VERSION(2,6,0)
 	{ PIDGIN_STOCK_DISCONNECT,      NULL,      GTK_STOCK_DISCONNECT       },
-#else
-	{ PIDGIN_STOCK_DISCONNECT,      "icons",   "stock_disconnect_16.png"  },
-#endif
 	{ PIDGIN_STOCK_FGCOLOR,         "buttons", "change-fgcolor-small.png" },
-#if GTK_CHECK_VERSION(2,6,0)
 	{ PIDGIN_STOCK_EDIT,            NULL,      GTK_STOCK_EDIT             },
-#else
-	{ PIDGIN_STOCK_EDIT,            "buttons", "edit.png"                 },
-#endif
 	{ PIDGIN_STOCK_FILE_CANCELED,   NULL,      GTK_STOCK_CANCEL           },
 	{ PIDGIN_STOCK_FILE_DONE,       NULL,      GTK_STOCK_APPLY            },
 	{ PIDGIN_STOCK_IGNORE,          NULL,      GTK_STOCK_DIALOG_ERROR     },
 	{ PIDGIN_STOCK_INVITE,          NULL,      GTK_STOCK_JUMP_TO          },
 	{ PIDGIN_STOCK_MODIFY,          NULL,      GTK_STOCK_PREFERENCES      },
 	{ PIDGIN_STOCK_ADD,             NULL,	   GTK_STOCK_ADD			  },
-#if GTK_CHECK_VERSION(2,6,0)
 	{ PIDGIN_STOCK_PAUSE,           NULL,      GTK_STOCK_MEDIA_PAUSE      },
-#else
-	{ PIDGIN_STOCK_PAUSE,           "buttons", "pause.png"                },
-#endif
 	{ PIDGIN_STOCK_POUNCE,          NULL,      GTK_STOCK_REDO             },
 	{ PIDGIN_STOCK_OPEN_MAIL,       NULL,      GTK_STOCK_JUMP_TO          },
 	{ PIDGIN_STOCK_SIGN_ON,         NULL,      GTK_STOCK_EXECUTE          },
 	{ PIDGIN_STOCK_SIGN_OFF,        NULL,      GTK_STOCK_CLOSE            },
 	{ PIDGIN_STOCK_TYPED,           "pidgin",  "typed.png"                },
 	{ PIDGIN_STOCK_UPLOAD,          NULL,      GTK_STOCK_GO_UP            },
-#if GTK_CHECK_VERSION(2,8,0)
 	{ PIDGIN_STOCK_INFO,            NULL,      GTK_STOCK_INFO             },
-#else
-	{ PIDGIN_STOCK_INFO,            "buttons", "info.png"                 },
-#endif
 };
 
 static const GtkStockItem stock_items[] =
@@ -204,6 +184,7 @@
 	{ PIDGIN_STOCK_TOOLBAR_VIDEO_CALL,       "toolbar", "video-call.png",       FALSE, TRUE,  TRUE,  TRUE,  TRUE,  FALSE, FALSE, NULL },
 	{ PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL, "toolbar", "audio-video-call.png", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
 #endif
+	{ PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION, "toolbar", "get-attention.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL  }
 };
 
 const SizedStockIcon sized_status_icons [] = {
@@ -218,17 +199,22 @@
 	{ PIDGIN_STOCK_STATUS_LOGOUT,    "status",  "log-out.png",       TRUE, TRUE, TRUE,  TRUE,  TRUE,  FALSE, TRUE,  NULL },
 	{ PIDGIN_STOCK_STATUS_OFFLINE,   "status",  "offline.png",       TRUE, TRUE, TRUE,  TRUE,  TRUE,  FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I  },
 	{ PIDGIN_STOCK_STATUS_PERSON,    "status",  "person.png",        TRUE, TRUE, TRUE,  TRUE,  TRUE,  FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_STATUS_MESSAGE,   "toolbar", "message-new.png",   TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+	{ PIDGIN_STOCK_STATUS_MESSAGE,   "toolbar", "message-new.png",   TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }
+};
 
-	{ PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png",        FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png",     FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_AWAY,      "tray", "tray-away.png",          FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_BUSY,      "tray", "tray-busy.png",          FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_XA,        "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_OFFLINE,   "tray", "tray-offline.png",       FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_CONNECT,   "tray", "tray-connecting.png",    FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_PENDING,   "tray", "tray-new-im.png",        FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL },
-	{ PIDGIN_STOCK_TRAY_EMAIL,     "tray", "tray-message.png",       FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }
+const SizedStockIcon sized_tray_icons [] = {
+#define SIZED_TRAY_ICON(name) \
+	{ name, "tray/hicolor", "status/" name ".png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_AVAILABLE ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_INVISIBLE ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_AWAY ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_BUSY ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_XA ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_OFFLINE ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_CONNECT ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_PENDING ),
+	SIZED_TRAY_ICON( PIDGIN_STOCK_TRAY_EMAIL )
+#undef SIZED_TRAY_ICON
 };
 
 /*****************************************************************************
@@ -239,7 +225,6 @@
 find_file_common(const char *name)
 {
 	gchar *filename;
-#if GLIB_CHECK_VERSION(2,6,0)
 	const gchar *userdir;
 	const gchar * const *sysdirs;
 
@@ -256,7 +241,6 @@
 			return filename;
 		g_free(filename);
 	}
-#endif
 	filename = g_build_filename(DATADIR, name, NULL);
 	if (g_file_test(filename, G_FILE_TEST_EXISTS))
 		return filename;
@@ -413,11 +397,9 @@
 static void
 reload_settings(void)
 {
-#if GTK_CHECK_VERSION(2,4,0)
 	GtkSettings *setting = NULL;
 	setting = gtk_settings_get_default();
 	gtk_rc_reset_styles(setting);
-#endif
 }
 
 /*****************************************************************************
@@ -480,6 +462,33 @@
 		}
 	}
 
+	for (i = 0; i < G_N_ELEMENTS(sized_tray_icons); i++)
+	{
+		normal = gtk_icon_set_new();
+		if (sized_tray_icons[i].translucent_name)
+			translucent = gtk_icon_set_new();
+
+#define ADD_SIZED_ICON(name, size) \
+		if (sized_tray_icons[i].name) { \
+			add_sized_icon(normal, name, PIDGIN_ICON_THEME(theme), size, sized_tray_icons[i], FALSE); \
+			if (sized_tray_icons[i].translucent_name) \
+				add_sized_icon(translucent, name, PIDGIN_ICON_THEME(theme), size, sized_tray_icons[i], TRUE); \
+		}
+		ADD_SIZED_ICON(extra_small, "16x16");
+		ADD_SIZED_ICON(small, "22x22");
+		ADD_SIZED_ICON(medium, "32x32");
+		ADD_SIZED_ICON(large, "48x48");
+#undef ADD_SIZED_ICON
+
+		gtk_icon_factory_add(icon_factory, sized_tray_icons[i].name, normal);
+		gtk_icon_set_unref(normal);
+
+		if (sized_tray_icons[i].translucent_name) {
+			gtk_icon_factory_add(icon_factory, sized_tray_icons[i].translucent_name, translucent);
+			gtk_icon_set_unref(translucent);
+		}
+	}
+
 	gtk_widget_destroy(win);
 	g_object_unref(G_OBJECT(icon_factory));
 	reload_settings();
--- a/pidgin/pidginstock.h	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/pidginstock.h	Thu Feb 18 21:38:43 2010 +0000
@@ -159,6 +159,7 @@
 #define PIDGIN_STOCK_TOOLBAR_VIDEO_CALL   "pidgin-video-call"
 #define PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL "pidgin-audio-video-call"
 #endif
+#define PIDGIN_STOCK_TOOLBAR_SEND_ATTENTION	"pidgin-send-attention"
 
 /* Tray icons */
 #define PIDGIN_STOCK_TRAY_AVAILABLE       "pidgin-tray-available"
--- a/pidgin/pidgintooltip.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/pidgintooltip.c	Thu Feb 18 21:38:43 2010 +0000
@@ -119,9 +119,7 @@
 
 	tipwindow = gtk_window_new(GTK_WINDOW_POPUP);
 	name = gtk_window_get_title(GTK_WINDOW(pidgin_tooltip.widget));
-#if GTK_CHECK_VERSION(2,10,0)
 	gtk_window_set_type_hint(GTK_WINDOW(tipwindow), GDK_WINDOW_TYPE_HINT_TOOLTIP);
-#endif
 	gtk_widget_set_app_paintable(tipwindow, TRUE);
 	gtk_window_set_title(GTK_WINDOW(tipwindow), name ? name : _("Pidgin Tooltip"));
 	gtk_window_set_resizable(GTK_WINDOW(tipwindow), FALSE);
@@ -136,41 +134,26 @@
 {
 	int sig;
 	int scr_w, scr_h, x, y, dy;
-#if GTK_CHECK_VERSION(2,2,0)
 	int mon_num;
 	GdkScreen *screen = NULL;
-#endif
 	GdkRectangle mon_size;
 	GtkWidget *tipwindow = pidgin_tooltip.tipwindow;
 	
-#if GTK_CHECK_VERSION(2,2,0)
 	gdk_display_get_pointer(gdk_display_get_default(), &screen, &x, &y, NULL);
 	mon_num = gdk_screen_get_monitor_at_point(screen, x, y);
 	gdk_screen_get_monitor_geometry(screen, mon_num, &mon_size);
 
 	scr_w = mon_size.width + mon_size.x;
 	scr_h = mon_size.height + mon_size.y;
-#else
-	scr_w = gdk_screen_width();
-	scr_h = gdk_screen_height();
-	gdk_window_get_pointer(NULL, &x, &y, NULL);
-	mon_size.x = 0;
-	mon_size.y = 0;
-#endif
 
-#if GTK_CHECK_VERSION(2,4,0)
 	dy = gdk_display_get_default_cursor_size(gdk_display_get_default()) / 2;
-#else
-	dy = 0;
-#endif
 
-#if GTK_CHECK_VERSION(2,2,0)
 	if (w > mon_size.width)
 		w = mon_size.width - 10;
 
 	if (h > mon_size.height)
 		h = mon_size.height - 10;
-#endif
+
 	x -= ((w >> 1) + 4);
 
 	if ((y + h + 4) > scr_h)
--- a/pidgin/pixmaps/Makefile.am	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/pixmaps/Makefile.am	Thu Feb 18 21:38:43 2010 +0000
@@ -443,7 +443,8 @@
 		toolbar/16/send-file.png \
 		toolbar/16/transfer.png \
 		toolbar/16/unblock.png \
-		toolbar/16/video-call.png
+		toolbar/16/video-call.png \
+		toolbar/16/get-attention.png
 
 TOOLBAR_22_SCALABLE = \
 		toolbar/22/scalable/select-avatar.svg \
@@ -482,48 +483,48 @@
 		tray/16/offline_4bit.ico
 
 TRAY_16 = \
-		tray/16/tray-away.png \
-		tray/16/tray-busy.png \
-		tray/16/tray-invisible.png \
-		tray/16/tray-connecting.png \
-		tray/16/tray-extended-away.png \
-		tray/16/tray-message.png \
-		tray/16/tray-new-im.png \
-		tray/16/tray-offline.png \
-		tray/16/tray-online.png
+		tray/hicolor/16x16/status/pidgin-tray-away.png \
+		tray/hicolor/16x16/status/pidgin-tray-busy.png \
+		tray/hicolor/16x16/status/pidgin-tray-invisible.png \
+		tray/hicolor/16x16/status/pidgin-tray-connect.png \
+		tray/hicolor/16x16/status/pidgin-tray-xa.png \
+		tray/hicolor/16x16/status/pidgin-tray-email.png \
+		tray/hicolor/16x16/status/pidgin-tray-pending.png \
+		tray/hicolor/16x16/status/pidgin-tray-offline.png \
+		tray/hicolor/16x16/status/pidgin-tray-available.png
 
 TRAY_22 = \
-		tray/22/tray-away.png \
-		tray/22/tray-busy.png \
-		tray/22/tray-connecting.png \
-		tray/22/tray-extended-away.png \
-		tray/22/tray-invisible.png \
-		tray/22/tray-message.png \
-		tray/22/tray-new-im.png \
-		tray/22/tray-offline.png \
-		tray/22/tray-online.png
+		tray/hicolor/22x22/status/pidgin-tray-away.png \
+		tray/hicolor/22x22/status/pidgin-tray-busy.png \
+		tray/hicolor/22x22/status/pidgin-tray-connect.png \
+		tray/hicolor/22x22/status/pidgin-tray-xa.png \
+		tray/hicolor/22x22/status/pidgin-tray-invisible.png \
+		tray/hicolor/22x22/status/pidgin-tray-email.png \
+		tray/hicolor/22x22/status/pidgin-tray-pending.png \
+		tray/hicolor/22x22/status/pidgin-tray-offline.png \
+		tray/hicolor/22x22/status/pidgin-tray-available.png
 
 TRAY_32 = \
-		tray/32/tray-away.png \
-		tray/32/tray-busy.png \
-		tray/32/tray-connecting.png \
-		tray/32/tray-extended-away.png \
-		tray/32/tray-invisible.png \
-		tray/32/tray-message.png \
-		tray/32/tray-new-im.png \
-		tray/32/tray-offline.png \
-		tray/32/tray-online.png
+		tray/hicolor/32x32/status/pidgin-tray-away.png \
+		tray/hicolor/32x32/status/pidgin-tray-busy.png \
+		tray/hicolor/32x32/status/pidgin-tray-connect.png \
+		tray/hicolor/32x32/status/pidgin-tray-xa.png \
+		tray/hicolor/32x32/status/pidgin-tray-invisible.png \
+		tray/hicolor/32x32/status/pidgin-tray-email.png \
+		tray/hicolor/32x32/status/pidgin-tray-pending.png \
+		tray/hicolor/32x32/status/pidgin-tray-offline.png \
+		tray/hicolor/32x32/status/pidgin-tray-available.png
 
 TRAY_48 = \
-		tray/48/tray-away.png \
-		tray/48/tray-busy.png \
-		tray/48/tray-connecting.png \
-		tray/48/tray-extended-away.png \
-		tray/48/tray-invisible.png \
-		tray/48/tray-message.png \
-		tray/48/tray-new-im.png \
-		tray/48/tray-offline.png \
-		tray/48/tray-online.png
+		tray/hicolor/48x48/status/pidgin-tray-away.png \
+		tray/hicolor/48x48/status/pidgin-tray-busy.png \
+		tray/hicolor/48x48/status/pidgin-tray-connect.png \
+		tray/hicolor/48x48/status/pidgin-tray-xa.png \
+		tray/hicolor/48x48/status/pidgin-tray-invisible.png \
+		tray/hicolor/48x48/status/pidgin-tray-email.png \
+		tray/hicolor/48x48/status/pidgin-tray-pending.png \
+		tray/hicolor/48x48/status/pidgin-tray-offline.png \
+		tray/hicolor/48x48/status/pidgin-tray-available.png
 
 EXTRA_DIST = \
 		edit.png			\
Binary file pidgin/pixmaps/tray/16/tray-away.png has changed
Binary file pidgin/pixmaps/tray/16/tray-busy.png has changed
Binary file pidgin/pixmaps/tray/16/tray-connecting.png has changed
Binary file pidgin/pixmaps/tray/16/tray-extended-away.png has changed
Binary file pidgin/pixmaps/tray/16/tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/16/tray-message.png has changed
Binary file pidgin/pixmaps/tray/16/tray-new-im.png has changed
Binary file pidgin/pixmaps/tray/16/tray-offline.png has changed
Binary file pidgin/pixmaps/tray/16/tray-online.png has changed
Binary file pidgin/pixmaps/tray/22/tray-away.png has changed
Binary file pidgin/pixmaps/tray/22/tray-busy.png has changed
Binary file pidgin/pixmaps/tray/22/tray-connecting.png has changed
Binary file pidgin/pixmaps/tray/22/tray-extended-away.png has changed
Binary file pidgin/pixmaps/tray/22/tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/22/tray-message.png has changed
Binary file pidgin/pixmaps/tray/22/tray-new-im.png has changed
Binary file pidgin/pixmaps/tray/22/tray-offline.png has changed
Binary file pidgin/pixmaps/tray/22/tray-online.png has changed
Binary file pidgin/pixmaps/tray/32/tray-away.png has changed
Binary file pidgin/pixmaps/tray/32/tray-busy.png has changed
Binary file pidgin/pixmaps/tray/32/tray-connecting.png has changed
Binary file pidgin/pixmaps/tray/32/tray-extended-away.png has changed
Binary file pidgin/pixmaps/tray/32/tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/32/tray-message.png has changed
Binary file pidgin/pixmaps/tray/32/tray-new-im.png has changed
Binary file pidgin/pixmaps/tray/32/tray-offline.png has changed
Binary file pidgin/pixmaps/tray/32/tray-online.png has changed
Binary file pidgin/pixmaps/tray/48/tray-away.png has changed
Binary file pidgin/pixmaps/tray/48/tray-busy.png has changed
Binary file pidgin/pixmaps/tray/48/tray-connecting.png has changed
Binary file pidgin/pixmaps/tray/48/tray-extended-away.png has changed
Binary file pidgin/pixmaps/tray/48/tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/48/tray-message.png has changed
Binary file pidgin/pixmaps/tray/48/tray-new-im.png has changed
Binary file pidgin/pixmaps/tray/48/tray-offline.png has changed
Binary file pidgin/pixmaps/tray/48/tray-online.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-available.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-away.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-busy.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-connect.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-email.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-offline.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-pending.png has changed
Binary file pidgin/pixmaps/tray/hicolor/16x16/status/pidgin-tray-xa.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-available.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-away.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-busy.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-connect.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-email.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-offline.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-pending.png has changed
Binary file pidgin/pixmaps/tray/hicolor/22x22/status/pidgin-tray-xa.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-available.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-away.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-busy.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-connect.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-email.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-offline.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-pending.png has changed
Binary file pidgin/pixmaps/tray/hicolor/32x32/status/pidgin-tray-xa.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-available.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-away.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-busy.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-connect.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-email.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-invisible.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-offline.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-pending.png has changed
Binary file pidgin/pixmaps/tray/hicolor/48x48/status/pidgin-tray-xa.png has changed
--- a/pidgin/plugins/gestures/gestures.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/plugins/gestures/gestures.c	Thu Feb 18 21:38:43 2010 +0000
@@ -57,11 +57,7 @@
 {
 	int count, current;
 
-#if GTK_CHECK_VERSION(2,2,0)
 	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(win->notebook));
-#else
-	count = g_list_length(GTK_NOTEBOOK(win->notebook)->children);
-#endif
 	current = gtk_notebook_get_current_page(GTK_NOTEBOOK(win->notebook));
 
 	if (dir == GTK_DIR_LEFT)
--- a/pidgin/plugins/perl/common/Makefile.mingw	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/plugins/perl/common/Makefile.mingw	Thu Feb 18 21:38:43 2010 +0000
@@ -25,6 +25,7 @@
 			-I$(PIDGIN_TOP)/win32 \
 			-I$(GTK_TOP)/include \
 			-I$(GTK_TOP)/include/atk-1.0 \
+			-I$(GTK_TOP)/include/cairo \
 			-I$(GTK_TOP)/include/glib-2.0 \
 			-I$(GTK_TOP)/include/gtk-2.0 \
 			-I$(GTK_TOP)/include/pango-1.0 \
--- a/pidgin/plugins/pidginrc.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/plugins/pidginrc.c	Thu Feb 18 21:38:43 2010 +0000
@@ -201,17 +201,13 @@
 purplerc_make_changes(void)
 {
 	GString *str = make_gtkrc_string();
-#if GTK_CHECK_VERSION(2,4,0)
 	GtkSettings *setting = NULL;
-#endif
 
 	gtk_rc_parse_string(str->str);
 	g_string_free(str, TRUE);
 
-#if GTK_CHECK_VERSION(2,4,0)
 	setting = gtk_settings_get_default();
 	gtk_rc_reset_styles(setting);
-#endif
 }
 
 static void
--- a/pidgin/plugins/spellchk.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/plugins/spellchk.c	Thu Feb 18 21:38:43 2010 +0000
@@ -2081,24 +2081,11 @@
 	g_string_free(data, TRUE);
 }
 
-#if !GTK_CHECK_VERSION(2,2,0)
-static void
-count_selected_helper(GtkTreeModel *model, GtkTreePath *path,
-					GtkTreeIter *iter, gpointer user_data)
-{
-	(*(gint *)user_data)++;
-}
-#endif
-
 static void on_selection_changed(GtkTreeSelection *sel,
 	gpointer data)
 {
 	gint num_selected;
-#if GTK_CHECK_VERSION(2,2,0)
 	num_selected = gtk_tree_selection_count_selected_rows(sel);
-#else
-	gtk_tree_selection_selected_foreach(sel, count_selected_helper, &num_selected);
-#endif
 	gtk_widget_set_sensitive((GtkWidget*)data, (num_selected > 0));
 }
 
--- a/pidgin/plugins/xmppconsole.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/plugins/xmppconsole.c	Thu Feb 18 21:38:43 2010 +0000
@@ -26,9 +26,6 @@
 #include "xmlnode.h"
 
 #include "gtkimhtml.h"
-#if !GTK_CHECK_VERSION(2,4,0)
-#include "pidgincombobox.h"
-#endif
 #include "gtkutils.h"
 
 typedef struct {
@@ -733,9 +730,7 @@
 	GtkTextBuffer *buffer;
 	GtkWidget *toolbar;
 	GList *connections;
-#if GTK_CHECK_VERSION(2,4,0)
 	GtkToolItem *button;
-#endif
 
 	if (console) {
 		gtk_window_present(GTK_WINDOW(console->window));
@@ -782,32 +777,17 @@
 	gtk_container_add(GTK_CONTAINER(sw), console->imhtml);
 
 	toolbar = gtk_toolbar_new();
-#if GTK_CHECK_VERSION(2,4,0)
 	button = gtk_tool_button_new(NULL, "<iq/>");
 	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(iq_clicked_cb), NULL);
 	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button));
-#else
-	gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<iq/>",
-			           _("Insert an <iq/> stanza."), "foo", NULL, GTK_SIGNAL_FUNC(iq_clicked_cb), NULL);
-#endif
 
-#if GTK_CHECK_VERSION(2,4,0)
 	button = gtk_tool_button_new(NULL, "<presence/>");
 	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(presence_clicked_cb), NULL);
 	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button));
-#else
-	gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<presence/>",
-			           _("Insert a <presence/> stanza."), NULL, gtk_label_new(NULL), GTK_SIGNAL_FUNC(presence_clicked_cb), NULL);
-#endif
 
-#if GTK_CHECK_VERSION(2,4,0)
 	button = gtk_tool_button_new(NULL, "<message/>");
 	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(message_clicked_cb), NULL);
 	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button));
-#else
-	gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "<message/>",
-			           _("Insert a <message/> stanza."), "foo", gtk_label_new(NULL), GTK_SIGNAL_FUNC(message_clicked_cb), NULL);
-#endif
 
 	gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
 
--- a/pidgin/win32/gtkdocklet-win32.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/gtkdocklet-win32.c	Thu Feb 18 21:38:43 2010 +0000
@@ -585,12 +585,7 @@
 			 G_CALLBACK(dummy_button_cb), NULL);
 
 	image = gtk_image_new();
-#if GLIB_CHECK_VERSION(2,10,0)
 	g_object_ref_sink(image);
-#else
-	g_object_ref(image);
-	gtk_object_sink(GTK_OBJECT(image));
-#endif
 
 	osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 	GetVersionEx(&osinfo);
--- a/pidgin/win32/gtkwin32dep.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/gtkwin32dep.c	Thu Feb 18 21:38:43 2010 +0000
@@ -142,56 +142,34 @@
 
 void winpidgin_shell_execute(const char *target, const char *verb, const char *clazz) {
 
+	SHELLEXECUTEINFOW wsinfo;
+	wchar_t *w_uri, *w_verb, *w_clazz = NULL;
+
 	g_return_if_fail(target != NULL);
 	g_return_if_fail(verb != NULL);
 
-	if (G_WIN32_HAVE_WIDECHAR_API()) {
-		SHELLEXECUTEINFOW wsinfo;
-		wchar_t *w_uri, *w_verb, *w_clazz = NULL;
-
-		w_uri = g_utf8_to_utf16(target, -1, NULL, NULL, NULL);
-		w_verb = g_utf8_to_utf16(verb, -1, NULL, NULL, NULL);
-
-		memset(&wsinfo, 0, sizeof(wsinfo));
-		wsinfo.cbSize = sizeof(wsinfo);
-		wsinfo.lpVerb = w_verb;
-		wsinfo.lpFile = w_uri;
-		wsinfo.nShow = SW_SHOWNORMAL;
-		if (clazz != NULL) {
-			w_clazz = g_utf8_to_utf16(clazz, -1, NULL, NULL, NULL);
-			wsinfo.fMask |= SEE_MASK_CLASSNAME;
-			wsinfo.lpClass = w_clazz;
-		}
-
-		if(!ShellExecuteExW(&wsinfo))
-			purple_debug_error("winpidgin", "Error opening URI: %s error: %d\n",
-				target, (int) wsinfo.hInstApp);
+	w_uri = g_utf8_to_utf16(target, -1, NULL, NULL, NULL);
+	w_verb = g_utf8_to_utf16(verb, -1, NULL, NULL, NULL);
 
-		g_free(w_uri);
-		g_free(w_verb);
-		g_free(w_clazz);
-	} else {
-		SHELLEXECUTEINFOA sinfo;
-		gchar *locale_uri;
-
-		locale_uri = g_locale_from_utf8(target, -1, NULL, NULL, NULL);
+	memset(&wsinfo, 0, sizeof(wsinfo));
+	wsinfo.cbSize = sizeof(wsinfo);
+	wsinfo.lpVerb = w_verb;
+	wsinfo.lpFile = w_uri;
+	wsinfo.nShow = SW_SHOWNORMAL;
+	wsinfo.fMask |= SEE_MASK_FLAG_NO_UI;
+	if (clazz != NULL) {
+		w_clazz = g_utf8_to_utf16(clazz, -1, NULL, NULL, NULL);
+		wsinfo.fMask |= SEE_MASK_CLASSNAME;
+		wsinfo.lpClass = w_clazz;
+	}
 
-		memset(&sinfo, 0, sizeof(sinfo));
-		sinfo.cbSize = sizeof(sinfo);
-		sinfo.lpVerb = verb;
-		sinfo.lpFile = locale_uri;
-		sinfo.nShow = SW_SHOWNORMAL;
-		if (clazz != NULL) {
-			sinfo.fMask |= SEE_MASK_CLASSNAME;
-			sinfo.lpClass = clazz;
-		}
+	if(!ShellExecuteExW(&wsinfo))
+		purple_debug_error("winpidgin", "Error opening URI: %s error: %d\n",
+			target, (int) wsinfo.hInstApp);
 
-		if(!ShellExecuteExA(&sinfo))
-			purple_debug_error("winpidgin", "Error opening URI: %s error: %d\n",
-				target, (int) sinfo.hInstApp);
-
-		g_free(locale_uri);
-	}
+	g_free(w_uri);
+	g_free(w_verb);
+	g_free(w_clazz);
 
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/win32/nsis/available.lst	Thu Feb 18 21:38:43 2010 +0000
@@ -0,0 +1,127 @@
+#This file is from ftp://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries/available.lst
+af,ZA,af_ZA,Afrikaans (South Africa),af_ZA.zip
+ak,GH,ak_GH,Akan (Ghana),ak_GH.zip
+sq,AL,sq_AL,Albanian (Albania),sq_AL.zip
+bg,BG,bg_BG,Bulgarian (Bulgaria),bg_BG.zip
+ca,ES,ca_ES,Catalan (Spain),ca_ES.zip
+hr,HR,hr_HR,Croatian (Croatia),hr_HR.zip
+cs,CZ,cs_CZ,Czech (Czech Republic),cs_CZ.zip
+da,DK,da_DK,Danish (Denmark),da_DK.zip
+nl,NL,nl_NL,Dutch (Netherlands),nl_NL.zip
+nl,NL,nl_med,Dutch Medical (Netherlands),nl_med.zip
+nl,BE,nl_NL,Dutch (Belgium),nl_NL.zip
+nl,BE,nl_NL,Dutch Medical (Belgium),nl_NL.zip
+en,AU,en_AU,English (Australia),en_AU.zip
+en,CA,en_CA,English (Canada),en_CA.zip
+en,NZ,en_NZ,English (New Zealand),en_NZ.zip
+en,ZA,en_ZA,English (South Africa),en_ZA.zip
+en,GB,en_GB,English (United Kingdom),en_GB.zip
+en,US,en_US,English (United States),en_US.zip
+cop,EG,cop_EG,Coptic (Egypt),cop_EG.zip
+eo,ANY,eo_l3,Esperanto,eo.zip
+et,EE,et_EE,Estonian (Estonia),et_EE.zip
+fo,FO,fo_FO,Faroese (Faroe Islands),fo_FO.zip
+fr,BE,fr_FR,Français Réforme 1990 & Classique (Belgium),fr_FR_1-3-2.zip
+fr,CA,fr_FR,Français Réforme 1990 & Classique (Canada),fr_FR_1-3-2.zip
+fr,FR,fr_FR,Français Réforme 1990 & Classique (France),fr_FR_1-3-2.zip
+fr,LU,fr_FR,Français Réforme 1990 & Classique (Luxembourg),fr_FR_1-3-2.zip
+fr,MC,fr_FR,Français Réforme 1990 & Classique (Monaco),fr_FR_1-3-2.zip
+fr,CH,fr_FR,Français Réforme 1990 & Classique (Switzerland),fr_FR_1-3-2.zip
+fr,BE,fr_FR-classique,Français Classique (Belgium),fr_FR-classique_1-3-2.zip
+fr,CA,fr_FR-classique,Français Classique (Canada),fr_FR-classique_1-3-2.zip
+fr,FR,fr_FR-classique,Français Classique (France),fr_FR-classique_1-3-2.zip
+fr,LU,fr_FR-classique,Français Classique (Luxembourg),fr_FR-classique_1-3-2.zip
+fr,MC,fr_FR-classique,Français Classique (Monaco),fr_FR-classique_1-3-2.zip
+fr,CH,fr_FR-classique,Français Classique  (Switzerland),fr_FR-classique_1-3-2.zip
+fr,BE,fr_FR-1990,Français Réforme 1990 (Belgium),fr_FR-1990_1-3-2.zip
+fr,CA,fr_FR-1990,Français Réforme 1990 (Canada),fr_FR-1990_1-3-2.zip
+fr,FR,fr_FR-1990,Français Réforme 1990 (France),fr_FR-1990_1-3-2.zip
+fr,LU,fr_FR-1990,Français Réforme 1990 (Luxembourg),fr_FR-1990_1-3-2.zip
+fr,MC,fr_FR-1990,Français Réforme 1990 (Monaco),fr_FR-1990_1-3-2.zip
+fr,CH,fr_FR-1990,Français Réforme 1990 (Switzerland),fr_FR-1990_1-3-2.zip
+fy,NL,fy_NL,Frisian (Netherlands),fy_NL.zip
+gl,ES,gl_ES,Galician (Spain),gl_ES.zip
+gsc,FR,gsc_FR,Gascon (France),gsc_FR.zip
+de,AT,de_DE,German (Austria Base),de_DE.zip
+de,AT,de_AT,German (Austria Extension),de_AT.zip
+de,AT,de_AT_frami,German (Austria) neu 08/2006 (frami),de_AT_frami.zip
+de,DE,de_DE,German (Germany),de_DE.zip
+de,DE,de_DE_frami,German (Germany) neu 08/2006 (frami),de_DE_frami.zip
+de,LI,de_CH,German (Liechtenstein),de_CH.zip
+de,LI,de_CH_frami,German (Liechtenstein) neu 08/2006 (frami),de_CH_frami.zip
+de,LU,de_DE,German (Luxembourg),de_DE.zip
+de,LU,de_DE_frami,German (Luxembourg) neu 08/2006 (frami),de_DE_frami.zip
+de,CH,de_CH,German (Switzerland),de_CH.zip
+de,CT,de_CH_frami,German (Switzerland) neu 08/2006 (frami),de_CH_frami.zip
+el,GR,el_GR,Greek (Greece),el_GR.zip
+gu,IN,gu_IN,Gujarati (India),gu_IN.zip
+gd,GB,gd_GB,Scots Gaelic (Scotland),gd_GB.zip
+he,IL,he_IL,Hebrew (Israel),he_IL.zip
+hil,PH,hil_PH,Hiligaynon (Philippines),hil_PH.zip
+hu,HU,hu_HU,Hungarian (Hungary),hu_HU.zip
+hu,HU,hu_HU_comb,Hungarian (Hungary) collected compounds,hu_HU_comb.zip
+id,ID,id_ID,Indonesian (Indonesia),id_ID.zip
+ia,ANY,ia_ANY,Interlingua (ANY locale),ia_ANY.zip
+ga,IE,ga_IE,Irish (Ireland),ga_IE.zip
+it,IT,it_IT,Italian (Italy),it_IT.zip
+it,CH,it_IT,Italian (Switzerland),it_IT.zip
+sw,KE,sw_KE,Kiswahili (Africa),sw_KE.zip
+lv,LV,lv_LV,Latvian (Latvia),lv_LV.zip
+ku,TR,ku_TR,Kurdish (Turkey),ku_TR.zip
+ku,TR,ku_TR,Kurdish (Syria),ku_TR.zip
+it,IT,la,Latin (for x-register),la.zip
+lt,LT,lt_LT,Lithuanian (Lithuania),lt_LT.zip
+mk,MK,mk_MK,Macedonian (Macedonia),mk_MK.zip
+ms,MY,ms_MY,Malay (Malaysia),ms_MY.zip
+mi,NZ,mi_NZ,Maori (New Zealand),mi_NZ.zip
+mr,IN,mr_IN,Marathi (India),mr_IN.zip
+mos,BF,mos_BF,Moore,ms_BF.zip
+nr,ZA,nr_ZA,Ndebele (South Africa),nr_ZA.zip
+ne,NP,ne_NP,Nepali (Nepal),ne_NP.zip
+ns,ZA,ns_ZA,Northern Sotho (South Africa),ns_ZA.zip
+nb,NO,nb_NO,Norwegian Bokmaal (Norway),nb_NO.zip
+nn,NO,nn_NO,Norwegian Nynorsk (Norway),nn_NO.zip
+oc,FR,oc_FR,Occitan (Languedoc),oc_FR.zip
+pl,PL,pl_PL,Polish (Poland),pl_PL.zip
+pt,BR,pt_BR,Portuguese (Brazil),pt_BR.zip
+pt,PT,pt_PT,Portuguese (Portugal),pt_PT.zip
+ro,RO,ro_RO,Romanian (Romania),ro_RO.zip
+ru,RU,ru_RU,Russian (Russia),ru_RU.zip
+ru,RU,ru_RU_ye,Russian_ye (Russia),ru_RU_ye.zip
+ru,RU,ru_RU_yo,Russian_yo (Russia),ru_RU_yo.zip
+tn,ZA,tn_ZA,Setswana (Africa),tn_ZA.zip
+sk,SK,sk_SK,Slovak (Slovakia),sk_SK.zip
+sl,SI,sl_SI,Slovenian (Slovenia),sl_SI.zip
+st,ZA,st_ZA,Southern Sotho (South Africa),st_ZA.zip
+es,AR,es_AR,Spanish (Argentina),es_AR.zip
+es,BZ,es_HN,Spanish (Belize),es_HN.zip
+es,BO,es_BO,Spanish (Bolivia),es_BO.zip
+es,CL,es_CL,Spanish (Chile),es_CL.zip
+es,CO,es_CO,Spanish (Colombia),es_CO.zip
+es,CR,es_CR,Spanish (Costa Rica),es_CR.zip
+es,CU,es_CU,Spanish (Cuba),es_CU.zip
+es,DO,es_DO,Spanish (Dominican Republic),es_DO.zip
+es,EC,es_EC,Spanish (Ecuador),es_EC.zip
+es,SV,es_SV,Spanish (El Salvador),es_SV.zip
+es,GT,es_GT,Spanish (Guatemala),es_GT.zip
+es,HN,es_HN,Spanish (Honduras),es_HN.zip
+es,MX,es_MX,Spanish (Mexico),es_MX.zip
+es,NI,es_NI,Spanish (Nicaragua),es_NI.zip
+es,PA,es_PA,Spanish (Panama),es_PA.zip
+es,PY,es_PY,Spanish (Paraguay),es_PY.zip
+es,PE,es_PE,Spanish (Peru),es_PE.zip
+es,PR,es_PR,Spanish (Puerto Rico),es_PR.zip
+es,ES,es_ES,Spanish (Spain),es_ES.zip
+es,UY,es_UY,Spanish (Uruguay),es_UY.zip
+es,VE,es_VE,Spanish (Venezuela),es_VE.zip
+ss,ZA,ss_ZA,Swati (South Africa),ss_ZA.zip
+sv,SE,sv_SE,Swedish (Sweden),sv_SE.zip
+ts,ZA,ts_ZA,Tsonga (South Africa),ts_ZA.zip
+uk,UA,uk_UA,Ukrainian (Ukraine),uk_UA.zip
+ur,IN,ur_PK,Urdu (India),ur_PK.zip
+ur,PK,ur_PK,Urdu (Pakistan),ur_PK.zip
+ve,ZA,ve_ZA,Venda (South Africa),ve_ZA.zip
+vi,VN,vi_VN,Vietnamese (Viet-Nam),vi_VN.zip
+cy,GB,cy_GB,Welsh (Wales),cy_GB.zip
+xh,ZA,xh_ZA,Xhosa (South Africa),xh_ZA.zip
+zu,ZA,zu_ZA,Zulu (South Africa),zu_ZA.zip
--- a/pidgin/win32/nsis/langmacros.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/langmacros.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -31,7 +31,6 @@
   ; Startup checks
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT INSTALLER_IS_RUNNING		${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_IS_RUNNING			${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_INSTALLER_NEEDED		${CUR_LANG}
 
   ; License Page
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_LICENSE_BUTTON			${CUR_LANG}
@@ -48,10 +47,7 @@
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_DESKTOP_SHORTCUT_DESC		${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_STARTMENU_SHORTCUT_DESC	${CUR_LANG}
-
-  ; GTK+ Directory Page
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_UPGRADE_PROMPT			${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_WINDOWS_INCOMPATIBLE		${CUR_LANG}
+  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT DEBUG_SYMBOLS_SECTION_TITLE ${CUR_LANG}
 
   ; Installer Finish Page
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_FINISH_VISIT_WEB_SITE		${CUR_LANG}
@@ -59,10 +55,6 @@
   ; Pidgin Section Prompts and Texts
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	${CUR_LANG}
 
-  ; GTK+ Section Prompts
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_INSTALL_ERROR			${CUR_LANG}
-  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT GTK_BAD_INSTALL_PATH		${CUR_LANG}
-
   ; URI Handler section
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT URI_HANDLERS_SECTION_TITLE		${CUR_LANG}
 
@@ -99,6 +91,9 @@
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SPELLCHECK_SWEDISH		${CUR_LANG}
   !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_SPELLCHECK_UKRAINIAN		${CUR_LANG}
 
+  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_DEBUGSYMBOLS_ERROR ${CUR_LANG}
+  !insertmacro PIDGIN_MACRO_LANGSTRING_INSERT PIDGIN_GTK_DOWNLOAD_ERROR ${CUR_LANG}
+
   !undef CUR_LANG
 !macroend
 
--- a/pidgin/win32/nsis/pidgin-installer.nsi	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/pidgin-installer.nsi	Thu Feb 18 21:38:43 2010 +0000
@@ -8,11 +8,9 @@
 ;--------------------------------
 ;Global Variables
 Var name
-Var GTK_FOLDER
 Var ISSILENT
 Var STARTUP_RUN_KEY
 Var SPELLCHECK_SEL
-Var LANGUAGE_SET
 
 ;--------------------------------
 ;Configuration
@@ -20,14 +18,10 @@
 ;The name var is set in .onInit
 Name $name
 
-!ifdef WITH_GTK
-OutFile "pidgin-${PIDGIN_VERSION}.exe"
+!ifdef OFFLINE_INSTALLER
+OutFile "pidgin-${PIDGIN_VERSION}-offline.exe"
 !else
-!ifdef DEBUG
-OutFile "pidgin-${PIDGIN_VERSION}-debug.exe"
-!else
-OutFile "pidgin-${PIDGIN_VERSION}-no-gtk.exe"
-!endif
+OutFile "pidgin-${PIDGIN_VERSION}.exe"
 !endif
 
 SetCompressor /SOLID lzma
@@ -41,6 +35,7 @@
 !include "Sections.nsh"
 !include "WinVer.nsh"
 !include "LogicLib.nsh"
+!include "Memento.nsh"
 
 !include "FileFunc.nsh"
 !insertmacro GetParameters
@@ -52,11 +47,13 @@
 !insertmacro WordFind
 !insertmacro un.WordFind
 
+!include "TextFunc.nsh"
+
 ;--------------------------------
 ;Defines
 
 !define PIDGIN_NSIS_INCLUDE_PATH		"."
-!define PIDGIN_INSTALLER_DEPS			"..\..\..\..\win32-dev\pidgin-inst-deps"
+!define PIDGIN_INSTALLER_DEPS			"..\..\..\..\win32-dev\pidgin-inst-deps-0.2"
 
 ; Remove these and the stuff that uses them at some point
 !define OLD_GAIM_REG_KEY			"SOFTWARE\gaim"
@@ -70,16 +67,16 @@
 !define STARTUP_RUN_KEY				"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
 !define PIDGIN_UNINST_EXE			"pidgin-uninst.exe"
 
-!define GTK_MIN_VERSION				"2.6.10"
-!define GTK_REG_KEY				"SOFTWARE\GTK\2.0"
+!define GTK_MIN_VERSION				"2.14.0"
 !define PERL_REG_KEY				"SOFTWARE\Perl"
 !define PERL_DLL				"perl510.dll"
-!define GTK_DEFAULT_INSTALL_PATH		"$COMMONFILES\GTK\2.0"
-!define GTK_RUNTIME_INSTALLER			"..\..\..\..\gtk_installer\gtk-runtime-${GTK_INSTALL_VERSION}*.exe"
 
 !define ASPELL_REG_KEY				"SOFTWARE\Aspell"
 !define DOWNLOADER_URL				"http://pidgin.im/win32/download_redir.php"
 
+!define MEMENTO_REGISTRY_ROOT			HKLM
+!define MEMENTO_REGISTRY_KEY			"${PIDGIN_UNINSTALL_KEY}"
+
 ;--------------------------------
 ;Version resource
 VIProductVersion "${PIDGIN_PRODUCT_VERSION}"
@@ -87,14 +84,10 @@
 VIAddVersionKey "FileVersion" "${PIDGIN_VERSION}"
 VIAddVersionKey "ProductVersion" "${PIDGIN_VERSION}"
 VIAddVersionKey "LegalCopyright" ""
-!ifdef WITH_GTK
-VIAddVersionKey "FileDescription" "Pidgin Installer (w/ GTK+ Installer)"
+!ifdef OFFLINE_INSTALLER
+VIAddVersionKey "FileDescription" "Pidgin Installer (Offline)"
 !else
-!ifdef DEBUG
-VIAddVersionKey "FileDescription" "Pidgin Installer (Debug Version)"
-!else
-VIAddVersionKey "FileDescription" "Pidgin Installer (w/o GTK+ Installer)"
-!endif
+VIAddVersionKey "FileDescription" "Pidgin Installer"
 !endif
 
 ;--------------------------------
@@ -139,14 +132,6 @@
   !insertmacro MUI_PAGE_LICENSE			"../../../COPYING"
   !insertmacro MUI_PAGE_COMPONENTS
 
-!ifdef WITH_GTK
-  ; GTK+ install dir page
-  !define MUI_PAGE_CUSTOMFUNCTION_PRE		preGtkDirPage
-  !define MUI_PAGE_CUSTOMFUNCTION_LEAVE		postGtkDirPage
-  !define MUI_DIRECTORYPAGE_VARIABLE		$GTK_FOLDER
-  !insertmacro MUI_PAGE_DIRECTORY
-!endif
-
   ; Pidgin install dir page
   !insertmacro MUI_PAGE_DIRECTORY
 
@@ -317,7 +302,7 @@
           IfErrors uninstall_problem
             ; Ready to uninstall..
             ClearErrors
-            ExecWait '"$TEMP\$R6" /S _?=$R1'
+            ExecWait '"$TEMP\$R6" /S /KEEPGTK=1 _?=$R1'
             IfErrors exec_error
               Delete "$TEMP\$R6"
             Goto done
@@ -348,77 +333,38 @@
 ;--------------------------------
 ;GTK+ Runtime Install Section
 
-!ifdef WITH_GTK
 Section $(GTK_SECTION_TITLE) SecGtk
 
-  Call CheckUserInstallRights
-  Pop $R1
-
-  SetOutPath $TEMP
-  SetOverwrite on
-  File /oname=gtk-runtime.exe ${GTK_RUNTIME_INSTALLER}
-  SetOverwrite off
-
-  Call DoWeNeedGtk
-  Pop $R0
-  Pop $R6
+  InitPluginsDir
+  StrCpy $R1 "$PLUGINSDIR\gtk.zip"
+!ifdef OFFLINE_INSTALLER
 
-  StrCmp $R0 "0" have_gtk
-  StrCmp $R0 "1" upgrade_gtk
-  StrCmp $R0 "2" upgrade_gtk
-  ;StrCmp $R0 "3" no_gtk no_gtk
+  SetOutPath $PLUGINSDIR
+  File /oname=gtk.zip "..\..\..\..\gtk_installer\gtk-runtime-${GTK_INSTALL_VERSION}.zip"
 
-  ;no_gtk:
-    StrCmp $R1 "NONE" gtk_no_install_rights
-    ClearErrors
-    ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT /D=$GTK_FOLDER'
-    IfErrors gtk_install_error done
-
-  upgrade_gtk:
-    StrCpy $GTK_FOLDER $R6
-    StrCmp $R0 "2" +2 ; Upgrade isn't optional
-    MessageBox MB_YESNO $(GTK_UPGRADE_PROMPT) /SD IDYES IDNO done
-    ClearErrors
-    ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT /D=$GTK_FOLDER'
-    IfErrors gtk_install_error done
+!else
 
-    gtk_install_error:
-      Delete "$TEMP\gtk-runtime.exe"
-      MessageBox MB_OK $(GTK_INSTALL_ERROR) /SD IDOK
-      Quit
-
-  have_gtk:
-    StrCpy $GTK_FOLDER $R6
-    StrCmp $R1 "NONE" done ; If we have no rights, we can't re-install
-    ; Even if we have a sufficient version of GTK+, we give user choice to re-install.
-    ClearErrors
-    ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT'
-    IfErrors gtk_install_error
-    Goto done
+  ; We need to download the GTK+ runtime
+  retry:
+  StrCpy $R2 "${DOWNLOADER_URL}?version=${PIDGIN_VERSION}&gtk_version=${GTK_INSTALL_VERSION}&dl_pkg=gtk"
+  DetailPrint "Downloading GTK+ Runtime ... ($R2)"
+  NSISdl::download /TIMEOUT=10000 $R2 $R1
+  Pop $R0
+  StrCmp $R0 "cancel" done
+  StrCmp $R0 "success" +2
+    MessageBox MB_RETRYCANCEL "$(PIDGIN_GTK_DOWNLOAD_ERROR) : $R1" /SD IDCANCEL IDRETRY retry IDCANCEL done
 
-  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-  ; end got_install rights
+!endif
+
+  SetOutPath "$INSTDIR"
 
-  gtk_no_install_rights:
-    ; Install GTK+ to Pidgin install dir
-    StrCpy $GTK_FOLDER $INSTDIR
-    ClearErrors
-    ExecWait '"$TEMP\gtk-runtime.exe" /L=$LANGUAGE $ISSILENT /D=$GTK_FOLDER'
-    IfErrors gtk_install_error
-      SetOverwrite on
-      ClearErrors
-      CopyFiles /FILESONLY "$GTK_FOLDER\bin\*.dll" $GTK_FOLDER
-      SetOverwrite off
-      IfErrors gtk_install_error
-        Delete "$GTK_FOLDER\bin\*.dll"
-        Goto done
-  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-  ; end gtk_no_install_rights
+  nsisunz::UnzipToLog $R1 "$INSTDIR"
+  Pop $R0
+  StrCmp $R0 "success" +2
+    DetailPrint "$R0" ;print error message to log
 
   done:
-    Delete "$TEMP\gtk-runtime.exe"
 SectionEnd ; end of GTK+ section
-!endif
 
 ;--------------------------------
 ;Pidgin Install Section
@@ -430,15 +376,12 @@
   Call CheckUserInstallRights
   Pop $R0
 
-  ; Get GTK+ lib dir if we have it..
-
-  StrCmp $R0 "NONE" pidgin_none
+  StrCmp $R0 "NONE" pidgin_install_files
   StrCmp $R0 "HKLM" pidgin_hklm pidgin_hkcu
 
   pidgin_hklm:
-    ReadRegStr $R1 HKLM ${GTK_REG_KEY} "Path"
     WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "" "$INSTDIR\pidgin.exe"
-    WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$R1\bin"
+    WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$INSTDIR\Gtk\bin"
     WriteRegStr HKLM ${PIDGIN_REG_KEY} "" "$INSTDIR"
     WriteRegStr HKLM ${PIDGIN_REG_KEY} "Version" "${PIDGIN_VERSION}"
     WriteRegStr HKLM "${PIDGIN_UNINSTALL_KEY}" "DisplayName" "Pidgin"
@@ -452,10 +395,6 @@
     Goto pidgin_install_files
 
   pidgin_hkcu:
-    ReadRegStr $R1 HKCU ${GTK_REG_KEY} "Path"
-    StrCmp $R1 "" 0 +2
-      ReadRegStr $R1 HKLM ${GTK_REG_KEY} "Path"
-
     WriteRegStr HKCU ${PIDGIN_REG_KEY} "" "$INSTDIR"
     WriteRegStr HKCU ${PIDGIN_REG_KEY} "Version" "${PIDGIN_VERSION}"
     WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "DisplayName" "Pidgin"
@@ -466,9 +405,6 @@
     WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${PIDGIN_UNINST_EXE}"
     Goto pidgin_install_files
 
-  pidgin_none:
-    ReadRegStr $R1 HKLM ${GTK_REG_KEY} "Path"
-
   pidgin_install_files:
     SetOutPath "$INSTDIR"
     ; Pidgin files
@@ -478,18 +414,8 @@
     Delete "$INSTDIR\plugins\liboscar.dll"
     Delete "$INSTDIR\plugins\libjabber.dll"
 
-    File /r ..\..\..\${PIDGIN_INSTALL_DIR}\*.*
-    !ifdef DEBUG
+    File /r /x locale ..\..\..\${PIDGIN_INSTALL_DIR}\*.*
     File "${PIDGIN_INSTALLER_DEPS}\exchndl.dll"
-    !endif
-
-    ; Install shfolder.dll if need be..
-    SearchPath $R4 "shfolder.dll"
-    StrCmp $R4 "" 0 got_shfolder
-      SetOutPath "$SYSDIR"
-      File "${PIDGIN_INSTALLER_DEPS}\shfolder.dll"
-      SetOutPath "$INSTDIR"
-    got_shfolder:
 
     ; Check if Perl is installed, if so add it to the AppPaths
     ReadRegStr $R2 HKLM ${PERL_REG_KEY} ""
@@ -574,6 +500,22 @@
 SectionGroupEnd
 
 ;--------------------------------
+;Translations
+
+!macro LANG_SECTION lang
+  ${MementoUnselectedSection} "${lang}" SecLang_${lang}
+    SetOutPath "$INSTDIR\locale\${lang}\LC_MESSAGES"
+    File /oname=pidgin.mo "..\..\..\${PIDGIN_INSTALL_DIR}\locale\${lang}\LC_MESSAGES\pidgin.mo"
+    SetOutPath "$INSTDIR"
+  ${MementoSectionEnd}
+!macroend
+SectionGroup $(TRANSLATIONS_SECTION_TITLE) SecTranslations
+  # pidgin-translations is generated based on the contents of the locale directory
+  !include "pidgin-translations.nsh"
+SectionGroupEnd
+${MementoSectionDone}
+
+;--------------------------------
 ;Spell Checking
 
 SectionGroup /e $(PIDGIN_SPELLCHECK_SECTION_TITLE) SecSpellCheck
@@ -667,6 +609,37 @@
   SectionEnd
 SectionGroupEnd
 
+Section /o $(DEBUG_SYMBOLS_SECTION_TITLE) SecDebugSymbols
+  InitPluginsDir
+
+  ; We need to download and extract the debug symbols
+  StrCpy $R1 "$PLUGINSDIR\pidgin-${PIDGIN_VERSION}-dbgsym.zip"
+!ifdef OFFLINE_INSTALLER
+
+  SetOutPath $PLUGINSDIR
+  File /oname=pidgin-${PIDGIN_VERSION}-dbgsym.zip "..\..\..\..\gtk_installer\gtk-runtime-${GTK_INSTALL_VERSION}.zip"
+
+!else
+
+  retry:
+  StrCpy $R2 "${DOWNLOADER_URL}?version=${PIDGIN_VERSION}&dl_pkg=dbgsym"
+  DetailPrint "Downloading Debug Symbols... ($R2)"
+  NSISdl::download /TIMEOUT=10000 $R2 $R1
+  Pop $R0
+  StrCmp $R0 "cancel" done
+  StrCmp $R0 "success" +2
+    MessageBox MB_RETRYCANCEL "$(PIDGIN_DEBUGSYMBOLS_ERROR) : $R2" /SD IDCANCEL IDRETRY retry IDCANCEL done
+
+!endif
+
+  nsisunz::UnzipToLog $R1 "$INSTDIR"
+  Pop $R0
+  StrCmp $R0 "success" +2
+    DetailPrint "$R0" ;print error message to log
+
+  done:
+SectionEnd
+
 ;--------------------------------
 ;Uninstaller Section
 
@@ -819,11 +792,20 @@
     Delete "$INSTDIR\softokn3.dll"
     Delete "$INSTDIR\ssl3.dll"
     Delete "$INSTDIR\${PIDGIN_UNINST_EXE}"
-    !ifdef DEBUG
     Delete "$INSTDIR\exchndl.dll"
-    !endif
     Delete "$INSTDIR\install.log"
 
+    ; Remove the debug symbols
+    RMDir /r "$INSTDIR\pidgin-${PIDGIN_VERSION}-dbgsym"
+
+    ; Remove the local GTK+ copy (if we're not just upgrading)
+    ${GetParameters} $R0
+    ClearErrors
+    ${GetOptions} "$R3" "/KEEPGTK=" $R1
+    IfErrors +2
+    StrCmp $R1 "1" +2
+    RMDir /r "$INSTDIR\Gtk"
+
     ;Try to remove Pidgin install dir (only if empty)
     RMDir "$INSTDIR"
 
@@ -849,10 +831,8 @@
 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
   !insertmacro MUI_DESCRIPTION_TEXT ${SecPidgin} \
         $(PIDGIN_SECTION_DESCRIPTION)
-!ifdef WITH_GTK
   !insertmacro MUI_DESCRIPTION_TEXT ${SecGtk} \
         $(GTK_SECTION_DESCRIPTION)
-!endif
 
   !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} \
         $(PIDGIN_SHORTCUTS_SECTION_DESCRIPTION)
@@ -1145,93 +1125,42 @@
 ; Call DoWeNeedGtk
 ; First Pop:
 ;   0 - We have the correct version
-;       Second Pop: Key where Version was found
 ;   1 - We have an old version that should work, prompt user for optional upgrade
-;       Second Pop: HKLM or HKCU depending on where GTK was found.
 ;   2 - We have an old version that needs to be upgraded
-;       Second Pop: HKLM or HKCU depending on where GTK was found.
 ;   3 - We don't have Gtk+ at all
-;       Second Pop: "NONE, HKLM or HKCU" depending on our rights..
 ;
 Function DoWeNeedGtk
-  ; Logic should be:
-  ; - Check what user rights we have (HKLM or HKCU)
-  ;   - If HKLM rights..
-  ;     - Only check HKLM key for GTK+
-  ;       - If installed to HKLM, check it and return.
-  ;   - If HKCU rights..
-  ;     - First check HKCU key for GTK+
-  ;       - if good or bad exists stop and ret.
-  ;     - If no hkcu gtk+ install, check HKLM
-  ;       - If HKLM ver exists but old, return as if no ver exits.
-  ;   - If no rights
-  ;     - Check HKLM
   Push $0
   Push $1
-  Push $2
-  Push $3
 
-  Call CheckUserInstallRights
-  Pop $1
-  StrCmp $1 "HKLM" check_hklm
-  StrCmp $1 "HKCU" check_hkcu check_hklm
-    check_hkcu:
-      ReadRegStr $0 HKCU ${GTK_REG_KEY} "Version"
-      StrCpy $2 "HKCU"
-      StrCmp $0 "" check_hklm have_gtk
+  IfFileExists "$INSTDIR\Gtk\CONTENTS" +3
+  Push "3"
+  Goto done
 
-    check_hklm:
-      ReadRegStr $0 HKLM ${GTK_REG_KEY} "Version"
-      StrCpy $2 "HKLM"
-      StrCmp $0 "" no_gtk have_gtk
-
-  have_gtk:
-    ; GTK+ is already installed; check version.
-    ; Change this to not even run the GTK installer if this version is already installed.
-    ${VersionCompare} ${GTK_INSTALL_VERSION} $0 $3
-    IntCmp $3 1 +1 good_version good_version
-    ${VersionCompare} ${GTK_MIN_VERSION} $0 $3
+  ClearErrors
+  ${ConfigRead} "$INSTDIR\Gtk\CONTENTS" "Bundle Version " $0
+  IfErrors 0 +3
+  Push "3"
+  Goto done
 
-      ; Bad version. If hklm ver and we have hkcu or no rights.. return no gtk
-      StrCmp $1 "NONE" no_gtk ; if no rights.. can't upgrade
-      StrCmp $1 "HKCU" 0 +2   ; if HKLM can upgrade..
-      StrCmp $2 "HKLM" no_gtk ; have hkcu rights.. if found hklm ver can't upgrade..
-      Push $2
-      IntCmp $3 1 +3
-        Push "1" ; Optional Upgrade
-        Goto done
-        Push "2" ; Mandatory Upgrade
-        Goto done
+  ${VersionCompare} ${GTK_INSTALL_VERSION} $0 $1
+  IntCmp $1 1 +3
+  Push "0" ; Have a good version
+  Goto done
 
-  good_version:
-    StrCmp $2 "HKLM" have_hklm_gtk have_hkcu_gtk
-      have_hkcu_gtk:
-        ; Have HKCU version
-        ReadRegStr $0 HKCU ${GTK_REG_KEY} "Path"
-        Goto good_version_cont
-
-      have_hklm_gtk:
-        ReadRegStr $0 HKLM ${GTK_REG_KEY} "Path"
-        Goto good_version_cont
-
-    good_version_cont:
-      Push $0  ; The path to existing GTK+
-      Push "0"
-      Goto done
-
-  no_gtk:
-    Push $1 ; our rights
-    Push "3"
-    Goto done
+  ${VersionCompare} ${GTK_MIN_VERSION} $0 $1
+  IntCmp $1 1 +3
+  Push "1" ; Optional Upgrade
+  Goto done
+  Push "2" ; Mandatory Upgrade
+  Goto done
 
   done:
-  ; The top two items on the stack are what we want to return
-  Exch 4
+  ; The item on the stack is what we want to return
+  Exch
   Pop $1
-  Exch 4
+  Exch
   Pop $0
-  Pop $3
-  Pop $2
 FunctionEnd
 
 
@@ -1302,6 +1231,8 @@
   DeleteRegValue HKCU "${OLD_GAIM_REG_KEY}" "Installer Language"
   WriteRegStr HKCU "${PIDGIN_REG_KEY}" "Installer Language" "$R0"
 
+  ${MementoSectionRestore}
+
   !insertmacro SetSectionFlag ${SecSpellCheck} ${SF_RO}
   !insertmacro UnselectSection ${SecSpellCheck}
 
@@ -1346,12 +1277,10 @@
   IfSilent 0 +2
     StrCpy $ISSILENT "/NOUI"
 
-  StrCpy $LANGUAGE_SET "0"
   ClearErrors
   ${GetOptions} "$R3" "/L=" $R1
-  IfErrors +4
+  IfErrors +3
   StrCpy $LANGUAGE $R1
-  StrCpy $LANGUAGE_SET "1"
   Goto skip_lang
 
   ; Select Language
@@ -1416,17 +1345,14 @@
 FunctionEnd
 
 Function .onInstSuccess
-  ; NSIS doesn't appear to save the language when in Silent Mode, so we do so manually
-  IfSilent 0 done
 
-  StrCmp $LANGUAGE_SET "0" done
+  ${MementoSectionSave}
 
-  WriteRegStr "${MUI_LANGDLL_REGISTRY_ROOT}" "${MUI_LANGDLL_REGISTRY_KEY}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" $LANGUAGE
-
-  done:
 FunctionEnd
 
+
 Function un.onInit
+
   Call un.RunCheck
   StrCpy $name "Pidgin ${PIDGIN_VERSION}"
 ;LogSet on
@@ -1440,107 +1366,23 @@
 
 Function preWelcomePage
   Push $R0
-
-!ifndef WITH_GTK
-  ; If this installer dosn't have GTK, check whether we need it.
-  ; We do this here and not in .onInit because language change in
-  ; .onInit doesn't take effect until it is finished.
-  Call DoWeNeedGtk
-  Pop $R0
-  Pop $GTK_FOLDER
-
-  IntCmp $R0 1 done done
-  MessageBox MB_OK $(GTK_INSTALLER_NEEDED) /SD IDOK
-  Quit
-
-  done:
-
-!else
   Push $R1
-  Push $R2
 
   Call DoWeNeedGtk
   Pop $R0
-  Pop $R2
-  IntCmp $R0 1 gtk_selection_done gtk_not_mandatory
+  IntCmp $R0 1 done gtk_not_mandatory
     ; Make the GTK+ Section RO if it is required.
     !insertmacro SetSectionFlag ${SecGtk} ${SF_RO}
-    Goto gtk_selection_done
+    Goto done
   gtk_not_mandatory:
     ; Don't select the GTK+ section if we already have this version or newer installed
     !insertmacro UnselectSection ${SecGtk}
-  gtk_selection_done:
-
-  ; If on Win95/98/ME warn them that the GTK+ version wont work
-  ${Unless} ${IsNT}
-    !insertmacro UnselectSection ${SecGtk}
-    !insertmacro SetSectionFlag ${SecGtk} ${SF_RO}
-    MessageBox MB_OK $(GTK_WINDOWS_INCOMPATIBLE) /SD IDOK
-    IntCmp $R0 1 done done ; Upgrade isn't optional - abort if we don't have a suitable version
-    Quit
-  ${EndIf}
 
   done:
-  Pop $R2
-  Pop $R1
-!endif
-  Pop $R0
-FunctionEnd
-
-!ifdef WITH_GTK
-Function preGtkDirPage
-  Push $R0
-  Push $R1
-  Call DoWeNeedGtk
-  Pop $R0
-  Pop $R1
-
-  IntCmp $R0 2 +2 +2 no_gtk
-  StrCmp $R0 "3" no_gtk no_gtk
-
-  ; Don't show dir selector.. Upgrades are done to existing path..
   Pop $R1
   Pop $R0
-  Abort
-
-  no_gtk:
-    StrCmp $R1 "NONE" 0 no_gtk_cont
-      ; Got no install rights..
-      Pop $R1
-      Pop $R0
-      Abort
-    no_gtk_cont:
-      ; Suggest path..
-      StrCmp $R1 "HKCU" 0 hklm1
-        ${GetParent} $SMPROGRAMS $R0
-        ${GetParent} $R0 $R0
-        StrCpy $R0 "$R0\GTK\2.0"
-        Goto got_path
-      hklm1:
-        StrCpy $R0 "${GTK_DEFAULT_INSTALL_PATH}"
-
-   got_path:
-     StrCpy $name "GTK+ ${GTK_INSTALL_VERSION}"
-     StrCpy $GTK_FOLDER $R0
-     Pop $R1
-     Pop $R0
 FunctionEnd
 
-Function postGtkDirPage
-  Push $R0
-  StrCpy $name "Pidgin ${PIDGIN_VERSION}"
-  Push $GTK_FOLDER
-  Call VerifyDir
-  Pop $R0
-  StrCmp $R0 "0" 0 done
-    MessageBox MB_OK $(GTK_BAD_INSTALL_PATH) /SD IDOK
-    Pop $R0
-    Abort
-  done:
-  Pop $R0
-FunctionEnd
-!endif
-
 ; SpellChecker Related Functions
 ;-------------------------------
 
@@ -1668,6 +1510,8 @@
   Pop $R0 ;This is the language code
   Push $R1
 
+  InitPluginsDir
+
   IfErrors done ; We weren't able to convert the section to lang code
 
   retry:
@@ -1702,12 +1546,12 @@
   IntCmp $R0 15 installed
 
   ; If this is the check after installation, don't infinite loop on failure
-  StrCmp $R1 "$TEMP\aspell_installer.exe" 0 +3
+  StrCmp $R1 "$PLUGINSDIR\aspell_installer.exe" 0 +3
     StrCpy $R0 $(ASPELL_INSTALL_FAILED)
     Goto done
 
   ; We need to download and install aspell
-  StrCpy $R1 "$TEMP\aspell_installer.exe"
+  StrCpy $R1 "$PLUGINSDIR\aspell_installer.exe"
   StrCpy $R2 "${DOWNLOADER_URL}?version=${PIDGIN_VERSION}&dl_pkg=aspell_core"
   DetailPrint "Downloading Aspell... ($R2)"
   NSISdl::download /TIMEOUT=10000 $R2 $R1
@@ -1743,12 +1587,12 @@
   StrCmp $R2 "" 0 installed
 
   ; If this is the check after installation, don't infinite loop on failure
-  StrCmp $R1 "$TEMP\aspell_dict-$R0.exe" 0 +3
+  StrCmp $R1 "$PLUGINSDIR\aspell_dict-$R0.exe" 0 +3
     StrCpy $R0 $(ASPELL_INSTALL_FAILED)
     Goto done
 
   ; We need to download and install aspell
-  StrCpy $R1 "$TEMP\aspell_dict-$R0.exe"
+  StrCpy $R1 "$PLUGINSDIR\aspell_dict-$R0.exe"
   StrCpy $R3 "${DOWNLOADER_URL}?version=${PIDGIN_VERSION}&dl_pkg=lang_$R0"
   DetailPrint "Downloading the Aspell $R0 Dictionary... ($R3)"
   NSISdl::download /TIMEOUT=10000 $R3 $R1
@@ -1758,10 +1602,10 @@
     Goto done
   ; Use a specific temporary $OUTDIR for each dictionary because the installer doesn't clean up after itself
   StrCpy $R4 "$OUTDIR"
-  SetOutPath "$TEMP\aspell_dict-$R0"
+  SetOutPath "$PLUGINSDIR\aspell_dict-$R0"
   ExecWait '"$R1"'
   SetOutPath "$R4"
-  RMDir /r "$TEMP\aspell_dict-$R0"
+  RMDir /r "$PLUGINSDIR\aspell_dict-$R0"
   Delete $R1
   Goto check ; Check that it is now installed correctly
 
--- a/pidgin/win32/nsis/translations/afrikaans.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/afrikaans.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -12,7 +12,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Die installeerder loop reeds."
 !define PIDGIN_IS_RUNNING			"Pidgin loop reeds rens.  Verlaat Pidgin eers en probeer dan weer."
-!define GTK_INSTALLER_NEEDED			"Die GTK+-looptydomgewing is f soek f moet opgegradeer word.$\rInstalleer asb. v{GTK_MIN_VERSION} of hor van die GTK+-looptyd"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Volgende >"
@@ -31,8 +30,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Skep 'n Begin-kieslysinskrywing vir Pidgin"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"'n Ou weergawe van die GTK+-looptyd is gevind. Wil u opgradeer?$\rLet wel: $(^Name) werk dalk net as u so maak."
-!define GTK_WINDOWS_INCOMPATIBLE		"Windows 95/98/Me is onversoenbaar met GTK+ 2.8.0 en nuwer.  GTK+ ${GTK_INSTALL_VERSION} sal nie installeer nie.$\rIndien u nie GTK+ ${GTK_MIN_VERSION} of nuwer reeds genstalleer het nie, sal die installasie nou staak."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Besoek die WinPidgin-webblad"
@@ -41,8 +38,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Kan nie die tans genstalleerde weergawe van Pidgin verwyder nie. Die nuwe weergawe sal genstalleer word sonder om die huidige een te verwyder."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Fout met installering van GTK+-looptyd."
-!define GTK_BAD_INSTALL_PATH			"Die pad wat u verskaf het, is ontoeganklik of kan nie geskep word nie."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"URI-hanteerders"
--- a/pidgin/win32/nsis/translations/albanian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/albanian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,8 +8,6 @@
 ;;  Author: Besnik Bleta <besnik@spymac.com>
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"Ose mungon mjedisi GTK+ runtime ose lyp përditësim.$\rJu lutem instaloni GTK+ runtime v${GTK_MIN_VERSION} ose më të vonshëm"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Më tej >"
@@ -23,14 +21,11 @@
 
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"U gjet një version i vjetër për GTK+ runtime. Doni të përditësohet?$\rShënim: Pidgin-i mund të mos punojë nëse nuk e bëni."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Vizitoni Faqen Web të Pidgin-it për Windows"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"gabim gjatë instalimit të GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"Shtegu që treguat nuk mund të arrihet ose krijohet."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Çinstaluesi nuk gjeti dot zëra regjistri për Pidgin-in.$\rKa mundësi që këtë zbatim ta ketë instaluar një tjetër përdorues."
--- a/pidgin/win32/nsis/translations/arabic.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/arabic.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -9,7 +9,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"  ."
 !define PIDGIN_IS_RUNNING			"  .        ."
-!define GTK_INSTALLER_NEEDED			" + (GTK+)    .$\r   v${GTK_MIN_VERSION}     +"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			" >"
@@ -29,8 +28,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"     "
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"     +.  ˿$\r:    $(^Name)   ."
-!define GTK_WINDOWS_INCOMPATIBLE		"   95/98/Me  + 2.8.0  .  + ${GTK_INSTALL_VERSION}  .$\r    + ${GTK_MIN_VERSION}      ."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"     "
@@ -39,8 +36,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"    .        ."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"    +."
-!define GTK_BAD_INSTALL_PATH			"       ."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		" "
--- a/pidgin/win32/nsis/translations/basque.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/basque.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -1,80 +1,75 @@
-;;
-;;  basque.nsh
-;;Abio-menua - Istanteko Mezularitza
-;;  Basque language strings for the Windows Pidgin NSIS installer.
-;;  Windows Code page: 1252
-;;
-;;  Author: Mikel Pascual Aldabaldetreku <mikel.paskual@gmail.com>, 2007.
-
-; Startup Checks
-!define INSTALLER_IS_RUNNING			"Instalatzailea martxan dago."
-!define PIDGIN_IS_RUNNING			"Pidgin istantzia bat dago martxan. Pidgin itxi eta berriro saiatu."
-!define GTK_INSTALLER_NEEDED			"GTK+ exekuzio-ingurunea falta da, edo eguneratu egin beharko litzateke.$\rGTK+ exekuzio-ingurunearen ${GTK_MIN_VERSION} bertsioa edo berriagoa instalatu"
-
-; License Page
-!define PIDGIN_LICENSE_BUTTON			"Jarraitu >"
-!define PIDGIN_LICENSE_BOTTOM_TEXT		"GNU Lizentzia Orokor Publikopean (GPL) argitaratzen da $(^Name). Informatzeko helburu soilarekin aurkezten da hemen lizentzia. $_CLICK"
-
-; Components Page
-!define PIDGIN_SECTION_TITLE			"Pidgin Istanteko Mezularitza Bezeroa (beharrezkoa)"
-!define GTK_SECTION_TITLE			"GTK+ exekuzio ingurunea (beharrezkoa)"
-!define PIDGIN_SHORTCUTS_SECTION_TITLE		"Lasterbideak"
-!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Mahaigaina"
-!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Abio-menua"
-!define PIDGIN_SECTION_DESCRIPTION		"Funtsezko Pidgin fitxategi eta dll-ak"
-!define GTK_SECTION_DESCRIPTION		"Plataforma anitzeko GUI tresna-sorta, Pidgin-ek erabilia"
-
-!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"Pidgin abiarazteko lasterbideak"
-!define PIDGIN_DESKTOP_SHORTCUT_DESC		"Pidgin-entzako lasterbidea Mahaigainean"
-!define PIDGIN_STARTMENU_SHORTCUT_DESC		"Pidgin-entzako lasterbidea Abio-Menuan"
-
-; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"GTK+ exekuzio-ingurunearen bertsio zahar bat aurkitu da. Eguneratu egin nahi al duzu?$\rOharra: Bestela, posible da $(^Name) ez ibiltzea."
-!define GTK_WINDOWS_INCOMPATIBLE		"GTK+ 2.8.0 eta berriagoekin bateraezinak dira Windows 95/98/Me.  Ez da GTK+ ${GTK_INSTALL_VERSION} instalatuko.$\rJadanik ez badaukazu GTK+ ${GTK_MIN_VERSION} edo berriagorik instalatuta, bertan behera utziko da instalazioa."
-
-; Installer Finish Page
-!define PIDGIN_FINISH_VISIT_WEB_SITE		"Pidgin Webgunera etorri"
-
-; Pidgin Section Prompts and Texts
-!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Ezin izan da jadanik instalatuta zegoen Pidgin bertsioa kendu. Aurreko bertsioa kendu gabe instalatuko da bertsio berria."
-
-; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Errorea GTK+ exekuzio-ingurunea instalatzean."
-!define GTK_BAD_INSTALL_PATH			"The path you entered can not be accessed or created."
-
-; URL Handler section
-!define URI_HANDLERS_SECTION_TITLE		"URI Kudeatzaileak"
-
-; Uninstall Section Prompts
-!define un.PIDGIN_UNINSTALL_ERROR_1		"Ezin izan dira Pidgin-en erregistro-sarrerak aurkitu.$\rZiurrenik, beste erabiltzaile batek instalatu zuen aplikazio hau."
-!define un.PIDGIN_UNINSTALL_ERROR_2		"Ez daukazu aplikazio hau kentzeko baimenik."
-
-; Spellcheck Section Prompts
-!define PIDGIN_SPELLCHECK_SECTION_TITLE	"Zuzentzaile Ortografikoa"
-!define PIDGIN_SPELLCHECK_ERROR		"Errorea Zuzentzaile Ortografikoa instalatzean"
-!define PIDGIN_SPELLCHECK_DICT_ERROR		"Errorea Zuzentzaile Ortografikoarentzako hiztegia instalatzean"
-!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"Zuzentzaile Ortografikoa.  (Internet konexioa behar du instalatzeko)"
-!define ASPELL_INSTALL_FAILED			"Ezin izan da instalatu"
-!define PIDGIN_SPELLCHECK_BRETON		"Britaniera"
-!define PIDGIN_SPELLCHECK_CATALAN		"Katalana"
-!define PIDGIN_SPELLCHECK_CZECH		"Txekiera"
-!define PIDGIN_SPELLCHECK_WELSH		"Gaelikoa"
-!define PIDGIN_SPELLCHECK_DANISH		"Daniera"
-!define PIDGIN_SPELLCHECK_GERMAN		"Alemana"
-!define PIDGIN_SPELLCHECK_GREEK		"Grekoa"
-!define PIDGIN_SPELLCHECK_ENGLISH		"Ingelesa"
-!define PIDGIN_SPELLCHECK_ESPERANTO		"Esperantoa"
-!define PIDGIN_SPELLCHECK_SPANISH		"Gaztelania"
-!define PIDGIN_SPELLCHECK_FAROESE		"Faroera"
-!define PIDGIN_SPELLCHECK_FRENCH		"Frantsesa"
-!define PIDGIN_SPELLCHECK_ITALIAN		"Italiera"
-!define PIDGIN_SPELLCHECK_DUTCH		"Nederlandera"
-!define PIDGIN_SPELLCHECK_NORWEGIAN		"Norvegiera"
-!define PIDGIN_SPELLCHECK_POLISH		"Poloniera"
-!define PIDGIN_SPELLCHECK_PORTUGUESE		"Portugesa"
-!define PIDGIN_SPELLCHECK_ROMANIAN		"Errumaniera"
-!define PIDGIN_SPELLCHECK_RUSSIAN		"Errusiera"
-!define PIDGIN_SPELLCHECK_SLOVAK		"Eslovakiera"
-!define PIDGIN_SPELLCHECK_SWEDISH		"Suediera"
-!define PIDGIN_SPELLCHECK_UKRAINIAN		"Ukraniera"
-
+;;
+;;  basque.nsh
+;;Abio-menua - Istanteko Mezularitza
+;;  Basque language strings for the Windows Pidgin NSIS installer.
+;;  Windows Code page: 1252
+;;
+;;  Author: Mikel Pascual Aldabaldetreku <mikel.paskual@gmail.com>, 2007.
+
+; Startup Checks
+!define INSTALLER_IS_RUNNING			"Instalatzailea martxan dago."
+!define PIDGIN_IS_RUNNING			"Pidgin istantzia bat dago martxan. Pidgin itxi eta berriro saiatu."
+
+; License Page
+!define PIDGIN_LICENSE_BUTTON			"Jarraitu >"
+!define PIDGIN_LICENSE_BOTTOM_TEXT		"GNU Lizentzia Orokor Publikopean (GPL) argitaratzen da $(^Name). Informatzeko helburu soilarekin aurkezten da hemen lizentzia. $_CLICK"
+
+; Components Page
+!define PIDGIN_SECTION_TITLE			"Pidgin Istanteko Mezularitza Bezeroa (beharrezkoa)"
+!define GTK_SECTION_TITLE			"GTK+ exekuzio ingurunea (beharrezkoa)"
+!define PIDGIN_SHORTCUTS_SECTION_TITLE		"Lasterbideak"
+!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Mahaigaina"
+!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Abio-menua"
+!define PIDGIN_SECTION_DESCRIPTION		"Funtsezko Pidgin fitxategi eta dll-ak"
+!define GTK_SECTION_DESCRIPTION		"Plataforma anitzeko GUI tresna-sorta, Pidgin-ek erabilia"
+
+!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"Pidgin abiarazteko lasterbideak"
+!define PIDGIN_DESKTOP_SHORTCUT_DESC		"Pidgin-entzako lasterbidea Mahaigainean"
+!define PIDGIN_STARTMENU_SHORTCUT_DESC		"Pidgin-entzako lasterbidea Abio-Menuan"
+
+; GTK+ Directory Page
+
+; Installer Finish Page
+!define PIDGIN_FINISH_VISIT_WEB_SITE		"Pidgin Webgunera etorri"
+
+; Pidgin Section Prompts and Texts
+!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Ezin izan da jadanik instalatuta zegoen Pidgin bertsioa kendu. Aurreko bertsioa kendu gabe instalatuko da bertsio berria."
+
+; GTK+ Section Prompts
+
+; URL Handler section
+!define URI_HANDLERS_SECTION_TITLE		"URI Kudeatzaileak"
+
+; Uninstall Section Prompts
+!define un.PIDGIN_UNINSTALL_ERROR_1		"Ezin izan dira Pidgin-en erregistro-sarrerak aurkitu.$\rZiurrenik, beste erabiltzaile batek instalatu zuen aplikazio hau."
+!define un.PIDGIN_UNINSTALL_ERROR_2		"Ez daukazu aplikazio hau kentzeko baimenik."
+
+; Spellcheck Section Prompts
+!define PIDGIN_SPELLCHECK_SECTION_TITLE	"Zuzentzaile Ortografikoa"
+!define PIDGIN_SPELLCHECK_ERROR		"Errorea Zuzentzaile Ortografikoa instalatzean"
+!define PIDGIN_SPELLCHECK_DICT_ERROR		"Errorea Zuzentzaile Ortografikoarentzako hiztegia instalatzean"
+!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"Zuzentzaile Ortografikoa.  (Internet konexioa behar du instalatzeko)"
+!define ASPELL_INSTALL_FAILED			"Ezin izan da instalatu"
+!define PIDGIN_SPELLCHECK_BRETON		"Britaniera"
+!define PIDGIN_SPELLCHECK_CATALAN		"Katalana"
+!define PIDGIN_SPELLCHECK_CZECH		"Txekiera"
+!define PIDGIN_SPELLCHECK_WELSH		"Gaelikoa"
+!define PIDGIN_SPELLCHECK_DANISH		"Daniera"
+!define PIDGIN_SPELLCHECK_GERMAN		"Alemana"
+!define PIDGIN_SPELLCHECK_GREEK		"Grekoa"
+!define PIDGIN_SPELLCHECK_ENGLISH		"Ingelesa"
+!define PIDGIN_SPELLCHECK_ESPERANTO		"Esperantoa"
+!define PIDGIN_SPELLCHECK_SPANISH		"Gaztelania"
+!define PIDGIN_SPELLCHECK_FAROESE		"Faroera"
+!define PIDGIN_SPELLCHECK_FRENCH		"Frantsesa"
+!define PIDGIN_SPELLCHECK_ITALIAN		"Italiera"
+!define PIDGIN_SPELLCHECK_DUTCH		"Nederlandera"
+!define PIDGIN_SPELLCHECK_NORWEGIAN		"Norvegiera"
+!define PIDGIN_SPELLCHECK_POLISH		"Poloniera"
+!define PIDGIN_SPELLCHECK_PORTUGUESE		"Portugesa"
+!define PIDGIN_SPELLCHECK_ROMANIAN		"Errumaniera"
+!define PIDGIN_SPELLCHECK_RUSSIAN		"Errusiera"
+!define PIDGIN_SPELLCHECK_SLOVAK		"Eslovakiera"
+!define PIDGIN_SPELLCHECK_SWEDISH		"Suediera"
+!define PIDGIN_SPELLCHECK_UKRAINIAN		"Ukraniera"
+
--- a/pidgin/win32/nsis/translations/bulgarian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/bulgarian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,9 +8,6 @@
 ;;
 
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"GTK+ runtime      .$\r   v${GTK_MIN_VERSION}  -"
-
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin     ( )"
 !define GTK_SECTION_TITLE			"GTK+ Runtime  (required)"
@@ -19,11 +16,8 @@
 
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"  GTK+ runtime  .    ?$\rNote: Pidgin        ."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"    GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"        ."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"         Pidgin.$\r      ."
--- a/pidgin/win32/nsis/translations/catalan.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/catalan.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -12,7 +12,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"L'instal.lador encara est executant-se."
 !define PIDGIN_IS_RUNNING			"Hi ha una instncia del Pidgin executant-se. Surt del Pidgin i torna a intentar-ho."
-!define GTK_INSTALLER_NEEDED			"L'entorn d'execuci GTK+ no existeix o necessita sser actualitzat.$\rSius plau instal.la la versi${GTK_MIN_VERSION} o superior de l'entonr GTK+"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Segent >"
@@ -34,14 +33,11 @@
 
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"S'ha trobat una versi antiga de l'entorn d'execuci GTK. Vols actualitzar-la?$\rNota: $(^Name) no funcionar sino ho fas."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visita la pgina web de Pidgin per Windows"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Error installlant l'entorn d'execuci GTK+."
-!define GTK_BAD_INSTALL_PATH			"El directori que has introdut no pot sser accedit o creat."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"L'instal.lador podria no trobar les entrades del registre de Pidgin.$\rProbablement un altre usuari ha instal.lat aquesta aplicaci."
--- a/pidgin/win32/nsis/translations/czech.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/czech.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,8 +8,6 @@
 ;;  Version 2
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"GTK+ runtime buto chyb, nebo je poteba provst upgrade.$\rProvete instalaci verze${GTK_MIN_VERSION} nebo vy."
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Dal >"
@@ -23,14 +21,11 @@
 
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Byla nalezena star verze GTK+ runtime. Chcete provst upgrade?$\rUpozornn: Bez upgradu $(^Name) nemus pracovat sprvn."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Navtvit Windows Pidgin Web Page"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Chyba pi instalaci GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"Zadan cesta je nedostupn, nebo ji nelze vytvoit."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Odinstaln proces neme najt zznamy pro Pidgin v registrech.$\rPravdpodobn instalaci tto aplikace provedl jin uivatel."
--- a/pidgin/win32/nsis/translations/danish.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/danish.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,9 +8,6 @@
 ;;  Version 2
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"GTK+ runtime environment enten mangler eller skal opgraderes.$\rInstallr venligst GTK+ runtime version v${GTK_MIN_VERSION} eller hjere."
-
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Nste >"
 !define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) er frigivet under GPL licensen. Licensen er kun medtaget her til generel orientering. $_CLICK"
@@ -23,14 +20,11 @@
 
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Der blev fundet en ldre version af GTK+ runtime. nsker du at opgradere?$\rNB: $(^Name) virker muligvis ikke uden denne opgradering."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Besg Windows Pidgin's hjemmeside"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Fejl under installeringen af GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"Stien du har angivet kan ikke findes eller oprettes."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Afinstallationen kunne ikke finde Pidgin i registreringsdatabasen.$\rMuligvis har en anden bruger installeret programmet."
--- a/pidgin/win32/nsis/translations/dutch.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/dutch.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -11,7 +11,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Er is al een installatie actief."
 !define PIDGIN_IS_RUNNING			"Pidgin wordt op dit moment uitgevoerd. Sluit Pidgin af en start de installatie opnieuw."
-!define GTK_INSTALLER_NEEDED			"De GTK+ runtime-omgeving is niet aanwezig of moet vernieuwd worden.$\rInstalleer v${GTK_MIN_VERSION} of nieuwer van de GTK+ runtime-omgeving"
 
 
 ; License Page
@@ -26,14 +25,11 @@
 
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Er is een oude versie van GTK+ gevonden. Wilt u deze bijwerken?$\rLet op: $(^Name) werkt misschien niet als u dit niet doet."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Neem een kijkje op de Windows Pidgin webpagina"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Fout bij installatie van GTK+ runtime omgeving."
-!define GTK_BAD_INSTALL_PATH			"Het door u gegeven pad kan niet benaderd worden."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Het verwijderingsprogramma voor Pidgin kon geen register-ingangen voor Pidgin vinden.$\rWaarschijnlijk heeft een andere gebruiker het programma genstalleerd."
--- a/pidgin/win32/nsis/translations/english.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/english.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -14,7 +14,6 @@
 ; Startup Checks
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING INSTALLER_IS_RUNNING			"The installer is already running."
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_IS_RUNNING			"An instance of Pidgin is currently running.  Please exit Pidgin and try again."
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_INSTALLER_NEEDED			"The GTK+ runtime environment is either missing or needs to be upgraded.$\rPlease install v${GTK_MIN_VERSION} or higher of the GTK+ runtime"
 
 ; License Page
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_LICENSE_BUTTON			"Next >"
@@ -32,10 +31,9 @@
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"Shortcuts for starting Pidgin"
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_DESKTOP_SHORTCUT_DESC		"Create a shortcut to Pidgin on the Desktop"
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_STARTMENU_SHORTCUT_DESC		"Create a Start Menu entry for Pidgin"
+!insertmacro PIDGIN_MACRO_DEFAULT_STRING DEBUG_SYMBOLS_SECTION_TITLE "Debug Symbols (for reporting crashes)"
 
 ; GTK+ Directory Page
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_UPGRADE_PROMPT			"An old version of the GTK+ runtime was found. Do you wish to upgrade?$\rNote: $(^Name) may not work unless you do."
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_WINDOWS_INCOMPATIBLE		"Windows 95/98/Me are incompatible with GTK+ 2.8.0 or newer.  GTK+ ${GTK_INSTALL_VERSION} will not be installed.$\rIf you don't have GTK+ ${GTK_MIN_VERSION} or newer already installed, installation will now abort."
 
 ; Installer Finish Page
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_FINISH_VISIT_WEB_SITE		"Visit the Pidgin Web Page"
@@ -44,8 +42,6 @@
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Unable to uninstall the currently installed version of Pidgin. The new version will be installed without removing the currently installed version."
 
 ; GTK+ Section Prompts
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_INSTALL_ERROR			"Error installing GTK+ runtime."
-!insertmacro PIDGIN_MACRO_DEFAULT_STRING GTK_BAD_INSTALL_PATH			"The path you entered can not be accessed or created."
 
 ; URL Handler section
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING URI_HANDLERS_SECTION_TITLE		"URI Handlers"
@@ -83,3 +79,6 @@
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_SPELLCHECK_SWEDISH		"Swedish"
 !insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_SPELLCHECK_UKRAINIAN		"Ukrainian"
 
+!insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_DEBUGSYMBOLS_ERROR "Error Installing Debug Symbols"
+
+!insertmacro PIDGIN_MACRO_DEFAULT_STRING PIDGIN_GTK_DOWNLOAD_ERROR "Error Downloading the GTK+ Runtime"
--- a/pidgin/win32/nsis/translations/finnish.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/finnish.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -13,7 +13,6 @@
 ; Startup checks
 !define INSTALLER_IS_RUNNING			"Asennusohjelma on jo kynniss."
 !define PIDGIN_IS_RUNNING			"Pidgin on tll hetkell kynniss. Poistu Pidginist ja yrit uudelleen."
-!define GTK_INSTALLER_NEEDED			"Ajonaikainen GTK+-ymprist joko puuttuu tai tarvitsee pivityst.$\rOle hyv ja asenna v${GTK_MIN_VERSION} tai uudempi ajonaikainen GTK+-ymprist."
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Seuraava >"
@@ -33,14 +32,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC   	"Tee Pidgin-pikakuvake kynnistysvalikkoon"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Vanha versio ajonaikaisesta GTK+-ympristst lytynyt. Tahdotko pivitt?$\rHuomio: $(^Name) ei vlttmtt toimi mikli jtt pivittmtt."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Vieraile Pidginin WWW-sivustolla"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Virhe asennettaessa ajonaikaista GTK+-ymprist."
-!define GTK_BAD_INSTALL_PATH			"Antamasi polku ei toimi tai sit ei voi luoda."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"URI-ksittelijt"
--- a/pidgin/win32/nsis/translations/french.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/french.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -1,4 +1,3 @@
-;;  vim:syn=winbatch:fileencoding=cp1252:
 ;;
 ;;  french.nsh
 ;;
@@ -15,7 +14,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Le programme d'installation est dj en cours d'excution."
 !define PIDGIN_IS_RUNNING				"Une instance de Pidgin est en cours d'excution. Veuillez quitter Pidgin et ressayer."
-!define GTK_INSTALLER_NEEDED			"Les bibliothques de l'environnement GTK+ ne sont pas installes ou ont besoin d'une mise  jour.$\rVeuillez installer la version ${GTK_MIN_VERSION} ou plus rcente des bibliothques GTK+."
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Suivant >"
@@ -35,8 +33,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Crer un raccourci pour Pidgin dans le menu Dmarrer"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Une ancienne version des bibliothques GTK+ a t trouve. Voulez-vous la mettre  jour ?$\rNote : $(^Name) peut ne pas fonctionner si vous ne le faites pas."
-!define GTK_WINDOWS_INCOMPATIBLE		"Windows 95/98/Me est incompatible avec GTK+ version 2.8.0 ou plus rcentes.  GTK+ ${GTK_INSTALL_VERSION} ne sera pas install.$\rSi vous n'avez pas install GTK+ version ${GTK_MIN_VERSION} ou pkus rcente, l'installation s'arrtera."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visitez la page web de Pidgin Windows" 
@@ -45,8 +41,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Impossible de dsinstaller la version de Pidgin en place. La nouvelle version sera installe sans supprimer la version en place."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Erreur lors de l'installation des bibliothques GTK+"
-!define GTK_BAD_INSTALL_PATH			"Le dossier d'installation ne peut pas tre cr ou n'est pas accessible."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"Gestion des liens (URI)"
--- a/pidgin/win32/nsis/translations/galician.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/galician.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -9,7 +9,6 @@
 ;;
 
 ; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"O entorno de execucin de GTK+ falta ou necesita ser actualizado.$\rPor favor, instale a versin v${GTK_MIN_VERSION} do executable GTK+ ou algunha posterior."
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Seguinte >"
@@ -23,14 +22,11 @@
 
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Atopouse unha versin antiga do executable de GTK+. Desexa actualizala?$\rObservacin: $(^Name) non funcionar a menos que o faga."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visite a pxina Web de Pidgin Windows"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Erro ao instalar o executable GTK+."
-!define GTK_BAD_INSTALL_PATH			"Non se puido acceder ou crear a ruta que vd. indicou."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "O desinstalador non puido atopar as entradas no rexistro de Pidgin.$\r probable que outro usuario instalara a aplicacin."
--- a/pidgin/win32/nsis/translations/german.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/german.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -1,82 +1,77 @@
-;; vim:syn=winbatch:encoding=cp1252:
-;;
-;;  german.nsh
-;;
-;;  German language strings for the Windows Pidgin NSIS installer.
-;;  Windows Code page: 1252
-;;
-;;  Author: Bjoern Voigt <bjoern@cs.tu-berlin.de>, 2008.
-;;  Version 3
-;;
- 
-; Startup checks
-!define INSTALLER_IS_RUNNING			"Der Installer luft schon."
-!define PIDGIN_IS_RUNNING			"Eine Instanz von Pidgin luft momentan schon. Beenden Sie Pidgin und versuchen Sie es nochmal."
-!define GTK_INSTALLER_NEEDED			"Die GTK+ Runtime Umgebung fehlt entweder oder muss aktualisiert werden.$\rBitte installieren Sie v${GTK_MIN_VERSION} oder hher der GTK+ Runtime"
- 
-; License Page
-!define PIDGIN_LICENSE_BUTTON			"Weiter >"
-!define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) wird unter der GNU General Public License (GPL) verffentlicht. Die Lizenz dient hier nur der Information. $_CLICK"
- 
-; Components Page
-!define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (erforderlich)"
-!define GTK_SECTION_TITLE			"GTK+ Runtime Umgebung (erforderlich)"
-!define PIDGIN_SHORTCUTS_SECTION_TITLE	"Verknpfungen"
-!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Desktop"
-!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Startmen"
-!define PIDGIN_SECTION_DESCRIPTION		"Pidgin-Basisdateien und -DLLs"
-!define GTK_SECTION_DESCRIPTION		"Ein Multi-Plattform-GUI-Toolkit, verwendet von Pidgin"
-
-!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"Verknpfungen zum Starten von Pidgin"
-!define PIDGIN_DESKTOP_SHORTCUT_DESC	"Erstellt eine Verknpfung zu Pidgin auf dem Desktop"
-!define PIDGIN_STARTMENU_SHORTCUT_DESC	"Erstellt einen Eintrag fr Pidgin im Startmen"
- 
-; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Eine alte Version der GTK+ Runtime wurde gefunden. Mchten Sie aktualisieren?$\rHinweis: $(^Name) funktioniert evtl. nicht, wenn Sie nicht aktualisieren."
-!define GTK_WINDOWS_INCOMPATIBLE		"Windows 95/98/Me sind inkompatibel zu GTK+ 2.8.0 oder neuer.  GTK+ ${GTK_INSTALL_VERSION} wird nicht installiert.$\rWenn Sie nicht GTK+ ${GTK_MIN_VERSION} oder neuer installiert haben, wird die Installation jetzt abgebrochen."
- 
-; Installer Finish Page
-!define PIDGIN_FINISH_VISIT_WEB_SITE	"Besuchen Sie die Pidgin Webseite"
- 
-; Pidgin Section Prompts and Texts
-!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Die aktuell installierte Version von Pidgin kann nicht deinstalliert werden. Die neue Version wird installiert, ohne dass die aktuell installierte Version gelscht wird."
- 
-; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Fehler beim Installieren der GTK+ Runtime."
-!define GTK_BAD_INSTALL_PATH			"Der Pfad, den Sie eingegeben haben, existiert nicht und kann nicht erstellt werden."
-
-; URL Handler section
-!define URI_HANDLERS_SECTION_TITLE		"URI-Behandlung"
-
-; Uninstall Section Prompts
-!define un.PIDGIN_UNINSTALL_ERROR_1		"Der Deinstaller konnte keine Registrierungsschlssel fr Pidgin finden.$\rEs ist wahrscheinlich, da ein anderer Benutzer diese Anwendung installiert hat."
-!define un.PIDGIN_UNINSTALL_ERROR_2		"Sie haben keine Berechtigung, diese Anwendung zu deinstallieren."
-
-; Spellcheck Section Prompts
-!define PIDGIN_SPELLCHECK_SECTION_TITLE	"Untersttzung fr Rechtschreibkontrolle"
-!define PIDGIN_SPELLCHECK_ERROR		"Fehler bei der Installation der Rechtschreibkontrolle"
-!define PIDGIN_SPELLCHECK_DICT_ERROR	"Fehler bei der Installation des Wrterbuches fr die Rechtschreibkontrolle"
-!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"Untersttzung fr Rechtschreibkontrolle.  (Fr die Installation ist eine Internet-Verbindung ntig)"
-!define ASPELL_INSTALL_FAILED			"Installation gescheitert"
-!define PIDGIN_SPELLCHECK_BRETON		"Bretonisch"
-!define PIDGIN_SPELLCHECK_CATALAN		"Katalanisch"
-!define PIDGIN_SPELLCHECK_CZECH		"Tschechisch"
-!define PIDGIN_SPELLCHECK_WELSH		"Walisisch"
-!define PIDGIN_SPELLCHECK_DANISH		"Dnisch"
-!define PIDGIN_SPELLCHECK_GERMAN		"Deutsch"
-!define PIDGIN_SPELLCHECK_GREEK		"Griechisch"
-!define PIDGIN_SPELLCHECK_ENGLISH		"Englisch"
-!define PIDGIN_SPELLCHECK_ESPERANTO		"Esperanto"
-!define PIDGIN_SPELLCHECK_SPANISH		"Spanisch"
-!define PIDGIN_SPELLCHECK_FAROESE		"Farersprache"
-!define PIDGIN_SPELLCHECK_FRENCH		"Franzsisch"
-!define PIDGIN_SPELLCHECK_ITALIAN		"Italienisch"
-!define PIDGIN_SPELLCHECK_DUTCH		"Hollndisch"
-!define PIDGIN_SPELLCHECK_NORWEGIAN		"Norwegisch"
-!define PIDGIN_SPELLCHECK_POLISH		"Polnisch"
-!define PIDGIN_SPELLCHECK_PORTUGUESE	"Portugiesisch"
-!define PIDGIN_SPELLCHECK_ROMANIAN		"Rumnisch"
-!define PIDGIN_SPELLCHECK_RUSSIAN		"Russisch"
-!define PIDGIN_SPELLCHECK_SLOVAK		"Slowakisch"
-!define PIDGIN_SPELLCHECK_SWEDISH		"Schwedisch"
-!define PIDGIN_SPELLCHECK_UKRAINIAN		"Ukrainisch"
+;; vim:syn=winbatch:encoding=cp1252:
+;;
+;;  german.nsh
+;;
+;;  German language strings for the Windows Pidgin NSIS installer.
+;;  Windows Code page: 1252
+;;
+;;  Author: Bjoern Voigt <bjoern@cs.tu-berlin.de>, 2008.
+;;  Version 3
+;;
+ 
+; Startup checks
+!define INSTALLER_IS_RUNNING			"Der Installer luft schon."
+!define PIDGIN_IS_RUNNING			"Eine Instanz von Pidgin luft momentan schon. Beenden Sie Pidgin und versuchen Sie es nochmal."
+ 
+; License Page
+!define PIDGIN_LICENSE_BUTTON			"Weiter >"
+!define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) wird unter der GNU General Public License (GPL) verffentlicht. Die Lizenz dient hier nur der Information. $_CLICK"
+ 
+; Components Page
+!define PIDGIN_SECTION_TITLE			"Pidgin Instant Messaging Client (erforderlich)"
+!define GTK_SECTION_TITLE			"GTK+ Runtime Umgebung (erforderlich)"
+!define PIDGIN_SHORTCUTS_SECTION_TITLE	"Verknpfungen"
+!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Desktop"
+!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Startmen"
+!define PIDGIN_SECTION_DESCRIPTION		"Pidgin-Basisdateien und -DLLs"
+!define GTK_SECTION_DESCRIPTION		"Ein Multi-Plattform-GUI-Toolkit, verwendet von Pidgin"
+
+!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"Verknpfungen zum Starten von Pidgin"
+!define PIDGIN_DESKTOP_SHORTCUT_DESC	"Erstellt eine Verknpfung zu Pidgin auf dem Desktop"
+!define PIDGIN_STARTMENU_SHORTCUT_DESC	"Erstellt einen Eintrag fr Pidgin im Startmen"
+ 
+; GTK+ Directory Page
+ 
+; Installer Finish Page
+!define PIDGIN_FINISH_VISIT_WEB_SITE	"Besuchen Sie die Pidgin Webseite"
+ 
+; Pidgin Section Prompts and Texts
+!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Die aktuell installierte Version von Pidgin kann nicht deinstalliert werden. Die neue Version wird installiert, ohne dass die aktuell installierte Version gelscht wird."
+ 
+; GTK+ Section Prompts
+
+; URL Handler section
+!define URI_HANDLERS_SECTION_TITLE		"URI-Behandlung"
+
+; Uninstall Section Prompts
+!define un.PIDGIN_UNINSTALL_ERROR_1		"Der Deinstaller konnte keine Registrierungsschlssel fr Pidgin finden.$\rEs ist wahrscheinlich, da ein anderer Benutzer diese Anwendung installiert hat."
+!define un.PIDGIN_UNINSTALL_ERROR_2		"Sie haben keine Berechtigung, diese Anwendung zu deinstallieren."
+
+; Spellcheck Section Prompts
+!define PIDGIN_SPELLCHECK_SECTION_TITLE	"Untersttzung fr Rechtschreibkontrolle"
+!define PIDGIN_SPELLCHECK_ERROR		"Fehler bei der Installation der Rechtschreibkontrolle"
+!define PIDGIN_SPELLCHECK_DICT_ERROR	"Fehler bei der Installation des Wrterbuches fr die Rechtschreibkontrolle"
+!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"Untersttzung fr Rechtschreibkontrolle.  (Fr die Installation ist eine Internet-Verbindung ntig)"
+!define ASPELL_INSTALL_FAILED			"Installation gescheitert"
+!define PIDGIN_SPELLCHECK_BRETON		"Bretonisch"
+!define PIDGIN_SPELLCHECK_CATALAN		"Katalanisch"
+!define PIDGIN_SPELLCHECK_CZECH		"Tschechisch"
+!define PIDGIN_SPELLCHECK_WELSH		"Walisisch"
+!define PIDGIN_SPELLCHECK_DANISH		"Dnisch"
+!define PIDGIN_SPELLCHECK_GERMAN		"Deutsch"
+!define PIDGIN_SPELLCHECK_GREEK		"Griechisch"
+!define PIDGIN_SPELLCHECK_ENGLISH		"Englisch"
+!define PIDGIN_SPELLCHECK_ESPERANTO		"Esperanto"
+!define PIDGIN_SPELLCHECK_SPANISH		"Spanisch"
+!define PIDGIN_SPELLCHECK_FAROESE		"Farersprache"
+!define PIDGIN_SPELLCHECK_FRENCH		"Franzsisch"
+!define PIDGIN_SPELLCHECK_ITALIAN		"Italienisch"
+!define PIDGIN_SPELLCHECK_DUTCH		"Hollndisch"
+!define PIDGIN_SPELLCHECK_NORWEGIAN		"Norwegisch"
+!define PIDGIN_SPELLCHECK_POLISH		"Polnisch"
+!define PIDGIN_SPELLCHECK_PORTUGUESE	"Portugiesisch"
+!define PIDGIN_SPELLCHECK_ROMANIAN		"Rumnisch"
+!define PIDGIN_SPELLCHECK_RUSSIAN		"Russisch"
+!define PIDGIN_SPELLCHECK_SLOVAK		"Slowakisch"
+!define PIDGIN_SPELLCHECK_SWEDISH		"Schwedisch"
+!define PIDGIN_SPELLCHECK_UKRAINIAN		"Ukrainisch"
--- a/pidgin/win32/nsis/translations/hebrew.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/hebrew.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -1,83 +1,78 @@
-;;
-;;  hebrew.nsh
-;;
-;;  Hebrew language strings for the Windows Pidgin NSIS installer.
-;;  Windows Code page: 1255
-;;
-;;  Updated: Shalom Craimer <scraimer@gmail.com>
-;;  Origional Author: Eugene Shcherbina <eugene@websterworlds.com>
-;;  Version 3
-;;
-
-; Startup checks
-!define INSTALLER_IS_RUNNING			"   ."
-!define PIDGIN_IS_RUNNING			"  '  .    '  ."
-!define GTK_INSTALLER_NEEDED			".     GTK+ $\r  v${GTK_MIN_VERSION} .GTK+     "
-
-; License Page
-!define PIDGIN_LICENSE_BUTTON			" >"
-!define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) .      .GPL    $_CLICK"
-
-; Components Page
-!define PIDGIN_SECTION_TITLE			"() .Pidgin "
-!define GTK_SECTION_TITLE			"() .GTK+ "
-!define PIDGIN_SHORTCUTS_SECTION_TITLE		" "
-!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	" "
-!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	" "
-!define PIDGIN_SECTION_DESCRIPTION		". DLL- Pidgin "
-!define GTK_SECTION_DESCRIPTION		"-,   ' GUI "
-
-!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"-  '"
-!define PIDGIN_DESKTOP_SHORTCUT_DESC		" -  '   "
-!define PIDGIN_STARTMENU_SHORTCUT_DESC		" -  '  "
-
-; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"A?.  GTK+   $\rNote: .     $(^Name)"
-!define GTK_WINDOWS_INCOMPATIBLE		" 95/98/   -GTK+ 2.8.0 . GTK+ ${GTK_INSTALL_VERSION}  .$\r   GTK+ ${GTK_MIN_VERSION}  ,   ."
-
-; Installer Finish Page
-!define PIDGIN_FINISH_VISIT_WEB_SITE		".Pidgin   "
-
-; Pidgin Section Prompts and Texts
-!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"       '.       ."
-
-; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			".GTK+   "
-!define GTK_BAD_INSTALL_PATH			".    "
-
-; URL Handler section
-!define URI_HANDLERS_SECTION_TITLE		" URI"
-
-; Uninstall Section Prompts
-!define un.PIDGIN_UNINSTALL_ERROR_1		".GTK+      $\r.       "
-!define un.PIDGIN_UNINSTALL_ERROR_2		".     "
-
-; Spellcheck Section Prompts
-!define PIDGIN_SPELLCHECK_SECTION_TITLE	"  "
-!define PIDGIN_SPELLCHECK_ERROR		"   "
-!define PIDGIN_SPELLCHECK_DICT_ERROR	"    "
-!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"    (   )"
-!define ASPELL_INSTALL_FAILED			" "
-!define PIDGIN_SPELLCHECK_BRETON		""
-!define PIDGIN_SPELLCHECK_CATALAN		""
-!define PIDGIN_SPELLCHECK_CZECH		"'"
-!define PIDGIN_SPELLCHECK_WELSH		""
-!define PIDGIN_SPELLCHECK_DANISH		""
-!define PIDGIN_SPELLCHECK_GERMAN		""
-!define PIDGIN_SPELLCHECK_GREEK		""
-!define PIDGIN_SPELLCHECK_ENGLISH		""
-!define PIDGIN_SPELLCHECK_ESPERANTO		""
-!define PIDGIN_SPELLCHECK_SPANISH		""
-!define PIDGIN_SPELLCHECK_FAROESE		""
-!define PIDGIN_SPELLCHECK_FRENCH		""
-!define PIDGIN_SPELLCHECK_ITALIAN		""
-!define PIDGIN_SPELLCHECK_DUTCH		""
-!define PIDGIN_SPELLCHECK_NORWEGIAN		""
-!define PIDGIN_SPELLCHECK_POLISH		""
-!define PIDGIN_SPELLCHECK_PORTUGUESE	""
-!define PIDGIN_SPELLCHECK_ROMANIAN		""
-!define PIDGIN_SPELLCHECK_RUSSIAN		""
-!define PIDGIN_SPELLCHECK_SLOVAK		""
-!define PIDGIN_SPELLCHECK_SWEDISH		""
-!define PIDGIN_SPELLCHECK_UKRAINIAN		""
-
+;;
+;;  hebrew.nsh
+;;
+;;  Hebrew language strings for the Windows Pidgin NSIS installer.
+;;  Windows Code page: 1255
+;;
+;;  Updated: Shalom Craimer <scraimer@gmail.com>
+;;  Origional Author: Eugene Shcherbina <eugene@websterworlds.com>
+;;  Version 3
+;;
+
+; Startup checks
+!define INSTALLER_IS_RUNNING			"   ."
+!define PIDGIN_IS_RUNNING			"  '  .    '  ."
+
+; License Page
+!define PIDGIN_LICENSE_BUTTON			" >"
+!define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) .      .GPL    $_CLICK"
+
+; Components Page
+!define PIDGIN_SECTION_TITLE			"() .Pidgin "
+!define GTK_SECTION_TITLE			"() .GTK+ "
+!define PIDGIN_SHORTCUTS_SECTION_TITLE		" "
+!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	" "
+!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	" "
+!define PIDGIN_SECTION_DESCRIPTION		". DLL- Pidgin "
+!define GTK_SECTION_DESCRIPTION		"-,   ' GUI "
+
+!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"-  '"
+!define PIDGIN_DESKTOP_SHORTCUT_DESC		" -  '   "
+!define PIDGIN_STARTMENU_SHORTCUT_DESC		" -  '  "
+
+; GTK+ Directory Page
+
+; Installer Finish Page
+!define PIDGIN_FINISH_VISIT_WEB_SITE		".Pidgin   "
+
+; Pidgin Section Prompts and Texts
+!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"       '.       ."
+
+; GTK+ Section Prompts
+
+; URL Handler section
+!define URI_HANDLERS_SECTION_TITLE		" URI"
+
+; Uninstall Section Prompts
+!define un.PIDGIN_UNINSTALL_ERROR_1		".GTK+      $\r.       "
+!define un.PIDGIN_UNINSTALL_ERROR_2		".     "
+
+; Spellcheck Section Prompts
+!define PIDGIN_SPELLCHECK_SECTION_TITLE	"  "
+!define PIDGIN_SPELLCHECK_ERROR		"   "
+!define PIDGIN_SPELLCHECK_DICT_ERROR	"    "
+!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"    (   )"
+!define ASPELL_INSTALL_FAILED			" "
+!define PIDGIN_SPELLCHECK_BRETON		""
+!define PIDGIN_SPELLCHECK_CATALAN		""
+!define PIDGIN_SPELLCHECK_CZECH		"'"
+!define PIDGIN_SPELLCHECK_WELSH		""
+!define PIDGIN_SPELLCHECK_DANISH		""
+!define PIDGIN_SPELLCHECK_GERMAN		""
+!define PIDGIN_SPELLCHECK_GREEK		""
+!define PIDGIN_SPELLCHECK_ENGLISH		""
+!define PIDGIN_SPELLCHECK_ESPERANTO		""
+!define PIDGIN_SPELLCHECK_SPANISH		""
+!define PIDGIN_SPELLCHECK_FAROESE		""
+!define PIDGIN_SPELLCHECK_FRENCH		""
+!define PIDGIN_SPELLCHECK_ITALIAN		""
+!define PIDGIN_SPELLCHECK_DUTCH		""
+!define PIDGIN_SPELLCHECK_NORWEGIAN		""
+!define PIDGIN_SPELLCHECK_POLISH		""
+!define PIDGIN_SPELLCHECK_PORTUGUESE	""
+!define PIDGIN_SPELLCHECK_ROMANIAN		""
+!define PIDGIN_SPELLCHECK_RUSSIAN		""
+!define PIDGIN_SPELLCHECK_SLOVAK		""
+!define PIDGIN_SPELLCHECK_SWEDISH		""
+!define PIDGIN_SPELLCHECK_UKRAINIAN		""
+
--- a/pidgin/win32/nsis/translations/hungarian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/hungarian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -9,7 +9,6 @@
 ;;
 
 ; Startup Checks
-!define GTK_INSTALLER_NEEDED			"A GTK+ futtat krnyezet hinyzik vagy frisstse szksges.$\rKrem teleptse a v${GTK_MIN_VERSION} vagy magasabb verzij GTK+ futtat krnyezetet."
 !define INSTALLER_IS_RUNNING			"A telept mr fut."
 !define PIDGIN_IS_RUNNING				"Jelenleg fut a Pidgin egy pldnya. Lpjen ki a Pidginbl s azutn prblja jra."
 
@@ -31,8 +30,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Start Men bejegyzs ltrehozsa a Pidginhez"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Egy rgi verzij GTK+ futtatkrnyezet van teleptve. Kvnja frissteni?$\rMegjegyzs: a Pidgin nem fog mkdni, ha nem frissti."
-!define GTK_WINDOWS_INCOMPATIBLE		"A Windows 95/98/Me nem kompatibillisek a GTK+ 2.8.0 vagy jabb vltozatokkal. A GTK+ ${GTK_INSTALL_VERSION} nem kerl teleptsre. $\rHa a GTK+ ${GTK_MIN_VERSION} vagy jabb mg nincs teleptve, akkor a telepts most megszakad."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"A Windows Pidgin weboldalnak felkeresse"
@@ -42,8 +39,6 @@
 
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Hiba a GTK+ futtatkrnyezet teleptse kzben."
-!define GTK_BAD_INSTALL_PATH			"A megadott elrsi t nem rhet el, vagy nem hozhat ltre."
 
 !define URI_HANDLERS_SECTION_TITLE		"URI kezelk"
 
--- a/pidgin/win32/nsis/translations/italian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/italian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -11,7 +11,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Il programma di installazione  gi in esecuzione"
 !define PIDGIN_IS_RUNNING			" attualmente in esecuzione un'istanza di Pidgin. Esci da Pidgin e riprova."
-!define GTK_INSTALLER_NEEDED			"L'ambiente di runtime GTK+ non  presente o deve essere aggiornato.$\rInstallare GTK+ versione ${GTK_MIN_VERSION} o maggiore"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Avanti >"
@@ -31,8 +30,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Crea una voce per Pidgin nel Menu Avvio"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			" stata trovata una versione precedente di GTK+. Vuoi aggiornarla?$\rNota: $(^Name) potrebbe non funzionare senza l'aggiornamento."
-!define GTK_WINDOWS_INCOMPATIBLE		"Windows 95/98/Me non  incompatible con GTK+ 2.8.0 o successivo. GTK+ ${GTK_INSTALL_VERSION} non sar installato.$\rSe non hai GTK+ ${GTK_MIN_VERSION} o successivo gi installato sul tuo computer, questa installazione sar interrotta."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visita la pagina web di Pidgin"
@@ -41,8 +38,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Impossibile rimuovere la versione di Pidgin attualmente presente sul tuo computer. La nuova versione sar installata senza rimuovere la versione precedente."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Error nell'installazione del runtime GTK+."
-!define GTK_BAD_INSTALL_PATH			"Il percorso scelto non pu essere raggiunto o creato."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"Gestori degli URI"
--- a/pidgin/win32/nsis/translations/japanese.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/japanese.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -12,7 +12,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"CXg[ɎsĂ܂"
 !define PIDGIN_IS_RUNNING				"Pidgin sĂ܂BPidgin IĂēxsĂ"
-!define GTK_INSTALLER_NEEDED			"GTK+^C‹̓AbvO[hKv܂B$\rv${GTK_MIN_VERSION}͂ȏGTK+^CCXg[ĂB"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			" >"
@@ -33,14 +32,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"X^[gj[ Pidgin ̍ڂ쐬"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Âo[WGTK+^C‚܂BAbvO[h܂?$\r: $(^Name)̓AbvO[hȂ蓮Ȃł傤B"
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Windows PidginWeby[WKĂB"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"GTK+^C̃CXg[ŃG[܂B"
-!define GTK_BAD_INSTALL_PATH			"Ȃ̓͂pXɃANZX܂͍쐬ł܂B"
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"ACXg[PidgiñWXgGg𔭌ł܂łB$\r炭ʂ̃[UɃCXg[ꂽł傤B"
--- a/pidgin/win32/nsis/translations/korean.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/korean.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -7,8 +7,6 @@
 ;;  Author: Kyung-uk Son <vvs740@chol.com>
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"GTK+ Ÿ ȯ濡  ְų ׷̵尡 ʿմϴ.$\rGTK+ Ÿ ȯ v${GTK_MIN_VERSION}̳  ̻  ġּ."
 
 ; Components Page
 !define PIDGIN_SECTION_TITLE			" ޽ (ʼ)"
@@ -17,11 +15,8 @@
 !define GTK_SECTION_DESCRIPTION		" ϴ Ƽ ÷ GUI Ŷ"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"  GTK+ Ÿ ãҽϴ. ׷̵ұ?$\rNote: ׷̵      ֽϴ."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"GTK+ Ÿ ġ   ߻."
-!define GTK_BAD_INSTALL_PATH			"ԷϽ ο   ų   ϴ."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "ν緯  Ʈ Ʈ ã  ϴ.$\r α׷ ٸ   ġ  ϴ."
--- a/pidgin/win32/nsis/translations/kurdish.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/kurdish.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -12,7 +12,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Sazker jixwe dimee."
 !define PIDGIN_IS_RUNNING			"Pidgin niha jixwe dimee. Ji Pidgin  derkeve  careke din biceribne."
-!define GTK_INSTALLER_NEEDED			"Derdora runtime ya GTK+ an tune an rojanekirina w pwst e. $\rJi kerema xwe v${GTK_MIN_VERSION} an bilindtir a GTK+ saz bike."
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"P >"
@@ -32,14 +31,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC   "Pidgin  binivse menuya destpk"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Guhertoyeke kevn a GTK+ hatiye dtin. Tu dixwaz bilind bik?$\rNot: Heke tu nek, dibe ku $(^Name) naxebite."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Were Malpera Pidgin a Windows"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Di sazkirina GTK+ de ewt derket."
-!define GTK_BAD_INSTALL_PATH			"rya te nivsand nay gihitin an afirandin."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Raker tketiyn registry yn Pidgin nedt. $\rQey bikarhnereke din v bername saz kir."
--- a/pidgin/win32/nsis/translations/lithuanian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/lithuanian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -9,7 +9,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Diegimo programa jau paleista."
 !define PIDGIN_IS_RUNNING			"iuo metu Pidgin yra paleistas. Udarykite i program ir pabandykite i naujo."
-!define GTK_INSTALLER_NEEDED			"GTK+ vykdymo meto aplinkos nra arba ji turi bti atnaujinta.$\rdiekite v${GTK_MIN_VERSION} arba naujesn GTK+ vykdymo meto aplinkos versij"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Toliau >"
@@ -29,8 +28,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Sukurti pradinio meniu ra, skirt Pidgin."
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Rasta sena GTK+ vykdymo meto aplinkos versija. Ar norite j atnaujinti?$\rPastaba: $(^Name) gali neveikti, jeigu to nepadarysite."
-!define GTK_WINDOWS_INCOMPATIBLE		"Windows 95/98/Me yra nesuderinami su GTK+ 2.8.0 ir naujesnmis versijomis.  GTK+ ${GTK_INSTALL_VERSION} nebus diegta.$\rJeigu neturite sidieg GTK+ ${GTK_MIN_VERSION} ar naujesns versijos, diegimas dabar bus nutrauktas."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Aplankyti Pidgin tinklalap"
@@ -39,8 +36,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Nepavyko idiegti anksiau diegtos Pidgin versijos.  Nauja versija bus diegta neidiegus senosios."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"GTK+ vykdymo meto aplinkos diegimo klaida"
-!define GTK_BAD_INSTALL_PATH			"Js vestas kelias negali bti pasiektas ar sukurtas."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"URI dorokls"
--- a/pidgin/win32/nsis/translations/norwegian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/norwegian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -11,7 +11,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Installeren kjrer allerede."
 !define PIDGIN_IS_RUNNING				"En instans av Pidgin kjrer fra fr. Avslutt Pidgin og prv igjen."
-!define GTK_INSTALLER_NEEDED			"GTK+ runtime environment mangler eller trenger en oppgradering.$\rVennligst installr GTK+ v${GTK_MIN_VERSION} eller hyere"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Neste >"
@@ -31,14 +30,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Legg til Pidgin i Startmenyen"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"En eldre versjon av GTK+ runtime ble funnet. nsker du  oppgradere?$\rMerk: $(^Name) vil kanskje ikke virke hvis du ikke oppgraderer."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Besk Pidgin for Windows' Nettside"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"En feil oppstod ved installering av GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"Stien du oppga kan ikke aksesseres eller lages."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Avinstalleringsprogrammet kunne ikke finne noen registeroppfring for Pidgin.$\rTrolig har en annen bruker avinstallert denne applikasjonen."
--- a/pidgin/win32/nsis/translations/persian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/persian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -13,7 +13,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"ȝ      ."
 !define PIDGIN_IS_RUNNING			"       .         ."
-!define GTK_INSTALLER_NEEDED			"   GTK+         .$\r  ${GTK_MIN_VERSION}       GTK+  "
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			" >"
@@ -33,8 +32,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"      "
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"     GTK+  .      Ͽ$\r: $(^Name)       ."
-!define GTK_WINDOWS_INCOMPATIBLE		" 95/98/Me  GTK+  2.8.0   Ґ . GTK+ ${GTK_INSTALL_VERSION}   .$\r ǐ  GTK+ ${GTK_MIN_VERSION}      ϡ    ."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"    "
@@ -43,8 +40,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"           .        ."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"      GTK+."
-!define GTK_BAD_INSTALL_PATH			"        ."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"  "
--- a/pidgin/win32/nsis/translations/polish.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/polish.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,13 +8,6 @@
 ;;  Note: If translating this file, replace '!insertmacro PIDGIN_MACRO_DEFAULT_STRING'
 ;;  with '!define'.
 
-; Make sure to update the PIDGIN_MACRO_LANGUAGEFILE_END macro in
-; langmacros.nsh when updating this file
-
-; Startup Checks
-!define INSTALLER_IS_RUNNING			"Instalator jest ju uruchomiony."
-!define PIDGIN_IS_RUNNING			"Program Pidgin jest obecnie uruchomiony. Prosz zakoczy dziaanie programu Pidgin i sprbowa ponownie."
-!define GTK_INSTALLER_NEEDED			"Brak biblioteki GTK+ lub wymaga zaktualizowania.$\rProsz zainstalowa wersj ${GTK_MIN_VERSION} lub wysz biblioteki GTK+"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Dalej >"
@@ -27,7 +20,6 @@
 !define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE	"Pulpit"
 !define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE	"Menu Start"
 !define PIDGIN_SECTION_DESCRIPTION		"Gwne pliki programu Pidgin i biblioteki DLL"
-!define GTK_SECTION_DESCRIPTION		"Wieloplatformowy zestaw narzdzi do tworzenia interfejsu graficznego, uywany przez program Pidgin"
 
 !define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION	"Skrty do uruchamiania programu Pidgin"
 !define PIDGIN_DESKTOP_SHORTCUT_DESC		"Utworzenie skrtu do programu Pidgin na pulpicie"
@@ -40,46 +32,10 @@
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Odwied stron WWW programu Pidgin"
 
-; Pidgin Section Prompts and Texts
-!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Nie mona odinstalowa obecnie zainstalowanej wersji programu Pidgin. Nowa wersja zostanie zainstalowana bez usuwania obecnie zainstalowanej wersji."
-
 ; GTK+ Section Prompts
 !define GTK_INSTALL_ERROR			"Bd podczas instalowania biblioteki GTK+."
 !define GTK_BAD_INSTALL_PATH			"Nie mona uzyska dostpu do podanej cieki lub jej utworzy."
 
-; URL Handler section
-!define URI_HANDLERS_SECTION_TITLE		"Obsuga adresw URI"
-
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Instalator nie moe odnale wpisw w rejestrze dla programu Pidgin.$\rMoliwe, e inny uytkownik zainstalowa ten program."
-!define un.PIDGIN_UNINSTALL_ERROR_2		"Brak uprawnie do odinstalowania tego programu."
-
-; Spellcheck Section Prompts
-!define PIDGIN_SPELLCHECK_SECTION_TITLE	"Obsuga sprawdzania pisowni"
-!define PIDGIN_SPELLCHECK_ERROR		"Bd podczas instalowania sprawdzania pisowni"
-!define PIDGIN_SPELLCHECK_DICT_ERROR		"Bd podczas instalowania sownika dla sprawdzania pisowni"
-!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"Obsuga sprawdzania pisowni (do jej instalacji wymagane jest poczenie z Internetem)."
-!define ASPELL_INSTALL_FAILED			"Instalacja nie powioda si"
-!define PIDGIN_SPELLCHECK_BRETON		"bretoski"
-!define PIDGIN_SPELLCHECK_CATALAN		"kataloski"
-!define PIDGIN_SPELLCHECK_CZECH		"czeski"
-!define PIDGIN_SPELLCHECK_WELSH		"walijski"
-!define PIDGIN_SPELLCHECK_DANISH		"duski"
-!define PIDGIN_SPELLCHECK_GERMAN		"niemiecki"
-!define PIDGIN_SPELLCHECK_GREEK		"grecki"
-!define PIDGIN_SPELLCHECK_ENGLISH		"angielski"
-!define PIDGIN_SPELLCHECK_ESPERANTO		"esperanto"
-!define PIDGIN_SPELLCHECK_SPANISH		"hiszpaski"
-!define PIDGIN_SPELLCHECK_FAROESE		"farerski"
-!define PIDGIN_SPELLCHECK_FRENCH		"francuski"
-!define PIDGIN_SPELLCHECK_ITALIAN		"woski"
-!define PIDGIN_SPELLCHECK_DUTCH		"holenderski"
-!define PIDGIN_SPELLCHECK_NORWEGIAN		"norweski"
-!define PIDGIN_SPELLCHECK_POLISH		"polski"
-!define PIDGIN_SPELLCHECK_PORTUGUESE		"portugalski"
-!define PIDGIN_SPELLCHECK_ROMANIAN		"rumuski"
-!define PIDGIN_SPELLCHECK_RUSSIAN		"rosyjski"
-!define PIDGIN_SPELLCHECK_SLOVAK		"sowacki"
-!define PIDGIN_SPELLCHECK_SWEDISH		"szwedzki"
-!define PIDGIN_SPELLCHECK_UKRAINIAN		"ukraiski"
-
+!define un.PIDGIN_UNINSTALL_ERROR_2		"Brak uprawnie do odinstalowania tego programu."
\ No newline at end of file
--- a/pidgin/win32/nsis/translations/portuguese-br.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/portuguese-br.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,8 +8,6 @@
 ;;  Version 3
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"O ambiente de tempo de execuo do GTK+ est ausente ou precisa ser atualizado.$\rFavor instalar a verso v${GTK_MIN_VERSION} ou superior do ambiente de tempo de execuo do GTK+."
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Avanar >"
@@ -29,11 +27,8 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC   "Crie uma entrada no Menu Iniciar para o Pidgin"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Uma verso antiga do ambiente de tempo de execuo do GTK+ foi encontrada. Voc deseja atualiz-lo?$\rNota: O $(^Name) poder no funcionar a menos que voc o faa."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Erro ao instalar o ambiente de tempo de execuo do GTK+."
-!define GTK_BAD_INSTALL_PATH			"O caminho que voc digitou no pde ser acessado ou criado."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visite a pgina da web do Pidgin para Windows"
@@ -44,7 +39,6 @@
 
 !define INSTALLER_IS_RUNNING                   "O instalador j est em execuo."
 !define PIDGIN_IS_RUNNING                      "Uma instncia do Pidgin est em execuo. Feche o Pidgin e tente novamente."
-!define GTK_WINDOWS_INCOMPATIBLE               "O Windows 95/98/Me  incompatvel com o GTK+ 2.8.0 ou superior. O GTK+ ${GTK_INSTALL_VERSION} no ser instalado.$\rSe voc no possuir o GTK+ verso ${GTK_MIN_VERSION} ou superior j instalado, o instalador ir fechar agora."
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL       "No foi possvel desinstalar a verso do Pidgin que est instalada atualmente. A nova verso ser instalada sem que a verso antiga seja removida."
 !define URI_HANDLERS_SECTION_TITLE             "Handlers para endereos"
 !define PIDGIN_SPELLCHECK_SECTION_TITLE        "Suporte a verificao ortogrfica"
--- a/pidgin/win32/nsis/translations/portuguese.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/portuguese.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -11,7 +11,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"O instalador j est a ser executado."
 !define PIDGIN_IS_RUNNING			"Uma instncia do Pidgin j est a ser executada. Saia do Pidgin e tente de novo."
-!define GTK_INSTALLER_NEEDED			"O ambiente de GTK+ est ausente ou precisa de ser actualizado.$\rPor favor instale a verso v${GTK_MIN_VERSION} ou mais recente do ambiente de GTK+."
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Seguinte >"
@@ -31,14 +30,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC   "Criar uma entrada para o Pidgin na Barra de Iniciar"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Foi encontrada uma verso antiga do ambiente de execuo GTK+. Deseja actualiz-lo?$\rNota: O $(^Name) poder no funcionar se no o fizer."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visite a Pgina Web do Pidgin para Windows"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Erro ao instalar o ambiente de execuo GTK+."
-!define GTK_BAD_INSTALL_PATH			"O caminho que digitou no pode ser acedido nem criado."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"O desinstalador no encontrou entradas de registo do Pidgin.$\r provvel que outro utilizador tenha instalado este programa."
--- a/pidgin/win32/nsis/translations/romanian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/romanian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -10,7 +10,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING                     "Instalarea este deja pornit."
 !define PIDGIN_IS_RUNNING                  "O instan a programului Pidgin este deja pornit. nchidei-o i ncercai din nou."
-!define GTK_INSTALLER_NEEDED			"Mediul GTK+ nu e prezent sau avei o versiune prea veche.$\rInstalai cel puin versiunea v${GTK_MIN_VERSION} a mediului GTK+"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON                      "nainte >"
@@ -30,14 +29,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC   "Creeaz o intrare Pidgin n meniul Start"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Avei o versiune veche a mediului GTK+. Dorii s o actualizai?$\rNot: E posibil ca $(^Name) s nu funcioneze cu versiunea veche."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE               "Vizitai pagina de web Windows Pidgin"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Eroare la instalarea mediului GTK+."
-!define GTK_BAD_INSTALL_PATH			"Directorul specificat nu poate fi accesat sau creat."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "Programul de dezinstalare nu a gsit intrri Pidgin n regitri.$\rProbabil un alt utilizator a instalat aceast aplicaie."
--- a/pidgin/win32/nsis/translations/russian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/russian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,9 +8,6 @@
 ;;  Version 2
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"   GTK+     .$\r  v${GTK_MIN_VERSION}     GTK+."
-
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			" >"
 !define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name)    GPL.      . $_CLICK"
@@ -22,14 +19,11 @@
 !define GTK_SECTION_DESCRIPTION		"  ,  Pidgin."
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"   GTK+.       ?$\r: Pidgin        ."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		" - Pidgin   Windows."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"    GTK+."
-!define GTK_BAD_INSTALL_PATH			"       ."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"      Pidgin  ..$\r     ."
--- a/pidgin/win32/nsis/translations/serbian-latin.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/serbian-latin.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -7,8 +7,6 @@
 ;;  Author: Danilo Segan <dsegan@gmx.net>
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"GTK+ okolina za izvravanje ili nije naena ili se moraunaprediti.$\rMolimo instalirajte v${GTK_MIN_VERSION} ili veu GTK+ okoline za izvravanje"
 
 ; Components Page
 !define PIDGIN_SECTION_TITLE			"Pidgin klijent za brze poruke (neophodno)"
@@ -17,11 +15,8 @@
 !define GTK_SECTION_DESCRIPTION		"Skup orua za grafiko okruenje, za vie platformi, koristi ga Pidgin "
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Naena je stara verzija GTK+ izvrne okoline. Da li elite da je unapredite?$\rPrimedba: Ukoliko to ne uradite, $(^Name) moda nee raditi."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Greka prilikom instalacije GTK+ okoline za izvravanje."
-!define GTK_BAD_INSTALL_PATH			"Putanja koju ste naveli se ne moe ni napraviti niti joj se moe prii."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "Program za uklanjanje instalacije ne moe da pronae stavke registra za Pidgin.$\rVerovatno je ovu aplikaciju instalirao drugi korisnik."
--- a/pidgin/win32/nsis/translations/simp-chinese.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/simp-chinese.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -11,7 +11,6 @@
 ; Startup GTK+ check
 !define INSTALLER_IS_RUNNING			"װѾС"
 !define PIDGIN_IS_RUNNING			"Pidgin ʵС˳ Pidgin ȻһΡ"
-!define GTK_INSTALLER_NEEDED			"ȱ GTK+ ʱ̻Ҫ¸û$\r밲װ v${GTK_MIN_VERSION} ߰汾 GTK+ ʱ̻"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"һ >"
@@ -31,14 +30,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC   "ڿʼ˵д Pidgin Ŀݷʽ"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"˾ɰ汾 GTK+ ʱ̡Ҫ?$\rע:  $(^Name) ޷"
 
 ; Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		" Windows Pidgin ҳ"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"װ GTK+ ʱʧܡ"
-!define GTK_BAD_INSTALL_PATH			"޷ʻ򴴽·"
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "жسҲ Pidgin עĿ$\rûװ˴˳"
--- a/pidgin/win32/nsis/translations/slovak.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/slovak.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -11,7 +11,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"Intalcia je u spusten"
 !define PIDGIN_IS_RUNNING				"Pidgin je prve spusten. Vypnite ho a skste znova."
-!define GTK_INSTALLER_NEEDED			"GTK+ runtime prostredie chba alebo mus by upgradovan.$\rNaintalujte, prosm, GTK+ runtime verziu v${GTK_MIN_VERSION}, alebo noviu"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"alej >"
@@ -31,14 +30,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Vytvori odkaz na Pidgin v tart Menu"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Bola njden staria verzia GTK+ runtime. Prajete si upgradova sasn verziu?$\rPoznmka: $(^Name) nemus po upgradovan fungova sprvne."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Navtvi webstrnku Windows Pidgin"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Chyba pri intalcii GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"Zadan cesta nie je prstupn alebo ju nie je mon vytvori."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Intaltoru sa nepodarilo njs poloky v registri pre Pidgin.$\rJe mon, e tto aplikciu naintaloval in pouvate."
--- a/pidgin/win32/nsis/translations/slovenian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/slovenian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -11,7 +11,6 @@
 ; Startup GTK+ check
 !define INSTALLER_IS_RUNNING			"Nameanje e poteka."
 !define PIDGIN_IS_RUNNING			"Trenutno e tee ena razliica Pidgina. Prosimo, zaprite aplikacijo in poskusite znova."
-!define GTK_INSTALLER_NEEDED			"Izvajalno okolje GTK+ manjka ali pa ga je potrebno nadgraditi.$\rProsimo, namestite v${GTK_MIN_VERSION} ali novejo razliico izvajalnega okolja GTK+"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Naprej >"
@@ -31,8 +30,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"Ustvari izbiro Pidgin v meniju Start"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Nameeno imate starejo razliico izvajalnega okolja GTK+. Jo elite nadgraditi?$\rOpomba: e je ne boste nadgradili, $(^Name) morda ne bo deloval."
-!define GTK_WINDOWS_INCOMPATIBLE		"Okolja Windows 95/98/Me z GTK+ 2.8.0 ali novejimi niso zdruljiva.  GTK+ ${GTK_INSTALL_VERSION} will not be installed.$\rIf you don't have GTK+ ${GTK_MIN_VERSION} ali noveji je e nameen, zato se bo namestitev zdaj prekinila."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Obiite spletno stran Windows Pidgin"
@@ -41,8 +38,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Trenutno nameene razliice Pidgina ni mogoe odstraniti. Nova razliica bo nameena brez odstranitve trenutno nameene razliice."
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Napaka pri namestitvi izvajalnega okolja GTK+."
-!define GTK_BAD_INSTALL_PATH			"Pot, ki ste jo vnesli, ni dosegljiva ali je ni mogoe ustvariti."
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"URI Handlers"
--- a/pidgin/win32/nsis/translations/spanish.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/spanish.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -8,9 +8,6 @@
 ;;  Version 2
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"El entorno de ejecucin de GTK+ falta o necesita ser actualizado.$\rPor favor, instale la versin v${GTK_MIN_VERSION} del ejecutable GTK+ o alguna posterior."
-
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Siguiente >"
 !define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) se distribuye bajo la licencia GPL. Esta licencia se incluye aqu slo con propsito informativo: $_CLICK"
@@ -22,14 +19,11 @@
 !define GTK_SECTION_DESCRIPTION		"Una suite de herramientas GUI multiplataforma, utilizada por Pidgin"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Se ha encontrado una versin antiga del ejecutable de GTK+. Desea actualizarla?$\rObservacin: $(^Name) no funcionar a menos que lo haga."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visite la pgina Web de Pidgin Windows"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Error al instalar el ejecutable GTK+."
-!define GTK_BAD_INSTALL_PATH			"No se pudo acceder o crear la ruta que vd. indic."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1         "El desinstalador no pudo encontrar las entradas en el registro de Pidgin.$\rEs probable que otro usuario instalara la aplicacin."
--- a/pidgin/win32/nsis/translations/swedish.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/swedish.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -1,80 +1,76 @@
-;;
-;;  swedish.nsh
-;;
-;;  Swedish language strings for the Windows Pidgin NSIS installer.
-;;  Windows Code page: 1252
-;;
-;;  Author: Tore Lundqvist <tlt@mima.x.se>, 2003.
-;;  Author: Peter Hjalmarsson <xake@telia.com>, 2005.
-;;  Version 3
-
-; Startup Checks
-!define INSTALLER_IS_RUNNING			"Installationsprogrammet krs redan."
-!define PIDGIN_IS_RUNNING			"En instans av Pidgin krs redan. Avsluta Pidgin och frsk igen."
-!define GTK_INSTALLER_NEEDED			"Krmiljn GTK+ r antingen inte installerat eller behver uppgraderas.$\rVar  god installera v${GTK_MIN_VERSION} eller hgre av GTK+-krmiljn."
-
-; License Page
-!define PIDGIN_LICENSE_BUTTON			"Nsta >"
-!define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) r utgivet under GPL. Licensen finns tillgnglig hr fr informationssyften enbart. $_CLICK"
-
-; Components Page
-!define PIDGIN_SECTION_TITLE			"Pidgin Snabbmeddelandeklient (obligatorisk)"
-!define GTK_SECTION_TITLE			"GTK+-krmilj (obligatorisk)"
-!define PIDGIN_SHORTCUTS_SECTION_TITLE 		"Genvgar"
-!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE 	"Skrivbord"
-!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "Startmeny"
-!define PIDGIN_SECTION_DESCRIPTION		"Pidgins krnfiler och DLL:er"
-!define GTK_SECTION_DESCRIPTION			"En GUI-verktygsuppsttning fr flera olika plattformar som Pidgin anvnder."
-
-!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION   	"Genvgar fr att starta Pidgin"
-!define PIDGIN_DESKTOP_SHORTCUT_DESC   		"Skapar en genvg till Pidgin p skrivbordet"
-!define PIDGIN_STARTMENU_SHORTCUT_DESC   	"Skapar ett tillgg i startmenyn fr Pidgin"
-
-; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"En ldre version av GTK+ runtime hittades, vill du uppgradera den?$\rOBS! $(^Name) kommer kanske inte att fungera om du inte uppgraderar."
-
-; Installer Finish Page
-!define PIDGIN_FINISH_VISIT_WEB_SITE		"Besk Windows-Pidgin hemsida"
-
-; Pidgin Section Prompts and Texts
-!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Kunde inte avinstallera den nuvarande versionen av Pidgin. Den nya versionen kommer att installeras utan att ta bort den fr nrvarande installerade versionen."
-
-; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Fel vid installation av GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"Den skvg du angivit gr inte att komma t eller skapa."
-
-; URL Handler section
-!define URI_HANDLERS_SECTION_TITLE		"URI Hanterare"
-
-; Uninstall Section Prompts
-!define un.PIDGIN_UNINSTALL_ERROR_1         	"Avinstalleraren kunde inte hitta registervrden fr Pidgin.$\rAntagligen har en annan anvndare installerat applikationen."
-!define un.PIDGIN_UNINSTALL_ERROR_2         	"Du har inte rttigheter att avinstallera den hr applikationen."
-
-; Spellcheck Section Prompts
-!define PIDGIN_SPELLCHECK_SECTION_TITLE		"Std fr rttstavning"
-!define PIDGIN_SPELLCHECK_ERROR			"Fel vid installation fr rttstavning"
-!define PIDGIN_SPELLCHECK_DICT_ERROR		"Fel vid installation av rttstavningsordlista"
-!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"Std fr Rttstavning.  (Internetanslutning krvs fr installation)"
-!define ASPELL_INSTALL_FAILED			"Installationen misslyckades"
-!define PIDGIN_SPELLCHECK_BRETON		"Bretonska"
-!define PIDGIN_SPELLCHECK_CATALAN		"Katalanska"
-!define PIDGIN_SPELLCHECK_CZECH			"Tjeckiska"
-!define PIDGIN_SPELLCHECK_WELSH			"Kymriska"
-!define PIDGIN_SPELLCHECK_DANISH		"Danska"
-!define PIDGIN_SPELLCHECK_GERMAN		"Tyska"
-!define PIDGIN_SPELLCHECK_GREEK			"Grekiska"
-!define PIDGIN_SPELLCHECK_ENGLISH		"Engelska"
-!define PIDGIN_SPELLCHECK_ESPERANTO		"Esperanto"
-!define PIDGIN_SPELLCHECK_SPANISH		"Spanska"
-!define PIDGIN_SPELLCHECK_FAROESE		"Friska"
-!define PIDGIN_SPELLCHECK_FRENCH		"Franska"
-!define PIDGIN_SPELLCHECK_ITALIAN		"Italienska"
-!define PIDGIN_SPELLCHECK_DUTCH			"Nederlndska"
-!define PIDGIN_SPELLCHECK_NORWEGIAN		"Norska"
-!define PIDGIN_SPELLCHECK_POLISH		"Polska"
-!define PIDGIN_SPELLCHECK_PORTUGUESE		"Portugisiska"
-!define PIDGIN_SPELLCHECK_ROMANIAN		"Rumnska"
-!define PIDGIN_SPELLCHECK_RUSSIAN		"Ryska"
-!define PIDGIN_SPELLCHECK_SLOVAK		"Slovakiska"
-!define PIDGIN_SPELLCHECK_SWEDISH		"Svenska"
-!define PIDGIN_SPELLCHECK_UKRAINIAN		"Ukrainska"
+;;
+;;  swedish.nsh
+;;
+;;  Swedish language strings for the Windows Pidgin NSIS installer.
+;;  Windows Code page: 1252
+;;
+;;  Author: Tore Lundqvist <tlt@mima.x.se>, 2003.
+;;  Author: Peter Hjalmarsson <xake@telia.com>, 2005.
+;;  Version 3
+
+; Startup Checks
+!define INSTALLER_IS_RUNNING			"Installationsprogrammet krs redan."
+!define PIDGIN_IS_RUNNING			"En instans av Pidgin krs redan. Avsluta Pidgin och frsk igen."
+
+; License Page
+!define PIDGIN_LICENSE_BUTTON			"Nsta >"
+!define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) r utgivet under GPL. Licensen finns tillgnglig hr fr informationssyften enbart. $_CLICK"
+
+; Components Page
+!define PIDGIN_SECTION_TITLE			"Pidgin Snabbmeddelandeklient (obligatorisk)"
+!define GTK_SECTION_TITLE			"GTK+-krmilj (obligatorisk)"
+!define PIDGIN_SHORTCUTS_SECTION_TITLE 		"Genvgar"
+!define PIDGIN_DESKTOP_SHORTCUT_SECTION_TITLE 	"Skrivbord"
+!define PIDGIN_STARTMENU_SHORTCUT_SECTION_TITLE "Startmeny"
+!define PIDGIN_SECTION_DESCRIPTION		"Pidgins krnfiler och DLL:er"
+!define GTK_SECTION_DESCRIPTION			"En GUI-verktygsuppsttning fr flera olika plattformar som Pidgin anvnder."
+
+!define PIDGIN_SHORTCUTS_SECTION_DESCRIPTION   	"Genvgar fr att starta Pidgin"
+!define PIDGIN_DESKTOP_SHORTCUT_DESC   		"Skapar en genvg till Pidgin p skrivbordet"
+!define PIDGIN_STARTMENU_SHORTCUT_DESC   	"Skapar ett tillgg i startmenyn fr Pidgin"
+
+; GTK+ Directory Page
+
+; Installer Finish Page
+!define PIDGIN_FINISH_VISIT_WEB_SITE		"Besk Windows-Pidgin hemsida"
+
+; Pidgin Section Prompts and Texts
+!define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Kunde inte avinstallera den nuvarande versionen av Pidgin. Den nya versionen kommer att installeras utan att ta bort den fr nrvarande installerade versionen."
+
+; GTK+ Section Prompts
+
+; URL Handler section
+!define URI_HANDLERS_SECTION_TITLE		"URI Hanterare"
+
+; Uninstall Section Prompts
+!define un.PIDGIN_UNINSTALL_ERROR_1         	"Avinstalleraren kunde inte hitta registervrden fr Pidgin.$\rAntagligen har en annan anvndare installerat applikationen."
+!define un.PIDGIN_UNINSTALL_ERROR_2         	"Du har inte rttigheter att avinstallera den hr applikationen."
+
+; Spellcheck Section Prompts
+!define PIDGIN_SPELLCHECK_SECTION_TITLE		"Std fr rttstavning"
+!define PIDGIN_SPELLCHECK_ERROR			"Fel vid installation fr rttstavning"
+!define PIDGIN_SPELLCHECK_DICT_ERROR		"Fel vid installation av rttstavningsordlista"
+!define PIDGIN_SPELLCHECK_SECTION_DESCRIPTION	"Std fr Rttstavning.  (Internetanslutning krvs fr installation)"
+!define ASPELL_INSTALL_FAILED			"Installationen misslyckades"
+!define PIDGIN_SPELLCHECK_BRETON		"Bretonska"
+!define PIDGIN_SPELLCHECK_CATALAN		"Katalanska"
+!define PIDGIN_SPELLCHECK_CZECH			"Tjeckiska"
+!define PIDGIN_SPELLCHECK_WELSH			"Kymriska"
+!define PIDGIN_SPELLCHECK_DANISH		"Danska"
+!define PIDGIN_SPELLCHECK_GERMAN		"Tyska"
+!define PIDGIN_SPELLCHECK_GREEK			"Grekiska"
+!define PIDGIN_SPELLCHECK_ENGLISH		"Engelska"
+!define PIDGIN_SPELLCHECK_ESPERANTO		"Esperanto"
+!define PIDGIN_SPELLCHECK_SPANISH		"Spanska"
+!define PIDGIN_SPELLCHECK_FAROESE		"Friska"
+!define PIDGIN_SPELLCHECK_FRENCH		"Franska"
+!define PIDGIN_SPELLCHECK_ITALIAN		"Italienska"
+!define PIDGIN_SPELLCHECK_DUTCH			"Nederlndska"
+!define PIDGIN_SPELLCHECK_NORWEGIAN		"Norska"
+!define PIDGIN_SPELLCHECK_POLISH		"Polska"
+!define PIDGIN_SPELLCHECK_PORTUGUESE		"Portugisiska"
+!define PIDGIN_SPELLCHECK_ROMANIAN		"Rumnska"
+!define PIDGIN_SPELLCHECK_RUSSIAN		"Ryska"
+!define PIDGIN_SPELLCHECK_SLOVAK		"Slovakiska"
+!define PIDGIN_SPELLCHECK_SWEDISH		"Svenska"
+!define PIDGIN_SPELLCHECK_UKRAINIAN		"Ukrainska"
--- a/pidgin/win32/nsis/translations/trad-chinese.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/trad-chinese.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -13,7 +13,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"w˵{b椤C"
 !define PIDGIN_IS_RUNNING				"Pidgin b椤AХoӵ{AwˡC"
-!define GTK_INSTALLER_NEEDED			"䤣ŦX GTK+ ҩάOݭnQsC$\rЦw v${GTK_MIN_VERSION} ΥHW GTK+ ҡC"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"U@B >"
@@ -33,8 +32,6 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC		"b}l\إ߱|"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"o{@ª GTK+ ҡCznNɯŶܡH$\rЪ`NGpGzɯšA $(^Name) iLkTQC"
-!define GTK_WINDOWS_INCOMPATIBLE		"۪ 2.8.0 }lAGTK P Windows 95/98/Me wAۮeAGTK+ ${GTK_INSTALL_VERSION} ]N|QwˡC$\rpGtΤwgw˪ GTK+ ${GTK_MIN_VERSION} ΧsAw˵{NHYC"
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"X Windows Pidgin "
@@ -43,8 +40,6 @@
 !define PIDGIN_PROMPT_CONTINUE_WITHOUT_UNINSTALL	"Lkثeww˪ PidginAsNbgªpUiwˡC"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"w GTK+ ҮɵoͿ~C"
-!define GTK_BAD_INSTALL_PATH			"zҿJw˥ؿLksΫإߡC"
 
 ; URL Handler section
 !define URI_HANDLERS_SECTION_TITLE		"URI Bz{"
--- a/pidgin/win32/nsis/translations/valencian.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/valencian.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -14,7 +14,6 @@
 ; Startup Checks
 !define INSTALLER_IS_RUNNING			"L'instalador encara est eixecutant-se."
 !define PIDGIN_IS_RUNNING				"Una instancia de Pidgin est eixecutant-se. Ix del Pidgin i torna a intentar-ho."
-!define GTK_INSTALLER_NEEDED			"L'entorn d'eixecucio GTK+ no es troba o necessita ser actualisat.$\rPer favor instala la versio${GTK_MIN_VERSION} o superior de l'entorn GTK+"
 
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Segent >"
@@ -34,14 +33,11 @@
 !define PIDGIN_STARTMENU_SHORTCUT_DESC   		"Crear una entrada per a Pidgin en Menu Inici"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Una versio antiua de l'entorn GTK+ fon trobada. Vols actualisar-la?$\rNota: $(^Name) no funcionar si no ho fas."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Visita la pagina de Pidgin per a Windows"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Erro instalant l'entorn GTK+."
-!define GTK_BAD_INSTALL_PATH			"La ruta introduida no pot ser accedida o creada."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"El desinstalador podria no trobar les entrades del registre de Pidgin.$\rProbablement un atre usuari instal esta aplicacio."
--- a/pidgin/win32/nsis/translations/vietnamese.nsh	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/nsis/translations/vietnamese.nsh	Thu Feb 18 21:38:43 2010 +0000
@@ -9,9 +9,6 @@
 ;;  it does, these translations can not be used. 
 ;;
 
-; Startup GTK+ check
-!define GTK_INSTALLER_NEEDED			"The GTK+ runtime environment không có hoặc cần được nâng cấp.$\rHãy cài đặt GTK+ runtime v${GTK_MIN_VERSION} hoặc mới hơn"
-
 ; License Page
 !define PIDGIN_LICENSE_BUTTON			"Tiếp theo >"
 !define PIDGIN_LICENSE_BOTTOM_TEXT		"$(^Name) được phát hành theo giấy  phép GPL. Giấy phép thấy ở đây chỉ là để cung cấp thông tin mà thôi. $_CLICK"
@@ -23,14 +20,11 @@
 !define GTK_SECTION_DESCRIPTION		"Bộ công cụ giao diện đồ họa đa nền để dùng cho Pidgin"
 
 ; GTK+ Directory Page
-!define GTK_UPGRADE_PROMPT			"Phát hiện thấy có phiên bản cũ của  GTK+ runtime. Bạn muốn nâng cấp không?$\rNote: $(^Name) có thể không chạy nếu không nâng cấp."
 
 ; Installer Finish Page
 !define PIDGIN_FINISH_VISIT_WEB_SITE		"Hãy xem trang chủ Windows Pidgin"
 
 ; GTK+ Section Prompts
-!define GTK_INSTALL_ERROR			"Lỗi cài đặt GTK+ runtime."
-!define GTK_BAD_INSTALL_PATH			"Đường dẫn mà bạn nhập có thể không truy cập được hay không tạo được."
 
 ; Uninstall Section Prompts
 !define un.PIDGIN_UNINSTALL_ERROR_1		"Trình gỡ cài đặt không tìm được các  registry entry cho Pidgin.$\rCó thể là chương trình được người dùng khác cài đặt."
--- a/pidgin/win32/pidgin_dll_rc.rc.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/pidgin_dll_rc.rc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -19,7 +19,7 @@
         VALUE "FileDescription", "GTK+ Pidgin Library"
         VALUE "FileVersion", "@PIDGIN_VERSION@"
         VALUE "InternalName", "libpidgin"
-        VALUE "LegalCopyright", "Copyright (C) 1998-2007 The Pidgin developer community (See the COPYRIGHT file in the source distribution)."
+        VALUE "LegalCopyright", "Copyright (C) 1998-2010 The Pidgin developer community (See the COPYRIGHT file in the source distribution)."
         VALUE "OriginalFilename", "pidgin.dll"
         VALUE "ProductName", "Pidgin"
         VALUE "ProductVersion", "@PIDGIN_VERSION@"
--- a/pidgin/win32/pidgin_exe_rc.rc.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/pidgin_exe_rc.rc.in	Thu Feb 18 21:38:43 2010 +0000
@@ -19,7 +19,7 @@
         VALUE "FileDescription", "Pidgin"
         VALUE "FileVersion", "@PIDGIN_VERSION@"
         VALUE "InternalName", "pidgin"
-        VALUE "LegalCopyright", "Copyright (C) 1998-2007 The Pidgin developer community (See the COPYRIGHT file in the source distribution)."
+        VALUE "LegalCopyright", "Copyright (C) 1998-2010 The Pidgin developer community (See the COPYRIGHT file in the source distribution)."
         VALUE "OriginalFilename", "@ORIGINAL_FILENAME@"
         VALUE "ProductName", "Pidgin"
         VALUE "ProductVersion", "@PIDGIN_VERSION@"
--- a/pidgin/win32/untar.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/untar.c	Thu Feb 18 21:38:43 2010 +0000
@@ -80,14 +80,7 @@
 #include "untar.h"
 #include <glib.h>
 
-#if GLIB_CHECK_VERSION(2,6,0)
-#	include <glib/gstdio.h>
-#else
-#define mkdir(a,b) _mkdir((a))
-#define g_mkdir mkdir
-#define g_fopen fopen
-#define g_unlink unlink
-#endif
+#include <glib/gstdio.h>
 
 #define untar_error( error, args... )      purple_debug(PURPLE_DEBUG_ERROR, "untar", error, ## args )
 #define untar_warning( warning, args... )  purple_debug(PURPLE_DEBUG_WARNING, "untar", warning, ## args )
--- a/pidgin/win32/winpidgin.c	Wed Feb 10 20:53:32 2010 +0000
+++ b/pidgin/win32/winpidgin.c	Thu Feb 18 21:38:43 2010 +0000
@@ -26,33 +26,23 @@
  */
 
 /* This is for ATTACH_PARENT_PROCESS */
+#define UNICODE
+#define _UNICODE
 #ifndef _WIN32_WINNT
 #define _WIN32_WINNT 0x501
 #endif
 #include <windows.h>
+#include <tchar.h>
 #include <fcntl.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
-
-/* These will hopefully be in the win32api next time it is updated - at which point, we'll remove them */
-#ifndef LANG_PERSIAN
-#define LANG_PERSIAN 0x29
-#endif
-#ifndef LANG_BOSNIAN
-#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN	0x05
-#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC	0x08
-#endif
-#ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN
-#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN	0x04
-#endif
-#ifndef LANG_XHOSA
-#define LANG_XHOSA 0x34
-#endif
-
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "config.h"
 
 typedef int (CALLBACK* LPFNPIDGINMAIN)(HINSTANCE, int, char**);
-typedef void (CALLBACK* LPFNSETDLLDIRECTORY)(LPCTSTR);
+typedef void (CALLBACK* LPFNSETDLLDIRECTORY)(LPCWSTR);
 typedef BOOL (CALLBACK* LPFNATTACHCONSOLE)(DWORD);
 
 static BOOL portable_mode = FALSE;
@@ -63,19 +53,19 @@
 static LPFNPIDGINMAIN pidgin_main = NULL;
 static LPFNSETDLLDIRECTORY MySetDllDirectory = NULL;
 
-static const char *get_win32_error_message(DWORD err) {
-	static char err_msg[512];
+static const TCHAR *get_win32_error_message(DWORD err) {
+	static TCHAR err_msg[512];
 
 	FormatMessage(
 		FORMAT_MESSAGE_FROM_SYSTEM,
 		NULL, err,
 		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-		(LPTSTR) &err_msg, sizeof(err_msg), NULL);
+		(LPTSTR) &err_msg, sizeof(err_msg) / sizeof(TCHAR), NULL);
 
 	return err_msg;
 }
 
-static BOOL read_reg_string(HKEY key, char* sub_key, char* val_name, LPBYTE data, LPDWORD data_len) {
+static BOOL read_reg_string(HKEY key, TCHAR *sub_key, TCHAR *val_name, LPBYTE data, LPDWORD data_len) {
 	HKEY hkey;
 	BOOL ret = FALSE;
 	LONG retv;
@@ -86,11 +76,11 @@
 						NULL, NULL, data, data_len)))
 			ret = TRUE;
 		else {
-			const char *err_msg = get_win32_error_message(retv);
+			const TCHAR *err_msg = get_win32_error_message(retv);
 
-			printf("Could not read reg key '%s' subkey '%s' value: '%s'.\nMessage: (%ld) %s\n",
-					(key == HKEY_LOCAL_MACHINE) ? "HKLM"
-					 : ((key == HKEY_CURRENT_USER) ? "HKCU" : "???"),
+			_tprintf(_T("Could not read reg key '%s' subkey '%s' value: '%s'.\nMessage: (%ld) %s\n"),
+					(key == HKEY_LOCAL_MACHINE) ? _T("HKLM")
+					 : ((key == HKEY_CURRENT_USER) ? _T("HKCU") : _T("???")),
 					sub_key, val_name, retv, err_msg);
 		}
 		RegCloseKey(hkey);
@@ -99,23 +89,36 @@
 		TCHAR szBuf[80];
 
 		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, retv, 0,
-				(LPTSTR) &szBuf, sizeof(szBuf), NULL);
-		printf("Could not open reg subkey: %s\nError: (%ld) %s\n",
+				(LPTSTR) &szBuf, sizeof(szBuf) / sizeof(TCHAR), NULL);
+		_tprintf(_T("Could not open reg subkey: %s\nError: (%ld) %s\n"),
 				sub_key, retv, szBuf);
 	}
 
 	return ret;
 }
 
-static void common_dll_prep(const char *path) {
+static void common_dll_prep(const TCHAR *path) {
 	HMODULE hmod;
 	HKEY hkey;
+	struct _stat stat_buf;
+	TCHAR test_path[MAX_PATH + 1];
 
-	printf("GTK+ path found: %s\n", path);
+	_sntprintf(test_path, sizeof(test_path) / sizeof(TCHAR),
+		_T("%s\\libgtk-win32-2.0-0.dll"), path);
+	test_path[sizeof(test_path) / sizeof(TCHAR) - 1] = _T('\0');
 
-	if ((hmod = GetModuleHandle("kernel32.dll"))) {
+	if (_tstat(test_path, &stat_buf) != 0) {
+		printf("Unable to determine GTK+ path. \n"
+			"Assuming GTK+ is in the PATH.\n");
+		return;
+	}
+
+
+	_tprintf(_T("GTK+ path found: %s\n"), path);
+
+	if ((hmod = GetModuleHandle(_T("kernel32.dll")))) {
 		MySetDllDirectory = (LPFNSETDLLDIRECTORY) GetProcAddress(
-			hmod, "SetDllDirectoryA");
+			hmod, "SetDllDirectoryW");
 		if (!MySetDllDirectory)
 			printf("SetDllDirectory not supported\n");
 	} else
@@ -141,20 +144,21 @@
 		 */
 		osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 		GetVersionEx(&osinfo);
-		if ((osinfo.dwMajorVersion == 5 &&
-			osinfo.dwMinorVersion == 0 &&
-			strcmp(osinfo.szCSDVersion, "Service Pack 3") >= 0) ||
-			(osinfo.dwMajorVersion == 5 &&
-			osinfo.dwMinorVersion == 1 &&
-			strcmp(osinfo.szCSDVersion, "") >= 0)
+		if ((osinfo.dwMajorVersion == 5
+				&& osinfo.dwMinorVersion == 0
+				&& _tcscmp(osinfo.szCSDVersion, _T("Service Pack 3")) >= 0)
+			||
+			(osinfo.dwMajorVersion == 5
+				&& osinfo.dwMinorVersion == 1
+				&& _tcscmp(osinfo.szCSDVersion, _T("")) >= 0)
 		) {
 			DWORD regval = 1;
 			DWORD reglen = sizeof(DWORD);
 
 			printf("Using Win2k (SP3+) / WinXP (No SP)... Checking SafeDllSearch\n");
 			read_reg_string(HKEY_LOCAL_MACHINE,
-				"System\\CurrentControlSet\\Control\\Session Manager",
-				"SafeDllSearchMode",
+				_T("System\\CurrentControlSet\\Control\\Session Manager"),
+				_T("SafeDllSearchMode"),
 				(LPBYTE) &regval,
 				&reglen);
 
@@ -162,16 +166,16 @@
 				printf("Trying to set SafeDllSearchMode to 0\n");
 				regval = 0;
 				if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-					"System\\CurrentControlSet\\Control\\Session Manager",
+					_T("System\\CurrentControlSet\\Control\\Session Manager"),
 					0,  KEY_SET_VALUE, &hkey
 				) == ERROR_SUCCESS) {
 					if (RegSetValueEx(hkey,
-						"SafeDllSearchMode", 0,
+						_T("SafeDllSearchMode"), 0,
 						REG_DWORD, (LPBYTE) &regval,
 						sizeof(DWORD)
 					) != ERROR_SUCCESS)
 						printf("Error writing SafeDllSearchMode. Error: %u\n",
-						(UINT) GetLastError());
+							(UINT) GetLastError());
 					RegCloseKey(hkey);
 				} else
 					printf("Error opening Session Manager key for writing. Error: %u\n",
@@ -182,29 +186,23 @@
 	}
 }
 
-static void portable_mode_dll_prep(const char *pidgin_dir) {
+static void portable_mode_dll_prep(const TCHAR *pidgin_dir) {
 	/* need to be able to fit MAX_PATH + "PIDGIN_ASPELL_DIR=\\Aspell\\bin" in path2 */
-	char path[MAX_PATH + 1];
-	char path2[MAX_PATH + 33];
-	const char *prev = NULL;
+	TCHAR path[MAX_PATH + 1];
+	TCHAR path2[MAX_PATH + 33];
+	const TCHAR *prev = NULL;
 
 	/* We assume that GTK+ is installed under \\path\to\Pidgin\..\GTK
 	 * First we find \\path\to
 	 */
-	if (*pidgin_dir) {
+	if (*pidgin_dir)
 		/* pidgin_dir points to \\path\to\Pidgin */
-		const char *tmp = pidgin_dir;
-
-		while ((tmp = strchr(tmp, '\\'))) {
-			prev = tmp;
-			tmp++;
-		}
-	}
+		prev = _tcsrchr(pidgin_dir, _T('\\'));
 
 	if (prev) {
 		int cnt = (prev - pidgin_dir);
-		strncpy(path, pidgin_dir, cnt);
-		path[cnt] = '\0';
+		_tcsncpy(path, pidgin_dir, cnt);
+		path[cnt] = _T('\0');
 	} else {
 		printf("Unable to determine current executable path. \n"
 			"This will prevent the settings dir from being set.\n"
@@ -213,160 +211,141 @@
 	}
 
 	/* Set $HOME so that the GTK+ settings get stored in the right place */
-	_snprintf(path2, sizeof(path2), "HOME=%s", path);
-	_putenv(path2);
+	_sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("HOME=%s"), path);
+	_tputenv(path2);
 
 	/* Set up the settings dir base to be \\path\to
 	 * The actual settings dir will be \\path\to\.purple */
-	_snprintf(path2, sizeof(path2), "PURPLEHOME=%s", path);
-	printf("Setting settings dir: %s\n", path2);
-	_putenv(path2);
+	_sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("PURPLEHOME=%s"), path);
+	_tprintf(_T("Setting settings dir: %s\n"), path2);
+	_tputenv(path2);
 
-	_snprintf(path2, sizeof(path2), "PIDGIN_ASPELL_DIR=%s\\Aspell\\bin", path);
-	printf("%s\n", path2);
-	_putenv(path2);
+	_sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("PIDGIN_ASPELL_DIR=%s\\Aspell\\bin"), path);
+	_tprintf(_T("%s\n"), path2);
+	_tputenv(path2);
 
 	/* set the GTK+ path to be \\path\to\GTK\bin */
-	strcat(path, "\\GTK\\bin");
+	_tcscat(path, _T("\\GTK\\bin"));
 
 	common_dll_prep(path);
 }
 
-static void dll_prep() {
-	char path[MAX_PATH + 1];
-	HKEY hkey;
-	char gtkpath[MAX_PATH + 1];
-	DWORD plen;
+static void dll_prep(const TCHAR *pidgin_dir) {
+	TCHAR gtk_path[MAX_PATH + 1];
+	gtk_path[0] = _T('\0');
 
-	plen = sizeof(gtkpath);
-	hkey = HKEY_CURRENT_USER;
-	if (!read_reg_string(hkey, "SOFTWARE\\GTK\\2.0", "Path",
-			(LPBYTE) &gtkpath, &plen)) {
-		hkey = HKEY_LOCAL_MACHINE;
-		if (!read_reg_string(hkey, "SOFTWARE\\GTK\\2.0", "Path",
-				(LPBYTE) &gtkpath, &plen)) {
-			printf("GTK+ Path Registry Key not found. "
-				"Assuming GTK+ is in the PATH.\n");
-			return;
-		}
+	if (*pidgin_dir) {
+		_sntprintf(gtk_path, sizeof(gtk_path) / sizeof(TCHAR), _T("%s\\Gtk\\bin"), pidgin_dir);
+		gtk_path[sizeof(gtk_path) / sizeof(TCHAR)] = _T('\0');
 	}
 
-	/* this value is replaced during a successful RegQueryValueEx() */
-	plen = sizeof(path);
-	/* Determine GTK+ dll path .. */
-	if (!read_reg_string(hkey, "SOFTWARE\\GTK\\2.0", "DllPath",
-				(LPBYTE) &path, &plen)) {
-		strcpy(path, gtkpath);
-		strcat(path, "\\bin");
-	}
-
-	common_dll_prep(path);
+	common_dll_prep(gtk_path);
 }
 
-static char* winpidgin_lcid_to_posix(LCID lcid) {
-	char *posix = NULL;
+static TCHAR* winpidgin_lcid_to_posix(LCID lcid) {
+	TCHAR *posix = NULL;
 	int lang_id = PRIMARYLANGID(lcid);
 	int sub_id = SUBLANGID(lcid);
 
 	switch (lang_id) {
-		case LANG_AFRIKAANS: posix = "af"; break;
-		case LANG_ARABIC: posix = "ar"; break;
-		case LANG_AZERI: posix = "az"; break;
-		case LANG_BENGALI: posix = "bn"; break;
-		case LANG_BULGARIAN: posix = "bg"; break;
-		case LANG_CATALAN: posix = "ca"; break;
-		case LANG_CZECH: posix = "cs"; break;
-		case LANG_DANISH: posix = "da"; break;
-		case LANG_ESTONIAN: posix = "et"; break;
-		case LANG_PERSIAN: posix = "fa"; break;
-		case LANG_GERMAN: posix = "de"; break;
-		case LANG_GREEK: posix = "el"; break;
+		case LANG_AFRIKAANS: posix = _T("af"); break;
+		case LANG_ARABIC: posix = _T("ar"); break;
+		case LANG_AZERI: posix = _T("az"); break;
+		case LANG_BENGALI: posix = _T("bn"); break;
+		case LANG_BULGARIAN: posix = _T("bg"); break;
+		case LANG_CATALAN: posix = _T("ca"); break;
+		case LANG_CZECH: posix = _T("cs"); break;
+		case LANG_DANISH: posix = _T("da"); break;
+		case LANG_ESTONIAN: posix = _T("et"); break;
+		case LANG_PERSIAN: posix = _T("fa"); break;
+		case LANG_GERMAN: posix = _T("de"); break;
+		case LANG_GREEK: posix = _T("el"); break;
 		case LANG_ENGLISH:
 			switch (sub_id) {
 				case SUBLANG_ENGLISH_UK:
-					posix = "en_GB"; break;
+					posix = _T("en_GB"); break;
 				case SUBLANG_ENGLISH_AUS:
-					posix = "en_AU"; break;
+					posix = _T("en_AU"); break;
 				case SUBLANG_ENGLISH_CAN:
-					posix = "en_CA"; break;
+					posix = _T("en_CA"); break;
 				default:
-					posix = "en"; break;
+					posix = _T("en"); break;
 			}
 			break;
-		case LANG_SPANISH: posix = "es"; break;
-		case LANG_BASQUE: posix = "eu"; break;
-		case LANG_FINNISH: posix = "fi"; break;
-		case LANG_FRENCH: posix = "fr"; break;
-		case LANG_GALICIAN: posix = "gl"; break;
-		case LANG_GUJARATI: posix = "gu"; break;
-		case LANG_HEBREW: posix = "he"; break;
-		case LANG_HINDI: posix = "hi"; break;
-		case LANG_HUNGARIAN: posix = "hu"; break;
+		case LANG_SPANISH: posix = _T("es"); break;
+		case LANG_BASQUE: posix = _T("eu"); break;
+		case LANG_FINNISH: posix = _T("fi"); break;
+		case LANG_FRENCH: posix = _T("fr"); break;
+		case LANG_GALICIAN: posix = _T("gl"); break;
+		case LANG_GUJARATI: posix = _T("gu"); break;
+		case LANG_HEBREW: posix = _T("he"); break;
+		case LANG_HINDI: posix = _T("hi"); break;
+		case LANG_HUNGARIAN: posix = _T("hu"); break;
 		case LANG_ICELANDIC: break;
-		case LANG_INDONESIAN: posix = "id"; break;
-		case LANG_ITALIAN: posix = "it"; break;
-		case LANG_JAPANESE: posix = "ja"; break;
-		case LANG_GEORGIAN: posix = "ka"; break;
-		case LANG_KANNADA: posix = "kn"; break;
-		case LANG_KOREAN: posix = "ko"; break;
-		case LANG_LITHUANIAN: posix = "lt"; break;
-		case LANG_MACEDONIAN: posix = "mk"; break;
-		case LANG_DUTCH: posix = "nl"; break;
-		case LANG_NEPALI: posix = "ne"; break;
+		case LANG_INDONESIAN: posix = _T("id"); break;
+		case LANG_ITALIAN: posix = _T("it"); break;
+		case LANG_JAPANESE: posix = _T("ja"); break;
+		case LANG_GEORGIAN: posix = _T("ka"); break;
+		case LANG_KANNADA: posix = _T("kn"); break;
+		case LANG_KOREAN: posix = _T("ko"); break;
+		case LANG_LITHUANIAN: posix = _T("lt"); break;
+		case LANG_MACEDONIAN: posix = _T("mk"); break;
+		case LANG_DUTCH: posix = _T("nl"); break;
+		case LANG_NEPALI: posix = _T("ne"); break;
 		case LANG_NORWEGIAN:
 			switch (sub_id) {
 				case SUBLANG_NORWEGIAN_BOKMAL:
-					posix = "nb"; break;
+					posix = _T("nb"); break;
 				case SUBLANG_NORWEGIAN_NYNORSK:
-					posix = "nn"; break;
+					posix = _T("nn"); break;
 			}
 			break;
-		case LANG_PUNJABI: posix = "pa"; break;
-		case LANG_POLISH: posix = "pl"; break;
-		case LANG_PASHTO: posix = "ps"; break;
+		case LANG_PUNJABI: posix = _T("pa"); break;
+		case LANG_POLISH: posix = _T("pl"); break;
+		case LANG_PASHTO: posix = _T("ps"); break;
 		case LANG_PORTUGUESE:
 			switch (sub_id) {
 				case SUBLANG_PORTUGUESE_BRAZILIAN:
-					posix = "pt_BR"; break;
+					posix = _T("pt_BR"); break;
 				default:
-				posix = "pt"; break;
+				posix = _T("pt"); break;
 			}
 			break;
-		case LANG_ROMANIAN: posix = "ro"; break;
-		case LANG_RUSSIAN: posix = "ru"; break;
-		case LANG_SLOVAK: posix = "sk"; break;
-		case LANG_SLOVENIAN: posix = "sl"; break;
-		case LANG_ALBANIAN: posix = "sq"; break;
+		case LANG_ROMANIAN: posix = _T("ro"); break;
+		case LANG_RUSSIAN: posix = _T("ru"); break;
+		case LANG_SLOVAK: posix = _T("sk"); break;
+		case LANG_SLOVENIAN: posix = _T("sl"); break;
+		case LANG_ALBANIAN: posix = _T("sq"); break;
 		/* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN */
 		case LANG_SERBIAN:
 			switch (sub_id) {
 				case SUBLANG_SERBIAN_LATIN:
-					posix = "sr@Latn"; break;
+					posix = _T("sr@Latn"); break;
 				case SUBLANG_SERBIAN_CYRILLIC:
-					posix = "sr"; break;
+					posix = _T("sr"); break;
 				case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC:
 				case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN:
-					posix = "bs"; break;
+					posix = _T("bs"); break;
 				case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN:
-					posix = "hr"; break;
+					posix = _T("hr"); break;
 			}
 			break;
-		case LANG_SWEDISH: posix = "sv"; break;
-		case LANG_TAMIL: posix = "ta"; break;
-		case LANG_TELUGU: posix = "te"; break;
-		case LANG_THAI: posix = "th"; break;
-		case LANG_TURKISH: posix = "tr"; break;
-		case LANG_UKRAINIAN: posix = "uk"; break;
-		case LANG_VIETNAMESE: posix = "vi"; break;
-		case LANG_XHOSA: posix = "xh"; break;
+		case LANG_SWEDISH: posix = _T("sv"); break;
+		case LANG_TAMIL: posix = _T("ta"); break;
+		case LANG_TELUGU: posix = _T("te"); break;
+		case LANG_THAI: posix = _T("th"); break;
+		case LANG_TURKISH: posix = _T("tr"); break;
+		case LANG_UKRAINIAN: posix = _T("uk"); break;
+		case LANG_VIETNAMESE: posix = _T("vi"); break;
+		case LANG_XHOSA: posix = _T("xh"); break;
 		case LANG_CHINESE:
 			switch (sub_id) {
 				case SUBLANG_CHINESE_SIMPLIFIED:
-					posix = "zh_CN"; break;
+					posix = _T("zh_CN"); break;
 				case SUBLANG_CHINESE_TRADITIONAL:
-					posix = "zh_TW"; break;
+					posix = _T("zh_TW"); break;
 				default:
-					posix = "zh"; break;
+					posix = _T("zh"); break;
 			}
 			break;
 		case LANG_URDU: break;
@@ -397,8 +376,8 @@
 	/* Deal with exceptions */
 	if (posix == NULL) {
 		switch (lcid) {
-			case 0x0455: posix = "my_MM"; break; /* Myanmar (Burmese) */
-			case 9999: posix = "ku"; break; /* Kurdish (from NSIS) */
+			case 0x0455: posix = _T("my_MM"); break; /* Myanmar (Burmese) */
+			case 9999: posix = _T("ku"); break; /* Kurdish (from NSIS) */
 		}
 	}
 
@@ -410,19 +389,19 @@
    - Check NSIS Installer Language reg value
    - Use default user locale
 */
-static const char *winpidgin_get_locale() {
-	const char *locale = NULL;
+static const TCHAR *winpidgin_get_locale() {
+	const TCHAR *locale = NULL;
 	LCID lcid;
-	char data[10];
-	DWORD datalen = 10;
+	TCHAR data[10];
+	DWORD datalen = sizeof(data) / sizeof(TCHAR);
 
 	/* Check if user set PIDGINLANG env var */
-	if ((locale = getenv("PIDGINLANG")))
+	if ((locale = _tgetenv(_T("PIDGINLANG"))))
 		return locale;
 
-	if (!portable_mode && read_reg_string(HKEY_CURRENT_USER, "SOFTWARE\\pidgin",
-			"Installer Language", (LPBYTE) &data, &datalen)) {
-		if ((locale = winpidgin_lcid_to_posix(atoi(data))))
+	if (!portable_mode && read_reg_string(HKEY_CURRENT_USER, _T("SOFTWARE\\pidgin"),
+			_T("Installer Language"), (LPBYTE) &data, &datalen)) {
+		if ((locale = winpidgin_lcid_to_posix(_ttoi(data))))
 			return locale;
 	}
 
@@ -430,39 +409,39 @@
 	if ((locale = winpidgin_lcid_to_posix(lcid)))
 		return locale;
 
-	return "en";
+	return _T("en");
 }
 
 static void winpidgin_set_locale() {
-	const char *locale = NULL;
-	char envstr[25];
+	const TCHAR *locale;
+	TCHAR envstr[25];
 
 	locale = winpidgin_get_locale();
 
-	_snprintf(envstr, 25, "LANG=%s", locale);
-	printf("Setting locale: %s\n", envstr);
-	_putenv(envstr);
+	_sntprintf(envstr, sizeof(envstr) / sizeof(TCHAR), _T("LANG=%s"), locale);
+	_tprintf(_T("Setting locale: %s\n"), envstr);
+	_tputenv(envstr);
 }
 
 
 static void winpidgin_add_stuff_to_path() {
-	char perl_path[MAX_PATH + 1];
-	char *ppath = NULL;
-	char mit_kerberos_path[MAX_PATH + 1];
-	char *mpath = NULL;
+	TCHAR perl_path[MAX_PATH + 1];
+	TCHAR *ppath = NULL;
+	TCHAR mit_kerberos_path[MAX_PATH + 1];
+	TCHAR *mpath = NULL;
 	DWORD plen;
 
 	printf("%s", "Looking for Perl... ");
 
-	plen = sizeof(perl_path);
-	if (read_reg_string(HKEY_LOCAL_MACHINE, "SOFTWARE\\Perl", "",
+	plen = sizeof(perl_path) / sizeof(TCHAR);
+	if (read_reg_string(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Perl"), _T(""),
 			    (LPBYTE) &perl_path, &plen)) {
 		/* We *could* check for perl510.dll, but it seems unnecessary. */
-		printf("found in '%s'.\n", perl_path);
+		_tprintf(_T("found in '%s'.\n"), perl_path);
 
-		if (perl_path[strlen(perl_path) - 1] != '\\')
-			strcat(perl_path, "\\");
-		strcat(perl_path, "bin");
+		if (perl_path[_tcslen(perl_path) - 1] != _T('\\'))
+			_tcscat(perl_path, _T("\\"));
+		_tcscat(perl_path, _T("bin"));
 
 		ppath = perl_path;
 	} else
@@ -470,48 +449,47 @@
 
 	printf("%s", "Looking for MIT Kerberos... ");
 
-	plen = sizeof(mit_kerberos_path);
-	if (read_reg_string(HKEY_LOCAL_MACHINE, "SOFTWARE\\MIT\\Kerberos", "InstallDir",
+	plen = sizeof(mit_kerberos_path) / sizeof(TCHAR);
+	if (read_reg_string(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\MIT\\Kerberos"), _T("InstallDir"),
 			    (LPBYTE) &mit_kerberos_path, &plen)) {
 		/* We *could* check for gssapi32.dll */
-		printf("found in '%s'.\n", mit_kerberos_path);
+		_tprintf(_T("found in '%s'.\n"), mit_kerberos_path);
 
-		if (mit_kerberos_path[strlen(mit_kerberos_path) - 1] != '\\')
-			strcat(mit_kerberos_path, "\\");
-		strcat(mit_kerberos_path, "bin");
+		if (mit_kerberos_path[_tcslen(mit_kerberos_path) - 1] != _T('\\'))
+			_tcscat(mit_kerberos_path, _T("\\"));
+		_tcscat(mit_kerberos_path, _T("bin"));
 
 		mpath = mit_kerberos_path;
 	} else
 		printf("%s", "not found.\n");
 
 	if (ppath != NULL || mpath != NULL) {
-		const char *path = getenv("PATH");
-		BOOL add_ppath = ppath != NULL && (path == NULL || !strstr(path, ppath));
-		BOOL add_mpath = mpath != NULL && (path == NULL || !strstr(path, mpath));
-		char *newpath;
+		const TCHAR *path = _tgetenv(_T("PATH"));
+		BOOL add_ppath = ppath != NULL && (path == NULL || !_tcsstr(path, ppath));
+		BOOL add_mpath = mpath != NULL && (path == NULL || !_tcsstr(path, mpath));
+		TCHAR *newpath;
 		int newlen;
 
 		if (add_ppath || add_mpath) {
 			/* Enough to add "PATH=" + path + ";"  + ppath + ";" + mpath + \0 */
-			newlen = 6 + (path ? strlen(path) + 1 : 0);
+			newlen = 6 + (path ? _tcslen(path) + 1 : 0);
 			if (add_ppath)
-				newlen += strlen(ppath) + 1;
+				newlen += _tcslen(ppath) + 1;
 			if (add_mpath)
-				newlen += strlen(mpath) + 1;
-			newpath = malloc(newlen);
-			*newpath = '\0';
+				newlen += _tcslen(mpath) + 1;
+			newpath = malloc(newlen * sizeof(TCHAR));
 
-			_snprintf(newpath, newlen, "PATH=%s%s%s%s%s%s",
-				  path ? path : "",
-				  path ? ";" : "",
-				  add_ppath ? ppath : "",
-				  add_ppath ? ";" : "",
-				  add_mpath ? mpath : "",
-				  add_mpath ? ";" : "");
+			_sntprintf(newpath, newlen, _T("PATH=%s%s%s%s%s%s"),
+				  path ? path : _T(""),
+				  path ? _T(";") : _T(""),
+				  add_ppath ? ppath : _T(""),
+				  add_ppath ? _T(";") : _T(""),
+				  add_mpath ? mpath : _T(""),
+				  add_mpath ? _T(";") : _T(""));
 
-			printf("New PATH: %s\n", newpath);
+			_tprintf(_T("New PATH: %s\n"), newpath);
 
-			_putenv(newpath);
+			_tputenv(newpath);
 			free(newpath);
 		}
 	}
@@ -523,7 +501,7 @@
 static BOOL winpidgin_set_running(BOOL fail_if_running) {
 	HANDLE h;
 
-	if ((h = CreateMutex(NULL, FALSE, "pidgin_is_running"))) {
+	if ((h = CreateMutex(NULL, FALSE, _T("pidgin_is_running")))) {
 		DWORD err = GetLastError();
 		if (err == ERROR_ALREADY_EXISTS) {
 			if (fail_if_running) {
@@ -531,14 +509,14 @@
 
 				printf("An instance of Pidgin is already running.\n");
 
-				if((msg_win = FindWindowEx(NULL, NULL, TEXT("WinpidginMsgWinCls"), NULL)))
+				if((msg_win = FindWindowEx(NULL, NULL, _T("WinpidginMsgWinCls"), NULL)))
 					if(SendMessage(msg_win, PIDGIN_WM_FOCUS_REQUEST, (WPARAM) NULL, (LPARAM) NULL))
 						return FALSE;
 
 				/* If we get here, the focus request wasn't successful */
 
 				MessageBox(NULL,
-					"An instance of Pidgin is already running",
+					_T("An instance of Pidgin is already running"),
 					NULL, MB_OK | MB_TOPMOST);
 
 				return FALSE;
@@ -549,80 +527,98 @@
 	return TRUE;
 }
 
-#define PROTO_HANDLER_SWITCH "--protocolhandler="
+#define PROTO_HANDLER_SWITCH L"--protocolhandler="
 
-static void handle_protocol(char *cmd) {
-	char *remote_msg, *tmp1, *tmp2;
-	int len;
+static void handle_protocol(wchar_t *cmd) {
+	char *remote_msg, *utf8msg;
+	wchar_t *tmp1, *tmp2;
+	int len, wlen;
 	SIZE_T len_written;
 	HWND msg_win;
 	DWORD pid;
 	HANDLE process;
 
 	/* The start of the message */
-	tmp1 = cmd + strlen(PROTO_HANDLER_SWITCH);
+	tmp1 = cmd + wcslen(PROTO_HANDLER_SWITCH);
 
 	/* The end of the message */
-	if ((tmp2 = strchr(tmp1, ' ')))
-		len = (tmp2 - tmp1);
+	if ((tmp2 = wcschr(tmp1, L' ')))
+		wlen = (tmp2 - tmp1);
 	else
-		len = strlen(tmp1);
+		wlen = wcslen(tmp1);
 
-	if (len == 0) {
+	if (wlen == 0) {
 		printf("No protocol message specified.\n");
 		return;
 	}
 
-	if (!(msg_win = FindWindowEx(NULL, NULL, TEXT("WinpidginMsgWinCls"), NULL))) {
+	if (!(msg_win = FindWindowEx(NULL, NULL, _T("WinpidginMsgWinCls"), NULL))) {
 		printf("Unable to find an instance of Pidgin to handle protocol message.\n");
 		return;
 	}
 
+	len = WideCharToMultiByte(CP_UTF8, 0, tmp1,
+			wlen, NULL, 0, NULL, NULL);
+	if (len) {
+		utf8msg = malloc(len * sizeof(char));
+		len = WideCharToMultiByte(CP_UTF8, 0, tmp1,
+			wlen, utf8msg, len, NULL, NULL);
+	}
+
+	if (len == 0) {
+		printf("No protocol message specified.\n");
+		return;
+	}
+
 	GetWindowThreadProcessId(msg_win, &pid);
 	if (!(process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, pid))) {
 		DWORD dw = GetLastError();
-		const char *err_msg = get_win32_error_message(dw);
-		printf("Unable to open Pidgin process. (%u) %s\n", (UINT) dw, err_msg);
+		const TCHAR *err_msg = get_win32_error_message(dw);
+		_tprintf(_T("Unable to open Pidgin process. (%u) %s\n"), (UINT) dw, err_msg);
 		return;
 	}
 
-	printf("Trying to handle protocol message:\n'%.*s'\n", len, tmp1);
+	wprintf(L"Trying to handle protocol message:\n'%.*s'\n", wlen, tmp1);
 
-	/* MEM_COMMIT initializes the memory to zero,
-	 * so we don't need to worry that our section of tmp1 isn't nul-terminated */
+	/* MEM_COMMIT initializes the memory to zero
+	 * so we don't need to worry that our section of utf8msg isn't nul-terminated */
 	if ((remote_msg = (char*) VirtualAllocEx(process, NULL, len + 1, MEM_COMMIT, PAGE_READWRITE))) {
-		if (WriteProcessMemory(process, remote_msg, tmp1, len, &len_written)) {
-			if (!SendMessage(msg_win, PIDGIN_WM_PROTOCOL_HANDLE, len_written, (LPARAM) remote_msg))
+		if (WriteProcessMemory(process, remote_msg, utf8msg, len, &len_written)) {
+			if (!SendMessageA(msg_win, PIDGIN_WM_PROTOCOL_HANDLE, len_written, (LPARAM) remote_msg))
 				printf("Unable to send protocol message to Pidgin instance.\n");
 		} else {
 			DWORD dw = GetLastError();
-			const char *err_msg = get_win32_error_message(dw);
-			printf("Unable to write to remote memory. (%u) %s\n", (UINT) dw, err_msg);
+			const TCHAR *err_msg = get_win32_error_message(dw);
+			_tprintf(_T("Unable to write to remote memory. (%u) %s\n"), (UINT) dw, err_msg);
 		}
 
 		VirtualFreeEx(process, remote_msg, 0, MEM_RELEASE);
 	} else {
 		DWORD dw = GetLastError();
-		const char *err_msg = get_win32_error_message(dw);
-		printf("Unable to allocate remote memory. (%u) %s\n", (UINT) dw, err_msg);
+		const TCHAR *err_msg = get_win32_error_message(dw);
+		_tprintf(_T("Unable to allocate remote memory. (%u) %s\n"), (UINT) dw, err_msg);
 	}
 
 	CloseHandle(process);
+	free(utf8msg);
 }
 
 
 int _stdcall
 WinMain (struct HINSTANCE__ *hInstance, struct HINSTANCE__ *hPrevInstance,
 		char *lpszCmdLine, int nCmdShow) {
-	char errbuf[512];
-	char pidgin_dir[MAX_PATH];
-	char exe_name[MAX_PATH];
+	TCHAR errbuf[512];
+	TCHAR pidgin_dir[MAX_PATH];
+	TCHAR exe_name[MAX_PATH];
 	HMODULE hmod;
-	char *tmp;
-	int pidgin_argc = __argc;
-	char **pidgin_argv = __argv;
-	int i;
-	BOOL debug = FALSE, help = FALSE, version = FALSE, multiple = FALSE;
+	TCHAR *tmp;
+	wchar_t *wtmp;
+	int pidgin_argc;
+	char **pidgin_argv; /* This is in utf-8 */
+	int i, j, k;
+	BOOL debug = FALSE, help = FALSE, version = FALSE, multiple = FALSE, success;
+	LPWSTR *szArglist;
+	LPWSTR cmdLine;
 
 	/* If debug or help or version flag used, create console for output */
 	for (i = 1; i < __argc; i++) {
@@ -655,7 +651,7 @@
 		 *  (_istty() doesn't work for stuff using the GUI subsystem) */
 		if (_fileno(stdout) == -1 || _fileno(stdout) == -2) {
 			LPFNATTACHCONSOLE MyAttachConsole = NULL;
-			if ((hmod = GetModuleHandle("kernel32.dll"))) {
+			if ((hmod = GetModuleHandle(_T("kernel32.dll")))) {
 				MyAttachConsole =
 					(LPFNATTACHCONSOLE)
 					GetProcAddress(hmod, "AttachConsole");
@@ -668,68 +664,104 @@
 		}
 	}
 
+	cmdLine = GetCommandLineW();
+
 	/* If this is a protocol handler invocation, deal with it accordingly */
-	if ((tmp = strstr(lpszCmdLine, PROTO_HANDLER_SWITCH)) != NULL) {
-		handle_protocol(tmp);
+	if ((wtmp = wcsstr(cmdLine, PROTO_HANDLER_SWITCH)) != NULL) {
+		handle_protocol(wtmp);
 		return 0;
 	}
 
 	/* Load exception handler if we have it */
 	if (GetModuleFileName(NULL, pidgin_dir, MAX_PATH) != 0) {
-		char *prev = NULL;
-		tmp = pidgin_dir;
 
 		/* primitive dirname() */
-		while ((tmp = strchr(tmp, '\\'))) {
-			prev = tmp;
-			tmp++;
-		}
+		tmp = _tcsrchr(pidgin_dir, _T('\\'));
 
-		if (prev) {
-			prev[0] = '\0';
+		if (tmp) {
+			HMODULE hmod;
+			tmp[0] = _T('\0');
+
+			/* tmp++ will now point to the executable file name */
+			_tcscpy(exe_name, tmp + 1);
 
-			/* prev++ will now point to the executable file name */
-			strcpy(exe_name, prev + 1);
+			_tcscat(pidgin_dir, _T("\\exchndl.dll"));
+			if ((hmod = LoadLibrary(pidgin_dir))) {
+				FARPROC proc;
+				/* exchndl.dll is built without UNICODE */
+				char debug_dir[MAX_PATH];
+				printf("Loaded exchndl.dll\n");
+				/* Temporarily override exchndl.dll's logfile
+				 * to something sane (Pidgin will override it
+				 * again when it initializes) */
+				proc = GetProcAddress(hmod, "SetLogFile");
+				if (proc) {
+					if (GetTempPathA(sizeof(debug_dir) * sizeof(char), debug_dir) != 0) {
+						strcat(debug_dir, "pidgin.RPT");
+						printf(" Setting exchndl.dll LogFile to %s\n",
+							debug_dir);
+						(proc)(debug_dir);
+					}
+				}
+				proc = GetProcAddress(hmod, "SetDebugInfoDir");
+				if (proc) {
+					char *pidgin_dir_ansi = NULL;
+					tmp[0] = _T('\0');
+#ifdef _UNICODE
+					i = WideCharToMultiByte(CP_ACP, 0, pidgin_dir,
+						-1, NULL, 0, NULL, NULL);
+					if (i != 0) {
+						pidgin_dir_ansi = malloc(i * sizeof(char));
+						i = WideCharToMultiByte(CP_ACP, 0, pidgin_dir,
+							-1, pidgin_dir_ansi, i, NULL, NULL);
+						if (i == 0) {
+							free(pidgin_dir_ansi);
+							pidgin_dir_ansi = NULL;
+						}
+					}
+#else
+					pidgin_dir_ansi = pidgin_dir;
+#endif
+					if (pidgin_dir_ansi != NULL) {
+						_snprintf(debug_dir, sizeof(debug_dir) / sizeof(char),
+							"%s\\pidgin-%s-dbgsym",
+							pidgin_dir_ansi,  VERSION);
+						debug_dir[sizeof(debug_dir) / sizeof(char) - 1] = '\0';
+						printf(" Setting exchndl.dll DebugInfoDir to %s\n",
+							debug_dir);
+						(proc)(debug_dir);
+#ifdef _UNICODE
+						free(pidgin_dir_ansi);
+#endif
+					}
+				}
 
-			strcat(pidgin_dir, "\\exchndl.dll");
-			if (LoadLibrary(pidgin_dir))
-				printf("Loaded exchndl.dll\n");
+			}
 
-			prev[0] = '\0';
+			tmp[0] = _T('\0');
 		}
 	} else {
 		DWORD dw = GetLastError();
-		const char *err_msg = get_win32_error_message(dw);
-		_snprintf(errbuf, 512,
-			"Error getting module filename.\nError: (%u) %s",
+		const TCHAR *err_msg = get_win32_error_message(dw);
+		_sntprintf(errbuf, 512,
+			_T("Error getting module filename.\nError: (%u) %s"),
 			(UINT) dw, err_msg);
-		printf("%s\n", errbuf);
+		_tprintf(_T("%s\n"), errbuf);
 		MessageBox(NULL, errbuf, NULL, MB_OK | MB_TOPMOST);
-		pidgin_dir[0] = '\0';
+		pidgin_dir[0] = _T('\0');
 	}
 
 	/* Determine if we're running in portable mode */
-	if (strstr(lpszCmdLine, "--portable-mode")
-			|| (exe_name != NULL && strstr(exe_name, "-portable.exe"))) {
-		int i = 0, c = 0;
-
+	if (wcsstr(cmdLine, L"--portable-mode")
+			|| (exe_name != NULL && _tcsstr(exe_name, _T("-portable.exe")))) {
 		printf("Running in PORTABLE mode.\n");
 		portable_mode = TRUE;
-
-		/* Remove the --portable-mode arg from the args passed to pidgin so it doesn't choke */
-		pidgin_argv = malloc(sizeof(char*) * pidgin_argc);
-		for (; i < __argc; i++) {
-			if (strstr(__argv[i], "--portable-mode") == NULL)
-				pidgin_argv[c++] = __argv[i];
-			else
-				pidgin_argc--;
-		}
 	}
 
 	if (portable_mode)
 		portable_mode_dll_prep(pidgin_dir);
 	else if (!getenv("PIDGIN_NO_DLL_CHECK"))
-		dll_prep();
+		dll_prep(pidgin_dir);
 
 	winpidgin_set_locale();
 
@@ -741,23 +773,53 @@
 			return 0;
 
 	/* Now we are ready for Pidgin .. */
-	if ((hmod = LoadLibrary("pidgin.dll")))
+	if ((hmod = LoadLibrary(_T("pidgin.dll"))))
 		pidgin_main = (LPFNPIDGINMAIN) GetProcAddress(hmod, "pidgin_main");
 
 	if (!pidgin_main) {
 		DWORD dw = GetLastError();
 		BOOL mod_not_found = (dw == ERROR_MOD_NOT_FOUND || dw == ERROR_DLL_NOT_FOUND);
-		const char *err_msg = get_win32_error_message(dw);
+		const TCHAR *err_msg = get_win32_error_message(dw);
 
-		_snprintf(errbuf, 512, "Error loading pidgin.dll.\nError: (%u) %s%s%s",
+		_sntprintf(errbuf, 512, _T("Error loading pidgin.dll.\nError: (%u) %s%s%s"),
 			(UINT) dw, err_msg,
-			mod_not_found ? "\n" : "",
-			mod_not_found ? "This probably means that GTK+ can't be found." : "");
-		printf("%s\n", errbuf);
-		MessageBox(NULL, errbuf, TEXT("Error"), MB_OK | MB_TOPMOST);
+			mod_not_found ? _T("\n") : _T(""),
+			mod_not_found ? _T("This probably means that GTK+ can't be found.") : _T(""));
+		_tprintf(_T("%s\n"), errbuf);
+		MessageBox(NULL, errbuf, _T("Error"), MB_OK | MB_TOPMOST);
 
 		return 0;
 	}
 
+	/* Convert argv to utf-8*/
+	szArglist = CommandLineToArgvW(cmdLine, &j);
+	pidgin_argc = j;
+	pidgin_argv = malloc(pidgin_argc* sizeof(char*));
+	k = 0;
+	for (i = 0; i < j; i++) {
+		success = FALSE;
+		/* Remove the --portable-mode arg from the args passed to pidgin so it doesn't choke */
+		if (wcsstr(szArglist[i], L"--portable-mode") == NULL) {
+			int len = WideCharToMultiByte(CP_UTF8, 0, szArglist[i],
+				-1, NULL, 0, NULL, NULL);
+			if (len != 0) {
+				char *arg = malloc(len * sizeof(char));
+				len = WideCharToMultiByte(CP_UTF8, 0, szArglist[i],
+					-1, arg, len, NULL, NULL);
+				if (len != 0) {
+					pidgin_argv[k++] = arg;
+					success = TRUE;
+				}
+			}
+			if (!success)
+				wprintf(L"Error converting argument '%s' to UTF-8\n",
+					szArglist[i]);
+		}
+		if (!success)
+			pidgin_argc--;
+	}
+	LocalFree(szArglist);
+
+
 	return pidgin_main(hInstance, pidgin_argc, pidgin_argv);
 }
--- a/po/ChangeLog	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/ChangeLog	Thu Feb 18 21:38:43 2010 +0000
@@ -1,13 +1,23 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
+version 2.7.0
+
 version 2.6.6
 	* Afrikaans translation updated (Friedel Wolff)
 	* Albanian translation updated (Besnik Bleta)
+	* Bengali translation updated (Jamil Ahmed)
+	* Chinese (Hong Kong) translation updated (Ambrose C. Li, Paladin R. Liu)
 	* Chinese (Simplified) translation updated (Aron Xu)
+	* Chinese (Traditional) translation updated (Ambrose C. Li, Paladin R.
+	  Liu)
 	* Czech translation updated (David Vachulka)
+	* French translation updated (Éric Boumaour)
+	* German translation updated (Björn Voigt and Jochen Kemnade)
 	* Gujarati translation updated (Sweta Kothari, Gujarati Language team)
+	* Hebrew translation updated (Shalom Craimer)
 	* Kannada translation updated (Shankar Prasad, Kannada Translation team)
 	* Marathi translation added (Sandeep Shedmake)
+	* Norwegian Bokmål translation updated (Hans Fredrik Nordhaug)
 	* Norwegian Nynorsk translation updated and win32 translation
 	  added (Yngve Spjeld Landro)
 	* Oriya translation added (Manoj Kumar Giri)
@@ -15,6 +25,9 @@
 	* Polish win32 installer updated (Piotr Drąg)
 	* Punjabi translation updated (Amanpreet Singh Alam)
 	* Russian translation updated (Антон Самохвалов)
+	* Slovak translation updated (loptosko)
+	* Slovenian translation updated (Martin Srebotnjak)
+	* Spanish translation updated (Francisco Javier F. Serrador)
 	* Tamil translation updated (I. Felix)
 	* Ukrainian translation updated (Oleksandr Kovalenko)
 
--- a/po/POTFILES.in	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/POTFILES.in	Thu Feb 18 21:38:43 2010 +0000
@@ -50,8 +50,7 @@
 libpurple/ft.c
 libpurple/gconf/purple.schemas.in
 libpurple/log.c
-libpurple/media.c
-libpurple/mediamanager.c
+libpurple/media/backend-fs2.c
 libpurple/plugin.c
 libpurple/plugins/autoaccept.c
 libpurple/plugins/buddynote.c
--- a/po/bn.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/bn.po	Thu Feb 18 21:38:43 2010 +0000
@@ -6,14 +6,15 @@
 # Jamil Ahmed <jamil@bengalinux.org>, 2007.
 # Israt Jahan <israt@ankur.org.bd>, 2008-2009.
 # Samia Niamatullah <samia@ankur.org.bd>, 2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Pidgin 2.5.3\n"
+# Sadia Afroz <sadia@ankur.org.bd>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:33-0500\n"
-"PO-Revision-Date: 2009-07-21 18:20+0700\n"
-"Last-Translator: Samia <samia@ankur.org.bd>\n"
+"POT-Creation-Date: 2010-02-11 21:45-0800\n"
+"PO-Revision-Date: 2010-02-11 02:20+0600\n"
+"Last-Translator: Sadia Afroz <sadia@ankur.org.bd>\n"
 "Language-Team: Bengali <ankur-bd-l10n@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -27,7 +28,7 @@
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
 msgid "Finch"
-msgstr "Finch "
+msgstr "Finch"
 
 #, c-format
 msgid "%s. Try `%s -h' for more information.\n"
@@ -581,7 +582,7 @@
 "Finch পুনরায় সংযোগ করার চেষ্টা করবে না।"
 
 msgid "Re-enable Account"
-msgstr "একাউন্ট পুনরায় সক্রিয়করণ "
+msgstr "একাউন্ট পুনরায় সক্রিয়করণ"
 
 # ***
 msgid "No such command."
@@ -666,9 +667,9 @@
 msgid "Enable Sounds"
 msgstr "শব্দ সক্রিয়করণ"
 
-#, fuzzy
+# Translated by sadia
 msgid "You are not connected."
-msgstr "সার্ভার সংযোগটি বন্ধ করে দিয়েছে"
+msgstr "আপনি সংযুক্ত নন।"
 
 msgid "<AUTO-REPLY> "
 msgstr "<AUTO-REPLY>"
@@ -679,9 +680,9 @@
 msgstr[0] "%d ব্যবহারকারীর তালিকা:...\n"
 msgstr[1] "%d ব্যবহারকারীগণের তালিকা:\n"
 
-#, fuzzy
+# Translated by sadia
 msgid "Supported debug options are: plugins version"
-msgstr "সমর্থিত ডিবাগ অপশন: সংস্করণ"
+msgstr "সমর্থিত ডিবাগ অপশন: প্লাগইন সংস্করণ "
 
 # ***
 msgid "No such command (in this context)."
@@ -1596,16 +1597,18 @@
 "\n"
 "TinyURL  আনা হচ্ছে..."
 
+# Translated by sadia
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr ""
-
+msgstr "উপরের জন্য TinyURL: %s"
+
+# Translated by sadia
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr ""
-
-#, fuzzy
+msgstr "অনুগ্রহ করে অপেক্ষা করুন যতক্ষণ TinyURL কোন ছোট URL না দেয় ..."
+
+# Translated by sadia
 msgid "Only create TinyURL for URLs of this length or greater"
-msgstr "শুধুমাত্র এইরকম অথবা এর চাইতে বড় দৈর্ঘ্যের URL এর জন্য TinyURL তৈরি করুন।"
+msgstr "শুধুমাত্র এতটুকু বা এর চাইতে বড় দৈর্ঘ্যের URL এর জন্য TinyURL তৈরি করা হবে "
 
 msgid "TinyURL (or other) address prefix"
 msgstr "TinyURL (অথবা অন্যান্য) ঠিকানার উপসর্গ"
@@ -1617,14 +1620,15 @@
 msgid "TinyURL plugin"
 msgstr "TinyURL প্লাগইন"
 
-#, fuzzy
+# Translated by sadia
 msgid "When receiving a message with URL(s), use TinyURL for easier copying"
 msgstr ""
-"URL সহ একটি বার্তা গ্রহন করার সময় সহজভাবে অনুলিপি করার জন্য TinyURL ব্যবহৃত হয়"
+"URL সহ কোন বার্তা গ্রহণ করার সময় সহজভাবে অনুলিপি করার জন্য TinyURL ব্যবহার করা হবে"
 
 msgid "Online"
 msgstr "অনলাইন"
 
+#. primative,						no,							id,			name
 msgid "Offline"
 msgstr "অফলাইন "
 
@@ -1733,29 +1737,30 @@
 msgid "buddy list"
 msgstr "বন্ধু তালিকা"
 
-#, fuzzy
+# Translated by sadia
 msgid "The certificate is self-signed and cannot be automatically checked."
-msgstr ""
-"\"%s\" দ্বারা উপস্থাপিত সার্টিফিকেটটি স্ব-স্বাক্ষরিত। এটি স্বয়ংক্রিয়ভাবে পরীক্ষা করা "
-"যাবে না।"
-
+msgstr "সার্টিফিকেটটি স্ব-স্বাক্ষরিত এবং এটি স্বয়ংক্রিয়ভাবে পরীক্ষা করা যাবে না।"
+
+# Translated by sadia
 msgid ""
 "The certificate is not trusted because no certificate that can verify it is "
 "currently trusted."
 msgstr ""
-
-#, fuzzy
+"সার্টিফিকেটটি বিশ্বাসযোগ্য নয় কারণ যাচাই করার মত কোন বিশ্বাসযোগ্য সার্টিফিকেট "
+"বর্তমানে নেই।"
+
+# Translated by sadia
 msgid "The certificate is not valid yet."
-msgstr "%s এর জন্য উপস্থাপিত সার্টিফিকেট চেইন কার্যকর নয়।"
-
-#, fuzzy
+msgstr "সার্টিফিকেটটি এখনও কার্যকর করা হয়নি।"
+
+# Translated by sadia
 msgid "The certificate has expired and should not be considered valid."
-msgstr "%s এর জন্য উপস্থাপিত সার্টিফিকেট চেইন কার্যকর নয়।"
-
+msgstr "সার্টিফিকেটটি মেয়াদউত্তীর্ণ এবং বৈধ হিসেবে বিবেচনা করা উচিত নয়। "
+
+# Translated by sadia
 #. Translators: "domain" refers to a DNS domain (e.g. talk.google.com)
-#, fuzzy
 msgid "The certificate presented is not issued to this domain."
-msgstr "%s এর জন্য উপস্থাপিত সার্টিফিকেট চেইন কার্যকর নয়।"
+msgstr "উপস্থাপিত সার্টিফিকেটটি এই ডোমেইনে ইস্যুকৃত নয়।"
 
 # tithi
 msgid ""
@@ -1765,16 +1770,17 @@
 "আপনার মূল সার্টিফিকেটের কোনো ডাটাবেস নেই, সুতরাং এই সার্টিফিকেটটির কার্যকারিতা "
 "পরীক্ষা করা যাবে না।"
 
-#, fuzzy
+# Translated by sadia
 msgid "The certificate chain presented is invalid."
-msgstr "%s এর জন্য উপস্থাপিত সার্টিফিকেট চেইন কার্যকর নয়।"
-
-#, fuzzy
+msgstr "উপস্থাপিত সার্টিফিকেট চেইনটি অকার্যকর।"
+
+# Translated by sadia
 msgid "The certificate has been revoked."
-msgstr "কল সমাপ্ত করা হয়েছে।"
-
+msgstr "সার্টিফিকেটটি বাতিল করা হয়েছে।"
+
+# Translated by sadia
 msgid "An unknown certificate error occurred."
-msgstr ""
+msgstr "একটি অজানা সার্টিফিকেট ত্রুটি হয়েছে।"
 
 # tithi
 msgid "(DOES NOT MATCH)"
@@ -1826,26 +1832,27 @@
 msgid "_View Certificate..."
 msgstr "সার্টিফিকেট প্রদর্শন... (_V)"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid "The certificate for %s could not be validated."
-msgstr "%s এর জন্য উপস্থাপিত সার্টিফিকেট চেইন কার্যকর নয়।"
+msgstr "%s-এর সার্টিফিকেটের বৈধতা যাচাই করা যায়নি।"
 
 #. TODO: Probably wrong.
 msgid "SSL Certificate Error"
 msgstr "SSL সার্টিফিকেট ত্রুটি"
 
-#, fuzzy
+# Translated by sadia
 msgid "Unable to validate certificate"
-msgstr "প্রমাণীকরণ করতে ব্যর্থ: %s"
-
-#, fuzzy, c-format
+msgstr "সার্টিফিকেটের বৈধতা যাচাই করতে ব্যর্থ"
+
+# Translated by sadia
+#, c-format
 msgid ""
 "The certificate claims to be from \"%s\" instead. This could mean that you "
 "are not connecting to the service you believe you are."
 msgstr ""
-"সার্টিফিকেটটি দাবি করে যে এটি \"%1$s\" এর পরিবর্তে \"%2$s\" দ্বারা উপস্থাপিত "
-"হয়েছে। এর অর্থ হতে পার যে, আপনি যে সার্ভিসের সাথে সংযুক্ত বলে মনে করছেন আসলে তা "
-"নয়।"
+"সার্টিফিকেটটি দাবি করে যে এটি \"%s\" এর পরিবর্তে উপস্থাপিত হয়েছে। এর অর্থ হলো, "
+"আপনি যে সার্ভিসের সাথে নিজেকে সংযুক্ত বলে মনে করছেন আসলে তা নয়।"
 
 # tithi
 #. Make messages
@@ -1994,9 +2001,10 @@
 msgid "Resolver process exited without answering our request"
 msgstr "রিসলভার প্রসেস অনুরোধের উত্তর না দিয়ে প্রস্থান করেছে"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "%1$s নিরূপণে ত্রুটি: %2$d"
+msgstr "%s-কে punycode-এ রূপান্তরে ত্রুটি: %d  "
 
 # tithi
 #, c-format
@@ -2045,6 +2053,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s কোনো স্বাভাবিক ফাইল নয়। অতিসন্তর্পণে উপরিলেখন প্রত্যাখ্যান করা হয়েছে।\n"
 
+msgid "File is not readable."
+msgstr "ফাইলটি পড়ার যোগ্য নয়।"
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%1$s আপনাকে %2$s (%3$s) পাঠাতে চায়"
@@ -2094,20 +2105,23 @@
 msgid "File transfer complete"
 msgstr "ফাইল স্থানান্তর সম্পন্ন"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid "You cancelled the transfer of %s"
-msgstr "আপনি %s এর স্থানান্তর বাতিল করেছেন"
+msgstr "আপনি %s এর স্থানান্তর বাতিল করেছেন "
 
 msgid "File transfer cancelled"
 msgstr "ফাইল স্থানান্তর বাতিল করা হয়েছে"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid "%s cancelled the transfer of %s"
-msgstr "%1$s %2$s-এর স্থানান্তর বাতিল করেছে"
-
-#, fuzzy, c-format
+msgstr "%1$s %2$s-এর স্থানান্তর বাতিল করেছে "
+
+# Translated by sadia
+#, c-format
 msgid "%s cancelled the file transfer"
-msgstr "%s ফাইল স্থানান্তর বাতিল করেছে"
+msgstr "%s ফাইল স্থানান্তর বাতিল করেছে "
 
 #, c-format
 msgid "File transfer to %s failed."
@@ -2323,34 +2337,45 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <AUTO-REPLY>: %s\n"
 
+# Translated by sadia
 msgid ""
 "No codecs found. Install some GStreamer codecs found in GStreamer plugins "
 "packages."
 msgstr ""
-
+"কোন কোডেক পাওয়া যায়নি। GStreamer প্লাগইন প্যাকেজ থেকে কিছু GStreamer কোডেক "
+"ইনস্টল করুন। "
+
+# Translated by sadia
 msgid ""
 "No codecs left. Your codec preferences in fs-codecs.conf are too strict."
 msgstr ""
-
-#, fuzzy
+"কোন কোডেক বাকী নেই। fs-codecs.conf-এ আপনার পছন্দের কোডেকের তালিকা অত্যন্ত "
+"সীমাবদ্ধ।"
+
+# Translated by sadia
 msgid "A non-recoverable Farsight2 error has occurred."
-msgstr "নিম্নোক্ত ত্রুটি হয়েছে:"
-
-# tithi
-#, fuzzy
+msgstr "একটি অনিরাময়যোগ্য Farsight2 ত্রুটি হয়েছে।"
+
+# tithi
+#
+# Translated by sadia
 msgid "Conference error"
-msgstr "অধিবেশন বন্ধ"
-
+msgstr "অধিবেশন ত্রুটি "
+
+# Translated by sadia
 msgid "Error with your microphone"
-msgstr ""
-
+msgstr "আপনার মাইক্রোফোনে ত্রুটি"
+
+# Translated by sadia
 msgid "Error with your webcam"
-msgstr ""
-
-# tithi
-#, fuzzy, c-format
+msgstr "আপনার ওয়েবক্যামে ত্রুটি "
+
+# tithi
+#
+# Translated by sadia
+#, c-format
 msgid "Error creating session: %s"
-msgstr "সংযোগ তৈরিতে ত্রুটি"
+msgstr "সেশন তৈরির সময় ত্রুটি: %s"
 
 # tithi
 msgid "Error creating conference."
@@ -2620,15 +2645,18 @@
 "সার্ভার হিসেবে, প্লাগইনের IPC সাপোর্ট পরীক্ষা করা হবে। এটি IPC কমান্ডগুলো নিবন্ধন "
 "করে।"
 
+# Translated by sadia
 msgid "Hide Joins/Parts"
-msgstr ""
-
+msgstr "যোগ দেয়া/অংশ হওয়া আড়ালে রাখা হবে"
+
+# Translated by sadia
 #. Translators: Followed by an input request a number of people
 msgid "For rooms with more than this many people"
-msgstr ""
-
+msgstr "এর চাইতে বেশী সংখ্যক লোকের জন্য যে ঘর"
+
+# Translated by sadia
 msgid "If user has not spoken in this many minutes"
-msgstr ""
+msgstr "যদি ব্যবহারকারী এত সময়ের মধ্যে উত্তর না দেয়"
 
 msgid "Apply hiding rules to buddies"
 msgstr "বন্ধুদের লুকানোর নিয়ম প্রয়োগ করুন"
@@ -3323,10 +3351,12 @@
 msgstr "আড্ডায় যোগ দিন..."
 
 # ***
+#. 0
 #. Global
 msgid "Available"
 msgstr "উপস্থিত"
 
+#. 1
 #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
 #. Away stuff
@@ -3978,6 +4008,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "একটি এনক্রিপশনবিহীন স্ট্রীমে সার্ভারের সরল-টেক্সট প্রমাণীকরণ প্রয়োজন"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "সার্ভার থেকে অকার্যকর উত্তর"
+
+msgid "Server does not use any supported authentication method"
+msgstr "সার্ভার কোনো সমর্থিত প্রমাণীকরণ প্রক্রিয়া ব্যবহার করে না।"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3991,26 +4028,40 @@
 msgstr "সরল-টেক্সট প্রমাণীকরণ"
 
 # tithi
-msgid "SASL authentication failed"
-msgstr "SASL প্রমাণীকরণ ব্যর্থ"
-
-msgid "Invalid response from server"
-msgstr "সার্ভার থেকে অকার্যকর উত্তর"
-
-msgid "Server does not use any supported authentication method"
-msgstr "সার্ভার কোনো সমর্থিত প্রমাণীকরণ প্রক্রিয়া ব্যবহার করে না।"
-
-# tithi
 msgid "You require encryption, but it is not available on this server."
 msgstr "আপনার এনক্রিপশন প্রয়োজন, কিন্তু এটি এই সার্ভারটিতে নেই।"
 
 msgid "Invalid challenge from server"
 msgstr "সার্ভার থেকে অকার্যকর চ্যালেঞ্জ"
 
+# Translated by sadia
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "প্রমাণীকরণ সম্পন্ন হয়েছে বলে সার্ভার মনে করছে, কিন্তু ক্লায়েন্ট মনে করছে না"
+
+# tithi
+msgid "SASL authentication failed"
+msgstr "SASL প্রমাণীকরণ ব্যর্থ"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "SASL ত্রুটি: %s"
 
+# Translated by sadia
+msgid "Unable to canonicalize username"
+msgstr "ব্যবহারকারীর নাম অনুমোদিত করতে ব্যর্থ"
+
+# Translated by sadia
+msgid "Unable to canonicalize password"
+msgstr "পাসওয়ার্ড অনুমোদিত করতে ব্যর্থ"
+
+# Translated by sadia
+msgid "Malicious challenge from server"
+msgstr "সার্ভার থেকে বিদ্বেষপূর্ণ চ্যালেঞ্জ"
+
+# Translated by sadia
+msgid "Unexpected response from server"
+msgstr "সার্ভার থেকে অপ্রত্যাশিত উত্তর পাওয়া গেছে"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "আপনার সেশনটি BOSH সংযোগ ব্যবস্থাপক সমাপ্ত করেছে।"
 
@@ -4111,13 +4162,17 @@
 msgid "Resource"
 msgstr "রিসোর্স"
 
+# Translated by sadia
+msgid "Uptime"
+msgstr "আপটাইম"
+
+msgid "Logged Off"
+msgstr "লগ আউট হয়েছে"
+
 #, c-format
 msgid "%s ago"
 msgstr "%s আগে"
 
-msgid "Logged Off"
-msgstr "লগ আউট হয়েছে"
-
 msgid "Middle Name"
 msgstr "মধ্য নাম"
 
@@ -4133,13 +4188,13 @@
 msgid "Logo"
 msgstr "লোগো"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid ""
 "%s will no longer be able to see your status updates.  Do you want to "
 "continue?"
 msgstr ""
-"আপনি %s-কে আপনার বন্ধু তালিকা থেকে অপসারণ করতে পারেন।  আপনি কি অব্যাহত রাখতে "
-"চান?"
+"%s এরপর থেকে আপনার স্ট্যাটাস আপডেট আর দেখতে পাবে না। আপনি কি অগ্রসর হতে চান?"
 
 msgid "Cancel Presence Notification"
 msgstr "উপস্থিতির ঘোষণা বাতিল"
@@ -4172,6 +4227,7 @@
 msgid "Log Out"
 msgstr "লগ আউট"
 
+#. 2
 msgid "Chatty"
 msgstr "আড্ডাবাজ"
 
@@ -4179,6 +4235,7 @@
 msgid "Extended Away"
 msgstr "অনেকক্ষন যাবত অন্যত্র"
 
+#. 3
 msgid "Do Not Disturb"
 msgstr "বিরক্ত করবেন না"
 
@@ -4315,12 +4372,6 @@
 msgid "Ping timed out"
 msgstr "পিং এর সময় উত্তীর্ণ হয়েছে"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"সরাসরি সংযোগ স্থাপনে ব্যর্থ হওয়ার পর বিকল্প XMPP সংযোগ প্রক্রিয়া খুঁজে পাওয়া যায়নি।"
-
 msgid "Invalid XMPP ID"
 msgstr "অকার্যকর XMPP ID"
 
@@ -4449,6 +4500,7 @@
 msgid "None (To pending)"
 msgstr "কোনটি নয় (প্রাপক অমীমাংসিত)"
 
+#. 0
 msgid "None"
 msgstr "কোনটি নয়"
 
@@ -4785,9 +4837,9 @@
 msgid "configure:  Configure a chat room."
 msgstr "configure: একটি আড্ডার আসর কনফিগার করে।"
 
-#, fuzzy
+# Translated by sadia
 msgid "part [message]:  Leave the room."
-msgstr "part [room]:  আসর ত্যাগ করুন।"
+msgstr "part [message]: আসরটি ত্যাগ করুন। "
 
 # tithi
 msgid "register:  Register with a chat room."
@@ -4808,13 +4860,14 @@
 "সহকারে ব্যবহারকারী গ্রহন করুন অথবা আসরের সঙ্গে ব্যবহারকারীর অধিভুক্তি নির্ধারণ করুন।"
 
 # tithi
-#, fuzzy
+#
+# Translated by sadia
 msgid ""
 "role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: Get the "
 "users with a role or set users' role with the room."
 msgstr ""
-"role &lt;user&gt; &lt;moderator|participant|visitor|none&gt;: ভূমিকা সহকারে "
-"ব্যবহারকারী গ্রহন করুন অথবা আসরের সঙ্গে ব্যবহারকারীর ভূমিকা নির্ধারণ করুন।"
+"role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: ভূমিকা "
+"সহকারে ব্যবহারকারী গ্রহণ করা হবে অথবা ঘরটিতে ব্যবহারকারীর ভূমিকা নির্ধারণ করা হবে।"
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
 msgstr "invite &lt;user&gt; [message]: একজন ব্যবহারকারীকে আসরে আমন্ত্রণ জানান"
@@ -4919,6 +4972,9 @@
 msgid "(Code %s)"
 msgstr "(কোড %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "বার্তার ভিতর স্বনির্বাচিত স্মাইলিটি পাঠানোর জন্য খুবই বড়।"
+
 # tithi
 msgid "XML Parse error"
 msgstr "XML পার্স ত্রুটি"
@@ -5266,9 +5322,10 @@
 msgstr "প্রত্যাশিত নয়"
 
 # tithi
-#, fuzzy
+#
+# Translated by sadia
 msgid "Friendly name is changing too rapidly"
-msgstr "বন্ধুসুলভ নাম খুব দ্রুত পরিবর্তিত হয়"
+msgstr "বন্ধুসুলভ নাম খুব দ্রুত পরিবর্তিত হচ্ছে"
 
 #, c-format
 msgid "Server too busy"
@@ -5369,6 +5426,11 @@
 msgstr "আপনার নতুন MSN বন্ধুসুলভ নাম অতি দীর্ঘ।"
 
 # tithi
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "%s এর জন্য বন্ধুসুলভ নাম নির্ধারণ করুন।"
+
+# tithi
 msgid "Set your friendly name."
 msgstr "আপনার বন্ধুসুলভ নাম নির্ধারণ।"
 
@@ -5514,12 +5576,14 @@
 "MSN এর জন্য SSL সমর্থন প্রয়োজন। অনুগ্রহ করে একটি সমর্থিত SSL লাইব্রেরী ইনস্টল করুন।"
 
 # tithi
-#, fuzzy, c-format
+#
+# Translated by sadia
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
 msgstr ""
-"বন্ধু %s কে যোগ করা সম্ভব হয়নি কারণ ব্যবহারকারীর নামটি অকার্যকর। ব্যবহারকারী নাম "
+"%s বন্ধুকে সংযুক্ত করতে ব্যর্থ কারণ ব্যবহারকারীর নামটি অকার্যকর। ব্যবহারকারী নাম "
 "অবশ্যই একটি কার্যকর ইমেইল ঠিকানা হতে হবে।"
 
 msgid "Unable to Add"
@@ -5755,9 +5819,9 @@
 msgid "Unknown error (%d)"
 msgstr "অজানা ত্রুটি (%d)"
 
-#, fuzzy
+# Translated by sadia
 msgid "Unable to remove user"
-msgstr "ব্যবহারকারী যোগ করতে ব্যর্থ"
+msgstr "ব্যবহারকারী অপসারণ করতে ব্যর্থ"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "মোবাইল বার্তাটি অনেক বড় বিধায় পাঠানো হয়নি।"
@@ -5878,10 +5942,13 @@
 "আপনার ওয়েবক্যাম প্রদর্শনের জন্য %s অনুরোধ করেছেন কিন্তু এই অনুরোধটি এখনও সমর্থিত হয়নি।"
 
 # tithi
-#, fuzzy, c-format
+#
+#
+# Translated by sadia
+#, c-format
 msgid "%s invited you to view his/her webcam, but this is not yet supported."
 msgstr ""
-"আপনার ওয়েবক্যাম প্রদর্শনের জন্য %s অনুরোধ করেছেন কিন্তু এই অনুরোধটি এখনও সমর্থিত হয়নি।"
+"%s আপনাকে তার ওয়েবক্যাম দেখার জন্য অনুরোধ করেছেন, কিন্তু এটি এখনও সমর্থিত নয়।"
 
 msgid "Away From Computer"
 msgstr "কম্পিউটার থেকে দূরে"
@@ -6006,387 +6073,518 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "%s আপনাকে তার বন্ধু তালিকা থেকে অপসারণ করেছেন।"
 
+#. 1
+msgid "Angry"
+msgstr "রাগী"
+
+#. 2
+msgid "Excited"
+msgstr "উদ্দীপ্ত"
+
+# Translated by sadia
+#. 3
+msgid "Grumpy"
+msgstr "রাগান্বিত"
+
+#. 4
+msgid "Happy"
+msgstr "সুখী"
+
+# tithi
+#. 5
+msgid "In Love"
+msgstr "প্রেমময়"
+
+# tithi
+#. 6
+msgid "Invincible"
+msgstr "অজেয়"
+
+#. 7
+msgid "Sad"
+msgstr "দুঃখী"
+
+# Translated by sadia
+#. 8
+msgid "Hot"
+msgstr "উত্তেজিত"
+
+# Translated by sadia
+#. 9
+msgid "Sick"
+msgstr "অসুস্থ"
+
+#. 10
+msgid "Sleepy"
+msgstr "ঘুমন্ত"
+
+# Translated by sadia
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "আপনার বর্তমান মনমেজাজ"
-
+msgstr "আপনার বর্তমান মেজাজ"
+
+# Translated by sadia
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "মনমেজাজ"
-
-#, fuzzy
+msgstr "নতুন মেজাজ"
+
+# Translated by sadia
 msgid "Change your Mood"
-msgstr "পাসওয়ার্ড পরিবর্তন"
-
-#, fuzzy
+msgstr "আপনার মেজাজ পরিবর্তন করুন"
+
+# Translated by sadia
 msgid "How do you feel right now?"
-msgstr "এই মূহুর্তে আমি এখানে নেই"
-
+msgstr "এই মূহুর্তে আপনি কেমন বোধ করছেন?"
+
+# tithi
+#
+#
+# Translated by sadia
+msgid "The PIN you entered is invalid."
+msgstr "আপনি যে PIN প্রবেশ করিয়েছেন তা অকার্যকর।"
+
+# tithi
+#
+#
+# Translated by sadia
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "আপনি যে PIN প্রবেশ করিয়েছেন তার দৈর্ঘ্য অকার্যকর [৪-১০]।"
+
+# Translated by sadia
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr "এই PIN-টি অকার্যকর। এটা শুধুমাত্র [০-৯] পর্যন্ত সংখ্যা দ্বারা গঠিত হতে হবে।"
+
+# Translated by sadia
+msgid "The two PINs you entered do not match."
+msgstr "আপনি যে দুটি PIN প্রবেশ করিয়েছেন তা মিলছে না।"
+
+# tithi
+#
+#
+# Translated by sadia
+msgid "The name you entered is invalid."
+msgstr "আপনি যে নাম প্রবেশ করিয়েছেন তা অকার্যকর।"
+
+# Translated by sadia
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr ""
+"আপনি যে জন্মদিন প্রবেশ করিয়েছেন তা অকার্যকর। সঠিক ফরম্যাট হলো: 'YYYY-MM-DD'।"
+
+# Translated by sadia
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "লিখতে ত্রুটি"
+msgstr "প্রোফাইল হালনাগাদকরনে ত্রুটি "
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
 msgid "Profile"
 msgstr "প্রোফাইল"
 
+# Translated by sadia
 msgid "Your profile information is not yet retrieved. Please try again later."
 msgstr ""
-
+"আপনার প্রোফাইলের তথ্য এখনও খুঁজে পাওয়া যায়নি। অনুগ্রহ করে কিছুক্ষণ পর আবার চেষ্টা করুন।"
+
+# Translated by sadia
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
-
+msgstr "PIN"
+
+# Translated by sadia
 msgid "Verify PIN"
-msgstr ""
-
+msgstr "PIN যাচাই করা হবে"
+
+# Translated by sadia
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "পারিবারিক নাম"
-
+msgstr "নাম প্রদর্শন করা হবে"
+
+# Translated by sadia
 #. hidden
 msgid "Hide my number"
-msgstr ""
-
+msgstr "আমার নাম্বার লুকিয়ে রাখা হবে"
+
+# Translated by sadia
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
-msgstr "মোবাইল ফোন নম্বর"
-
-#, fuzzy
+msgstr "মোবাইল নাম্বার"
+
+# Translated by sadia
 msgid "Update your Profile"
-msgstr "ইয়াহু! প্রোফাইল"
-
+msgstr "আপনার প্রোফাইল হালনাগাদ করুন"
+
+# Translated by sadia
 msgid "Here you can update your MXit profile"
-msgstr ""
-
+msgstr "এখানে আপনি আপনার MXit প্রোফাইল হালনাগাদ করতে পারেন"
+
+# Translated by sadia
 msgid "View Splash"
-msgstr ""
-
+msgstr "স্প্ল্যাশ প্রদর্শন করা হবে"
+
+# Translated by sadia
 msgid "There is no splash-screen currently available"
-msgstr ""
-
-#, fuzzy
+msgstr "এই মূহুর্তে কোন স্প্ল্যাশ স্ক্রীন বিদ্যমান নেই"
+
+# Translated by sadia
 msgid "About"
-msgstr "আমার সম্পর্কে"
-
+msgstr "পরিচিতি"
+
+# Translated by sadia
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "পাসওয়ার্ড পরিবর্তন..."
-
+msgstr "মেজাজ পরিবর্তন করা হবে..."
+
+# Translated by sadia
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "পাসওয়ার্ড পরিবর্তন..."
-
+msgstr "প্রোফাইল পরিবর্তন করা হবে..."
+
+# Translated by sadia
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "লগ প্রদর্শন..."
-
+msgstr "স্প্ল্যাশ প্রদর্শন করা হবে..."
+
+# Translated by sadia
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "আমার সম্পর্কে"
-
+msgstr "পরিচিতি..."
+
+# Translated by sadia
 #. the file is too big
-#, fuzzy
 msgid "The file you are trying to send is too large!"
-msgstr "বার্তাটি খুবই বড়।"
-
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
+msgstr "আপনি যে ফাইলটি পাঠানোর চেষ্টা করছেন তা অত্যধিক বড়!"
+
+# Translated by sadia
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"MXit HTTP সার্ভারে সংযোগ দিতে ব্যর্থ। অনুগ্রহ করে আপনার সার্ভারের সেটিংসমূহ পরীক্ষা "
+"করুন।"
+
+# Translated by sadia
 msgid "Logging In..."
-msgstr "লগইন হচ্ছে"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
-msgstr ""
-"সার্ভারে সংযোগ দিতে ব্যর্থ। অনুগ্রহ করে আপনি যে সার্ভারে সংযোগ দিতে চান তার ঠিকানা "
-"দিন।"
-
-#, fuzzy
+msgstr "লগ ইন করা হচ্ছে..."
+
+# Translated by sadia
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr ""
+"MXit সার্ভারে সংযোগ দিতে ব্যর্থ। অনুগ্রহ করে আপনার সার্ভারের সেটিংসমূহ পরীক্ষা করুন।"
+
+# Translated by sadia
 msgid "Connecting..."
-msgstr "সংযুক্ত করা হচ্ছে"
-
+msgstr "সংযুক্ত করা হচ্ছে..."
+
+# tithi
+#
+#
+#
+# Translated by sadia
+msgid "The nick name you entered is invalid."
+msgstr "আপনি যে ডাকনামটি প্রবেশ করিয়েছেন তা অকার্যকর।"
+
+# tithi
+#
+#
+#
+#
+# Translated by sadia
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "আপনি যে PIN প্রবেশ করিয়েছেন তার দৈর্ঘ্য অকার্যকর [৭-১০]।"
+
+# Translated by sadia
 #. mxit login name
 msgid "MXit Login Name"
-msgstr ""
-
+msgstr "MXit-এ লগ ইন করার নাম"
+
+# Translated by sadia
 #. nick name
-#, fuzzy
 msgid "Nick Name"
-msgstr "ডাকনাম"
-
+msgstr "ডাকনাম "
+
+# Translated by sadia
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "নতুন XMPP একাউন্ট নিবন্ধন"
-
-#, fuzzy
+msgstr "নতুন MXit একাউন্টে নিবন্ধন করা হবে"
+
+# Translated by sadia
 msgid "Please fill in the following fields:"
-msgstr "অনুগ্রহ করে, নিচের ক্ষেত্রগুলো পূরণ করুন"
-
+msgstr "অনুগ্রহ করে নিচের ক্ষেত্রগুলো পূরণ করুন:"
+
+# Translated by sadia
 #. no reply from the WAP site
 msgid "Error contacting the MXit WAP site. Please try again later."
-msgstr ""
-
+msgstr "MXit WAP সাইটের সংযোগে ত্রুটি। অনুগ্রহ করে কিছুক্ষণ পর আবার চেষ্টা করুন।"
+
+# Translated by sadia
 #. wapserver error
 #. server could not find the user
 msgid ""
 "MXit is currently unable to process the request. Please try again later."
 msgstr ""
-
+"MXit এই মূহুর্তে অনুরোধটি প্রসেস করতে ব্যর্থ। অনুগ্রহ করে কিছুক্ষণ পর আবার চেষ্টা করুন।"
+
+# Translated by sadia
 msgid "Wrong security code entered. Please try again later."
-msgstr ""
-
+msgstr "ভুল নিরাপত্তা কোড প্রবেশ করানো হয়েছে। অনুগ্রহ করে কিছুক্ষণ পর আবার চেষ্টা করুন।"
+
+# Translated by sadia
 msgid "Your session has expired. Please try again later."
-msgstr ""
-
+msgstr "আপনার সেশনের মেয়াদউত্তীর্ণ হয়েছে। অনুগ্রহ করে কিছুক্ষণ পর আবার চেষ্টা করুন। "
+
+# Translated by sadia
 msgid "Invalid country selected. Please try again."
-msgstr ""
-
+msgstr "অকার্যকর দেশ নির্বাচন করা হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।"
+
+# Translated by sadia
 msgid "Username is not registered. Please register first."
-msgstr ""
-
+msgstr "ব্যবহারকারীর নাম নিবন্ধন করা নেই। অনুগ্রহ করে প্রথমে নিবন্ধন করুন।"
+
+# Translated by sadia
 msgid "Username is already registered. Please choose another username."
 msgstr ""
-
-# tithi
-#, fuzzy
+"ব্যবহারকারীর নাম ইতিমধ্যেই নিবন্ধন করা হয়েছে। অনুগ্রহ করে অন্য ব্যবহারকারী নাম "
+"নির্বাচন করুন।"
+
+# tithi
+#
+#
+#
+# Translated by sadia
 msgid "Internal error. Please try again later."
-msgstr "সার্ভার বিদ্যমান নয়; পরবর্তীতে আবার চেষ্টা করুন"
-
+msgstr "অভ্যন্তরীণ ত্রুটি। অনুগ্রহ করে কিছুক্ষণ পর আবার চেষ্টা করুন।"
+
+# Translated by sadia
 msgid "You did not enter the security code"
-msgstr ""
-
-#, fuzzy
+msgstr "আপনি কোন নিরাপত্তা কোড প্রবেশ করাননি"
+
+# Translated by sadia
 msgid "Security Code"
-msgstr "নিরাপত্তা সক্রিয়"
-
+msgstr "নিরাপত্তা কোড"
+
+# Translated by sadia
 #. ask for input
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "কোড দিন"
-
-#, fuzzy
+msgstr "নিরাপত্তা কোড দিন"
+
+# Translated by sadia
 msgid "Your Country"
-msgstr "দেশ"
-
-#, fuzzy
+msgstr "আপনার দেশ"
+
+# Translated by sadia
 msgid "Your Language"
-msgstr "পছন্দের ভাষা"
-
-# tithi
+msgstr "আপনার ভাষা"
+
+# tithi
+#
+#
+#
+# Translated by sadia
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "অনুমোদন প্রয়োজন"
-
+msgstr "MXit অনুমোদন  "
+
+# Translated by sadia
 msgid "MXit account validation"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit একাউন্টের কার্যকারীতা"
+
+# Translated by sadia
 msgid "Retrieving User Information..."
-msgstr "সার্ভারের তথ্য"
-
-#, fuzzy
+msgstr "ব্যবহারকারীর তথ্য খুঁজে আনা হচ্ছে..."
+
+# Translated by sadia
+msgid "Loading menu..."
+msgstr "মেনু লোড করা হচ্ছে..."
+
+# Translated by sadia
 msgid "Status Message"
-msgstr "প্রেরিত বার্তা"
-
-#, fuzzy
+msgstr "স্ট্যাটাস বার্তা"
+
+# Translated by sadia
 msgid "Hidden Number"
-msgstr "মধ্য নাম"
-
-#, fuzzy
+msgstr "লুকানো সংখ্যা"
+
+# Translated by sadia
 msgid "Your Mobile Number..."
-msgstr "মোবাইল ফোন নম্বর নির্ধারণ..."
-
+msgstr "আপনার মোবাইল নাম্বার..."
+
+# Translated by sadia
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
 msgid "WAP Server"
-msgstr "সার্ভার"
-
-#, fuzzy
+msgstr "WAP সার্ভার"
+
+# Translated by sadia
 msgid "Connect via HTTP"
-msgstr "TCP দ্বারা সংযোগ করা হবে"
-
+msgstr "HTTP-র মাধ্যমে সংযুক্ত করা হবে"
+
+# Translated by sadia
 msgid "Enable splash-screen popup"
-msgstr ""
-
+msgstr "স্প্ল্যাশ স্ক্রীন পপ আপ সক্রিয় করা হবে"
+
+# Translated by sadia
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr ""
-
+msgstr "আমরা MXit সংযোগ হারিয়ে ফেলেছি। অনুগ্রহ করে আবার সংযুক্ত হোন।"
+
+# Translated by sadia
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "XMPP বার্তায় ত্রুটি"
-
-#, fuzzy
+msgstr "বার্তা প্রেরণে ত্রুটি "
+
+# Translated by sadia
 msgid "Unable to process your request at this time"
-msgstr "হোস্টের নাম নিরূপণ করতে ব্যর্থ"
-
+msgstr "এই মূহুর্তে আপনার অনুরোধটি প্রসেস করতে ব্যর্থ"
+
+# Translated by sadia
 msgid "Timeout while waiting for a response from the MXit server."
-msgstr ""
-
-#, fuzzy
+msgstr "MXit সার্ভার থেকে উত্তর পাওয়ার জন্য অপেক্ষমাণ সময় উত্তীর্ণ।"
+
+# Translated by sadia
 msgid "Successfully Logged In..."
-msgstr "Qun এ সফলভাবে যুক্ত হয়েছে"
-
-#, fuzzy
+msgstr "সফলভাবে লগ ইন করা হয়েছে..."
+
+# tithi
+#
+#
+#
+#
+#
+# Translated by sadia
+#, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr ""
+"%s আপনাকে একটি এনক্রিপ্টকৃত বার্তা প্রেরণ করেছে, কিন্তু এটি এই ক্লায়েন্টে সমর্থিত নয়।"
+
+# Translated by sadia
 msgid "Message Error"
-msgstr "XMPP বার্তায় ত্রুটি"
-
+msgstr "বার্তায় ত্রুটি"
+
+# Translated by sadia
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "উল্লিখিত প্রটোকল দ্বারা রিডিরেক্ট সম্পাদন সম্ভব হচ্ছে না"
+
+# Translated by sadia
+msgid "An internal MXit server error occurred."
+msgstr "MXit সার্ভারে একটি অভ্যন্তরীণ ত্রুটি হয়েছে।"
+
+# Translated by sadia
+#, c-format
+msgid "Login error: %s (%i)"
+msgstr "লগ ইন ত্রুটি: %s (%i)"
+
+# Translated by sadia
+#, c-format
+msgid "Logout error: %s (%i)"
+msgstr "লগ আউট ত্রুটি: %s (%i)"
+
+# Translated by sadia
 msgid "Contact Error"
-msgstr "সংযোগে ত্রুটি"
-
-#, fuzzy
+msgstr "পরিচিতি ত্রুটি "
+
+# Translated by sadia
 msgid "Message Sending Error"
-msgstr "XMPP বার্তায় ত্রুটি"
-
-#, fuzzy
+msgstr "বার্তা প্রেরণে ত্রুটি"
+
+# Translated by sadia
 msgid "Status Error"
-msgstr "স্ট্রীম ত্রুটি"
-
-#, fuzzy
+msgstr "স্ট্যাটাসে ত্রুটি"
+
+# Translated by sadia
 msgid "Mood Error"
-msgstr "আইকন ত্রুটি"
-
-#, fuzzy
+msgstr "ত্রুটিপূর্ণ মেজাজ  "
+
+# Translated by sadia
 msgid "Invitation Error"
-msgstr "অনিবন্ধন ত্রুটি"
-
-#, fuzzy
+msgstr "আমন্ত্রণে ত্রুটি"
+
+# Translated by sadia
 msgid "Contact Removal Error"
-msgstr "সংযোগে ত্রুটি"
-
-#, fuzzy
+msgstr "পরিচিতি অপসারণে ত্রুটি"
+
+# Translated by sadia
 msgid "Subscription Error"
-msgstr "সাবস্ক্রিপশন"
-
-#, fuzzy
+msgstr "সাবস্ক্রিপশন ত্রুটি "
+
+# Translated by sadia
 msgid "Contact Update Error"
-msgstr "সংযোগে ত্রুটি"
-
-#, fuzzy
+msgstr "পরিচিতি হালনাগাদ করনে ত্রুটি"
+
+# Translated by sadia
 msgid "File Transfer Error"
-msgstr "ফাইল স্থানান্তর"
-
-#, fuzzy
+msgstr "ফাইল স্থানান্তরে ত্রুটি "
+
+# Translated by sadia
 msgid "Cannot create MultiMx room"
-msgstr "পাউন্স তৈরী করা সম্ভব হয়নি"
-
-#, fuzzy
+msgstr "MultiMx ঘর তৈরী করা যাচ্ছে না"
+
+# Translated by sadia
 msgid "MultiMx Invitation Error"
-msgstr "অনিবন্ধন ত্রুটি"
-
-#, fuzzy
+msgstr "MultiMx আমন্ত্রণে ত্রুটি"
+
+# Translated by sadia
 msgid "Profile Error"
-msgstr "লিখতে ত্রুটি"
-
+msgstr "প্রোফাইলে ত্রুটি"
+
+# Translated by sadia
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
-
+msgstr "MXit থেকে অকার্যকর প্যাকেট গ্রহণ করা হয়েছে। "
+
+# Translated by sadia
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
-
+msgstr "MXit-তে একটি সংযোগ ত্রুটি দেখা দিয়েছে। (stage 0x01 পড়ুন)"
+
+# Translated by sadia
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
-
+msgstr "MXit-তে একটি সংযোগ ত্রুটি দেখা দিয়েছে। (stage 0x02 পড়ুন)"
+
+# Translated by sadia
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
-
+msgstr "MXit-তে একটি সংযোগ ত্রুটি দেখা দিয়েছে। (stage 0x03 পড়ুন)"
+
+# Translated by sadia
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
-
+msgstr "MXit-তে একটি সংযোগ ত্রুটি দেখা দিয়েছে। (stage 0x04 পড়ুন)"
+
+# Translated by sadia
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
-
+msgstr "MXit-তে একটি সংযোগ ত্রুটি দেখা দিয়েছে। (stage 0x05 পড়ুন)"
+
+# Translated by sadia
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-msgid "Angry"
-msgstr "রাগী"
-
-msgid "Excited"
-msgstr "উত্তেজিত"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "দল"
-
-msgid "Happy"
-msgstr "সুখী"
-
-# tithi
-msgid "In Love"
-msgstr "প্রেমময়"
-
-# tithi
-msgid "Invincible"
-msgstr "অজেয়"
-
-msgid "Sad"
-msgstr "দুঃখী"
-
-#, fuzzy
-msgid "Hot"
-msgstr "হোস্ট (_H):"
-
-#, fuzzy
-msgid "Sick"
-msgstr "ডাকনাম"
-
-msgid "Sleepy"
-msgstr "ঘুমন্ত"
-
-#, fuzzy
+msgstr "MXit-তে একটি সংযোগ ত্রুটি দেখা দিয়েছে। (stage 0x06 পড়ুন)"
+
+# Translated by sadia
 msgid "Pending"
-msgstr "পাঠানো হচ্ছে"
-
-#, fuzzy
+msgstr "মূলতবি রয়েছে"
+
+# Translated by sadia
 msgid "Invited"
-msgstr "আমন্ত্রণ জানান"
-
-#, fuzzy
+msgstr "আমন্ত্রণ জানানো হয়েছে"
+
+# Translated by sadia
 msgid "Rejected"
-msgstr "প্রত্যাখান"
-
-#, fuzzy
+msgstr "প্রত্যাখ্যান করা হয়েছে"
+
+# Translated by sadia
 msgid "Deleted"
-msgstr "অপসারণ"
-
+msgstr "মুছে ফেলা হয়েছে"
+
+# Translated by sadia
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit প্রচারণা "
+
+# Translated by sadia
 msgid "More Information"
-msgstr "কাজের তথ্য"
+msgstr "আরও তথ্য"
 
 # tithi
 #, c-format
@@ -6909,13 +7107,14 @@
 msgid "Unable to send message. Could not create the conference (%s)."
 msgstr "বার্তা পাঠাতে ব্যর্থ। অধিবেশন (%s) তৈরি করা সম্ভব হয়নি।"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid ""
 "Unable to move user %s to folder %s in the server side list. Error while "
 "creating folder (%s)."
 msgstr ""
-"ব্যবহারকারী %1s কে সার্ভার প্রান্তের তালিকার %s ফোল্ডারে সরিয়ে নিতে ব্যর্থ। ফোল্ডার "
-"(%s) তৈরীর সময় ত্রুটি দেখা দিয়েছে।"
+"সার্ভার প্রান্তের তালিকায় %s ব্যবহারকারীকে %s ফোল্ডারে সরাতে ব্যর্থ। ফোল্ডার তৈরি "
+"করার সময় ত্রুটি (%s)।"
 
 #, c-format
 msgid ""
@@ -7048,10 +7247,15 @@
 msgid "Server port"
 msgstr "সার্ভারের পোর্ট"
 
-#. Note to translators: %s in this string is a URL
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "%s থেকে অপ্রত্যাশিত উত্তর পাওয়া গেছে: %s"
+
+# Translated by sadia
+#, c-format
 msgid "Received unexpected response from %s"
-msgstr "এটি থেকে অপ্রত্যাশিত উত্তর পাওয়া গেছে।"
+msgstr "%s থেকে অপ্রত্যাশিত উত্তর পাওয়া গেছে"
 
 # tithi
 msgid ""
@@ -7061,11 +7265,19 @@
 "আপনি খুব ঘনঘন সংযোগ স্থাপন এবং বিচ্ছিন্ন করছেন। দশ মিনিট অপেক্ষা করে পুনরায় চেষ্টা "
 "করুন। আপনি যদি চেষ্টা অব্যাহত রাখতে চান, আপনাকে আরও বেশী অপেক্ষা করতে হবে।"
 
+# Translated by sadia
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting %s: %s"
-msgstr "অনুরোধ করতে ত্রুটি"
+msgstr "%s অনুরোধে ত্রুটি: %s "
+
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"সাইন ইন করার জন্য সার্ভার একটি CAPTCHA অনুরোধ করছে, কিন্তু এটি বর্তমানে CAPTCHA "
+"সাপোর্ট করে না।"
 
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL এখানে আপনার স্ক্রিন নামের প্রমাণীকরণ অনুমোদন করে না।"
@@ -7239,47 +7451,55 @@
 msgid "Not while on AOL"
 msgstr "AOL এ থাকা অবস্থায় নয়"
 
+# Translated by sadia
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
-
+msgstr "অভিভাবক নিয়ন্ত্রণ ব্যবস্থার জন্য IM গ্রহণ করা যাচ্ছে না "
+
+# Translated by sadia
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "শর্তাবলী গ্রহণ না করে SMS পাঠানো যাচ্ছে না"
+
+# Translated by sadia
 msgid "Cannot send SMS"
-msgstr "ফাইল পাঠানো সম্ভব হয়নি"
-
+msgstr "SMS পাঠানো যাচ্ছে না"
+
+# Translated by sadia
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "ডিরেক্টরি পাঠানো সম্ভব নয়।"
-
+msgstr "এই দেশটিতে SMS পাঠানো যাচ্ছে না"
+
+# Translated by sadia
 #. Undocumented
 msgid "Cannot send SMS to unknown country"
-msgstr ""
-
+msgstr "অজানা কোন দেশে SMS পাঠানো যাচ্ছে না"
+
+# Translated by sadia
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
-
+msgstr "Bot একাউন্ট IM চালু করতে পারছে না "
+
+# Translated by sadia
 msgid "Bot account cannot IM this user"
-msgstr ""
-
+msgstr "Bot একাউন্ট এই ব্যবহারকারীকে IM দিচ্ছে না "
+
+# Translated by sadia
 msgid "Bot account reached IM limit"
-msgstr ""
-
+msgstr "Bot একাউন্ট IM সীমায় পৌছে গেছে"
+
+# Translated by sadia
 msgid "Bot account reached daily IM limit"
-msgstr ""
-
+msgstr "Bot একাউন্ট প্রতিদিনের IM সীমায় পৌছে গেছে"
+
+# Translated by sadia
 msgid "Bot account reached monthly IM limit"
-msgstr ""
-
-#, fuzzy
+msgstr "Bot একাউন্ট মাসিক IM সীমায় পৌছে গেছে"
+
+# Translated by sadia
 msgid "Unable to receive offline messages"
-msgstr "বার্তা পাঠানো যায়নি।"
-
-#, fuzzy
+msgstr "অফলাইন বার্তা গ্রহণ করতে ব্যর্থ"
+
+# Translated by sadia
 msgid "Offline message store full"
-msgstr "অফলাইন বার্তা"
+msgstr "অফলাইন বার্তার সংগ্রহস্থল পূর্ণ"
 
 # tithi
 msgid ""
@@ -7467,15 +7687,21 @@
 msgstr "AOL তাৎক্ষণিক বার্তাবাহক সার্ভিস সাময়িকভাবে পাওয়া যায়না।"
 
 # tithi
+#
+#
+#
+#
+#
+# Translated by sadia
 #. username connecting too frequently
-#, fuzzy
 msgid ""
 "Your username has been connecting and disconnecting too frequently. Wait ten "
 "minutes and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"আপনি খুব ঘনঘন সংযোগ স্থাপন এবং বিচ্ছিন্ন করছেন। দশ মিনিট অপেক্ষা করে পুনরায় চেষ্টা "
-"করুন। আপনি যদি চেষ্টা অব্যাহত রাখতে চান, আপনাকে আরও বেশী অপেক্ষা করতে হবে।"
+"আপনার ব্যবহারকারী নামটি খুব ঘনঘন সংযোগ স্থাপন এবং বিচ্ছিন্ন করছে। দশ মিনিট অপেক্ষা "
+"করে পুনরায় চেষ্টা করুন। আপনি যদি চেষ্টা অব্যাহত রাখেন, আপনাকে আরও বেশী সময় অপেক্ষা "
+"করতে হবে।"
 
 # tithi
 #. client too old
@@ -7484,15 +7710,22 @@
 msgstr "আপনার ব্যবহৃত ক্লায়েন্ট সংস্করণটি খুব পুরনো। অনুগ্রহ করে %s এ হালনাহাদ করুন"
 
 # tithi
+#
+#
+#
+#
+#
+#
+# Translated by sadia
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "Your IP address has been connecting and disconnecting too frequently. Wait a "
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"আপনি খুব ঘনঘন সংযোগ স্থাপন এবং বিচ্ছিন্ন করছেন। কিছুক্ষন অপেক্ষা করে পুনরায় চেষ্টা "
-"করুন। আপনি যদি চেষ্টা অব্যাহত রাখতে চান, আপনাকে আরও বেশী সময় অপেক্ষা করতে হবে।"
+"আপনার IP অ্যাড্রেসটি খুব ঘনঘন সংযোগ স্থাপন এবং বিচ্ছিন্ন করছে। এক মিনিট অপেক্ষা করে "
+"পুনরায় চেষ্টা করুন। আপনি যদি চেষ্টা অব্যাহত রাখেন, আপনাকে আরও বেশী সময় অপেক্ষা "
+"করতে হবে।"
 
 # tithi
 msgid "The SecurID key entered is invalid"
@@ -7645,21 +7878,24 @@
 msgstr[0] "আপনি অজ্ঞাত কারণে %2$s থেকে %1$huটি বার্তা হারিয়েছেন।"
 msgstr[1] "আপনি অজ্ঞাত কারণে %2$s থেকে %1$huটি বার্তা হারিয়েছেন।"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "বার্তা (%s) পাঠাতে ব্যর্থ।"
+msgstr "বার্তা পাঠাতে ব্যর্থ: %s (%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "বার্তা পাঠাতে ব্যর্থ: %s।"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "%s এ বার্তা পাঠাতে ব্যর্থ:"
-
-#, fuzzy, c-format
+msgstr "%s-এ বার্তা পাঠাতে ব্যর্থ: %s (%s)"
+
+# Translated by sadia
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "%s এ বার্তা পাঠাতে ব্যর্থ:"
+msgstr "%s-এ বার্তা পাঠাতে ব্যর্থ: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7692,14 +7928,6 @@
 "[এই ব্যবহারকারী থেকে একটি বার্তা প্রদর্শন করতে ব্যর্থ কারণ এটি অকার্যকর বর্ণচিহ্ন "
 "ধারণ করেছিল।]"
 
-#, fuzzy
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"আপনি সর্বশেষ যে কাজটি করার চেষ্টা করেছেন তা সম্পাদন করা যায়নি কারণ আপনি দ্রুততার "
-"সীমা অতিক্রম করেছেন। অনুগ্রহ করে ১০ সেকেন্ড অপেক্ষা করুন এবং পুনরায় চেষ্টা করুন।"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "আপনাকে %s আড্ডার আসর থেকে বিচ্ছিন্ন করা হয়েছে।"
@@ -7991,9 +8219,9 @@
 msgid "C_onnect"
 msgstr "সংযোগ (_O)"
 
-#, fuzzy
+# Translated by sadia
 msgid "You closed the connection."
-msgstr "সার্ভার সংযোগটি বন্ধ করে দিয়েছে"
+msgstr "আপনি সংযোগটি বন্ধ করে দিয়েছেন।"
 
 msgid "Get AIM Info"
 msgstr "AIM তথ্য গ্রহণ"
@@ -8006,9 +8234,9 @@
 msgid "Get Status Msg"
 msgstr "অবস্থার বার্তা খুঁজুন"
 
-#, fuzzy
+# Translated by sadia
 msgid "End Direct IM Session"
-msgstr "সরাসরি IM স্থাপন করা হয়েছে"
+msgstr "সরাসরি IM সেশন সমাপ্ত করা হবে"
 
 # tithi
 msgid "Direct IM"
@@ -8553,9 +8781,14 @@
 
 # If the localized string is intended to swap the parameters, the
 # correct syntax is "%2$u %1$u Qun blah"
-#, fuzzy, c-format
+#
+#
+#
+#
+# Translated by sadia
+#, c-format
 msgid "%u request to join Qun %u"
-msgstr "%1u %2u Qunএ যুক্ত হতে অনুরোধ করছে"
+msgstr "%u Qun %u-কে যোগ দিতে অনুরোধ করেছে"
 
 #, c-format
 msgid "Failed to join Qun %u, operated by admin %u"
@@ -8932,9 +9165,10 @@
 msgid "File Send"
 msgstr "ফাইল প্রেরণ"
 
-#, fuzzy, c-format
+# Translated by sadia
+#, c-format
 msgid "%d cancelled the transfer of %s"
-msgstr "%1$d %2$s-এর স্থানান্তর বাতিল করেছে"
+msgstr "%d %s-এর স্থানান্তর বাতিল করেছে "
 
 #, c-format
 msgid "<b>Group Title:</b> %s<br>"
@@ -10652,8 +10886,9 @@
 msgid "Ignore conference and chatroom invitations"
 msgstr "অধিবেশন এবং আড্ডার আসরের আমন্ত্রন অগ্রাহ্য করা হবে"
 
+# Translated by sadia
 msgid "Use account proxy for SSL connections"
-msgstr ""
+msgstr "SSL সংযোগের ক্ষেত্রে একাউন্টের প্রক্সি ব্যবহার করা হবে"
 
 msgid "Chat room list URL"
 msgstr "আড্ডার আসরের তালিকার URL"
@@ -10762,27 +10997,34 @@
 msgid "Ignore buddy?"
 msgstr "বন্ধুকে অগ্রাহ্য করবেন?"
 
-#, fuzzy
+# Translated by sadia
 msgid "Invalid username or password"
-msgstr "ভুল ব্যবহারকারীর নাম বা পাসওয়ার্ড"
-
-# tithi
-#, fuzzy
+msgstr "ব্যবহারকারীর নাম বা পাসওয়ার্ড অকার্যকর"
+
+# tithi
+#
+#
+#
+# Translated by sadia
 msgid ""
 "Your account has been locked due to too many failed login attempts.  Please "
 "try logging into the Yahoo! website."
 msgstr ""
-"একাউন্ট আবদ্ধ: অত্যধিকবার লগইন করার ব্যর্থ চেষ্টা। ইয়াহু! তে লগইন করলে হয়তো এটি ঠিক "
-"হবে।"
-
+"অত্যধিকবার লগইন করার ব্যর্থ চেষ্টার কারণে আপনার একাউন্টটি জব্দ করা হয়েছে। অনুগ্রহ "
+"করে ইয়াহু! ওয়েবসাইটে লগিং করার চেষ্টা করুন।"
+
+# Translated by sadia
 #, c-format
 msgid "Unknown error 52.  Reconnecting should fix this."
-msgstr ""
-
+msgstr "অজানা ত্রুটি ৫২। পুন:সংযোগের সময় এটা নির্দিষ্ট করা উচিত। "
+
+# Translated by sadia
 msgid ""
 "Error 1013: The username you have entered is invalid.  The most common cause "
 "of this error is entering your email address instead of your Yahoo! ID."
 msgstr ""
+"ত্রুটি ১০১৩: আপনি যে ব্যবহারকারীর নাম প্রবেশ করিয়েছেন তা অকার্যকর। এই ত্রুটির প্রধান "
+"কারণ আপনি হয়ত ইয়াহু! ID-র পরিবর্তে আপনার ইমেইল ঠিকানা প্রবেশ করিয়েছেন। "
 
 # tithi
 #, c-format
@@ -10879,14 +11121,17 @@
 msgid "Open Inbox"
 msgstr "ইনবক্স খুলুন"
 
+# Translated by sadia
 msgid "Can't send SMS. Unable to obtain mobile carrier."
-msgstr ""
-
+msgstr "SMS পাঠানো যাচ্ছে না। মোবাইল পরিবাহক সংগ্রহ করতে ব্যর্থ। "
+
+# Translated by sadia
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
-
+msgstr "SMS পাঠানো যাচ্ছে না। অপরিচিত মোবাইল পরিবাহক। "
+
+# Translated by sadia
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "SMS-টি পাঠানোর জন্য মোবাইল পরিবাহক গ্রহণ করা হচ্ছে। "
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
@@ -11455,9 +11700,12 @@
 "আপনার %1$s পড়ার সময় একটি ত্রুটির দেখা দেয়েছে। ফাইলটি লোড করা হয়নি, এবং পুরনো "
 "ফাইলটি %2$s~ এ নামান্তর করা হয়েছে।"
 
+# Translated by sadia
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
+"IM-এর মাধ্যমে আড্ডা দিন। যা AIM, Google Talk, Jabber/XMPP, MSN, Yahoo এবং আরও "
+"অনেক কিছু সমর্থন করে "
 
 msgid "Internet Messenger"
 msgstr "ইন্টারনেট বার্তাবাহক"
@@ -11608,9 +11856,9 @@
 msgid "Layout"
 msgstr "বহির্বিন্যাস"
 
-#, fuzzy
+# Translated by sadia
 msgid "The layout of icons, name, and status of the buddy list"
-msgstr "আইকন, নাম এবং blist এর অবস্থার বহির্বিন্যাস"
+msgstr "বন্ধু তালিকার আইকন, নাম এবং স্ট্যাটাস-এর বহির্বিন্যাস"
 
 #. Group
 #. Note to translators: These two strings refer to the background color
@@ -11662,11 +11910,11 @@
 msgid "The text information for when a contact is expanded"
 msgstr "পরিচিতি প্রসারনের সময় টেক্সট তথ্য"
 
+# Translated by sadia
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is online
-#, fuzzy
 msgid "Online Text"
-msgstr "অনলাইন টেক্সট"
+msgstr "অনলাইন লেখা "
 
 msgid "The text information for when a buddy is online"
 msgstr "বন্ধু অনলাইনে থাকার সময় টেক্সট তথ্য"
@@ -11679,15 +11927,15 @@
 msgid "The text information for when a buddy is away"
 msgstr "বন্ধু অন্যত্র থাকার সময় টেক্সট তথ্য"
 
+# Translated by sadia
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is offline
-#, fuzzy
 msgid "Offline Text"
-msgstr "অফলাইন অবস্থার টেক্সট"
-
-#, fuzzy
+msgstr "অফলাইন লেখা "
+
+# Translated by sadia
 msgid "The text information for when a buddy is offline"
-msgstr "বন্ধু অফলাইনে থাকার সময় টেক্সট তথ্য"
+msgstr "কোন বন্ধু অফলাইনে থাকার সময় পাঠ্য তথ্য"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is idle
@@ -11710,11 +11958,13 @@
 msgid "Message (Nick Said) Text"
 msgstr "বার্তা (\"ডাকনাম\" বলেছিল) টেক্সট"
 
-#, fuzzy
+# Translated by sadia
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nickname"
-msgstr "একটি অপঠিত বার্তায় আপনার নাম উল্লেখ করা হলে যে লেখা প্রদর্শিত হবে"
+msgstr ""
+"আপনার ডাকনাম উল্লিখিত কোন আড্ডায় যখন কোন অপঠিত বার্তা থাকে, তখন যে পাঠ্য তথ্য "
+"প্রদর্শন করা হবে"
 
 msgid "The text information for a buddy's status"
 msgstr "বন্ধুর অবস্থার জন্য টেক্সট তথ্য "
@@ -12161,9 +12411,13 @@
 msgstr "দল (_G):"
 
 # tithi
-#, fuzzy
+#
+#
+#
+#
+# Translated by sadia
 msgid "Auto_join when account connects."
-msgstr "একাউন্ট অনলাইনে থাকলে স্বয়ংক্রিয় ভাবে যোগদান করা হবে।"
+msgstr "একাউন্ট সংযুক্ত হলে স্বয়ংক্রিয়ভাবে যোগ দেয়া হবে। (_j)"
 
 # tithi
 msgid "_Remain in chat after window is closed."
@@ -12280,9 +12534,9 @@
 msgid "/Conversation/New Instant _Message..."
 msgstr "/কথোপকথন/নতুন বার্তা... (_M)"
 
-#, fuzzy
+# Translated by sadia
 msgid "/Conversation/Join a _Chat..."
-msgstr "/কথোপকথন/আমন্ত্রণ... (_v)"
+msgstr "/কথোপকথন/আড্ডায় যোগ দিন... (_C)"
 
 msgid "/Conversation/_Find..."
 msgstr "/কথোপকথন/খুঁজুন... (_F)"
@@ -12678,8 +12932,9 @@
 msgid "Estonian"
 msgstr "এসতোনীয়"
 
+# Translated by sadia
 msgid "Basque"
-msgstr ""
+msgstr "বস্কো"
 
 msgid "Persian"
 msgstr "পার্সীয়"
@@ -12752,15 +13007,19 @@
 msgid "Lao"
 msgstr "লাও"
 
-msgid "Lithuanian"
-msgstr "লিথুনীয়"
-
 msgid "Macedonian"
 msgstr "ম্যাসেডনিয়"
 
 msgid "Mongolian"
 msgstr "মঙ্গোলীয়"
 
+msgid "Marathi"
+msgstr "মারাঠি"
+
+# Translated by sadia
+msgid "Malay"
+msgstr "মালয় (মালয়শিয়া)"
+
 # fix me tithi
 msgid "Bokmål Norwegian"
 msgstr "বোকমাল নরওয়েজীয়"
@@ -12779,6 +13038,9 @@
 msgid "Occitan"
 msgstr "ওক্কিটান"
 
+msgid "Oriya"
+msgstr "ঊড়িষ্যা"
+
 # tithi
 msgid "Punjabi"
 msgstr "পাঞ্জাবী"
@@ -12834,6 +13096,10 @@
 msgid "Turkish"
 msgstr "তুর্কি"
 
+# Translated by sadia
+msgid "Ukranian"
+msgstr "ইউক্রেনীয়"
+
 # tithi
 msgid "Urdu"
 msgstr "উর্দু"
@@ -12857,6 +13123,9 @@
 msgid "Amharic"
 msgstr "আমহরিক"
 
+msgid "Lithuanian"
+msgstr "লিথুনীয়"
+
 #, c-format
 msgid "About %s"
 msgstr "%s সম্পর্কে"
@@ -12891,6 +13160,7 @@
 "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
 "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
 
+# Translated by sadia
 #, c-format
 msgid ""
 "<font size=\"4\">Help from other Pidgin users:</font> <a href=\"mailto:"
@@ -12900,6 +13170,12 @@
 "primary language is <b>English</b>.  You are welcome to post in another "
 "language, but the responses may be less helpful.<br/><br/>"
 msgstr ""
+"<font size=\"4\">অন্যান্য পিজিন ব্যবহারকারীর কাছ থেকে সহায়তা:</font> <a href="
+"\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>এটি একটি<b>সর্বজনীন</"
+"b> মেইলের তালিকা!(<a href=\"http://pidgin.im/pipermail/support/\">আর্কাইভ</a>)"
+"<br/>আমরা কোন ৩য় পক্ষের প্রোটোকল বা প্লাগইন দিয়ে সহায়তা করতে পারব না!<br/>এই "
+"তালিকার প্রাথমিক ভাষা হলো <b>ইংরেজী</b>। আপনি অন্যান্য ভাষাতেও আপনার মতামত "
+"প্রকাশ করতে পারেন, কিন্তু প্রতিক্রিয়াগুলো হয়ত কম সহায়ক হবে।<br/><br/>"
 
 # fix me
 #, c-format
@@ -13481,49 +13757,69 @@
 msgid "%s %s. Try `%s -h' for more information.\n"
 msgstr "%1$s %2$s। আরও তথ্যের জন্য `%3$s -h' চেষ্টা করুন।\n"
 
+# Translated by sadia
 #, c-format
 msgid ""
 "Usage: %s [OPTION]...\n"
 "\n"
 msgstr ""
-
+"ব্যবহার: %s [OPTION]...\n"
+"\n"
+
+# Translated by sadia
 msgid "DIR"
-msgstr ""
-
+msgstr "DIR"
+
+# Translated by sadia
 msgid "use DIR for config files"
-msgstr ""
-
+msgstr "config ফাইলের জন্য DIR ব্যবহার করা হবে"
+
+# Translated by sadia
 msgid "print debugging messages to stdout"
-msgstr ""
-
+msgstr "stdout-এ ডিবাগিং বার্তা মুদ্রণ করা হবে"
+
+# Translated by sadia
 msgid "force online, regardless of network status"
-msgstr ""
-
+msgstr "অনলাইনে তাগিদ দেয়া হবে, যদি নেটওয়ার্ক স্ট্যাটাস না দেয়া থাকে"
+
+# Translated by sadia
 msgid "display this help and exit"
-msgstr ""
-
-# tithi
-#, fuzzy
+msgstr "এই সহায়িকা প্রদর্শন করা হবে এবং প্রস্থান করা হবে"
+
+# tithi
+#
+#
+#
+#
+# Translated by sadia
 msgid "allow multiple instances"
-msgstr "একসাথে একাধিক লগইন অনুমোদন করা হবে"
-
+msgstr "একাধিক লগইন অনুমোদন করা হবে"
+
+# Translated by sadia
 msgid "don't automatically login"
-msgstr ""
-
+msgstr "স্বয়ংক্রিয়ভাবে লগইন করবেন না"
+
+# Translated by sadia
 msgid "NAME"
-msgstr ""
-
+msgstr "নাম"
+
+# Translated by sadia
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
 "                      specifies account(s) to use, separated by commas.\n"
 "                      Without this only the first account will be enabled)."
 msgstr ""
-
+"উল্লিখিত একাউন্ট সক্রিয় করা হবে (ঐচ্ছিক আর্গুমেন্টের নাম\\n                      "
+"ব্যবহার করার জন্য একাউন্ট উল্লেখ করা হবে, কমা দ্বারা পৃথককৃত।"
+"\\n                      এটা ছাড়া শুধুমাত্র প্রথম একাউন্টটি সক্রিয় করা হবে)। "
+
+# Translated by sadia
 msgid "X display to use"
-msgstr ""
-
+msgstr "X ব্যবহারের জন্য প্রদর্শন করা হবে"
+
+# Translated by sadia
 msgid "display the current version and exit"
-msgstr ""
+msgstr "বর্তমান সংস্করণটি প্রদর্শন করা হবে এবং প্রস্থান করা হবে"
 
 #, c-format
 msgid ""
@@ -13570,8 +13866,9 @@
 msgid "%s wishes to start a video session with you."
 msgstr "%s আপনার সাথে একটি ভিডিও সেশন শুরু করতে চায়।"
 
+# Translated by sadia
 msgid "Incoming Call"
-msgstr ""
+msgstr "আগত কল  "
 
 msgid "_Pause"
 msgstr "বিরতি (_P)"
@@ -13786,23 +14083,25 @@
 msgid "Unknown.... Please report this!"
 msgstr "অজানা... অনুগ্রহ করে এটি রিপোর্ট করুন!"
 
+# Translated by sadia
 msgid "(Custom)"
-msgstr ""
-
-# tithi mark
-#, fuzzy
-msgid "(Default)"
-msgstr "(ডিফল্ট)"
-
+msgstr "(স্বনির্ধারিত)"
+
+# tithi
+msgid "Penguin Pimps"
+msgstr "পেঙ্গুইন পিম্প"
+
+# Translated by sadia
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "পিজিনে পূর্বনির্ধারিত সাউন্ড থীম  "
+
+# Translated by sadia
 msgid "The default Pidgin buddy list theme"
-msgstr "পিজিন বন্ধু তালিকার থীম সম্পাদক"
-
+msgstr "পিজিনে পূর্বনির্ধারিত বন্ধু তালিকার থীম  "
+
+# Translated by sadia
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "পিজিনে পূর্বনির্ধারিত স্ট্যাটাস আইকন থীম"
 
 msgid "Theme failed to unpack."
 msgstr "থীম আনপ্যাক করতে ব্যর্থ হয়েছে।"
@@ -13813,19 +14112,37 @@
 msgid "Theme failed to copy."
 msgstr "থীম অনুলিপি করতে ব্যর্থ হয়েছে।"
 
-# tithi
-msgid "Install Theme"
-msgstr "থীম ইনস্টল করুন"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
+# Translated by sadia
+msgid "Theme Selections"
+msgstr "থীম নির্বাচন"
+
+# Translated by sadia
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"নিম্নোক্ত তালিকা থেকে আপনার পছন্দনীয় একটি থীম নির্বাচন করুন।\\nনতুন কোন থীম টেনে "
+"এনে থীম তালিকায় ছেড়ে দিলেই সেটা ইনস্টল হয়ে যাবে।\n"
 "আপনি যে স্মাইলি থীম ব্যবহার করতে চান তা নিম্নবর্তী তালিকা থেকে বাছাই করুন। নতুন "
 "থীম তালিকায় টেনে এনে ফেলে ইনস্টল করতে পারেন।"
 
-msgid "Icon"
-msgstr "আইকন"
+# Translated by sadia
+msgid "Buddy List Theme:"
+msgstr "বন্ধু তালিকার থীম:"
+
+# Translated by sadia
+msgid "Status Icon Theme:"
+msgstr "স্ট্যাটাস আইকনের থীম:"
+
+# Translated by sadia
+msgid "Sound Theme:"
+msgstr "সাউন্ড থীম:"
+
+# Translated by sadia
+msgid "Smiley Theme:"
+msgstr "স্মাইলি থীম:"
 
 # tithi
 msgid "Keyboard Shortcuts"
@@ -13834,10 +14151,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "Escape কী চেপে কথোপকথন বন্ধ করা যাবে (_o)"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "বন্ধু তালিকার থীম"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "সিস্টেম ট্রের আইকন"
@@ -13928,10 +14241,6 @@
 msgstr "ফন্ট"
 
 # tithi
-msgid "Use document font from _theme"
-msgstr "থীম থেকে নথির ফন্ট ব্যবহার করা হবে (_t)"
-
-# tithi
 msgid "Use font from _theme"
 msgstr "থীম থেকে ফন্ট ব্যবহার করা হবে (_t)"
 
@@ -13955,17 +14264,17 @@
 msgid "Cannot start browser configuration program."
 msgstr "ব্রাউজার কনফিগারেশন প্রোগ্রাম শুরু করা সম্ভব হয়নি।"
 
-#, fuzzy
+# Translated by sadia
 msgid "Disabled"
-msgstr "নিষ্ক্রিয় (_D)"
+msgstr "নিষ্ক্রিয় করা হয়েছে"
 
 #, c-format
 msgid "Use _automatically detected IP address: %s"
 msgstr "স্বয়ংক্রিয়ভাবে সনাক্তকৃত IP ঠিকানা ব্যবহার করুন (_a): %s"
 
-#, fuzzy
+# Translated by sadia
 msgid "ST_UN server:"
-msgstr "সার্ভার: (_S)"
+msgstr "STUN সার্ভার: (_U)"
 
 # tithi
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
@@ -13981,81 +14290,33 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "স্বয়ংক্রিয় রাউটার পোর্ট ফরওয়ার্ডিং সক্রিয় করা হবে (_E)"
 
-#, fuzzy
+# Translated by sadia
 msgid "_Manually specify range of ports to listen on:"
-msgstr "যেসব পোর্টে লিসেন করা হবে তার সীমা স্বনির্ধারণ (_M)"
-
-#, fuzzy
+msgstr "সংযোগ অব্যাহত রাখতে নিজ হাতে পোর্টের সীমা নির্ধারণ করুন: (_M)"
+
+# Translated by sadia
 msgid "_Start:"
-msgstr "অবস্থা (_S):"
-
-#, fuzzy
+msgstr "আরম্ভ: (_S)"
+
+# Translated by sadia
 msgid "_End:"
-msgstr "প্রসারিত (_E)"
+msgstr "সমাপ্ত: (_E)"
 
 #. TURN server
 msgid "Relay Server (TURN)"
 msgstr "রিলে সার্ভার (TURN)"
 
-#, fuzzy
+# Translated by sadia
 msgid "_TURN server:"
-msgstr "সার্ভার: (_S)"
-
-#, fuzzy
+msgstr "TURN সার্ভার: (_T)"
+
+# Translated by sadia
 msgid "Use_rname:"
-msgstr "ব্যবহারকারীর নাম:"
-
-#, fuzzy
+msgstr "ব্যবহারকারীর নাম: (_r)"
+
+# Translated by sadia
 msgid "Pass_word:"
-msgstr "পাসওয়ার্ড:"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "প্রক্সি সার্ভার &amp; ব্রাউজার"
-
-# tithi
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>প্রক্সির কনফিগারেশন প্রোগ্রাম খুঁজে পাওয়া যায়নি।</b>"
-
-# tithi
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>ব্রাউজারের কনফিগারেশন প্রোগ্রাম খুঁজে পাওয়া যায়নি।</b>"
-
-# tithi
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"প্রক্সি ও ব্রাউজারের বৈশিষ্ট্যাবলী \n"
-"GNOME পছন্দসমূহে কনফিগার করা হয়েছে"
-
-msgid "Configure _Proxy"
-msgstr "প্রক্সি কনফিগারেশন  (_P)"
-
-msgid "Configure _Browser"
-msgstr "ব্রাউজার কনফিগারেশন (_B)"
-
-msgid "Proxy Server"
-msgstr "প্রক্সি সার্ভার"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "SOCKS4 প্রক্সি সম্বলিত দুরবর্তী DNS ব্যবহৃত হবে"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "প্রক্সির ধরন (_t):"
-
-msgid "No proxy"
-msgstr "কোনো প্রক্সি নেই"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "পোর্ট (_P):"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "ব্যবহারকারীর নাম:"
+msgstr "পাসওয়ার্ড: (_w)"
 
 # tithi
 msgid "Seamonkey"
@@ -14097,6 +14358,23 @@
 msgid "Browser Selection"
 msgstr "ব্রাউজার নির্বাচন"
 
+# tithi
+#
+#
+#
+#
+#
+# Translated by sadia
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr "GNOME পছন্দসমূহের মধ্যে ব্রাউজার পছন্দসমূহ কনফিগার করা হয়েছে "
+
+# tithi
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>ব্রাউজারের কনফিগারেশন প্রোগ্রাম খুঁজে পাওয়া যায়নি।</b>"
+
+msgid "Configure _Browser"
+msgstr "ব্রাউজার কনফিগারেশন (_B)"
+
 msgid "_Browser:"
 msgstr "ব্রাউজার (_B):"
 
@@ -14120,6 +14398,47 @@
 "সহায়িকা (_M):\n"
 "(URL এর জন্য %s)"
 
+msgid "Proxy Server"
+msgstr "প্রক্সি সার্ভার"
+
+# tithi
+#
+#
+#
+#
+#
+# Translated by sadia
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr "GNOME পছন্দসমূহের মধ্যে প্রক্সি পছন্দসমূহ কনফিগার করা হয়েছে "
+
+# tithi
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>প্রক্সির কনফিগারেশন প্রোগ্রাম খুঁজে পাওয়া যায়নি।</b>"
+
+msgid "Configure _Proxy"
+msgstr "প্রক্সি কনফিগারেশন  (_P)"
+
+# Translated by sadia
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "SOCKS4 প্রক্সি সম্বলিত দূরবর্তী DNS ব্যবহার করা হবে (_D)"
+
+# Translated by sadia
+msgid "Proxy t_ype:"
+msgstr "প্রক্সির ধরণ: (_y)"
+
+msgid "No proxy"
+msgstr "কোনো প্রক্সি নেই"
+
+# Translated by sadia
+msgid "P_ort:"
+msgstr "পোর্ট: (_o)"
+
+# Translated by sadia
+msgid "User_name:"
+msgstr "ব্যবহারকারীর নাম: (_n)"
+
 msgid "Log _format:"
 msgstr "লগ বিন্যাস (_f):"
 
@@ -14204,25 +14523,19 @@
 msgid "Based on keyboard or mouse use"
 msgstr "কীবোর্ড বা মাউসের ব্যবহারের উপর ভিত্তি করে"
 
+msgid "_Minutes before becoming idle:"
+msgstr "নিষ্ক্রিয় হওয়ার মিনিটখানেক আগে (_M):"
+
+# Translated by sadia
+msgid "Change to this status when _idle:"
+msgstr "নিষ্ক্রিয় থাকলে এই স্ট্যাটাসে রূপান্তর করা হবে: (_i)"
+
 msgid "_Auto-reply:"
 msgstr "স্বয়ংক্রিয়-উত্তর (_A):"
 
 msgid "When both away and idle"
 msgstr "যখন অন্যত্র এবং নিষ্ক্রিয়"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "স্বয়ংক্রিয়ভাবে অন্যত্র"
-
-msgid "_Minutes before becoming idle:"
-msgstr "নিষ্ক্রিয় হওয়ার মিনিটখানেক আগে (_M):"
-
-msgid "Change status when _idle"
-msgstr "নিষ্ক্রিয় থাকলে অবস্থা পরিবর্তন করা হবে (_i)"
-
-msgid "Change _status to:"
-msgstr "অবস্থা পরিবর্তন (_s):"
-
 # tithi
 #. Signon status stuff
 msgid "Status at Startup"
@@ -14239,15 +14552,16 @@
 msgid "Interface"
 msgstr "ইন্টারফেস"
 
-msgid "Smiley Themes"
-msgstr "স্মাইলি থীম"
-
 msgid "Browser"
 msgstr "ব্রাউজার"
 
 msgid "Status / Idle"
 msgstr "অবস্থা / নিষ্ক্রিয়"
 
+# Translated by sadia
+msgid "Themes"
+msgstr "থীম"
+
 msgid "Allow all users to contact me"
 msgstr "সব ব্যবহারকারীকে আমার সাথে যোগাযোগের অনুমতি দেয়া হবে"
 
@@ -14562,6 +14876,9 @@
 msgid "_Save File"
 msgstr "ফাইল সংরক্ষণ (_S)"
 
+msgid "Do you really want to clear?"
+msgstr "আপনি কি নিশ্চিতভাবে মুছে ফেলতে চান?"
+
 msgid "Select color"
 msgstr "রং নির্বাচন"
 
@@ -14602,10 +14919,6 @@
 msgstr "পিজিন স্মাইলি"
 
 # tithi
-msgid "Penguin Pimps"
-msgstr "পেঙ্গুইন পিম্প"
-
-# tithi
 msgid "Selecting this disables graphical emoticons."
 msgstr "এটি নির্বাচন করলে গ্রাফিকাল অনুভূতিচিহ্ন নিষ্ক্রিয় হবে।"
 
@@ -15265,6 +15578,10 @@
 msgid "Conversation Entry"
 msgstr "কথোপকথন ভুক্তি"
 
+# Translated by sadia
+msgid "Conversation History"
+msgstr "কথোপকথন ইতিহাস"
+
 msgid "Request Dialog"
 msgstr "অনুরোধের ডায়ালগ"
 
@@ -15631,38 +15948,53 @@
 "এই প্লাগইন ব্যবহারকারীকে কথোপকথন এবং বার্তার টাইমস্টাম্পের বিন্যাস স্বনির্বাচন করার "
 "অনুমতি দেয়।"
 
-#, fuzzy
+# Translated by sadia
 msgid "Audio"
-msgstr "স্বয়ংক্রিয়"
-
-#, fuzzy
+msgstr "অডিও"
+
+# Translated by sadia
 msgid "Video"
-msgstr "ভিডিও"
-
+msgstr "ভিডিও "
+
+# Translated by sadia
 msgid "Output"
-msgstr ""
-
-#, fuzzy
+msgstr "আউটপুট"
+
+# Translated by sadia
 msgid "_Plugin"
-msgstr "প্লাগইন"
-
-# tithi
-#, fuzzy
+msgstr "প্লাগইন (_P)"
+
+# tithi
+#
+#
+#
+#
+#
+#
+# Translated by sadia
 msgid "_Device"
-msgstr "ডিভাইস"
-
+msgstr "ডিভাইস (_D)"
+
+# Translated by sadia
 msgid "Input"
-msgstr ""
-
-#, fuzzy
+msgstr "ইনপুট"
+
+# Translated by sadia
 msgid "P_lugin"
-msgstr "প্লাগইন"
-
-# tithi
-#, fuzzy
+msgstr "প্লাগইন (_l)"
+
+# tithi
+#
+#
+#
+#
+#
+#
+# Translated by sadia
 msgid "D_evice"
-msgstr "ডিভাইস"
-
+msgstr "ডিভাইস (_e)"
+
+# Translated by sadia
 #. *< magic
 #. *< major version
 #. *< minor version
@@ -15672,18 +16004,19 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#, fuzzy
 msgid "Voice/Video Settings"
-msgstr "সেটিং সম্পাদনা"
-
+msgstr "ভয়েস/ভিডিও সেটিংসমূহ  "
+
+# Translated by sadia
 #. *< name
 #. *< version
 msgid "Configure your microphone and webcam."
-msgstr ""
-
+msgstr "আপনার মাইক্রোফোন এবং ওয়েবক্যাম কনফিগার করুন।"
+
+# Translated by sadia
 #. *< summary
 msgid "Configure microphone and webcam settings for voice/video calls."
-msgstr ""
+msgstr "ভয়েস/ভিডিও কলের জন্য মাইক্রোফোন এবং ওয়েবক্যামের সেটিংসমূহ কনফিগার করা হবে।"
 
 msgid "Opacity:"
 msgstr "অস্বচ্ছতা:"
@@ -15749,9 +16082,15 @@
 msgstr "উইন্ডোজ আরম্ভের সময় %s চালু করা হবে (_S)"
 
 # tithi
-#, fuzzy
+#
+#
+#
+#
+#
+#
+# Translated by sadia
 msgid "Allow multiple instances"
-msgstr "একসাথে একাধিক লগইন অনুমোদন করা হবে"
+msgstr "একাধিক লগইন অনুমোদন করা হবে"
 
 msgid "_Dockable Buddy List"
 msgstr "ডকযোগ্য বন্ধু তালিকা (_D)"
@@ -15816,6 +16155,61 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "এই প্লাগইনটি XMPP সার্ভার বা ক্লায়েন্ট ডিবাগ করার জন্য কার্যকর।"
 
+# Translated by sadia
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr ""
+#~ "সরাসরি সংযোগ স্থাপনে ব্যর্থ হওয়ার পর বিকল্প XMPP সংযোগ প্রক্রিয়া খুঁজে পাওয়া "
+#~ "যায়নি।"
+
+# tithi
+#
+#
+#
+# Translated by sadia
+#~ msgid "CAPTCHA requested. Logging into the AIM/ICQ website may fix this."
+#~ msgstr ""
+#~ "ক্যাপচা অনুরোধ করা হয়েছে। AIM/ICQ ওয়েবসাইটে লগ ইন করা হলে হয়ত এটা নির্দিষ্ট "
+#~ "করা যেতে পারে।"
+
+# Translated by sadia
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "আপনি সর্বশেষ যে কাজটি করার চেষ্টা করেছেন তা সম্পাদন করা যায়নি কারণ আপনি "
+#~ "দ্রুততার সীমা অতিক্রম করেছেন। অনুগ্রহ করে ১০ সেকেন্ড অপেক্ষা করুন এবং পুনরায় চেষ্টা "
+#~ "করুন।\n"
+
+# tithi mark
+#, fuzzy
+#~ msgid "(Default)"
+#~ msgstr "(ডিফল্ট)"
+
+# tithi
+#~ msgid "Install Theme"
+#~ msgstr "থীম ইনস্টল করুন"
+
+#~ msgid "Icon"
+#~ msgstr "আইকন"
+
+# tithi
+#~ msgid "Use document font from _theme"
+#~ msgstr "থীম থেকে নথির ফন্ট ব্যবহার করা হবে (_t)"
+
+#~ msgid "Proxy Server &amp; Browser"
+#~ msgstr "প্রক্সি সার্ভার &amp; ব্রাউজার"
+
+#~ msgid "Auto-away"
+#~ msgstr "স্বয়ংক্রিয়ভাবে অন্যত্র"
+
+#~ msgid "Change _status to:"
+#~ msgstr "অবস্থা পরিবর্তন (_s):"
+
 # tithi
 #, fuzzy
 #~ msgid "The root certificate this one claims to be issued by is unknown."
--- a/po/ca.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/ca.po	Thu Feb 18 21:38:43 2010 +0000
@@ -33,8 +33,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-29 22:28+0100\n"
-"PO-Revision-Date: 2009-11-29 22:39+0100\n"
+"POT-Creation-Date: 2010-02-16 09:18+0100\n"
+"PO-Revision-Date: 2010-02-16 23:08+0100\n"
 "Last-Translator: Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>\n"
 "Language-Team: Catalan <tradgnome@softcatala.net>\n"
 "MIME-Version: 1.0\n"
@@ -1987,6 +1987,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s no és un fitxer normal, no se sobreescriurà.\n"
 
+msgid "File is not readable."
+msgstr "No ha estat possible llegir el fitxer."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s us vol enviar %s (%s)"
@@ -3845,6 +3848,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "El servidor requereix autenticació de text sobre un flux no xifrat"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "La resposta del servidor no és vàlida"
+
+msgid "Server does not use any supported authentication method"
+msgstr "No hi ha cap mètode d'autenticació compatible amb aquest servidor"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3856,25 +3866,35 @@
 msgid "Plaintext Authentication"
 msgstr "Autenticació de text"
 
-msgid "SASL authentication failed"
-msgstr "Ha fallat l'autenticació SASL"
-
-msgid "Invalid response from server"
-msgstr "La resposta del servidor no és vàlida"
-
-msgid "Server does not use any supported authentication method"
-msgstr "No hi ha cap mètode d'autenticació compatible amb aquest servidor"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "Requeriu xifratge, però no està disponible en aquest servidor."
 
 msgid "Invalid challenge from server"
 msgstr "Repte del servidor invàlid"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "El servidor creu que s'ha completat l'autenticació, però el client no"
+
+msgid "SASL authentication failed"
+msgstr "Ha fallat l'autenticació SASL"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "Error SASL: %s"
 
+# FIXME: canonicalize -> normalitzar (josep)
+msgid "Unable to canonicalize username"
+msgstr "No s'ha pogut normalitzar el nom d'usuari"
+
+msgid "Unable to canonicalize password"
+msgstr "No s'ha pogut normalitzar la contrasenya"
+
+msgid "Malicious challenge from server"
+msgstr "Desafiament malició del servidor"
+
+msgid "Unexpected response from server"
+msgstr "S'ha rebut una resposta inesperada del servidor"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "El gestor de connexions BOSH ha tancat la connexió."
 
@@ -3975,13 +3995,17 @@
 msgid "Resource"
 msgstr "Recurs"
 
+# FIXME
+msgid "Uptime"
+msgstr "Temps connectat"
+
+msgid "Logged Off"
+msgstr "Desconnectat"
+
 #, c-format
 msgid "%s ago"
 msgstr "fa %s"
 
-msgid "Logged Off"
-msgstr "Desconnectat"
-
 # Segons la viquipèdia
 msgid "Middle Name"
 msgstr "Nom del mig"
@@ -4172,13 +4196,6 @@
 msgid "Ping timed out"
 msgstr "S'ha esgitat el temps d'espera (ping)"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"No s'ha pogut trobar cap mètode alternatiu de connexió XMPP després de no "
-"haver pogut connectar directament."
-
 msgid "Invalid XMPP ID"
 msgstr "ID de l'XMPP invàlid"
 
@@ -4734,6 +4751,11 @@
 msgid "(Code %s)"
 msgstr "(Codi %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr ""
+"No es pot enviar una de les emoticones personalitzades del missatge atès que "
+"és massa llarga."
+
 msgid "XML Parse error"
 msgstr "Error en l'anàlisi de l'XML"
 
@@ -4776,13 +4798,13 @@
 msgstr "Us han fet fora (%s)"
 
 msgid "An error occurred on the in-band bytestream transfer\n"
-msgstr ""
+msgstr "S'ha produit un error en el fluxe de transferència de dades en banda\n"
 
 msgid "Transfer was closed."
 msgstr "La transferència s'ha tancat."
 
 msgid "Failed to open in-band bytestream"
-msgstr ""
+msgstr "No s'ha pogut obrir el fluxe de transferència de dades en banda"
 
 #, c-format
 msgid "Unable to send file to %s, user does not support file transfers"
@@ -5149,6 +5171,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "El vostre nom amistós nou d'MSN és massa llarg."
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "Establiu el nom amistós de %s."
+
 msgid "Set your friendly name."
 msgstr "Establiu el vostre nom amistós."
 
@@ -6771,7 +6797,10 @@
 msgid "Server port"
 msgstr "Port en el servidor"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "S'ha rebut una resposta inesperada de %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "S'ha rebut una resposta inesperada de %s"
@@ -6790,6 +6819,13 @@
 msgid "Error requesting %s: %s"
 msgstr "S'ha produït un error en sol·licitar %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"El servidor requereix que ompliu el CAPTCHA per poder entrar, però aquest "
+"client encara no permet l'ús de CAPTCHA."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL no permet que us autentiqueu amb aquest nom d'usuari aquí"
 
@@ -7352,13 +7388,6 @@
 "[No s'ha pogut mostrar el missatge d'aquest usuari perquè contenia caràcters "
 "invàlids.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"No s'ha pogut realitzar la darrera acció que havíeu intentat perquè esteu "
-"per sobre del límit. Espereu 10 segons i torneu-ho a provar.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Se us ha desconnectat de la conversa %s."
@@ -12040,15 +12069,15 @@
 msgid "Lao"
 msgstr "Lasià"
 
-msgid "Lithuanian"
-msgstr "Lituà"
-
 msgid "Macedonian"
 msgstr "Macedoni"
 
 msgid "Mongolian"
 msgstr "Mongol"
 
+msgid "Marathi"
+msgstr "Marathi"
+
 msgid "Malay"
 msgstr "Malai"
 
@@ -12067,6 +12096,9 @@
 msgid "Occitan"
 msgstr "Occità"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Punjabi"
 
@@ -12148,6 +12180,9 @@
 msgid "Amharic"
 msgstr "Amhàric"
 
+msgid "Lithuanian"
+msgstr "Lituà"
+
 #, c-format
 msgid "About %s"
 msgstr "Quant al %s"
@@ -13816,6 +13851,10 @@
 msgid "_Save File"
 msgstr "_Desa el fitxer"
 
+# Nota: com que és una pissarra, fem servir esborrar.
+msgid "Do you really want to clear?"
+msgstr "Esteu segur que voleu esborrar-ho?"
+
 msgid "Select color"
 msgstr "Seleccioneu un color"
 
@@ -15036,6 +15075,20 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Aquest connector és útil per a depurar servidors i clients XMPP."
 
+#~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr ""
+#~ "No s'ha pogut trobar cap mètode alternatiu de connexió XMPP després de no "
+#~ "haver pogut connectar directament."
+
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "No s'ha pogut realitzar la darrera acció que havíeu intentat perquè esteu "
+#~ "per sobre del límit. Espereu 10 segons i torneu-ho a provar.\n"
+
 #~ msgid "(Default)"
 #~ msgstr "(Predeterminat)"
 
--- a/po/ca@valencia.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/ca@valencia.po	Thu Feb 18 21:38:43 2010 +0000
@@ -3,7 +3,7 @@
 # Copyright (C) unknown, Robert Millan <zeratul2@wanadoo.es>
 # Copyright (C) December 2003 (from 2003-12-12 until 2003-12-18),
 #               January (2004-01-07,12), Xan <dxpublica@telefonica.net>
-# Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009
+# Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010
 #               Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
 #
 # This file is distributed under the same license as the Pidgin package.
@@ -33,8 +33,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-28 18:48+0100\n"
-"PO-Revision-Date: 2009-11-28 21:57+0100\n"
+"POT-Creation-Date: 2010-02-16 09:18+0100\n"
+"PO-Revision-Date: 2010-02-16 23:08+0100\n"
 "Last-Translator: Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>\n"
 "Language-Team: Catalan <tradgnome@softcatala.net>\n"
 "MIME-Version: 1.0\n"
@@ -66,7 +66,7 @@
 "Forma d'ús: %s [OPCIÓ]...\n"
 "\n"
 "  -c, --config=DIR    utilitza DIR per als fitxers de configuració\n"
-"  -d, --debug         mostra missatges de depuració a la eixida d'error\n"
+"  -d, --debug         mostra missatges de depuració a l'eixida d'error\n"
 "                      estàndard \n"
 "  -h, --help          mostra esta ajuda i ix\n"
 "  -n, --nologin       no entra automàticament\n"
@@ -1987,6 +1987,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s no és un fitxer normal, no se sobreescriurà.\n"
 
+msgid "File is not readable."
+msgstr "No ha estat possible llegir el fitxer."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s vos vol enviar %s (%s)"
@@ -2337,7 +2340,7 @@
 msgstr "Estableix el paràmetre d'acceptació automàtica"
 
 msgid "_Save"
-msgstr "De_sa"
+msgstr "Al_ça"
 
 msgid "_Cancel"
 msgstr "_Cancel·la"
@@ -2680,11 +2683,11 @@
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
 msgstr ""
-"Quan es visualitzin els registres, este connector inclourà registres "
+"Quan es visualitzen els registres, este connector inclourà registres "
 "d'altres clients de MI. De moment, es poden incloure els d'Adium, MSN "
 "Messenger, aMSN, i Trillian.\n"
 "\n"
-"Avís: este connector encara està en desenvolupament i pot ser que es pengi."
+"Avís: este connector encara està en desenvolupament i pot ser que es penge."
 
 msgid "Mono Plugin Loader"
 msgstr "Carregador de connectors Mono"
@@ -3845,6 +3848,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "El servidor requereix autenticació de text sobre un flux no xifrat"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "La resposta del servidor no és vàlida"
+
+msgid "Server does not use any supported authentication method"
+msgstr "No hi ha cap mètode d'autenticació compatible amb este servidor"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3856,25 +3866,35 @@
 msgid "Plaintext Authentication"
 msgstr "Autenticació de text"
 
-msgid "SASL authentication failed"
-msgstr "Ha fallat l'autenticació SASL"
-
-msgid "Invalid response from server"
-msgstr "La resposta del servidor no és vàlida"
-
-msgid "Server does not use any supported authentication method"
-msgstr "No hi ha cap mètode d'autenticació compatible amb este servidor"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "Requeriu xifratge, però no està disponible en este servidor."
 
 msgid "Invalid challenge from server"
 msgstr "Repte del servidor invàlid"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "El servidor creu que s'ha completat l'autenticació, però el client no"
+
+msgid "SASL authentication failed"
+msgstr "Ha fallat l'autenticació SASL"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "Error SASL: %s"
 
+# FIXME: canonicalize -> normalitzar (josep)
+msgid "Unable to canonicalize username"
+msgstr "No s'ha pogut normalitzar el nom d'usuari"
+
+msgid "Unable to canonicalize password"
+msgstr "No s'ha pogut normalitzar la contrasenya"
+
+msgid "Malicious challenge from server"
+msgstr "Desafiament malició del servidor"
+
+msgid "Unexpected response from server"
+msgstr "S'ha rebut una resposta inesperada del servidor"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "El gestor de connexions BOSH ha tancat la connexió."
 
@@ -3975,13 +3995,17 @@
 msgid "Resource"
 msgstr "Recurs"
 
+# FIXME
+msgid "Uptime"
+msgstr "Temps connectat"
+
+msgid "Logged Off"
+msgstr "Desconnectat"
+
 #, c-format
 msgid "%s ago"
 msgstr "fa %s"
 
-msgid "Logged Off"
-msgstr "Desconnectat"
-
 # Segons la viquipèdia
 msgid "Middle Name"
 msgstr "Nom del mig"
@@ -4172,13 +4196,6 @@
 msgid "Ping timed out"
 msgstr "S'ha esgitat el temps d'espera (ping)"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"No s'ha pogut trobar cap mètode alternatiu de connexió XMPP després de no "
-"haver pogut connectar directament."
-
 msgid "Invalid XMPP ID"
 msgstr "ID de l'XMPP invàlid"
 
@@ -4734,6 +4751,11 @@
 msgid "(Code %s)"
 msgstr "(Codi %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr ""
+"No es pot enviar una de les emoticones personalitzades del missatge atès que "
+"és massa llarga."
+
 msgid "XML Parse error"
 msgstr "Error en l'anàlisi de l'XML"
 
@@ -4776,13 +4798,13 @@
 msgstr "Vos han fet fora (%s)"
 
 msgid "An error occurred on the in-band bytestream transfer\n"
-msgstr ""
+msgstr "S'ha produit un error en el fluxe de transferència de dades en banda\n"
 
 msgid "Transfer was closed."
 msgstr "La transferència s'ha tancat."
 
 msgid "Failed to open in-band bytestream"
-msgstr ""
+msgstr "No s'ha pogut obrir el fluxe de transferència de dades en banda"
 
 #, c-format
 msgid "Unable to send file to %s, user does not support file transfers"
@@ -5133,15 +5155,15 @@
 "no està implementat."
 
 msgid "Nudge"
-msgstr "Donar un colp de colze"
+msgstr "Donar un cop de colze"
 
 #, c-format
 msgid "%s has nudged you!"
-msgstr "%s vos ha donat un colp de colze!"
+msgstr "%s vos ha donat un cop de colze!"
 
 #, c-format
 msgid "Nudging %s..."
-msgstr "S'està donant un colp de colze a %s..."
+msgstr "S'està donant un cop de colze a %s..."
 
 msgid "Email Address..."
 msgstr "Correu electrònic..."
@@ -5149,6 +5171,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "El vostre nom amistós nou d'MSN és massa llarg."
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "Establiu el nom amistós de %s."
+
 msgid "Set your friendly name."
 msgstr "Establiu el vostre nom amistós."
 
@@ -5483,7 +5509,7 @@
 msgstr "Mostra emoticones personalitzades"
 
 msgid "nudge: nudge a user to get their attention"
-msgstr "nudge: doneu un colp de colze a un usuari perquè vos pare atenció"
+msgstr "nudge: doneu un cop de colze a un usuari perquè vos pare atenció"
 
 msgid "Windows Live ID authentication:Unable to connect"
 msgstr "Autenticació amb el Windows Live ID: no s'ha pogut connectar"
@@ -5493,7 +5519,7 @@
 
 #, c-format
 msgid "%s just sent you a Nudge!"
-msgstr "%s vos ha donat un colp de colze!"
+msgstr "%s vos ha donat un cop de colze!"
 
 msgid "The following users are missing from your addressbook"
 msgstr "Manquen estos usuaris a la vostra llista d'amics"
@@ -6346,7 +6372,7 @@
 msgstr "Este nom d'usuari està disponible. Voleu fer-lo servir?"
 
 msgid "ONCE SET, THIS CANNOT BE CHANGED!"
-msgstr "Una vegada l'hagueu establit no el podreu canviar!"
+msgstr "Un cop l'hagueu establit no el podreu canviar!"
 
 msgid "MySpaceIM - Please Set a Username"
 msgstr "MySpaceIM - Establiu un nom d'usuari"
@@ -6771,7 +6797,10 @@
 msgid "Server port"
 msgstr "Port en el servidor"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "S'ha rebut una resposta inesperada de %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "S'ha rebut una resposta inesperada de %s"
@@ -6790,6 +6819,13 @@
 msgid "Error requesting %s: %s"
 msgstr "S'ha produït un error en sol·licitar %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"El servidor requereix que ompliu el CAPTCHA per poder entrar, però este "
+"client encara no permet l'ús de CAPTCHA."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL no permet que vos autentiqueu amb este nom d'usuari ací"
 
@@ -7352,13 +7388,6 @@
 "[No s'ha pogut mostrar el missatge d'este usuari perquè contenia caràcters "
 "invàlids.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"No s'ha pogut realitzar la darrera acció que havíeu intentat perquè esteu "
-"per sobre del límit. Espereu 10 segons i torneu-ho a provar.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Se vos ha desconnectat de la conversa %s."
@@ -9495,10 +9524,10 @@
 msgstr "Serveis en línia"
 
 msgid "Let others see what services you are using"
-msgstr "Permet que els altres vegin quins serveis feu servir"
+msgstr "Permet que els altres vegen quins serveis feu servir"
 
 msgid "Let others see what computer you are using"
-msgstr "Permet que els altres vegin quin ordinador feu servir"
+msgstr "Permet que els altres vegen quin ordinador feu servir"
 
 msgid "Your VCard File"
 msgstr "El fitxer de la vostra VCard"
@@ -9514,7 +9543,7 @@
 "information. Please fill the information you would like other users to see "
 "about yourself."
 msgstr ""
-"Podeu permetre que altres usuaris vegin informació sobre el vostre estat en "
+"Podeu permetre que altres usuaris vegen informació sobre el vostre estat en "
 "línia, així com informació personal. Empleneu la informació que vulgueu que "
 "altres usuaris puguen veure."
 
@@ -10877,7 +10906,7 @@
 msgstr "_Bàsic"
 
 msgid "Create _this new account on the server"
-msgstr "Crea _aquest compte nou al servidor"
+msgstr "Crea _este compte nou al servidor"
 
 msgid "P_roxy"
 msgstr "Servidor _intermediari"
@@ -12040,15 +12069,15 @@
 msgid "Lao"
 msgstr "Lasià"
 
-msgid "Lithuanian"
-msgstr "Lituà"
-
 msgid "Macedonian"
 msgstr "Macedoni"
 
 msgid "Mongolian"
 msgstr "Mongol"
 
+msgid "Marathi"
+msgstr "Marathi"
+
 msgid "Malay"
 msgstr "Malai"
 
@@ -12067,6 +12096,9 @@
 msgid "Occitan"
 msgstr "Occità"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Punjabi"
 
@@ -12148,6 +12180,9 @@
 msgid "Amharic"
 msgstr "Amhàric"
 
+msgid "Lithuanian"
+msgstr "Lituà"
+
 #, c-format
 msgid "About %s"
 msgstr "Quant al %s"
@@ -12780,7 +12815,7 @@
 msgstr "empra DIR per a fitxers de configuració"
 
 msgid "print debugging messages to stdout"
-msgstr "escriu missatges de depuració a la eixida estàndard"
+msgstr "escriu missatges de depuració a l'eixida estàndard"
 
 msgid "force online, regardless of network status"
 msgstr "força estar en línia, independentment de l'estat de la xarxa"
@@ -13816,6 +13851,10 @@
 msgid "_Save File"
 msgstr "Al_ça el fitxer"
 
+# Nota: com que és una pissarra, fem servir esborrar.
+msgid "Do you really want to clear?"
+msgstr "Esteu segur que voleu esborrar-ho?"
+
 msgid "Select color"
 msgstr "Seleccioneu un color"
 
@@ -15036,6 +15075,20 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Este connector és útil per a depurar servidors i clients XMPP."
 
+#~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr ""
+#~ "No s'ha pogut trobar cap mètode alternatiu de connexió XMPP després de no "
+#~ "haver pogut connectar directament."
+
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "No s'ha pogut realitzar la darrera acció que havíeu intentat perquè esteu "
+#~ "per sobre del límit. Espereu 10 segons i torneu-ho a provar.\n"
+
 #~ msgid "(Default)"
 #~ msgstr "(Predeterminat)"
 
--- a/po/cs.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/cs.po	Thu Feb 18 21:38:43 2010 +0000
@@ -9,8 +9,8 @@
 msgstr ""
 "Project-Id-Version: pidgin VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-14 12:19-0800\n"
-"PO-Revision-Date: 2010-01-14 21:08+0100\n"
+"POT-Creation-Date: 2010-02-13 23:29-0800\n"
+"PO-Revision-Date: 2010-02-12 22:16+0100\n"
 "Last-Translator: David Vachulka <david@konstrukce-cad.com>\n"
 "Language-Team: Czech <cs@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -4669,6 +4669,9 @@
 msgid "(Code %s)"
 msgstr "(Kód %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Vlastní smajlík ve zprávě je pro poslání příliš velký."
+
 msgid "XML Parse error"
 msgstr "Chyba zpracování XML"
 
@@ -6654,7 +6657,10 @@
 msgid "Server port"
 msgstr "Port serveru"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Přijata neočekávaná odpověď od %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Přijata neočekávaná odpověď od %s"
@@ -6672,6 +6678,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Chyba žádosti %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Server požádal o vyplnění CAPTCHA pro přihlášení, ale klient v současné době "
+"CAPTCHA nepodporuje."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL neumožňuje ověřit jméno tady"
 
@@ -7244,14 +7257,6 @@
 "[Nemohu zobrazit zprávu od tohoto uživatele, protože obsahovala neplatné "
 "znaky.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Poslední akce, o kterou jste se pokusili, nemohla být provedena, protože "
-"jste překročili limit rychlosti. Počkejte prosím 10 sekund a zkuste to "
-"znovu.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Byl jste odpojen z místnosti chatu %s."
@@ -11911,6 +11916,9 @@
 msgid "Occitan"
 msgstr "Occitan"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Punjabi"
 
@@ -13619,6 +13627,9 @@
 msgid "_Save File"
 msgstr "_Uložit soubor"
 
+msgid "Do you really want to clear?"
+msgstr "Opravdu chcete vymazat?"
+
 msgid "Select color"
 msgstr "Zvolte barvu"
 
@@ -14813,6 +14824,14 @@
 msgstr "Tento zásuvný modul je užitečný pro ladění serverů nebo klientů XMPP."
 
 #~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Poslední akce, o kterou jste se pokusili, nemohla být provedena, protože "
+#~ "jste překročili limit rychlosti. Počkejte prosím 10 sekund a zkuste to "
+#~ "znovu.\n"
+
+#~ msgid ""
 #~ "Unable to find alternative XMPP connection methods after failing to "
 #~ "connect directly."
 #~ msgstr ""
--- a/po/de.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/de.po	Thu Feb 18 21:38:43 2010 +0000
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-04 11:33+0100\n"
-"PO-Revision-Date: 2010-02-04 11:32+0100\n"
+"POT-Creation-Date: 2010-02-11 21:03+0100\n"
+"PO-Revision-Date: 2010-02-11 21:02+0100\n"
 "Last-Translator: Björn Voigt <bjoern@cs.tu-berlin.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -6824,6 +6824,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Fehler beim Anfordern von %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Der Server möchte, dass Sie ein CAPTCHA ausfüllen, um sich anzumelden, aber "
+"dieser Client unterstützt im Moment keine CAPTCHAs."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL erlaubt Ihnen nicht, sich hier mit Ihrem Benutzernamen anzumelden"
 
@@ -12129,6 +12136,9 @@
 msgid "Occitan"
 msgstr "Okzitanisch"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Pandschabi"
 
@@ -13876,6 +13886,9 @@
 msgid "_Save File"
 msgstr "Datei _speichern"
 
+msgid "Do you really want to clear?"
+msgstr "Wollen Sie wirklich löschen?"
+
 msgid "Select color"
 msgstr "Farbe auswählen"
 
--- a/po/es.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/es.po	Thu Feb 18 21:38:43 2010 +0000
@@ -8,6 +8,7 @@
 # Copyright (C) June 2002, April 2003, January 2004, March 2004, September 2004,
 # 	      January 2005, 2006-2008, July 2009
 # 		Javier Fernández-Sanguino Peña  <jfs@debian.org>
+# Copyright (C) February 2010, Francisco Javier F. Serrador <fserrador@gmail.com>
 #
 # Agradecemos la ayuda de revisión realizada por:
 # Nathaniel Case, Santiago Erquicia, Francisco Javier F. Serrador,
@@ -52,7 +53,7 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:34-0500\n"
+"POT-Creation-Date: 2010-02-10 20:27-0800\n"
 "PO-Revision-Date: 2009-08-05 01:47+0200\n"
 "Last-Translator: Javier Fernández-Sanguino <jfs@debian.org>\n"
 "Language-Team:  Spanish team <es@li.org>\n"
@@ -85,7 +86,7 @@
 "%s\n"
 "Modo de uso: %s [OPCIÓN]...\n"
 "\n"
-"  -c, --config=DIR     utilizar el directorio DIR para los ficheros de "
+"  -c, --config=DIR     utilizar el directorio DIR para los archivos de "
 "configuración\n"
 "  -d, --debug          imprimir mensajes de depuración en la salida estándar "
 "de error\n"
@@ -508,7 +509,7 @@
 "Make sure that the file is readable and in PEM format.\n"
 msgstr ""
 "No se pudo importar el archivo %s.\n"
-"Asegúrese de que el fichero puede leerse y que está en formato PEM.\n"
+"Asegúrese de que el archivo puede leerse y que está en formato PEM.\n"
 
 msgid "Certificate Import Error"
 msgstr "Error en la importación de certificado"
@@ -524,7 +525,7 @@
 "Export to file %s failed.\n"
 "Check that you have write permission to the target path\n"
 msgstr ""
-"Falló la exportación al fichero %s.\n"
+"Falló la exportación al archivo %s.\n"
 "Asegúrese de que tiene permisos de escritura en la ruta destino\n"
 
 msgid "Certificate Export Error"
@@ -638,7 +639,7 @@
 "%s está escribiendo..."
 
 msgid "You have left this chat."
-msgstr "Ha dejado este chat"
+msgstr "Ha dejado este chat."
 
 msgid ""
 "The account has disconnected and you are no longer in this chat. You will be "
@@ -682,9 +683,8 @@
 msgid "Enable Sounds"
 msgstr "Habilitar sonidos"
 
-#, fuzzy
 msgid "You are not connected."
-msgstr "No se pudo conectar"
+msgstr "No está conectado."
 
 msgid "<AUTO-REPLY> "
 msgstr "<RESPUESTA AUTOMÁTICA> "
@@ -695,9 +695,8 @@
 msgstr[0] "Lista de %d usuario:\n"
 msgstr[1] "Lista de %d usuario:\n"
 
-#, fuzzy
 msgid "Supported debug options are: plugins version"
-msgstr "Las opciones de depuración soportadas son:  version"
+msgstr "Las opciones de depuración soportadas son:  versión de incrustación"
 
 msgid "No such command (in this context)."
 msgstr "No existe esa orden (en este contexto)."
@@ -859,7 +858,7 @@
 msgstr "Enviado"
 
 msgid "Received"
-msgstr "Recibido:"
+msgstr "Recibido"
 
 msgid "Finished"
 msgstr "Terminado"
@@ -1033,7 +1032,7 @@
 "Descripción: %s\n"
 "Autor: %s\n"
 "Sitio web: %s\n"
-"Nombre de fichero: %s\n"
+"Nombre de archivo: %s\n"
 
 msgid "Plugin need to be loaded before you can configure it."
 msgstr "Debe cargar el complemento antes de poder configurarlo."
@@ -1045,7 +1044,7 @@
 msgstr "Error al cargar el complemento"
 
 msgid "The selected file is not a valid plugin."
-msgstr "El fichero seleccionado no es un complemento válido."
+msgstr "El archivo seleccionado no es un complemento válido."
 
 msgid ""
 "Please open the debug window and try again to see the exact error message."
@@ -1592,28 +1591,26 @@
 msgid "Please wait while TinyURL fetches a shorter URL ..."
 msgstr ""
 
-#, fuzzy
 msgid "Only create TinyURL for URLs of this length or greater"
-msgstr "Sólo crear urls de TinyURL cuando sean de esta longitudo o superior"
+msgstr "Sólo crear TinyURL para URLs de esta longitudo o superior"
 
 msgid "TinyURL (or other) address prefix"
 msgstr "Prefijo de dirección de TinyURL (u otro)"
 
 msgid "TinyURL"
-msgstr "TiniyURL"
+msgstr "TinyURL"
 
 msgid "TinyURL plugin"
 msgstr "Complemento TinyURL"
 
-#, fuzzy
 msgid "When receiving a message with URL(s), use TinyURL for easier copying"
 msgstr ""
-"Cuando se reciba un mensaje con URL(s) utilizar TinyURL para facilitar su "
-"copia"
+"Cuando se reciba un mensaje con URL(s), use TinyURL para facilitar su copia"
 
 msgid "Online"
 msgstr "Conectado"
 
+#. primative,						no,							id,			name
 msgid "Offline"
 msgstr "Desconectado"
 
@@ -1642,17 +1639,17 @@
 msgstr "Ofrece opciones adicionales para agrupar las listas de amigos."
 
 msgid "Lastlog"
-msgstr "Lastlog"
+msgstr "Último log"
 
 #. Translator Note: The "backlog" is the conversation buffer/history.
 msgid "lastlog: Searches for a substring in the backlog."
-msgstr "lastlog: Busca sub-cadenas en el registro pasado."
+msgstr "Último log: Busca sub-cadenas en el registro pasado."
 
 msgid "GntLastlog"
 msgstr "GntLastlog"
 
 msgid "Lastlog plugin."
-msgstr "Complemento «Lastlog»."
+msgstr "Complemento «Último log»."
 
 msgid "accounts"
 msgstr "cuentas"
@@ -1715,29 +1712,25 @@
 msgid "buddy list"
 msgstr "lista de amigos"
 
-#, fuzzy
 msgid "The certificate is self-signed and cannot be automatically checked."
-msgstr ""
-"El certificado presentado por «%s» es autofirmado. No puede comprobarse de "
-"forma automática."
+msgstr "El certificado es auto-asignado y no es chequeado automáticamente."
 
 msgid ""
 "The certificate is not trusted because no certificate that can verify it is "
 "currently trusted."
 msgstr ""
-
-#, fuzzy
+"El certificado no es confiado porque no certifica que puede verificarlo es "
+"actualmente confiado"
+
 msgid "The certificate is not valid yet."
-msgstr "La cadena de certificados presentada por %s no es válida."
-
-#, fuzzy
+msgstr "El certificado no es aún válido."
+
 msgid "The certificate has expired and should not be considered valid."
-msgstr "La cadena de certificados presentada por %s no es válida."
+msgstr "El certificado ha expirado y no sería considerado válido."
 
 #. Translators: "domain" refers to a DNS domain (e.g. talk.google.com)
-#, fuzzy
 msgid "The certificate presented is not issued to this domain."
-msgstr "La cadena de certificados presentada por %s no es válida."
+msgstr "El presente certificado no ha sido creado para este dominio."
 
 msgid ""
 "You have no database of root certificates, so this certificate cannot be "
@@ -1746,17 +1739,14 @@
 "No tiene una base de datos de certificados raíz por lo que no se puede "
 "validar este certificado."
 
-#, fuzzy
 msgid "The certificate chain presented is invalid."
-msgstr "La cadena de certificados presentada por %s no es válida."
-
-#, fuzzy
+msgstr "La cadena de certificados presentada es inválida."
+
 msgid "The certificate has been revoked."
-msgstr "La llamada se ha cancelado."
-
-#, fuzzy
+msgstr "La cadena ha sido revocada."
+
 msgid "An unknown certificate error occurred."
-msgstr "Ha ocurrido un error desconocido al conectarse: %s."
+msgstr "Ocurrió un error desconocido del certificado."
 
 msgid "(DOES NOT MATCH)"
 msgstr "(NO COINCIDE)"
@@ -1802,26 +1792,24 @@
 msgid "_View Certificate..."
 msgstr "_Ver certificado..."
 
-#, fuzzy, c-format
+#, c-format
 msgid "The certificate for %s could not be validated."
-msgstr "La cadena de certificados presentada por %s no es válida."
+msgstr "El certificado por %s no pudo ser validado."
 
 #. TODO: Probably wrong.
 msgid "SSL Certificate Error"
 msgstr "Error de certificado SSL"
 
-#, fuzzy
 msgid "Unable to validate certificate"
-msgstr "No se pudo autenticar: %s"
-
-#, fuzzy, c-format
+msgstr "Imposible validar el certificado"
+
+#, c-format
 msgid ""
 "The certificate claims to be from \"%s\" instead. This could mean that you "
 "are not connecting to the service you believe you are."
 msgstr ""
-"El certificado presentado por «%s» dice que pertenece a «%s» en lugar de a "
-"aquel. Esto puede significar que no se está conectando al servicio al que "
-"piensa que se está conectado."
+"El certificado expresa ser en vez de «%s». Esto podría significar que usted "
+"no está conectado con el servicio que realmente quiere."
 
 #. Make messages
 #, c-format
@@ -1849,7 +1837,7 @@
 msgstr "Error de registro"
 
 msgid "Unregistration Error"
-msgstr "Error de deregistro"
+msgstr "Error de desregistro"
 
 #, c-format
 msgid "+++ %s signed on"
@@ -1872,7 +1860,7 @@
 msgstr "No se pudo enviar el mensaje a %s."
 
 msgid "The message is too large."
-msgstr "El mensaje es demasiado largo"
+msgstr "El mensaje es demasiado largo."
 
 msgid "Unable to send message."
 msgstr "No se pudo enviar el mensaje."
@@ -1968,9 +1956,9 @@
 msgid "Resolver process exited without answering our request"
 msgstr "El proceso de resolución salió sin responder a su petición"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "Error al resolver %s: %d"
+msgstr "Error al convertir %s en código puny: %d"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -2017,13 +2005,16 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s no es un archivo normal. No se sobreescribirá.\n"
 
+msgid "File is not readable."
+msgstr "El archivo no es leíble."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s quiere enviarle %s (%s)"
 
 #, c-format
 msgid "%s wants to send you a file"
-msgstr "%s quiere enviarle un fichero"
+msgstr "%s quiere enviarle un archivo"
 
 #, c-format
 msgid "Accept file transfer request from %s?"
@@ -2066,20 +2057,20 @@
 msgid "File transfer complete"
 msgstr "Transferencia de archivos completa"
 
-#, fuzzy, c-format
+#, c-format
 msgid "You cancelled the transfer of %s"
 msgstr "Vd. canceló la transferencia de %s"
 
 msgid "File transfer cancelled"
 msgstr "Transferencia de archivos cancelada"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s cancelled the transfer of %s"
 msgstr "%s canceló la transferencia de %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s cancelled the file transfer"
-msgstr "%s canceló la transferencia de archivos"
+msgstr "%s canceló la transferencia del archivo"
 
 #, c-format
 msgid "File transfer to %s failed."
@@ -2235,7 +2226,7 @@
 msgstr "HTML"
 
 msgid "Plain text"
-msgstr "En claro"
+msgstr "Texto en claro"
 
 msgid "Old flat format"
 msgstr "Formato antiguo plano"
@@ -2278,28 +2269,30 @@
 "No codecs found. Install some GStreamer codecs found in GStreamer plugins "
 "packages."
 msgstr ""
+"No se encontró ningún código. Instale algunos códigos que se encuentran en "
+"los paquetes de los plugings de GStreamer."
 
 msgid ""
 "No codecs left. Your codec preferences in fs-codecs.conf are too strict."
 msgstr ""
-
-#, fuzzy
+"No queda ningún código. Su código preferente en fs-codecs.conf son demasiado "
+"estricto."
+
 msgid "A non-recoverable Farsight2 error has occurred."
-msgstr "Ha ocurrido un error desconocido al conectarse: %s."
-
-#, fuzzy
+msgstr "Ha ocurrido un error no recuperable Farsight2."
+
 msgid "Conference error"
-msgstr "Conferencia cerrada"
+msgstr "Error de conferencia"
 
 msgid "Error with your microphone"
-msgstr ""
+msgstr "Error con su micrófono"
 
 msgid "Error with your webcam"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "Error con su cámara web"
+
+#, c-format
 msgid "Error creating session: %s"
-msgstr "Error al crear la conexión"
+msgstr "Error al crear la sesión %s"
 
 msgid "Error creating conference."
 msgstr "Error al crear la conferencia."
@@ -2386,7 +2379,7 @@
 msgstr "Autoaceptar"
 
 msgid "Auto Reject"
-msgstr "Rechazo automática"
+msgstr "Autorechazar"
 
 msgid "Autoaccept File Transfers..."
 msgstr "Autoaceptar transferencia de archivos..."
@@ -2396,7 +2389,7 @@
 "Path to save the files in\n"
 "(Please provide the full path)"
 msgstr ""
-"Ruta donde se guardarán los ficheros\n"
+"Ruta donde se guardarán los archivos\n"
 "(Debe dar la ruta completa)"
 
 msgid "Automatically reject from users not in buddy list"
@@ -2409,7 +2402,7 @@
 "(only when there's no conversation with the sender)"
 msgstr ""
 "Notificar con una ventana cuando se haya completado una transferencia de "
-"ficheros autoaceptada\n"
+"archivos autoaceptada\n"
 "(sólo cuando no hay ya una conversación con el que la envía)"
 
 msgid "Create a new directory for each user"
@@ -2569,13 +2562,12 @@
 "Complemento de soporte IPC de prueba, como servidor. Éste registra las "
 "órdenes IPC."
 
-#, fuzzy
 msgid "Hide Joins/Parts"
-msgstr "Ocultar errores de conexión"
+msgstr "Ocultar uniones/divisiones"
 
 #. Translators: Followed by an input request a number of people
 msgid "For rooms with more than this many people"
-msgstr ""
+msgstr "Para habitaciones con más de toda esta gente excesiva"
 
 msgid "If user has not spoken in this many minutes"
 msgstr ""
@@ -2617,7 +2609,7 @@
 msgstr "El usuario no está conectado."
 
 msgid "Auto-response sent:"
-msgstr "_Enviar respuesta automática:"
+msgstr "Enviar respuesta automática:"
 
 #, c-format
 msgid "%s has signed off."
@@ -3052,7 +3044,7 @@
 
 #. email
 msgid "Email"
-msgstr "Correo electrónico"
+msgstr "Correo-e"
 
 msgid "AIM Account"
 msgstr "Cuenta AIM"
@@ -3126,7 +3118,7 @@
 
 msgid "Your buddylist is empty, nothing was written to the file."
 msgstr ""
-"No se escribió nada en el fichero ya que su lista de amigos esta vacía."
+"No se escribió nada en el archivo ya que su lista de amigos esta vacía."
 
 msgid "Buddylist saved successfully!"
 msgstr "¡Se guardó con éxito la lista de amigos!"
@@ -3175,7 +3167,7 @@
 msgstr "Introducir texto del captcha"
 
 msgid "Captcha"
-msgstr "Captcha"
+msgstr ""
 
 msgid "Register New Gadu-Gadu Account"
 msgstr "Registrando cuenta nueva de Gadu-Gadu"
@@ -3210,7 +3202,7 @@
 msgstr "Encontrar amigos"
 
 msgid "Please, enter your search criteria below"
-msgstr "Por favor, introduzca a continuación su criterio de búsqueda"
+msgstr "Por favor, introduzca su criterio de búsqueda"
 
 msgid "Fill in the fields."
 msgstr "Rellene los campos."
@@ -3250,12 +3242,14 @@
 msgstr "Seleccione un chat para el amigo: %s"
 
 msgid "Add to chat..."
-msgstr "Añadir al chat"
-
+msgstr "Añadir al chat..."
+
+#. 0
 #. Global
 msgid "Available"
 msgstr "Disponible"
 
+#. 1
 #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
 #. Away stuff
@@ -3885,6 +3879,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "El servidor solicita autenticación en claro sobre un canal no cifrado"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "Respuesta inválida del servidor"
+
+msgid "Server does not use any supported authentication method"
+msgstr "El servidor no usa un método de autenticación conocido"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3896,25 +3897,38 @@
 msgid "Plaintext Authentication"
 msgstr "Autenticación en claro"
 
-msgid "SASL authentication failed"
-msgstr "Falló la autenticación SASL"
-
-msgid "Invalid response from server"
-msgstr "Respuesta inválida del servidor"
-
-msgid "Server does not use any supported authentication method"
-msgstr "El servidor no usa un método de autenticación conocido"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "Necesita cifrado, pero no está disponible esa opción en este servidor."
 
 msgid "Invalid challenge from server"
 msgstr "Desafío inválido del servidor"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr ""
+
+msgid "SASL authentication failed"
+msgstr "Falló la autenticación SASL"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "Error de SASL: %s"
 
+#, fuzzy
+msgid "Unable to canonicalize username"
+msgstr "No se pudo configurar"
+
+#, fuzzy
+msgid "Unable to canonicalize password"
+msgstr "No se pudo enviar la contraseña"
+
+#, fuzzy
+msgid "Malicious challenge from server"
+msgstr "Desafío inválido del servidor"
+
+#, fuzzy
+msgid "Unexpected response from server"
+msgstr "Se recibió una respuesta HTTP del servidor que no se esperaba"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "El gestor de conexiones BOSH terminó su sesión."
 
@@ -4015,13 +4029,16 @@
 msgid "Resource"
 msgstr "Recurso"
 
+msgid "Uptime"
+msgstr "Actualizar"
+
+msgid "Logged Off"
+msgstr "Desconectado"
+
 #, c-format
 msgid "%s ago"
 msgstr "hace %s"
 
-msgid "Logged Off"
-msgstr "Desconectado"
-
 msgid "Middle Name"
 msgstr "Nombre medio"
 
@@ -4058,7 +4075,7 @@
 #. shouldn't this just happen automatically when the buddy is
 #. removed?
 msgid "Unsubscribe"
-msgstr "De-suscribir"
+msgstr "Desuscribir"
 
 msgid "Initiate _Chat"
 msgstr "Iniciar _chat"
@@ -4069,12 +4086,14 @@
 msgid "Log Out"
 msgstr "Desconectarse"
 
+#. 2
 msgid "Chatty"
 msgstr "Hablador"
 
 msgid "Extended Away"
 msgstr "Ausencia extendida"
 
+#. 3
 msgid "Do Not Disturb"
 msgstr "No molestar"
 
@@ -4210,13 +4229,6 @@
 msgid "Ping timed out"
 msgstr "Expiró el «ping»"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"No se pudo encontrar un método de conexión XMPP alternativo después de "
-"intentar conectar directamente sin éxito."
-
 msgid "Invalid XMPP ID"
 msgstr "XMPP ID no válido"
 
@@ -4342,6 +4354,7 @@
 msgid "None (To pending)"
 msgstr "Nadie (Destino pendiente)"
 
+#. 0
 msgid "None"
 msgstr "Ninguno"
 
@@ -4771,6 +4784,10 @@
 msgid "(Code %s)"
 msgstr "(Código %s)"
 
+#, fuzzy
+msgid "A custom smiley in the message is too large to send."
+msgstr "No se pudo enviar el mensaje: es demasiado grande."
+
 msgid "XML Parse error"
 msgstr "Error de tratamiento XML"
 
@@ -5191,6 +5208,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "El nuevo nombre de amigo MSN es demasiado largo."
 
+#, fuzzy, c-format
+msgid "Set friendly name for %s."
+msgstr "Establecer su nombre de amigo."
+
 msgid "Set your friendly name."
 msgstr "Establecer su nombre de amigo."
 
@@ -5806,23 +5827,79 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "El usuario %s lo ha quitado de su lista de amigos."
 
+#. 1
+msgid "Angry"
+msgstr "Furioso"
+
+#. 2
+msgid "Excited"
+msgstr "Excitado"
+
+#. 3
+#, fuzzy
+msgid "Grumpy"
+msgstr "Grupo"
+
+#. 4
+msgid "Happy"
+msgstr "Feliz"
+
+#. 5
+msgid "In Love"
+msgstr "Enamorado"
+
+#. 6
+msgid "Invincible"
+msgstr "Invencible"
+
+#. 7
+msgid "Sad"
+msgstr "Triste"
+
+#. 8
+msgid "Hot"
+msgstr "Calor"
+
+#. 9
+msgid "Sick"
+msgstr "Enfermo"
+
+#. 10
+msgid "Sleepy"
+msgstr "Dormido"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "Su estado de ánimo actual"
+msgstr "Luna actual"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Estado de ánimo del usuario"
-
-#, fuzzy
+msgstr "Luna nueva"
+
 msgid "Change your Mood"
-msgstr "Cambiar contraseña"
-
-#, fuzzy
+msgstr "Cambiar su luna"
+
 msgid "How do you feel right now?"
-msgstr "No estoy aquí ahora"
+msgstr "¿Cómo se encuentra justo ahora?"
+
+msgid "The PIN you entered is invalid."
+msgstr "La clave PIN introducida es inválida."
+
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "El PIN que introdujo tiene una longitud inválida [4-10]."
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr "El PIN es inválido. Debería sólo consistir dígitos [0-9]."
+
+msgid "The two PINs you entered do not match."
+msgstr "Las dos PINes que entró no coincide."
+
+msgid "The name you entered is invalid."
+msgstr "El nombre que entró es inválido."
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr ""
 
 #. show error to user
 #, fuzzy
@@ -5836,14 +5913,14 @@
 
 msgid "Your profile information is not yet retrieved. Please try again later."
 msgstr ""
+"Su información del perfil no es aún recuperable. Intente otra vez más tarde."
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "PIN"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "Verifique el PIN"
 
 #. display name
 #, fuzzy
@@ -5902,10 +5979,12 @@
 msgid "The file you are trying to send is too large!"
 msgstr "El mensaje es demasiado largo"
 
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
+#, fuzzy
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"No se pudo conectar con el servidor. Por favor, indique la dirección del "
+"servidor con el que desea conectarse."
 
 #, fuzzy
 msgid "Logging In..."
@@ -5913,8 +5992,7 @@
 
 #, fuzzy
 msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
+"Unable to connect to the MXit server. Please check your server settings."
 msgstr ""
 "No se pudo conectar con el servidor. Por favor, indique la dirección del "
 "servidor con el que desea conectarse."
@@ -5923,6 +6001,14 @@
 msgid "Connecting..."
 msgstr "Conectando"
 
+#, fuzzy
+msgid "The nick name you entered is invalid."
+msgstr "La clave SecurID introducida no es válida"
+
+#, fuzzy
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "La clave SecurID introducida no es válida"
+
 #. mxit login name
 #, fuzzy
 msgid "MXit Login Name"
@@ -6013,6 +6099,10 @@
 msgstr "Información del servidor"
 
 #, fuzzy
+msgid "Loading menu..."
+msgstr "Accediendo"
+
+#, fuzzy
 msgid "Status Message"
 msgstr "Mensaje de estado"
 
@@ -6058,6 +6148,13 @@
 msgid "Successfully Logged In..."
 msgstr "Se ha unido a Qun con éxito"
 
+#, fuzzy, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr ""
+"%s le ha enviado una invitación de chat de voz, pero no está aún no "
+"soportado."
+
 #, fuzzy
 msgid "Message Error"
 msgstr "Mensaje de error de XMPP"
@@ -6066,6 +6163,18 @@
 msgstr ""
 
 #, fuzzy
+msgid "An internal MXit server error occurred."
+msgstr "Error interno del servidor"
+
+#, fuzzy, c-format
+msgid "Login error: %s (%i)"
+msgstr "Error de SASL: %s"
+
+#, fuzzy, c-format
+msgid "Logout error: %s (%i)"
+msgstr "Error de SASL: %s"
+
+#, fuzzy
 msgid "Contact Error"
 msgstr "Error de conexión"
 
@@ -6140,39 +6249,6 @@
 msgid "A connection error occurred to MXit. (read stage 0x06)"
 msgstr ""
 
-msgid "Angry"
-msgstr "Furioso"
-
-msgid "Excited"
-msgstr "Excitado"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Grupo"
-
-msgid "Happy"
-msgstr "Feliz"
-
-msgid "In Love"
-msgstr "Enamorado"
-
-msgid "Invincible"
-msgstr "Invencible"
-
-msgid "Sad"
-msgstr "Triste"
-
-#, fuzzy
-msgid "Hot"
-msgstr "_Host"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Apodo"
-
-msgid "Sleepy"
-msgstr "Dormido"
-
 #, fuzzy
 msgid "Pending"
 msgstr "Enviando"
@@ -6807,7 +6883,10 @@
 msgid "Server port"
 msgstr "Puerto del servidor"
 
-#. Note to translators: %s in this string is a URL
+#, fuzzy, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Se recibió una respuesta que no se esperaba de "
+
 #, fuzzy, c-format
 msgid "Received unexpected response from %s"
 msgstr "Se recibió una respuesta que no se esperaba de "
@@ -6826,6 +6905,11 @@
 msgid "Error requesting %s: %s"
 msgstr "Error al solicitar "
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL no permite que su nombre de usuario se autentique aquí"
 
@@ -6894,13 +6978,13 @@
 "%s tried to send you a %s file, but we only allow files up to %s over Direct "
 "IM.  Try using file transfer instead.\n"
 msgstr ""
-"%s intentó enviar un archivo %s, pero sólo se permite enviar ficheros hasta %"
+"%s intentó enviar un archivo %s, pero sólo se permite enviar archivos hasta %"
 "s a través de conexión MI directa. Inténtelo de nuevo utilizando la función "
 "de transferencia de archivos.\n"
 
 #, c-format
 msgid "File %s is %s, which is larger than the maximum size of %s."
-msgstr "El fichero %s es %s, que es más grande que el tamaño máximo de %s."
+msgstr "El archivo %s es %s, que es más grande que el tamaño máximo de %s."
 
 msgid "Invalid error"
 msgstr "Error inválido"
@@ -7398,15 +7482,6 @@
 "[No se pudo mostrar un mensaje de este usuario porque contenía caracteres "
 "inválidos.]"
 
-#, fuzzy
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"La última acción que intentó no se pudo realizar por haber superado el "
-"límite en la tasa de envío de mensajes. Por favor, espere 10 segundos y "
-"vuelva a intentarlo."
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Ha sido desconectado de la sala de chat %s."
@@ -7784,7 +7859,7 @@
 "but does not reveal your IP address)"
 msgstr ""
 "Utilizar siempre un servidor proxy de AIM/ICQ\n"
-"para transferencias de ficheros y conexiones MI\n"
+"para transferencias de archivos y conexiones MI\n"
 "(lento, pero no descubre su dirección IP)"
 
 msgid "Allow multiple simultaneous logins"
@@ -12078,15 +12153,20 @@
 msgid "Lao"
 msgstr "Laosiano"
 
-msgid "Lithuanian"
-msgstr "Lituano"
-
 msgid "Macedonian"
 msgstr "Macedonio"
 
 msgid "Mongolian"
 msgstr "Mongol"
 
+#, fuzzy
+msgid "Marathi"
+msgstr "Gujarati"
+
+#, fuzzy
+msgid "Malay"
+msgstr "Hombre"
+
 msgid "Bokmål Norwegian"
 msgstr "Noruego Bokmål"
 
@@ -12102,6 +12182,10 @@
 msgid "Occitan"
 msgstr "Occitano"
 
+#, fuzzy
+msgid "Oriya"
+msgstr "Opera"
+
 msgid "Punjabi"
 msgstr "Punjabí"
 
@@ -12156,6 +12240,10 @@
 msgid "Turkish"
 msgstr "Turco"
 
+#, fuzzy
+msgid "Ukranian"
+msgstr "Ucraniano"
+
 msgid "Urdu"
 msgstr "Urdu"
 
@@ -12178,6 +12266,9 @@
 msgid "Amharic"
 msgstr "Amhárico"
 
+msgid "Lithuanian"
+msgstr "Lituano"
+
 #, c-format
 msgid "About %s"
 msgstr "Acerca de %s"
@@ -12840,7 +12931,7 @@
 "how to get the backtrace, please read the instructions at\n"
 "%swiki/GetABacktrace\n"
 msgstr ""
-"%s %s ha tenido un fallo y ha intentado generar un fichero «core».\n"
+"%s %s ha tenido un fallo y ha intentado generar un archivo «core».\n"
 "Esto es una errata en el programa y no se ha producido por\n"
 "algo que haya hecho.\n"
 "\n"
@@ -12849,7 +12940,7 @@
 "%ssimpleticket/\n"
 "\n"
 "Asegúrese de especificar lo que estaba haciendo en el momento de\n"
-"suceder esto y envíenos su traza del fichero «core». Si no sabe como\n"
+"suceder esto y envíenos su traza del archivo «core». Si no sabe como\n"
 "obtener una traza consulte las instrucciones disponibles en\n"
 "%swiki/GetABacktrace\n"
 
@@ -12961,7 +13052,7 @@
 msgstr "<b>Sitio web:</b>"
 
 msgid "<b>Filename:</b>"
-msgstr "<b>Nombre del fichero:</b>"
+msgstr "<b>Nombre del archivo:</b>"
 
 msgid "Configure Pl_ugin"
 msgstr "Configurar _complemento"
@@ -13086,9 +13177,8 @@
 msgid "(Custom)"
 msgstr ""
 
-#, fuzzy
-msgid "(Default)"
-msgstr "(por omisión)"
+msgid "Penguin Pimps"
+msgstr "Pinguinos bonitos"
 
 msgid "The default Pidgin sound theme"
 msgstr ""
@@ -13109,18 +13199,35 @@
 msgid "Theme failed to copy."
 msgstr "No se pudo copiar el tema."
 
-msgid "Install Theme"
-msgstr "Instalar tema"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
+#, fuzzy
+msgid "Theme Selections"
+msgstr "Selección de navegador"
+
+#. Instructions
+#, fuzzy
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
 msgstr ""
 "Seleccione de la lista inferior el tema de emoticonos que desee. Puede "
 "instalar temas nuevos arrastrándolos y soltándolos sobre esta lista de temas."
 
-msgid "Icon"
-msgstr "Icono"
+#, fuzzy
+msgid "Buddy List Theme:"
+msgstr "Tema de la lista de amigos"
+
+#, fuzzy
+msgid "Status Icon Theme:"
+msgstr "Iconos de estado"
+
+#, fuzzy
+msgid "Sound Theme:"
+msgstr "Apellido"
+
+#, fuzzy
+msgid "Smiley Theme:"
+msgstr "Temas de emoticonos"
 
 msgid "Keyboard Shortcuts"
 msgstr "Atajos de teclado"
@@ -13128,10 +13235,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "C_errar las conversaciones con la tecla Esc"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "Tema de la lista de amigos"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "Icono del área de notificación del sistema"
@@ -13218,9 +13321,6 @@
 msgid "Font"
 msgstr "Tipografía"
 
-msgid "Use document font from _theme"
-msgstr "Utilizar la tipografía de documento del _tema"
-
 msgid "Use font from _theme"
 msgstr "Utilizar la tipografía del _tema"
 
@@ -13296,51 +13396,6 @@
 msgid "Pass_word:"
 msgstr "Contraseña:"
 
-msgid "Proxy Server &amp; Browser"
-msgstr "Servidor proxy y navegador"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>No se encontró el programa de configuración del proxy.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>No se encontró el programa de configuración del navegador.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"Puede configurar las preferencias del proxy y del navegador\n"
-"en las preferencias de GNOME."
-
-msgid "Configure _Proxy"
-msgstr "Configurar _proxy"
-
-msgid "Configure _Browser"
-msgstr "Configurar _navegador"
-
-msgid "Proxy Server"
-msgstr "Servidor proxy"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Utilizar un DNS remoto con pasarelas SOCKS4"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "_Tipo de proxy:"
-
-msgid "No proxy"
-msgstr "Sin proxy"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "_Puerto:"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Nombre de usuario:"
-
 msgid "Seamonkey"
 msgstr "Seamonkey"
 
@@ -13380,6 +13435,18 @@
 msgid "Browser Selection"
 msgstr "Selección de navegador"
 
+#, fuzzy
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr ""
+"Puede configurar las preferencias del proxy y del navegador\n"
+"en las preferencias de GNOME."
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>No se encontró el programa de configuración del navegador.</b>"
+
+msgid "Configure _Browser"
+msgstr "Configurar _navegador"
+
 msgid "_Browser:"
 msgstr "_Navegador:"
 
@@ -13403,6 +13470,42 @@
 "_Manual:\n"
 "(%s para URL)"
 
+msgid "Proxy Server"
+msgstr "Servidor proxy"
+
+#, fuzzy
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr ""
+"Puede configurar las preferencias del proxy y del navegador\n"
+"en las preferencias de GNOME."
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>No se encontró el programa de configuración del proxy.</b>"
+
+msgid "Configure _Proxy"
+msgstr "Configurar _proxy"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+#, fuzzy
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Utilizar un DNS remoto con pasarelas SOCKS4"
+
+#, fuzzy
+msgid "Proxy t_ype:"
+msgstr "_Tipo de proxy:"
+
+msgid "No proxy"
+msgstr "Sin proxy"
+
+#, fuzzy
+msgid "P_ort:"
+msgstr "_Puerto:"
+
+#, fuzzy
+msgid "User_name:"
+msgstr "Nombre de usuario:"
+
 msgid "Log _format:"
 msgstr "Formato de _registro:"
 
@@ -13487,25 +13590,19 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Basado en teclado o en uso de ratón"
 
+msgid "_Minutes before becoming idle:"
+msgstr "_Minutos antes de pasar a inactivo:"
+
+#, fuzzy
+msgid "Change to this status when _idle:"
+msgstr "Cambiar el estado cuando esté _inactivo"
+
 msgid "_Auto-reply:"
 msgstr "Respuesta _automática:"
 
 msgid "When both away and idle"
 msgstr "Cuando está ausente e inactivo"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Auto-ausencia"
-
-msgid "_Minutes before becoming idle:"
-msgstr "_Minutos antes de pasar a inactivo:"
-
-msgid "Change status when _idle"
-msgstr "Cambiar el estado cuando esté _inactivo"
-
-msgid "Change _status to:"
-msgstr "Cambiar _estado a:"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "Estado al arrancar"
@@ -13519,15 +13616,16 @@
 msgid "Interface"
 msgstr "Interfaz"
 
-msgid "Smiley Themes"
-msgstr "Temas de emoticonos"
-
 msgid "Browser"
 msgstr "Navegador"
 
 msgid "Status / Idle"
 msgstr "Estado / Inactivo"
 
+#, fuzzy
+msgid "Themes"
+msgstr "Temas de emoticonos"
+
 msgid "Allow all users to contact me"
 msgstr "Permitir que todos los usuarios me contacten"
 
@@ -13795,7 +13893,7 @@
 #, c-format
 msgid "The file '%s' is too large for %s.  Please try a smaller image.\n"
 msgstr ""
-"El fichero «%s» es demasiado grande para %s. Intente utilizar una imagen más "
+"El archivo «%s» es demasiado grande para %s. Intente utilizar una imagen más "
 "pequeña.\n"
 
 msgid "Icon Error"
@@ -13839,6 +13937,10 @@
 msgid "_Save File"
 msgstr "_Guardar archivo"
 
+#, fuzzy
+msgid "Do you really want to clear?"
+msgstr "¿Seguro que quiere borrar a %s?"
+
 msgid "Select color"
 msgstr "Seleccionar el color"
 
@@ -13877,9 +13979,6 @@
 msgid "Pidgin smileys"
 msgstr "Emoticonos de Pidgin"
 
-msgid "Penguin Pimps"
-msgstr "Pinguinos bonitos"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Si selecciona esta opción deshabilitará los emoticonos gráficos."
 
@@ -14529,6 +14628,9 @@
 msgid "Conversation Entry"
 msgstr "Entrada de conversaciones"
 
+msgid "Conversation History"
+msgstr "Historial de conversaciones"
+
 msgid "Request Dialog"
 msgstr "Diálogo de solicitud"
 
@@ -14568,7 +14670,7 @@
 msgstr "Miscelánea"
 
 msgid "Gtkrc File Tools"
-msgstr "Herramientas de ficheros Gtkrc"
+msgstr "Herramientas de archivos Gtkrc"
 
 #, c-format
 msgid "Write settings to %s%sgtkrc-2.0"
@@ -14759,7 +14861,7 @@
 msgstr "Diálogo de pregunta"
 
 msgid "Warning dialog"
-msgstr "Diálogo de aviso"
+msgstr "Diálogo de advertencia"
 
 msgid "What kind of dialog is this?"
 msgstr "¿Qué tipo de diálogo es éste?"
@@ -14888,35 +14990,29 @@
 "Este complemento permite al usuario configurar los formatos de marca de "
 "tiempo para los mensajes en conversaciones y guardados en el registro."
 
-#, fuzzy
 msgid "Audio"
-msgstr "Automático"
-
-#, fuzzy
+msgstr "Audio"
+
 msgid "Video"
-msgstr " Vídeo"
+msgstr "Vídeo"
 
 msgid "Output"
-msgstr ""
-
-#, fuzzy
+msgstr "Salida"
+
 msgid "_Plugin"
-msgstr "Complementos"
-
-#, fuzzy
+msgstr "Com_plementos"
+
 msgid "_Device"
-msgstr "Dispositivo"
+msgstr "_Dispositivo"
 
 msgid "Input"
-msgstr ""
-
-#, fuzzy
+msgstr "Entrada"
+
 msgid "P_lugin"
-msgstr "Complementos"
-
-#, fuzzy
+msgstr "Comp_lementos"
+
 msgid "D_evice"
-msgstr "Dispositivo"
+msgstr "Di_spositivo"
 
 #. *< magic
 #. *< major version
@@ -14927,18 +15023,17 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#, fuzzy
 msgid "Voice/Video Settings"
-msgstr "Editar configuración"
+msgstr "Configuración de voz/vídeo"
 
 #. *< name
 #. *< version
 msgid "Configure your microphone and webcam."
-msgstr ""
+msgstr "Configurar su micrófono y cámara web."
 
 #. *< summary
 msgid "Configure microphone and webcam settings for voice/video calls."
-msgstr ""
+msgstr "Configurar micrófono y camara web para llamadas por voz/vídeo."
 
 msgid "Opacity:"
 msgstr "Opacidad:"
@@ -15005,9 +15100,8 @@
 msgid "_Start %s on Windows startup"
 msgstr "_Iniciar %s al iniciar Windows"
 
-#, fuzzy
 msgid "Allow multiple instances"
-msgstr "Permitir múltiples conexiones simultáneas"
+msgstr "Permitir múltiples instancias"
 
 # Usar empotrable? (jfs)
 msgid "_Dockable Buddy List"
@@ -15022,7 +15116,7 @@
 msgstr "Solamente cuando se apile"
 
 msgid "Windows Pidgin Options"
-msgstr "Opciones de Pidgwin en Windows"
+msgstr "Opciones de Pidgwin para Windows"
 
 msgid "Options specific to Pidgin for Windows."
 msgstr "Opciones específicas de %s para Windows."
@@ -15058,7 +15152,7 @@
 msgstr "Introducir una entrada <presence/>."
 
 msgid "Insert a <message/> stanza."
-msgstr "Insertar una entrada <messag/>."
+msgstr "Insertar una entrada <message/>."
 
 #. *< name
 #. *< version
@@ -15069,4290 +15163,3 @@
 #. *  description
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Este complemento es útil para depurar clientes o servidores XMPP."
-
-#, fuzzy
-#~ msgid "The root certificate this one claims to be issued by is unknown."
-#~ msgstr ""
-#~ "Pidgin no conoce el certificado raíz bajo el que este certificado dice "
-#~ "haberse generado."
-
-#~ msgid "Send instant messages over multiple protocols"
-#~ msgstr "Cliente de mensajería instantánea multiprotocolo"
-
-#~ msgid "_Start port:"
-#~ msgstr "Puerto _inicial:"
-
-#~ msgid "_End port:"
-#~ msgstr "Puerto _final:"
-
-#~ msgid "_User:"
-#~ msgstr "_Usuario:"
-
-#~ msgid "GTK+ Runtime Version"
-#~ msgstr "Versión en ejecución de GTK+"
-
-#~ msgid "Calling ... "
-#~ msgstr "Llamando..."
-
-#~ msgid "Invalid certificate chain"
-#~ msgstr "Cadena de certificado inválida"
-
-#~ msgid ""
-#~ "The certificate chain presented by %s does not have a valid digital "
-#~ "signature from the Certificate Authority from which it claims to have a "
-#~ "signature."
-#~ msgstr ""
-#~ "La cadena de certificado presentada por %s no tiene una firma digital "
-#~ "válida de la Autoridad de Certificación de la que asegura tener la firma."
-
-#~ msgid "Invalid certificate authority signature"
-#~ msgstr "Firma de autoridad de certificación inválida"
-
-#~ msgid "Join/Part Hiding Configuration"
-#~ msgstr "Configuración de la ocultación de Unir/Salir"
-
-#~ msgid "Minimum Room Size"
-#~ msgstr "Tamaño mínimo de sala"
-
-#~ msgid "User Inactivity Timeout (in minutes)"
-#~ msgstr "Tiempo de inactividad de usuario (en minutos)"
-
-#~ msgid "Failed to open the file"
-#~ msgstr "No se pudo abrir el archivo"
-
-#~ msgid "Your account is locked, please log in to the Yahoo! website."
-#~ msgstr ""
-#~ "Su cuenta está bloqueada. Por favor, conéctese al servidor de web de "
-#~ "Yahoo!"
-
-#~ msgid "Euskera(Basque)"
-#~ msgstr "Eusquera(Vasco)"
-
-#~ msgid ""
-#~ "<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin."
-#~ "im\">support@pidgin.im</A><BR/><BR/>"
-#~ msgstr ""
-#~ "<FONT SIZE=\"4\">Ayuda por correo:</FONT> <A HREF=\"mailto:support@pidgin."
-#~ "im\">support@pidgin.im</A><BR/><BR/>"
-
-#~ msgid "_Resume"
-#~ msgstr "_Continuar"
-
-#~ msgid ""
-#~ "%s %s\n"
-#~ "Usage: %s [OPTION]...\n"
-#~ "\n"
-#~ "  -c, --config=DIR    use DIR for config files\n"
-#~ "  -d, --debug         print debugging messages to stdout\n"
-#~ "  -f, --force-online  force online, regardless of network status\n"
-#~ "  -h, --help          display this help and exit\n"
-#~ "  -m, --multiple      do not ensure single instance\n"
-#~ "  -n, --nologin       don't automatically login\n"
-#~ "  -l, --login[=NAME]  enable specified account(s) (optional argument "
-#~ "NAME\n"
-#~ "                      specifies account(s) to use, separated by commas.\n"
-#~ "                      Without this only the first account will be "
-#~ "enabled).\n"
-#~ "  --display=DISPLAY   X display to use\n"
-#~ "  -v, --version       display the current version and exit\n"
-#~ msgstr ""
-#~ "%s %s\n"
-#~ "Modo de uso: %s [OPCIÓN]...\n"
-#~ "\n"
-#~ "  -c, --config=DIR     utilizar el directorio DIR para los ficheros de "
-#~ "configuración\n"
-#~ "  -d, --debug          imprimir mensajes de depuración en la salida "
-#~ "estándar\n"
-#~ "  -h, --help           mostrar esta ayuda y salir\n"
-#~ "  -m, --multiple       no asegurarse de que hay sólo una instancia\n"
-#~ "  -n, --nologin        no conectarse de forma automática\n"
-#~ "  -l, --login[=NOMBRE] conectarse de forma automática (el argumento "
-#~ "opcional NOMBRE\n"
-#~ "                       indica la(s) cuenta(s) a usar, separadas por "
-#~ "comas.\n"
-#~ "                       Si no se indica se activará sólo la primera "
-#~ "cuenta).\n"
-#~ "  --display=DISPLAY    pantalla X que se debe utilizar\n"
-#~ "  -v, --version        mostrar la versión actual y salir\n"
-
-#~ msgid ""
-#~ "%s %s\n"
-#~ "Usage: %s [OPTION]...\n"
-#~ "\n"
-#~ "  -c, --config=DIR    use DIR for config files\n"
-#~ "  -d, --debug         print debugging messages to stdout\n"
-#~ "  -f, --force-online  force online, regardless of network status\n"
-#~ "  -h, --help          display this help and exit\n"
-#~ "  -m, --multiple      do not ensure single instance\n"
-#~ "  -n, --nologin       don't automatically login\n"
-#~ "  -l, --login[=NAME]  enable specified account(s) (optional argument "
-#~ "NAME\n"
-#~ "                      specifies account(s) to use, separated by commas.\n"
-#~ "                      Without this only the first account will be "
-#~ "enabled).\n"
-#~ "  -v, --version       display the current version and exit\n"
-#~ msgstr ""
-#~ "%s %s\n"
-#~ "Modo de uso: %s [OPCIÓN]...\n"
-#~ "\n"
-#~ "  -c, --config=DIR     utilizar el directorio DIR para los ficheros de "
-#~ "configuración\n"
-#~ "  -d, --debug          imprimir mensajes de depuración en la salida "
-#~ "estándar\n"
-#~ "  -h, --help           mostrar esta ayuda y salir\n"
-#~ "  -m, --multiple       no asegurarse de que hay sólo una instancia\n"
-#~ "  -n, --nologin        no conectarse de forma automática\n"
-#~ "  -l, --login[=NOMBRE] conectarse de forma automática (el argumento "
-#~ "opcional NOMBRE\n"
-#~ "                       indica la(s) cuenta(s) a usar, separadas por "
-#~ "comas.\n"
-#~ "                       Si no se indica se activará sólo la primera "
-#~ "cuenta).\n"
-#~ "  --display=DISPLAY    pantalla X que se debe utilizar\n"
-#~ "  -v, --version        mostrar la versión actual y salir\n"
-
-#, fuzzy
-#~ msgid "Malformed BOSH Connect Server"
-#~ msgstr "No se pudo conectar al servidor."
-
-#, fuzzy
-#~ msgid "Unable to not load SILC key pair"
-#~ msgstr "No se pudo cargar la clave pública SILC"
-
-#~ msgid ""
-#~ "%s declined your conference invitation to room \"%s\" because \"%s\"."
-#~ msgstr ""
-#~ "%s ha declinado su invitación de conferencia en la sala «%s» por «%s»."
-
-#~ msgid "Invitation Rejected"
-#~ msgstr "Invitación rechazada"
-
-#, fuzzy
-#~ msgid "_Proxy"
-#~ msgstr "Proxy"
-
-#~ msgid "Cannot open socket"
-#~ msgstr "No se pudo abrir el socket"
-
-#~ msgid "Could not listen on socket"
-#~ msgstr "No se pudo escuchar en el socket"
-
-#~ msgid "Unable to read socket"
-#~ msgstr "No se pudo leer el socket"
-
-#~ msgid "Connection failed."
-#~ msgstr "Falló la conexión."
-
-#~ msgid "Server has disconnected"
-#~ msgstr "El servidor se ha desconectado"
-
-#~ msgid "Couldn't create socket"
-#~ msgstr "No se pudo crear el socket"
-
-#~ msgid "Couldn't connect to host"
-#~ msgstr "No se pudo conectar al servidor"
-
-#~ msgid "Read error"
-#~ msgstr "Error de lectura"
-
-#~ msgid ""
-#~ "Could not establish a connection with the server:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "No se pudo establecer una conexión con el servidor:\n"
-#~ "%s"
-
-#~ msgid "Write error"
-#~ msgstr "Error de escritura"
-
-#~ msgid "Last Activity"
-#~ msgstr "Última actividad"
-
-#~ msgid "Service Discovery Info"
-#~ msgstr "Información de descubrimiento de servicio"
-
-#~ msgid "Service Discovery Items"
-#~ msgstr "Elementos de descubrimiento de servicio"
-
-#~ msgid "Extended Stanza Addressing"
-#~ msgstr "Dirección de grupo extendida"
-
-#~ msgid "Multi-User Chat"
-#~ msgstr "Chat multiusuario"
-
-#~ msgid "Multi-User Chat Extended Presence Information"
-#~ msgstr "Información de presencia extendida en chat multiusuario"
-
-#~ msgid "In-Band Bytestreams"
-#~ msgstr "Flujos de bytes en banda"
-
-#~ msgid "Ad-Hoc Commands"
-#~ msgstr "Órdenes ad-hoc"
-
-#~ msgid "PubSub Service"
-#~ msgstr "Servicio PubSub"
-
-#~ msgid "SOCKS5 Bytestreams"
-#~ msgstr "Flujos de bytes SOCKS5"
-
-#~ msgid "Out of Band Data"
-#~ msgstr "Datos fuera de banda"
-
-#~ msgid "XHTML-IM"
-#~ msgstr "XHTML-IM"
-
-#~ msgid "In-Band Registration"
-#~ msgstr "Registro en línea"
-
-#~ msgid "User Location"
-#~ msgstr "Ubicación del usuario"
-
-#~ msgid "User Avatar"
-#~ msgstr "Avatar del usuario"
-
-#~ msgid "Chat State Notifications"
-#~ msgstr "Notificaciones de estado de chat"
-
-#~ msgid "Software Version"
-#~ msgstr "Versión del programa"
-
-#~ msgid "Stream Initiation"
-#~ msgstr "Origen del flujo"
-
-#~ msgid "User Activity"
-#~ msgstr "Actividad de usuario"
-
-#~ msgid "Entity Capabilities"
-#~ msgstr "Capacidades de la entidad"
-
-#~ msgid "Encrypted Session Negotiations"
-#~ msgstr "Negociaciones de sesiones cifradas"
-
-#~ msgid "User Tune"
-#~ msgstr "Música del usuario"
-
-#~ msgid "Roster Item Exchange"
-#~ msgstr "Intercambio de elementos de la lista"
-
-#~ msgid "Reachability Address"
-#~ msgstr "Dirección alcanzable"
-
-# JFS: Jingle es un protocolo de transporte, no se traduce
-#~ msgid "Jingle"
-#~ msgstr "Jingle"
-
-#~ msgid "Jingle Audio"
-#~ msgstr "Audio Jingle"
-
-#~ msgid "User Nickname"
-#~ msgstr "Nombre de usuario"
-
-#~ msgid "Jingle ICE UDP"
-#~ msgstr "Jingle ICE UDP"
-
-#~ msgid "Jingle ICE TCP"
-#~ msgstr "Jingle ICE TCP"
-
-#~ msgid "Jingle Raw UDP"
-#~ msgstr "Jingle UDP en crudo"
-
-#~ msgid "Jingle Video"
-#~ msgstr "Vídeo Jingle"
-
-#~ msgid "Jingle DTMF"
-#~ msgstr "DTMF Jingle"
-
-#~ msgid "Message Receipts"
-#~ msgstr "Recibos de mensajes"
-
-#~ msgid "Public Key Publishing"
-#~ msgstr "Publicación de la clave pública"
-
-#~ msgid "User Chatting"
-#~ msgstr "Chatear con usuarios"
-
-#~ msgid "User Browsing"
-#~ msgstr "Navegar usuarios"
-
-#~ msgid "User Gaming"
-#~ msgstr "Jugar con usuarios"
-
-#~ msgid "User Viewing"
-#~ msgstr "Ver usuarios"
-
-#~ msgid "Stanza Encryption"
-#~ msgstr "Cifrado de grupo"
-
-#~ msgid "Entity Time"
-#~ msgstr "Tiempo de entidad"
-
-#~ msgid "Delayed Delivery"
-#~ msgstr "Envío con demora"
-
-#~ msgid "Collaborative Data Objects"
-#~ msgstr "Objetods de datos colaborativos"
-
-#~ msgid "File Repository and Sharing"
-#~ msgstr "Repositorio de archivos y compartición"
-
-#~ msgid "STUN Service Discovery for Jingle"
-#~ msgstr "Servidor de descubrimiento STUN para Jingle"
-
-#~ msgid "Simplified Encrypted Session Negotiation"
-#~ msgstr "Negociación de sesión cifrada simplificada"
-
-#~ msgid "Hop Check"
-#~ msgstr "Comprobación de saltos"
-
-#~ msgid "Read Error"
-#~ msgstr "Error de lectura"
-
-#~ msgid "Failed to connect to server."
-#~ msgstr "No se pudo conectar al servidor."
-
-#~ msgid "Read buffer full (2)"
-#~ msgstr "Cola de lectura llena (2)"
-
-#~ msgid "Unparseable message"
-#~ msgstr "No se pudo interpretar el mensaje"
-
-#~ msgid "Couldn't connect to host: %s (%d)"
-#~ msgstr "No se pudo conectar al servidor: %s (%d)"
-
-#~ msgid "Login failed (%s)."
-#~ msgstr "Fallo en la conexión (%s)."
-
-#~ msgid ""
-#~ "You have been logged out because you logged in at another workstation."
-#~ msgstr ""
-#~ "Ha sido desconectado porque se ha conectado desde otra estación de "
-#~ "trabajo."
-
-#~ msgid "Error. SSL support is not installed."
-#~ msgstr "Error. El soporte de SSL no está instalado."
-
-#~ msgid "Incorrect password."
-#~ msgstr "Contraseña incorrecta."
-
-#~ msgid ""
-#~ "Could not connect to BOS server:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "No se pudo conectar al servidor BOS:\n"
-#~ "%s"
-
-#~ msgid "You may be disconnected shortly.  Check %s for updates."
-#~ msgstr "Quizá sea desconectado en breve.  Compruebe %s para novedades."
-
-#~ msgid "Could Not Connect"
-#~ msgstr "No se pudo conectar"
-
-#~ msgid "Invalid username."
-#~ msgstr "Nombre de usuario no válido."
-
-#~ msgid "Could not decrypt server reply"
-#~ msgstr "No se pudo descifrar la respuesta del servidor"
-
-#~ msgid "Connection lost"
-#~ msgstr "Conexión perdida"
-
-#~ msgid "Couldn't resolve host"
-#~ msgstr "No se pudo resolver el nombre"
-
-#~ msgid "Connection closed (writing)"
-#~ msgstr "Conexión cerrada (escribiendo)"
-
-#~ msgid "Connection reset"
-#~ msgstr "Conexión rehusada"
-
-#~ msgid "Error reading from socket: %s"
-#~ msgstr "Error al leer del socket: %s"
-
-#~ msgid "Unable to connect to host"
-#~ msgstr "No se pudo conectar al servidor"
-
-#~ msgid "Could not write"
-#~ msgstr "No se pudo escribir"
-
-#~ msgid "Could not create listen socket"
-#~ msgstr "No se pudo crear el socket de escucha"
-
-#~ msgid "Could not resolve hostname"
-#~ msgstr "No se pudo resolver el nombre de sistema"
-
-#, fuzzy
-#~ msgid "Incorrect Password"
-#~ msgstr "Contraseña incorrecta"
-
-#~ msgid ""
-#~ "Could not establish a connection with %s:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "No se pudo establecer una conexión con %s:\n"
-#~ "%s"
-
-#~ msgid "Yahoo Japan"
-#~ msgstr "Yahoo Japón"
-
-#~ msgid "Japan Pager server"
-#~ msgstr "Servidor de buscapersonas japonés"
-
-#~ msgid "Japan file transfer server"
-#~ msgstr "Servidor de transferencia de archivos japonés"
-
-#~ msgid ""
-#~ "Lost connection with server\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Se ha perdido la conexión con el servidor\n"
-#~ "%s"
-
-#~ msgid "Could not resolve host name"
-#~ msgstr "No se pudo resolver el nombre de equipo"
-
-#, fuzzy
-#~ msgid ""
-#~ "Unable to connect to %s: Server requires TLS/SSL, but no TLS/SSL support "
-#~ "was found."
-#~ msgstr ""
-#~ "El servidor requiere SSL para conectarse. No se dispone de soporte TLS/"
-#~ "SSL."
-
-#~ msgid "Conversation Window Hiding"
-#~ msgstr "Ocultar ventana de conversación"
-
-#~ msgid "More Data needed"
-#~ msgstr "Son necesarios más datos"
-
-#~ msgid "Please provide a shortcut to associate with the smiley."
-#~ msgstr "Indique un atajo para asociarlo al emoticono."
-
-#~ msgid "Please select an image for the smiley."
-#~ msgstr "Escoja una imagen para el emoticono."
-
-#~ msgid "Activate which ID?"
-#~ msgstr "¿Qué ID quiere activar?"
-
-#~ msgid "Cursor Color"
-#~ msgstr "Color del puntero"
-
-#~ msgid "Secondary Cursor Color"
-#~ msgstr "Color secundario del puntero"
-
-#~ msgid "Interface colors"
-#~ msgstr "Colores de la interfaz"
-
-#~ msgid "Widget Sizes"
-#~ msgstr "Tamaño de los controles"
-
-#~ msgid "Invite message"
-#~ msgstr "Mensaje de invitacio"
-
-#~ msgid ""
-#~ "Please enter the name of the user you wish to invite,\n"
-#~ "along with an optional invite message."
-#~ msgstr ""
-#~ "Introduzca el nombre de usuario al que desea invitar,\\n\n"
-#~ "junto con un mensaje de invitación opcional."
-
-#~ msgid "Unable to retrieve MSN Address Book"
-#~ msgstr "No se pudo obtener el libro de direcciones de MSN"
-
-#~ msgid ""
-#~ "You may be disconnected shortly.  You may want to use TOC until this is "
-#~ "fixed.  Check %s for updates."
-#~ msgstr ""
-#~ "Quizá sea desconectado en breve.  Puede querer usar TOC hasta que esto se "
-#~ "resuelva.  Compruebe %s para novedades."
-
-#~ msgid "Looking up %s"
-#~ msgstr "Buscando %s"
-
-#~ msgid "Connect to %s failed"
-#~ msgstr "Falló la conexión a %s"
-
-#~ msgid "Signon: %s"
-#~ msgstr "Conectado: %s"
-
-#~ msgid "Unable to write file %s."
-#~ msgstr "No se pudo escribir el archivo %s."
-
-#~ msgid "Unable to read file %s."
-#~ msgstr "No se pudo leer el archivo %s."
-
-#~ msgid "Message too long, last %s bytes truncated."
-#~ msgstr "Mensaje demasiado largo, los últimos %s bytes fueron borrados."
-
-#~ msgid "%s not currently logged in."
-#~ msgstr "%s no está conectado ahora."
-
-#~ msgid "Warning of %s not allowed."
-#~ msgstr "No se permiten advertencias de %s."
-
-#~ msgid ""
-#~ "A message has been dropped, you are exceeding the server speed limit."
-#~ msgstr ""
-#~ "El mensaje ha sido descartado, usted esta excediendo el límite de "
-#~ "velocidad del servidor."
-
-#~ msgid "Chat in %s is not available."
-#~ msgstr "No está disponible el chat en %s."
-
-#~ msgid "You are sending messages too fast to %s."
-#~ msgstr "Esta enviando mensajes demasiado rápido a %s."
-
-#~ msgid "You missed an IM from %s because it was too big."
-#~ msgstr "Usted perdió un MI de %s porque era demasiado largo."
-
-#~ msgid "You missed an IM from %s because it was sent too fast."
-#~ msgstr "Usted perdió un MI de %s porque fue mandado demasiado rápido."
-
-#~ msgid "Failure."
-#~ msgstr "Fallo."
-
-#~ msgid "Too many matches."
-#~ msgstr "Demasiados resultados."
-
-#~ msgid "Need more qualifiers."
-#~ msgstr "Necesito más calificadores."
-
-#~ msgid "Dir service temporarily unavailable."
-#~ msgstr "Servicio de directorio temporalmente no disponible."
-
-#~ msgid "Email lookup restricted."
-#~ msgstr "Búsqueda de direcciones de correo electrónico restringida."
-
-#~ msgid "Keyword ignored."
-#~ msgstr "Palabra clave ignorada."
-
-#~ msgid "No keywords."
-#~ msgstr "Sin palabras clave."
-
-#~ msgid "User has no directory information."
-#~ msgstr "El usuario no tiene información en el directorio."
-
-#~ msgid "Country not supported."
-#~ msgstr "País no soportado."
-
-#~ msgid "Failure unknown: %s."
-#~ msgstr "Fallo desconocido: %s."
-
-#~ msgid "Incorrect username or password."
-#~ msgstr "Nombre de usuario o contraseña incorrecta."
-
-#~ msgid "The service is temporarily unavailable."
-#~ msgstr "Servicio temporalmente no disponible."
-
-#~ msgid "Your warning level is currently too high to log in."
-#~ msgstr "Su nivel de advertencias es demasiado alto para conectarse."
-
-#~ msgid ""
-#~ "You have been connecting and disconnecting too frequently.  Wait ten "
-#~ "minutes and try again.  If you continue to try, you will need to wait "
-#~ "even longer."
-#~ msgstr ""
-#~ "Se ha conectado y desconectado demasiadas veces. Espere diez minutos e "
-#~ "inténtelo de nuevo. Si sigue intentándolo, necesitará esperar incluso más "
-#~ "tiempo."
-
-#~ msgid "An unknown error, %d, has occurred.  Info: %s"
-#~ msgstr "Un error desconocido, %d, ha ocurrido. Info: %s"
-
-#~ msgid "Invalid Groupname"
-#~ msgstr "Nombre de grupo inválido"
-
-#~ msgid "Connection Closed"
-#~ msgstr "Conexión cerrada"
-
-#~ msgid "Waiting for reply..."
-#~ msgstr "Esperando respuesta..."
-
-#~ msgid "TOC has come back from its pause. You may now send messages again."
-#~ msgstr "TOC ha terminado su pausa. Ya puede volver a mandar mensajes."
-
-#~ msgid "Password Change Successful"
-#~ msgstr "La contraseña se ha cambiado con éxito"
-
-#~ msgid "Get Dir Info"
-#~ msgstr "Obtener información del directorio"
-
-#~ msgid "Set Dir Info"
-#~ msgstr "Guardar información del directorio"
-
-#~ msgid "Could not open %s for writing!"
-#~ msgstr "¡No se pudo abrir %s para escritura!"
-
-#~ msgid "File transfer failed; other side probably canceled."
-#~ msgstr ""
-#~ "Se produjo un fallo en la transferencia del archivo; posiblemente fue "
-#~ "cancelado por el otro extremo."
-
-#~ msgid "Could not connect for transfer."
-#~ msgstr "No se pudo conectar para realizar la transferencia."
-
-#~ msgid "Could not write file header.  The file will not be transferred."
-#~ msgstr ""
-#~ "No se pudo escribir la cabecera de archivo.  El archivo no será "
-#~ "transferido."
-
-#~ msgid "Save As..."
-#~ msgstr "Guardar como..."
-
-#~ msgid "%s requests %s to accept %d file: %s (%.2f %s)%s%s"
-#~ msgid_plural "%s requests %s to accept %d files: %s (%.2f %s)%s%s"
-#~ msgstr[0] "%s solicita %s para aceptar %d archivo: %s (%.2f %s)%s%s"
-#~ msgstr[1] "%s solicita %s para aceptar %d archivos: %s (%.2f %s)%s%s"
-
-#~ msgid "%s requests you to send them a file"
-#~ msgstr "%s le solicita que le mande un archivo"
-
-#~ msgid "TOC Protocol Plugin"
-#~ msgstr "Complemento de protocolo TOC"
-
-#~ msgid "%s Options"
-#~ msgstr "Opciones de %s"
-
-#~ msgid "Proxy Options"
-#~ msgstr "Opciones del proxy"
-
-#~ msgid "By log size"
-#~ msgstr "Por tamaño de registro"
-
-#~ msgid "_Open Link in Browser"
-#~ msgstr "_Abrir enlace en navegador"
-
-#~ msgid "Smiley _Image"
-#~ msgstr "Imagen de emoticono"
-
-#~ msgid "Smiley S_hortcut"
-#~ msgstr "Ata_jos de emoticonos"
-
-#~ msgid "_Flash window when chat messages are received"
-#~ msgstr "_Destello de ventana cuando se reciben mensajes de chat"
-
-#~ msgid "Connection to server lost (no data received within %d second)"
-#~ msgid_plural ""
-#~ "Connection to server lost (no data received within %d seconds)"
-#~ msgstr[0] ""
-#~ "Se perdió la conexión con el servidor (no se recibió ningún dato en %d "
-#~ "segundo)"
-#~ msgstr[1] ""
-#~ "Se perdió la conexión con el servidor (no se recibió ningún dato en %d "
-#~ "segundos)"
-
-#~ msgid "Add buddy Q&A"
-#~ msgstr "Añadir amigo Q&A"
-
-#~ msgid "Can not decrypt get server reply"
-#~ msgstr "No se pudo descifrar la respuesta del servidor"
-
-#~ msgid "Keep alive error"
-#~ msgstr "Error de comprobación de conexión"
-
-#~ msgid ""
-#~ "Lost connection with server:\n"
-#~ "%d, %s"
-#~ msgstr ""
-#~ "Se perdió la conexión con el servidor:\n"
-#~ "%d, %s"
-
-#~ msgid "Get server ..."
-#~ msgstr "Obteniendo servidor..."
-
-#~ msgid "Connecting server ..."
-#~ msgstr "Conectando con el servidor..."
-
-#~ msgid "Failed to send IM."
-#~ msgstr "No se pudo enviar MI."
-
-#~ msgid "Not a member of room \"%s\"\n"
-#~ msgstr "Vd. no es un miembro de la sala  «%s»\n"
-
-#~ msgid "User information for %s unavailable"
-#~ msgstr "Información de usuario de %s no disponible"
-
-#~ msgid "A group with the name already exists."
-#~ msgstr "Ya existe un grupo con ese nombre"
-
-#~ msgid "Primary Information"
-#~ msgstr "Información principal"
-
-#~ msgid "Blood Type"
-#~ msgstr "Grupo sanguíneo"
-
-#~ msgid "Update information"
-#~ msgstr "Actualizar información"
-
-#~ msgid "Successed:"
-#~ msgstr "Exitosos:"
-
-#~ msgid ""
-#~ "Setting custom faces is not currently supported. Please choose an image "
-#~ "from %s."
-#~ msgstr ""
-#~ "No se puede fijar una cara a medida. Por favor, escoja una imagen de %s."
-
-#~ msgid "Invalid QQ Face"
-#~ msgstr "Cara QQ inválida"
-
-#~ msgid "You rejected %d's request"
-#~ msgstr "Ha rechazado la solicitud de %d"
-
-#~ msgid "Reject request"
-#~ msgstr "Rechazar solicitud"
-
-#~ msgid "Add buddy with auth request failed"
-#~ msgstr "Fallo al añadir un amigo con solicitud de autenticación"
-
-#, fuzzy
-#~ msgid "Add into %d's buddy list"
-#~ msgstr "No se pudo cargar la lista de amigos"
-
-#~ msgid "QQ Number Error"
-#~ msgstr "Error en el número QQ"
-
-#~ msgid "Group Description"
-#~ msgstr "Descripción del grupo"
-
-#~ msgid "Auth"
-#~ msgstr "Autorizar"
-
-#~ msgid "Approve"
-#~ msgstr "Aprobar"
-
-#, fuzzy
-#~ msgid "Successed to join Qun %d, operated by admin %d"
-#~ msgstr ""
-#~ "Su solicitud de unirse al grupo %d ha sido rechazada por el administrador "
-#~ "%d"
-
-#, fuzzy
-#~ msgid "[%d] removed from Qun \"%d\""
-#~ msgstr "Vd. [%d] ha salido del grupo «%d»"
-
-#, fuzzy
-#~ msgid "[%d] added to Qun \"%d\""
-#~ msgstr "Vd. [%d] ha sido añadido al grupo «%d»"
-
-#~ msgid "I am a member"
-#~ msgstr "Soy miembro"
-
-#, fuzzy
-#~ msgid "I am requesting"
-#~ msgstr "Usted está utilizando "
-
-#~ msgid "I am the admin"
-#~ msgstr "Soy el administrador"
-
-#~ msgid "Unknown status"
-#~ msgstr "Estado desconocido"
-
-#~ msgid "Remove from Qun"
-#~ msgstr "Eliminar del Qun"
-
-#~ msgid "You entered a group ID outside the acceptable range"
-#~ msgstr ""
-#~ "Ha introducido un identificador de grupo que está fuera del rango "
-#~ "permitido"
-
-#~ msgid "Are you sure you want to leave this Qun?"
-#~ msgstr "¿Está seguro que quiere dejar este Qun?"
-
-#~ msgid "Do you want to approve the request?"
-#~ msgstr "¿Desea aprobar esta solicitud?"
-
-#, fuzzy
-#~ msgid "Change Qun member"
-#~ msgstr "Número de teléfono"
-
-#, fuzzy
-#~ msgid "Change Qun information"
-#~ msgstr "Información de canal"
-
-#~ msgid "System Message"
-#~ msgstr "Mensaje del sistema"
-
-#~ msgid "<b>Last Login IP</b>: %s<br>\n"
-#~ msgstr "<b>Última IP de conexión</b>: %s<br>\n"
-
-#~ msgid "<b>Last Login Time</b>: %s\n"
-#~ msgstr "<b>Último hora de conexión</b>: %s\n"
-
-#~ msgid "Set My Information"
-#~ msgstr "Fijar mi información"
-
-#~ msgid "Leave the QQ Qun"
-#~ msgstr "Salir del Qun QQ"
-
-#~ msgid "Block this buddy"
-#~ msgstr "Bloquear a este amigo"
-
-#~ msgid "Invalid token reply code, 0x%02X"
-#~ msgstr "Código de respuesta token inválido, 0x%02X"
-
-#, fuzzy
-#~ msgid "Error password: %s"
-#~ msgstr "Error  %s"
-
-#, fuzzy
-#~ msgid "Failed to connect all servers"
-#~ msgstr "Fallo al conectar con el servidor."
-
-#~ msgid "Connecting server %s, retries %d"
-#~ msgstr "Conectando al servidor %s, %d reintentos"
-
-#, fuzzy
-#~ msgid "Do you approve the requestion?"
-#~ msgstr "¿Desea aprobar esta solicitud?"
-
-#, fuzzy
-#~ msgid "Do you add the buddy?"
-#~ msgstr "¿Desea añadir este amigo?"
-
-#, fuzzy
-#~ msgid "%s added you [%s] to buddy list"
-#~ msgstr "El usuario %s lo ha añadido [%s] a su lista de amigos."
-
-#, fuzzy
-#~ msgid "QQ Budy"
-#~ msgstr "Amigo"
-
-#~ msgid "%s wants to add you [%s] as a friend"
-#~ msgstr "%s quiere añadirle [%s] como amigo"
-
-#, fuzzy
-#~ msgid "%s is not in buddy list"
-#~ msgstr "%s no está en su lista de amigos"
-
-#, fuzzy
-#~ msgid "Would you add?"
-#~ msgstr "¿Desea añadirle?"
-
-#~ msgid "%s"
-#~ msgstr "%s"
-
-#, fuzzy
-#~ msgid "QQ Server Notice"
-#~ msgstr "Servidor QQ"
-
-#, fuzzy
-#~ msgid "Network disconnected"
-#~ msgstr "Se ha desconectado el remoto"
-
-#~ msgid "developer"
-#~ msgstr "desarrollador"
-
-#~ msgid "XMPP developer"
-#~ msgstr "desarrollador XMPP"
-
-#~ msgid "Artists"
-#~ msgstr "Artistas"
-
-#~ msgid ""
-#~ "You are using %s version %s.  The current version is %s.  You can get it "
-#~ "from <a href=\"%s\">%s</a><hr>"
-#~ msgstr ""
-#~ "Usted está utilizado %s, versión %s. La versión actual es %s. Puede "
-#~ "obtenerla de <a href=\"%s\">%s</a><hr>"
-
-#~ msgid "<b>ChangeLog:</b><br>%s"
-#~ msgstr "<b>Registro de cambios:</b><br>%s"
-
-#~ msgid "EOF while reading from resolver process"
-#~ msgstr "Fin de fichero mientras se leía del proceso de resolución"
-
-#~ msgid "Your information has been updated"
-#~ msgstr "Se ha modificado su información."
-
-#~ msgid "Input your reason:"
-#~ msgstr "Introduzca sus motivos:"
-
-#~ msgid "You have successfully removed a buddy"
-#~ msgstr "Ha eliminado un amigo con éxito"
-
-#~ msgid "You have successfully removed yourself from your friend's buddy list"
-#~ msgstr "Se ha borrado con éxito de la lista de amigos de su amigo"
-
-#~ msgid "You have added %d to buddy list"
-#~ msgstr "Ha añadido %d a su lista de amigos"
-
-#~ msgid "Invalid QQid"
-#~ msgstr "QQid inválido"
-
-#~ msgid "Please enter external group ID"
-#~ msgstr "Indique su ID de grupo externo"
-
-#~ msgid "Reason: %s"
-#~ msgstr "Razón: %s"
-
-#~ msgid "Your request to join group %d has been approved by admin %d"
-#~ msgstr ""
-#~ "Su solicitud de unirse al grupo %d ha sido aprobada por el administrador %"
-#~ "d"
-
-#~ msgid "I am applying to join"
-#~ msgstr "He solicitado unirme"
-
-#~ msgid "You have successfully left the group"
-#~ msgstr "Ha salido con éxito del grupo"
-
-#~ msgid "QQ Group Auth"
-#~ msgstr "Autenticación grupo QQ"
-
-#~ msgid "Your authorization request has been accepted by the QQ server"
-#~ msgstr "El servidor QQ ha aceptado su operación de autorización"
-
-#~ msgid "Enter your reason:"
-#~ msgstr "Introduzca sus motivos:"
-
-#~ msgid " Space"
-#~ msgstr " Space"
-
-#~ msgid "<b>Real hostname</b>: %s: %d<br>\n"
-#~ msgstr "<b>Nombre real</b>: %s: %d<br>\n"
-
-#~ msgid "Show Login Information"
-#~ msgstr "Mostrar la información de conexión"
-
-#~ msgid "resend interval(s)"
-#~ msgstr "intervalo/s de reenvío"
-
-#~ msgid "hostname is NULL or port is 0"
-#~ msgstr "el nombre de equipo es NULL o el puerto es 0"
-
-#~ msgid "Unable to login. Check debug log."
-#~ msgstr "No pudo conectarse, compruebe el registro de depuración."
-
-#~ msgid "Failed room reply"
-#~ msgstr "Fallo en la respuesta a la sala"
-
-#~ msgid "User %s rejected your request"
-#~ msgstr "El usuario %s rechazó su solicitud"
-
-#~ msgid "User %s approved your request"
-#~ msgstr "El usuario %s ha aprobado su solicitud"
-
-#~ msgid "Notice from: %s"
-#~ msgstr "Nota de: %s"
-
-#~ msgid "Code [0x%02X]: %s"
-#~ msgstr "Código [0x%02X]: %s"
-
-#~ msgid "Group Operation Error"
-#~ msgstr "Error de operación de grupo"
-
-#~ msgid "Error setting socket options"
-#~ msgstr "Error al establecer las opciones del socket"
-
-#~ msgid ""
-#~ "Windows Live ID authentication: cannot find authenticate token in server "
-#~ "response"
-#~ msgstr ""
-#~ "Autenticación Windows Live ID: no se encontró el token de autenticación "
-#~ "en la respuesta del servidor"
-
-#~ msgid "Windows Live ID authentication Failed"
-#~ msgstr "¡Falló la autenticación Windows Live!"
-
-#~ msgid "Too evil (sender)"
-#~ msgstr "Demasiado malvado (remitente)"
-
-#~ msgid "Too evil (receiver)"
-#~ msgstr "Demasiado malvado (destinatario)"
-
-#~ msgid "Available Message"
-#~ msgstr "Mensajes disponibles"
-
-#~ msgid "Away Message"
-#~ msgstr "Mensajes de ausencia"
-
-#~ msgid "<i>(retrieving)</i>"
-#~ msgstr " <i>(obteniendo)</i>"
-
-#~ msgid "TCP Address"
-#~ msgstr "Dirección TCP"
-
-#~ msgid "UDP Address"
-#~ msgstr "Dirección UDP"
-
-#~ msgid "Screen name:"
-#~ msgstr "Nombre de usuario:"
-
-#~ msgid "Someone says your screen name in chat"
-#~ msgstr "Alguien dice su nombre de usuario en el chat"
-
-#~ msgid ""
-#~ "This server requires plaintext authentication over an unencrypted "
-#~ "connection.  Allow this and continue authentication?"
-#~ msgstr ""
-#~ "El servidor solicita autenticación en claro sobre un canal no cifrado. "
-#~ "¿Permitir ésto y continuar con el proceso de autenticación?"
-
-#~ msgid "Use GSSAPI (Kerberos v5) for authentication"
-#~ msgstr "Usar GSSAPI (Kerberos v5) en la autenticación"
-
-#~ msgid "Invalid screen name"
-#~ msgstr "Nombre de usuario no válido"
-
-#~ msgid "Invalid screen name."
-#~ msgstr "Nombre de usuario no válido"
-
-#~ msgid "Screen _name:"
-#~ msgstr "_Nombre de usuario:"
-
-#~ msgid ""
-#~ "%s%s<span weight=\"bold\">Written by:</span>\t%s\n"
-#~ "<span weight=\"bold\">Website:</span>\t\t%s\n"
-#~ "<span weight=\"bold\">Filename:</span>\t\t%s"
-#~ msgstr ""
-#~ "%s%s<span weight=\"bold\">Escrito por:</span>\t%s\n"
-#~ "<span weight=\"bold\">Sitio Web:</span>\t\t%s\n"
-#~ "<span weight=\"bold\">Nombre del archivo:</span>\t\t%s"
-
-#~ msgid ""
-#~ "The contact availability plugin (cap) is used to display statistical "
-#~ "information about buddies in a users contact list."
-#~ msgstr ""
-#~ "El complemento de disponibilidad de contactos («cap») se utiliza para "
-#~ "mostrar información estadística sobre los amigos en la lista de contactos "
-#~ "de un usuario."
-
-#~ msgid "Pounce only when my status is not available"
-#~ msgstr "Sólo avisar cuando mi estado es «no disponible»"
-
-#~ msgid "Current media"
-#~ msgstr "Medio actual"
-
-#~ msgid ""
-#~ "Sorry, passwords over %d characters in length (yours is %d) are not "
-#~ "supported by MySpace."
-#~ msgstr ""
-#~ "Lo siento, MySpace no permite el uso de contraseñas de más de %d "
-#~ "caracteres de longitud (la suya tiene %d)."
-
-#~ msgid "Screen name sent"
-#~ msgstr "Se ha enviado el nombre de usuario"
-
-#~ msgid "Screen name"
-#~ msgstr "Nombre de usuario"
-
-#~ msgid "Use recent buddies group"
-#~ msgstr "Usar grupo de amigos reciente"
-
-#~ msgid "Show how long you have been idle"
-#~ msgstr "Mostrar cuánto tiempo se ha estado inactivo"
-
-#~ msgid "Cannot find/access ~/.silc directory"
-#~ msgstr "No se puede encontrar o acceder al directorio ~/.silc"
-
-#~ msgid "%s changed status from %s to %s"
-#~ msgstr "el estado de %s cambió de %s a %s"
-
-#~ msgid "%s is now %s"
-#~ msgstr "%s es ahora %s"
-
-#~ msgid "%s is no longer %s"
-#~ msgstr "%s ya no está %s "
-
-#~ msgid "_Merge"
-#~ msgstr "_Fusionar"
-
-#~ msgid ""
-#~ "Please enter the screen name of the person you would like to add to your "
-#~ "buddy list. You may optionally enter an alias, or nickname,  for the "
-#~ "buddy. The alias will be displayed in place of the screen name whenever "
-#~ "possible.\n"
-#~ msgstr ""
-#~ "Introduzca el nombre de usuario de la persona que usted quiere añadir a "
-#~ "la lista. Puede, opcionalmente, introducir un sobrenombre o apodo. El "
-#~ "sobrenombre se mostrará en lugar del nombre de usuario siempre que sea "
-#~ "posible.\n"
-
-#~ msgid "User has typed something and stopped"
-#~ msgstr "El usuario ha escrito algo y ha parado"
-
-#~ msgid "Display Statistics"
-#~ msgstr "Mostrar estadísticas"
-
-#~ msgid "Sort by status"
-#~ msgstr "Ordenar por estado"
-
-#~ msgid "Sort alphabetically"
-#~ msgstr "Ordenar alfabéticamente"
-
-#~ msgid "Sort by log size"
-#~ msgstr "Ordenar por tamaño de registro"
-
-#~ msgid "There were errors unloading the plugin."
-#~ msgstr "Se produjeron errores mientras se descargaba el complemento."
-
-#~ msgid "Couldn't open file"
-#~ msgstr "No se pudo abrir el archivo"
-
-#~ msgid "Error initializing session"
-#~ msgstr "Error al inicializar la sesión"
-
-#~ msgid "Unable to make SSL connection to server."
-#~ msgstr "No se pudo establecer una conexión SSL con el servidor."
-
-#~ msgid "Invalid chat name specified."
-#~ msgstr "Se especificó un nombre de chat no válido."
-
-#~ msgid ""
-#~ "Always use ICQ proxy server for file transfers\n"
-#~ "(slower, but does not reveal your IP address)"
-#~ msgstr ""
-#~ "Utilizar un servidor proxy de ICQ para transferencias de ficheros\n"
-#~ "(lento, pero no descubre su dirección IP)"
-
-#~ msgid "Add Buddy _Pounce"
-#~ msgstr "Añadir _aviso de amigo"
-
-#~ msgid "Add a C_hat"
-#~ msgstr "Añadir un _chat"
-
-#~ msgid "/Accounts/Add\\/Edit"
-#~ msgstr "/Cuentas/Añadir\\/Editar"
-
-#~ msgid "<span color=\"red\">%s disconnected: %s</span>"
-#~ msgstr "<span color=\"red\">%s se ha desconectado: %s</span>"
-
-#~ msgid ""
-#~ "%s\n"
-#~ "\n"
-#~ "%s will not attempt to reconnect the account until you correct the error "
-#~ "and re-enable the account."
-#~ msgstr ""
-#~ "%s\n"
-#~ "\n"
-#~ "%s no intentará reconectarse a esta cuenta hasta que corrija el error y "
-#~ "reactive la cuenta."
-
-#~ msgid "_Send To"
-#~ msgstr "_Enviar a"
-
-#~ msgid "Conversation History"
-#~ msgstr "Historial de conversaciones"
-
-#~ msgid "Log Viewer"
-#~ msgstr "Visor del registro"
-
-#~ msgid "You have just sent a Nudge!"
-#~ msgstr "¡Acaba de dar un codazo!"
-
-#~ msgid "zap"
-#~ msgstr "zap"
-
-#~ msgid "zapped"
-#~ msgstr "zapeado"
-
-#~ msgid "whacked"
-#~ msgstr "golpeado"
-
-#~ msgid "hugged"
-#~ msgstr "abrazado"
-
-#~ msgid "*** You have been %s! ***"
-#~ msgstr "*** ¡Le han %s !***"
-
-#~ msgid "zap: zap a user to get their attention"
-#~ msgstr "zap: Llamar la atención de un usuario"
-
-#~ msgid "Would like to add him?"
-#~ msgstr "¿Desea añadirle?"
-
-#~ msgid "%s just sent you a Buzz!"
-#~ msgstr "¡%s le acaba de dar un codazo!"
-
-#~ msgid "You have just sent a Buzz!"
-#~ msgstr "¡Acaba de dar un codazo!"
-
-#~ msgid "/Options/Show Buddy _Icon"
-#~ msgstr "/Opciones/Mostrar _iconos de los amigos"
-
-#~ msgid "/Options/Show Buddy Icon"
-#~ msgstr "/Opciones/Mostrar _iconos de los amigos"
-
-#~ msgid "Are you sure to exit this Qun?"
-#~ msgstr "¿Seguro que quiere dejar este Qun?"
-
-#~ msgid "Go ahead"
-#~ msgstr "Adelante"
-
-#~ msgid "Server ACK"
-#~ msgstr "ACK de servidor"
-
-#~ msgid "Keep alive error, seems connection lost!"
-#~ msgstr "Error de mantenimiento, ¡parece que se ha perdido la conexión!"
-
-#~ msgid "Request login token error!"
-#~ msgstr "¡Error al solicitar token para conectarse!"
-
-#~ msgid "%s Address"
-#~ msgstr "Dirección de %s"
-
-#~ msgid "QQ: Available"
-#~ msgstr "QQ: Disponible"
-
-#~ msgid "QQ: Away"
-#~ msgstr "QQ: Ausente"
-
-#~ msgid "QQ: Invisible"
-#~ msgstr "QQ: Invisible"
-
-#~ msgid "QQ: Offline"
-#~ msgstr "QQ: Desconectado"
-
-#~ msgid "Login in TCP"
-#~ msgstr "Conexión en TCP"
-
-#~ msgid "Login Hidden"
-#~ msgstr "Conexión oculta"
-
-#~ msgid "Socket send error"
-#~ msgstr "Error de envío al socket"
-
-#~ msgid "Norwegian"
-#~ msgstr "Noruego"
-
-#~ msgid "_Bold"
-#~ msgstr "_Negrita"
-
-#~ msgid "_Larger"
-#~ msgstr "_Grande"
-
-#~ msgid "_Background color"
-#~ msgstr "Color de _fondo"
-
-#~ msgid "_Reset font"
-#~ msgstr "_Restaurar tipografía"
-
-#~ msgid "Show Buddy _Details"
-#~ msgstr "Mostrar _detalles de amigo"
-
-# c-format
-#~ msgid "%s%s%s%s wants to add %s%s%s%s to his or her buddy list%s%s"
-#~ msgstr "%s%s%s%s quiere añadir a %s%s%s%s a su lista de amigos%s%s."
-
-#~ msgid "You have been signed off for an unknown reason."
-#~ msgstr "Ha sido desconectado por motivos desconocidos."
-
-#~ msgid "Show buddy _icons"
-#~ msgstr "Mostrar _iconos de los amigos"
-
-#~ msgid "Commands are not supported yet. Message was NOT sent."
-#~ msgstr "Órdenes no soportadas. NO se ha enviado el mensaje."
-
-#~ msgid ""
-#~ "Could not add the buddy %s for an unknown reason.  The most common reason "
-#~ "for this is that you have the maximum number of allowed buddies in your "
-#~ "buddy list."
-#~ msgstr ""
-#~ "No se pudo añadir al amigo %s por una razón desconocida. La razón más "
-#~ "habitual es que ha llegado al máximo número de amigos permitidos en su "
-#~ "lista de amigos."
-
-#~ msgid "_Connect"
-#~ msgstr "_Conectar"
-
-#~ msgid "Send IM fail\n"
-#~ msgstr "Fallo en el envío de IM\n"
-
-#~ msgid "Unavailable"
-#~ msgstr "No disponible"
-
-#~ msgid "User information for %s unavailable:"
-#~ msgstr "Información de usuario de %s no disponible:"
-
-#~ msgid "/Buddies/_About Pidgin"
-#~ msgstr "/Amigos/_Acerca de Pidgin"
-
-#~ msgid "Smaller font size"
-#~ msgstr "Tamaño de tipografía menor"
-
-#~ msgid "Insert link"
-#~ msgstr "Insertar enlace"
-
-#~ msgid "Insert image"
-#~ msgstr "Insertar imagen"
-
-#~ msgid "Tools"
-#~ msgstr "Herramientas"
-
-#~ msgid "</a><hr>"
-#~ msgstr "</a><hr>"
-
-#~ msgid ""
-#~ "%s was disconnected due to the following error:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "%s se ha desconectado por el siguiente error:\n"
-#~ "%s"
-
-#~ msgid "Reject watching by other users"
-#~ msgstr "Impedir que otros usuarios miren"
-
-#~ msgid "Block invites"
-#~ msgstr "Bloquear invitaciones"
-
-#~ msgid "Reject online status attribute requests"
-#~ msgstr "Rechazar solicitudes de los atributos del estado en línea"
-
-#~ msgid "Alias..."
-#~ msgstr "_Apodo..."
-
-#~ msgid ""
-#~ "<FONT SIZE=\"4\">IRC:</FONT> #pidgin-win32 on irc.freenode.net<BR><BR>"
-#~ msgstr ""
-#~ "<FONT SIZE=\"4\">IRC:</FONT> canal #pidgin-win32 en irc.freenode."
-#~ "net<BR><BR>"
-
-#~ msgid ""
-#~ "You can send this image as a file transfer or embed it into this message, "
-#~ "or use it as the buddy icon for this user."
-#~ msgstr ""
-#~ "Puede enviar esta imagen como una transferencia de archivo, o "
-#~ "introducirla en este mensaje, o usarla como icono de amigo para este "
-#~ "usuario."
-
-#~ msgid ""
-#~ "You can get version %s from:<br><a href=\"http://pidgin.im/\">http://"
-#~ "pidgin.im</a>."
-#~ msgstr ""
-#~ "Puede obtener la versión %s de:<br><a href=\"http://pidgin.im/\">http://"
-#~ "pidgin.im</a>."
-
-#~ msgid "Toggle offline buddies"
-#~ msgstr "Mostrar amigos desconectados"
-
-#~ msgid "Timestamps"
-#~ msgstr "Marcas de tiempo"
-
-#~ msgid "..."
-#~ msgstr "..."
-
-#~ msgid "Still need to do something about this."
-#~ msgstr "Aún hay que hacer algo sobre esto."
-
-#~ msgid "Autoreply"
-#~ msgstr "Respuesta automática"
-
-#~ msgid "Autoreply for all the protocols"
-#~ msgstr "Respuesta automática para todos los protocolos"
-
-#~ msgid ""
-#~ "This plugin lets you set autoreply message for any protocol. You can set "
-#~ "the global autoreply message from the Plugin-options dialog. To set some "
-#~ "specific autoreply message for a particular buddy, right click on the "
-#~ "buddy in the buddy-list window. To set autoreply messages for some "
-#~ "account, go to the `Advanced' tab of the Account-edit dialog."
-#~ msgstr ""
-#~ "Este complemento permite configurar un mensaje de respuesta automática "
-#~ "para cualquier protocolo. Puede configurar el mensaje de respuesta "
-#~ "automática global en el diálogo de las opciones del complemento. Si "
-#~ "quiere establecer mensajes de respuesta particulares para un amigo sólo "
-#~ "tiene que pulsar con el botón derecho sobre el amigo en la ventana con la "
-#~ "lista de amigos. Vaya a la pestaña «Avanzadas» en el diálogo de edición de "
-#~ "cuentas si quiere configurar un mensaje de respuesta automática para sólo "
-#~ "alguna de sus cuentas."
-
-#~ msgid "Set autoreply message for %s"
-#~ msgstr "Fijar el mensaje de respuesta automática para %s"
-
-#~ msgid "Set Autoreply Message"
-#~ msgstr "Fijar el mensaje de respuesta automática"
-
-#~ msgid ""
-#~ "The following message will be sent to the buddy when the buddy sends you "
-#~ "a message and autoreply is enabled."
-#~ msgstr ""
-#~ "Se mostrara el mensaje indicado a continuación a un amigo cuando el amigo "
-#~ "le envíe un mensaje y esté activada la respuesta automática."
-
-#~ msgid "Set _Autoreply Message"
-#~ msgstr "Configurar mensaje de respuesta _automática"
-
-#~ msgid "Autoreply message"
-#~ msgstr "Mensaje de respuesta automática"
-
-#~ msgid "Send autoreply messages when"
-#~ msgstr "Enviar el mensaje de respuesta automática cuando"
-
-#~ msgid "When my account is _away"
-#~ msgstr "Cuando mi cuenta no está _disponible"
-
-#~ msgid "When my account is _idle"
-#~ msgstr "Cuando mi cuenta está _inactiva"
-
-#~ msgid "_Default reply"
-#~ msgstr "Respuesta por _omisión"
-
-#~ msgid "Autoreply with status message"
-#~ msgstr "Respuesta automática con mensaje de estado"
-
-#~ msgid "Always when there is a status message"
-#~ msgstr "Siempre cuando haya un mensaje de estado"
-
-#~ msgid "Only when there's no autoreply message"
-#~ msgstr "Sólo si no hay un mensaje de respuesta automática"
-
-#~ msgid "Delay between autoreplies"
-#~ msgstr "Demora entre respuestas automáticas"
-
-#~ msgid "_Minimum delay (mins)"
-#~ msgstr "Demora _mínima (minutos)"
-
-#~ msgid "Times to send autoreplies"
-#~ msgstr "Horas en las que enviar las respuestas automáticas"
-
-#~ msgid "Ma_ximum count"
-#~ msgstr "Cuenta má_xima"
-
-#~ msgid ""
-#~ "I am currently not available. Please leave your message, and I will get "
-#~ "back to you as soon as possible."
-#~ msgstr ""
-#~ "Ahora mismo no estoy disponible. Por favor, deja un mensaje y me pondré "
-#~ "en contacto contigo lo antes posible."
-
-#~ msgid "Jabber Account"
-#~ msgstr "Cuenta Jabber"
-
-#~ msgid "Server couldn't authenticate you without a password"
-#~ msgstr "El servidor no pudo autenticarle sin una contraseña"
-
-#~ msgid "Search for Jabber users"
-#~ msgstr "Buscar usuarios Jabber"
-
-#~ msgid "Invalid Jabber ID"
-#~ msgstr "ID de Jabber no válido"
-
-#~ msgid "Change Jabber Password"
-#~ msgstr "Cambiar contraseña de Jabber"
-
-#~ msgid "Jabber Protocol Plugin"
-#~ msgstr "Complemento de protocolo Jabber"
-
-#~ msgid "Rate limiting error."
-#~ msgstr "Error del limitador de tasa de mensajes."
-
-#~ msgid "/Tools/Buddy Pounces"
-#~ msgstr "/Herramientas/Aviso de amigo"
-
-#~ msgid "Jabber developer"
-#~ msgstr "desarrollador de Jabber"
-
-#~ msgid "Slovack"
-#~ msgstr "Eslovaco"
-
-#~ msgid "GtkTreeView Expander Size"
-#~ msgstr "Tamaño del expansor GtkTreeView"
-
-#~ msgid "GtkTreeView Indent Expanders"
-#~ msgstr "Sangrado de los expansores GtkTreeView"
-
-#~ msgid "Provides options specific to Windows "
-#~ msgstr "Opciones específicas de para Windows "
-
-#~ msgid "<FONT SIZE=\"4\">IRC:</FONT> #winPidgin on irc.freenode.net<BR><BR>"
-#~ msgstr ""
-#~ "<FONT SIZE=\"4\">IRC:</FONT> canal #winPidgin en irc.freenode.net<BR><BR>"
-
-#~ msgid "Pidgin %s. Try `%s -h' for more information.\n"
-#~ msgstr "Pidgin %s. Intente `%s -h' para más información.\n"
-
-#~ msgid "WinPidgin Options"
-#~ msgstr "Opciones de WinPidgin"
-
-#~ msgid ""
-#~ "%d buddy from group %s was not removed because it belongs to an account "
-#~ "which is disabled or offline.  This buddy and the group were not "
-#~ "removed.\n"
-#~ msgid_plural ""
-#~ "%d buddies from group %s were not removed because they belong to accounts "
-#~ "which are currently disabled or offline.  These buddies and the group "
-#~ "were not removed.\n"
-#~ msgstr[0] ""
-#~ "No se ha eliminado %d amigo del grupo %s porque pertenece a una cuenta "
-#~ "que está desconectada o deshabilitada. No se han eliminado ni el amigo ni "
-#~ "el grupo\n"
-#~ msgstr[1] ""
-#~ "No se han eliminado %d amigos del grupo %s porque pertenece a una cuenta "
-#~ "que está desconectada o deshabilitada. No se han eliminado los amigos ni "
-#~ "el grupo.\n"
-
-#~ msgid "Group not removed"
-#~ msgstr "Grupo no eliminado"
-
-#~ msgid "Old Pidgin"
-#~ msgstr "Antiguo Pidgin"
-
-#~ msgid "Pidgin encountered errors loading the plugin."
-#~ msgstr "Pidgin encontró un error mientras cargaba este complemento."
-
-#~ msgid "Pidgin User"
-#~ msgstr "Usuario de Pidgin"
-
-#~ msgid "SNAC threw error: %s\n"
-#~ msgstr "SNAC envió el error: %s\n"
-
-#~ msgid ""
-#~ "Your screen name is currently formatted as follows:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "El formato de su nombre de usuario es actualmente el siguiente:\n"
-#~ "%s"
-
-#~ msgid "New screen name formatting:"
-#~ msgstr "Nuevo formato del nombre de usuario:"
-
-#~ msgid "Format Screen Name..."
-#~ msgstr "Formato del nombre de usuario..."
-
-#~ msgid "TOC has sent a PAUSE command."
-#~ msgstr "TOC envió una orden de PAUSA."
-
-#~ msgid ""
-#~ "When this happens, TOC ignores any messages sent to it, and may kick you "
-#~ "off if you send a message. Pidgin will prevent anything from going "
-#~ "through. This is only temporary, please be patient."
-#~ msgstr ""
-#~ "Cuando esto ocurre, TOC ignora todos los mensajes que se le envían y "
-#~ "puede expulsarle si envía mensajes. Pidgin evitará que le llegue "
-#~ "cualquier cosa. Esto es sólo temporal, por favor, sea paciente."
-
-#~ msgid "Pidgin - Save As..."
-#~ msgstr "Pidgin - Guardar como..."
-
-#~ msgid ""
-#~ "The normal authentication method has failed. This means either your "
-#~ "password is incorrect, or Yahoo!'s authentication scheme has changed. "
-#~ "Pidgin will now attempt to log in using Web Messenger authentication, "
-#~ "which will result in reduced functionality and features."
-#~ msgstr ""
-#~ "El método de autenticación habitual falló. Esto significa o bien que que "
-#~ "su contraseña no es correcta o bien que el sistema de autenticación de "
-#~ "Yahoo! ha cambiado. Pidgin intentará conectarse a través de la "
-#~ "autenticación de Mensajería web que podrá dar lugar a un acceso a menos "
-#~ "funcionalidades y funciones."
-
-#~ msgid "Tag"
-#~ msgstr "Marca"
-
-#~ msgid ""
-#~ "\n"
-#~ "Idle: %s"
-#~ msgstr ""
-#~ "\n"
-#~ "Inactivo: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Nickname:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Apodo:</b> %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Logged In:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Conectado:</b> %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Idle:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Inactivo:</b> %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Last Seen:</b> %s ago"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Visto por última vez:</b> hace %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Status:</b> Offline"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Estado:</b> Desconectado"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Status:</b> Awesome"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Estado:</b> Genial"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Status:</b> Rockin'"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Estado:</b> Rock & roll"
-
-#~ msgid ""
-#~ "<span weight=\"bold\" size=\"larger\">You have mail!</span>\n"
-#~ "\n"
-#~ "%s"
-#~ msgstr ""
-#~ "<span weight=\"bold\" size=\"larger\">¡Tiene correo!</span>\n"
-#~ "\n"
-#~ "%s"
-
-#~ msgid "The specified buddy was not found in the Evolution Contacts."
-#~ msgstr ""
-#~ "No se encontró al amigo especificado dentro en los contactos de Evolution."
-
-#~ msgid "Delay"
-#~ msgstr "Retardo"
-
-#~ msgid "minutes."
-#~ msgstr "minutos."
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Status:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Estado:</b> %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Message:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Mensaje:</b> %s"
-
-#~ msgid "<b>%s:</b> %s"
-#~ msgstr "<b>%s:</b> %s"
-
-#~ msgid "<b>Idle for:</b> %s<br>"
-#~ msgstr "<b>Inactivo desde:</b> %s<br>"
-
-#~ msgid "Client:"
-#~ msgstr "Cliente:"
-
-#~ msgid "The user %s wants to add %s to his or her buddy list."
-#~ msgstr "El usuario %s quiere añadir a %s a su lista de amigos."
-
-#~ msgid "_Authorize"
-#~ msgstr "_Autorizar"
-
-#~ msgid "_Deny"
-#~ msgstr "_Denegar"
-
-#~ msgid "Invalid Username"
-#~ msgstr "Nombre de usuario no válido"
-
-#~ msgid "<b>Alias:</b> %s<br>"
-#~ msgstr "<B>Apodo:</b> %s<br>"
-
-#~ msgid "MSN Profile"
-#~ msgstr "Perfil MSN"
-
-#~ msgid "%s<b>General</b><br>%s"
-#~ msgstr "%s<b>General</b><br>%s"
-
-#~ msgid "%s<b>Social</b><br>%s"
-#~ msgstr "%s<b>Social</b><br>%s"
-
-#~ msgid "<br><b>Personal</b><br>%s"
-#~ msgstr "<br><b>Personal</b><br>%s"
-
-#~ msgid "<br><b>Business</b><br>%s"
-#~ msgstr "<br><b>Negocio</b><br>%s"
-
-#~ msgid "<hr><b>Contact Info</b>%s%s"
-#~ msgstr "<hr><b>Información de contacto</b>%s%s"
-
-#~ msgid "<hr><b>%s:</b> "
-#~ msgstr "<hr><b>%s:</b> "
-
-#~ msgid "The user %s (%s) wants to add %s to his or her buddy list."
-#~ msgstr "El usuario %s (%s) quiere añadir a %s a su lista de amigos."
-
-#~ msgid ""
-#~ "The user %s requires authorization before being added to a buddy list.  "
-#~ "Do you want to send an authorization request?"
-#~ msgstr ""
-#~ "El usuario %s requiere autorización antes permitir que lo incorporen a "
-#~ "una lista de amigos.  ¿Desea enviar una solicitud de autorización?"
-
-#~ msgid "_Request Authorization"
-#~ msgstr "_Pedir autorización"
-
-#~ msgid ""
-#~ "The user %u wants to add %s to their buddy list for the following "
-#~ "reason:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "El usuario %u quiere añadir a %s a su lista de amigos por el siguiente "
-#~ "motivo:\n"
-#~ "%s"
-
-#~ msgid "Authorization Request"
-#~ msgstr "Solicitud de autorización"
-
-#~ msgid "<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s"
-#~ msgstr "<B>UIN:</B> %s<BR><B>Estado:</B> %s<HR>%s"
-
-#~ msgid ""
-#~ "The user %s wants to add %s to their buddy list for the following "
-#~ "reason:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "El usuario %s quiere añadir a %s a su lista de amigos por el siguiente "
-#~ "motivo:\n"
-#~ "%s"
-
-#~ msgid "Wrong password!"
-#~ msgstr "¡Contraseña errónea!"
-
-#~ msgid "Faces"
-#~ msgstr "Caras"
-
-#~ msgid "Change Your QQ Face"
-#~ msgstr "Cambiaar tu cara QQ"
-
-#~ msgid "<i>Information below may not be accurate</i><br>\n"
-#~ msgstr "<i>La información a continuación puede no ser correcta</i><br>\n"
-
-#~ msgid "Please wait for new version"
-#~ msgstr "Por favor, espere a una nueva versión"
-
-#~ msgid "User info is not updated"
-#~ msgstr "La información del usuario no está actualizada"
-
-#~ msgid "Send packet"
-#~ msgstr "Enviar paquete"
-
-#~ msgid "Packets lost, send again?"
-#~ msgstr "Se han perdido paquetes, ¿enviar de nuevo?"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Supports:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Soporta:</b> %s"
-
-#~ msgid "<b>User ID:</b> %s<br>"
-#~ msgstr "<b>ID de usuario:</b> %s<br>"
-
-#~ msgid "<b>Full Name:</b> %s<br>"
-#~ msgstr "Nombre completo:</b> %s<br>"
-
-#~ msgid "<b>Supports:</b> %s<br>"
-#~ msgstr "<b>Soportados:</b> %s<br>"
-
-#~ msgid "<b>Status:</b> %s"
-#~ msgstr "<b>Estado:</b> %s"
-
-#~ msgid "Wrong Password"
-#~ msgstr "Contraseña errónea"
-
-#~ msgid "Blink tray icon for unread..."
-#~ msgstr ""
-#~ "Hacer parpadear el icono en el área de notificación del sistema para los "
-#~ "mensajes sin leer..."
-
-#~ msgid "_Instant Messages:"
-#~ msgstr "Mensajes instantáneos:"
-
-#~ msgid "C_hat Messages:"
-#~ msgstr "Mensajes del c_hat"
-
-#~ msgid "Send unknown \"_slash\" commands as messages"
-#~ msgstr "Enviar órdenes «_slash» desconocidas como mensajes"
-
-#~ msgid "Tab Options"
-#~ msgstr "Opciones de las solapas"
-
-#~ msgid "_Sounds while away"
-#~ msgstr "_Sonidos mientras vd. está ausente"
-
-#~ msgid "Away / Idle"
-#~ msgstr "Ausencia / Inactividad"
-
-#~ msgid "Pidgin_proxy_connect() failed"
-#~ msgstr "Falló Pidgin_proxy_connect()"
-
-#~ msgid "QQ Port"
-#~ msgstr "Puerto QQ"
-
-#~ msgid "Your request to send file[%s] has been rejected by buddy[%d]"
-#~ msgstr ""
-#~ "Su solicitud de envío de archivo[%s] ha sido rechazada por el amigo[%d]"
-
-#~ msgid "The sending process of file[%s] has been canceled by buddy[%d]"
-#~ msgstr ""
-#~ "El proceso de envío de fichero[%s] ha sido cancelado por el amigo[%d]"
-
-#~ msgid "Crazychat"
-#~ msgstr "Crazychat"
-
-#~ msgid "Plugin to establish a Crazychat session."
-#~ msgstr "Complemento para establecer una sesión de «Crazychat»"
-
-#~ msgid "Uses Pidgin to obtain buddy ips to connect for a Crazychat session"
-#~ msgstr ""
-#~ "Usar Pidgin para obtener direcciones IP de los amigos para conectar a una "
-#~ "sesión de «Crazychat»"
-
-#~ msgid "Network Configuration"
-#~ msgstr "Configuración de red"
-
-#~ msgid "TCP port"
-#~ msgstr "Puerto TCP"
-
-#~ msgid "UDP port"
-#~ msgstr "Puerto UDP"
-
-#~ msgid "Feature Calibration"
-#~ msgstr "Ajuste de la función"
-
-#~ msgid "Displays an icon for Pidgin in the system tray."
-#~ msgstr ""
-#~ "Muestra un icono para Pidgin en el área de notificación del sistema."
-
-#~ msgid ""
-#~ "Displays a system tray icon (in GNOME, KDE, or Windows for example) to "
-#~ "show the current status of Pidgin, allow fast access to commonly used "
-#~ "functions, and to toggle display of the buddy list. Also provides options "
-#~ "to blink for unread messages."
-#~ msgstr ""
-#~ "Muestra un icono en el área de notificación del sistema (por ejemplo en "
-#~ "Gnome, KDE o Windows) para mostrar el estado actual de Pidgin. Permite un "
-#~ "acceso rápido a las funciones más comunes, e indicar si se debe mostrar "
-#~ "la lista de de amigos. También ofrece opciones para hacer parpadear los "
-#~ "mensajes sin leer."
-
-#~ msgid "DBus"
-#~ msgstr "DBus"
-
-#~ msgid "Buddy icon:"
-#~ msgstr "Icono de amigo:"
-
-#~ msgid "Start _Voice Chat"
-#~ msgstr "Iniciar chat de voz"
-
-#~ msgid "Screen Name:"
-#~ msgstr "Nombre de usuario:"
-
-#~ msgid "Background color as a string"
-#~ msgstr "Cadena del color de fondo"
-
-#~ msgid "Background set"
-#~ msgstr "Establecer color de fondo"
-
-#~ msgid "Whether this tag affects the background color"
-#~ msgstr "Si esta marca afecta al color de fondo"
-
-#~ msgid "ComboBox model"
-#~ msgstr "Modelo «ComboBox»"
-
-#~ msgid "The model for the combo box"
-#~ msgstr "El modelo para el «combo box»"
-
-#~ msgid "Wrap width"
-#~ msgstr "Envolver ancho"
-
-#~ msgid "Wrap width for layouting the items in a grid"
-#~ msgstr ""
-#~ "Ancho a utilizar al envolver para mostrar elementos en una cuadrícula"
-
-#~ msgid "Row span column"
-#~ msgstr "Columnas que incluyen las filas"
-
-#~ msgid "TreeModel column containing the row span values"
-#~ msgstr "Columna «TreeModel» que contiene los valores que expanden las filas"
-
-#~ msgid "Column span column"
-#~ msgstr "Columna que incluye columnas"
-
-#~ msgid "TreeModel column containing the column span values"
-#~ msgstr "Columna «TreeModel» que contiene los valores que incluyen columnas"
-
-#~ msgid "Active item"
-#~ msgstr "Elemento activo"
-
-#~ msgid "The item which is currently active"
-#~ msgstr "El elemento que está activo actualmente"
-
-#~ msgid "Appears as list"
-#~ msgstr "Aparece como lista"
-
-#~ msgid "Whether combobox dropdowns should look like lists rather than menus"
-#~ msgstr ""
-#~ "Si las selecciones de combobox debería mostrarse como listas en lugar de "
-#~ "como menús"
-
-#~ msgid "me is using Pidgin v%s."
-#~ msgstr "yo estoy utilizando Pidgin v%s."
-
-#~ msgid "IM the user"
-#~ msgstr "Enviar un MI al usuario"
-
-#~ msgid "Ignore the user"
-#~ msgstr "Ignorar al usuario"
-
-#~ msgid "Get the user's information"
-#~ msgstr "Obtener la información del usuario"
-
-#~ msgid "Call ended."
-#~ msgstr "Llamada terminada."
-
-#~ msgid "Calling %s"
-#~ msgstr "Llamando %s"
-
-#~ msgid "Receiving call from %s"
-#~ msgstr "Recibiendo llamada de %s"
-
-#~ msgid "Reject Call"
-#~ msgstr "Rechazar llamada"
-
-#~ msgid "_Mute"
-#~ msgstr "Silenciar"
-
-#~ msgid "Error launching <b>%s</b>: %s"
-#~ msgstr "Error al ejecutar <b>%s</b>: %s"
-
-#~ msgid ""
-#~ "Unable to play sound because the 'Command' sound method has been chosen, "
-#~ "but no command has been set."
-#~ msgstr ""
-#~ "No fue posible reproducir el sonido porque se ha escogido el método de "
-#~ "«Orden», pero no se ha especificado la orden."
-
-#~ msgid ""
-#~ "Unable to play sound because the configured sound command could not be "
-#~ "launched: %s"
-#~ msgstr ""
-#~ "No fue posible reproducir el sonido porque el comando de sonido "
-#~ "establecido no se ha podido lanzar: %s"
-
-#~ msgid "e-Mail"
-#~ msgstr "Correo electrónico"
-
-#~ msgid "Unable to initiate a new search"
-#~ msgstr "No se pudo iniciar una nueva búsqueda"
-
-#~ msgid "You have a pending search. Please wait for it to finish."
-#~ msgstr "Tiene una búsqueda pendiente. Por favor espere a que termine."
-
-#~ msgid "Realname"
-#~ msgstr "Nombre real"
-
-#~ msgid ""
-#~ "Server requires TLS/SSL for login.  Select \"Use TLS if available\" in "
-#~ "account properties"
-#~ msgstr ""
-#~ "El servidor necesita utilizar TLS/SSL para conectarle. Seleccione la "
-#~ "opción «Usar TLS si está disponible» en las propiedades de la cuenta"
-
-#~ msgid "Use TLS if available"
-#~ msgstr "Usar TLS si está disponible"
-
-#~ msgid "Login server"
-#~ msgstr "Servidor de conexión"
-
-#~ msgid "Unable to read header from server"
-#~ msgstr "No se pudo leer las cabeceras del servidor"
-
-#~ msgid ""
-#~ "Unable to read message from server: %s.  Command is %hd, length is %hd."
-#~ msgstr ""
-#~ "No se pudieron leer los mensajes del servidor %s. La orden es %hd, la "
-#~ "longitud es %hd."
-
-#~ msgid "users: %s, files: %s, size: %sGB"
-#~ msgstr "usuarios: %s, archivos: %s, tamaño: %s GiB"
-
-#~ msgid "Unable to add \"%s\" to your Napster hotlist"
-#~ msgstr "Incapaz de añadir «%s» a su lista de amigos Napster"
-
-#~ msgid "%s requested a PING"
-#~ msgstr "%s solicitó un PING"
-
-#~ msgid "NAPSTER Protocol Plugin"
-#~ msgstr "Complemento de protocolo NAPSTER"
-
-#~ msgid "Direct IM with %s closed"
-#~ msgstr "Se cerró el MI con %s"
-
-#~ msgid "Direct IM with %s failed"
-#~ msgstr "Fallo un MI directo con %s"
-
-#~ msgid "Unable to open Direct IM"
-#~ msgstr "No se pudo conectar a MI"
-
-#~ msgid ""
-#~ "Transfer of file %s timed out.\n"
-#~ " Try enabling proxy servers for file transfers in Accounts->%s->Edit "
-#~ "Account->Advanced."
-#~ msgstr ""
-#~ "Expiró la transferencia del fichero %s.\n"
-#~ " Intente habilitar servidor proxy para las transferencias de ficheros en "
-#~ "Cuentas->%s->Editar cuenta->Avanzadas."
-
-#~ msgid "Unable to log into file transfer proxy."
-#~ msgstr "No se pudo conectar en el proxy de transferencia de archivos."
-
-#~ msgid ""
-#~ "Unable to establish listener socket or no AOL proxy connection present."
-#~ msgstr ""
-#~ "No se pudo crear el socket de escucha o no hay conexión al proxy AOL."
-
-#~ msgid "Auth host"
-#~ msgstr "Servidor de autenticación"
-
-#~ msgid "Auth port"
-#~ msgstr "Puerto de autenticación"
-
-#~ msgid ""
-#~ "Use AIM/ICQ proxy server\n"
-#~ "(slower, but usually works)"
-#~ msgstr ""
-#~ "Utilizar un servidor proxy de AIM/ICQ (más lento pero funciona "
-#~ "generalmente)"
-
-#~ msgid "EMail"
-#~ msgstr "Correo electrónico"
-
-#~ msgid "Public Key File"
-#~ msgstr "Archivo de clave pública"
-
-#~ msgid "Private Key File"
-#~ msgstr "Archivo de clave privada"
-
-#~ msgid "Re-type Passphrase"
-#~ msgstr "Escriba nuevamente la contraseña"
-
-#~ msgid "TOC host"
-#~ msgstr "Servidor TOC"
-
-#~ msgid "TOC port"
-#~ msgstr "Puerto TOC"
-
-#~ msgid "Unable to read"
-#~ msgstr "No se pudo leer"
-
-#~ msgid "Pager host"
-#~ msgstr "Servidor de buscapersonas"
-
-#~ msgid "YCHT host"
-#~ msgstr "Servidor YCHT"
-
-#~ msgid "YCHT port"
-#~ msgstr "Puerto YCHT"
-
-#~ msgid "%s went away"
-#~ msgstr "%s se ha marchado"
-
-#~ msgid "g003: Error opening connection.\n"
-#~ msgstr "g003: Error abriendo la conexión.\n"
-
-#~ msgid "(+%d more)"
-#~ msgstr "(+%d más)"
-
-#~ msgid " left the room (%s)."
-#~ msgstr " salió de la sala (%s)."
-
-#~ msgid "<span weight=\"bold\">From:</span> %s\n"
-#~ msgstr "<span weight=\"bold\">De:</span> %s\n"
-
-#~ msgid "<span weight=\"bold\">Subject:</span> %s\n"
-#~ msgstr "<span weight=\"bold\">Asunto:</span> %s\n"
-
-#~ msgid ""
-#~ "<span weight=\"bold\" size=\"larger\">You have mail!</span>\n"
-#~ "\n"
-#~ "%s%s%s%s"
-#~ msgstr ""
-#~ "<span weight=\"bold\" size=\"larger\">¡Tiene correo!</span>\n"
-#~ "\n"
-#~ "%s%s%s%s"
-
-#~ msgid "Pounce Action"
-#~ msgstr "Acción del aviso"
-
-#~ msgid "_Warn"
-#~ msgstr "_Avisar"
-
-#~ msgid "Jabber ID"
-#~ msgstr "ID Jabber"
-
-#~ msgid "Hide IP address"
-#~ msgstr "Ocultar dirección IP"
-
-#~ msgid "Web aware"
-#~ msgstr "Capacidad web"
-
-#~ msgid "GtkTreeView Expander Indentation"
-#~ msgstr "Muesca del expansor GtkTreeView"
-
-#~ msgid "Write a gtkrc file with these settings to %s"
-#~ msgstr "Escribir un archivo de configuración gtkrc con esas opciones a %s"
-
-#~ msgid ""
-#~ "%d buddy from group %s was not removed because its account was not logged "
-#~ "in.  This buddy and the group were not removed.\n"
-#~ msgid_plural ""
-#~ "%d buddies from group %s were not removed because their accounts were not "
-#~ "logged in.  These buddies and the group were not removed.\n"
-#~ msgstr[0] ""
-#~ "%d amigo del grupo %s no se ha eliminado porque su cuenta no estaba "
-#~ "conectada. Este amigo y sus grupos no han sido eliminados.\n"
-#~ msgstr[1] ""
-#~ "%d amigos del grupo %s no se han eliminado porque no sus cuentas estaban "
-#~ "conectadas. Esos amigos y sus grupos no han sido eliminados.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Alias:</b> %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Apodo:</b> %s"
-
-#~ msgid ""
-#~ "%s was disconnected due to an error. %s The account has been disabled. "
-#~ "Correct the error and reenable the account to connect."
-#~ msgstr ""
-#~ "%s fue desconectado debido a un error. %s La cuenta ha sido "
-#~ "deshabilitada. Corrija el error y rehabilite la cuenta para conectarse."
-
-#~ msgid "/Conversation/Clea_r"
-#~ msgstr "/Conversación/Limpiar"
-
-#~ msgid ""
-#~ "Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, "
-#~ "Jabber, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime, Napster, "
-#~ "Zephyr, and Gadu-Gadu all at once.  It is written using GTK+ and is "
-#~ "licensed under the GNU GPL.<BR><BR>"
-#~ msgstr ""
-#~ "Pidgin es un cliente modular de mensajería instantánea, capaz de utilizar "
-#~ "AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, Novell GroupWise, Lotus "
-#~ "Sametime, Napster, Zephyr y Gadu-Gadu al mismo tiempo.  Está escrito "
-#~ "usando Gtk+ y se licencia con la GPL.<BR><BR>"
-
-#~ msgid "Pa_ste as Plain Text"
-#~ msgstr "Pe_gar como texto sin formato"
-
-#~ msgid ""
-#~ "%s%s<span weight=\"bold\">Written by:</span>\t%s\n"
-#~ "<span weight=\"bold\">Web site:</span>\t\t%s\n"
-#~ "<span weight=\"bold\">File name:</span>\t%s"
-#~ msgstr ""
-#~ "%s%s<span weight=\"bold\">Escrito por:</span>\t%s\n"
-#~ "<span weight=\"bold\">Sitio web:</span>\t\t%s\n"
-#~ "<span weight=\"bold\">Nombre del archivo:</span>\t%s"
-
-#~ msgid "Permit"
-#~ msgstr "Permitir"
-
-#~ msgid ""
-#~ "Transfer of file %s timed out.\n"
-#~ " Try enabling proxy servers for file transfers in Tools->Preferences->AIM/"
-#~ "ICQ."
-#~ msgstr ""
-#~ "Expiró la transferencia del archivo %s.\n"
-#~ " Intente habilitar servidores proxy para las transferencias de ficheros "
-#~ "en Herramientas->Preferencias->AIM/ICQ."
-
-#~ msgid "Show Privacy Options..."
-#~ msgstr "Mostrar opciones de privacidad..."
-
-#~ msgid "Use AIM/ICQ proxy server (Slower/More Secure/Usually Works)"
-#~ msgstr ""
-#~ "Utilizar un servidor proxy de AIM/ICQ (Más lento, más seguro, y "
-#~ "habitualmente funciona)"
-
-#~ msgid "Connected to Sametime Community Server"
-#~ msgstr "Conectado al mismo servidor de comunidad «Sametime»"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Status</b>: %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Estado</b>: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Message</b>: %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Mensaje</b>: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Supports</b>: %s"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Soportados</b>: %s"
-
-#~ msgid "Active"
-#~ msgstr "Activo"
-
-#~ msgid "Select User to Add"
-#~ msgstr "Seleccionar el usuario a añadir"
-
-#~ msgid "Add User"
-#~ msgstr "Añadir usuario"
-
-#~ msgid "NotesBuddy encoding"
-#~ msgstr "Encodificación «NotesBuddy»"
-
-#~ msgid "Import..."
-#~ msgstr "Importar..."
-
-#~ msgid "More..."
-#~ msgstr "Más..."
-
-#~ msgid "Maybe the room is full?"
-#~ msgstr "¿Quizás la sala está llena?"
-
-#~ msgid "Hello!"
-#~ msgstr "¡Hola!"
-
-#~ msgid "second"
-#~ msgid_plural "seconds"
-#~ msgstr[0] "segundo"
-#~ msgstr[1] "segundos"
-
-#~ msgid "day"
-#~ msgid_plural "days"
-#~ msgstr[0] "día"
-#~ msgstr[1] "días"
-
-#~ msgid "hour"
-#~ msgid_plural "hours"
-#~ msgstr[0] "hora"
-#~ msgstr[1] "horas"
-
-#~ msgid "minute"
-#~ msgid_plural "minutes"
-#~ msgstr[0] "minuto"
-#~ msgstr[1] "minutos"
-
-#~ msgid "Hide Disconnect Errors"
-#~ msgstr "Ocultar errores de desconexión"
-
-#~ msgid "Hide Reconnecting Dialog"
-#~ msgstr "Ocultar dialogo de re-conexión"
-
-#~ msgid "When you are kicked offline, this reconnects you."
-#~ msgstr ""
-#~ "Cuando por alguna razón Ud. se le expulsa, esto lo vuelve a conectar."
-
-#~ msgid "Use last matching buddy"
-#~ msgstr "Usar el último amigo coincidente"
-
-#~ msgid ""
-#~ "The buddy with the lowest score is the buddy who will have priority in "
-#~ "the contact.\n"
-#~ "The default values (offline = 4, away = 2, and idle = 1) will use what "
-#~ "used to be\n"
-#~ "the built-in order: active, idle, away, away + idle, offline."
-#~ msgstr ""
-#~ "El amigo con la puntuación más baja es el que tendrá prioridad dentro del "
-#~ "contacto.\n"
-#~ "Los valores por defecto (desconectado = 4, no disponible = 2 e inactivo = "
-#~ "1)\n"
-#~ "se utilizarán para el orden previamente prefijado de activo, inactivo, no "
-#~ "disponible, no disponible e inactivo, desconectado."
-
-#~ msgid "Pidgin - Signed off"
-#~ msgstr "Pidgin - Desconectado"
-
-#~ msgid "Pidgin - Away"
-#~ msgstr "Pidgin - Ausente"
-
-#~ msgid ""
-#~ "When a new conversation is opened this plugin will insert the last "
-#~ "conversation into the current conversation.\n"
-#~ "\n"
-#~ "The history plugin requires logging be enabled. Logging can be enabled "
-#~ "from Tools -> Preferences -> Logging. Enabling logs for instant messages "
-#~ "and/or chats will activate history for the same conversation type(s)."
-#~ msgstr ""
-#~ "Este complemento insertará la última conversación en la conversación "
-#~ "actual cuando se establezca una nueva conversación.\n"
-#~ "\n"
-#~ "El complemento de histórico necesita que esté activo el registro. Puede "
-#~ "activar el registro de Herramientas -> Preferencias -> Registro. Si "
-#~ "activa el registro para mensajes instantáneos y/o chats se activará el "
-#~ "histórico para el mismo tipo de conversación."
-
-#~ msgid ""
-#~ "\n"
-#~ "\n"
-#~ "Do you wish to add him or her to your buddy list?"
-#~ msgstr ""
-#~ "\n"
-#~ "\n"
-#~ "¿Desea añadirlo/a a su lista de amigos?"
-
-#~ msgid "_Alias Buddy..."
-#~ msgstr "_Apodo de amigo..."
-
-#~ msgid "Alias Contact..."
-#~ msgstr "Apodo para contacto..."
-
-#~ msgid "/Tools/Account Ac_tions"
-#~ msgstr "/Herramientas/Acc_iones"
-
-#~ msgid "/Tools/A_ccounts"
-#~ msgstr "/Herramientas/_Cuentas"
-
-#~ msgid "/Tools/Account Actions"
-#~ msgstr "/Herramientas/Acciones de cuentas"
-
-#~ msgid ""
-#~ "Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, "
-#~ "Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu "
-#~ "all at once.  It is written using GTK+ and is licensed under the GNU GPL."
-#~ "<BR><BR>"
-#~ msgstr ""
-#~ "Pidgin es un cliente modular de mensajería instantánea, capaz de utilizar "
-#~ "AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, "
-#~ "Zephyr y Gadu-Gadu al mismo tiempo.  Está escrito usando Gtk+ y está "
-#~ "licencia bajo la GPL de GNU.<BR><BR>"
-
-#~ msgid "Active Developers"
-#~ msgstr "Desarrolladores en activo"
-
-#~ msgid "_Keep the dialog open"
-#~ msgstr "Mantener el diálogo _abierto"
-
-#~ msgid "A_way"
-#~ msgstr "_Ausente"
-
-#~ msgid "_Idle"
-#~ msgstr "_Inactivo"
-
-# Examinar puede ser también válido, comprobar, jfs.
-#~ msgid "Bro_wse..."
-#~ msgstr "_Navegar..."
-
-#~ msgid "Sav_e this pounce after activation"
-#~ msgstr "_Guardar este aviso tras la activación"
-
-#~ msgid "Remove Buddy Pounce"
-#~ msgstr "Quitar aviso de amigo"
-
-#~ msgid "_Queue new messages when away"
-#~ msgstr "En_colar mensajes nuevos durante las ausencias"
-
-#~ msgid "Could't open file"
-#~ msgstr "No se pudo abrir el archivo"
-
-#~ msgid "Token Error: Unable to fetch the token.\n"
-#~ msgstr "Error en el token: no se pudo obtener un token.\n"
-
-#~ msgid "Change password"
-#~ msgstr "Cambiar contraseña"
-
-#~ msgid "Error processing event or response (%s)."
-#~ msgstr "Se produjo un error al procesar un evento o una respuesta (%s)."
-
-#~ msgid "Unable to set AIM away message."
-#~ msgstr "No se pudo establecer el mensaje de ausencia AIM."
-
-#~ msgid ""
-#~ "You have probably requested to set your away message before the login "
-#~ "procedure completed.  You remain in a \"present\" state; try setting it "
-#~ "again when you are fully connected."
-#~ msgstr ""
-#~ "Usted probablemente solicitó establecer su mensaje de ausencia antes de "
-#~ "que finalice el proceso de conexión.  Usted quedará en un estado "
-#~ "«presente», intente volver a aplicarlo cuando esté conectado por completo."
-
-#~ msgid ""
-#~ "Could not add the buddy %s because every simple user has to start with "
-#~ "'sip:'."
-#~ msgstr ""
-#~ "No se pudo añadir al amigo %s porque cada usuario simple tiene que "
-#~ "empezar con 'sip:'."
-
-#~ msgid "Thomas Butter <butter@uni-mannheim.de>"
-#~ msgstr "Thomas Butter <butter@uni-mannheim.de>"
-
-#~ msgid "Verify all IM message signatures"
-#~ msgstr "Verificar todas las firmas de los mensajes MI"
-
-#~ msgid "Digitally sign all channel messages"
-#~ msgstr "Firmar digitalmente todos los mensajes del canal"
-
-#~ msgid "Verify all channel message signatures"
-#~ msgstr "Verificar todas las firmas de los mensajes de los canales"
-
-#~ msgid "Stealth"
-#~ msgstr "Sigilo"
-
-#~ msgid "(%d message)"
-#~ msgid_plural "(%d messages)"
-#~ msgstr[0] "(%d mensaje)"
-#~ msgstr[1] "(%d mensajes)"
-
-#~ msgid "Default auto-away"
-#~ msgstr "Auto-ausencia por omisión"
-
-#~ msgid "Show more buddy details"
-#~ msgstr "Mostrar detalles del amigo"
-
-#~ msgid "Gnome Default"
-#~ msgstr "Valores por omisión de Gnome"
-
-#~ msgid "Away m_essage:"
-#~ msgstr "_Mensaje de ausencia:"
-
-#~ msgid "Restore Away State On Reconnect"
-#~ msgstr "Restaurar el estado de ausencia al reconectarse"
-
-#~ msgid "Mail Server"
-#~ msgstr "Servidor de correo"
-
-#~ msgid "%s (%d new/%d total)"
-#~ msgstr "%s (%d nuevos/%d en total)"
-
-#~ msgid "Check Mail"
-#~ msgstr "Comprobar correo"
-
-#~ msgid "Check email every X seconds.\n"
-#~ msgstr "Comprobar correo cada X segundos.\n"
-
-#~ msgid "Auto-login"
-#~ msgstr "Conectarse automáticamente"
-
-#~ msgid "Signoff"
-#~ msgstr "Desconectar"
-
-#~ msgid "_Hide new messages until tray icon is clicked"
-#~ msgstr ""
-#~ "_Ocultar mensajes nuevos hasta que se pulsa en el icono del área de "
-#~ "notificación del sistema"
-
-#~ msgid "Not connected to AIM"
-#~ msgstr "No está conectado a AIM"
-
-#~ msgid "No screenname given."
-#~ msgstr "No se indicó el nombre de usuario."
-
-#~ msgid "No roomname given."
-#~ msgstr "No se indicó el nombre de la sala."
-
-#~ msgid "Invalid AIM URI"
-#~ msgstr "URI de AIM inválido"
-
-#~ msgid ""
-#~ "Failed to assign %s to a socket:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "No se pudo asignar %s a un socket\n"
-#~ "%s"
-
-#~ msgid "Remote Control"
-#~ msgstr "Control remoto"
-
-#~ msgid "Provides remote control for Pidgin applications."
-#~ msgstr "Permite el control remoto de las aplicaciones de Pidgin."
-
-#~ msgid ""
-#~ "Gives Pidgin the ability to be remote-controlled through third-party "
-#~ "applications or through the Pidgin-remote tool."
-#~ msgstr ""
-#~ "Permite que Pidgin sea controlado de forma remota a través de "
-#~ "aplicaciones de terceros o de la herramienta de control remoto de Pidgin."
-
-#~ msgid "Docked _Buddy List is always on top"
-#~ msgstr "La lista de _amigos apilada está siempre encima del resto"
-
-#~ msgid "Away!"
-#~ msgstr "¡Ausente!"
-
-#~ msgid "Edit This Message"
-#~ msgstr "Editar este mensaje"
-
-#~ msgid "I'm Back!"
-#~ msgstr "¡Ya he vuelto!"
-
-#~ msgid "Are you sure you want to remove the away message \"%s\"?"
-#~ msgstr "¿Seguro que quiere borrar el mensaje de ausencia \"%s\"?"
-
-#~ msgid "Remove Away Message"
-#~ msgstr "Eliminar mensaje de ausencia"
-
-#~ msgid "Set All Away"
-#~ msgstr "Ausente en todas las cuentas"
-
-#~ msgid "You cannot save an away message with a blank title"
-#~ msgstr "No se puede guardar un mensaje de ausencia sin título"
-
-#~ msgid ""
-#~ "Please give the message a title, or choose \"Use\" to use without saving."
-#~ msgstr ""
-#~ "Por favor, dele al mensaje un título, o elija «Usar» para usarlo sin "
-#~ "grabarlo."
-
-#~ msgid "You cannot create an empty away message"
-#~ msgstr "No se puede crear un mensaje de ausencia vacío"
-
-#~ msgid "Away title: "
-#~ msgstr "Título del mensaje de ausencia: "
-
-#~ msgid "Size of the expander arrow"
-#~ msgstr "Tamaño de la flecha de expansión"
-
-#~ msgid ""
-#~ "Usage: %s command [OPTIONS] [URI]\n"
-#~ "\n"
-#~ "    COMMANDS:\n"
-#~ "       uri                      Handle AIM: URI\n"
-#~ "       away                     Popup the away dialog with the default "
-#~ "message\n"
-#~ "       back                     Remove the away dialog\n"
-#~ "       quit                     Close running copy of Pidgin\n"
-#~ "\n"
-#~ "    OPTIONS:\n"
-#~ "       -h, --help [command]     Show help for command\n"
-#~ msgstr ""
-#~ "Uso: %s orden [OPCIONES] [URI]\n"
-#~ "\n"
-#~ "    ÓRDENES:\n"
-#~ "       uri                      Usar URI de AIM\n"
-#~ "       away                     Activa el mensaje de ausencia con el "
-#~ "valor por omisión\n"
-#~ "       back                     Elimina el mensaje de ausencia\n"
-#~ "       quit                     Cerrar copia de Pidgin en ejecución\n"
-#~ "\n"
-#~ "    OPCIONES:\n"
-#~ "       -h, --help [orden]       Mostrar ayuda para la orden\n"
-
-#~ msgid ""
-#~ "Pidgin not running (on session 0)\n"
-#~ "Is the \"Remote Control\" plugin loaded?\n"
-#~ msgstr ""
-#~ "Pidgin no está ejecutándose (en sesión 0)\n"
-#~ "¿Está instalado el complemento de «Control remoto»?\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Using AIM: URIs:\n"
-#~ "Sending an IM to a screen name:\n"
-#~ "\tPidgin-remote uri 'aim:goim?screenname=Penguin&message=hello+world'\n"
-#~ "In this case, 'Penguin' is the screen name we wish to IM, and 'hello "
-#~ "world'\n"
-#~ "is the message to be sent.  '+' must be used in place of spaces.\n"
-#~ "Please note the quoting used above - if you run this from a shell the "
-#~ "'&'\n"
-#~ "needs to be escaped, or the command will stop at that point.\n"
-#~ "Also,the following will just open a conversation window to a screen "
-#~ "name,\n"
-#~ "with no message:\n"
-#~ "\tPidgin-remote uri 'aim:goim?screenname=Penguin'\n"
-#~ "\n"
-#~ "Joining a chat:\n"
-#~ "\tPidgin-remote uri 'aim:gochat?roomname=PenguinLounge'\n"
-#~ "...joins the 'PenguinLounge' chat room.\n"
-#~ "\n"
-#~ "Adding a buddy to your buddy list:\n"
-#~ "\tPidgin-remote uri 'aim:addbuddy?screenname=Penguin'\n"
-#~ "...prompts you to add 'Penguin' to your buddy list.\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Usando AIM: URIs:\n"
-#~ "Enviar un MI a un nombre de usuario:\n"
-#~ "\tPidgin-remote uri 'aim:goim?screenname=Pingüino&message=hola+mundo'\n"
-#~ "En este caso, «Pingüino» es el nombre de usuario al que se le quiere\n"
-#~ "enviar un MI, y «hola mundo» es el mensaje a enviar. Se debe utilizar '+'\n"
-#~ "en lugar de los espacios en blanco.\n"
-#~ "Por favor, tenga en cuenta el entrecomillado utilizado arriba. Si "
-#~ "ejecuta\n"
-#~ "esto dentro de una shell debe escribir una '\\' delante del carácter '&' "
-#~ "o\n"
-#~ "la orden se parará en ese punto.\n"
-#~ "Además, la siguiente orden sólo abrirá una ventana de conversación a un\n"
-#~ "nombre de usuario sin ningún mensaje:\n"
-#~ "\tPidgin-remote uri aim:goim?screename=Pingüino\n"
-#~ "\n"
-#~ "Unirse a un chat:\n"
-#~ "\tPidgin-remote uri aim:gochat?roomname=SalaEstardePingüinos\n"
-#~ "... se une a la sala de chat «SalaEstardePingüinos»\n"
-#~ "\n"
-#~ "Añadir un amigo a la lista de amigos:\n"
-#~ "\tPidgin-remote uri aim:addbuddy?screename=Pingüino\n"
-#~ "... le pide que añada a «Pingüino» a su lista de amigos.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Close running copy of Pidgin\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Cerrar copia en ejecución de Pidgin\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Mark all accounts as \"away\" with the default message.\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Marcar todas las cuentas como «ausentes» con el mensaje por omisión.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Set all accounts as not away.\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Establecer como activas todas las cuentas.\n"
-
-#~ msgid "/Tools/Pl_ugin Actions"
-#~ msgstr "/Herramientas/Acciones del com_plemento"
-
-#~ msgid "Rename Group"
-#~ msgstr "Renombrar grupo"
-
-#~ msgid "New group name"
-#~ msgstr "Nuevo nombre de grupo"
-
-#~ msgid "%d%%"
-#~ msgstr "%d%%"
-
-#~ msgid ""
-#~ "\n"
-#~ "<b>Account:</b>"
-#~ msgstr ""
-#~ "\n"
-#~ "<b>Cuenta:</b>"
-
-#~ msgid "Warned (%d%%) "
-#~ msgstr "Avisado (%d%%) "
-
-#~ msgid "/Tools/Away"
-#~ msgstr "/Herramientas/Ausencia"
-
-#~ msgid "Send a message to the selected buddy"
-#~ msgstr "Enviar un mensaje al amigo seleccionado"
-
-#~ msgid "_Chat"
-#~ msgstr "_Charlar"
-
-#~ msgid "Join a chat room"
-#~ msgstr "Unirse a una sala de chat"
-
-#~ msgid "_Away"
-#~ msgstr "_Ausente"
-
-#~ msgid "Set an away message"
-#~ msgstr "Poner un mensaje de ausencia"
-
-#~ msgid "Done."
-#~ msgstr "Hecho."
-
-#~ msgid "Signon: "
-#~ msgstr "Conectado: "
-
-#~ msgid "Signon"
-#~ msgstr "Conectar"
-
-#~ msgid "Cancel All"
-#~ msgstr "Cancelar todo"
-
-#~ msgid "Reason Unknown."
-#~ msgstr "Razón desconocida."
-
-#~ msgid "Get Away Msg"
-#~ msgstr "Mensaje de ausencia"
-
-#~ msgid "/Conversation/_Warn..."
-#~ msgstr "/Conversación/Avi_sar..."
-
-#~ msgid "/Conversation/A_lias..."
-#~ msgstr "/Conversación/A_podo..."
-
-#~ msgid "/Options/Show T_imestamps"
-#~ msgstr "/Opciones/Mostrar _marcas de tiempo"
-
-#~ msgid "/Conversation/Warn..."
-#~ msgstr "/Conversación/Avisar..."
-
-#~ msgid "Warn the user"
-#~ msgstr "Avisar al usuario"
-
-#~ msgid "Send a file to the user"
-#~ msgstr "Enviar un archivo al usuario"
-
-#~ msgid "Invite a user"
-#~ msgstr "Invitar al usuario"
-
-#~ msgid "Remove the chat from your buddy list"
-#~ msgstr "Eliminar el chat de su lista de amigos"
-
-#~ msgid "<main>/Conversation/Close"
-#~ msgstr "<main>/Conversación/_Cerrar"
-
-#~ msgid "former lead developer"
-#~ msgstr "desarrollador principal previo"
-
-#~ msgid "former maintainer"
-#~ msgstr "desarrollador previo"
-
-#~ msgid "Azerbaijani"
-#~ msgstr "Azerbayano"
-
-#~ msgid "Vladimira Girginova and Vladimir (Kaladan) Petkov"
-#~ msgstr "Vladimira Girginova y Vladimir (Kaladan) Petkov"
-
-#~ msgid "Burmese"
-#~ msgstr "Birmano"
-
-#~ msgid "Ukrainian"
-#~ msgstr "Ucraniano"
-
-#~ msgid "Chinese"
-#~ msgstr "Chino"
-
-#~ msgid "_Screen name"
-#~ msgstr "_Nombre de usuario"
-
-#~ msgid "Warn User"
-#~ msgstr "Avisar usuario"
-
-#~ msgid ""
-#~ "<span weight=\"bold\" size=\"larger\">Warn %s?</span>\n"
-#~ "\n"
-#~ "This will increase %s's warning level and he or she will be subject to "
-#~ "harsher rate limiting.\n"
-#~ msgstr ""
-#~ "<span weight=\"bold\" size=\"larger\">¿Avisar a %s?</span>\n"
-#~ "\n"
-#~ "Ésto incrementará el nivel de aviso de %s y él o ella estará sujeto a un "
-#~ "límite más duro en su tasa de envío de mensajes.\n"
-
-#~ msgid "Warn _anonymously?"
-#~ msgstr "¿Advertir _anónimamente?"
-
-#~ msgid "<b>Anonymous warnings are less severe.</b>"
-#~ msgstr "<b>Las advertencias anónimas son menos duras.</b>"
-
-#~ msgid "Show transfer details"
-#~ msgstr "Mostrar detalles de la transferencia"
-
-#~ msgid "D_isplay remote nicknames if no alias is set"
-#~ msgstr "_Mostrar los apodos remotos si no se ha establecido un apodo"
-
-#~ msgid "Show _timestamp on messages"
-#~ msgstr "Mostrar la _hora en los mensajes"
-
-#~ msgid "_Send default formatting with outgoing messages"
-#~ msgstr "_Enviar formato por omisión en los mensajes salientes"
-
-#~ msgid "Enter _sends message"
-#~ msgstr "«Enter» _envía el mensaje"
-
-#~ msgid "Window Closing"
-#~ msgstr "Cierre de Ventanas"
-
-#~ msgid "_Escape closes window"
-#~ msgstr "«E_scape» cierra la ventana"
-
-#~ msgid "Insertions"
-#~ msgstr "Inserciones"
-
-#~ msgid "Control-{B/I/U} changes _formatting"
-#~ msgstr "«Control-{B/I/U}» introduce _formatos"
-
-#~ msgid "Control-(number) _inserts smileys"
-#~ msgstr "«Control-(número)» _inserta emoticonos"
-
-#~ msgid "Show _buttons as:"
-#~ msgstr "Mostrar los _botones como:"
-
-#~ msgid "Text"
-#~ msgstr "Texto"
-
-#~ msgid "Pictures and text"
-#~ msgstr "Imágenes y texto"
-
-#~ msgid "_Raise window on events"
-#~ msgstr "_Alzar ventanas al recibir un evento"
-
-#~ msgid "Show _warning levels"
-#~ msgstr "Mostrar niveles de _aviso"
-
-#~ msgid "Enable \"_slash\" commands"
-#~ msgstr "Activar órdenes \"_barra\""
-
-#~ msgid "Show _formatting toolbar"
-#~ msgstr "Mostrar barra de _formato"
-
-#~ msgid "_Raise IM window on events"
-#~ msgstr "_Alzar ventanas de MI al recibir un evento"
-
-#~ msgid "Raise chat _window on events"
-#~ msgstr "Alzar _ventanas de chat al recibir un evento"
-
-#~ msgid "Use _multi-colored screen names in chats"
-#~ msgstr "Utilizar nombres de usuario _multicolor en chats"
-
-#~ msgid "Tab p_lacement:"
-#~ msgstr "_Ubicación de las solapas:"
-
-#~ msgid "New conversation _placement:"
-#~ msgstr "U_bicación de las nuevas conversaciones:"
-
-#~ msgid "System Logs"
-#~ msgstr "Registros del sistema"
-
-#~ msgid "_Enable system log"
-#~ msgstr "_Habilitar registro del sistema"
-
-#~ msgid "Log when buddies _sign on/sign off"
-#~ msgstr "Registrar cuándo se _conectan/desconectan los amigos"
-
-#~ msgid "Log when buddies become _idle/un-idle"
-#~ msgstr "Registrar cuándo los amigos están _activos/inactivos"
-
-#~ msgid "Log when buddies go away/come _back"
-#~ msgstr "Registrar cuándo los amigos se ausentan/_regresan"
-
-#~ msgid "Log your _own signons/idleness/awayness"
-#~ msgstr "Registrar sus _propias conexiones/inactividades/ausencias"
-
-#~ msgid "Idle _time reporting:"
-#~ msgstr "Informe de _tiempo de inactividad:"
-
-#~ msgid "Pidgin usage"
-#~ msgstr "Uso de Pidgin"
-
-#~ msgid "X usage"
-#~ msgstr "Uso de X"
-
-#~ msgid "Windows usage"
-#~ msgstr "Uso de Windows"
-
-#~ msgid ""
-#~ "<span size=\"larger\">%s %s</span>\n"
-#~ "\n"
-#~ "<span weight=\"bold\">Written by:</span>  %s\n"
-#~ "<span weight=\"bold\">URL:</span>  %s\n"
-#~ "<span weight=\"bold\">File name:</span>  %s"
-#~ msgstr ""
-#~ "<span size=\"larger\">%s %s</span>\n"
-#~ "\n"
-#~ "<span weight=\"bold\">Escrito por:</span>  %s\n"
-#~ "<span weight=\"bold\">URL:</span>  %s\n"
-#~ "<span weight=\"bold\">Nombre del archivo:</span>  %s"
-
-#~ msgid "Summary"
-#~ msgstr "Resumen"
-
-#~ msgid "Please create an account."
-#~ msgstr "Por favor, cree una cuenta."
-
-#~ msgid "Login"
-#~ msgstr "Conectar"
-
-#~ msgid "<b>_Account:</b>"
-#~ msgstr "<b>_Cuenta:</b>"
-
-#~ msgid "A_ccounts"
-#~ msgstr "_Cuentas"
-
-#~ msgid "P_references"
-#~ msgstr "_Preferencias"
-
-#~ msgid "_Sign on"
-#~ msgstr "Conectar_se"
-
-#~ msgid ""
-#~ "Pidgin %s\n"
-#~ "Usage: %s [OPTION]...\n"
-#~ "\n"
-#~ "  -a, --acct          display account editor window\n"
-#~ "  -w, --away[=MESG]   make away on signon (optional argument MESG "
-#~ "specifies\n"
-#~ "                      name of away message to use)\n"
-#~ "  -l, --login[=NAME]  automatically login (optional argument NAME "
-#~ "specifies\n"
-#~ "                      account(s) to use, seperated by commas)\n"
-#~ "  -n, --loginwin      don't automatically login; show login window\n"
-#~ "  -u, --user=NAME     use account NAME\n"
-#~ "  -c, --config=DIR    use DIR for config files\n"
-#~ "  -d, --debug         print debugging messages to stdout\n"
-#~ "  -v, --version       display the current version and exit\n"
-#~ "  -h, --help          display this help and exit\n"
-#~ msgstr ""
-#~ "Pidgin %s\n"
-#~ "Modo de uso: %s [OPCIÓN]...\n"
-#~ "\n"
-#~ "  -a, --acct          muestra la ventana de edición de cuentas\n"
-#~ "  -w, --away[=MENS]   marca como no disponible al conectar (el valor "
-#~ "opcional\n"
-#~ "                      MENS especifica el nombre del mensaje de no "
-#~ "disponibilidad\n"
-#~ "                      a usar)\n"
-#~ "  -l, --login[=NOMBR] conexión automática (el argumento opcional NOMBRE "
-#~ "especifica \n"
-#~ "                      la/s cuenta/s a utilizar, separadas por comas)\n"
-#~ "  -n, --loginwin      no conectarse automáticamente, mostrar ventana de "
-#~ "conexión\n"
-#~ "  -u, --user=NOMBRE   utilizar cuenta NOMBRE\n"
-#~ "  -c, --config=DIR    utilizar DIR para los archivos de configuración\n"
-#~ "  -d, --debug         mostrar mensajes de depuración en salida estándar\n"
-#~ "  -v, --version       mostrar la versión actual y salir\n"
-#~ "  -h, --help          mostrar esta ayuda y salir\n"
-
-#~ msgid "Unable to load preferences"
-#~ msgstr "No se pudieron cargar las preferencias"
-
-#~ msgid ""
-#~ "Pidgin was not able to load your preferences because they are stored in "
-#~ "an old format that is no longer used.  Please reconfigure your settings "
-#~ "using the Preferences window."
-#~ msgstr ""
-#~ "Pidgin no pudo cargar sus preferencias porque están almacenadas en un "
-#~ "formato antiguo que ya no se utiliza. Por favor, reconfigure sus "
-#~ "preferencias utilizando la ventana de Preferencias."
-
-#~ msgid "Slightly less boring default"
-#~ msgstr "Opción por omisión un poco menos aburrida"
-
-#~ msgid "Available for friends only"
-#~ msgstr "Disponible sólo para los amigos"
-
-#~ msgid "Away for friends only"
-#~ msgstr "Ausente sólo para los amigos"
-
-#~ msgid "Invisible for friends only"
-#~ msgstr "Invisible sólo para los amigos"
-
-#~ msgid "Error while writing to socket."
-#~ msgstr "Error al escribir al socket."
-
-#~ msgid "Authentication failed."
-#~ msgstr "Falló la autenticación."
-
-#~ msgid "Unknown Error Code."
-#~ msgstr "Código de error desconocido."
-
-#~ msgid "Balancer handshake"
-#~ msgstr "Negociación del balanceador"
-
-#~ msgid "Reading server key"
-#~ msgstr "Leyendo la clave del servidor"
-
-#~ msgid "Exchanging key hash"
-#~ msgstr "Intercambiando el hash de la clave"
-
-#~ msgid "Critical error in GG library\n"
-#~ msgstr "Error crítico en la biblioteca GG\n"
-
-#~ msgid "Unable to ping server"
-#~ msgstr "No se pudo hacer ping al servidor"
-
-#~ msgid "Looking up GG server"
-#~ msgstr "Buscando servidor GG"
-
-#~ msgid "Invalid Gadu-Gadu UIN specified"
-#~ msgstr "El UIN Gadu-Gadu especificado es inválido"
-
-#~ msgid "You are trying to send a message to an invalid Gadu-Gadu UIN."
-#~ msgstr "Está intentando enviar un mensaje a un UIN Gadu-Gadu inválido."
-
-#~ msgid "Couldn't get search results"
-#~ msgstr "No se pudieron obtener los resultados de la búsqueda"
-
-#~ msgid "Gadu-Gadu Search Engine"
-#~ msgstr "Motor de búsquedas de Gadu-Gadu"
-
-#~ msgid "Sex"
-#~ msgstr "Sexo"
-
-#~ msgid "Couldn't Import Buddy List from Server"
-#~ msgstr "No se pudo importar la lista de amigos del servidor"
-
-#~ msgid "Buddy List successfully transferred to Gadu-Gadu server"
-#~ msgstr "Se envío la lista de amigos correctamente al servidor Gadu-Gadu"
-
-#~ msgid "Couldn't transfer Buddy List to Gadu-Gadu server"
-#~ msgstr "No se pudo enviar la lista de amigos al servidor Gadu-Gadu"
-
-#~ msgid "Buddy List successfully deleted from Gadu-Gadu server"
-#~ msgstr "La lista de amigos se borró correctamente del servidor Gadu-Gadu"
-
-#~ msgid "Couldn't delete Buddy List from Gadu-Gadu server"
-#~ msgstr "No se pudo borrar la lista de amigos del servidor Gadu-Gadu"
-
-#~ msgid "Password couldn't be changed"
-#~ msgstr "No se pudo cambiar la contraseña"
-
-#~ msgid "Error communicating with Gadu-Gadu server"
-#~ msgstr "Error comunicándose con el servidor Gadu-Gadu"
-
-#~ msgid ""
-#~ "Pidgin was unable to complete your request due to a problem communicating "
-#~ "with the Gadu-Gadu HTTP server.  Please try again later."
-#~ msgstr ""
-#~ "Pidgin no pudo completar su petición debido a problemas al comunicarse "
-#~ "con el servidor HTTP de Gadu-Gadu.  Vuelva a intentarlo más tarde."
-
-#~ msgid "Unable to import Gadu-Gadu buddy list"
-#~ msgstr "No se pudo importar la lista de amigos de Gadu-Gadu"
-
-#~ msgid ""
-#~ "Pidgin was unable to connect to the Gadu-Gadu buddy list server.  Please "
-#~ "try again later."
-#~ msgstr ""
-#~ "Pidgin no pudo conectarse con el servidor de listas de amigos Gadu-Gadu.  "
-#~ "Por favor inténtelo más tarde."
-
-#~ msgid "Unable to delete Gadu-Gadu buddy list"
-#~ msgstr "No se pudo borrar la lista de amigos Gadu-Gadu"
-
-#~ msgid "Unable to access directory"
-#~ msgstr "No se pudo acceder al directorio"
-
-#~ msgid ""
-#~ "Pidgin was unable to search the Directory because it was unable to "
-#~ "connect to the directory server.  Please try again later."
-#~ msgstr ""
-#~ "Pidgin no pudo buscar en el directorio porque no pudo conectarse con el "
-#~ "servidor de directorio. Por favor, inténtelo más tarde."
-
-#~ msgid ""
-#~ "Pidgin was unable to change your password due to an error connecting to "
-#~ "the Gadu-Gadu server.  Please try again later."
-#~ msgstr ""
-#~ "Pidgin no pudo cambiar su contraseña porque no pudo conectarse con el "
-#~ "servidor Gadu-Gadu. Por favor, inténtelo más tarde."
-
-#~ msgid "Unable to access user profile."
-#~ msgstr "No se pudo acceder al perfil del usuario."
-
-#~ msgid ""
-#~ "Pidgin was unable to access this user's profile due to an error "
-#~ "connecting to the directory server.  Please try again later."
-#~ msgstr ""
-#~ "Pidgin no pudo acceder al perfil de este usuario debido a un error al "
-#~ "intentar conectarse al servidor de directorio. Por favor, inténtelo de "
-#~ "nuevo más tarde."
-
-#~ msgid "The user %s (%s%s%s%s%s) wants you to authorize them."
-#~ msgstr "El usuario %s (%s%s%s%s%s) quiere que los autorice."
-
-#~ msgid "Send message through server"
-#~ msgstr "Enviar mensajes a través del servidor"
-
-#~ msgid "Nick:"
-#~ msgstr "Apodo:"
-
-#~ msgid "File Transfer Aborted"
-#~ msgstr "Transferencia de archivo abortada"
-
-#~ msgid "Buddy Information for %s"
-#~ msgstr "Información de amigo para %s"
-
-#~ msgid "Invalid nickname '%s'"
-#~ msgstr "Apodo '%s' inválido"
-
-#~ msgid "Jabber Profile"
-#~ msgstr "Perfil Jabber"
-
-#~ msgid "Roomlist Error"
-#~ msgstr "Error en la lista de salas"
-
-#~ msgid "The user %s wants to add you to their buddy list."
-#~ msgstr "El usuario %s quiere añadirle a su lista de amigos."
-
-#~ msgid "Display conversation closed notices"
-#~ msgstr "Mostrar los avisos de cierre de conversación"
-
-#~ msgid "The conversation has become inactive and timed out."
-#~ msgstr "La conversación ha pasado a ser inactiva y se ha desconectado."
-
-#~ msgid ""
-#~ "You were disconnected from the server, because you logged on from a "
-#~ "different location"
-#~ msgstr ""
-#~ "Ha sido desconectado del servidor porque se conectó desde una ubicación "
-#~ "distinta"
-
-#~ msgid "User Properties"
-#~ msgstr "Propiedades del usuario"
-
-#~ msgid "Transfer of file %s timed out."
-#~ msgstr "Expiró la transferencia de %s."
-
-#~ msgid ""
-#~ "You have been disconnected because you have signed on with this screen "
-#~ "name at another location."
-#~ msgstr ""
-#~ "Ha sido desconectado porque se ha conectado con el mismo nombre de "
-#~ "usuario desde otra ubicación."
-
-#~ msgid "Not specified"
-#~ msgstr "No especificado"
-
-#~ msgid "ICQ Info for %s"
-#~ msgstr "Información ICQ sobre %s:"
-
-#~ msgid ""
-#~ "Error 0x%04x: Unable to format screen name because the requested screen "
-#~ "name ends in a space."
-#~ msgstr ""
-#~ "Error 0x%04x: No se puede dar formato al nombre de usuario porque el "
-#~ "nombre de usuario solicitado termina con un espacio."
-
-#~ msgid "I'm doing work and hoping for a distraction--IM me!"
-#~ msgstr "Estoy trabajando y deseando ser distraído -- ¡envíame un MI!"
-
-#~ msgid "Set Available Message..."
-#~ msgstr "Establecer su mensaje de disponibilidad..."
-
-#~ msgid "Failed to leave channel"
-#~ msgstr "No se pudo abandonar el canal"
-
-#~ msgid "Basic Profile"
-#~ msgstr "Perfil básico"
-
-#~ msgid "Instant Messagers"
-#~ msgstr "Mensajeros instantáneos"
-
-#~ msgid "AIM"
-#~ msgstr "AIM"
-
-#~ msgid "Yahoo"
-#~ msgstr "Yahoo"
-
-#~ msgid "I'm From"
-#~ msgstr "Soy de"
-
-#~ msgid "Set your Trepia profile data."
-#~ msgstr "Introduzca los datos de su perfil Trepia."
-
-#~ msgid "Visit Homepage"
-#~ msgstr "Visitar página personal"
-
-#~ msgid "Local Users"
-#~ msgstr "Usuarios locales"
-
-#~ msgid "Trepia Protocol Plugin"
-#~ msgstr "Complemento de protocolo Trepia"
-
-#~ msgid ""
-#~ "You have been logged off as you have logged in on a different machine or "
-#~ "device."
-#~ msgstr ""
-#~ "Ha sido desconectado dado que se ha conectado en otro equipo o "
-#~ "dispositivo."
-
-#~ msgid "Please enter your password"
-#~ msgstr "Por favor, indique su contraseña"
-
-#~ msgid "%s logged in."
-#~ msgstr "%s se ha conectado."
-
-#~ msgid ""
-#~ "%s has just been warned by %s.\n"
-#~ "Your new warning level is %d%%"
-#~ msgstr ""
-#~ "%s ha sido avisado por %s.\n"
-#~ "Su nuevo nivel de advertencias es %d%%"
-
-#~ msgid "an anonymous person"
-#~ msgstr "una persona anónima"
-
-# 'Buddy chat room' es una sala de chat en la que se habla
-# con amigos
-#~ msgid ""
-#~ "%s has invited %s to the chat room %s:\n"
-#~ "<b>%s</b>"
-#~ msgstr ""
-#~ "'%s ha invitado a %s a la sala de chat %s:\n"
-#~ "<b>%s</b>"
-
-#~ msgid "Sorry, I ran out for a bit!"
-#~ msgstr "Lo siento, ya hace un rato que me he ido"
-
-#~ msgid ""
-#~ "Unable to guess the image type based on the file extension supplied.  "
-#~ "Defaulting to PNG."
-#~ msgstr ""
-#~ "Pidgin no ha podido deducir el tipo de imagen a partir de la extensión "
-#~ "del archivo. Tomando PNG por omisión."
-
-#~ msgid "SILC Public Key"
-#~ msgstr "Clave pública SILC"
-
-#~ msgid "SILC Private Key"
-#~ msgstr "Clave privada SILC"
-
-#~ msgid "Myanmar"
-#~ msgstr "Myanmar"
-
-#~ msgid "Unknown error when attempting to authorize with MSN login server."
-#~ msgstr ""
-#~ "Error desconocido cuando se intentaba obtener autorización del servidor "
-#~ "de registro MSN."
-
-#~ msgid "Error writing to %s server"
-#~ msgstr "Error al leer del servidor %s"
-
-#~ msgid "Error reading from %s server"
-#~ msgstr "Error al leer del servidor %s"
-
-#~ msgid "Received HTTP error. Please report this."
-#~ msgstr "Se recibió un error HTTP. Por favor, informe de ésto."
-
-#~ msgid "Message could not be sent for an unkwnown reason"
-#~ msgstr "No se ha podido enviar el mensaje por motivos desconocidos."
-
-#~ msgid ""
-#~ "Pidgin cannot send files over Yahoo! that are bigger than %d megabytes (%"
-#~ "d bytes)."
-#~ msgstr ""
-#~ "Pidgin no puede enviar archivos más grandes que de %d megabytes (%d "
-#~ "bytes) a través de Yahoo!"
-
-#~ msgid ""
-#~ "(There was an error converting this message.  Check the 'Encoding' option "
-#~ "in the Account Editor)"
-#~ msgstr ""
-#~ "(Hubo un error convirtiendo este mensaje.  Verifique la opción "
-#~ "«Codificación» en el Editor de cuentas)"
-
-#~ msgid "MSN error for account %s"
-#~ msgstr "Error MSN para la cuenta %s"
-
-#~ msgid "Moving Pidgin Settings.."
-#~ msgstr "Moviendo las preferencias de Pidgin.."
-
-#~ msgid "Moving Pidgin user settings to: "
-#~ msgstr "Moviendo las preferencias de Pidgin a: "
-
-#~ msgid "Notification"
-#~ msgstr "Notificación"
-
-#~ msgid "Local Addressbook"
-#~ msgstr "Agenda local"
-
-#~ msgid ""
-#~ "Insufficient arguments (-t, -f, -p, & -m are all required) or arguments "
-#~ "greater than 9999 chars\n"
-#~ msgstr ""
-#~ "No hay suficientes argumentos (los argumentos -t, -f, -p, y -m son "
-#~ "obligatorios) o los argumentos son más de 9999 caracteres\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Send instant message\n"
-#~ msgstr ""
-#~ "\\n\n"
-#~ "Enviar un mensaje instantáneo\n"
-
-#~ msgid "_Preferences"
-#~ msgstr "_Preferencias"
-
-#~ msgid "Update Buddy Icon"
-#~ msgstr "Actualizar icono de amigo"
-
-#~ msgid "(There was an error receiving this message)"
-#~ msgstr "(Hubo un error recibiendo este mensaje)"
-
-#~ msgid "That file does not exist."
-#~ msgstr "Ese archivo no existe."
-
-#~ msgid "%s was not found.\n"
-#~ msgstr "%s no se ha podido encontrar.\n"
-
-#~ msgid ""
-#~ "No such command. If you didn't mean to type a command, you can turn "
-#~ "commands off from Tools->Preferences->Interface->Conversation->Enable "
-#~ "\"slash\" commands."
-#~ msgstr ""
-#~ "No existe esa orden. Si no quería escribir una orden, puede desactivar "
-#~ "las órdenes de Herramientas->Preferencias->Interfaz->Conversación-"
-#~ ">Activar órdenes \"barra\""
-
-#~ msgid ""
-#~ "Syntax Error:  You typed the wrong number of arguments to that command. "
-#~ "If you didn't mean to type a command, you can turn commands off from "
-#~ "Tools->Preferences->Interface->Conversation->Enable \"slash\" commands."
-#~ msgstr ""
-#~ "Error sintáctio: no ha escrito el número de argumentos correctos para esa "
-#~ "orden. Si no quería escribir una orden, puede desactivar las órdenes de "
-#~ "Herramientas->Preferencias->Interfaz->Conversación->Activar órdenes "
-#~ "\"barra\""
-
-#~ msgid "<font sml=\"msn\">%s</font><br>"
-#~ msgstr "<font sml=\"msn\">%s</font><br>"
-
-#~ msgid "Your message to %s did not get sent:"
-#~ msgstr "Su mensaje a %s no fue enviado:"
-
-#~ msgid "sorry, i ran out for a while. bbl"
-#~ msgstr "Lo siento, ya hace un rato que me he ido. Tardaré en volver."
-
-#~ msgid "help:  List available commands."
-#~ msgstr "help:  Muestra las órdenes disponibles"
-
-#~ msgid "_Only send auto-response when idle"
-#~ msgstr "Sólo enviar la respuesta automática cuando esté _inactivo"
-
-#~ msgid "Already logged in with Zephyr"
-#~ msgstr "Ya está registrado en Zephyr"
-
-#~ msgid ""
-#~ "Because Zephyr uses your system username, you are unable to have multiple "
-#~ "accounts on it when logged in as the same user."
-#~ msgstr ""
-#~ "Dado que Zephyr usa el nombre de usuario del sistema, no puede tener "
-#~ "múltiples cuentas de éste cuando se conecta como el mismo usuario."
-
-#~ msgid "MSN ID"
-#~ msgstr "ID MSN"
-
-#~ msgid "User Count:\t\t%d\n"
-#~ msgstr "Cuenta de usuarios:\t\t%d\n"
-
-#~ msgid "Show IMs and chats in _same tabbed window"
-#~ msgstr "Mo_strar MIs y chats en la misma ventana con solapas."
-
-#~ msgid "Window"
-#~ msgstr "Ventana"
-
-#~ msgid "Buddy Icons"
-#~ msgstr "Iconos de amigos"
-
-#~ msgid "Co_lorize screen names"
-#~ msgstr "Co_lorear nombres de usuarios"
-
-#~ msgid "Protocols"
-#~ msgstr "Protocolos"
-
-#~ msgid ""
-#~ "<B>Supported IRC Commands:</B><BR>AWAY INVITE JOIN KICK<BR>ME MODE MSG "
-#~ "NAMES<BR>NICK OP DEOP OPERWALL<BR>PART PING QUERY QUIT<BR>QUOTE REMOVE "
-#~ "TOPIC UMODE<BR>VOICE DEVOICE WALLOPS WHOIS<BR>"
-#~ msgstr ""
-#~ "<B>Órdenes IRC soportadas:</B><BR>AWAY INVITE JOIN KICK<BR>ME MODE MSG "
-#~ "NAMES<BR>NICK OP DEOP OPERWALL<BR>PART PING QUERY QUIT<BR>QUOTE REMOVE "
-#~ "TOPIC UMODE<BR>VOICE DEVOICE WALLOPS WHOIS<BR>"
-
-#~ msgid ""
-#~ "<B>Supported IRC Commands:</B><BR>AWAY JOIN ME MODE<BR>MSG NICK OPERWALL "
-#~ "PING<BR>QUERY QUIT QUOTE UMODE<BR>WALLOPS WHOIS"
-#~ msgstr ""
-#~ "<B>Órdenes IRC soportadas:</B><BR>AWAY JOIN ME MODE<BR>MSG NICK OPERWALL "
-#~ "PING<BR>QUERY QUIT QUOTE UMODE<BR>WALLOPS WHOIS"
-
-#~ msgid "Unable to request USR\n"
-#~ msgstr "No se pudo pedir USR\n"
-
-#~ msgid "Unable to request CVR\n"
-#~ msgstr "No se pudo pedir CVR\n"
-
-#~ msgid "Unable to request INF\n"
-#~ msgstr "No se pudo pedir INF\n"
-
-#~ msgid "Got invalid XFR"
-#~ msgstr "Se obtuvo un XFR inválido"
-
-#~ msgid "Unable to transfer"
-#~ msgstr "No se pudo transferir"
-
-#~ msgid "Unable to parse message."
-#~ msgstr "No se pudo interpretar el mensaje."
-
-#~ msgid ""
-#~ "An MSN screen name must be in the form \"user@server.com\". Perhaps you "
-#~ "meant %s@hotmail.com. No changes were made to your allow list."
-#~ msgstr ""
-#~ "Un nombre de usuario MSN debe ser de la forma «usuario@servidor.com».  "
-#~ "Quizá quiso decir %s@hotmail.com.  No se modificó su lista de usuarios "
-#~ "aceptados."
-
-#~ msgid ""
-#~ "An MSN screen name must be in the form \"user@server.com\". Perhaps you "
-#~ "meant %s@hotmail.com. No changes were made to your block list."
-#~ msgstr ""
-#~ "Un nombre de usuario MSN debe ser de la forma «usuario@servidor.com».  "
-#~ "Quizá usted quiso decir %s@hotmail.com.  No se efectuaron cambios en su "
-#~ "lista de usuarios bloqueados."
-
-#~ msgid "<html><body><b>Error retrieving profile</b></body></html>"
-#~ msgstr "<html><body><b>Error al recuperar el perfil</b></body></html>"
-
-#~ msgid "Unable to write to MSN Nexus server."
-#~ msgstr "No se pudo escribir al servidor Nexus MSN."
-
-#~ msgid "MSN Nexus server returned invalid redirect information."
-#~ msgstr "El servidor Nexus MSN devolvió información de redirección inválida."
-
-#~ msgid "Protocol not supported"
-#~ msgstr "Protocolo no soportado"
-
-#~ msgid "The user %s (%s) wants to add you to their buddy list."
-#~ msgstr "El usuario %s (%s) quiere añadirle a su lista de amigos."
-
-#~ msgid "Unable to transfer to notification server"
-#~ msgstr "No se pudo transferir hacia el servidor de notificaciones"
-
-#~ msgid ""
-#~ "Error reading from %s server. Lastcommand was:\n"
-#~ " %s"
-#~ msgstr ""
-#~ "Error al leer del servidor %s. La última orden fue:\n"
-#~ "%s"
-
-#~ msgid "Full Name:\t\t%s\n"
-#~ msgstr "Nombre completo:\t\t%s\n"
-
-#~ msgid "Middle Names:\t%s\n"
-#~ msgstr "Nombre medio:\t%s\n"
-
-#~ msgid "Family Name:\t%s\n"
-#~ msgstr "Apellidos:\t%s\n"
-
-#~ msgid "Birth Day:\t\t%s\n"
-#~ msgstr "Fecha de nacimiento:\t\t%s\n"
-
-#~ msgid "Homepage:\t%s\n"
-#~ msgstr "Página personal:\t%s\n"
-
-#~ msgid "Address:\t%s\n"
-#~ msgstr "Dirección:\t%s\n"
-
-#~ msgid "Server:\t\t%s\n"
-#~ msgstr "Servidor:\t\t%s\n"
-
-#~ msgid "Unknown error number %d."
-#~ msgstr "Código de error desconocido %d."
-
-#~ msgid "ZLocate"
-#~ msgstr "ZLocate"
-
-#~ msgid "/Tools/P_rotocol Actions"
-#~ msgstr "/Herramientas/Acciones del _protocolo"
-
-#~ msgid "Style"
-#~ msgstr "Estilo"
-
-#~ msgid "Use custo_m face"
-#~ msgstr "Usar aspecto _personalizado"
-
-#~ msgid "Use custom si_ze"
-#~ msgstr "Usar _tamaño personalizado"
-
-#~ msgid "Show _URLs as links"
-#~ msgstr "Mostrar _URLs como enlaces"
-
-#~ msgid "Buddy List Toolbar"
-#~ msgstr "Barra de herramientas de la lista de amigos"
-
-#~ msgid "Group Display"
-#~ msgstr "Grupos"
-
-#~ msgid "Show _numbers in groups"
-#~ msgstr "Mostrar _números en los grupos"
-
-#~ msgid "Send _URLs as links"
-#~ msgstr "Enviar _URLs como enlaces"
-
-#~ msgid "Show status _icons on tabs"
-#~ msgstr "Mostrar _iconos de estado en las solapas."
-
-#~ msgid "New window _width:"
-#~ msgstr "_Ancho de una ventana nueva:"
-
-#~ msgid "New window _height:"
-#~ msgstr "A_lto de una ventana nueva:"
-
-#~ msgid "_Entry field height:"
-#~ msgstr "Alto del campo de _entrada:"
-
-#~ msgid "Hide window on _send"
-#~ msgstr "Ocultar la ventana al _enviar"
-
-#~ msgid "_Tab-complete nicks"
-#~ msgstr "_Tab completa los apodos"
-
-#~ msgid "_Old-style tab completion"
-#~ msgstr "Completado con el tabulador al estilo _antiguo"
-
-#~ msgid "_Show people joining in window"
-#~ msgstr "_Mostrar la gente que se une en la ventana"
-
-#~ msgid "_Show people leaving in window"
-#~ msgstr "_Mostrar la gente que se va de la ventana"
-
-#~ msgid "_No sounds when you log in"
-#~ msgstr "_Sin sonido durante cuando vd. se conecta"
-
-#~ msgid "_Sending messages removes away status"
-#~ msgstr "El _envío de un mensaje quita el estado de ausencia"
-
-#~ msgid "Seconds before _resending:"
-#~ msgstr "Segundos antes de _reenviar:"
-
-#~ msgid "Send auto-response in _active conversations"
-#~ msgstr "Enviar la respuesta automática en conversaciones a_ctivas"
-
-#~ msgid ""
-#~ "You are not currently signed on with any protocols that have the ability "
-#~ "to list rooms."
-#~ msgstr ""
-#~ "No está conectado con ningún protocolo que tenga con el que pueda listar "
-#~ "salas."
-
-#~ msgid "Unable to send password"
-#~ msgstr "No se pudo enviar la contraseña"
-
-#~ msgid "IO Error."
-#~ msgstr "Error E/S."
-
-#~ msgid "Username: <b>%s</b><br>\n"
-#~ msgstr "Nombre de usuario: <b>%s</b><br>\n"
-
-#~ msgid "Warning Level: <b>%d%%</b><br>\n"
-#~ msgstr "Nivel de aviso: <b>%d%%</b><br>\n"
-
-#~ msgid "Online Since: <b>%s</b><br>\n"
-#~ msgstr "En línea desde: <b>%s</b><br>\n"
-
-#~ msgid "Member Since: <b>%s</b><br>\n"
-#~ msgstr "Miembro desde: <b>%s</b><br>\n"
-
-#~ msgid "Idle: <b>%s</b>"
-#~ msgstr "Inactivo: <b>%s</b>"
-
-#~ msgid "Idle: <b>Active</b>"
-#~ msgstr "Inactivo: <b>Activo</b>"
-
-#~ msgid "Invalid Parameter (probably a Pidgin bug)"
-#~ msgstr "Parámetro inválido (probablemente un error de Pidgin)"
-
-#~ msgid "<b>Buddy Comment:</b> "
-#~ msgstr "<b>Comentario de amigo:</b> "
-
-#~ msgid "<b>Available:</b> "
-#~ msgstr "<b>Disponible:</b> "
-
-#~ msgid "<b>Status:</b> Not Authorized"
-#~ msgstr "<b>Estado:</b> No autorizado"
-
-#~ msgid "_Screenname:"
-#~ msgstr "_Nombre de usuario:"
-
-#~ msgid "_IM"
-#~ msgstr "M_I"
-
-#~ msgid "Browser Options"
-#~ msgstr "Opciones del navegador"
-
-#~ msgid "Open new _window by default"
-#~ msgstr "Crear una ventana _nueva por omisión"
-
-#~ msgid "<New User>"
-#~ msgstr "<Nuevo usuario>"
-
-#~ msgid "Bad Protocol"
-#~ msgstr "Protocolo erróneo"
-
-#~ msgid "Invalid Realm"
-#~ msgstr "Zona inválida"
-
-#~ msgid "Mechanism Too Weak"
-#~ msgstr "Mecanismo demasiado débil"
-
-#~ msgid "Registration of %s@%s failed: %s"
-#~ msgstr "Falló el registro de %s@%s: %s"
-
-#~ msgid "Unknown error occurred changing password"
-#~ msgstr "Ocurrió un error desconocido al cambiar la contraseña"
-
-#~ msgid "Unable to join chat"
-#~ msgstr "No se pudo unir al chat."
-
-#~ msgid "Could not send %s to %s, protocol not supported."
-#~ msgstr "No se pudo enviar %s a %s, protocolo no soportado."
-
-#~ msgid "Internal server error"
-#~ msgstr "Error interno del servidor"
-
-#~ msgid "Unable to read from MSN Nexus server."
-#~ msgstr "No se pudo leer del servidor Nexus MSN"
-
-#~ msgid "MSN Nexus server returned invalid information."
-#~ msgstr "El servidor Nexus MSN devolvió información inválida."
-
-#~ msgid "Unable to connect to passport server"
-#~ msgstr "No se pudo conectar al servidor de pasaportes"
-
-# Y esto cómo se traduce?
-#~ msgid "Gnome Stock Ticker Properties"
-#~ msgstr "Propiedas del ticket de mercados de Gnome"
-
-#~ msgid "Update Frequency in min"
-#~ msgstr "Tasa de actualización en minutos"
-
-#~ msgid "Enter symbols delimited with \"+\" in the box below."
-#~ msgstr "Introduzca los símbolos delimitados con «+» en la caja inferior."
-
-#~ msgid "Check this box to display only symbols and price:"
-#~ msgstr "Marque esta casilla para mostrar sólo símbolos y precio:"
-
-#~ msgid "Check this box to scroll left to right:"
-#~ msgstr "Marque esta casilla para mover de izquierda a derecha:"
-
-#~ msgid "(No"
-#~ msgstr "(Sin"
-
-#~ msgid "Pidgin - Away!"
-#~ msgstr "Pidgin - ¡Ausente!"
-
-#~ msgid "Buddy Chat"
-#~ msgstr "Chat con amigos"
-
-#~ msgid "Join Chat As:"
-#~ msgstr "Unirse a un chat como:"
-
-#~ msgid "Alias chat"
-#~ msgstr "Apodo de chat"
-
-#~ msgid "Alias contact"
-#~ msgstr "Apodo del contacto"
-
-#~ msgid "Alias buddy"
-#~ msgstr "Apodo de amigo"
-
-#~ msgid ""
-#~ "Please enter an aliased name for the person below, or rename this contact "
-#~ "in your buddy list."
-#~ msgstr ""
-#~ "Introduzca un apodo con el que quiere asociar a la persona a continuación "
-#~ "o cambie este contacto en su lista de amigos."
-
-#~ msgid "Pidgin - Information"
-#~ msgstr "Pidgin - Información"
-
-#~ msgid "Pidgin - Insert Image"
-#~ msgstr "Pidgin - Insertar Imagen"
-
-#~ msgid "/Conversation/_New Conversation..."
-#~ msgstr "/Conversación/Conversación _Nueva..."
-
-#~ msgid "/Conversation/Insert _URL..."
-#~ msgstr "/Conversación/Insertar _URL..."
-
-#~ msgid "Pa_ssword"
-#~ msgstr "Contra_seña"
-
-#~ msgid "Pidgin - Save Icon"
-#~ msgstr "Pidgin - Guardar icono"
-
-#~ msgid "Could not connect for transfer!"
-#~ msgstr "¡No se pudo conectar para realizar la transferencia!"
-
-#~ msgid "Changing info for %s:"
-#~ msgstr "Cambiando los datos de %s:"
-
-#~ msgid "Save Log File"
-#~ msgstr "Guardar archivo de registro"
-
-#~ msgid "Couldn't remove file %s."
-#~ msgstr "No se pudo borrar el archivo %s."
-
-#~ msgid "Remove Log"
-#~ msgstr "Eliminar registro"
-
-#~ msgid "Couldn't open log file %s."
-#~ msgstr "No se pudo abrir el archivo de registro %s."
-
-#~ msgid ""
-#~ "<span weight='bold' size='larger'>Enter a search phrase\n"
-#~ "</span>"
-#~ msgstr ""
-#~ "<span weight='bold' size='larger'>Introduzca una nueva frase a buscar\n"
-#~ "</span>"
-
-#~ msgid "/Conversation/Search..."
-#~ msgstr "/Conversación/Buscar..."
-
-#~ msgid "Normal font size"
-#~ msgstr "Tamaño de fuente normal"
-
-#~ msgid "<HR><BR><H3 Align=Center> ---- New Conversation @ %s ----</H3><BR>\n"
-#~ msgstr ""
-#~ "<HR><BR><H3 Align=Center> ---- Nueva conversación @ %s ----</H3><BR>\n"
-
-#~ msgid "---- New Conversation @ %s ----\n"
-#~ msgstr "---- Nueva conversación @ %s ----\n"
-
-#~ msgid "Strip _HTML from logs"
-#~ msgstr "Eliminar _HTML de los registros"
-
-#~ msgid "I_ndividual log file for each buddy's signons"
-#~ msgstr "Un archivo de registro _individual para la conexión de cada amigo"
-
-#~ msgid "Error in specifying buddy conversation."
-#~ msgstr "Error al especificar la conversación del amigo."
-
-#~ msgid "Unable to find conversation log"
-#~ msgstr "No se pudo encontrar un registro de conversación."
-
-#~ msgid "Unable to make directory %s for logging"
-#~ msgstr "No fue posible crear el directorio %s para el registro"
-
-#~ msgid "IM Sessions with %s\n"
-#~ msgstr "Sesiones de MI con %s\n"
-
-#~ msgid "IM Sessions with %s"
-#~ msgstr "Sesiones de MI con %s"
-
-#~ msgid "+++ %s (%s) signed on @ %s"
-#~ msgstr "+++ %s (%s) se conectó a @ %s"
-
-#~ msgid "+++ %s (%s) signed off @ %s"
-#~ msgstr "+++ %s (%s) se ha desconectado @ %s"
-
-#~ msgid "+++ %s (%s) changed away state @ %s"
-#~ msgstr "+++ %s (%s) cambio de estado de ausencia @ %s"
-
-#~ msgid "+++ %s (%s) became idle @ %s"
-#~ msgstr "+++ %s (%s) pasa a estar inactivo @ %s"
-
-#~ msgid "+++ %s (%s) returned from idle @ %s"
-#~ msgstr "+++ %s (%s) vuelve a estar activo @ %s"
-
-#~ msgid "+++ Program exit @ %s"
-#~ msgstr "+++ Salida del programa @ %s"
-
-#~ msgid "%s (%s) reported that %s (%s) signed on @ %s"
-#~ msgstr "%s (%s) informa que %s (%s) se ha conectado @ %s"
-
-#~ msgid "%s (%s) reported that %s (%s) signed off @ %s"
-#~ msgstr "%s (%s) informa que %s (%s) se ha desconectado @ %s"
-
-#~ msgid "%s (%s) reported that %s (%s) went away @ %s"
-#~ msgstr "%s (%s) informa que %s (%s) está ausente @ %s"
-
-#~ msgid "%s (%s) reported that %s (%s) came back @ %s"
-#~ msgstr "%s (%s) informa que %s (%s) ha vuelto @ %s"
-
-#~ msgid "%s (%s) reported that %s (%s) became idle @ %s"
-#~ msgstr "%s (%s) informa que %s (%s) pasa a estar inactivo @ %s"
-
-#~ msgid "%s (%s) reported that %s (%s) returned from idle @ %s"
-#~ msgstr "%s (%s) informa que %s (%s) está activo ahora @ %s"
-
-#~ msgid "%s (%s) reported that %s signed on @ %s"
-#~ msgstr "%s (%s) informa que %s se ha conectado @ %s"
-
-#~ msgid "%s (%s) reported that %s signed off @ %s"
-#~ msgstr "%s (%s) informa que %s se ha desconectado @ %s"
-
-#~ msgid "%s (%s) reported that %s went away @ %s"
-#~ msgstr "%s (%s) informa que %s se ha ido @ %s"
-
-#~ msgid "%s (%s) reported that %s came back @ %s"
-#~ msgstr "%s (%s) informa que %s ha vuelto @ %s"
-
-#~ msgid "%s (%s) reported that %s became idle @ %s"
-#~ msgstr "%s (%s) informa que %s está inactivo @ %s"
-
-#~ msgid "%s (%s) reported that %s returned from idle @ %s"
-#~ msgstr "%s (%s) informa que %s vuelve a estar activo @ %s"
-
-#~ msgid "Portuguese-Portugal"
-#~ msgstr "Portugués de Portugal"
-
-#~ msgid "Really clear log?"
-#~ msgstr "¿En serio quiere limpiar el registro?"
-
-#~ msgid "Disable Animation"
-#~ msgstr "Deshabilitar Animación"
-
-#~ msgid "Secure IM"
-#~ msgstr "MI segura"
-
-#~ msgid "_Quote window title"
-#~ msgstr "_Entrecomillar el título de la ventana"
-
-#~ msgid "_Notify even if conversation is in focus"
-#~ msgstr "_Notificar aún si la conversación está en foco"
-
-#~ msgid ""
-#~ "Communication with the browser failed. Please close all windows and try "
-#~ "again."
-#~ msgstr ""
-#~ "No ha sido posible comunicarse con el navegador. Por favor, cierre todas "
-#~ "las ventanas e inténtelo de nuevo."
-
-#~ msgid "Add To"
-#~ msgstr "Añadir a"
-
-#~ msgid "Allow Web Searches To Find Your Info"
-#~ msgstr "Dejar que búsquedas en la Web encuentren su información"
-
-#~ msgid "Find Buddy By Info"
-#~ msgstr "Buscar un amigo en base a su información"
-
-#~ msgid ""
-#~ "The current password you entered is incorrect.  Your password has not "
-#~ "been changed."
-#~ msgstr ""
-#~ "La contraseña introducida no es correcta. Su contraseña no ha sido "
-#~ "cambiada."
-
-#~ msgid ""
-#~ "The new password you entered is the same as your current password.  Your "
-#~ "password remains the same."
-#~ msgstr ""
-#~ "La nueva contraseña que usted introdujo es la misma que la actual.  Su "
-#~ "contraseña seguirá siendo la misma."
-
-#~ msgid "Jabber Error %s"
-#~ msgstr "Error Jabber %s"
-
-#~ msgid ""
-#~ "The Jabber user %s does not exist and was therefore not added to your "
-#~ "roster."
-#~ msgstr ""
-#~ "El usuario Jabber %s no existe y por lo tanto no se lo añadirá a su "
-#~ "«roster»."
-
-#~ msgid "Unknown login error"
-#~ msgstr "Error de conexión desconocido."
-
-#~ msgid "Password successfully changed."
-#~ msgstr "La contraseña se cambió correctamente."
-
-#~ msgid "The user %s is an invalid Jabber I.D. and was therefore not added."
-#~ msgstr ""
-#~ "El usuario %s es un I.D. de Jabber inválido y por lo tanto no fue añadido."
-
-#~ msgid "View Error Msg"
-#~ msgstr "Ver mensaje de error"
-
-#~ msgid "Unknown registration error"
-#~ msgstr "Error desconocido al registrar"
-
-#~ msgid "<B>Status:</B> %s<HR>%s"
-#~ msgstr "<B>Estado:</B> %s<HR>%s"
-
-#~ msgid "EveryBuddy Bug"
-#~ msgstr "Bug de EveryBuddy"
-
-#~ msgid ""
-#~ "<i>Unable to display information because it was sent in an unknown "
-#~ "encoding.</i>"
-#~ msgstr ""
-#~ "<I>No se puede mostrar cierta información porque fue enviada con una "
-#~ "codificación desconocida.</I>"
-
-#~ msgid ""
-#~ "Username : <b>%s</b>  %s <br>\n"
-#~ "Warning Level : <b>%d %%</b><br>\n"
-#~ "%s%s%s\n"
-#~ "<hr>\n"
-#~ msgstr ""
-#~ "Nombre de usuario: <B>%s</B> %s <BR>\n"
-#~ "Nivel de Aviso : <B>%d %%</B><BR>\n"
-#~ "%s%s%s\n"
-#~ "<HR>\n"
-
-#~ msgid "<i>User has no away message</i>"
-#~ msgstr "<i>El usuario no tiene mensaje de ausencia</i>"
-
-#~ msgid "Client Capabilities: "
-#~ msgstr "Funcionalidades del cliente: "
-
-#~ msgid "<i>No Information Provided</i>"
-#~ msgstr "<i>No se aportó información</i>"
-
-#~ msgid "Please talk to me, I'm lonely! (and single)"
-#~ msgstr "Por favor, habla conmigo, ¡estoy sólo! (y soltero)"
-
-#~ msgid "Pidgin - Popup"
-#~ msgstr "Pidgin - Popup"
-
-#~ msgid "Event Test"
-#~ msgstr "Prueba de evento"
-
-#~ msgid "Unable to write to config file"
-#~ msgstr "No se pudo escribir el archivo de configuración."
-
-#~ msgid "Appl_y"
-#~ msgstr "_Aplicar"
-
-#~ msgid ""
-#~ "Pidgin::register not called with proper arguments.  Consult PERL-HOWTO."
-#~ msgstr ""
-#~ "No se llamó a Pidgin::register con los argumentos correctos. Consulte el "
-#~ "PERL-HOWTO."
-
-#~ msgid "Second Name"
-#~ msgstr "Apellido"
-
-#~ msgid "DCC Chat with %s closed"
-#~ msgstr "Se cerró el chat vía DCC con %s"
-
-#~ msgid "DCC Chat with %s established"
-#~ msgstr "Chat vía DCC con %s establecida"
-
-#~ msgid "%s is an Identified User"
-#~ msgstr "%s es un usuario identificado"
-
-#~ msgid "%ld seconds [signon: %s]"
-#~ msgstr "%ld segundos [entrada: %s]"
-
-#~ msgid "No nickname given"
-#~ msgstr "No se indicó un apodo"
-
-#~ msgid "You're not an IRC operator!"
-#~ msgstr "¡Usted no es un operador de IRC!"
-
-#~ msgid "That nick is already in use.  Please enter a new nick"
-#~ msgstr "Ese apodo ya está en uso. Por favor, introduzca uno nuevo"
-
-#~ msgid "IRC CTCP info"
-#~ msgstr "Info IRC CTCP"
-
-#~ msgid "%s would like to establish a DCC chat"
-#~ msgstr "%s quiere establecer un chat vía DCC"
-
-#~ msgid ""
-#~ "This requires a direct connection to be established between the two "
-#~ "computers.  Messages sent will not pass through the IRC server"
-#~ msgstr ""
-#~ "Esto requiere una conexión directa entre los dos ordenadores. Los "
-#~ "mensajes enviados no pasarán por el servidor de IRC"
-
-#~ msgid "CTCP UserInfo"
-#~ msgstr "Información del Usuario vía CTCP"
-
-#~ msgid "CTCP Ping"
-#~ msgstr "Ping CTCP"
-
-#~ msgid "IRC Part"
-#~ msgstr "Salir de IRC"
-
-#~ msgid "<I>Requesting DCC CHAT</I>"
-#~ msgstr "<I>Solicitando chat vía DCC</I>"
-
-#~ msgid "<B>Operator commands:<BR>REHASH RESTART</B>"
-#~ msgstr "<B>Comandos de operador:<BR>REHASH RESTART</B>"
-
-#~ msgid ""
-#~ "<B>CTCP commands:<BR>CLIENTINFO <nick><BR>USERINFO <nick><BR>VERSION "
-#~ "<nick><BR>PING <nick></B><BR>"
-#~ msgstr ""
-#~ "<B>Comandos CTCP:<BR>CLIENTINFO <apodo><BR>USERINFO <apodo><BR>VERSION "
-#~ "<apodo><BR>PING <apodo></B><BR>"
-
-#~ msgid "<B>DCC commands:<BR>CHAT <nick></B>"
-#~ msgstr "<B>Comandos DCC:<BR>CHAT <apodo></B>"
-
-#~ msgid ""
-#~ "<B>Currently supported commands:<BR>WHOIS INVITE NICK LIST<BR>JOIN PART "
-#~ "TOPIC KICK<BR>OP DEOP VOICE DEVOICE<BR>ME MSG QUOTE SAY QUIT<BR>MODE "
-#~ "VERSION W WHOWAS<BR>Type /HELP OPER for operator commands<BR>Type /HELP "
-#~ "CTCP for CTCP commands<BR>Type /HELP DCC for DCC commands"
-#~ msgstr ""
-#~ "<B>Comandos actualmente soportados:<BR>WHOIS INVITE NICK LIST<BR>JOIN "
-#~ "PART TOPIC KICK<BR>OP DEOP VOICE DEVOICE<BR>ME MSG QUOTE SAY QUIT<BR>MODE "
-#~ "VERSION W WHOWAS<BR>Escriba /HELP OPER para comandos del "
-#~ "operador<BR>Escriba /HELP CTCP para comandos CTCP<BR>Escriba /HELP DCC "
-#~ "para comandos DCC"
-
-#~ msgid "DCC Chat"
-#~ msgstr "Coversación por DCC"
-
-#~ msgid "User Identity"
-#~ msgstr "Identidad de usuario"
-
-#~ msgid "Unable to send USR\n"
-#~ msgstr "No se pudo enviar USR\n"
-
-#~ msgid "Got invalid XFR\n"
-#~ msgstr "Se obtuvo un XFR inválido\n"
-
-#~ msgid "Unable to request INF"
-#~ msgstr "No se pudo pedir INF"
-
-#~ msgid "ICQ Unknown"
-#~ msgstr "ICQ Desconocido"
-
-#~ msgid "UIN:"
-#~ msgstr "UIN:"
-
-#~ msgid "Gender:"
-#~ msgstr "Sexo:"
-
-#~ msgid "Age:"
-#~ msgstr "Edad:"
-
-#~ msgid "State:"
-#~ msgstr "Estado:"
-
-#~ msgid "<B>%s has the following screen names:</B><BR>"
-#~ msgstr "<B>%s tiene los siguientes apodos:</B><BR>"
-
-#~ msgid "<FONT SIZE=\"3\">Active Developers:</FONT><BR>"
-#~ msgstr "<FONT SIZE=\"3\">Desarrolladores activos:</FONT><BR>"
-
-#~ msgid ""
-#~ "  Rob Flynn (maintainer) &lt;<A HREF=\"mailto:rob@marko.net\">rob@marko."
-#~ "net</A>&gt;<BR>  Sean Egan (lead developer) &lt;<A HREF=\"mailto:"
-#~ "bj91704@binghamton.edu\">bj91704@binghamton.edu</A>&gt;<BR>  Christian "
-#~ "'ChipX86' Hammond (developer & webmaster)<BR>  Herman Bloggs (win32 port) "
-#~ "&lt;<A HREF=\"mailto:hermanator12002@yahoo.com\">hermanator12002@yahoo."
-#~ "com</A>&gt;<BR>  Nathan 'faceprint' Walp (developer)<BR>  Mark 'KingAnt' "
-#~ "Doliner (developer)<BR>  Luke 'LSchiere' Schierer (support)<BR><BR>"
-#~ msgstr ""
-#~ "  Rob Flynn (mantenimiento) &lt;<A HREF=\"mailto:rob@marko.net"
-#~ "\">rob@marko.net</A>&gt;<BR>  Sean Egan (desarrollador principal) &lt;<A "
-#~ "HREF=\"mailto:bj91704@binghamton.edu\">bj91704@binghamton.edu</A>&gt;"
-#~ "<BR>  Christian 'ChipX86' Hammond (desarrollador y webmaster)<BR>  Herman "
-#~ "Bloggs (puerto win32) &lt;<A HREF=\"mailto:hermanator12002@yahoo.com"
-#~ "\">hermanator12002@yahoo.com</A>&gt;<BR>  Nathan 'faceprint' Walp "
-#~ "(desarrollador)<BR>  Mark 'KingAnt' Doliner (desarrollador)<BR>  Luke "
-#~ "'LSchiere' Schierer (soporte)<BR><BR>"
-
-#~ msgid "<FONT SIZE=\"3\">Crazy Patch Writers:</FONT><BR>"
-#~ msgstr "<FONT SIZE=\"3\">Locos escritores de parches:</FONT><BR>"
-
-#~ msgid "<FONT SIZE=\"3\">Retired Developers:</FONT><BR>"
-#~ msgstr "<FONT SIZE=\"3\">Desarrolladores retirados:</FONT><BR>"
-
-#~ msgid ""
-#~ "  Adam Fritzler (former libfaim maintainer)<BR>  Eric Warmenhoven (former "
-#~ "lead developer)&lt;<A HREF=\"mailto:warmenhoven@yahoo.com"
-#~ "\">warmenhoven@yahoo.com</A>&gt;<BR>  Jim Duchek (former maintainer)<BR>  "
-#~ "Jim Seymour (former Jabber developer)<BR>  Mark Spencer (original author) "
-#~ "&lt;<A HREF=\"mailto:markster@marko.net\">markster@marko.net</A>&gt;<BR>  "
-#~ "Syd Logan (hacker and designated driver [lazy bum])<BR><BR>"
-#~ msgstr ""
-#~ "  Adam Fritzler (antiguo mantenimiento de libfaim)<BR>  Eric Warmenhoven "
-#~ "(antiguo desarrollador líder)&lt;<A HREF=\"mailto:warmenhoven@yahoo.com"
-#~ "\">warmenhoven@yahoo.com</A>&gt;<BR>  Jim Duchek (antiguo mantenedor)"
-#~ "<BR>  Jim Seymour (antiguo desarrollador de Jabber)<BR>  Mark Spencer "
-#~ "(autor original) &lt;<A HREF=\"mailto:markster@marko.net\">markster@marko."
-#~ "net</A>&gt;<BR>  Syd Logan (hacker y conductor por designación [lazy bum])"
-#~ "<BR><BR>"
-
-#~ msgid ""
-#~ "Pidgin is converting your old buddy lists to a new format, which will now "
-#~ "be located at %s"
-#~ msgstr ""
-#~ "Pidgin está convirtiendo la lista antigua de amigos a un nuevo formato, "
-#~ "que residirá en %s"
-
-#~ msgid "Converting Buddy List"
-#~ msgstr "Convirtiendo lista de amigos"
-
-#~ msgid "There was an error launching your chosen browser: %s"
-#~ msgstr "Ha habido un error al lanzar el navegador que ha escogido: %s"
-
-#~ msgid "Deny all users"
-#~ msgstr "Negar a todos"
-
-#~ msgid "Add Permit"
-#~ msgstr "Permitir añadir"
-
-#~ msgid "Add Deny"
-#~ msgstr "Denegar Añadir"
-
-#~ msgid "_Raise windows on events"
-#~ msgstr "Al_zar ventanas cuando se reciba un evento"
-
-#~ msgid ""
-#~ "The entered manual browser '%s' is not valid. Hyperlinks will not work."
-#~ msgstr ""
-#~ "El navegador '%s' introducido manualmente no es válido. Los hiperenlaces "
-#~ "no funcionarán."
-
-#~ msgid "Sign On"
-#~ msgstr "Conectar"
-
-#~ msgid "The plugin %s did not return any valid plugin information"
-#~ msgstr "El plugin %s no devolvió información de plugin válida"
-
-#~ msgid "Preferences..."
-#~ msgstr "Preferencias..."
-
-#~ msgid "Autoreconnect"
-#~ msgstr "Reconexión automática"
-
-#~ msgid "Pidgin Chat"
-#~ msgstr "Chat Pidgin"
-
-#~ msgid "Refresh"
-#~ msgstr "Refrescar"
-
-#~ msgid "Allows you to add chat rooms to your buddy list."
-#~ msgstr "Permite añadir salas de chat a su lista de amigos."
-
-#~ msgid ""
-#~ "Allows you to add chat rooms to your buddy list. Click the configure "
-#~ "button to choose which rooms."
-#~ msgstr ""
-#~ "Permite añadir salas de chat a su lista de amigos. Pulse el botón de "
-#~ "configuración para escoger las salas."
-
-#~ msgid "<b>Status:</b> %s%s%s"
-#~ msgstr "<b>Estado:</b> %s%s%s"
-
-#~ msgid "User unverified"
-#~ msgstr "Usuario no verificado"
-
-#~ msgid "Unable to connect to Notification Server"
-#~ msgstr "No se pudo conectar al servidor de notificaciones"
-
-#~ msgid "Set Friendly Name:"
-#~ msgstr "Establecer nombre:"
-
-#~ msgid "Pidgin was unable to send an MSN message"
-#~ msgstr "Pidgin no pudo enviar un mensaje MSN"
-
-#~ msgid ""
-#~ "The maximum number of buddies allowed in your buddy list is %d, and you "
-#~ "have %d.  Until you are below the limit, some buddies will not show up as "
-#~ "online."
-#~ msgstr ""
-#~ "El número máximo de amigos permitidos en la lista es de %d, y usted tiene "
-#~ "%d.  Mientras no esté por debajo del límite,  algunos amigos no "
-#~ "aparecerán como conectados."
-
-#~ msgid "Maximum buddy list length exceeded."
-#~ msgstr "Tamaño máximo de la lista de amigos superado."
-
-#~ msgid "/Buddies/_Show Offline Buddies"
-#~ msgstr "/Amigos/_Mostrar amigos desconectados"
-
-#~ msgid "%dh%02dm"
-#~ msgstr "%dh%02dm"
-
-#~ msgid "%dm"
-#~ msgstr "%dm"
-
-#~ msgid "Removing '%s' from buddy list.\n"
-#~ msgstr "Eliminando '%s' de la lista de amigos.\n"
-
-#~ msgid "Pidgin - Save Image"
-#~ msgstr "Pidgin - Guardar Imagen"
-
-#~ msgid "Auto-Login"
-#~ msgstr "Auto conectarse"
-
-#~ msgid "Register with server"
-#~ msgstr "Registrarse en el servidor"
-
-#~ msgid "Proxy _Type"
-#~ msgstr "_Tipo de proxy"
-
-#~ msgid ""
-#~ "You have attempted to login an IM account using the TOC protocol.  "
-#~ "Because this protocol is inferior to OSCAR, it is now compiled as a "
-#~ "plugin by default.  To login, edit this account to use OSCAR or load the "
-#~ "TOC plugin."
-#~ msgstr ""
-#~ "Usted intentó conectarse a una cuenta de MI usando el protocolo TOC. Como "
-#~ "este protocolo es inferior a OSCAR, ahora se compila por omisión como un "
-#~ "plugin.  Para conectarse, edite esta cuenta para usar OSCAR o cargue el "
-#~ "plugin de TOC."
-
-#~ msgid "Protocol not found."
-#~ msgstr "Protocolo no encontrado."
-
-#~ msgid ""
-#~ "You cannot log this account in; you do not have the protocol it uses "
-#~ "loaded, or the protocol does not have a login function."
-#~ msgstr ""
-#~ "No se puede conectar con esta cuenta; no se dispone del protocolo que "
-#~ "usa, o el protocolo no dispone de la función de conexión."
-
-#~ msgid "%s was unable to sign on"
-#~ msgstr "%s no pudo conectarse"
-
-#~ msgid "Control-_W closes window"
-#~ msgstr "Control-_W cierra la ventana"
-
-#~ msgid "Hide buddy _icons"
-#~ msgstr "_Ocultar iconos de amigos"
-
-#~ msgid "IM Tabs"
-#~ msgstr "Solapas MI"
-
-#~ msgid ""
-#~ "Show all _instant messages in one tabbed\n"
-#~ "window"
-#~ msgstr ""
-#~ "Mostrar todos los mensajes _instantáneos\n"
-#~ "en una ventana con solapas"
-
-#~ msgid "Chat Tabs"
-#~ msgstr "Solapas de Conversación"
-
-#~ msgid "Show all c_hats in one tabbed window"
-#~ msgstr "Mostrar todos los C_hats en una ventana con solapas"
-
-#~ msgid "_Manual: "
-#~ msgstr "_Manual:"
-
-#~ msgid "ICQ Protocol detected."
-#~ msgstr "Protocolo ICQ detectado."
-
-#~ msgid ""
-#~ "Pidgin has loaded the ICQ plugin.  This plugin has been deprecated. As "
-#~ "such, it was probably not compiled from the same version of the source as "
-#~ "this application was, and cannot be guaranteed to work.  It is "
-#~ "recommended that you use the AIM/ICQ protocol to connect to ICQ"
-#~ msgstr ""
-#~ "Pidgin ha cargado el plugin ICQ. Este plugin está obsoleto. Como tal, "
-#~ "probablmente no está compilado con la misma versión de las fuentes que "
-#~ "esta aplicación, y no está garantizado que funcione. Se recomienda que "
-#~ "utilice el protocolo AIM/ICQ para conectarse a ICQ"
-
-#~ msgid "%s has new mail."
-#~ msgstr "%s tiene nuevo correo."
-
-#~ msgid "Pidgin - New Mail"
-#~ msgstr "Pidgin - Nuevo correo"
-
-#~ msgid ""
-#~ "You do not currently have any protocols available that are able to "
-#~ "register new accounts."
-#~ msgstr ""
-#~ "No dispone de ningún protocolo que permita registrar cuentas nuevas."
-
-#~ msgid "Buddy Chat Invite"
-#~ msgstr "Invitar a un chat"
-
-#~ msgid "Pidgin Instant Messenger - Signed off"
-#~ msgstr "Mensajería Instantánea de Pidgin - Desactivado"
-
-#~ msgid "Pidgin Instant Messenger - Away"
-#~ msgstr "Mensajería Instantánea de Pidgin - Ausente"
-
-#~ msgid "I'm Back"
-#~ msgstr "¡Ya he vuelto!"
-
-#~ msgid "[Click to edit]"
-#~ msgstr "[Haga click para editar]"
-
-#~ msgid "Pounce on sign on"
-#~ msgstr "Aviso al conectarse"
-
-#~ msgid "Pounce when buddy is typing to you"
-#~ msgstr "Aviso cuando el amigo le esté escribiendo"
-
-#~ msgid "C_ancel"
-#~ msgstr "C_ancelar"
--- a/po/fi.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/fi.po	Thu Feb 18 21:38:43 2010 +0000
@@ -1,7 +1,7 @@
 # Piidgin Finnish translation
 # Copyright (C) 2002 Tero Kuusela <teroajk@subdimension.com>
 # Copyright (C) 2003-2005 Arto Alakulju <arto@alakulju.net>
-# Copyright (C) 2005-2009 Timo Jyrinki <timo.jyrinki@iki.fi>
+# Copyright (C) 2005-2010 Timo Jyrinki <timo.jyrinki@iki.fi>
 #
 # This file is distributed under the same license as the Pidgin package.
 #
@@ -10,8 +10,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:34-0500\n"
-"PO-Revision-Date: 2009-08-30 16:48+0300\n"
+"POT-Creation-Date: 2010-02-18 15:01+0200\n"
+"PO-Revision-Date: 2010-02-18 15:01+0200\n"
 "Last-Translator: Timo Jyrinki <timo.jyrinki@iki.fi>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -630,9 +630,8 @@
 msgid "Enable Sounds"
 msgstr "Ota äänet käyttöön"
 
-#, fuzzy
 msgid "You are not connected."
-msgstr "Yhdistäminen ei onnistu"
+msgstr "Et ole yhdistettynä."
 
 msgid "<AUTO-REPLY> "
 msgstr "<AUTOMAATTIVASTAUS> "
@@ -1555,6 +1554,7 @@
 msgid "Online"
 msgstr "Linjoilla"
 
+#. primative,						no,							id,			name
 msgid "Offline"
 msgstr "Poissa linjoilta"
 
@@ -1942,6 +1942,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s ei ole tavallinen tiedosto. Ei suostuta ylikirjoittamaan sitä.\n"
 
+msgid "File is not readable."
+msgstr "Tiedosto ei ole luettavissa."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s on lähettämässä sinulle %s (%s)"
@@ -2213,25 +2216,19 @@
 msgid "A non-recoverable Farsight2 error has occurred."
 msgstr "Korjaamaton Farsight2-virhe."
 
-#, fuzzy
+msgid "Error with your microphone"
+msgstr "Virhe mikrofonin kanssa"
+
+msgid "Error with your webcam"
+msgstr "Virhe web-kameran kanssa"
+
 msgid "Conference error"
-msgstr "Virhe neuvottelussa."
-
-#, fuzzy
-msgid "Error with your microphone"
-msgstr "Virhe mikrofonin kanssa."
-
-#, fuzzy
-msgid "Error with your webcam"
-msgstr "Virhe web-kameran kanssa."
+msgstr "Virhe neuvottelussa"
 
 #, c-format
 msgid "Error creating session: %s"
 msgstr "Virhe luotaessa istuntoa: %s"
 
-msgid "Error creating conference."
-msgstr "Virhe luotaessa konferenssia."
-
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
 msgstr "Käytät: %s, mutta tämä liitännäinen vaatii: %s."
@@ -3169,10 +3166,12 @@
 msgid "Add to chat..."
 msgstr "Lisää ryhmäkeskusteluun..."
 
+#. 0
 #. Global
 msgid "Available"
 msgstr "Tavoitettavissa"
 
+#. 1
 #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
 #. Away stuff
@@ -3797,6 +3796,13 @@
 msgstr ""
 "Palvelin vaatii salaamattoman tunnistautumisen salaamattoman yhteyden yli"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "Kelvoton vastaus palvelimelta"
+
+msgid "Server does not use any supported authentication method"
+msgstr "Palvelin ei käytä mitään tuetuista tunnistautumismenetelmistä"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3808,25 +3814,38 @@
 msgid "Plaintext Authentication"
 msgstr "Tekstipohjainen tunnistus"
 
-msgid "SASL authentication failed"
-msgstr "SASL-todennus epäonnistui"
-
-msgid "Invalid response from server"
-msgstr "Kelvoton vastaus palvelimelta"
-
-msgid "Server does not use any supported authentication method"
-msgstr "Palvelin ei käytä mitään tuetuista tunnistautumismenetelmistä"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "Salausta vaadittu, mutta sitä ei tueta tällä palvelimella."
 
 msgid "Invalid challenge from server"
 msgstr "Virheellinen tunnistushaaste palvelimelta"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr ""
+
+msgid "SASL authentication failed"
+msgstr "SASL-todennus epäonnistui"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "SASL-virhe: %s"
 
+#, fuzzy
+msgid "Unable to canonicalize username"
+msgstr "Asetusten tekeminen ei onnistu"
+
+#, fuzzy
+msgid "Unable to canonicalize password"
+msgstr "Kuuntelevaa porttia ei voi avata."
+
+#, fuzzy
+msgid "Malicious challenge from server"
+msgstr "Virheellinen tunnistushaaste palvelimelta"
+
+#, fuzzy
+msgid "Unexpected response from server"
+msgstr "Odottamaton HTTP-vastaus palvelimelta"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "BOSH-yhteyshallinta lopetti istunnon."
 
@@ -3927,13 +3946,16 @@
 msgid "Resource"
 msgstr "Sijainti"
 
+msgid "Uptime"
+msgstr "Ylhäällä"
+
+msgid "Logged Off"
+msgstr "Kirjautunut ulos"
+
 #, c-format
 msgid "%s ago"
 msgstr "%s sitten"
 
-msgid "Logged Off"
-msgstr "Kirjautunut ulos"
-
 msgid "Middle Name"
 msgstr "Muut etunimet"
 
@@ -3981,15 +4003,6 @@
 msgid "Log Out"
 msgstr "Kirjaudu ulos"
 
-msgid "Chatty"
-msgstr "Juttelutuulella"
-
-msgid "Extended Away"
-msgstr "Pidennetty poissaolo"
-
-msgid "Do Not Disturb"
-msgstr "Älä häiritse"
-
 msgid "JID"
 msgstr "JID"
 
@@ -4120,13 +4133,6 @@
 msgid "Ping timed out"
 msgstr "Pingin aikakatkaisu"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"Vaihtoehtoisia XMPP-yhteystapoja ei löytynyt suoran yhdistämisen "
-"epäonnistumisen jälkeen."
-
 msgid "Invalid XMPP ID"
 msgstr "Epäkelpo XMPP-ID"
 
@@ -4248,6 +4254,7 @@
 msgid "None (To pending)"
 msgstr "Ei mitään (odottaa lupaa)"
 
+#. 0
 msgid "None"
 msgstr "Ei mitään"
 
@@ -4261,6 +4268,14 @@
 msgid "Allow Buzz"
 msgstr "Salli äänimerkki"
 
+#. 2
+msgid "Chatty"
+msgstr "Juttelutuulella"
+
+#. 3
+msgid "Do Not Disturb"
+msgstr "Älä häiritse"
+
 msgid "Tune Artist"
 msgstr "Kappaleen esittäjä"
 
@@ -4506,10 +4521,6 @@
 "Äänimerkkiä ei voi lähettää, koska käyttäjä %s ei tue sitä tai ei halua "
 "vastaanottaa äänimerkkejä tällä hetkellä."
 
-#, c-format
-msgid "Buzzing %s..."
-msgstr "Töötätään tuttavalle %s..."
-
 #. Yahoo only supports one attention command: the 'buzz'.
 #. This is index number YAHOO_BUZZ.
 msgid "Buzz"
@@ -4520,6 +4531,10 @@
 msgstr "%s on töötännyt sinulle."
 
 #, c-format
+msgid "Buzzing %s..."
+msgstr "Töötätään tuttavalle %s..."
+
+#, c-format
 msgid "Unable to initiate media with %s: invalid JID"
 msgstr "Mediaa ei voi alustaa käyttäjän %s kanssa: virheellinen JID."
 
@@ -4554,9 +4569,8 @@
 msgid "configure:  Configure a chat room."
 msgstr "configure: Konfiguroi ryhmäkeskusteluhuone."
 
-#, fuzzy
 msgid "part [message]:  Leave the room."
-msgstr "part [huone]: Poistu huoneesta."
+msgstr "part [viesti]: Poistu huoneesta."
 
 msgid "register:  Register with a chat room."
 msgstr "register: Rekisteröidy ryhmäkeskusteluhuoneeseen."
@@ -4675,6 +4689,10 @@
 msgid "(Code %s)"
 msgstr "(Koodi %s)"
 
+#, fuzzy
+msgid "A custom smiley in the message is too large to send."
+msgstr "Viestiä ei voi lähettää: viesti on liian suuri."
+
 msgid "XML Parse error"
 msgstr "Virhe XML-jäsennyksessä"
 
@@ -5086,6 +5104,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "Uusi MSN-tuttavanimesi on liian pitkä."
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "Aseta tuttavanimi tilille %s."
+
 msgid "Set your friendly name."
 msgstr "Aseta tuttavanimesi."
 
@@ -5428,10 +5450,6 @@
 msgid "Windows Live ID authentication:Invalid response"
 msgstr "Windows Live ID -tunnistautuminen:Virheellinen vastaus"
 
-#, c-format
-msgid "%s just sent you a Nudge!"
-msgstr "Käyttäjä %s lähetti sinulle juuri tönäisyn!"
-
 msgid "The following users are missing from your addressbook"
 msgstr "Seuraavat käyttäjät puuttuvat osoitekirjastasi"
 
@@ -5447,9 +5465,8 @@
 msgid "Unknown error (%d)"
 msgstr "Tuntematon virhe (%d)"
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "Käyttäjää ei voi lisätä"
+msgstr "Käyttäjää ei voi poistaa"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "Mobiiliviestiä ei lähetetty, koska se on liian pitkä."
@@ -5685,28 +5702,86 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "%s on poistanut sinut tuttavistaan."
 
+#. 1
+msgid "Angry"
+msgstr "Vihainen"
+
+#. 2
+msgid "Excited"
+msgstr "Innostunut"
+
+#. 3
+msgid "Grumpy"
+msgstr "Äreä"
+
+#. 4
+msgid "Happy"
+msgstr "Onnellinen"
+
+#. 5
+msgid "In Love"
+msgstr "Rakastunut"
+
+#. 6
+msgid "Invincible"
+msgstr "Haavoittumaton"
+
+#. 7
+msgid "Sad"
+msgstr "Surullinen"
+
+#. 8
+msgid "Hot"
+msgstr "Tulinen"
+
+#. 9
+msgid "Sick"
+msgstr "Kipeä"
+
+#. 10
+msgid "Sleepy"
+msgstr "Unelias"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "Tämänhetkinen mielialasi"
+msgstr "Tämänhetkinen mieliala"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Käyttäjän mieliala"
-
-#, fuzzy
+msgstr "Uusi mieliala"
+
 msgid "Change your Mood"
-msgstr "Vaihda salasana"
-
-#, fuzzy
+msgstr "Vaihda mielialaa"
+
 msgid "How do you feel right now?"
-msgstr "En ole täällä juuri nyt"
+msgstr "Kuinka voit nyt?"
+
+#, fuzzy
+msgid "The PIN you entered is invalid."
+msgstr "Syötetty SecurID-avain on virheellinen"
+
+#, fuzzy
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "Syötetty SecurID-avain on virheellinen"
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr ""
+
+#, fuzzy
+msgid "The two PINs you entered do not match."
+msgstr "Uudet salasanat eivät täsmää."
+
+#, fuzzy
+msgid "The name you entered is invalid."
+msgstr "Syötetty SecurID-avain on virheellinen"
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr ""
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "Virhe kirjoituksessa"
+msgstr "Virhe päivitettäessä profiilia"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5717,30 +5792,26 @@
 msgstr ""
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "PIN"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "Varmista PIN"
 
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "Näyttö"
+msgstr "Näyttönimi"
 
 #. hidden
 msgid "Hide my number"
-msgstr ""
+msgstr "Piilota numeroni"
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
 msgstr "Matkapuhelinnumero"
 
-#, fuzzy
 msgid "Update your Profile"
-msgstr "Käyttäjän profiili"
+msgstr "Päivitä profiilia"
 
 msgid "Here you can update your MXit profile"
 msgstr ""
@@ -5757,14 +5828,12 @@
 msgstr "Omat tiedot"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "Vaihda salasana..."
+msgstr "Vaihda mielialaa..."
 
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "Vaihda salasana..."
+msgstr "Vaihda profiilia..."
 
 #. display splash-screen
 #, fuzzy
@@ -5772,49 +5841,53 @@
 msgstr "Näytä loki..."
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "Omat tiedot"
+msgstr "Tietoja..."
 
 #. the file is too big
 #, fuzzy
 msgid "The file you are trying to send is too large!"
 msgstr "Viesti on liian suuri."
 
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
-msgid "Logging In..."
-msgstr "Kirjaudutaan sisään"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
+#, fuzzy
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
 msgstr ""
 "Palvelimeen ei voi yhdistää. Ole hyvä, syötä palvelimen osoite jolle haluat "
 "yhdistää."
 
-#, fuzzy
+msgid "Logging In..."
+msgstr "Kirjaudutaan sisään..."
+
+#, fuzzy
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr ""
+"Palvelimeen ei voi yhdistää. Ole hyvä, syötä palvelimen osoite jolle haluat "
+"yhdistää."
+
 msgid "Connecting..."
-msgstr "Yhdistetään"
+msgstr "Yhdistetään..."
+
+#, fuzzy
+msgid "The nick name you entered is invalid."
+msgstr "Syötetty SecurID-avain on virheellinen"
+
+#, fuzzy
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "Syötetty SecurID-avain on virheellinen"
 
 #. mxit login name
 msgid "MXit Login Name"
 msgstr ""
 
 #. nick name
-#, fuzzy
 msgid "Nick Name"
 msgstr "Kutsumanimi"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "Rekisteröi uusi XMPP-tili"
+msgstr "Rekisteröi uusi MXit-tili"
 
 #, fuzzy
 msgid "Please fill in the following fields:"
@@ -5892,6 +5965,10 @@
 msgstr "Palvelimen tiedot"
 
 #, fuzzy
+msgid "Loading menu..."
+msgstr "Kirjaudutaan sisään"
+
+#, fuzzy
 msgid "Status Message"
 msgstr "Tilaviesti"
 
@@ -5937,6 +6014,11 @@
 msgid "Successfully Logged In..."
 msgstr "Liityttiin onnistuneesti Quniin"
 
+#, fuzzy, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr "%s on lähettänyt puhekeskustelukutsun, mitä ei vielä tueta."
+
 #, fuzzy
 msgid "Message Error"
 msgstr "XMPP-viestivirhe"
@@ -5945,6 +6027,18 @@
 msgstr ""
 
 #, fuzzy
+msgid "An internal MXit server error occurred."
+msgstr "Tuntematon varmennevirhe."
+
+#, fuzzy, c-format
+msgid "Login error: %s (%i)"
+msgstr "SASL-virhe: %s"
+
+#, fuzzy, c-format
+msgid "Logout error: %s (%i)"
+msgstr "SASL-virhe: %s"
+
+#, fuzzy
 msgid "Contact Error"
 msgstr "Yhteysvirhe"
 
@@ -6019,39 +6113,6 @@
 msgid "A connection error occurred to MXit. (read stage 0x06)"
 msgstr ""
 
-msgid "Angry"
-msgstr "Vihainen"
-
-msgid "Excited"
-msgstr "Innostunut"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Ryhmä"
-
-msgid "Happy"
-msgstr "Onnellinen"
-
-msgid "In Love"
-msgstr "Rakastunut"
-
-msgid "Invincible"
-msgstr "Haavoittumaton"
-
-msgid "Sad"
-msgstr "Surullinen"
-
-#, fuzzy
-msgid "Hot"
-msgstr "P_alvelin:"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Kutsumanimi"
-
-msgid "Sleepy"
-msgstr "Unelias"
-
 #, fuzzy
 msgid "Pending"
 msgstr "Lähetetään"
@@ -6064,16 +6125,14 @@
 msgid "Rejected"
 msgstr "Kieltäydy"
 
-#, fuzzy
 msgid "Deleted"
-msgstr "Poista"
+msgstr "Poistettu"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit-mainostus"
+
 msgid "More Information"
-msgstr "Työtiedot"
+msgstr "Lisätiedot"
 
 #, c-format
 msgid "No such user: %s"
@@ -6680,7 +6739,10 @@
 msgid "Server port"
 msgstr "Palvelimen portti"
 
-#. Note to translators: %s in this string is a URL
+#, fuzzy, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Odottamaton vastaus osoitteesta %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Odottamaton vastaus osoitteesta %s"
@@ -6699,6 +6761,11 @@
 msgid "Error requesting %s: %s"
 msgstr "Virhe pyydettäessä %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL ei salli näyttönimen todentamista tätä kautta"
 
@@ -6853,9 +6920,8 @@
 msgid "Cannot send SMS without accepting terms"
 msgstr ""
 
-#, fuzzy
 msgid "Cannot send SMS"
-msgstr "Tiedoston lähetys ei onnistu"
+msgstr "Tekstiviestin (SMS) lähetys ei onnistu"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
 #, fuzzy
@@ -7216,21 +7282,21 @@
 msgstr[0] "Et saanut %hu viestiä %s:lta tuntemattomasta syystä."
 msgstr[1] "Et saanut %hu viestiä %s:lta tuntemattomasta syystä."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "Viestiä ei voi lähettää (%s)."
+msgstr "Viestiä ei voi lähettää: %s (%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Viestiä ei voi lähettää: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "Viestiä ei voi lähettää käyttäjälle %s."
-
-#, fuzzy, c-format
+msgstr "Viestiä ei voi lähettää käyttäjälle %s: %s (%s)."
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "Viestiä ei voi lähettää käyttäjälle %s."
+msgstr "Viestiä ei voi lähettää käyttäjälle %s: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7259,14 +7325,6 @@
 "[Viestiä tältä käyttäjältä ei voi näyttää koska se sisälsi epäkelpoja "
 "merkkejä.]"
 
-#, fuzzy
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Viimeistä viestiä ei lähetetty koska olet ylittänyt taajuusrajan. Odota 10 "
-"sekuntia ja yritä uudelleen."
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Yhteytesi keskusteluhuoneeseen %s on katkennut."
@@ -11121,9 +11179,18 @@
 msgid "/Help/Online _Help"
 msgstr "/Ohje/O_hjeita verkossa"
 
+msgid "/Help/_Build Information"
+msgstr "/Ohje/Ohjelman _rakennustiedot"
+
 msgid "/Help/_Debug Window"
 msgstr "/Ohje/_Virheenjäljitysikkuna"
 
+msgid "/Help/De_veloper Information"
+msgstr "/Ohje/_Kehittäjätiedot"
+
+msgid "/Help/_Translator Information"
+msgstr "/Help/Kääntäjä_tiedot"
+
 msgid "/Help/_About"
 msgstr "/Ohje/Tietoj_a"
 
@@ -11400,12 +11467,6 @@
 msgid "Save Conversation"
 msgstr "Tallenna keskustelu"
 
-msgid "Find"
-msgstr "Etsi"
-
-msgid "_Search for:"
-msgstr "_Haettava termi:"
-
 msgid "Un-Ignore"
 msgstr "Huomioi"
 
@@ -11479,6 +11540,9 @@
 msgid "/Conversation/Se_nd File..."
 msgstr "/Keskustelu/_Lähetä tiedosto..."
 
+msgid "/Conversation/Get _Attention"
+msgstr "/Keskustelu/Hae huomiot_a"
+
 msgid "/Conversation/Add Buddy _Pounce..."
 msgstr "/Keskustelu/Lisää tuttava_ilmoitin..."
 
@@ -11560,6 +11624,9 @@
 msgid "/Conversation/Send File..."
 msgstr "/Keskustelu/Lähetä tiedosto..."
 
+msgid "/Conversation/Get Attention"
+msgstr "/Keskustelu/Hae huomiota"
+
 msgid "/Conversation/Add Buddy Pounce..."
 msgstr "/Keskustelu/Lisää tuttavailmoitin..."
 
@@ -11624,6 +11691,12 @@
 msgid "0 people in room"
 msgstr "0 ihmistä huoneessa"
 
+msgid "Close Find bar"
+msgstr "Sulje hakupalkki"
+
+msgid "Find:"
+msgstr "Etsi:"
+
 #, c-format
 msgid "%d person in room"
 msgid_plural "%d people in room"
@@ -11685,6 +11758,12 @@
 msgid "By account"
 msgstr "Tilin mukaan"
 
+msgid "Find"
+msgstr "Etsi"
+
+msgid "_Search for:"
+msgstr "_Haettava termi:"
+
 msgid "Save Debug Log"
 msgstr "Tallenna virheenjäljitysloki"
 
@@ -11903,15 +11982,20 @@
 msgid "Lao"
 msgstr "lao"
 
-msgid "Lithuanian"
-msgstr "liettua"
-
 msgid "Macedonian"
 msgstr "makedonia"
 
 msgid "Mongolian"
 msgstr "mongolia"
 
+#, fuzzy
+msgid "Marathi"
+msgstr "gudžarati"
+
+#, fuzzy
+msgid "Malay"
+msgstr "Mies"
+
 msgid "Bokmål Norwegian"
 msgstr "kirjanorja"
 
@@ -11927,6 +12011,10 @@
 msgid "Occitan"
 msgstr "oksitaani"
 
+#, fuzzy
+msgid "Oriya"
+msgstr "Opera"
+
 msgid "Punjabi"
 msgstr "punjabi"
 
@@ -11981,6 +12069,10 @@
 msgid "Turkish"
 msgstr "turkki"
 
+#, fuzzy
+msgid "Ukranian"
+msgstr "ukraina"
+
 msgid "Urdu"
 msgstr "urdu"
 
@@ -12002,69 +12094,64 @@
 msgid "Amharic"
 msgstr "amhara"
 
+msgid "Lithuanian"
+msgstr "liettua"
+
+#, c-format
+msgid ""
+"%s is a messaging client based on libpurple which is capable of connecting "
+"to multiple messaging services at once.  %s is written in C using GTK+.  %s "
+"is released, and may be modified and redistributed,  under the terms of the "
+"GPL version 2 (or later).  A copy of the GPL is distributed with %s.  %s is "
+"copyrighted by its contributors, a list of whom is also distributed with %"
+"s.  There is no warranty for %s.<BR><BR>"
+msgstr ""
+"%s on graafinen libpurple-kirjastoon perustuva pikaviestinsovellus, joka "
+"kykenee samanaikaisesti yhdistämään useisiin eri viestinpalveluihin. %s on "
+"ohjelmoitu C-ohjelmointikielellä, käyttäen Gtk+-kirjastoa. Voit muokata ja "
+"jakaa %s-ohjelmistoa GPL-lisenssin (versio 2 tai myöhempi) ehdoilla. Kopio "
+"GPL:stä on sisällytetty %s-ohjelmistojakeluun. %sin tekijänoikeudet ovat sen "
+"tekemiseen osallistuneilla, joista täydellinen luettelo on niinikään "
+"sisällytetty %s-jakelupakettiin. %sille ei anneta minkäänlaista takuuta."
+"<BR><BR>"
+
+#, c-format
+msgid ""
+"<FONT SIZE=\"4\"><B>Helpful Resources</B></FONT><BR>\t<A HREF=\"%s"
+"\">Website</A><BR>\t<A HREF=\"%s\">Frequently Asked Questions</A><BR>\tIRC "
+"Channel: #pidgin on irc.freenode.net<BR>\tXMPP MUC: devel@conference.pidgin."
+"im<BR><BR>"
+msgstr ""
+
+#, c-format
+msgid ""
+"<font size=\"4\"><b>Help from other Pidgin users</b></font> is available by "
+"e-mailing <a href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/"
+">This is a <b>public</b> mailing list! (<a href=\"http://pidgin.im/pipermail/"
+"support/\">archive</a>)<br/>We can't help with third-party protocols or "
+"plugins!<br/>This list's primary language is <b>English</b>.  You are "
+"welcome to post in another language, but the responses may be less helpful."
+"<br/>"
+msgstr ""
+"<font size=\"4\"><b>Apua muilta Pidgin-käyttäjiltä:</b></font> <a href="
+"\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>Tämä on <b>julkinen</"
+"b> sähköpostilista! (<a href=\"http://pidgin.im/pipermail/support/"
+"\">arkisto</a>)<br/>Emme voi auttaa kolmannen osapuolen yhteyskäytännöissä "
+"tai liitännäisissä.<br/>Tämän listan pääkieli on <b>englanti</b>. Voit "
+"käyttää myös muuta kieltä, mutta auttavan vastauksen saaminen voi tällöin "
+"olla hankalampaa.<br/>"
+
 #, c-format
 msgid "About %s"
 msgstr "Tietoja %sistä"
 
-#, c-format
-msgid ""
-"%s is a graphical modular messaging client based on libpurple which is "
-"capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, "
-"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and "
-"QQ all at once.  It is written using GTK+.<BR><BR>You may modify and "
-"redistribute the program under the terms of the GPL (version 2 or later).  A "
-"copy of the GPL is contained in the 'COPYING' file distributed with %s.  %s "
-"is copyrighted by its contributors.  See the 'COPYRIGHT' file for the "
-"complete list of contributors.  We provide no warranty for this program."
-"<BR><BR>"
-msgstr ""
-"%s on graafinen ja modulaarinen libpurple-kirjastoon perustuva "
-"pikaviestinsovellus, joka kykenee käyttämään AIM-, MSN-, Yahoo!-, XMPP-, "
-"ICQ-, IRC-, SILC-, SIP/SIMPLE-, Novell GroupWise-, Lotus Sametime-, "
-"Bonjour-, Zephyr-, MySpaceIM-, Gadu-Gadu- ja QQ-yhteyskäytäntöjä "
-"samanaikaisesti. Se on ohjelmoitu käyttäen Gtk+-kirjastoa.<BR><BR>Voit "
-"muokata ja jakaa ohjelmaa GPL-lisenssin (versio 2 tai myöhempi) ehdoilla. "
-"Kopio GPL:stä on sisällytetty \"COPYING\"-tiedostoon, joka tulee %sin "
-"mukana. %sin tekijänoikeudet on sen tekemiseen osallistuneilla. Täydellinen "
-"luettelo osallistuneista löytyy \"COPYRIGHT\"-tiedostosta. Tekijät eivät "
-"anna ohjelmalle minkäänlaista takuuta.<BR><BR>"
-
-#, c-format
-msgid ""
-"<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
-"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
-msgstr ""
-"<FONT SIZE=\"4\">UKK:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
-"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
-
-#, c-format
-msgid ""
-"<font size=\"4\">Help from other Pidgin users:</font> <a href=\"mailto:"
-"support@pidgin.im\">support@pidgin.im</a><br/>This is a <b>public</b> "
-"mailing list! (<a href=\"http://pidgin.im/pipermail/support/\">archive</a>)"
-"<br/>We can't help with 3rd party protocols or plugins!<br/>This list's "
-"primary language is <b>English</b>.  You are welcome to post in another "
-"language, but the responses may be less helpful.<br/><br/>"
-msgstr ""
-"<font size=\"4\">Apua muilta Pidgin-käyttäjiltä:</font> <a href=\"mailto:"
-"support@pidgin.im\">support@pidgin.im</a><br/>Tämä on <b>julkinen</b> "
-"sähköpostilista! (<a href=\"http://pidgin.im/pipermail/support/\">archive</"
-"a>)<br/>Emme voi auttaa kolmannen osapuolen yhteyskäytännöissä tai "
-"liitännäisissä.<br/>Tämän listan pääkieli on <b>englanti</b>. Voit käyttää "
-"myös muuta kieltä, mutta auttavan vastauksen saaminen voi tällöin olla "
-"hankalampaa.<br/><br/>"
-
-#, c-format
-msgid ""
-"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
-msgstr ""
-"<FONT SIZE=\"4\">IRC-kanava:</FONT> #pidgin palvelimella irc.freenode."
-"net<BR><BR>"
-
-#, c-format
-msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
-msgstr ""
-"<FONT SIZE=\"4\">XMPP-keskustelu:</FONT> devel@conference.pidgin.im<BR><BR>"
+msgid "Build Information"
+msgstr "Rakennustiedot"
+
+#. End of not to be translated section
+#, c-format
+msgid "%s Build Information"
+msgstr "%s – rakennustiedot"
 
 msgid "Current Developers"
 msgstr "Nykyiset kehittäjät"
@@ -12078,14 +12165,19 @@
 msgid "Retired Crazy Patch Writers"
 msgstr "Lopettaneet korjauspäivitysten kirjoittajat"
 
+#, c-format
+msgid "%s Developer Information"
+msgstr "%s – kehittäjätiedot"
+
 msgid "Current Translators"
 msgstr "Nykyiset kielenkääntäjät"
 
 msgid "Past Translators"
 msgstr "Aikaisemmat kielenkääntäjät"
 
-msgid "Debugging Information"
-msgstr "Virheenjäljitystietoja"
+#, c-format
+msgid "%s Translator Information"
+msgstr "%s – kääntäjätiedot"
 
 msgid "_Name"
 msgstr "_Nimi"
@@ -12371,15 +12463,6 @@
 "\n"
 "Oletetaan PNG-kuvaksi."
 
-msgid ""
-"Unrecognized file type\n"
-"\n"
-"Defaulting to PNG."
-msgstr ""
-"Tunnistamaton tiedostotyyppi\n"
-"\n"
-"Oletetaan PNG-kuvaksi."
-
 #, c-format
 msgid ""
 "<span size='larger' weight='bold'>Error saving image</span>\n"
@@ -12390,16 +12473,6 @@
 "\n"
 "%s"
 
-#, c-format
-msgid ""
-"Error saving image\n"
-"\n"
-"%s"
-msgstr ""
-"Virhe tallennettaessa kuvaa\n"
-"\n"
-"%s"
-
 msgid "Save Image"
 msgstr "Tallenna kuva"
 
@@ -12506,6 +12579,9 @@
 msgid "Insert Smiley"
 msgstr "Lisää hymiö"
 
+msgid "Send Attention"
+msgstr "Lähetä huomio"
+
 msgid "<b>_Bold</b>"
 msgstr "<b>_Lihavoi</b>"
 
@@ -12551,6 +12627,9 @@
 msgid "_Smile!"
 msgstr "_Hymyile!"
 
+msgid "_Attention!"
+msgstr "_Huomio!"
+
 msgid "Log Deletion Failed"
 msgstr "Lokin poistaminen epäonnistui"
 
@@ -12609,12 +12688,11 @@
 "Käyttö: %s [VALITSIN]...\n"
 "\n"
 
-#, fuzzy
 msgid "DIR"
-msgstr "IRC"
+msgstr "HAK"
 
 msgid "use DIR for config files"
-msgstr "käytä hakemistoa DIR asetustiedostoille"
+msgstr "käytä hakemistoa HAK asetustiedostoille"
 
 msgid "print debugging messages to stdout"
 msgstr "tulosta virheenjäljitysviestit standardiulostuloon"
@@ -12904,21 +12982,19 @@
 msgstr "Tuntematon... Raportoi tästä!"
 
 msgid "(Custom)"
-msgstr ""
-
-#, fuzzy
-msgid "(Default)"
-msgstr "(oletus)"
+msgstr "(oma)"
+
+msgid "Penguin Pimps"
+msgstr "Penguin Pimps"
 
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Pidginin oletusääniteema"
+
 msgid "The default Pidgin buddy list theme"
-msgstr "Pidginin tuttavaluettelon teemaeditori"
+msgstr "Pidginin oletustuttavaluetteloteema"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "Pidginin oletustilakuvaketeema"
 
 msgid "Theme failed to unpack."
 msgstr "Teeman purkaminen epäonnistui."
@@ -12929,18 +13005,30 @@
 msgid "Theme failed to copy."
 msgstr "Teeman kopioiminen epäonnistui."
 
-msgid "Install Theme"
-msgstr "Asenna teema"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
-"Valitse haluamasi hymiöteema alla olevasta listasta. Uudet teemat voi "
-"asentaa vedä&pudota-menetelmällä pudottamalla ne teemalistaan."
-
-msgid "Icon"
-msgstr "Kuvake"
+msgid "Theme Selections"
+msgstr "Teemavalinnat"
+
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"Valitse haluamasi teema alla olevasta luettelosta.\n"
+"Uusia teemoja voi asentaa vedä&pudota-menetelmällä pudottamalla ne "
+"teemaluetteloon."
+
+msgid "Buddy List Theme:"
+msgstr "Tuttavaluettelon teema:"
+
+msgid "Status Icon Theme:"
+msgstr "Tilakuvaketeema:"
+
+msgid "Sound Theme:"
+msgstr "Ääniteema:"
+
+msgid "Smiley Theme:"
+msgstr "Hymiöteema:"
 
 msgid "Keyboard Shortcuts"
 msgstr "Pikanäppäimet"
@@ -12948,10 +13036,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "S_ulje keskustelut Escape-näppäimellä"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "Tuttavaluettelon teema"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "Ilmoitusalueen kuvake"
@@ -13038,9 +13122,6 @@
 msgid "Font"
 msgstr "Kirjasin"
 
-msgid "Use document font from _theme"
-msgstr "Käytä asiakirjojen kirjasinta _teemasta"
-
 msgid "Use font from _theme"
 msgstr "Käytä kirjasinta _teemasta"
 
@@ -13063,15 +13144,13 @@
 msgid "Cannot start browser configuration program."
 msgstr "Selaimen asetusohjelmaa ei voi käynnistää."
 
-#, fuzzy
 msgid "Disabled"
-msgstr "_Poista käytöstä"
+msgstr "Poissa käytöstä"
 
 #, c-format
 msgid "Use _automatically detected IP address: %s"
 msgstr "Käytä _automaattisesti tunnistettua IP-osoitetta: %s"
 
-#, fuzzy
 msgid "ST_UN server:"
 msgstr "ST_UN-palvelin:"
 
@@ -13087,78 +13166,27 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "_Ota käyttöön automaattinen reitittimen porttien uudelleenohjaus"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "_Aseta kuunneltava porttialue"
-
-#, fuzzy
+msgstr "Aseta kuunneltava porttialue _käsin:"
+
 msgid "_Start:"
-msgstr "_Käynnistä "
-
-#, fuzzy
+msgstr "_Alku:"
+
 msgid "_End:"
-msgstr "_Laajenna"
+msgstr "_Loppu:"
 
 #. TURN server
 msgid "Relay Server (TURN)"
 msgstr "Edelleenvälityspalvelin (TURN)"
 
-#, fuzzy
 msgid "_TURN server:"
-msgstr "ST_UN-palvelin:"
-
-#, fuzzy
+msgstr "_TURN-palvelin:"
+
 msgid "Use_rname:"
-msgstr "Käyttäjänimi:"
-
-#, fuzzy
+msgstr "Käyttäjäni_mi:"
+
 msgid "Pass_word:"
-msgstr "Salasana:"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "Välipalvelin &amp; selain"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>Välipalvelimen asetusohjelmaa ei löydy.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>Selaimen asetusohjelmaa ei löydy.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"Välipalvelimen & selaimen asetukset määritetään \n"
-"Gnomen asetuksissa"
-
-msgid "Configure _Proxy"
-msgstr "Aseta _välipalvelin"
-
-msgid "Configure _Browser"
-msgstr "Aseta _selain"
-
-msgid "Proxy Server"
-msgstr "Välipalvelin"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Käytä etä-DNS:ää SOCKS4-välipalvelimien kanssa"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "Välipalvelimen _tyyppi:"
-
-msgid "No proxy"
-msgstr "Ei välipalvelinta"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "_Portti:"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Käyttäjänimi:"
+msgstr "Sala_sana:"
 
 msgid "Seamonkey"
 msgstr "Seamonkey"
@@ -13199,6 +13227,18 @@
 msgid "Browser Selection"
 msgstr "Selaimen valinta"
 
+#, fuzzy
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr ""
+"Välipalvelimen & selaimen asetukset määritetään \n"
+"Gnomen asetuksissa"
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>Selaimen asetusohjelmaa ei löydy.</b>"
+
+msgid "Configure _Browser"
+msgstr "Aseta _selain"
+
 msgid "_Browser:"
 msgstr "_Selain:"
 
@@ -13222,6 +13262,40 @@
 "_Komento:\n"
 "(URL:ksi %s)"
 
+msgid "Proxy Server"
+msgstr "Välipalvelin"
+
+#, fuzzy
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr ""
+"Välipalvelimen & selaimen asetukset määritetään \n"
+"Gnomen asetuksissa"
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>Välipalvelimen asetusohjelmaa ei löydy.</b>"
+
+msgid "Configure _Proxy"
+msgstr "Aseta _välipalvelin"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+#, fuzzy
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Käytä etä-DNS:ää SOCKS4-välipalvelimien kanssa"
+
+#, fuzzy
+msgid "Proxy t_ype:"
+msgstr "Välipalvelimen _tyyppi:"
+
+msgid "No proxy"
+msgstr "Ei välipalvelinta"
+
+msgid "P_ort:"
+msgstr "P_ortti:"
+
+msgid "User_name:"
+msgstr "Käyttäjä_nimi:"
+
 msgid "Log _format:"
 msgstr "Lokin _muoto:"
 
@@ -13305,25 +13379,18 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Perustuen näppäimistön tai hiiren käyttöön"
 
+msgid "_Minutes before becoming idle:"
+msgstr "_Minuutteja ennen jouten olevaksi asettamista:"
+
+msgid "Change to this status when _idle:"
+msgstr "Tila johon vaihdetaan _jouten ollessa:"
+
 msgid "_Auto-reply:"
 msgstr "_Automaattivastaus:"
 
 msgid "When both away and idle"
 msgstr "Poissa ja jouten ollessa"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Automaattinen poissaoloasetus"
-
-msgid "_Minutes before becoming idle:"
-msgstr "_Minuutteja ennen jouten olevaksi asettamista:"
-
-msgid "Change status when _idle"
-msgstr "Vaihda tila, kun ollaan _jouten"
-
-msgid "Change _status to:"
-msgstr "Vaihda tila seuraavaksi:"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "Tila käynnistettäessä"
@@ -13337,15 +13404,15 @@
 msgid "Interface"
 msgstr "Käyttöliittymä"
 
-msgid "Smiley Themes"
-msgstr "Hymiöteemat"
-
 msgid "Browser"
 msgstr "Selain"
 
 msgid "Status / Idle"
 msgstr "Tila / jouten"
 
+msgid "Themes"
+msgstr "Teemat"
+
 msgid "Allow all users to contact me"
 msgstr "Salli kaikkien käyttäjien ottaa minuun yhteyttä"
 
@@ -13501,6 +13568,9 @@
 msgid "Custom Smiley Manager"
 msgstr "Omien hymiöiden hallinta"
 
+msgid "Attention received"
+msgstr "Huomio vastanotettu"
+
 msgid "Select Buddy Icon"
 msgstr "Valitse tuttavakuvake"
 
@@ -13580,10 +13650,13 @@
 "Voit sisällyttää kuvan tähän viestiin tai käyttää sitä tuttavakuvakkeena "
 "tälle käyttäjälle"
 
-#. I don't know if we really want to do anything here.  Most of the desktop item types are crap like
-#. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really
-#. * send.  The only logical one is "Application," but do we really want to send a binary and nothing else?
-#. * Probably not.  I'll just give an error and return.
+#. I don't know if we really want to do anything here.  Most of
+#. * the desktop item types are crap like "MIME Type" (I have no
+#. * clue how that would be a desktop item) and "Comment"...
+#. * nothing we can really send.  The only logical one is
+#. * "Application," but do we really want to send a binary and
+#. * nothing else? Probably not.  I'll just give an error and
+#. * return.
 #. The original patch sent the icon used by the launcher.  That's probably wrong
 msgid "Cannot send launcher"
 msgstr "Käynnistintä ei voi lähettää"
@@ -13615,17 +13688,6 @@
 msgid "Could not set icon"
 msgstr "Kuvaketta ei voi asettaa"
 
-#, c-format
-msgid "Failed to open file '%s': %s"
-msgstr "Tiedostoa \"%s\" ei voi avata: %s"
-
-#, c-format
-msgid ""
-"Failed to load image '%s': reason not known, probably a corrupt image file"
-msgstr ""
-"Kuvaa \"%s\" ei voi ladata: syy ei ole tiedossa, mahdollisesti vioittunut "
-"kuvatiedosto"
-
 msgid "_Open Link"
 msgstr "_Avaa linkki"
 
@@ -13650,6 +13712,10 @@
 msgid "_Save File"
 msgstr "_Tallenna tiedosto"
 
+#, fuzzy
+msgid "Do you really want to clear?"
+msgstr "Haluatko varmasti poistaa %s:n?"
+
 msgid "Select color"
 msgstr "Valitse väri"
 
@@ -13688,9 +13754,6 @@
 msgid "Pidgin smileys"
 msgstr "Pidgin-hymiöt"
 
-msgid "Penguin Pimps"
-msgstr "Penguin Pimps"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Tämän valitseminen ottaa graafiset hymiöt pois käytöstä"
 
@@ -14324,6 +14387,9 @@
 msgid "Conversation Entry"
 msgstr "Keskustelumerkintä"
 
+msgid "Conversation History"
+msgstr "Keskusteluhistoria"
+
 msgid "Request Dialog"
 msgstr "Pyyntövalintaikkuna"
 
@@ -14505,6 +14571,9 @@
 msgid "Replaces text in outgoing messages according to user-defined rules."
 msgstr "Korvaa lähetettävän tekstin käyttäjän määritelmän mukaan."
 
+msgid "Extended Away"
+msgstr "Pidennetty poissaolo"
+
 msgid "Just logged in"
 msgstr "Juuri kirjautunut sisään"
 
@@ -14840,15 +14909,6 @@
 msgid "<font color='#777777'>Not connected to XMPP</font>"
 msgstr "<font color='#777777'>Ei yhdistetty XMPP:hen</font>"
 
-msgid "Insert an <iq/> stanza."
-msgstr "Lisää <iq/>-lohko."
-
-msgid "Insert a <presence/> stanza."
-msgstr "Lisää <presence/>-lohko."
-
-msgid "Insert a <message/> stanza."
-msgstr "Lisää <message/>-lohko."
-
 #. *< name
 #. *< version
 #. *  summary
@@ -14861,6 +14921,106 @@
 "Tätä liitännäistä voidaan käyttää XMPP-palvelimien tai -asiakasohjelmien "
 "virheenjäljitykseen."
 
+#~ msgid "Error creating conference."
+#~ msgstr "Virhe luotaessa konferenssia."
+
+#~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr ""
+#~ "Vaihtoehtoisia XMPP-yhteystapoja ei löytynyt suoran yhdistämisen "
+#~ "epäonnistumisen jälkeen."
+
+#~ msgid "%s just sent you a Nudge!"
+#~ msgstr "Käyttäjä %s lähetti sinulle juuri tönäisyn!"
+
+#, fuzzy
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Viimeistä viestiä ei lähetetty koska olet ylittänyt taajuusrajan. Odota "
+#~ "10 sekuntia ja yritä uudelleen."
+
+#~ msgid ""
+#~ "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
+#~ "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
+#~ msgstr ""
+#~ "<FONT SIZE=\"4\">UKK:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
+#~ "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
+
+#~ msgid ""
+#~ "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
+#~ msgstr ""
+#~ "<FONT SIZE=\"4\">IRC-kanava:</FONT> #pidgin palvelimella irc.freenode."
+#~ "net<BR><BR>"
+
+#~ msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
+#~ msgstr ""
+#~ "<FONT SIZE=\"4\">XMPP-keskustelu:</FONT> devel@conference.pidgin."
+#~ "im<BR><BR>"
+
+#~ msgid "Debugging Information"
+#~ msgstr "Virheenjäljitystietoja"
+
+#~ msgid ""
+#~ "Unrecognized file type\n"
+#~ "\n"
+#~ "Defaulting to PNG."
+#~ msgstr ""
+#~ "Tunnistamaton tiedostotyyppi\n"
+#~ "\n"
+#~ "Oletetaan PNG-kuvaksi."
+
+#~ msgid ""
+#~ "Error saving image\n"
+#~ "\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Virhe tallennettaessa kuvaa\n"
+#~ "\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "(Default)"
+#~ msgstr "(oletus)"
+
+#~ msgid "Install Theme"
+#~ msgstr "Asenna teema"
+
+#~ msgid "Icon"
+#~ msgstr "Kuvake"
+
+#~ msgid "Use document font from _theme"
+#~ msgstr "Käytä asiakirjojen kirjasinta _teemasta"
+
+#~ msgid "Proxy Server &amp; Browser"
+#~ msgstr "Välipalvelin &amp; selain"
+
+#~ msgid "Auto-away"
+#~ msgstr "Automaattinen poissaoloasetus"
+
+#~ msgid "Change _status to:"
+#~ msgstr "Vaihda tila seuraavaksi:"
+
+#~ msgid "Failed to open file '%s': %s"
+#~ msgstr "Tiedostoa \"%s\" ei voi avata: %s"
+
+#~ msgid ""
+#~ "Failed to load image '%s': reason not known, probably a corrupt image file"
+#~ msgstr ""
+#~ "Kuvaa \"%s\" ei voi ladata: syy ei ole tiedossa, mahdollisesti vioittunut "
+#~ "kuvatiedosto"
+
+#~ msgid "Insert an <iq/> stanza."
+#~ msgstr "Lisää <iq/>-lohko."
+
+#~ msgid "Insert a <presence/> stanza."
+#~ msgstr "Lisää <presence/>-lohko."
+
+#~ msgid "Insert a <message/> stanza."
+#~ msgstr "Lisää <message/>-lohko."
+
 #, fuzzy
 #~ msgid "The root certificate this one claims to be issued by is unknown."
 #~ msgstr "Tämän varmenteen myöntäjän juurivarmenne on tuntematon Pidginille."
@@ -16013,9 +16173,6 @@
 #~ msgid "_Send To"
 #~ msgstr "_Lähetä käyttäjälle"
 
-#~ msgid "Conversation History"
-#~ msgstr "Keskusteluhistoria"
-
 #~ msgid "Log Viewer"
 #~ msgstr "Lokikatselin"
 
@@ -16040,9 +16197,6 @@
 #~ msgid "Attention! %s %s."
 #~ msgstr "Huomio. %s %s."
 
-#~ msgid "Attention!"
-#~ msgstr "Huomio"
-
 #~ msgid "Attention! You have been %s."
 #~ msgstr "Huomio, sinut on: %s."
 
@@ -17593,9 +17747,6 @@
 #~ msgid "Burmese"
 #~ msgstr "burma"
 
-#~ msgid "Ukrainian"
-#~ msgstr "ukraina"
-
 #~ msgid "Xhosa"
 #~ msgstr "xhosa"
 
--- a/po/fr.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/fr.po	Thu Feb 18 21:38:43 2010 +0000
@@ -4,7 +4,7 @@
 # Copyright (C) 2002, Stéphane Pontier <stephane.pontier@free.fr>
 # Copyright (C) 2002, Stéphane Wirtel <stephane.wirtel@belgacom.net>
 # Copyright (C) 2002, Loïc Jeannin <loic.jeannin@free.fr>
-# Copyright (C) 2002-2009, Éric Boumaour <zongo_fr@users.sourceforge.net>
+# Copyright (C) 2002-2010, Éric Boumaour <zongo_fr@users.sourceforge.net>
 #
 # This file is distributed under the same license as the Pidgin package.
 #
@@ -21,8 +21,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-28 15:44+0100\n"
-"PO-Revision-Date: 2009-11-28 15:03+0100\n"
+"POT-Creation-Date: 2010-02-11 19:11+0100\n"
+"PO-Revision-Date: 2010-02-11 19:10+0100\n"
 "Last-Translator: Éric Boumaour <zongo_fr@users.sourceforge.net>\n"
 "Language-Team: fr <fr@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -1961,6 +1961,9 @@
 "« %s » n'est pas un fichier régulier. Je refuse lâchement d'écraser ce "
 "fichier.\n"
 
+msgid "File is not readable."
+msgstr "Impossible de lire le fichier."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s veut vous envoyer %s (%s)"
@@ -3838,6 +3841,13 @@
 "Le serveur demande une authentification en texte non chiffré au travers d'un "
 "flux crypté."
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "Réponse non valide du serveur"
+
+msgid "Server does not use any supported authentication method"
+msgstr "Le serveur utilise une méthode d'authentification non supportée"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3849,15 +3859,6 @@
 msgid "Plaintext Authentication"
 msgstr "Authentification en texte non chiffré"
 
-msgid "SASL authentication failed"
-msgstr "Échec de l'authentification SASL"
-
-msgid "Invalid response from server"
-msgstr "Réponse non valide du serveur"
-
-msgid "Server does not use any supported authentication method"
-msgstr "Le serveur utilise une méthode d'authentification non supportée"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr ""
 "Vous voulez un chiffrement, mais il n'est pas disponible sur ce serveur."
@@ -3865,10 +3866,29 @@
 msgid "Invalid challenge from server"
 msgstr "Demande d'accès non valide du serveur"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr ""
+"Le serveur pense que l'authentification est terminée, et le client non."
+
+msgid "SASL authentication failed"
+msgstr "Échec de l'authentification SASL"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "Erreur SASL : %s"
 
+msgid "Unable to canonicalize username"
+msgstr "Impossible de normaliser le nom d'utilisateur"
+
+msgid "Unable to canonicalize password"
+msgstr "Impossible de normaliser le mot de passe"
+
+msgid "Malicious challenge from server"
+msgstr "Challenge malicieux du serveur"
+
+msgid "Unexpected response from server"
+msgstr "Réponse non attendue du serveur"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "Le gestionnaire de connexion BOSH a interrompu votre session."
 
@@ -3969,13 +3989,16 @@
 msgid "Resource"
 msgstr "Ressource"
 
+msgid "Uptime"
+msgstr "Connecté depuis"
+
+msgid "Logged Off"
+msgstr "Deconnecté"
+
 #, c-format
 msgid "%s ago"
 msgstr "il y a %s"
 
-msgid "Logged Off"
-msgstr "Deconnecté"
-
 msgid "Middle Name"
 msgstr "Deuxième prénom"
 
@@ -4167,13 +4190,6 @@
 msgid "Ping timed out"
 msgstr "Pas de réponse au ping"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"Impossible de trouver une autre méthode de connexion XMPP après l'échec de "
-"connexion directe."
-
 msgid "Invalid XMPP ID"
 msgstr "Identifiant XMPP non valide."
 
@@ -4732,6 +4748,11 @@
 msgid "(Code %s)"
 msgstr "(Code %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr ""
+"Une frimousse personnalisée dans le message est trop grosse pour être "
+"envoyée."
+
 msgid "XML Parse error"
 msgstr "Erreur de lecture du XML"
 
@@ -5148,6 +5169,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "Le nouvel alias MSN est trop long"
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "Changer l'alias pour %s."
+
 msgid "Set your friendly name."
 msgstr "Changer l'alias"
 
@@ -6746,7 +6771,10 @@
 msgid "Server port"
 msgstr "Port du serveur"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Réception d'une réponse non attendue de %s : %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Réception d'une réponse non attendue de %s"
@@ -6765,6 +6793,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Erreur à la demande de %s : %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Le serveur s'attend à ce que vous répondiez à un CAPTCHA pour vous "
+"connecter, mais ce client ne les supporte pas encore."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL n'autorise pas votre nom d'utilisateur pour authentification ici."
 
@@ -7335,13 +7370,6 @@
 "[Impossible d'afficher un message de cet utilisateur car il contient des "
 "caractères non valides.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"La dernière action n'a pas pu être effectuée car vous avez dépassé le quota "
-"limite. Veuillez attendre 10 secondes et réessayer.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Vous avez été déconnecté du salon %s"
@@ -12011,15 +12039,15 @@
 msgid "Lao"
 msgstr "Lao"
 
-msgid "Lithuanian"
-msgstr "Lituanien"
-
 msgid "Macedonian"
 msgstr "Macédonien"
 
 msgid "Mongolian"
 msgstr "Mongol"
 
+msgid "Marathi"
+msgstr "Marâthî"
+
 msgid "Malay"
 msgstr "Malaisien"
 
@@ -12038,6 +12066,9 @@
 msgid "Occitan"
 msgstr "Occitan"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Panjâbî"
 
@@ -12116,6 +12147,9 @@
 msgid "Amharic"
 msgstr "Amharique"
 
+msgid "Lithuanian"
+msgstr "Lituanien"
+
 #, c-format
 msgid "About %s"
 msgstr "À propos de %s"
@@ -13761,6 +13795,9 @@
 msgid "_Save File"
 msgstr "_Sauver le fichier"
 
+msgid "Do you really want to clear?"
+msgstr "Êtes-vous sûr de vouloir l'effacer ?"
+
 msgid "Select color"
 msgstr "Choisir la couleur"
 
@@ -14978,9 +15015,19 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Ce plugin est utile pour débugger les clients ou serveurs XMPP."
 
-#, fuzzy
-#~ msgid "(Default)"
-#~ msgstr "(défaut)"
+#~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr ""
+#~ "Impossible de trouver une autre méthode de connexion XMPP après l'échec "
+#~ "de connexion directe."
+
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "La dernière action n'a pas pu être effectuée car vous avez dépassé le "
+#~ "quota limite. Veuillez attendre 10 secondes et réessayer.\n"
 
 #~ msgid "Install Theme"
 #~ msgstr "Installer un thème"
@@ -14994,12 +15041,6 @@
 #~ msgid "Change _status to:"
 #~ msgstr "_Changer l'état en :"
 
-#, fuzzy
-#~ msgid "The root certificate this one claims to be issued by is unknown."
-#~ msgstr ""
-#~ "Le certificat racine dont est prétendu issu ce certificat est inconnu de "
-#~ "Pidgin."
-
 #~ msgid "Send instant messages over multiple protocols"
 #~ msgstr "Envoie des messages instantanés en utilisant divers protocoles"
 
--- a/po/gu.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/gu.po	Thu Feb 18 21:38:43 2010 +0000
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-14 12:14-0800\n"
-"PO-Revision-Date: 2010-01-12 10:43+0530\n"
+"POT-Creation-Date: 2010-02-11 21:51-0800\n"
+"PO-Revision-Date: 2010-02-11 16:40+0530\n"
 "Last-Translator: Sweta Kothari <swkothar@redhat.com>\n"
 "Language-Team: Gujarati\n"
 "MIME-Version: 1.0\n"
@@ -708,6 +708,11 @@
 "background&gt;: black, red, green, blue, white, gray, darkgray, magenta, "
 "cyan, default<br><br>EXAMPLE:<br>    msgcolor send cyan default"
 msgstr ""
+"msgcolor &lt;વર્ગ&gt; &lt;અગ્રભાગ&gt; &lt;પાશ્ર્વભાગ&gt;: વાર્તાલાપ વિન્ડોમાં "
+"સંદેશાઓનાં વિવિધ વર્ગો માટે રંગને સુયોજિત કરો.<br>    &lt;વર્ગ&gt;: પ્રાપ્ત કરો, મોકલો, "
+"પ્રકાશિત કરો, ક્રિયા, ટાઇમસ્ટેમ્પ<br>    &lt;અગ્રભાગ/પાશ્ર્વભાગ&gt;: કાળો, લાલ, "
+"લીલો, વાદળી, સફેદ, ભૂખરો, ઘટ્ટભૂખરો, જાંબલી, સાયન, મૂળભૂત<br><br>ઉદાહરણ:<br>    "
+"msgcolor send cyan default"
 
 msgid "Unable to open file."
 msgstr "ફાઈલ ખોલવામાં અસમર્થ."
@@ -858,7 +863,7 @@
 msgstr "કોલ કરી રહ્યા છે..."
 
 msgid "Hangup"
-msgstr ""
+msgstr "સ્તબ્ધ"
 
 #. Number of actions
 msgid "Accept"
@@ -1693,7 +1698,7 @@
 #. Scheme name
 #. Pool name
 msgid "SSL Peers Cache"
-msgstr ""
+msgstr "SSL પિઅર્સ કેશ"
 
 #. Make messages
 #, c-format
@@ -1866,7 +1871,7 @@
 
 #, c-format
 msgid "Resolver process exited without answering our request"
-msgstr ""
+msgstr "આપણી સૂચનાનો જવાબ આપ્યા વગર રિઝૉલ્વર પ્રક્રિયા બહાર નીકળી ગઇ"
 
 #, c-format
 msgid "Error converting %s to punycode: %d"
@@ -2463,7 +2468,7 @@
 #. *< priority
 #. *< id
 msgid "Join/Part Hiding"
-msgstr ""
+msgstr "જોડાવો/અંશત: અદ્રશ્ય કરો"
 
 #. *< name
 #. *< version
@@ -2604,7 +2609,7 @@
 msgstr "મોનો પ્લગઇન લોડર"
 
 msgid "Loads .NET plugins with Mono."
-msgstr ""
+msgstr "Mono સાથે .NET પ્લગઇનોને લાવે છે."
 
 msgid "Add new line in IMs"
 msgstr "IMs માં નવી લીટીને ઉમેરો"
@@ -2626,9 +2631,8 @@
 
 #. *< name
 #. *< version
-#, fuzzy
 msgid "Prepends a newline to displayed message."
-msgstr "સંદેશો મોકલવામાં અસમર્થ."
+msgstr "દર્શાવેલ સંદેશમાં નવા વાક્યને જોડો."
 
 #. *< summary
 msgid ""
@@ -2640,7 +2644,7 @@
 msgstr "ઓફલાઇન સંદેશ ઍમ્યુલેશન"
 
 msgid "Save messages sent to an offline user as pounce."
-msgstr ""
+msgstr "પાઉન્સ તરીકે ઓફલાઇન વપરાશકર્તા માટે મોકલેલ સંદેશાઓને સંગ્રહો."
 
 msgid ""
 "The rest of the messages will be saved as pounces. You can edit/delete the "
@@ -2652,12 +2656,14 @@
 "\"%s\" is currently offline. Do you want to save the rest of the messages in "
 "a pounce and automatically send them when \"%s\" logs back in?"
 msgstr ""
+"\"%s\" એ હાલમાં ઓફલાઇન છે. શું તમે પાઉન્સમાં બાકી રહેતા સંદેશાઓનો સંગ્રહ કરવા માંગો છો અને "
+"આપમેળે તેઓને મોકલો જ્યારે તેમાં \"%s\" એ ઇતિહાસ પાછો લાવે?"
 
 msgid "Offline Message"
 msgstr "ઓફલાઈન સંદેશ"
 
 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog"
-msgstr ""
+msgstr "તમે `Buddy Pounces' સંવાદ માંથી પાઉન્સને સુધારી/કાઢી શકો છો"
 
 msgid "Yes"
 msgstr "હા"
@@ -2669,7 +2675,7 @@
 msgstr "મિત્રને પકડી રાખો ત્યારે ઓફલાઇન સંદેશાને સંગ્રહો"
 
 msgid "Do not ask. Always save in pounce."
-msgstr ""
+msgstr "પૂછશો નહિં. પાઉન્સમાં હંમેશા સંગ્રહો."
 
 msgid "One Time Password"
 msgstr "એકજ વખતનો પાસવર્ડ"
@@ -2712,10 +2718,10 @@
 msgstr "perl પ્લગઈનો લોડ કરવા માટે આધાર પૂરો પાડે છે."
 
 msgid "Psychic Mode"
-msgstr ""
+msgstr "માનસિત સ્થિતિ"
 
 msgid "Psychic mode for incoming conversation"
-msgstr ""
+msgstr "આવતા વાર્તાલાપ માટે માનસિક સ્થિતિ"
 
 msgid ""
 "Causes conversation windows to appear as other users begin to message you.  "
@@ -2723,7 +2729,7 @@
 msgstr ""
 
 msgid "You feel a disturbance in the force..."
-msgstr ""
+msgstr "દબાણમાં તમે ખલેલ અનુભવો છો..."
 
 msgid "Only enable for users on the buddy list"
 msgstr "મિત્ર યાદી પર ફક્ત વપરાશકર્તાઓ માટે સક્રિય કરો"
@@ -2897,7 +2903,7 @@
 
 msgid ""
 "Unable to establish connection with the local mDNS server.  Is it running?"
-msgstr ""
+msgstr "સ્થાનિક mDNS સર્વર સાથે જોડાણને સ્થાપિત કરવામાં અસમર્થ.  શું તે ચાલી રહ્યુ છે?"
 
 msgid "First name"
 msgstr "પ્રથમ નામ"
@@ -2949,9 +2955,9 @@
 msgid "Unable to create socket: %s"
 msgstr "સોકેટ બનાવવામાં અસમર્થ: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to bind socket to port: %s"
-msgstr "લિસન સોકેટ બનાવી શક્યા નહિં"
+msgstr "પોર્ટ માટે સોકેટને બાંધવાનું અસમર્થ: %s"
 
 #, c-format
 msgid "Unable to listen on socket: %s"
@@ -3337,7 +3343,7 @@
 msgstr "સંગ્રહ પદ્ધતિઓ"
 
 msgid "Auto-detect incoming UTF-8"
-msgstr ""
+msgstr "આવતા UTF-8 ને સ્વયં-શોધો"
 
 msgid "Real name"
 msgstr "વાસ્તવિક નામ"
@@ -4250,7 +4256,7 @@
 msgstr "આલ્બમ ટ્યૂન કરો"
 
 msgid "Tune Genre"
-msgstr ""
+msgstr "સામાન્ય ટ્યૂન કરો"
 
 msgid "Tune Comment"
 msgstr "ટિપ્પણીને ટ્યૂન કરો"
@@ -4484,7 +4490,7 @@
 
 #, c-format
 msgid "Buzzing %s..."
-msgstr ""
+msgstr "%s એ ગણગણાટ કરી રહ્યા છે..."
 
 #. Yahoo only supports one attention command: the 'buzz'.
 #. This is index number YAHOO_BUZZ.
@@ -4579,11 +4585,10 @@
 msgstr "msg &lt;user&gt; &lt;message&gt;:  અન્ય વપરાશકર્તાને ખાનગી સંદેશો મોકલો."
 
 msgid "ping &lt;jid&gt;:\tPing a user/component/server."
-msgstr ""
-
-#, fuzzy
+msgstr "ping &lt;jid&gt;:\t વપરાશકર્તા/ઘટક/સર્વરને પિંગ કરો."
+
 msgid "buzz: Buzz a user to get their attention"
-msgstr "buzz: ધ્યાન દોરવા માટે તેને જગાવો"
+msgstr "બઝ: ધ્યાન દોરવા માટે વપરરાશકર્તાને જગાવો"
 
 #. *< type
 #. *< ui_requirement
@@ -4659,6 +4664,10 @@
 msgid "(Code %s)"
 msgstr "(કોડ %s)"
 
+#, fuzzy
+msgid "A custom smiley in the message is too large to send."
+msgstr "સંદેશો મોકલવામાં અસમર્થઃ સંદેશો ખૂબ લાંબો છે."
+
 msgid "XML Parse error"
 msgstr "XML પદચ્છેદન ક્ષતિ"
 
@@ -4708,7 +4717,7 @@
 msgstr "પરિવહન બંધ થઈ ગયું."
 
 msgid "Failed to open in-band bytestream"
-msgstr ""
+msgstr "ઇન-બૅન્ડ બાઇટસ્ટ્રીમને ખોલવામાં અસમર્થ"
 
 #, c-format
 msgid "Unable to send file to %s, user does not support file transfers"
@@ -5036,10 +5045,11 @@
 #, c-format
 msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>"
 msgstr ""
+"%s એ wink ને મોકલેલ છે. <a href='msn-wink://%s'>તેને વગાડવા માટે અહિંયા ક્લિક કરો</a>"
 
 #, c-format
 msgid "%s sent a wink, but it could not be saved"
-msgstr ""
+msgstr "%s એ wink ને મોકલેલ છે, પરંતુ તેનો સંગ્રહ કરી શક્યા નહિં"
 
 #, c-format
 msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>"
@@ -5063,7 +5073,7 @@
 
 #, c-format
 msgid "Nudging %s..."
-msgstr ""
+msgstr "%s ને ધક્કો મારી રહ્યા છે..."
 
 msgid "Email Address..."
 msgstr "ઇમેલ સરનામું..."
@@ -5116,7 +5126,7 @@
 #, c-format
 msgid ""
 "MSN servers are currently blocking the following regular expressions:<br/>%s"
-msgstr ""
+msgstr "MSN સર્વરો એ હમણાં નીચેનાં રેગ્યુલર એક્સપ્રેશનને બ્લોક કરી રહ્યા છે:<br/>%s"
 
 msgid "This account does not have email enabled."
 msgstr "આ ખાતા પાસે સક્રિય થયેલ ઇમેલ નથી."
@@ -5292,7 +5302,7 @@
 msgstr "વ્યક્તિગત"
 
 msgid "Significant Other"
-msgstr ""
+msgstr "મહત્વનાં બીજા"
 
 msgid "Home Phone"
 msgstr "ઘરનો ફોન"
@@ -5358,7 +5368,7 @@
 msgstr "કામનો ઇમેલ"
 
 msgid "Work IM"
-msgstr ""
+msgstr "કાર્ય IM"
 
 #, fuzzy
 msgid "Start Date"
@@ -5748,7 +5758,7 @@
 msgstr "દાખલ થયેલ SecurID કી અયોગ્ય છે."
 
 msgid "The PIN is invalid. It should only consist of digits [0-9]."
-msgstr ""
+msgstr "PIN એ અયોગ્ય છે. તે ફક્ત આંકડા [0-9] ને સમાવવું જોઇએ."
 
 msgid "The two PINs you entered do not match."
 msgstr "તમે દાખલ થયેલ બે PINs એ બંધબેસતુ નથી."
@@ -5835,9 +5845,8 @@
 "સર્વર સાથે જોડાવામાં અસમર્થ. તમે જે સર્વર સાથે જોડાવા ઈચ્છો છો તે સર્વરનું મહેરબાની કીરને "
 "સરનામું દાખલ કરો."
 
-#, fuzzy
 msgid "Logging In..."
-msgstr "પ્રવેશી રહ્યા છીએ"
+msgstr "માં પ્રવેશી રહ્યા છે..."
 
 #, fuzzy
 msgid ""
@@ -5932,7 +5941,7 @@
 msgstr "સત્તાધિકરણ અરજી"
 
 msgid "MXit account validation"
-msgstr ""
+msgstr "MXit ખાતાની ચકાસણી"
 
 msgid "Retrieving User Information..."
 msgstr "વપરાશકર્તાની જાણકારીને પાછી મેળવી રહ્યા છે..."
@@ -5959,7 +5968,7 @@
 msgstr "HTTP મારફતે જોડાવ"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "સ્પ્લૅશ-સ્ક્રીન પોપઅપ ને સક્રિય કરો"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 #, fuzzy
@@ -6050,7 +6059,7 @@
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "MXit માં જોડાણ ભૂલ ઉદ્ભવી. (રિડ સ્ટેજ 0x01)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
@@ -6071,9 +6080,8 @@
 msgid "A connection error occurred to MXit. (read stage 0x06)"
 msgstr ""
 
-#, fuzzy
 msgid "Pending"
-msgstr "મોકલો"
+msgstr "અટકેલ"
 
 msgid "Invited"
 msgstr "આમંત્રણ આપેલ છે"
@@ -6103,9 +6111,8 @@
 msgid "Unexpected challenge length from server"
 msgstr "સર્વર માંથી અનિચ્છનીય શરત લંબાઇ"
 
-#, fuzzy
 msgid "Logging in"
-msgstr "પ્રવેશી રહ્યા છીએ"
+msgstr "માં પ્રવેશી રહ્યા છે"
 
 msgid "MySpaceIM - No Username Set"
 msgstr "MySpaceIM - વપરાશકર્તાનામ સુયોજિત નથી"
@@ -6138,7 +6145,7 @@
 msgstr "નવી ચિત્રની ટિપ્પણીઓ"
 
 msgid "MySpace"
-msgstr ""
+msgstr "MySpace"
 
 msgid "IM Friends"
 msgstr "IM મિત્રો"
@@ -6191,9 +6198,8 @@
 msgid "'delbuddy' command failed"
 msgstr "'delbuddy' આદેશ નિષ્ફળ"
 
-#, fuzzy
 msgid "blocklist command failed"
-msgstr "સ્વીચબોર્ડ નિષ્ફળ"
+msgstr "blocklist આદેશ નિષ્ફળ"
 
 msgid "Missing Cipher"
 msgstr "ગુમ થયેલ સાઇફર"
@@ -6231,9 +6237,8 @@
 msgid "Show display name in status text"
 msgstr "પરિસ્થિત લખાણમાં દર્શાવ નામને બતાવો"
 
-#, fuzzy
 msgid "Show headline in status text"
-msgstr "ઉપનામો ટેબો/શીર્ષકોમાં બતાવો (_a)"
+msgstr "પરિસ્થિતિ લખાણમાં શીર્ષકને બતાવો"
 
 #, fuzzy
 msgid "Send emoticons"
@@ -6302,7 +6307,7 @@
 #. * connotation, for example, "he was zapped by electricity when
 #. * he put a fork in the toaster."
 msgid "Zap"
-msgstr ""
+msgstr "Zap"
 
 #, c-format
 msgid "%s has zapped you!"
@@ -6310,7 +6315,7 @@
 
 #, c-format
 msgid "Zapping %s..."
-msgstr ""
+msgstr "%s ને મારી રહ્યા છે..."
 
 #. Whack means "to hit or strike someone with a sharp blow"
 #, fuzzy
@@ -6323,7 +6328,7 @@
 
 #, c-format
 msgid "Whacking %s..."
-msgstr ""
+msgstr "%s ને લાકડીથી મારી રહ્યા છે..."
 
 #. Torch means "to set on fire."  Don't worry, this doesn't
 #. * make a whole lot of sense in English, either.  Feel free
@@ -6338,11 +6343,11 @@
 
 #, c-format
 msgid "Torching %s..."
-msgstr ""
+msgstr "%s ને ટૉર્ચ કરી રહ્યા છે..."
 
 #. Smooch means "to kiss someone, often enthusiastically"
 msgid "Smooch"
-msgstr ""
+msgstr "ચુંબન"
 
 #, fuzzy, c-format
 msgid "%s has smooched you!"
@@ -6350,7 +6355,7 @@
 
 #, c-format
 msgid "Smooching %s..."
-msgstr ""
+msgstr "%s ને ચુંબન કરી રહ્યા છે..."
 
 #. A hug is a display of affection; wrapping your arms around someone
 msgid "Hug"
@@ -6425,7 +6430,7 @@
 #. * connotation.  It is generally used in a playful tone
 #. * with friends.
 msgid "Raspberry"
-msgstr ""
+msgstr "રાસબરિ"
 
 #, c-format
 msgid "%s has raspberried you!"
@@ -6531,9 +6536,9 @@
 msgid "Unknown error: 0x%X"
 msgstr "અજ્ઞાત ક્ષતિ: 0x%X"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "વપરાશકર્તા %s ને બેન કરવામાં અસમર્થ"
+msgstr "પ્રવેશવામાં અસમર્થ: %s"
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
@@ -6693,7 +6698,10 @@
 msgid "Server port"
 msgstr "સર્વર પોર્ટ"
 
-#. Note to translators: %s in this string is a URL
+#, fuzzy, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "સર્વરમાંથી અયોગ્ય પ્રત્યુત્તર."
+
 #, fuzzy, c-format
 msgid "Received unexpected response from %s"
 msgstr "સર્વરમાંથી અયોગ્ય પ્રત્યુત્તર."
@@ -6711,6 +6719,11 @@
 msgid "Error requesting %s: %s"
 msgstr "જોડાણ બનાવવામાં ક્ષતિ"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "અહિંયા સત્તાધિકરણ કરવા માટે તમારી સ્ક્રીન નામને AOL પરવાનગી આપતુ નથી"
 
@@ -6787,7 +6800,7 @@
 
 #, c-format
 msgid "File %s is %s, which is larger than the maximum size of %s."
-msgstr ""
+msgstr "ફાઇલ %s એ %s છે. કે જે %s નાં મહત્તમ માપ કરતા વધારે છે."
 
 msgid "Invalid error"
 msgstr "અયોગ્ય ક્ષતિ"
@@ -6841,7 +6854,7 @@
 msgstr "ચેતવણી સ્તર ઘણું વધારે છે (મોકલનાર)"
 
 msgid "Warning level too high (receiver)"
-msgstr ""
+msgstr "ચેતવણી સ્તર ઘણું ઊંચુ છે (સ્વીકારનાર)"
 
 msgid "User temporarily unavailable"
 msgstr "વપરાશકર્તા કામચલાઉ રીતે ઉપલબ્ધ નથી"
@@ -6865,7 +6878,7 @@
 msgstr ""
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
+msgstr "મર્યાદાઓને સ્વીકાર્યા વગર SMS ને મોકલી શકતા નથી"
 
 msgid "Cannot send SMS"
 msgstr "SMS ને મોકલી શકાતુ નથી"
@@ -6879,13 +6892,13 @@
 msgstr "અજ્ઞાત દેશ માટે SMS ને મોકલી શકાતુ નથી"
 
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
+msgstr "બોટ ખાતુ એ IMs ને પ્રારંભ કરી શકતુ નથી"
 
 msgid "Bot account cannot IM this user"
-msgstr ""
+msgstr "બોટ ખાતુ એ આ વપરાશકર્તાને IM કરી શકતુ નથી"
 
 msgid "Bot account reached IM limit"
-msgstr ""
+msgstr "બોટ ખાતુ એ IM મર્યાદા સુધી પહોંચી ગયુ"
 
 msgid "Bot account reached daily IM limit"
 msgstr ""
@@ -7178,9 +7191,8 @@
 msgid "_Add"
 msgstr "ઉમેરો (_A)"
 
-#, fuzzy
 msgid "_Decline"
-msgstr "અસ્વીકારો"
+msgstr "અસ્વીકારો (_D)"
 
 #, c-format
 msgid "You missed %hu message from %s because it was invalid."
@@ -7264,14 +7276,6 @@
 "characters.]"
 msgstr "[આ વપરાશકર્તામાંથી સંદેશો દર્શાવવામાં અસમર્થ કારણ કે તે અયોગ્ય અક્ષરો સમાવે છે.]"
 
-#, fuzzy
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"તમે કરેલી છેલ્લી ક્રિયા કરી શક્યા નહિં કારણ કે તમે ક્રમની મર્યાદાની ઉપર છો. મહેરબાની "
-"કરીને ૧૦ સેકન્ડ રાહ જુઓ અને ફરીથી પ્રયત્ન કરો."
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "તમારું જોડાણ સંવાદ કક્ષ %s માંથી તૂટી ગયેલ છે."
@@ -7668,7 +7672,7 @@
 "ચકાસાયેલ હશે, તો આ ખાનગીપણાનું જોખમ તરીકે ધ્યાનમાં લેવાશે."
 
 msgid "Aquarius"
-msgstr ""
+msgstr "કુંભ રાશિ"
 
 #, fuzzy
 msgid "Pisces"
@@ -7691,23 +7695,23 @@
 msgstr "રદ કરો"
 
 msgid "Leo"
-msgstr ""
+msgstr "સિંહરાશિ"
 
 msgid "Virgo"
-msgstr ""
+msgstr "કન્યારાશિ"
 
 msgid "Libra"
-msgstr ""
+msgstr "તુલારાશિ"
 
 #, fuzzy
 msgid "Scorpio"
 msgstr "ઉમેદવારી"
 
 msgid "Sagittarius"
-msgstr ""
+msgstr "ધનરાશિ"
 
 msgid "Capricorn"
-msgstr ""
+msgstr "મકરરાશિ"
 
 msgid "Rat"
 msgstr "ઉંદર"
@@ -7722,7 +7726,7 @@
 msgstr "સસલું"
 
 msgid "Dragon"
-msgstr ""
+msgstr "ડ્રૅગન"
 
 msgid "Snake"
 msgstr "સાપ"
@@ -7764,7 +7768,7 @@
 msgstr "દેશ/પ્રદેશ"
 
 msgid "Province/State"
-msgstr ""
+msgstr "પ્રાંત/રાજ્ય"
 
 msgid "Zipcode"
 msgstr "ઝીપ કોડ"
@@ -7798,7 +7802,7 @@
 msgstr "જન્મકુંડલી"
 
 msgid "Zodiac"
-msgstr ""
+msgstr "રાશિચક્ર"
 
 msgid "Blood"
 msgstr "લોહી"
@@ -7838,7 +7842,7 @@
 msgstr "મિત્ર મેમો"
 
 msgid "Change his/her memo as you like"
-msgstr ""
+msgstr "તમને ગમે તે પ્રમાણે તેને/તેણીને બદલો"
 
 msgid "_Modify"
 msgstr "બદલો (_M)"
@@ -7877,11 +7881,11 @@
 msgstr "સત્તાધિકરણ નામંજૂરી સંદેશો:"
 
 msgid "Sorry, you're not my style."
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "દિલગીર છુ, તમે મારી શૈલી નથી."
+
+#, c-format
 msgid "%u needs authorization"
-msgstr "સત્તાધિકરણ શરૂ કરી રહ્યા છીએ"
+msgstr "%u ને સત્તાધિકરણની જરૂર છે"
 
 #, fuzzy
 msgid "Add buddy authorize"
@@ -7986,7 +7990,7 @@
 msgstr "QQ Qun માં જોડાવ"
 
 msgid "Input request here"
-msgstr ""
+msgstr "ઇનપુટ સૂચના અહિંયા"
 
 #, c-format
 msgid "Successfully joined Qun %s (%u)"
@@ -8016,9 +8020,8 @@
 "this operation will eventually remove this Qun."
 msgstr ""
 
-#, fuzzy
 msgid "Sorry, you are not our style"
-msgstr "માફ કરજો, હું થોડા સમય માટે ચાલી ગયો હતો!"
+msgstr "દિલગીર છુ, તમે અમારી શૈલી નથી"
 
 msgid "Successfully changed Qun members"
 msgstr "સફળતાપૂર્વક બદલાયેલ Qun સભ્યો"
@@ -8106,9 +8109,9 @@
 msgid "<b>Total Online Buddies</b>: %d<br>\n"
 msgstr "<b>કુલ ઓનલાઇન મિત્રો</b>: %d<br>\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n"
-msgstr "<b>વપરાશકર્તા:</b> %s<br>"
+msgstr "<b>છેલ્લુ તાજુ</b>: %d-%d-%d, %d:%d:%d<br>\n"
 
 #, c-format
 msgid "<b>Server</b>: %s<br>\n"
@@ -8203,9 +8206,8 @@
 msgid "About OpenQ"
 msgstr "OpenQ વિશે"
 
-#, fuzzy
 msgid "Modify Buddy Memo"
-msgstr "ઘરનું સરનામું"
+msgstr "મિત્ર મેમોને બદલો"
 
 #. *< type
 #. *< ui_requirement
@@ -8260,7 +8262,7 @@
 
 #, c-format
 msgid "Failed requesting token, 0x%02X"
-msgstr ""
+msgstr "ટોકનને સૂચિત કરવાનું નિષ્ફળ, 0x%02X"
 
 #, fuzzy, c-format
 msgid "Invalid token len, %d"
@@ -8286,13 +8288,11 @@
 msgid "Checking captcha"
 msgstr "captcha ને ચકાસી રહ્યા છે"
 
-#, fuzzy
 msgid "Failed captcha verification"
-msgstr "Yahoo નિષ્ફળ! સત્તાધિકરણ"
-
-#, fuzzy
+msgstr "captcha ચકાસણી નિષ્ફળ"
+
 msgid "Captcha Image"
-msgstr "ચિત્ર સંગ્રહો"
+msgstr "Captcha ઇમેજ"
 
 msgid "Enter code"
 msgstr "કોડને દાખલ કરો"
@@ -8559,7 +8559,7 @@
 msgstr "વપરાશકર્તા નામ"
 
 msgid "Sametime ID"
-msgstr ""
+msgstr "અમુકવાર ID"
 
 msgid "An ambiguous user ID was entered"
 msgstr "સંદિગ્ધાર્થ વપરાશકર્તા ID દાખલ થયેલ હતુ"
@@ -9614,7 +9614,7 @@
 msgstr "HMAC"
 
 msgid "Use Perfect Forward Secrecy"
-msgstr ""
+msgstr "Perfect Forward Secrecy ને વાપરો"
 
 msgid "Public key authentication"
 msgstr "જાહેર કી સત્તાધિકરણ"
@@ -9625,9 +9625,8 @@
 msgid "Block messages to whiteboard"
 msgstr "વ્હાઇટબોર્ડમાં સંદેશાઓને બ્લોક કરો"
 
-#, fuzzy
 msgid "Automatically open whiteboard"
-msgstr "આપોઆપ સંપર્કો ફેલાવો (_A)"
+msgstr "આપમેળે વાઇટબોર્ડને ખોલો"
 
 #, fuzzy
 msgid "Digitally sign and verify all messages"
@@ -10089,19 +10088,19 @@
 msgstr "ઇનબોક્સને ખોલો"
 
 msgid "Can't send SMS. Unable to obtain mobile carrier."
-msgstr ""
+msgstr "SMS ને મોકલી શકાતુ નથી. મોબાઇલ કૅરિઅરને પ્રાપ્ત કરવાનું અસમર્થ."
 
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
+msgstr "SMS ને મોકલી શકાતુ નથી. અજ્ઞાત મોબાઇલ કૅરિઅર"
 
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "SMS ને મોકલવા માટે મોબાઇલ કૅરિઅરને મેળવી રહ્યા છે."
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
 #.
 msgid "Sent Doodle request."
-msgstr ""
+msgstr "ડુડલ સૂચના મોકલી."
 
 msgid "Unable to connect."
 msgstr "જોડાવામાં અસમર્થ."
@@ -10381,7 +10380,7 @@
 
 #, c-format
 msgid "Requesting %s's attention..."
-msgstr ""
+msgstr "%s નાં ધ્યાનને સૂચિત કરી રહ્યા છે..."
 
 #, fuzzy, c-format
 msgid "%s has requested your attention!"
@@ -10443,7 +10442,7 @@
 msgstr "સંચિત થયેલ છબી"
 
 msgid "Stored Image. (that'll have to do for now)"
-msgstr ""
+msgstr "સંગ્રહેલ ઇમેજ. (કે જે મારે અત્યારે કરવી જ પડશે)"
 
 msgid "SSL Connection Failed"
 msgstr "SSL જોડાણ નિષ્ફળ"
@@ -10475,9 +10474,9 @@
 msgid "%s (%s) changed status from %s to %s"
 msgstr "%s એ મુદ્દાને આમાં બદલ્યો: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s (%s) is now %s"
-msgstr "%s એ %s તરીકે જાણીતો છે"
+msgstr "%s (%s) એ હવે %s છે"
 
 #, fuzzy, c-format
 msgid "%s (%s) is no longer %s"
@@ -10792,7 +10791,7 @@
 msgstr "ભાંગેલ પાશ્ર્વૅભાગનો રંગ"
 
 msgid "The background color of a collapsed group"
-msgstr ""
+msgstr "પડી ભાંગેલ જૂથનો પાશ્ર્વ રંગ"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list group when in its collapsed state
@@ -10800,7 +10799,7 @@
 msgstr "ભાંગેલ લખાણ"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "જ્યારે જૂથ પડી ભાંગેલ હોય તે માટે લખાણ જાણકારી"
 
 #. Buddy
 #. Note to translators: These two strings refer to the background color
@@ -10929,9 +10928,8 @@
 msgid "_Send File..."
 msgstr "ફાઇલને મોકલો (_S)..."
 
-#, fuzzy
 msgid "Add Buddy _Pounce..."
-msgstr "વ્યક્તિ ઉમેરો (_P)"
+msgstr "મિત્ર પાઉન્સને ઉમેરો (_P)..."
 
 msgid "View _Log"
 msgstr "લૉગ જુઓ (_L)"
@@ -10973,9 +10971,8 @@
 msgid "Auto-Join"
 msgstr "આપોઆપ-જોડાવ"
 
-#, fuzzy
 msgid "Persistent"
-msgstr "પરવાનગી આપો"
+msgstr "નિરંતર"
 
 msgid "_Edit Settings..."
 msgstr "સુયોજનોને સુધારો (_E)..."
@@ -11139,7 +11136,7 @@
 msgstr ""
 
 msgid "Awesome"
-msgstr ""
+msgstr "ઑસમ"
 
 msgid "Rockin'"
 msgstr ""
@@ -11602,9 +11599,8 @@
 msgid "Typing"
 msgstr "ટાઇપિંગ"
 
-#, fuzzy
 msgid "Stopped Typing"
-msgstr "ટાઇપિંગ"
+msgstr "બંધ કરેલ લખવાનું"
 
 #, fuzzy
 msgid "Nick Said"
@@ -11709,7 +11705,7 @@
 
 #. feel free to not translate this
 msgid "Ka-Hing Cheung"
-msgstr ""
+msgstr "કા-હિંગ ચેઉંગ"
 
 msgid "voice and video"
 msgstr "અવાજ અને વિડીયો"
@@ -11770,7 +11766,7 @@
 msgstr "કેટાલાન"
 
 msgid "Valencian-Catalan"
-msgstr ""
+msgstr "વૅલેન્સિઅન-કૅટાલન"
 
 msgid "Czech"
 msgstr "ચેક"
@@ -11782,7 +11778,7 @@
 msgstr "જર્મન"
 
 msgid "Dzongkha"
-msgstr ""
+msgstr "જોન્ક્હા"
 
 msgid "Greek"
 msgstr "ગ્રીક"
@@ -11882,9 +11878,8 @@
 msgid "Mongolian"
 msgstr "મોન્ગોલિયન"
 
-#, fuzzy
 msgid "Marathi"
-msgstr "ગુજરાતી"
+msgstr "મરાઠી"
 
 msgid "Malay"
 msgstr "મલય"
@@ -11902,7 +11897,10 @@
 msgstr "નોર્વેજીયન નાઈનોર્સ્ક"
 
 msgid "Occitan"
-msgstr ""
+msgstr "ઓક્સિટન"
+
+msgid "Oriya"
+msgstr "ઓરિયા"
 
 msgid "Punjabi"
 msgstr "પંજાબી"
@@ -12020,10 +12018,11 @@
 "language, but the responses may be less helpful.<br/><br/>"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
-msgstr "<FONT SIZE=\"4\">IRC:</FONT> #Pidgin on irc.freenode.net<BR><BR>"
+msgstr ""
+"<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
 
 #, c-format
 msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
@@ -12282,9 +12281,8 @@
 msgid "Color to draw hyperlinks when mouse is over them."
 msgstr "જ્યારે માઉસ તેના પર લઇ જવાય ત્યારનો હાયપરલીંકો દોરવા માટેનો રંગ."
 
-#, fuzzy
 msgid "Sent Message Name Color"
-msgstr "સંદેશો મોકલો"
+msgstr "મોકલેલ સંદેશ નામ રંગ"
 
 msgid "Color to draw the name of a message you sent."
 msgstr "જે તમે મોકલેલ છે તે સંદેશનાં નામને દોરવા માટે રંગ."
@@ -12315,7 +12313,7 @@
 msgstr ""
 
 msgid "Whisper Message Name Color"
-msgstr ""
+msgstr "વિસ્પર સંદેશ નાન રંગ"
 
 msgid "Color to draw the name of a whispered message."
 msgstr ""
@@ -12538,12 +12536,16 @@
 "Are you sure you want to permanently delete the log of the conversation with "
 "%s which started at %s?"
 msgstr ""
+"શું તમે ખરેખર %s સાથે વાર્તાલાપોનો લોગ કાયમ માટે કાઢી નાંખવા માંગો છો કે જે %s પર શરૂ "
+"થયેલ છે?"
 
 #, c-format
 msgid ""
 "Are you sure you want to permanently delete the log of the conversation in %"
 "s which started at %s?"
 msgstr ""
+"શું તમે ખરેખર %s સાથે વાર્તાલાપોનો લોગ કાયમ માટે કાઢી નાંખવા માંગો છો કે જે %s પર શરૂ "
+"થયેલ છે?"
 
 #, fuzzy, c-format
 msgid ""
@@ -12610,6 +12612,10 @@
 "                      specifies account(s) to use, separated by commas.\n"
 "                      Without this only the first account will be enabled)."
 msgstr ""
+"સ્પષ્ટ થયેલ ખાતા (ઓ) ને સક્રિય કરો (વૈકલ્પિક દલીલ NAME એ\n"
+"                      વાપરવા માટે ખાતા (ઓ) ને સ્પષ્ટ કરે છે, અવતરણચિહ્ન દ્દારા અલગ "
+"થયેલ છે.\n"
+"                      ફક્ત આનાં વગર પહેલું ખાતુ સક્રિય થયેલ છે)."
 
 msgid "X display to use"
 msgstr "વાપરવા માટે X દેખાવ"
@@ -12641,7 +12647,7 @@
 msgstr "/મીડિયા (_M)"
 
 msgid "/Media/_Hangup"
-msgstr ""
+msgstr "/મીડિયા/હેંગઅપ (_H)"
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
@@ -12722,7 +12728,7 @@
 msgid ""
 "The plugin could not be unloaded now, but will be disabled at the next "
 "startup."
-msgstr ""
+msgstr "પ્લગઇનને હવે લાવી શક્યા નહિં. પરંતુ આગળની શરૂઆત પર નિષ્ક્રિય થયેલ હશે."
 
 #, c-format
 msgid ""
@@ -12753,9 +12759,8 @@
 msgid "Select a file"
 msgstr "ફાઈલ પસંદ કરો"
 
-#, fuzzy
 msgid "Modify Buddy Pounce"
-msgstr "વ્યક્તિમાં ફેરફાર કરો"
+msgstr "મિત્ર પાઉન્સને બદલો"
 
 #. Create the "Pounce on Whom" frame.
 #, fuzzy
@@ -12768,13 +12773,11 @@
 msgid "_Buddy name:"
 msgstr "વ્યક્તિ નામ (_B):"
 
-#, fuzzy
 msgid "Si_gns on"
 msgstr "પ્રવેશ કરો (_g)"
 
-#, fuzzy
 msgid "Signs o_ff"
-msgstr "પ્રવેશ બહાર નીકળો (_o)"
+msgstr "પ્રવેશ બંધ કરો (_f)"
 
 msgid "Goes a_way"
 msgstr "દૂર જાઓ (_w)"
@@ -12836,13 +12839,11 @@
 msgid "Pounce Target"
 msgstr "પાઉન્સ જ્યારે"
 
-#, fuzzy
 msgid "Started typing"
-msgstr "વ્યક્તિ લખવાનું શરુ કરે છે (_t)"
-
-#, fuzzy
+msgstr "લખવાનું શરૂ થયેલ છે"
+
 msgid "Paused while typing"
-msgstr "વપરાશકર્તા એ લખી રહ્યું છે..."
+msgstr "જ્યારે લખી રહ્યા હોય ત્યારે અટકાવેલ છે"
 
 #, fuzzy
 msgid "Signed on"
@@ -12856,21 +12857,17 @@
 msgid "Returned from being away"
 msgstr "દૂરથી પાછા આવો (_R)"
 
-#, fuzzy
 msgid "Stopped typing"
-msgstr "ટાઇપિંગ"
-
-#, fuzzy
+msgstr "લખવાનું બંધ કરેલ છે"
+
 msgid "Signed off"
-msgstr "પ્રવેશ બહાર નીકળો (_o)"
-
-#, fuzzy
+msgstr "પ્રવેશ બહાર નીકળેલ છે"
+
 msgid "Became idle"
-msgstr "%s નિષ્ક્રિય બની ગયો"
-
-#, fuzzy
+msgstr "નિષ્ક્રિય બનો"
+
 msgid "Went away"
-msgstr "જ્યારે દૂર જાવ"
+msgstr "ારે દૂર જાવ"
 
 msgid "Sent a message"
 msgstr "સંદેશો મોકલો"
@@ -12882,7 +12879,7 @@
 msgstr "(વૈવિધ્યપૂર્ણ)"
 
 msgid "Penguin Pimps"
-msgstr ""
+msgstr "Penguin પિમ્પ્સ"
 
 msgid "The default Pidgin sound theme"
 msgstr "મૂળભૂત Pidgin અવાજ થીમ"
@@ -12891,10 +12888,10 @@
 msgstr "મૂળભૂત Pidgin મિત્ર યાદી થીમ"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "મૂળભૂત Pidgin પરિસ્થિતિ ચિહ્ન થીમ"
 
 msgid "Theme failed to unpack."
-msgstr ""
+msgstr "અનપૅક કરવામાં થીમ નિષ્ફળ"
 
 msgid "Theme failed to load."
 msgstr "લાવવામાં થીમ નિષ્ફળ."
@@ -12966,7 +12963,7 @@
 msgstr "ટેબો પર બંધ કરો બટન બતાવો (_u)"
 
 msgid "_Placement:"
-msgstr ""
+msgstr "નિયુક્તિ"
 
 msgid "Top"
 msgstr "ઉપર"
@@ -13217,13 +13214,13 @@
 msgid "Loud"
 msgstr "લાવો"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Louder"
-msgstr "કલાક"
-
-#, fuzzy, c-format
+msgstr "ખૂબ મોટો અવાજ"
+
+#, c-format
 msgid "Loudest"
-msgstr "ધ્વનિઓ"
+msgstr "અતિશય મોટો અવાજ"
 
 msgid "_Method:"
 msgstr "પદ્ધતિ (_M):"
@@ -13612,6 +13609,9 @@
 msgid "_Save File"
 msgstr "ફાઇલને સંચિત કરો (_S)"
 
+msgid "Do you really want to clear?"
+msgstr "શું તમે ખરેખર સાફ કરવા માંગો છો?"
+
 msgid "Select color"
 msgstr "રંગ પસંદ કરો"
 
@@ -13672,7 +13672,7 @@
 
 #. msg_difference spinner
 msgid "Maximum response timeout:"
-msgstr ""
+msgstr "મહત્તમ જવાબ સમયસમાપ્તિ:"
 
 msgid "minutes"
 msgstr "મિનિટો"
@@ -13831,9 +13831,8 @@
 "<b>વર્ણન:</b> "
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "ડિરેક્ટરી જાણકારી સુયોજિત કરો"
+msgstr "સેવા ડિસ્કવરી"
 
 msgid "_Browse"
 msgstr "વિચરણ કરો (_B)"
@@ -13841,13 +13840,11 @@
 msgid "Server does not exist"
 msgstr "સર્વર અસ્તિત્વ ધરાવતુ નથી"
 
-#, fuzzy
 msgid "Server does not support service discovery"
-msgstr "સર્વર કોઈપણ આધારભૂત સત્તાધિકરણ પદ્ધતિ વાપરતું નથી"
-
-#, fuzzy
+msgstr "સર્વર એ સેવા ડિસ્કવરીને આધાર આપતુ નથી"
+
 msgid "XMPP Service Discovery"
-msgstr "ડિરેક્ટરી જાણકારી સુયોજિત કરો"
+msgstr "XMPP સેવા ડિસ્કવરી"
 
 msgid "Allows browsing and registering services."
 msgstr "સેવાઓને બ્રાઉઝ કરવાનું અને રજીસ્ટર કરવાની પરવાનગી આપે છે."
@@ -14090,9 +14087,8 @@
 msgid "Adds a small box to the buddy list that shows if you have new mail."
 msgstr "વ્યક્તિ યાદીમાં નાનું બોક્સ ઉમેરે છે કે જે બતાવે છે કે શું તમારી પાસે નવો મેઈલ છે."
 
-#, fuzzy
 msgid "Markerline"
-msgstr "નીચે લીટી કરો"
+msgstr "અધોરેખા"
 
 msgid "Draw a line to indicate new messages in a conversation."
 msgstr ""
@@ -14118,9 +14114,8 @@
 msgid "Music messaging session confirmed."
 msgstr ""
 
-#, fuzzy
 msgid "Music Messaging"
-msgstr "તુરંત સંદેશાવ્યવહાર"
+msgstr "સંગીત સંદેશાવ્યવહાર"
 
 msgid "There was a conflict in running the command:"
 msgstr "ત્યાં આદેશને ચલાવવામાં અથડામણ હતી:"
@@ -14132,9 +14127,8 @@
 msgstr "નીચેની ભૂલ ઉદ્ભવી:"
 
 #. Configuration frame
-#, fuzzy
 msgid "Music Messaging Configuration"
-msgstr "માઉસ ગતિ રૂપરેખાંકન"
+msgstr "સંગીત સંદેશાવ્યવહાર રૂપરેખાંકન"
 
 msgid "Score Editor Path"
 msgstr "સ્કોર સંપાદક પાથ"
@@ -14181,9 +14175,8 @@
 msgstr "વિન્ડો શીર્ષકમાં નવા સંદેશાઓની ગણતરી દાખલ કરો (_o)"
 
 #. Count xprop method button
-#, fuzzy
 msgid "Insert count of new message into _X property"
-msgstr "વિન્ડો શીર્ષકમાં નવા સંદેશાઓની ગણતરી દાખલ કરો (_o)"
+msgstr "X ગુણધર્મમાં નવા સંદેશાની ગણતરીને દાખલ કરો (_X)"
 
 #. Urgent method button
 msgid "Set window manager \"_URGENT\" hint"
@@ -14246,9 +14239,8 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#, fuzzy
 msgid "Pidgin Demonstration Plugin"
-msgstr "Pidgin રજૂઆત પ્લગઈન"
+msgstr "Pidgin ડેમન્સ્ટ્રેશન પ્લગઇન"
 
 #. *< name
 #. *< version
@@ -14277,9 +14269,8 @@
 msgid "Highlighted Message Name Color"
 msgstr "મુલાકાત થયેલ સંદેશ નામ રંગરકાશિત"
 
-#, fuzzy
 msgid "Typing Notification Color"
-msgstr "સૂચન દૂર કરવાનું"
+msgstr "સૂચન રંગને લખી રહ્યા છે"
 
 msgid "GtkTreeView Horizontal Separation"
 msgstr ""
@@ -14350,17 +14341,16 @@
 msgid "Lets you send raw input to text-based protocols."
 msgstr "તમને હરોળ ઈનપુટ લખાણ-આધારિત પ્રોટોકોલોમાં મોકલવા માટે પરવાનગી આપે છે."
 
-#, fuzzy
 msgid ""
 "Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 msgstr ""
-"તમને હરોળ ઈનપુટ લખાણ-આધારિત પ્રોટોકોલો (Jabber, MSN, IRC, TOC) માં મોકલવા માટે "
+"તમને હરોળ ઈનપુટ લખાણ-આધારિત પ્રોટોકોલો (XMPP, MSN, IRC, TOC) માં મોકલવા માટે "
 "પરવાનગી આપે છે. મોકલવા માટે પ્રવેશ બોક્સમાં 'Enter' દબાવો. ડિબગ વિન્ડો જુઓ."
 
 #, c-format
 msgid "You can upgrade to %s %s today."
-msgstr ""
+msgstr "તમે આજે %s %s ને સુધારી શકાય છે."
 
 msgid "New Version Available"
 msgstr "નવી આવૃત્તિ ઉપલબ્ધ છે"
@@ -14434,7 +14424,7 @@
 msgstr "ફક્ત આખા શબ્દો"
 
 msgid "Case sensitive"
-msgstr ""
+msgstr "સંવેદનશીલ લિપી"
 
 msgid "Add a new text replacement"
 msgstr "નવી લખાણ બદલી ઉમેરો"
@@ -14745,9 +14735,9 @@
 msgid "Startup"
 msgstr "શરૂઆત"
 
-#, fuzzy, c-format
+#, c-format
 msgid "_Start %s on Windows startup"
-msgstr "વિન્ડોઝ શરૂ કરવા પર Pidgin શરૂ કરો (_S)"
+msgstr "વિન્ડો શરૂ કરવા પર %s શરૂ કરો (_S)"
 
 msgid "Allow multiple instances"
 msgstr "ઘણાબધા નમૂનાઓને પરવાનગી આપો"
@@ -14809,6 +14799,3 @@
 #. *  description
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "ડિબગીંગ XMPP સર્વરો અથવા ક્લાયન્ટો માટે આ પ્લગઇન ઉપયોગી છે."
-
-#~ msgid "%s"
-#~ msgstr "%s"
--- a/po/he.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/he.po	Thu Feb 18 21:38:43 2010 +0000
@@ -8,9 +8,9 @@
 msgstr ""
 "Project-Id-Version: he\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-29 20:30-0500\n"
-"PO-Revision-Date: 2009-11-29 20:20+0200\n"
-"Last-Translator: Shalom Craimer <scraimer at g mail dot com>\n"
+"POT-Creation-Date: 2010-02-15 11:16-0800\n"
+"PO-Revision-Date: 2010-02-15 19:51+0200\n"
+"Last-Translator: Shalom Craimer <scraimer at google's mail dot com>\n"
 "Language-Team: Hebrew <he@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1903,6 +1903,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s אינו קובץ רגיל. מסרב בפחדנות לכתוב עליו.\n"
 
+msgid "File is not readable."
+msgstr "הקובץ אינו קריא."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s רוצה לשלוח לך %s (%s)"
@@ -3707,6 +3710,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "השרת דורש אימות לא מוצפן מעל תקשורת לא מוצפנת"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "תגובה לא תקפה מהשרת"
+
+msgid "Server does not use any supported authentication method"
+msgstr "השרת לא תומך באימות באף תצורה"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3716,25 +3726,34 @@
 msgid "Plaintext Authentication"
 msgstr "אימות לא מוצפן"
 
-msgid "SASL authentication failed"
-msgstr "אימות SASL נכשל"
-
-msgid "Invalid response from server"
-msgstr "תגובה לא תקפה מהשרת"
-
-msgid "Server does not use any supported authentication method"
-msgstr "השרת לא תומך באימות באף תצורה"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "נתת דרישה להצפנה, אבל השרת לא מספק זאת."
 
 msgid "Invalid challenge from server"
 msgstr "תשובת אימות לא תקפה מהשרת"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "השרת סבור שהאימות הסתיים בהצלחה, אבל תוכנת הלקוח לא מסכימה"
+
+msgid "SASL authentication failed"
+msgstr "אימות SASL נכשל"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "שגיאת SASL: %s"
 
+msgid "Unable to canonicalize username"
+msgstr "לא ניתן לפרק את שם המשתמש"
+
+msgid "Unable to canonicalize password"
+msgstr "לא ניתן לפרק את הסיסמא"
+
+msgid "Malicious challenge from server"
+msgstr "תשובת-נגד הרסנית מהשרת"
+
+msgid "Unexpected response from server"
+msgstr "תגובה לא-צפויה מהשרת"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "מנהל התקשורת BOSH ניתק את חיבורך."
 
@@ -3833,13 +3852,16 @@
 msgid "Resource"
 msgstr "משאב"
 
+msgid "Uptime"
+msgstr "זמן חיבור"
+
+msgid "Logged Off"
+msgstr "התנתק/ה"
+
 #, c-format
 msgid "%s ago"
 msgstr "לפני %s"
 
-msgid "Logged Off"
-msgstr "התנתק/ה"
-
 msgid "Middle Name"
 msgstr "שם אמצעי"
 
@@ -4028,11 +4050,6 @@
 msgid "Ping timed out"
 msgstr "פינג לא חזר בזמן"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr "לא יכול למצוא צורות חיבור XMPP חלופיות אחרי כישלון בחיבור ישירות."
-
 msgid "Invalid XMPP ID"
 msgstr "מזהה XMPP לא תקין"
 
@@ -4574,6 +4591,9 @@
 msgid "(Code %s)"
 msgstr "(קוד %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "החייכן שלך גדול מכדי להישלח בתוך ההודעה."
+
 msgid "XML Parse error"
 msgstr "שגיאת פיענוח XML"
 
@@ -4975,6 +4995,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "השם הידידותי החדש שלך ל-MSN ארוך מדי."
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "קבע שם ידידותי עבור %s."
+
 msgid "Set your friendly name."
 msgstr "קבע/י את שמך הידידותי."
 
@@ -6528,7 +6552,10 @@
 msgid "Server port"
 msgstr "פורט השרת"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "התקבלה תגובה לא-צפויה מאת %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "התקבלה תגובה לא-צפויה מאת %s"
@@ -6546,6 +6573,13 @@
 msgid "Error requesting %s: %s"
 msgstr "שגיאה בבקשת %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"השרת מבקש ממך למלא אימות שהינך באמת אנושי/ת על מנת להתחבר, אך תוכנה זו לא "
+"תומכת בזאת."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL אינם מאפשרים לאמת את שם המשתמש שלך כאן"
 
@@ -7090,13 +7124,6 @@
 "characters.]"
 msgstr "[לא ניתן להציג הודעה ממשתמש זה כיוון שהיא מכילה תווים לא חוקיים.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"הפעולה האחרונה שניסית לבצע לא התבצעה כיוון שאתה הפרזת מעל הגבלת המהירות. יש "
-"לחכות 10 שניות ולנסות שנית.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "נותקת מחדר הצ'אט %s."
@@ -11654,15 +11681,15 @@
 msgid "Lao"
 msgstr "לאית"
 
-msgid "Lithuanian"
-msgstr "ליטואנית"
-
 msgid "Macedonian"
 msgstr "מקדונית"
 
 msgid "Mongolian"
 msgstr "מונגולית"
 
+msgid "Marathi"
+msgstr "מרטהי"
+
 msgid "Malay"
 msgstr "מאלאית"
 
@@ -11681,6 +11708,9 @@
 msgid "Occitan"
 msgstr "אוקסיטנית"
 
+msgid "Oriya"
+msgstr "אורייה"
+
 msgid "Punjabi"
 msgstr "פונג'אבי"
 
@@ -11759,6 +11789,9 @@
 msgid "Amharic"
 msgstr "אמהרית"
 
+msgid "Lithuanian"
+msgstr "ליטואנית"
+
 #, c-format
 msgid "About %s"
 msgstr "אודות %s"
@@ -13359,6 +13392,9 @@
 msgid "_Save File"
 msgstr "_שמור קובץ"
 
+msgid "Do you really want to clear?"
+msgstr "האם באמת ברצונך למחוק הכל?"
+
 msgid "Select color"
 msgstr "בחר צבע"
 
@@ -14541,1041 +14577,3 @@
 #. *  description
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "תוסף זה שימושי לניפוי באגים בשרתים ולקוחות של XMPP."
-
-#, fuzzy
-#~ msgid "(Default)"
-#~ msgstr "ברירת המחדל))"
-
-#~ msgid "Install Theme"
-#~ msgstr "התקן עיצוב"
-
-#~ msgid "Icon"
-#~ msgstr "סמל"
-
-#~ msgid "Use document font from _theme"
-#~ msgstr "התשמש בגופן המסמך מהמוטיב"
-
-#~ msgid "Proxy Server &amp; Browser"
-#~ msgstr "שרת תיווך ודפדפן"
-
-#~ msgid "Auto-away"
-#~ msgstr "ריחוק אוטומטי"
-
-#~ msgid "Change _status to:"
-#~ msgstr "שנה ריחוק ל:"
-
-#, fuzzy
-#~ msgid "The root certificate this one claims to be issued by is unknown."
-#~ msgstr "תעודת-השורש שלכאורה הנפיקה את התעודה אינה מוכרת לפידג'ין."
-
-#~ msgid "Send instant messages over multiple protocols"
-#~ msgstr "מאפשרת לשלוח הודעות מיידיות דרך מספר רב של פרוטוקולים"
-
-#~ msgid "_Start port:"
-#~ msgstr "יציאה _ראשונה:"
-
-#~ msgid "_End port:"
-#~ msgstr "יציאה _אחרונה:"
-
-#~ msgid "_User:"
-#~ msgstr "_משתמש:"
-
-#~ msgid "GTK+ Runtime Version"
-#~ msgstr "גרסת הרצה של GTK+"
-
-#~ msgid "Without this only the first account will be enabled)."
-#~ msgstr "בלי זה רק החשבון הראשון יהיה פעיל)."
-
-#~ msgid "Calling ... "
-#~ msgstr "מתקשר ..."
-
-#~ msgid "Invalid certificate chain"
-#~ msgstr "שרשרת תעודות לא-תקפה"
-
-#~ msgid ""
-#~ "The certificate chain presented by %s does not have a valid digital "
-#~ "signature from the Certificate Authority from which it claims to have a "
-#~ "signature."
-#~ msgstr ""
-#~ "שרשרת התעודות שהוצגה על ידי %s לא מכילה חתימה תקפה מרשויות ההנפקה שמהם "
-#~ "היא טוענת שיש לה חתימה."
-
-#~ msgid "Invalid certificate authority signature"
-#~ msgstr "חתימת רשות הנפקות לא תקפה"
-
-#~ msgid "Join/Part Hiding Configuration"
-#~ msgstr "הגדרות הסתרת הצטרפות/עזיבה"
-
-#~ msgid "Minimum Room Size"
-#~ msgstr "גודל חדר מינימלי"
-
-#~ msgid "User Inactivity Timeout (in minutes)"
-#~ msgstr "חוסר פעילות משתמש (בדקות)"
-
-#~ msgid "Your account is locked, please log in to the Yahoo! website."
-#~ msgstr "חשבונך נעול, יש לגשת לאתר של Yahoo."
-
-#~ msgid "Euskera(Basque)"
-#~ msgstr "אאוסקרה(בסקית)"
-
-#~ msgid ""
-#~ "<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin."
-#~ "im\">support@pidgin.im</A><BR/><BR/>"
-#~ msgstr ""
-#~ "<FONT SIZE=\"4\">עזרה דרך האימייל:</FONT> <A HREF=\"mailto:support@pidgin."
-#~ "im\">support@pidgin.im</A><BR/><BR/>"
-
-#~ msgid ""
-#~ "%s %s\n"
-#~ "Usage: %s [OPTION]...\n"
-#~ "\n"
-#~ "  -c, --config=DIR    use DIR for config files\n"
-#~ "  -d, --debug         print debugging messages to stdout\n"
-#~ "  -f, --force-online  force online, regardless of network status\n"
-#~ "  -h, --help          display this help and exit\n"
-#~ "  -m, --multiple      do not ensure single instance\n"
-#~ "  -n, --nologin       don't automatically login\n"
-#~ "  -l, --login[=NAME]  enable specified account(s) (optional argument "
-#~ "NAME\n"
-#~ "                      specifies account(s) to use, separated by commas.\n"
-#~ "                      Without this only the first account will be "
-#~ "enabled).\n"
-#~ "  --display=DISPLAY   X display to use\n"
-#~ "  -v, --version       display the current version and exit\n"
-#~ msgstr ""
-#~ "%s %s\n"
-#~ "שימוש: %s [אפשרות]...\n"
-#~ "\n"
-#~ "  -c, --config=ספריה  השתמש בספרייה לקבצי הגדרות\n"
-#~ "  -d, --debug         שלח הודעות ניפוי באגים ל-stdout\n"
-#~ "  -f, --force-online  אלץ מצב מקוון, בלי להתחשב במצב הרשת\n"
-#~ "  -h, --help          הצג הודעה זו וצא\n"
-#~ "  -m, --multiple      אל תוודא שרק עותק אחד רץ\n"
-#~ "  -n, --nologin       אל תתחבר אוטומטית\n"
-#~ "  -l, --login[=שמות]  היכנס אוטומטית )אפשרות לתת שמות חשבונות לחבר,\n"
-#~ "                      ובין כל שם צריך להיות פסיק)\n"
-#~ "  --display=DISPLAY   מספר התצוגה להשתמש בו בחלונות X\n"
-#~ "  -v, --version       הצג את הגירסאשל התוכנה וצא\n"
-
-#~ msgid ""
-#~ "%s %s\n"
-#~ "Usage: %s [OPTION]...\n"
-#~ "\n"
-#~ "  -c, --config=DIR    use DIR for config files\n"
-#~ "  -d, --debug         print debugging messages to stdout\n"
-#~ "  -f, --force-online  force online, regardless of network status\n"
-#~ "  -h, --help          display this help and exit\n"
-#~ "  -m, --multiple      do not ensure single instance\n"
-#~ "  -n, --nologin       don't automatically login\n"
-#~ "  -l, --login[=NAME]  enable specified account(s) (optional argument "
-#~ "NAME\n"
-#~ "                      specifies account(s) to use, separated by commas.\n"
-#~ "                      Without this only the first account will be "
-#~ "enabled).\n"
-#~ "  -v, --version       display the current version and exit\n"
-#~ msgstr ""
-#~ "%s %s\n"
-#~ "שימוש: %s [אפשרות]...\n"
-#~ "\n"
-#~ "  -c, --config=ספריה  השתמש בספרייה לקבצי הגדרות\n"
-#~ "  -d, --debug         שלח הודעות ניפוי באגים ל-stdout\n"
-#~ "  -f, --force-online  אלץ מצב מקוון, בלי להתחשב במצב הרשת\n"
-#~ "  -h, --help          הצג הודעה זו וצא\n"
-#~ "  -m, --multiple      אל תוודא שרק עותק אחד רץ\n"
-#~ "  -n, --nologin       אל תתחבר אוטומטית\n"
-#~ "  -l, --login[=שמות]  היכנס אוטומטית )אפשרות לתת שמות חשבונות לחבר,\n"
-#~ "                      ובין כל שם צריך להיות פסיק)\n"
-#~ "  --display=DISPLAY   מספר התצוגה להשתמש בו בחלונות X\n"
-#~ "  -v, --version       הצג את הגרסה של התוכנה וצא\n"
-
-#~ msgid "Failed to open the file"
-#~ msgstr "כישלון בעת פתיחת הקובץ"
-
-#~ msgid "_Resume"
-#~ msgstr "ה_משך"
-
-#~ msgid "Malformed BOSH Connect Server"
-#~ msgstr "שרת חיבור BOSH משובש"
-
-#~ msgid "Unable to not load SILC key pair"
-#~ msgstr "לא ניתן שלא לטעון את זוג מפתחות ה-SILC"
-
-#~ msgid ""
-#~ "%s declined your conference invitation to room \"%s\" because \"%s\"."
-#~ msgstr "%s סרב את ההזמנה שלך לועידה בחדר \"%s\" כיוון ש-\"%s\"."
-
-#~ msgid "Invitation Rejected"
-#~ msgstr "ההזמנה נדחתה"
-
-#, fuzzy
-#~ msgid "_Proxy"
-#~ msgstr "מתווך"
-
-#~ msgid "Cannot open socket"
-#~ msgstr "אין אפשרות לפתוח שקע"
-
-#~ msgid "Could not listen on socket"
-#~ msgstr "אין אפשרות להקשיב בשקע זה"
-
-#~ msgid "Unable to read socket"
-#~ msgstr "אין אפשרות לקרוא את השקע"
-
-#~ msgid "Connection failed."
-#~ msgstr "ההתחברות נכשלה."
-
-#~ msgid "Server has disconnected"
-#~ msgstr "השרת התנתק"
-
-#~ msgid "Couldn't create socket"
-#~ msgstr "אין אפשרות ליצור שקע"
-
-#~ msgid "Couldn't connect to host"
-#~ msgstr "לא ניתן להתחבר לשרת"
-
-#~ msgid "Read error"
-#~ msgstr "שגיאה בקריאה"
-
-#~ msgid ""
-#~ "Could not establish a connection with the server:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "לא ניתן ליצור חיבור עם השרת:\n"
-#~ "%s"
-
-#~ msgid "Write error"
-#~ msgstr "שגיאה בכתיבה"
-
-#~ msgid "Last Activity"
-#~ msgstr "פעילות אחרונה"
-
-#~ msgid "Service Discovery Info"
-#~ msgstr "מידע של שירות תגלית"
-
-#~ msgid "Service Discovery Items"
-#~ msgstr "פריטי שירות תגלית"
-
-#~ msgid "Extended Stanza Addressing"
-#~ msgstr "כתובות מורחבות לסטאנזות"
-
-#~ msgid "Multi-User Chat"
-#~ msgstr "צ'אט מרובה משתמשים"
-
-#~ msgid "Multi-User Chat Extended Presence Information"
-#~ msgstr "מידע נוכחותי בצ'אט מרובה משתמשים"
-
-#~ msgid "In-Band Bytestreams"
-#~ msgstr "זרמי-נתונים לפי הסדר"
-
-#~ msgid "Ad-Hoc Commands"
-#~ msgstr "פקודות זמניות"
-
-#~ msgid "PubSub Service"
-#~ msgstr "שירות PubSub"
-
-#~ msgid "SOCKS5 Bytestreams"
-#~ msgstr "זרמי-נתונים של SOCKS5"
-
-#~ msgid "Out of Band Data"
-#~ msgstr "מידע שלא לפי סדר"
-
-#~ msgid "XHTML-IM"
-#~ msgstr "XHTML-IM"
-
-#~ msgid "In-Band Registration"
-#~ msgstr "רישום דרך התור"
-
-#~ msgid "User Location"
-#~ msgstr "מיקום משתמש"
-
-#~ msgid "User Avatar"
-#~ msgstr "תמונת משתמש"
-
-#~ msgid "Chat State Notifications"
-#~ msgstr "התרעות על מצבי צ'אט"
-
-#~ msgid "Software Version"
-#~ msgstr "גירסת תוכנה"
-
-#~ msgid "Stream Initiation"
-#~ msgstr "איתחול זרם"
-
-#~ msgid "User Activity"
-#~ msgstr "פעילות משתמש"
-
-#~ msgid "Entity Capabilities"
-#~ msgstr "יכולות ישות"
-
-#~ msgid "Encrypted Session Negotiations"
-#~ msgstr "מיקוחים לחיבור מוצפן"
-
-#~ msgid "User Tune"
-#~ msgstr "שיר משתמש"
-
-#~ msgid "Roster Item Exchange"
-#~ msgstr "החלפת פריטי רשימה"
-
-#~ msgid "Reachability Address"
-#~ msgstr "כתובת זמינות"
-
-#~ msgid "Jingle"
-#~ msgstr "ג'ינגל"
-
-#~ msgid "Jingle Audio"
-#~ msgstr "צליל ג'ינגל"
-
-#~ msgid "User Nickname"
-#~ msgstr "כינוי משתמש"
-
-#~ msgid "Jingle ICE UDP"
-#~ msgstr "ג'ינגל ICE UDP"
-
-#~ msgid "Jingle ICE TCP"
-#~ msgstr "ג'ינגל ICE TCP"
-
-#~ msgid "Jingle Raw UDP"
-#~ msgstr "ג'ינגל UDP לא-מעובד"
-
-#~ msgid "Jingle Video"
-#~ msgstr "ג'ינגל וידאו"
-
-#~ msgid "Jingle DTMF"
-#~ msgstr "ג'ינגל DTMF"
-
-#~ msgid "Message Receipts"
-#~ msgstr "קבלות הודעות"
-
-#~ msgid "Public Key Publishing"
-#~ msgstr "פירסום מפתח ציבורי"
-
-#~ msgid "User Chatting"
-#~ msgstr "משתמש מצ'וטט"
-
-#~ msgid "User Browsing"
-#~ msgstr "משתמש גולש"
-
-#~ msgid "User Gaming"
-#~ msgstr "משתמש משחק"
-
-#~ msgid "User Viewing"
-#~ msgstr "משתמש צופה"
-
-#~ msgid "Stanza Encryption"
-#~ msgstr "הצפנת סטנזה"
-
-#~ msgid "Entity Time"
-#~ msgstr "זמן ישות"
-
-#~ msgid "Delayed Delivery"
-#~ msgstr "משלוח מעוכב"
-
-#~ msgid "Collaborative Data Objects"
-#~ msgstr "אובייקטי מידע שיתופיים"
-
-#~ msgid "File Repository and Sharing"
-#~ msgstr "ספריית קבצים ושיתוף"
-
-#~ msgid "STUN Service Discovery for Jingle"
-#~ msgstr "שירות תגלית STUN עבור ג'ינגל"
-
-#~ msgid "Simplified Encrypted Session Negotiation"
-#~ msgstr "מיקוח פשוט לחיבור המוצפן"
-
-#~ msgid "Hop Check"
-#~ msgstr "בדיקת קפיצות"
-
-#~ msgid "Read Error"
-#~ msgstr "שגיאה בקריאה"
-
-#~ msgid "Failed to connect to server."
-#~ msgstr "כשל בהתחברות לשרת"
-
-#~ msgid "Read buffer full (2)"
-#~ msgstr "תור-הקריאה מלא (2)"
-
-#~ msgid "Unparseable message"
-#~ msgstr "הודעת שלא ניתנת לפיענוח"
-
-#~ msgid "Couldn't connect to host: %s (%d)"
-#~ msgstr "לא ניתן להתחבר לשרת: %s (%d)"
-
-#~ msgid "Login failed (%s)."
-#~ msgstr "לא ניתן להתחבר (%s)."
-
-#~ msgid ""
-#~ "You have been logged out because you logged in at another workstation."
-#~ msgstr "נותקת כיוון שהתחברת ממחשב אחר."
-
-#~ msgid "Error. SSL support is not installed."
-#~ msgstr "שגיאה. לא מותקנת תמיכה ב-SSL."
-
-#~ msgid "Incorrect password."
-#~ msgstr "סיסמה לא נכונה."
-
-#~ msgid ""
-#~ "Could not connect to BOS server:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "לא ניתן להתחבר לשרת ה-BOS:\n"
-#~ "%s"
-
-#~ msgid "You may be disconnected shortly.  Check %s for updates."
-#~ msgstr "ייתכן ותנותק/י בקרוב. יש לבדוק את %s לעידכונים."
-
-#~ msgid "Could Not Connect"
-#~ msgstr "לא ניתן להתחבר"
-
-#~ msgid "Invalid username."
-#~ msgstr "שם משתמש לא תקף."
-
-#, fuzzy
-#~ msgid "Could not decrypt server reply"
-#~ msgstr "אין אפשרות לפיענוח המשוב בעת אימות משתמש"
-
-#~ msgid "Connection lost"
-#~ msgstr "החיבור אבד"
-
-#~ msgid "Couldn't resolve host"
-#~ msgstr "לא ניתן למצוא כתובת שרת"
-
-#~ msgid "Connection closed (writing)"
-#~ msgstr "החיבור נסגר (כתיבה)"
-
-#~ msgid "Connection reset"
-#~ msgstr "החיבור אותחל"
-
-#~ msgid "Error reading from socket: %s"
-#~ msgstr "שגיאה בקריאת נתונים מהשקע: %s"
-
-#~ msgid "Unable to connect to host"
-#~ msgstr "לא ניתן להתחבר לשרת"
-
-#~ msgid "Could not write"
-#~ msgstr "לא ניתן לכתוב"
-
-#~ msgid "Could not create listen socket"
-#~ msgstr "אין אפשרות ליצור שקע-קשב"
-
-#~ msgid "Could not resolve hostname"
-#~ msgstr "לא ניתן למצוא כתובת שרת"
-
-#, fuzzy
-#~ msgid "Incorrect Password"
-#~ msgstr "סיסמה לא נכונה"
-
-#~ msgid ""
-#~ "Could not establish a connection with %s:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "לא היה ניתן ליצור חיבור עם %s:\n"
-#~ "%s"
-
-#~ msgid "Yahoo Japan"
-#~ msgstr "Yahoo יפן"
-
-#~ msgid "Japan Pager server"
-#~ msgstr "שרת ה-Pager ביפן"
-
-#~ msgid "Japan file transfer server"
-#~ msgstr "שרת יפני להעברת קבצים"
-
-#~ msgid ""
-#~ "Lost connection with server\n"
-#~ "%s"
-#~ msgstr ""
-#~ "אבד החיבור עם השרת\n"
-#~ "%s"
-
-#~ msgid "Could not resolve host name"
-#~ msgstr "לא ניתן למצוא כתובת שרת"
-
-#, fuzzy
-#~ msgid ""
-#~ "Unable to connect to %s: Server requires TLS/SSL, but no TLS/SSL support "
-#~ "was found."
-#~ msgstr "השרת דורש TLS/SSL להתחברות. לא נמצאה תמיכה ל-TLS/SSL."
-
-#~ msgid "Conversation Window Hiding"
-#~ msgstr "הסתרת חלונות שיחה"
-
-#~ msgid "More Data needed"
-#~ msgstr "נחוץ מידע נוסף"
-
-#~ msgid "Please provide a shortcut to associate with the smiley."
-#~ msgstr "נא להזין קיצור-דרך לקשר עם החייכן."
-
-#~ msgid "Please select an image for the smiley."
-#~ msgstr "יש לבחור תמונה עבור החייכן."
-
-#~ msgid "Activate which ID?"
-#~ msgstr "איזה ID להפעיל?"
-
-#~ msgid "Cursor Color"
-#~ msgstr "צבע הסמן"
-
-#~ msgid "Secondary Cursor Color"
-#~ msgstr "צבע משני של הסמן"
-
-#~ msgid "Interface colors"
-#~ msgstr "צבעי ממשק"
-
-#~ msgid "Widget Sizes"
-#~ msgstr "גדלי פריטי ממשק"
-
-#~ msgid "Invite message"
-#~ msgstr "הודעת הזמנה"
-
-#~ msgid ""
-#~ "Please enter the name of the user you wish to invite,\n"
-#~ "along with an optional invite message."
-#~ msgstr ""
-#~ "יש להזין את שם המשתמש שברצונך להזמין,\n"
-#~ "יחד עם הודעת הזמנה אופציונלית."
-
-#~ msgid "Unable to retrieve MSN Address Book"
-#~ msgstr "לא יכול לאחזר את רשימת הכתובות של MSN"
-
-#~ msgid "Connection to server lost (no data received within %d second)"
-#~ msgid_plural ""
-#~ "Connection to server lost (no data received within %d seconds)"
-#~ msgstr[0] "אבד החיבור אל השרת (לא התקבל מידע תוך %d שניה)"
-#~ msgstr[1] "אבד החיבור אל השרת (לא התקבל מידע תוך %d שניות)"
-
-#~ msgid ""
-#~ "You may be disconnected shortly.  You may want to use TOC until this is "
-#~ "fixed.  Check %s for updates."
-#~ msgstr ""
-#~ "ייתכן ותנותק/י בקרוב. אולי תרצ/י להיעזר ב-TOC עד אשר זה יתוקן. אפשר לבדוק "
-#~ "ב%s לעידכונים."
-
-#, fuzzy
-#~ msgid "Add buddy Q&A"
-#~ msgstr "הוסף איש קשר"
-
-#, fuzzy
-#~ msgid "Can not decrypt get server reply"
-#~ msgstr "אין אפשרות לפיענוח המשוב בעת אימות משתמש"
-
-#~ msgid "Keep alive error"
-#~ msgstr "שגיאה בהשאר-חי"
-
-#~ msgid ""
-#~ "Lost connection with server:\n"
-#~ "%d, %s"
-#~ msgstr ""
-#~ "אבדה התקשורת עם שרת:\n"
-#~ "%d, %s"
-
-#, fuzzy
-#~ msgid "Connecting server ..."
-#~ msgstr "שרת ההתחברות"
-
-#~ msgid "Failed to send IM."
-#~ msgstr "כישלון בשליחת הודעה."
-
-#, fuzzy
-#~ msgid "Not a member of room \"%s\"\n"
-#~ msgstr "אינך חבר/ה בקבוצה \"%s\"\n"
-
-#~ msgid "Looking up %s"
-#~ msgstr "מחפש את %s..."
-
-#~ msgid "Connect to %s failed"
-#~ msgstr "ההתחברות אל %s לא הצליחה."
-
-#~ msgid "Signon: %s"
-#~ msgstr "מתחבר: %s"
-
-#~ msgid "Unable to write file %s."
-#~ msgstr "אין אפשרות לכתוב אל הקובץ %s"
-
-#~ msgid "Unable to read file %s."
-#~ msgstr "אין אפשרות לקרוא את הקובץ %s."
-
-#~ msgid "Message too long, last %s bytes truncated."
-#~ msgstr "הודעה ארוכה מדי, %s הבייטים האחרונים נקטמו."
-
-#~ msgid "%s not currently logged in."
-#~ msgstr "%s אינו מחובר כרגע."
-
-#~ msgid "Warning of %s not allowed."
-#~ msgstr "אזהרה של %s  אינה מותרת."
-
-#~ msgid ""
-#~ "A message has been dropped, you are exceeding the server speed limit."
-#~ msgstr "אבדה הודעה; אתה עובר על הגבלת המהירות של השרת."
-
-#~ msgid "Chat in %s is not available."
-#~ msgstr "צ'אט ב-%s אינו זמין."
-
-#~ msgid "You are sending messages too fast to %s."
-#~ msgstr "אתה שולח הודעות אל %s מהר מדיי."
-
-#~ msgid "You missed an IM from %s because it was too big."
-#~ msgstr "פספסת הודעה מ-%s כיוון שהיא הייתה ארוכה מדי."
-
-#~ msgid "You missed an IM from %s because it was sent too fast."
-#~ msgstr "פספסת הודעה מ-%s כיוון שהיא נשלחה מהר מדי."
-
-#~ msgid "Failure."
-#~ msgstr "כישלון."
-
-#~ msgid "Too many matches."
-#~ msgstr "יותר מידי תוצאות"
-
-#~ msgid "Need more qualifiers."
-#~ msgstr "החיפוש זקוק ליותר מגדירים."
-
-#~ msgid "Dir service temporarily unavailable."
-#~ msgstr "שירות המדריך אינו זמין זמנית."
-
-#~ msgid "Email lookup restricted."
-#~ msgstr "חיפוש הדוא\"ל מוגבל."
-
-#~ msgid "Keyword ignored."
-#~ msgstr "יתעלם ממילת המפתח."
-
-#~ msgid "No keywords."
-#~ msgstr "אין מילות מפתח."
-
-#~ msgid "User has no directory information."
-#~ msgstr "אין מידע עבור משתמש זה"
-
-#~ msgid "Country not supported."
-#~ msgstr "המדינה אינה נתמכת."
-
-#~ msgid "Failure unknown: %s."
-#~ msgstr "כשל מוכר: %s"
-
-#~ msgid "Incorrect username or password."
-#~ msgstr "שם משתמש או סיסמא שגויים."
-
-#~ msgid "The service is temporarily unavailable."
-#~ msgstr "השירות אינו זמין זמנית."
-
-#~ msgid "Your warning level is currently too high to log in."
-#~ msgstr "רמת האזהרה שלך גבוהה מדיי כרגע מכדי להיכנס למערכת."
-
-#~ msgid ""
-#~ "You have been connecting and disconnecting too frequently.  Wait ten "
-#~ "minutes and try again.  If you continue to try, you will need to wait "
-#~ "even longer."
-#~ msgstr ""
-#~ "התחברת והתנתקת בתדירות גבוהה מדיי. המתן 10 דקות ונסה שנית. אם תמשיך "
-#~ "לנסות, תיאלץ להמתין אפילו יותר."
-
-#~ msgid "An unknown error, %d, has occurred.  Info: %s"
-#~ msgstr "ארעה שגיאה לא מוכרת, %d, מידע: %s"
-
-#~ msgid "Invalid Groupname"
-#~ msgstr "שם הקבוצה שגוי"
-
-#~ msgid "Connection Closed"
-#~ msgstr "החיבור נסגר."
-
-#~ msgid "Waiting for reply..."
-#~ msgstr "ממתין לתשובה..."
-
-#~ msgid "TOC has come back from its pause. You may now send messages again."
-#~ msgstr "TOC חזר מן ה-pause שלו. ניתן לשלוח הודעות שוב."
-
-#~ msgid "Password Change Successful"
-#~ msgstr "הסיסמה שלך שונתה בהצלחה."
-
-#~ msgid "Get Dir Info"
-#~ msgstr "השג מידע על המשתמש"
-
-#~ msgid "Set Dir Info"
-#~ msgstr "קבע מידע על המשתמש"
-
-#~ msgid "Could not open %s for writing!"
-#~ msgstr "לא ניתן לפתוח %s לכתיבה"
-
-#~ msgid "File transfer failed; other side probably canceled."
-#~ msgstr "כשל בהעברת הקובץ, כנראה צד שני ביטל"
-
-#~ msgid "Could not connect for transfer."
-#~ msgstr "לא ניתן לחבר את ההעברה."
-
-#~ msgid "Could not write file header.  The file will not be transferred."
-#~ msgstr "לא ניתן לכתוב את רישת הקובץ. הקובץ לא יועבר."
-
-#~ msgid "Save As..."
-#~ msgstr "שמור בשם..."
-
-#~ msgid "%s requests %s to accept %d file: %s (%.2f %s)%s%s"
-#~ msgid_plural "%s requests %s to accept %d files: %s (%.2f %s)%s%s"
-#~ msgstr[0] "%s מבקש מ-%s לקבל %d קובץ: %s (%.2f %s)%s%s"
-#~ msgstr[1] "%s מבקש מ-%s לקבל %d קבצים: %s (%.2f %s)%s%s"
-
-#~ msgid "%s requests you to send them a file"
-#~ msgstr "%s מבקש/ת ממך לשלוח לו/לה קובץ"
-
-#~ msgid "TOC Protocol Plugin"
-#~ msgstr "תוסף פרוטוקול TOC"
-
-#~ msgid "User information for %s unavailable"
-#~ msgstr "פרטי המשתמש %s אינם זמינים"
-
-#~ msgid "%s Options"
-#~ msgstr "%s אפשרויות"
-
-#~ msgid "Proxy Options"
-#~ msgstr "אפשרויות פרוקסי"
-
-#~ msgid "By log size"
-#~ msgstr "לפי גודל יומן השיחות"
-
-#~ msgid "_Open Link in Browser"
-#~ msgstr "_פתח את הקישור בדפדפן"
-
-#~ msgid "Smiley _Image"
-#~ msgstr "_תמונת חייכן"
-
-#~ msgid "Smiley S_hortcut"
-#~ msgstr "קיצורים ל_חייכנים"
-
-#~ msgid "_Flash window when chat messages are received"
-#~ msgstr "_הבהב את חלון השיחה בעת קבלת הודעות צ'אט"
-
-#~ msgid "A group with the name already exists."
-#~ msgstr "קבוצה בשם זה כבר קיימת."
-
-#~ msgid "Primary Information"
-#~ msgstr "מידע ראשי"
-
-#~ msgid "Blood Type"
-#~ msgstr "סוג דם"
-
-#, fuzzy
-#~ msgid "Update information"
-#~ msgstr "עדכן את המידע שלי"
-
-#, fuzzy
-#~ msgid "Successed:"
-#~ msgstr "מהירות:"
-
-#~ msgid ""
-#~ "Setting custom faces is not currently supported. Please choose an image "
-#~ "from %s."
-#~ msgstr "אין כרגע תמיכה בהתאמה אישית של פרצופים. יש לבחור בתמונה מתוך %s."
-
-#~ msgid "Invalid QQ Face"
-#~ msgstr "פרצוף QQ לא תקף"
-
-#~ msgid "You rejected %d's request"
-#~ msgstr "דחית את בקשת %d"
-
-#~ msgid "Reject request"
-#~ msgstr "דחה בקשה"
-
-#~ msgid "Add buddy with auth request failed"
-#~ msgstr "כישלון בהוספת איש-קשר עם בקשת אימות"
-
-#, fuzzy
-#~ msgid "Add into %d's buddy list"
-#~ msgstr "לא ניתן לטעון את רשימת אנשי הקשר"
-
-#, fuzzy
-#~ msgid "QQ Number Error"
-#~ msgstr "מספר QQ"
-
-#~ msgid "Group Description"
-#~ msgstr "תיאור הקבוצה"
-
-#~ msgid "Auth"
-#~ msgstr "אימות"
-
-#~ msgid "Approve"
-#~ msgstr "אשר"
-
-#, fuzzy
-#~ msgid "Successed to join Qun %d, operated by admin %d"
-#~ msgstr "בקשתך להצטרף לקבוצה %d נדחתה על ידי המנהל %d"
-
-#, fuzzy
-#~ msgid "[%d] removed from Qun \"%d\""
-#~ msgstr "את/ה [%d] עזבת את קבוצה \"%d\""
-
-#, fuzzy
-#~ msgid "[%d] added to Qun \"%d\""
-#~ msgstr "את/ה [%d] נוספת אל הקבוצה \"%d\""
-
-#~ msgid "I am a member"
-#~ msgstr "אני הנני חבר/ה"
-
-#, fuzzy
-#~ msgid "I am requesting"
-#~ msgstr "בקשה שגויה"
-
-#~ msgid "I am the admin"
-#~ msgstr "אני המנהל/ת"
-
-#~ msgid "Unknown status"
-#~ msgstr "מצב לא ידוע"
-
-#, fuzzy
-#~ msgid "Remove from Qun"
-#~ msgstr "הסר קבוצה"
-
-#~ msgid "You entered a group ID outside the acceptable range"
-#~ msgstr "הזנת מזהה-קבוצה מחוץ לטווח התקף"
-
-#~ msgid "Are you sure you want to leave this Qun?"
-#~ msgstr "האם ברצונך לעזוב את Qun זה?"
-
-#~ msgid "Do you want to approve the request?"
-#~ msgstr "האם ברצונך לאשר את הבקשה?"
-
-#, fuzzy
-#~ msgid "Change Qun member"
-#~ msgstr "מםפר טלפון"
-
-#, fuzzy
-#~ msgid "Change Qun information"
-#~ msgstr "מידע על הערוץ"
-
-#~ msgid "System Message"
-#~ msgstr "הודעת מערכת"
-
-#~ msgid "<b>Last Login IP</b>: %s<br>\n"
-#~ msgstr "<b>כתובת חיבור אחרונה</b>: %s<br>\n"
-
-#~ msgid "<b>Last Login Time</b>: %s\n"
-#~ msgstr "<b>זמן חיבור אחרון</b>: %s\n"
-
-#~ msgid "Set My Information"
-#~ msgstr "קבע את המידע שלי"
-
-#, fuzzy
-#~ msgid "Leave the QQ Qun"
-#~ msgstr "עזוב QQ Qun זה"
-
-#~ msgid "Block this buddy"
-#~ msgstr "חסום משתמש זה"
-
-#~ msgid "Invalid token reply code, 0x%02X"
-#~ msgstr "קוד-תגובה שגוי, 0x%02X"
-
-#, fuzzy
-#~ msgid "Error password: %s"
-#~ msgstr "שגיאה במהלך שינוי הסיסמה"
-
-#, fuzzy
-#~ msgid "Failed to connect all servers"
-#~ msgstr "כישלון בהתחברות לשרת"
-
-#~ msgid "Connecting server %s, retries %d"
-#~ msgstr "מתחבר עם שרת %s, ניסיונות %d"
-
-#, fuzzy
-#~ msgid "Do you approve the requestion?"
-#~ msgstr "האם ברצונך לאשר את הבקשה?"
-
-#, fuzzy
-#~ msgid "Do you add the buddy?"
-#~ msgstr "האם ברצונך להוסיף את המשתמש הזה?"
-
-#, fuzzy
-#~ msgid "%s added you [%s] to buddy list"
-#~ msgstr "%s הוסיפ/ה אותך [%s] לרשימת אנשי הקשר שלו או שלה."
-
-#, fuzzy
-#~ msgid "QQ Budy"
-#~ msgstr "איש הקשר"
-
-#~ msgid "%s wants to add you [%s] as a friend"
-#~ msgstr "%s רוצה להוסיף אותך [%s] כחבר"
-
-#, fuzzy
-#~ msgid "%s is not in buddy list"
-#~ msgstr "%s אינו ברשימת אנשי-הקשר שלך"
-
-#, fuzzy
-#~ msgid "Would you add?"
-#~ msgstr "האם ברצונך להוסיף אותו?"
-
-#~ msgid "%s"
-#~ msgstr "%s"
-
-#, fuzzy
-#~ msgid "QQ Server Notice"
-#~ msgstr "פורט השרת"
-
-#, fuzzy
-#~ msgid "Network disconnected"
-#~ msgstr "הצד המרוחק מנותק"
-
-#~ msgid "developer"
-#~ msgstr "מפתח"
-
-#~ msgid "XMPP developer"
-#~ msgstr "מפתח XMPP"
-
-#~ msgid "Artists"
-#~ msgstr "אמנים"
-
-#~ msgid ""
-#~ "You are using %s version %s.  The current version is %s.  You can get it "
-#~ "from <a href=\"%s\">%s</a><hr>"
-#~ msgstr ""
-#~ "%s שבשימוש הוא גירסא %s. הגירסא הנוכחית היא %s.  ניתן להשיג אותה מ-<a "
-#~ "href=\"%s\">%s</a><hr>"
-
-#~ msgid "<b>ChangeLog:</b><br>%s"
-#~ msgstr "<b>רשימת שינויים:</b><br>%s"
-
-#~ msgid "EOF while reading from resolver process"
-#~ msgstr "קבלת סיום-קובץ בעת קריאה מתהליך ה-resolver"
-
-#~ msgid "Your information has been updated"
-#~ msgstr "המידע שלך עודכן"
-
-#~ msgid "Input your reason:"
-#~ msgstr "הזנ/י את סיבתך:"
-
-#~ msgid "You have successfully removed a buddy"
-#~ msgstr "הסרת איש-קשר בהצלחה"
-
-#~ msgid "You have successfully removed yourself from your friend's buddy list"
-#~ msgstr "הסרת את עצמך בהצלחה מרשימת אנשי הקשר של חברך"
-
-#~ msgid "You have added %d to buddy list"
-#~ msgstr "הוספת את %d לרשימת אנשי-קשר"
-
-#~ msgid "Invalid QQid"
-#~ msgstr "QQid לא תקף"
-
-#~ msgid "Please enter external group ID"
-#~ msgstr "יש להזין ID של הקבוצה החיצונית"
-
-#~ msgid "Reason: %s"
-#~ msgstr "סיבה: %s"
-
-#~ msgid "Your request to join group %d has been approved by admin %d"
-#~ msgstr "בקשתך להצטרף לקבוצה %d אושרה על ידי המנהל %d"
-
-#~ msgid "I am applying to join"
-#~ msgstr "אני מבקש/ת להצטרף"
-
-#~ msgid "You have successfully left the group"
-#~ msgstr "עבת את הקבוצה בהצלחה "
-
-#~ msgid "QQ Group Auth"
-#~ msgstr "אימות לקבוצת QQ"
-
-#~ msgid "Your authorization request has been accepted by the QQ server"
-#~ msgstr "בקשת האימות שלך התקבלה בחיוב על ידי שרת ה-QQ"
-
-#~ msgid "Enter your reason:"
-#~ msgstr "הזנ/י את סיבתך:"
-
-#~ msgid " Space"
-#~ msgstr " ספייס"
-
-#~ msgid "<b>Real hostname</b>: %s: %d<br>\n"
-#~ msgstr "<b>שם מחשב אמיתי</b>: %s: %d<br>\n"
-
-#~ msgid "Show Login Information"
-#~ msgstr "הצג מידע על החיבור"
-
-#~ msgid "resend interval(s)"
-#~ msgstr "פרק זמן בין שליחות חוזרות"
-
-#~ msgid "hostname is NULL or port is 0"
-#~ msgstr "שם המחשב ריק, או מספר השקע 0"
-
-#~ msgid "Unable to login. Check debug log."
-#~ msgstr "לא ניתן להיכנס. יש לבדוק ביומן רישום הבאגים"
-
-#~ msgid "Failed room reply"
-#~ msgstr "כשל במשוב מהחדר"
-
-#~ msgid "User %s rejected your request"
-#~ msgstr "המשתמש %s סרב לבקשתך"
-
-#~ msgid "User %s approved your request"
-#~ msgstr "המשתמש %s אישר את בקשתך"
-
-#~ msgid "Notice from: %s"
-#~ msgstr "הודעה מאת: %s"
-
-#~ msgid "Code [0x%02X]: %s"
-#~ msgstr "קוד [0x%02X]: %s"
-
-#~ msgid "Group Operation Error"
-#~ msgstr "שגיאה בפעולת-קבוצה"
-
-#~ msgid "Error setting socket options"
-#~ msgstr "שגיאה בקביעת הגדרות השקע"
-
-#~ msgid ""
-#~ "Windows Live ID authentication: cannot find authenticate token in server "
-#~ "response"
-#~ msgstr "אימות מזהה Windows Live: לא ניתן למצוא סמל אימות בתגובת השרת"
-
-#~ msgid "Windows Live ID authentication Failed"
-#~ msgstr "אימות מזהה Windows Live נכשלה"
-
-#~ msgid "Too evil (sender)"
-#~ msgstr "השולח מרושע מדי"
-
-#~ msgid "Too evil (receiver)"
-#~ msgstr "המקבל מרושע מדי"
-
-#~ msgid "Available Message"
-#~ msgstr "הודעת זמינות"
-
-#~ msgid "Away Message"
-#~ msgstr "הודעת ריחוק מהמחשב"
-
-#~ msgid "<i>(retrieving)</i>"
-#~ msgstr " <i>(שולף)</i>"
-
-#~ msgid "TCP Address"
-#~ msgstr "כתובת TCP"
-
-#~ msgid "UDP Address"
-#~ msgstr "כתובת UDP"
-
-#, fuzzy
-#~ msgid "Display Statistics"
-#~ msgstr "סטטיסטיקות של השרת"
-
-#~ msgid "Screen name:"
-#~ msgstr "שם לתצוגה:"
-
-#~ msgid "Someone says your screen name in chat"
-#~ msgstr "מישהו מזכיר את שמך בצ'אט"
-
-#~ msgid ""
-#~ "This server requires plaintext authentication over an unencrypted "
-#~ "connection.  Allow this and continue authentication?"
-#~ msgstr "השרת דורש אימות לא מוצפן מעל תקשורת לא מוצפנת.להמשיך בכל זאת?"
-
-#~ msgid "Use GSSAPI (Kerberos v5) for authentication"
-#~ msgstr "השתמש בGSSAPI (קרברוס גירסה 5) לצורך אימות"
-
-#~ msgid "Invalid screen name"
-#~ msgstr "שם לתצוגה לא תקין"
-
-#~ msgid "Invalid screen name."
-#~ msgstr "שם-תצוגה לא תקין."
-
-#~ msgid "Screen _name:"
-#~ msgstr "שם לתצוגה:"
-
-#~ msgid ""
-#~ "%s%s<span weight=\"bold\">Written by:</span>\t%s\n"
-#~ "<span weight=\"bold\">Website:</span>\t\t%s\n"
-#~ "<span weight=\"bold\">Filename:</span>\t\t%s"
-#~ msgstr ""
-#~ "%s%s<span weight=\"bold\">נכתב ע\"י:</span>\t%s\n"
-#~ "<span weight=\"bold\">אתר:</span>\t\t%s\n"
-#~ "<span weight=\"bold\">שם קובץ:</span>\t\t%s"
-
-#~ msgid ""
-#~ "The contact availability plugin (cap) is used to display statistical "
-#~ "information about buddies in a users contact list."
-#~ msgstr ""
-#~ "התוסף לניבוי זמינות אנשי-קשר מציג מידע סטטיסטי על החברים ברשימת אנשי הקשר "
-#~ "של המשתמש."
--- a/po/kn.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/kn.po	Thu Feb 18 21:38:43 2010 +0000
@@ -8,10 +8,10 @@
 msgstr ""
 "Project-Id-Version: kn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-14 12:14-0800\n"
-"PO-Revision-Date: 2010-01-07 17:46+0530\n"
+"POT-Creation-Date: 2010-02-11 21:53-0800\n"
+"PO-Revision-Date: 2010-02-11 16:06+0530\n"
 "Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
-"Language-Team: Kannada <kde-l10n-kn@kde.org>\n"
+"Language-Team: American English <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -25,7 +25,7 @@
 
 #, c-format
 msgid "%s. Try `%s -h' for more information.\n"
-msgstr "%s.ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ  ಪ್ರಯತ್ನಿಸಿ `%s -h' .\n"
+msgstr "%s. ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ `%s -h' ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ .\n"
 
 #, c-format
 msgid ""
@@ -1110,10 +1110,10 @@
 
 #, c-format
 msgid "Are you sure you want to delete the pounce on %s for %s?"
-msgstr " %s ಮೇಲೆ  %s ಗಿರುವ ಎರಗಪ್ಪನನ್ನು ತೆಗೆದುಹಾಕಬೇಕೆ?"
+msgstr " %s ಮೇಲೆ  %s ಗಾಗಿ ಇರುವ ತಟ್ಟನೆ ಕಾಣಿಸುವಿಕೆಯನ್ನು ತೆಗೆದುಹಾಕಬೇಕೆ?"
 
 msgid "Buddy Pounces"
-msgstr "ಗೆಳೆಯನ-ಮೇಲೆ-ಎರಗಪ್ಪಗಳು"
+msgstr "ಗೆಳೆಯನ ತಟ್ಟನೆ ಕಾಣಿಸುವಿಕೆಗಳು"
 
 #, c-format
 msgid "%s has started typing to you (%s)"
@@ -1156,7 +1156,7 @@
 msgstr "%s ನಿಮಗೆ ಒಂದು ಸಂದೇಶ ಕಳಿಸಿದ್ದಾರೆ. (%s)"
 
 msgid "Unknown pounce event. Please report this!"
-msgstr "ಗುರುತುಹಿಡಿಯಲಾಗದ ಪೌನ್ಸ್ ಈವೆಂಟ್; ಇದನ್ನು ವರದಿ ಮಾಡಿ!"
+msgstr "ಗುರುತುಹಿಡಿಯಲಾಗದ ತಟ್ಟನೆ ಕಾಣಿಸುವ ಘಟನೆ; ಇದನ್ನು ವರದಿ ಮಾಡಿ!"
 
 msgid "Based on keyboard use"
 msgstr "ಕೀಲಿಮಣೆಯ ಬಳಕೆಯ ಮೇಲೆ ಆಧರಿತವಾಗಿರುತ್ತದೆ"
@@ -1702,7 +1702,7 @@
 #. Make messages
 #, c-format
 msgid "%s has presented the following certificate for just-this-once use:"
-msgstr ""
+msgstr "%s ಈ ಕೆಳಗಿನ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಕೇವಲ ಈ ಬಾರಿಯ ಬಳಕೆಗಾಗಿ ಮಾತ್ರ ಒದಗಿಸಿದ್ದಾರೆ:"
 
 #, c-format
 msgid ""
@@ -1714,7 +1714,7 @@
 
 #. TODO: Find what the handle ought to be
 msgid "Single-use Certificate Verification"
-msgstr ""
+msgstr "ಒಂದೆ ಬಾರಿ ಬಳಕೆಯ ಪ್ರಮಾಣಪತ್ರದ ಪರಿಶೀಲನೆ"
 
 #. Scheme name
 #. Pool name
@@ -1740,7 +1740,7 @@
 
 #, c-format
 msgid "The certificate for %s could not be validated."
-msgstr ""
+msgstr "%s ಗಾಗಿನ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಮಾನ್ಯವೆಂದು ಪರಿಗಣಿಸಲಾಗಿಲ್ಲ."
 
 #. TODO: Probably wrong.
 msgid "SSL Certificate Error"
@@ -1865,16 +1865,16 @@
 msgstr "serv name ಪಡೆಯಲು ವಿಫಲ: %s"
 
 msgid "Purple's D-BUS server is not running for the reason listed below"
-msgstr ""
+msgstr "ಪರ್ಪಲ್‌ನ D-BUS ಪರಿಚಾರಕವು ಈ ಕೆಳಗೆ ನೀಡಲಾದ ಕಾರಣದಿಂದಾಗಿ ಚಲಾಯಿತಗೊಳ್ಳುತ್ತಿಲ್ಲ"
 
 msgid "No name"
 msgstr "ಹೆಸರು ಇಲ್ಲ."
 
 msgid "Unable to create new resolver process\n"
-msgstr ""
+msgstr "ಹೊಸ ಪರಿಹಾರಕ ಪ್ರಕ್ರಿಯನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ\n"
 
 msgid "Unable to send request to resolver process\n"
-msgstr ""
+msgstr "ಪರಿಹಾರಕ ಪ್ರಕ್ರಿಯೆಗೆ ಮನವಿಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ\n"
 
 # , c-format
 #, c-format
@@ -1889,15 +1889,16 @@
 msgid "Error resolving %s: %d"
 msgstr "%s ಅನ್ನು ಪರಿಹರಿಸುವಲ್ಲಿ ದೋಷ: %d"
 
-#, fuzzy, c-format
+# , c-format
+#, c-format
 msgid ""
 "Error reading from resolver process:\n"
 "%s"
-msgstr "%s ದಿಂದ ಓದುವಾಗ ದೋಷ: %s"
+msgstr "ಪರಿಹಾರಕ ಪ್ರಕ್ರಿಯೆಯಿಂದ ಓದುವಾಗ ದೋಷ ಉಂಟಾಗಿದೆ: %s"
 
 #, c-format
 msgid "Resolver process exited without answering our request"
-msgstr ""
+msgstr "ನಮ್ಮ ಮನವಿಗೆ ಉತ್ತರಿಸದೆ ಪರಿಹಾರಕವು ನಿರ್ಗಮಿಸಿದೆ"
 
 # , c-format
 #, c-format
@@ -1947,7 +1948,7 @@
 
 #, c-format
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
-msgstr ""
+msgstr "%s ಯು ಒಂದು ಸಾಮಾನ್ಯವಾದ ಕಡತವಾಗಿಲ್ಲ. ಹೆದರುತ್ತಲೆ ಅದನ್ನು ತಿದ್ದಿ ಬರೆಯಲಾಗುತ್ತಿದೆ.\n"
 
 msgid "File is not readable."
 msgstr "ಕಡತವನ್ನು ಓದಲು ಸಾಧ್ಯವಿಲ್ಲ."
@@ -2167,7 +2168,7 @@
 msgstr "ಸೂಚಿಸಿರುವ ಆಜ್ಞೆಯು \"ymsgr\" URLಗಳನ್ನು ನಿಭಾಯಿಸಬೇಕೆ"
 
 msgid "<b><font color=\"red\">The logger has no read function</font></b>"
-msgstr ""
+msgstr "<b><font color=\"red\">ದಾಖಲೆಗಾರನಲ್ಲಿ ಯಾವುದೆ ಓದುವ ಕ್ರಿಯೆ ಇಲ್ಲ</font></b>"
 
 msgid "HTML"
 msgstr "ಹೆಚ್.ಟಿ.ಎಮ್.ಎಲ್/ಅತಿ ಪಠ್ಯ"
@@ -2176,7 +2177,7 @@
 msgstr "ಸಾದಾ ಪಠ್ಯ"
 
 msgid "Old flat format"
-msgstr ""
+msgstr "ಹಳೆಯ ಸಪಾಟು ವಿನ್ಯಾಸ"
 
 msgid "Logging of this conversation failed."
 msgstr "ಈ ಮಾತುಕತೆಯ ಲಾಗಿಂಗ್ ವಿಫಲ"
@@ -2202,6 +2203,7 @@
 
 msgid "<font color=\"red\"><b>Unable to find log path!</b></font>"
 msgstr ""
+"<font color=\"red\"><b>ದಾಖಲೆಯ ಮಾರ್ಗವನ್ನು ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ!</b></font>"
 
 #, c-format
 msgid "<font color=\"red\"><b>Could not read file: %s</b></font>"
@@ -2224,9 +2226,8 @@
 "ಯಾವುದೆ ಕೋಡೆಕ್‌ಗಳು ಉಳಿದಿಲ್ಲ. fs-codecs.conf ನಲ್ಲಿನ ನಿಮ್ಮ ಆದ್ಯತೆಗಳು ಬಹಳ "
 "ಕಟ್ಟುನಿಟ್ಟಾಗಿದೆ."
 
-#, fuzzy
 msgid "A non-recoverable Farsight2 error has occurred."
-msgstr "ಈ ಕೆಳಗಿನ ದೋಷವು ಸಂಭವಿಸಿದೆ"
+msgstr "ಸರಿಪಡಿಸಲಾಗದ ಒಂದು Farsight2 ದೋಷವು ಸಂಭವಿಸಿದೆ."
 
 msgid "Conference error"
 msgstr "ಸಮ್ಮೇಳನ(ಕಾನ್ಫರೆನ್ಸ್ ದೋಷ)"
@@ -2250,11 +2251,11 @@
 msgstr "ನೀವು %s ಅನ್ನು ಬಳಸುತ್ತಿದ್ದೀರಿ, ಆದರೆ ಪ್ಲಗ್‌ಇನ್‌ಗೆ %s ಅಗತ್ಯವಿದೆ."
 
 msgid "This plugin has not defined an ID."
-msgstr ""
+msgstr "ಈ ಪ್ಲಗ್ಗಿನ್‌ನಲ್ಲಿ ಸೂಚಿಸಲಾದ ID ಇಲ್ಲ."
 
 #, c-format
 msgid "Plugin magic mismatch %d (need %d)"
-msgstr ""
+msgstr "ಪ್ಲಗ್ಗಿನ್ ಮ್ಯಾಜಿಕ್ %d ಗೆ ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ (%d ನ ಅಗತ್ಯವಿದೆ)"
 
 #, c-format
 msgid "ABI version mismatch %d.%d.x (need %d.%d.x)"
@@ -2263,6 +2264,8 @@
 msgid ""
 "Plugin does not implement all required functions (list_icon, login and close)"
 msgstr ""
+"ಪ್ಲಗ್ಗಿನ್ ಎಲ್ಲಾ ಅಗತ್ಯ ಕ್ರಿಯೆಗಳನ್ನು ಅನ್ವಯಿಸುವುದಿಲ್ಲ (list_icon, ಪ್ರವೇಶ(ಲಾಗಿನ್) ಹಾಗು "
+"ಮುಚ್ಚುವಿಕೆ)"
 
 #, c-format
 msgid ""
@@ -2289,29 +2292,30 @@
 msgid "Autoaccept"
 msgstr "ಸ್ವಯಂಸ್ವೀಕರಿಸುವಿಕೆ"
 
-#, fuzzy
 msgid "Auto-accept file transfer requests from selected users."
-msgstr "%s ರಿಂದ ಕಡತ ವರ್ಗಾವಣೆಯ ಕೋರಿಕೆಯನ್ನು ಒಪ್ಪಬೇಕೆ ?"
-
-#, fuzzy, c-format
+msgstr "ಆಯ್ದ ಬಳಕೆದಾರರಿಂದ ಮನವಿ ಸಲ್ಲಿಸಲಾದ ಕಡತ ವರ್ಗಾವಣೆಯ ಕೋರಿಕೆಯನ್ನು ತಾನಾಗಿಯೆ ಒಪ್ಪಿಕೊ."
+
+# , c-format
+#, c-format
 msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed."
-msgstr "%s ರಿಂದ ಕಡತ ವರ್ಗಾವಣೆಯ ಕೋರಿಕೆಯನ್ನು ಒಪ್ಪಬೇಕೆ ?"
+msgstr "ತಾನಾಗಿಯೆ ಒಪ್ಪಿಕೊಂಡಂತಹ \"%s\" ಇಂದ \"%s\" ಗೆ ಕಡತ ವರ್ಗಾವಣೆಯು ಪೂರ್ಣಗೊಂಡಿದೆ."
 
 msgid "Autoaccept complete"
 msgstr "ಸ್ವಯಂಅಂಗೀಕಾರ ಪೂರ್ಣಗೊಂಡಿದೆ"
 
-#, fuzzy, c-format
+# , c-format
+#, c-format
 msgid "When a file-transfer request arrives from %s"
-msgstr "%s ರಿಂದ ಕಡತ ವರ್ಗಾವಣೆಯ ಕೋರಿಕೆಯನ್ನು ಒಪ್ಪಬೇಕೆ ?"
+msgstr "%s ರಿಂದ ಕಡತ ವರ್ಗಾವಣೆಯ ಕೋರಿಕೆಯು ಬಂದಾಗ"
 
 msgid "Set Autoaccept Setting"
-msgstr ""
+msgstr "ತಾನಾಗಿಯೆ ಒಪ್ಪಿಕೊಳ್ಳುವ ಸಿದ್ಧತೆಯನ್ನು ಸಜ್ಜುಗೊಳಿಸಿ"
 
 msgid "_Save"
 msgstr "ಉಳಿಸು(_S)"
 
 msgid "_Cancel"
-msgstr "ರದ್ದುಗೊಳಿಸಿ(_C)"
+msgstr "ರದ್ದುಗೊಳಿಸು(_C)"
 
 msgid "Ask"
 msgstr "ಅನುಮತಿಯನ್ನು ಕೇಳು"
@@ -2342,6 +2346,9 @@
 "Notify with a popup when an autoaccepted file transfer is complete\n"
 "(only when there's no conversation with the sender)"
 msgstr ""
+"ತಾನಾಗಿಯೆ ಒಪ್ಪಿಗೊಂಡಂತಹ ಕಡತ ವರ್ಗಾವಣೆಯು ಪೂರ್ಣಗೊಂಡಾಗ ಒಂದು ಪುಟಿಕೆ ವಿಂಡೊದ ಮೂಲಕ "
+"ಸೂಚಿಸು\n"
+"(ಕಳುಹಿಸಿದವರೊಂದಿಗೆ ಯಾವುದೆ ಮಾತುಕತೆ ಇಲ್ಲದಾಗ ಮಾತ್ರ)"
 
 msgid "Create a new directory for each user"
 msgstr "ಪ್ರತಿಯೊಬ್ಬ ಬಳಕೆದಾರರಿಗೂ ಒಂದು ಹೊಸ ಕೋಶವನ್ನು ರಚಿಸಿ"
@@ -2372,9 +2379,10 @@
 msgstr "ನಿಶ್ಚಿತ ಗೆಳೆಯರಲ್ಲಿ ಟಿಪ್ಪಣಿಗಳನ್ನು ಶೇಖರಿಸಿಡಿ."
 
 #. *< summary
-#, fuzzy
 msgid "Adds the option to store notes for buddies on your buddy list."
-msgstr "%s ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿಲ್ಲ"
+msgstr ""
+"ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿರುವ ಗೆಳೆಯರಿಗಾಗಿ ಟಿಪ್ಪಣಿಯನ್ನು ಶೇಖರಿಸಿ ಇಡಲು ಆಯ್ಕೆಯನ್ನು "
+"ಸೇರಿಸುತ್ತದೆ."
 
 #. *< type
 #. *< ui_requirement
@@ -2390,7 +2398,7 @@
 #. *  summary
 #. *  description
 msgid "Tests the ciphers that ship with libpurple."
-msgstr ""
+msgstr "libpurple ನೊಂದಿಗೆ ಕಳುಹಿಸಲಾದಂತಹ ಸಿಫರುಗಳನ್ನು ಪರೀಕ್ಷಿಸುತ್ತದೆ."
 
 #. *< type
 #. *< ui_requirement
@@ -2422,7 +2430,7 @@
 #. *  summary
 #. *  description
 msgid "Allows control by entering commands in a file."
-msgstr ""
+msgstr "ಒಂದು ಕಡತದಲ್ಲಿ ಆದೇಶಗಳನ್ನು ಬರೆಯುವ ಮೂಲಕ ನಿಯಂತ್ರಣವನ್ನು ಒದಗಿಸುತ್ತದೆ."
 
 msgid "Minutes"
 msgstr "ನಿಮಿಷಗಳು"
@@ -2436,7 +2444,7 @@
 msgstr "ಖಾತೆಯ ನಿಶ್ಚಲ ಸಮಯ ಗೊತ್ತುಪಡಿಸಿ"
 
 msgid "_Set"
-msgstr "ನಿಶ್ಚಯಿಸಿ(_S)"
+msgstr "ನಿಶ್ಚಯಿಸು(_S)"
 
 msgid "None of your accounts are idle."
 msgstr "ನಿಮ್ಮ ಯಾವದೇ ಖಾತೆಗಳು ನಿಶ್ಚಲವಾಗಿಲ್ಲ"
@@ -2445,7 +2453,7 @@
 msgstr "ಖಾತೆಯ  ನಿಶ್ಚಲ ಸಮಯದ ನಿಶ್ಚಯವನ್ನು ರದ್ದುಗೊಳಿಸಿ"
 
 msgid "_Unset"
-msgstr "_ನಿಶ್ಚಯವನ್ನು ರದ್ದುಗೊಳಿಸಿ"
+msgstr "ನಿಶ್ಚಯವನ್ನು ರದ್ದುಗೊಳಿಸು(_U)"
 
 msgid "Set Idle Time for All Accounts"
 msgstr "ಎಲ್ಲ ಖಾತೆಗಳಿಗೆ ನಿಶ್ಚಲ ಸಮಯ ಗೊತ್ತುಪಡಿಸಿ"
@@ -2454,7 +2462,7 @@
 msgstr "ಎಲ್ಲ ನಿಶ್ಚಲಗೊಂಡ ಖಾತೆಗಳ  ನಿಶ್ಚಲ ಸಮಯದ ನಿಶ್ಚಯವನ್ನು ರದ್ದುಗೊಳಿಸಿ"
 
 msgid "Allows you to hand-configure how long you've been idle"
-msgstr ""
+msgstr "ನೀವು ಎಷ್ಟು ಹೊತ್ತು ಜಡವಾಗಿದ್ದೀರಿ ಎಂದು ಕೈಯಾರೆ ಸಂರಚಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ"
 
 #. *< type
 #. *< ui_requirement
@@ -2469,13 +2477,15 @@
 #. *< version
 #. *  summary
 msgid "Test plugin IPC support, as a client."
-msgstr ""
+msgstr "ಪ್ರಾಯೋಗಿಕ ಪ್ಲಗ್ಗಿನ್ IPC ಬೆಂಬಲ, ಕ್ಲೈಂಟ್ ಆಗಿ."
 
 #. *  description
 msgid ""
 "Test plugin IPC support, as a client. This locates the server plugin and "
 "calls the commands registered."
 msgstr ""
+"ಪ್ರಾಯೋಗಿಕ ಪ್ಲಗ್ಗಿನ್ IPC ಬೆಂಬಲ, ಕ್ಲೈಂಟ್ ಆಗಿ. ಇದು ಪರಿಚಾರಕದ ಪ್ಲಗ್ಗಿನ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡಿ "
+"ನಂತರ ನೋಂದಾಯಿಸಲಾದ ಆದೇಶಗಳಿಗೆ ಮನವಿ ಮಾಡುತ್ತದೆ."
 
 #. *< type
 #. *< ui_requirement
@@ -2490,24 +2500,25 @@
 #. *< version
 #. *  summary
 msgid "Test plugin IPC support, as a server."
-msgstr ""
+msgstr "ಪ್ರಾಯೋಗಿಕ ಪ್ಲಗ್ಗಿನ್ IPC ಬೆಂಬಲ, ಪರಿಚಾರಕವಾಗಿ."
 
 #. *  description
 msgid "Test plugin IPC support, as a server. This registers the IPC commands."
 msgstr ""
+"ಪ್ರಾಯೋಗಿಕ ಪ್ಲಗ್ಗಿನ್ IPC ಬೆಂಬಲ, ಪರಿಚಾರಕವಾಗಿ. ಇದು IPC ಆದೇಶಗಳನ್ನು ನೋಂದಾಯಿಸುತ್ತದೆ."
 
 msgid "Hide Joins/Parts"
-msgstr ""
+msgstr "ಸೇರುವ/ಹೊರ ಹೋಗುವುದನ್ನು ಅಡಗಿಸು"
 
 #. Translators: Followed by an input request a number of people
 msgid "For rooms with more than this many people"
-msgstr ""
+msgstr "ಇಷ್ಟು ಜನರಿಗಿಂತ ಹೆಚ್ಚಿನವರು ಇರುವ ರೂಮುಗಳಿದ್ದಾಗ"
 
 msgid "If user has not spoken in this many minutes"
-msgstr ""
+msgstr "ಇಷ್ಟು ನಿಮಿಷದವರೆಗೆ ಬಳಕೆದಾರರು ಮಾತನಾಡದೆ ಇದ್ದಾಗ"
 
 msgid "Apply hiding rules to buddies"
-msgstr ""
+msgstr "ಗೆಳೆಯರಿಗೆ ಅಡಗಿಸುವ ನಿಯಮಗಳನ್ನು ಅನ್ವಯಿಸು"
 
 #. *< type
 #. *< ui_requirement
@@ -2516,19 +2527,21 @@
 #. *< priority
 #. *< id
 msgid "Join/Part Hiding"
-msgstr ""
+msgstr "ಸೇರುವ/ಹೊರ ಹೋಗುವಿಕೆಯನ್ನು ಅಡಗಿಸುವಿಕೆ"
 
 #. *< name
 #. *< version
 #. *  summary
 msgid "Hides extraneous join/part messages."
-msgstr ""
+msgstr "ಹೊರಗಿನಿಂದ ಸೇರುವ/ಹೊರ ಹೋಗುವ ಸಂದೇಶಗಳನ್ನು ಅಡಗಿಸುತ್ತದೆ."
 
 #. *  description
 msgid ""
 "This plugin hides join/part messages in large rooms, except for those users "
 "actively taking part in a conversation."
 msgstr ""
+"ಈ ಪ್ಲಗ್ಗಿನ್ ದೊಡ್ಡ ಕೋಣೆಗಳಲ್ಲಿ ಮಾತುಕತೆಯಲ್ಲಿ ಸಕ್ರಿಯವಾಗಿ ಭಾಗವಹಿಸುವವರನ್ನು ಹೊರತುಪಡಿಸಿ "
+"ಮಿಕ್ಕುಳಿದವರು ಸೇರಿದ/ಹೊರಹೋದ ಸಂದೇಶಗಳನ್ನು ಅಡಗಿಸುತ್ತದೆ."
 
 #. This is used in the place of a timezone abbreviation if the
 #. * offset is way off.  The user should never really see it, but
@@ -2557,6 +2570,7 @@
 "You are currently disconnected. Messages will not be received unless you are "
 "logged in."
 msgstr ""
+"ನೀವು ಪ್ರಸಕ್ತ ಸಂಪರ್ಕಿತರಾಗಿಲ್ಲ. ನೀವು ಪ್ರವೇಶಿಸದ ಹೊರತು ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲಾಗುವುದಿಲ್ಲ."
 
 msgid "Message could not be sent because the maximum length was exceeded."
 msgstr "ಗರಿಷ್ಟ ಉದ್ದವನ್ನು ಮೀರಿದ್ದರಿಂದ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ "
@@ -2608,7 +2622,7 @@
 
 #. Add general preferences.
 msgid "General Log Reading Configuration"
-msgstr ""
+msgstr "ಸಾಮಾನ್ಯ ದಾಖಲೆ ಓದುವ ಸಂರಚನೆ"
 
 msgid "Fast size calculations"
 msgstr "ವೇಗವಾಗಿ ಗಾತ್ರದ ಲೆಕ್ಕಾಚಾರಗಳು"
@@ -2633,7 +2647,7 @@
 #. *< version
 #. * summary
 msgid "Includes other IM clients' logs in the log viewer."
-msgstr ""
+msgstr "ಇತರೆ IM ಕ್ಲೈಂಟುಗಳ ದಾಖಲೆಗಳನ್ನು ದಾಖಲೆ ವೀಕ್ಷಕದಲ್ಲಿ ಇರಿಸಿಕೊಳ್ಳುತ್ತದೆ."
 
 #. * description
 msgid ""
@@ -2643,6 +2657,12 @@
 "WARNING: This plugin is still alpha code and may crash frequently.  Use it "
 "at your own risk!"
 msgstr ""
+"ದಾಖಲೆಗಳನ್ನು ವೀಕ್ಷಿಸುವಾಗ, ಈ ಪ್ಲಗ್ಗಿನ್ ಇತರೆ IM ಕ್ಲೈಂಟುಗಳಲ್ಲಿನ ದಾಖಲೆಯಗಳನ್ನೂ ಸಹ "
+"ತೋರಿಸುತ್ತದೆ. ಪ್ರಸಕ್ತ ಇದು ಆಡಿಯಮ್, MSN ಮೆಸೆಂಜರ್, aMSN, ಹಾಗು ಟ್ರಿಲಿಯನ್ ಅನ್ನು "
+"ಒಳಗೊಂಡಿದೆ.\n"
+"\n"
+"ಎಚ್ಚರಿಕೆ: ಈ ಪ್ಲಗ್ಗಿನ್ ಇನ್ನೂ ಸಹ ಅಲ್ಫಾ ಹಂತದಲ್ಲಿದೆ ಹಾಗು ಪದೆ ಪದೆ ಕುಸಿತಗೊಳ್ಳಬಹುದು. ನಿಮ್ಮದೆ "
+"ಎಚ್ಚರಿಕೆಯಿಂದ ಬಳಸಿ!"
 
 msgid "Mono Plugin Loader"
 msgstr "ಮೊನೊ ಪ್ಲಗ್ಗಿನ್‌ ಲೋಡರ್"
@@ -2678,9 +2698,11 @@
 "Prepends a newline to messages so that the rest of the message appears below "
 "the username in the conversation window."
 msgstr ""
+"ಮಾತುಕತೆಯ ವಿಂಡೊದಲ್ಲಿ ಸಂದೇಶವು ಬಳಕೆದಾರ ಹೆಸರಿನ ಕೆಳಗೆ ಕಾಣಿಸಿಕೊಳ್ಳುವಂತೆ ಸಂದೇಶಗಳಿಗೆ "
+"ಒಂದು ಹೊಸ ಸಾಲನ್ನು ಸೇರಿಸುತ್ತದೆ."
 
 msgid "Offline Message Emulation"
-msgstr ""
+msgstr "ಆಫ್‌ಲೈನ್ ಸಂದೇಶ ಎಮ್ಯುಲೇಶನ್"
 
 msgid "Save messages sent to an offline user as pounce."
 msgstr "ಆಪ್‌ಲೈನಿನಲ್ಲಿನ ಬಳಕೆದಾರನಿಗೆ ಕಳುಹಿಸಿದ ಸಂದೇಶವನ್ನು ತಟ್ಟನೆ ಕಾಣಿಸುವಿಕೆಯಂತೆ ಉಳಿಸು."
@@ -2689,18 +2711,25 @@
 "The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
+"ಮಿಕ್ಕುಳಿದ ಸಂದೇಶಗಳನ್ನು ತಟ್ಟನೆ ಕಾಣಿಸುವ(ಪೌನ್ಸ್) ರೀತಿಯಲ್ಲಿ ಉಳಿಸಲಾಗುವುದು. ತಟ್ಟನೆ "
+"ಕಾಣಿಸುವಿಕೆಯನ್ನು 'ಗೆಳೆಯನನ್ನು ತಟ್ಟನೆ ಕಾಣಿಸು' ಎಂಬ ಸಂವಾದ ಚೌಕವನ್ನು ಬಳಸಿಕೊಂಡು "
+"ಸಂಪಾದಿಸಬಹುದು/ಅಳಿಸಬಹುದು."
 
 #, c-format
 msgid ""
 "\"%s\" is currently offline. Do you want to save the rest of the messages in "
 "a pounce and automatically send them when \"%s\" logs back in?"
 msgstr ""
+"\"%s\" ಯು ಪ್ರಸಕ್ತ ಆಫ್‌ಲೈನಿನಲ್ಲಿದ್ದಾರೆ. ಮಿಕ್ಕುಳಿದ ಸಂದೇಶಗಳನ್ನು ಒಂದು ತಟ್ಟನೆ ಕಾಣಿಸುವ "
+"ಸಂದೇಶದ ರೂಪದಲ್ಲಿ ಉಳಿಸಿ ನಂತರ \"%s\" ಮರಳಿ ಪ್ರವೇಶಿಸಿದಾಗ ಅವರಿಗೆ ಕಳುಹಿಸಬೇಕೆ?"
 
 msgid "Offline Message"
 msgstr "ಆಫ್‌ಲೈನ್ ಸಂದೇಶ"
 
 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog"
 msgstr ""
+"ತಟ್ಟನೆ ಕಾಣಿಸುವಿಕೆಯನ್ನು 'ಗೆಳೆಯನನ್ನು ತಟ್ಟನೆ ಕಾಣಿಸು' ಎಂಬ ಸಂವಾದ ಚೌಕವನ್ನು ಬಳಸಿಕೊಂಡು "
+"ಸಂಪಾದಿಸಬಹುದು/ಅಳಿಸಬಹುದು"
 
 msgid "Yes"
 msgstr "ಹೌದು"
@@ -2709,10 +2738,10 @@
 msgstr "ಇಲ್ಲ"
 
 msgid "Save offline messages in pounce"
-msgstr ""
+msgstr "ಆಫ್‌ಲೈನ್ ಸಂದೇಶವನ್ನು ತಟ್ಟನೆ ಕಾಣಿಸುವ ಸಂದೇಶದ ರೂಪದಲ್ಲಿ ಉಳಿಸು"
 
 msgid "Do not ask. Always save in pounce."
-msgstr ""
+msgstr "ನನ್ನನ್ನು ಕೇಳಬೇಡ. ಯಾವಾಗಲೂ ತಟ್ಟನೆ ಕಾಣಿಸುವ ಸಂದೇಶದ ರೂಪದಲ್ಲಿ ಉಳಿಸು."
 
 msgid "One Time Password"
 msgstr "ಒಂದು ಬಾರಿಯ ಗುಪ್ತಪದ"
@@ -2738,6 +2767,9 @@
 "are only used in a single successful connection.\n"
 "Note: The account password must not be saved for this to work."
 msgstr ""
+"ಪ್ರತಿ ಖಾತೆಗೂ ಒಂದರಂತೆ, ಉಳಿಸದೆ ಇರುವ ಗುಪ್ತಪದಗಳನ್ನು ಕೇವಲ ಒಂದು ಯಶಸ್ವಿ ಸಂಪರ್ಕದಲ್ಲಿ "
+"ಮಾತ್ರವೆ ಬಳಸುವಂತೆ ಒತ್ತಾಯಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.\n"
+"ಟಿಪ್ಪಣೆ: ಈ ಕೆಲಸಕ್ಕಾಗಿ ಖಾತೆಯ ಗುಪ್ತಪದವನ್ನು ಉಳಿಸಬಾರದು."
 
 #. *< type
 #. *< ui_requirement
@@ -2746,40 +2778,42 @@
 #. *< priority
 #. *< id
 msgid "Perl Plugin Loader"
-msgstr "ಪರ್ಲ್ ಪ್ಲಗ್ಇನ್ ಲೋಡರ್"
+msgstr "ಪರ್ಲ್ ಪ್ಲಗ್ಗಿನ್ ಲೋಡರ್"
 
 #. *< name
 #. *< version
 #. *< summary
 msgid "Provides support for loading perl plugins."
-msgstr ""
+msgstr "ಪರ್ಲ್ ಪ್ಲಗ್ಗಿನ್ನುಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ನೆರವನ್ನು ಒದಗಿಸುತ್ತದೆ."
 
 msgid "Psychic Mode"
-msgstr ""
+msgstr "ಅತೀಂದ್ರಿಯ ಕ್ರಮ"
 
 msgid "Psychic mode for incoming conversation"
-msgstr ""
+msgstr "ಒಳ ಬರುವ ಮಾತುಕತೆಯ ಅತೀಂದ್ರಿಯ ಕ್ರಮ"
 
 msgid ""
 "Causes conversation windows to appear as other users begin to message you.  "
 "This works for AIM, ICQ, XMPP, Sametime, and Yahoo!"
 msgstr ""
+"ಬೇರೆ ಬಳಕೆದಾರರು ನಿಮಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಆರಂಭಿಸಿದಾಗ ಮಾತುಕತೆಯ ವಿಂಡೊಗಳು "
+"ಕಾಣಿಸಿಕೊಳ್ಳಲು ಕಾರಣವಾಗುತ್ತದೆ.  ಇದು AIM, ICQ, XMPP, Sametime, ಹಾಗು Yahoo! ನಲ್ಲಿ "
+"ಕೆಲಸ ಮಾಡುತ್ತದೆ"
 
 msgid "You feel a disturbance in the force..."
-msgstr ""
+msgstr "ನೀವು ಒಂದು ಒತ್ತಾಯಪೂರ್ವಕವಾದ ಗೊಂದಲವನ್ನು ಅನುಭವಿಸುತ್ತಿದ್ದೀರಿ..."
 
 msgid "Only enable for users on the buddy list"
-msgstr ""
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿನ ಬಳಕೆದಾರರಿಗೆ ಮಾತ್ರ ಇದನ್ನು ಶಕ್ತಗೊಳಿಸಿ"
 
 msgid "Disable when away"
-msgstr "ಆಚೆ ಹೋದಾಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"
+msgstr "ಆಚೆ ಹೋದಾಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸು"
 
 msgid "Display notification message in conversations"
-msgstr ""
-
-#, fuzzy
+msgstr "ಮಾತುಕತೆಗಳಲ್ಲಿ ಸೂಚನಾ ಸಂದೇಶವನ್ನು ತೋರಿಸು"
+
 msgid "Raise psychic conversations"
-msgstr "ಮರೆಮಾಡಿದ ಮಾತುಕತೆಗಳಲ್ಲಿ"
+msgstr "ಅತೀಂದ್ರಿಯ ಮಾತುಕತೆಗಳನ್ನು ಮೇಲಕ್ಕೆ ಏರಿಸು"
 
 #. *< type
 #. *< ui_requirement
@@ -2795,7 +2829,7 @@
 #. *  summary
 #. *  description
 msgid "Test to see that all signals are working properly."
-msgstr ""
+msgstr "ಎಲ್ಲಾ ಸಂಜ್ಞೆಗಳು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತಿವೆಯೆ ಎಂದು ಪರಿಶೀಲಿಸಿ."
 
 #. *< type
 #. *< ui_requirement
@@ -2811,7 +2845,7 @@
 #. *  summary
 #. *  description
 msgid "Tests to see that most things are working."
-msgstr ""
+msgstr "ಹೆಚ್ಚಿನ ಎಲ್ಲಾ ಸಂಜ್ಞೆಗಳು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತಿವೆಯೆ ಎಂದು ಪರಿಶೀಲಿಸಿ."
 
 #. Scheme name
 msgid "X.509 Certificates"
@@ -2831,7 +2865,7 @@
 #. *  summary
 #. *  description
 msgid "Provides SSL support through GNUTLS."
-msgstr ""
+msgstr "GNUTLS ಮೂಲಕ SSL ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ."
 
 #. *< type
 #. *< ui_requirement
@@ -2847,7 +2881,7 @@
 #. *  summary
 #. *  description
 msgid "Provides SSL support through Mozilla NSS."
-msgstr ""
+msgstr "ಮೋಝಿಲ್ಲಾ NSS ಮೂಲಕ SSL ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ."
 
 #. *< type
 #. *< ui_requirement
@@ -2863,7 +2897,7 @@
 #. *  summary
 #. *  description
 msgid "Provides a wrapper around SSL support libraries."
-msgstr ""
+msgstr "SSL ಬೆಂಬಲ ಲೈಬ್ರರಿಗಳ ಸುತ್ತಾ ಒಂದು ಹೊದಿಕೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ."
 
 #, c-format
 msgid "%s is no longer away."
@@ -2914,30 +2948,36 @@
 "Notifies in a conversation window when a buddy goes or returns from away or "
 "idle."
 msgstr ""
+"ಹೊರಹೋಗಿರುವ ಅಥವ ಜಡ ಸ್ಥಿತಿಯಿಂದ ಮರಳಿ ಬಂದಾಗ ಅಥವ ಹೊರಕ್ಕೆ ಅಥವ ಜಡ ಸ್ಥಿತಿಗೆ ಹೋದಾಗ "
+"ಮಾತುಕತೆಯ ವಿಂಡೊದಲ್ಲಿ ಸೂಚಿಸು."
 
 msgid "Tcl Plugin Loader"
 msgstr "Tcl ಪ್ಲಗ್ಗಿನ್ ಲೋಡರ್"
 
 msgid "Provides support for loading Tcl plugins"
-msgstr ""
+msgstr "Tcl ಪ್ಲಗ್ಗಿನ್ನುಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ"
 
 msgid ""
 "Unable to detect ActiveTCL installation. If you wish to use TCL plugins, "
 "install ActiveTCL from http://www.activestate.com\n"
 msgstr ""
+"ActiveTCL ಅನುಸ್ಥಾಪನೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. ನೀವು TCL ಪ್ಲಗ್ಗಿನ್ನುಗಳನ್ನು ಬಳಸಲು "
+"ಬಯಸಿದರೆ,  http://www.activestate.com ಇಂದ ActiveTCL ಅನ್ನು ಅನುಸ್ಥಾಪಿಸಿಕೊಳ್ಳಿ\n"
 
 msgid ""
 "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin."
 "im/BonjourWindows for more information."
 msgstr ""
-
-#, fuzzy
+"ಆಪಲ್‌ನ \"Bonjour for Windows\" ಉಪಕರಣಪೆಟ್ಟಿಗೆಯನ್ನು ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ, ಹೆಚ್ಚಿನ "
+"ಮಾಹಿತಿಗಾಗಿ http://d.pidgin.im/BonjourWindows ಅನ್ನು ನೋಡಿ."
+
 msgid "Unable to listen for incoming IM connections"
-msgstr "ಸಂಪರ್ಕ  ಸಾಧ್ಯವಗಲಿಲ್ಲ"
+msgstr "ಒಳಬರುವ IM ಸಂಪರ್ಕಗಳನ್ನು ಆಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"
 
 msgid ""
 "Unable to establish connection with the local mDNS server.  Is it running?"
 msgstr ""
+"ಸ್ಥಳೀಯ mDNS ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕವನ್ನು ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.  ಅದು ಚಾಲನೆಯಲ್ಲಿದೆಯೆ?"
 
 msgid "First name"
 msgstr "ಮೊದಲ ಹೆಸರು"
@@ -2947,7 +2987,7 @@
 
 #. email
 msgid "Email"
-msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ"
+msgstr "ಇಮೈಲ್"
 
 msgid "AIM Account"
 msgstr "AIM ಖಾತೆ"
@@ -2966,7 +3006,7 @@
 #. *  summary
 #. *  description
 msgid "Bonjour Protocol Plugin"
-msgstr ""
+msgstr "Bonjour ಪ್ರೊಟೊಕಾಲ್ ಪ್ಲಗ್ಗಿನ್"
 
 msgid "Purple Person"
 msgstr "ನೇರಳೆ ವ್ಯಕ್ತಿ"
@@ -2976,43 +3016,44 @@
 msgstr "ಸ್ಥಳೀಯ ಸ್ಥಳ"
 
 msgid "Bonjour"
-msgstr ""
+msgstr "Bonjour"
 
 #, c-format
 msgid "%s has closed the conversation."
 msgstr "%s ಮಾತುಕತೆಯನ್ನು ಮುಕ್ತಾಯಗೊಳಿಸಿದ್ದಾರೆ"
 
 msgid "Unable to send the message, the conversation couldn't be started."
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ, ಮಾತುಕತೆಯನ್ನು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
+
+#, c-format
 msgid "Unable to create socket: %s"
-msgstr "ಸಂಪರ್ಕ ರಚಿಸಲು ವಿಫಲ"
-
-#, fuzzy, c-format
+msgstr "ಸಾಕೆಟ್ ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#, c-format
 msgid "Unable to bind socket to port: %s"
-msgstr "%s ಬಳಕೆದಾರರನ್ನು  ನಿಷೇಧಿಸಲು ಆಗಲಿಲ್ಲ"
-
-#, fuzzy, c-format
+msgstr "ಸಾಕೆಟ್ ಅನ್ನು ಸಂಪರ್ಕಸ್ಥಾನಕ್ಕೆ ಬೈಂಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#, c-format
 msgid "Unable to listen on socket: %s"
-msgstr "ಸಂಪರ್ಕ ರಚಿಸಲು ವಿಫಲ"
+msgstr "ಸಾಕೆಟ್ ಅನ್ನು ಆಲಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
 
 msgid "Error communicating with local mDNSResponder."
-msgstr ""
+msgstr "ಸ್ಥಳೀಯ mDNSResponder ನೊಂದಿಗೆ ಸಂವಹಿಸುವಲ್ಲಿ ದೋಷ ಉಂಟಾಗಿದೆ."
 
 msgid "Invalid proxy settings"
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ ಪ್ರಾಕ್ಸಿ ಸಿದ್ಧತೆಗಳು"
 
 msgid ""
 "Either the host name or port number specified for your given proxy type is "
 "invalid."
 msgstr ""
+"ನಿಮ್ಮಲ್ಲಿನ ಪ್ರಾಕ್ಸಿ ಬಗೆಗೆ ಸೂಚಿಸಲಾದ ಆತಿಥೇಯ ಹೆಸರು ಅಥವ ಸಂಪರ್ಕಸ್ಥಾನದ ಹೆಸರು ಸರಿಯಾಗಿಲ್ಲ."
 
 msgid "Token Error"
-msgstr ""
+msgstr "ಟೋಕನ್ ದೋಷ"
 
 msgid "Unable to fetch the token.\n"
-msgstr ""
+msgstr "ಟೋಕನ್‌ ಅನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ.\n"
 
 msgid "Save Buddylist..."
 msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿ ಉಳಿಸಿ..."
@@ -3023,18 +3064,18 @@
 msgid "Buddylist saved successfully!"
 msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಉಳಿಸಲಾಗಿದೆ"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't write buddy list for %s to %s"
-msgstr "ನಿಮ್ಮ ಆದೇಶವು ವಿಫಲವಾಯಿತು. ಕಾರಣ ತಿಳಿದುಬರಲಿಲ್ಲ."
+msgstr "%s ಗಾಗಿ %s ಗೆ ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಬರೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 msgid "Couldn't load buddylist"
-msgstr ""
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ"
 
 msgid "Load Buddylist..."
-msgstr ""
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಲೋಡ್ ಮಾಡಿ ..."
 
 msgid "Buddylist loaded successfully!"
-msgstr ""
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಲೋಡ್‌ ಮಾಡಲಾಗಿದೆ!"
 
 msgid "Save buddylist..."
 msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿ ಉಳಿಸಿ..."
@@ -3042,16 +3083,14 @@
 msgid "Load buddylist from file..."
 msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಈ ಕಡತದಿಂದ  ತೆಗೆದುಕೊಳ್ಳಿ ..."
 
-#, fuzzy
 msgid "You must fill in all registration fields"
-msgstr "ನೋದಾವಣೆಗಾಗಿ ವಿವರಗಳನ್ನು ತುಂಬಿರಿ"
+msgstr "ನೋಂದಾವಣೆಗಾಗಿ ಎಲ್ಲಾ ವಿವರಗಳನ್ನು ನೀವು ತುಂಬಿಸಬೇಕು"
 
 msgid "Passwords do not match"
 msgstr "ಗುಪ್ತಪದವು ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ"
 
-#, fuzzy
 msgid "Unable to register new account.  An unknown error occurred."
-msgstr "ಹೊಸ ಖಾತೆಯನ್ನು ನೋಂದಾಯಿಸಲು ಅಗಲಿಲ್ಲ . ದೋಷ ಸಂಭವಿಸಿದೆ.\n"
+msgstr "ಹೊಸ ಖಾತೆಯನ್ನು ನೋಂದಾಯಿಸಲು ಅಗಲಿಲ್ಲ . ದೋಷ ಸಂಭವಿಸಿದೆ."
 
 msgid "New Gadu-Gadu Account Registered"
 msgstr "ಹೊಸ  Gadu-Gadu  ಖಾತೆ ನೋಂದಾವಣೆ"
@@ -3066,7 +3105,7 @@
 msgstr "ಗುಪ್ತಪದ(ಇನ್ನೊಮ್ಮೆ)"
 
 msgid "Enter captcha text"
-msgstr ""
+msgstr "ಕ್ಯಾಪ್ಚಾ ಪಠ್ಯವನ್ನು ನಮೂದಿಸಿ"
 
 msgid "Captcha"
 msgstr "ಕ್ಯಾಪ್ಚಾ"
@@ -3098,13 +3137,13 @@
 msgstr "ಹೆಣ್ಣು"
 
 msgid "Only online"
-msgstr ""
+msgstr "ಕೇವಲ ಆನ್‌ಲೈನ್‌"
 
 msgid "Find buddies"
 msgstr "ಗೆಳೆಯರನ್ನು ಹುಡುಕಿ"
 
 msgid "Please, enter your search criteria below"
-msgstr ""
+msgstr "ದಯವಿಟ್ಟು ನಿಮ್ಮ ಹುಡುಕು ಮಾನದಂಡವನ್ನು ನಮೂದಿಸಿ"
 
 msgid "Fill in the fields."
 msgstr "ವಿವರ ತುಂಬಿರಿ"
@@ -3128,13 +3167,13 @@
 msgstr "ಗುಪ್ತಪದ(ಪುನ:ಬರೆಯಿರಿ)"
 
 msgid "Enter current token"
-msgstr ""
+msgstr "ಪ್ರಸ್ತುತ ಟೋಕನ್ ಅನ್ನು ನಮೂದಿಸಿ"
 
 msgid "Current token"
-msgstr ""
+msgstr "ಪ್ರಸ್ತುತ ಟೋಕನ್"
 
 msgid "Please, enter your current password and your new password for UIN: "
-msgstr ""
+msgstr "ದಯವಿಟ್ಟು, UIN ಗಾಗಿ ನಿಮ್ಮ ಪ್ರಸಕ್ತ ಗುಪ್ತಪದ ಹಾಗು ನಿಮ್ಮ ಹೊಸ ಗುಪ್ತಪದವನ್ನು ದಾಖಲಿಸಿ: "
 
 msgid "Change Gadu-Gadu Password"
 msgstr "Gadu-Gadu ಗುಪ್ತಪದವನ್ನು ಬದಲಿಸಿ"
@@ -3159,7 +3198,7 @@
 msgstr "ಆಚೆ"
 
 msgid "UIN"
-msgstr ""
+msgstr "UIN"
 
 #. first name
 msgid "First Name"
@@ -3172,31 +3211,31 @@
 msgstr "ಹುಡುಕುವಿಕೆಯ ಫಲಿತಾಂಶಗಳನ್ನು ತೋರಿಸಲಾಗಲಿಲ್ಲ"
 
 msgid "Gadu-Gadu Public Directory"
-msgstr ""
+msgstr "Gadu-Gadu ಸಾರ್ವಜನಿಕ ಕೋಶ"
 
 msgid "Search results"
 msgstr "ಹುಡುಕುವಿಕೆಯ ಪಲಿತಾಂಶಗಳು"
 
 msgid "No matching users found"
-msgstr ""
+msgstr "ತಾಳೆಯಾಗುವ ಯಾವುದೆ ಬಳಕೆದಾರರು ಕಂಡುಬಂದಿಲ್ಲ"
 
 msgid "There are no users matching your search criteria."
-msgstr ""
+msgstr "ನಿಮ್ಮ ಹುಡುಕು ಮಾನದಂಡಕ್ಕೆ ತಾಳೆಯಾಗುವ ಯಾವುದೆ ಬಳಕೆದಾರರು ಕಂಡು ಬಂದಿಲ್ಲ."
 
 msgid "Unable to read from socket"
-msgstr ""
+msgstr "ಸಾಕೆಟ್‌ನಿಂದ ಓದಲಾಗಲಿಲ್ಲ"
 
 msgid "Buddy list downloaded"
 msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿ ಇಳಿಸಿಕೊಳ್ಳಲಾಗಿದೆ"
 
 msgid "Your buddy list was downloaded from the server."
-msgstr ""
+msgstr "ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಪರಿಚಾರಕದಿಂದ ನಕಲಿಳಿಸಿಕೊಳ್ಳಲಾಗಿದೆ."
 
 msgid "Buddy list uploaded"
-msgstr ""
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ"
 
 msgid "Your buddy list was stored on the server."
-msgstr ""
+msgstr "ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಪರಿಚಾರಕದಲ್ಲಿ ಶೇಖರಿಸಿಡಲಾಗಿದೆ."
 
 #. The session is now set up, ready to be connected. This emits the
 #. * signedOn signal, so clients can now do anything with msimprpl, and
@@ -3211,12 +3250,12 @@
 msgstr "ಮಾತುಕತೆಗೆ ಸೇರಿಸಿ"
 
 msgid "Chat _name:"
-msgstr "ಮಾತುಕತೆ ಹೆಸರು(_n)"
+msgstr "ಮಾತುಕತೆ ಹೆಸರು(_n):"
 
 # , c-format
 #, c-format
 msgid "Unable to resolve hostname '%s': %s"
-msgstr ""
+msgstr "ಆತಿಥೇಯ ಹೆಸರಾದ '%s' ಅನ್ನು  ಪರಿಹರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
 
 #. 1. connect to server
 #. connect to the server
@@ -3239,7 +3278,7 @@
 msgstr "ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಿ..."
 
 msgid "Upload buddylist to Server"
-msgstr ""
+msgstr "ಪರಿಚಾರಕಕ್ಕೆ ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 msgid "Download buddylist from Server"
 msgstr "ಪರಿಚಾರಕದಿಂದ(ಸರ್ವರ್) ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಇಳಿಸಿಕೊಳ್ಳಿ"
@@ -3262,11 +3301,11 @@
 #. name
 #. version
 msgid "Gadu-Gadu Protocol Plugin"
-msgstr ""
+msgstr "ಗಾಡು-ಗಾಡು ಪ್ರೊಟೊಕಾಲ್ ಪ್ಲಗ್ಗಿನ್"
 
 #. summary
 msgid "Polish popular IM"
-msgstr ""
+msgstr "ಪಾಲಿಶ್ ಪಾಪುಲರ್ IM"
 
 msgid "Gadu-Gadu User"
 msgstr "Gadu-Gadu ಬಳಕೆದಾರ"
@@ -3288,9 +3327,8 @@
 msgid "File Transfer Failed"
 msgstr "ಕಡತ ವರ್ಗಾವಣೆ ವಿಫಲ."
 
-#, fuzzy
 msgid "Unable to open a listening port."
-msgstr "ಬರೆಯುವದಕ್ಕಾಗಿ  %s ತೆರೆಯಲು ಆಗಲಿಲ್ಲ"
+msgstr "ಆಲಿಸುವ ಸಂಪರ್ಕಸ್ಥಾನವನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 msgid "Error displaying MOTD"
 msgstr "ದಿನದ ಸಂದೇಶ ತೋರಿಸುವಲ್ಲಿ ದೋಷ"
@@ -3320,13 +3358,13 @@
 msgstr "ದಿನದ ಸಂದೇಶ ನೋಡಿರಿ"
 
 msgid "_Channel:"
-msgstr "ವಾಹಿನಿ(_C)"
+msgstr "ವಾಹಿನಿ(_C):"
 
 msgid "_Password:"
 msgstr "ಗುಪ್ತಪದ(_P):"
 
 msgid "IRC nick and server may not contain whitespace"
-msgstr ""
+msgstr "IRC ಅಡ್ಡಹೆಸರು ಹಾಗು ಪರಿಚಾರಕದ ಹೆಸರಿನಲ್ಲಿ ಖಾಲಿ ಜಾಗ ಇರುವಂತಿಲ್ಲ"
 
 msgid "SSL support unavailable"
 msgstr "SSL ಬೆಂಬಲ ಅಲಭ್ಯ"
@@ -3359,11 +3397,11 @@
 #. *< name
 #. *< version
 msgid "IRC Protocol Plugin"
-msgstr ""
+msgstr "IRC ಪ್ರೊಟೊಕಾಲ್ ಪ್ಲಗ್ಗಿನ್"
 
 #. *  summary
 msgid "The IRC Protocol Plugin that Sucks Less"
-msgstr ""
+msgstr "ಇದ್ದಿದ್ದರಲ್ಲೆ ಉತ್ತಮವಾದ IRC ಪ್ರೊಟೊಕಾಲ್ ಪ್ಲಗ್ಗಿನ್"
 
 #. host to connect to
 msgid "Server"
@@ -3394,16 +3432,15 @@
 
 #, c-format
 msgid "Ban on %s by %s, set %s ago"
-msgstr ""
+msgstr "%s ಗೆ %s ಇಂದ ನಿಷೇಧಿಸಲಾಗಿದೆ, %s ಹಿಂದೆ ಹೊಂದಿಸಲಾಗಿದೆ"
 
 # , c-format
 #, c-format
 msgid "Ban on %s"
 msgstr "%s ಸೇರಲು ನಿಷೇಧವಿದೆ"
 
-#, fuzzy
 msgid "End of ban list"
-msgstr "ಪಟ್ಟಿಯಲ್ಲಿಲ್ಲ"
+msgstr "ನಿಷೇಧಪಟ್ಟಿಯ ಅಂತ್ಯ"
 
 #, c-format
 msgid "You are banned from %s."
@@ -3420,28 +3457,25 @@
 msgstr " <i>(ircop)</i>"
 
 msgid " <i>(identified)</i>"
-msgstr ""
+msgstr " <i>(ಗುರುತಿಸಲಾದ)</i>"
 
 msgid "Nick"
 msgstr "ಅಡ್ಡಹೆಸರು"
 
 msgid "Currently on"
-msgstr ""
-
-#, fuzzy
+msgstr "ಪ್ರಸಕ್ತ ಇರುವ"
+
 msgid "Idle for"
-msgstr "ನಿಶ್ಚಲ"
+msgstr "ನಿಶ್ಚಲವಾಗಿರುವ"
 
 msgid "Online since"
 msgstr "ಈ ಸಮಯದಿಂದ ಆನ್‌ಲೈನಿನಲ್ಲಿದ್ದಾರೆ"
 
-#, fuzzy
 msgid "<b>Defining adjective:</b>"
-msgstr "<b>ಇವರಿಗೆ ಕಳಿಸುತ್ತ :</b>"
-
-#, fuzzy
+msgstr "<b>ವಿವರಿಸುವ ವಿಶೇಷಣ :</b>"
+
 msgid "Glorious"
-msgstr "ಗುಂಪು"
+msgstr "ಅಧ್ಭುತ"
 
 #, c-format
 msgid "%s has changed the topic to: %s"
@@ -3449,7 +3483,7 @@
 
 #, c-format
 msgid "%s has cleared the topic."
-msgstr ""
+msgstr "%s ವಿಷಯವನ್ನು ಅಳಿಸಿದ್ದಾರೆ."
 
 #, c-format
 msgid "The topic for %s is: %s"
@@ -3463,24 +3497,24 @@
 msgstr "ಗೊತ್ತಿಲ್ಲದ ಸಂದೇಶ"
 
 msgid "The IRC server received a message it did not understand."
-msgstr ""
+msgstr "IRC ಪರಿಚಾರಕವು ಅದಕ್ಕೆ ಅರ್ಥವಾಗದೆ ಇರುವ ಒಂದು ಸಂದೇಶವು ಸ್ವೀಕರಿಸಿದೆ."
 
 #, c-format
 msgid "Users on %s: %s"
 msgstr " %s ಮೇಲೆ ಬಳಕೆದಾರರು : %s"
 
 msgid "Time Response"
-msgstr ""
+msgstr "ಸಮಯ ಪ್ರತಿಕ್ರಿಯೆ"
 
 msgid "The IRC server's local time is:"
-msgstr ""
+msgstr "IRC ಪರಿಚಾರಕದ ಸ್ಥಳೀಯ ಸಮಯ:"
 
 msgid "No such channel"
-msgstr "ಅಂಥ ವಾಹಿನಿ ಇಲ್ಲ"
+msgstr "ಆ ರೀತಿಯ ಯಾವುದೆ ವಾಹಿನಿ ಇಲ್ಲ"
 
 #. does this happen?
 msgid "no such channel"
-msgstr "ಅಂಥ ವಾಹಿನಿ ಇಲ್ಲ"
+msgstr "ಆ ರೀತಿಯ ಯಾವುದೆ ವಾಹಿನಿ ಇಲ್ಲ"
 
 msgid "User is not logged in"
 msgstr "ಬಳಕೆದಾರರು ಲಾಗಿನ್ ಆಗಿಲ್ಲ"
@@ -3500,16 +3534,16 @@
 
 #, c-format
 msgid "You have been kicked by %s: (%s)"
-msgstr "%s: (%s) ನಿಮ್ಮನ್ನು ಒದ್ದಿದ್ದಾರೆ"
+msgstr "%s ಯವರು ನಿಮ್ಮನ್ನು ಹೊರಗಟ್ಟಿದ್ದಾರೆ: (%s)"
 
 #. Remove user from channel
 #, c-format
 msgid "Kicked by %s (%s)"
-msgstr "%s (%s) ರಿಂದ ಒದೆತ"
+msgstr "%s (%s) ರವರು ಹೊರಗಟ್ಟಿದ್ದಾರೆ"
 
 #, c-format
 msgid "mode (%s %s) by %s"
-msgstr ""
+msgstr "ಕ್ರಮ (%s %s) %s ಇಂದ"
 
 msgid "Invalid nickname"
 msgstr "ಅಮಾನ್ಯವಾದ ಅಡ್ಡಹೆಸರು"
@@ -3531,9 +3565,9 @@
 #. We only want to do the following dance if the connection
 #. has not been successfully completed.  If it has, just
 #. notify the user that their /nick command didn't go.
-#, fuzzy, c-format
+#, c-format
 msgid "The nickname \"%s\" is already being used."
-msgstr "ಈ ಮಾತುಕತೆ ಹೆಸರು ಆಗಲೇ ಬಳಕೆಯಲ್ಲಿದೆ"
+msgstr "\"%s\" ಎಂದ ಅಡ್ಡಹೆಸರು ಆಗಲೇ ಬಳಕೆಯಲ್ಲಿದೆ."
 
 msgid "Nickname in use"
 msgstr "ಬಳಕೆಯಲ್ಲಿರುವ ಅಡ್ಡಹೆಸರು"
@@ -3568,15 +3602,17 @@
 
 #, c-format
 msgid "Wallops from %s"
-msgstr ""
+msgstr "%s ಇಂದ ಅಪ್ಪಳಿಕೆ"
 
 msgid "action &lt;action to perform&gt;:  Perform an action."
-msgstr ""
+msgstr "action &lt;ನಿರ್ವಹಿಸಬೇಕಿರುವ ಕಾರ್ಯ&gt;:  ಒಂದು ಕಾರ್ಯವನ್ನು ನಿರ್ವಹಿಸಿ."
 
 msgid ""
 "away [message]:  Set an away message, or use no message to return from being "
 "away."
 msgstr ""
+"away [ಸಂದೇಶ]:  ಒಂದು ಹೊರಕ್ಕೆ ಹೋದ ಸಂದೇಶವನ್ನು ಬರೆಯಿರಿ, ಅಥವ ಹೊರಕ್ಕೆ ಹೋದ ನಂತರ ಮರಳಿ "
+"ಬಂದಾಗ ಯಾವುದೆ ಸಂದೇಶವನ್ನು ಬಳಸಬೇಡಿ."
 
 msgid "ctcp <nick> <msg>: sends ctcp msg to nick."
 msgstr "ctcp <nick> <msg>: ctcp ಸಂದೇಶವನ್ನು ಅಡ್ಡಹೆಸರಿಗೆ ಕಳುಹಿಸುತ್ತದೆ."
@@ -3588,40 +3624,55 @@
 "deop &lt;nick1&gt; [nick2] ...:  Remove channel operator status from "
 "someone. You must be a channel operator to do this."
 msgstr ""
+"deop &lt;nick1&gt; [nick2] ...: ವಾಹಿನಿ(ಚಾನಲ್) ಕಾರ್ಯನಿರ್ವಾಹಕರ ಸ್ಥಿತಿಯಿಂದ ತೆಗೆದು "
+"ಹಾಕುತ್ತದೆ. ಹೀಗೆ ಮಾಡಲು ನೀವು ವಾಹಿನಿಯ ಕಾರ್ಯನಿರ್ವಾಹಕರಾಗಿರಬೇಕು."
 
 msgid ""
 "devoice &lt;nick1&gt; [nick2] ...:  Remove channel voice status from "
 "someone, preventing them from speaking if the channel is moderated (+m). You "
 "must be a channel operator to do this."
 msgstr ""
+"devoice &lt;nick1&gt; [nick2] ...:  ವಾಹಿನಿ(ಚಾನಲ್) ಧ್ವನಿ ಸ್ಥಿತಿಯಿಂದ ತೆಗೆದು ಹಾಕಿ, "
+"ವಾಹಿನಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲಾಗುತ್ತಿದ್ದಲ್ಲಿ (+m) ಈ ಮೂಲಕ ಅವರು ವಾಹಿನಿಯಲ್ಲಿ ಮಾತನಾಡದಂತೆ "
+"ತಡೆಯುತ್ತದೆ. ಹೀಗೆ ಮಾಡಲು ನೀವು ವಾಹಿನಿಯ ಕಾರ್ಯನಿರ್ವಾಹಕರಾಗಿರಬೇಕು."
 
 msgid ""
 "invite &lt;nick&gt; [room]:  Invite someone to join you in the specified "
 "channel, or the current channel."
 msgstr ""
+"invite &lt;nick&gt; [ಕೋಣೆ]:  ನಿಶ್ಚಿತ ಚಾನಲ್‌ನಲ್ಲಿ ಅಥವ ಈ ಚಾನಲ್‌ನಲ್ಲಿ ನಿಮ್ಮನ್ನು ಸೇರುವಂತೆ "
+"ಯಾರನ್ನಾದರೂ ಆಹ್ವಾನಿಸಿ."
 
 msgid ""
 "j &lt;room1&gt;[,room2][,...] [key1[,key2][,...]]:  Enter one or more "
 "channels, optionally providing a channel key for each if needed."
 msgstr ""
+"j &lt;room1&gt;[,room2][,...] [key1[,key2][,...]]:  ಒಂದು ಅಥವ ಹೆಚ್ಚಿನ "
+"ವಾಹಿನಿಯನ್ನು ನಮೂದಿಸಿ, ಅಗತ್ಯವಿದ್ದಲ್ಲಿ ಒಂದು ವಾಹಿನಿಯ ಕೀಲಿಯನ್ನೂ ಸಹ ಒದಗಿಸಬಹುದು."
 
 msgid ""
 "join &lt;room1&gt;[,room2][,...] [key1[,key2][,...]]:  Enter one or more "
 "channels, optionally providing a channel key for each if needed."
 msgstr ""
+"join &lt;room1&gt;[,room2][,...] [key1[,key2][,...]]:  ಒಂದು ಅಥವ ಹೆಚ್ಚಿನ "
+"ವಾಹಿನಿಯನ್ನು ನಮೂದಿಸಿ, ಅಗತ್ಯವಿದ್ದಲ್ಲಿ ಒಂದು ವಾಹಿನಿಯ ಕೀಲಿಯನ್ನೂ ಸಹ ಒದಗಿಸಬಹುದು."
 
 msgid ""
 "kick &lt;nick&gt; [message]:  Remove someone from a channel. You must be a "
 "channel operator to do this."
 msgstr ""
+"kick &lt;nick&gt; [ಸಂದೇಶ]:  ಒಂದು ವಾಹಿನಿಯಿಂದ ನಿಶ್ಚಿತ ವ್ಯಕ್ತಿಯನ್ನು ತೆಗೆದು ಹಾಕಿ. "
+"ಇದನ್ನು ಮಾಡಲು ನೀವು ಆ ವಾಹಿನಿಯ ಕಾರ್ಯನಿರ್ವಾಹಕರಾಗಿರಬೇಕು."
 
 msgid ""
 "list:  Display a list of chat rooms on the network. <i>Warning, some servers "
 "may disconnect you upon doing this.</i>"
 msgstr ""
+"list:  ಜಾಲಬಂಧದಲ್ಲಿನ ಮಾತುಕತೆಯ ಕೋಣೆಗಳ ಒಂದು ಪಟ್ಟಿಯನ್ನು ತೋರಿಸು. <i>ಎಚ್ಚರಿಕೆ, ನೀವು "
+"ಹೀಗೆ ಮಾಡಿದಾಗ ಕೆಲವು ಪರಿಚಾರಕಗಳು ಸಂಪರ್ಕ ಕಡಿದು ಹಾಕಬಹುದು.</i>"
 
 msgid "me &lt;action to perform&gt;:  Perform an action."
-msgstr ""
+msgstr "me &lt;ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸು&gt;:  ಒಂದು ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸು."
 
 msgid "memoserv: Send a command to memoserv"
 msgstr "memoserv: memoserv ಗೆ ಒಂದು ಆಜ್ಞೆಯನ್ನು ಕಳುಹಿಸಿ"
@@ -3630,17 +3681,21 @@
 "mode &lt;+|-&gt;&lt;A-Za-z&gt; &lt;nick|channel&gt;:  Set or unset a channel "
 "or user mode."
 msgstr ""
+"mode &lt;+|-&gt;&lt;A-Za-z&gt; &lt;nick|channel&gt;:  ಒಂದು ವಾಹಿನಿ ಅಥವ "
+"ಬಳಕೆದಾರ ಕ್ರಮವನ್ನು ಹೊಂದಿಸಿ ಅಥವ ಹೊಂದಿಸಲಾಗಿದ್ದನ್ನು ತೆಗೆದುಹಾಕಿ."
 
 msgid ""
 "msg &lt;nick&gt; &lt;message&gt;:  Send a private message to a user (as "
 "opposed to a channel)."
 msgstr ""
+"msg &lt;ಅಡ್ಡಹೆಸರು&gt; &lt;ಸಂದೇಶ&gt;:  ಒಬ್ಬ ಬಳಕೆದಾರನಿಗೆ ಒಂದು ಖಾಸಗಿ ಸಂದೇಶವನ್ನು "
+"ಕಳುಹಿಸಿ(ಚಾನಲ್‌ನಲ್ಲಿ ಕಳುಹಿಸುವುದಿಲ್ಲ)."
 
 msgid "names [channel]:  List the users currently in a channel."
-msgstr ""
+msgstr "names [ವಾಹಿನಿ]:  ಒಂದು ವಾಹಿನಿಯಲ್ಲಿನ ಬಳಕೆದಾರರನ್ನು ಪಟ್ಟಿ ಮಾಡಿ."
 
 msgid "nick &lt;new nickname&gt;:  Change your nickname."
-msgstr ""
+msgstr "nick &lt;ಹೊಸ ಅಡ್ಡಹೆಸರು&gt;:  ನಿಮ್ಮ ಅಡ್ಡಹೆಸರನ್ನು ಬದಲಾಯಿಸಿ."
 
 msgid "nickserv: Send a command to nickserv"
 msgstr "nickserv: nickserv ಗೆ ಒಂದು ಆಜ್ಞೆಯನ್ನು ಕಳುಹಿಸಿ"
@@ -3653,11 +3708,15 @@
 "op &lt;nick1&gt; [nick2] ...:  Grant channel operator status to someone. You "
 "must be a channel operator to do this."
 msgstr ""
+"op &lt;nick1&gt; [nick2] ...: ನಿಶ್ಚಿತ ವ್ಯಕ್ತಿಗೆ ವಾಹಿನಿಯ ನಿರ್ವಾಹಕರಾಗಿ ಅಧಿಕಾರ "
+"ನೀಡಿ. ಇದನ್ನು ಮಾಡಲು ನೀವು ಆ ವಾಹಿನಿಯ ಕಾರ್ಯನಿರ್ವಾಹಕರಾಗಿರಬೇಕು."
 
 msgid ""
 "operwall &lt;message&gt;:  If you don't know what this is, you probably "
 "can't use it."
 msgstr ""
+"operwall &lt;ಸಂದೇಶ&gt;:  ಇದು ಏನೆಂದು ನಿಮಗೆ ತಿಳಿಯದೆ ಇದ್ದಲ್ಲಿ ಬಹುಷಃ ನೀವು ಇದನ್ನು "
+"ಬಳಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ."
 
 msgid "operserv: Send a command to operserv"
 msgstr "operserv: operserv ಗೆ ಒಂದು ಆಜ್ಞೆಯನ್ನು ಕಳುಹಿಸಿ"
@@ -3666,56 +3725,72 @@
 "part [room] [message]:  Leave the current channel, or a specified channel, "
 "with an optional message."
 msgstr ""
+"part [ವಾಹಿನಿ] [ಸಂದೇಶ]: ಪ್ರಸಕ್ತ ವಾಹಿನಿಯಿಂದ ಅಥವ ಒಂದು ನಿಶ್ಚಿತ ವಾಹಿನಿಯಿಂದ ನಿರ್ಗಮಿಸಿ. "
+"ಬೇಕಿದ್ದರೆ ಸಂದೇಶವನ್ನೂ ಸಹ ಇದರೊಂದಿಗೆ ಸೇರಿಸಬಹುದು."
 
 msgid ""
 "ping [nick]:  Asks how much lag a user (or the server if no user specified) "
 "has."
 msgstr ""
+"ping [ಅಡ್ಡಹೆಸರು]:  ಒಬ್ಬ ಬಳಕೆದಾರನಿಗೆ ಒಂದು ಖಾಸಗಿ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುತ್ತದೆ(ಚಾನಲ್‌ನಲ್ಲಿ "
+"ಕಳುಹಿಸುವುದಿಲ್ಲ)."
 
 msgid ""
 "query &lt;nick&gt; &lt;message&gt;:  Send a private message to a user (as "
 "opposed to a channel)."
 msgstr ""
+"query &lt;ಅಡ್ಡಹೆಸರು&gt; &lt;ಸಂದೇಶ&gt;:  ಒಬ್ಬ ಬಳಕೆದಾರನಿಗೆ ಒಂದು ಖಾಸಗಿ ಸಂದೇಶವನ್ನು "
+"ಕಳುಹಿಸಿ(ಚಾನಲ್‌ನಲ್ಲಿ ಕಳುಹಿಸುವುದಿಲ್ಲ)."
 
 msgid "quit [message]:  Disconnect from the server, with an optional message."
 msgstr ""
+"quit [ಸಂದೇಶ]: ಪರಿಚಾರಕದಿಂದ ಸಂಪರ್ಕ ಕಡಿದು ಹಾಕಿ, ಬೇಕಿದ್ದಲ್ಲಿ ಒಂದು ಸಂದೇಶವನ್ನೂ ಸಹ "
+"ಸೇರಿಸಬಹುದು."
 
 msgid "quote [...]:  Send a raw command to the server."
-msgstr ""
+msgstr "quote [...]:  ಒಂದು ಕಚ್ಛಾ(ರಾ) ಆದೇಶವನ್ನು ಪರಿಚಾರಕಕ್ಕೆ ಕಳುಹಿಸಿ."
 
 msgid ""
 "remove &lt;nick&gt; [message]:  Remove someone from a room. You must be a "
 "channel operator to do this."
 msgstr ""
+"remove &lt;ಅಡ್ಡಹೆಸರು&gt; [ಸಂದೇಶ]:  ನಿಶ್ಚಿತ ವ್ಯಕ್ತಿಯನ್ನು ವಾಹಿನಿಯಿಂದ ಹೊರ ಹಾಕಿ. ಹೀಗೆ "
+"ಮಾಡಲು ನೀವು ಆ ವಾಹಿನಿಯ ಕಾರ್ಯನಿರ್ವಾಹಕರಾಗಿರಬೇಕು.."
 
 msgid "time: Displays the current local time at the IRC server."
-msgstr ""
+msgstr "time: IRC ಪರಿಚಾರಕದಲ್ಲಿ ಪ್ರಸಕ್ತ ಪ್ರಾದೇಶಿಕ ಸಮಯವನ್ನು ತೋರಿಸುತ್ತದೆ."
 
 msgid "topic [new topic]:  View or change the channel topic."
-msgstr ""
+msgstr "topic [ಹೊಸ ವಿಷಯ]:  ವಾಹಿನಿಯ ವಿಷಯವನ್ನು ನೋಡಿ ಅಥವ ಬದಲಾಯಿಸಿ."
 
 msgid "umode &lt;+|-&gt;&lt;A-Za-z&gt;:  Set or unset a user mode."
 msgstr ""
+"umode &lt;+|-&gt;&lt;A-Za-z&gt;:  ಒಂದು ಬಳಕೆದಾರ ಕ್ರಮವನ್ನು ಹೊಂದಿಸಿ ಅಥವ "
+"ಹೊಂದಿಸಲಾಗಿದ್ದನ್ನು ರದ್ದುಗೊಳಿಸಿ."
 
 msgid "version [nick]: send CTCP VERSION request to a user"
-msgstr ""
+msgstr "version [nick]: ಒಬ್ಬ ಬಳಕೆದಾರರಿಗೆ CTCP VERSION ಮನವಿಯನ್ನು ಕಳುಹಿಸಿ"
 
 msgid ""
 "voice &lt;nick1&gt; [nick2] ...:  Grant channel voice status to someone. You "
 "must be a channel operator to do this."
 msgstr ""
+"voice &lt;ಅಡ್ಡಹೆಸರು೧&gt; [ಅಡ್ಡಹೆಸರು೨] ...: ನಿಶ್ಚಿತ ವ್ಯಕ್ತಿಗೆ ವಾಹಿನಿಯ ಧ್ವನಿ "
+"ನಿರ್ವಾಹಕರಾಗಿ ಅಧಿಕಾರ ನೀಡಿ. ಇದನ್ನು ಮಾಡಲು ನೀವು ಆ ವಾಹಿನಿಯ ಕಾರ್ಯನಿರ್ವಾಹಕರಾಗಿರಬೇಕು."
 
 msgid ""
 "wallops &lt;message&gt;:  If you don't know what this is, you probably can't "
 "use it."
 msgstr ""
+"wallops &lt;ಸಂದೇಶ&gt;: ಇದು ಏನೆಂದು ನಿಮಗೆ ತಿಳಿಯದೆ ಇದ್ದಲ್ಲಿ ಬಹುಷಃ ನೀವು ಇದನ್ನು "
+"ಬಳಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ."
 
 msgid "whois [server] &lt;nick&gt;:  Get information on a user."
 msgstr ""
 "whois [server] &lt;nick&gt;:  ಒಬ್ಬ ಬಳಕೆದಾರದ ಬಗೆಗಿನ ಮಾಹಿತಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"
 
 msgid "whowas &lt;nick&gt;: Get information on a user that has logged off."
-msgstr ""
+msgstr "whowas &lt;ಅಡ್ಡಹೆಸರು&gt;: ನಿರ್ಗಮಿಸಿದ ಬಳಕೆದಾರನ ಮಾಹಿತಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳಿ."
 
 #, c-format
 msgid "Reply time from %s: %lu seconds"
@@ -3733,46 +3808,50 @@
 msgid "Unknown Error"
 msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ"
 
-#, fuzzy
 msgid "Ad-Hoc Command Failed"
-msgstr "ಆದೇಶ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ "
+msgstr "ತಾತ್ಕಾಲಿಕ ಆದೇಶವು ವಿಫಲಗೊಂಡಿದೆ"
 
 msgid "execute"
 msgstr "ಕಾರ್ಯಗತಗೊಳಿಸು"
 
 msgid "Server requires TLS/SSL, but no TLS/SSL support was found."
-msgstr ""
+msgstr "ಪರಿಚಾರಕಕ್ಕೆ TLS/SSL ನ ಅಗತ್ಯವಿದೆ, ಆದರೆ ಯಾವುದೆ TLS/SSL ಬೆಂಬಲವು ಕಂಡುಬಂದಿಲ್ಲ."
 
 msgid "You require encryption, but no TLS/SSL support was found."
 msgstr ""
+"ನಿಮಗೆ ಯಾವುದೆ ಗೂಢಲಿಪೀಕರಣದ ಅಗತ್ಯವಿರುವಿಲ್ಲ, ಆದರೆ TLS/SSL ಬೆಂಬಲವು ಕಂಡುಬಂದಿಲ್ಲ."
 
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr ""
+"ಪರಿಚಾರಕಕ್ಕಾಗಿ ಒಂದು ಗೂಢಲಿಪೀಕರಿಸದೆ ಇರುವ ಸ್ಟ್ರೀಮ್‌ನ ಮೂಲಕ ಸರಳಪಠ್ಯ ದೃಢೀಕರಣದ ಅಗತ್ಯವಿದೆ"
 
 #. This should never happen!
 msgid "Invalid response from server"
 msgstr "ಪರಿಚಾರಕದಿಂದ(ಸರ್ವರ್‍) ಅಮಾನ್ಯವಾದ ಪ್ರತ್ಯುತ್ತರ ಬಂದಿದೆ"
 
 msgid "Server does not use any supported authentication method"
-msgstr ""
+msgstr "ಪರಿಚಾರಕವು ಬೆಂಬಲಿತವಾದ ಯಾವುದೆ ದೃಢೀಕರಣ ವಿಧಾನವನ್ನು ಬಳಸುವುದಿಲ್ಲ"
 
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
 "this and continue authentication?"
 msgstr ""
+"%s ಗೆ ಒಂದು ಗೂಢಲಿಪೀಕರಿಸದೆ ಇರುವ ಸಂಪರ್ಕದ ಮೂಲಕ ಸರಳಪಠ್ಯ ದೃಢೀಕರಣದ ಅಗತ್ಯವಿದೆ.  ಇದನ್ನು "
+"ಅನುಮತಿಸಿ ನಂತರ ದೃಢೀಕರಣದೊಂದಿಗೆ ಮುಂದುವರೆಯುವುದೆ ?"
 
 msgid "Plaintext Authentication"
 msgstr "ಸರಳಪಠ್ಯ ದೃಢೀಕರಣ"
 
 msgid "You require encryption, but it is not available on this server."
-msgstr ""
+msgstr "ನಿಮಗೆ ದೃಢೀಕರಣದ ಅಗತ್ಯವಿದೆ, ಆದರೆ ಅದು ಈ ಪರಿಚಾರಕದಲ್ಲಿ ಲಭ್ಯವಿರುವುದಿಲ್ಲ."
 
 msgid "Invalid challenge from server"
-msgstr ""
+msgstr "ಪರಿಚಾರಕದಿಂದ ಅಮಾನ್ಯವಾದ ಸವಾಲು ಎದುರಾಗಿದೆ"
 
 msgid "Server thinks authentication is complete, but client does not"
 msgstr ""
+"ದೃಢೀಕರಣವು ಪೂರ್ಣಗೊಂಡಿದೆ ಎಂದು ಪರಿಚಾರಕ ಭಾವಿಸುತ್ತದೆ ಆದರೆ ಕ್ಲೈಂಟ್ ಹಾಗೆ ಅಂದುಕೊಳ್ಳುವುದಿಲ್ಲ"
 
 msgid "SASL authentication failed"
 msgstr "SASL ಧೃಡೀಕರಣ ವಿಫಲಗೊಂಡಿದೆ"
@@ -3782,29 +3861,26 @@
 msgid "SASL error: %s"
 msgstr "SASL ದೋಷ: %s"
 
-#, fuzzy
 msgid "Unable to canonicalize username"
-msgstr "ಸಂರಚಿಸಲು ಆಗಲಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಮಾನಕವಾಗಿಸಲು ಆಗಲಿಲ್ಲ"
+
 msgid "Unable to canonicalize password"
-msgstr "ಬರೆಯುವದಕ್ಕಾಗಿ  %s ತೆರೆಯಲು ಆಗಲಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ಗುಪ್ತಪದವನ್ನು ಮಾನಕವಾಗಿಸಲು ಆಗಲಿಲ್ಲ"
+
 msgid "Malicious challenge from server"
-msgstr "ತಪ್ಪು ಸರ್ವರ್"
+msgstr "ಪರಿಚಾರಕದಿಂದ ತಪ್ಪು ಸವಾಲು ಎದುರಾಗಿದೆ"
 
 msgid "Unexpected response from server"
 msgstr "ಪರಿಚಾರಕದಿಂದ(ಸರ್ವರ್‍) ಅಮಾನ್ಯವಾದ ಪ್ರತ್ಯುತ್ತರ ಬಂದಿದೆ"
 
 msgid "The BOSH connection manager terminated your session."
-msgstr ""
+msgstr "BOSH ಸಂಪರ್ಕ ವ್ಯವಸ್ಥಾಪಕವು ನಿಮ್ಮ ಅಧಿವೇಶನವನ್ನು(ಸೆಶನ್) ಅಂತ್ಯಗೊಳಿಸಿದೆ. "
 
 msgid "No session ID given"
 msgstr "ಯಾವುದೆ ಅಧಿವೇಶನ ID ಯನ್ನು ಒದಗಿಸಿಲ್ಲ"
 
 msgid "Unsupported version of BOSH protocol"
-msgstr ""
+msgstr "ಬೆಂಬಲವಿರದ BOSH ಪ್ರೊಟೊಕಾಲ್‌ನ ಆವೃತ್ತಿ"
 
 msgid "Unable to establish a connection with the server"
 msgstr "ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"
@@ -3897,13 +3973,11 @@
 msgid "Resource"
 msgstr "ಸಂಪನ್ಮೂಲ"
 
-#, fuzzy
 msgid "Uptime"
-msgstr "ಪರಿಷ್ಕರಿಸಿ"
-
-#, fuzzy
+msgstr "ಅಪ್‌ಟೈಮ್"
+
 msgid "Logged Off"
-msgstr "ಈಗಾಗಲೇ ಲಾಗಿನ್ ಮಾಡಲಾಗಿದೆ"
+msgstr "ನಿರ್ಗಮಿಸಿದ್ದಾರೆ"
 
 #, c-format
 msgid "%s ago"
@@ -3924,20 +3998,21 @@
 msgid "Logo"
 msgstr "ಚಿಹ್ನೆ"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s will no longer be able to see your status updates.  Do you want to "
 "continue?"
-msgstr "ನೀವು ಗೆಳೆಯರ ಪಟ್ಟಿಯಿಂದ  %s ರನ್ನು ತೆಗೆದು ಹಾಕುವವರಿದ್ದೀರಿ.ಮುಂದುವರೆಯಬೇಕೇ?"
+msgstr ""
+"%s ರವರು ನಿಮ್ಮ ಸ್ಥಿತಿಯಲ್ಲಿನ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ನೋಡಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ. ಮುಂದುವರೆಯಬೇಕೇ?"
 
 msgid "Cancel Presence Notification"
-msgstr ""
+msgstr "ಇರುವಿಕೆಯ ಸೂಚನೆಯನ್ನು ರದ್ದುಗೊಳಿಸು"
 
 msgid "Un-hide From"
-msgstr ""
+msgstr "ಇವರಿಂದ ಅಡಗಿಸಿದಿರು"
 
 msgid "Temporarily Hide From"
-msgstr ""
+msgstr "ಇವರಿಂದ ತಾತ್ಕಾಲಿಕವಾಗಿ ಅಡಗಿಸು"
 
 msgid "(Re-)Request authorization"
 msgstr "(ಉತ್ತರ-)ಅಧಿಕಾರ ಕೋರಿಕೆ"
@@ -3950,24 +4025,22 @@
 msgid "Initiate _Chat"
 msgstr "ಮಾತುಕತೆ ಆರಂಭಿಸಿ(_C)"
 
-#, fuzzy
 msgid "Log In"
-msgstr "ತಕ್ಷಣದೂತ ದಾಖಲಿಸಿ"
-
-#, fuzzy
+msgstr "ಒಳಗೆ ಪ್ರವೇಶಿಸಿ"
+
 msgid "Log Out"
-msgstr "ಮಾತುಕತೆಗಳನ್ನು ದಾಖಲಿಸಿ "
+msgstr "ಹೊರ ನಿರ್ಗಮಿಸಿ"
 
 #. 2
 msgid "Chatty"
-msgstr ""
+msgstr "ಚಾಟಿ"
 
 msgid "Extended Away"
-msgstr ""
+msgstr "ಆಚೆಹೋಗಿದ್ದನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ"
 
 #. 3
 msgid "Do Not Disturb"
-msgstr "ಡಿಸ್ಟರ್ಬ್ ಮಾಡ್ಬೇಡಿ"
+msgstr "ತೊಂದರೆ ಮಾಡ್ಬೇಡಿ"
 
 msgid "JID"
 msgstr "JID"
@@ -3984,12 +4057,14 @@
 "Find a contact by entering the search criteria in the given fields. Note: "
 "Each field supports wild card searches (%)"
 msgstr ""
+"ಒದಗಿಸಲಾದ ಸ್ಥಳದಲ್ಲಿ ಹುಡುಕು ಮಾನದಂಡವನ್ನು ಬರೆದು ಒಂದು ಸಂಪರ್ಕವಿಳಾಸವನ್ನು ಹುಡುಕಿ. ಟಿಪ್ಪಣಿ: "
+"ಪ್ರತಿ ಜಾಗವೂ ವೈಲ್ಡ್ ಕಾರ್ಡ್ ಹುಡುಕಾಟಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ (%)"
 
 msgid "Directory Query Failed"
-msgstr ""
+msgstr "ಕೋಶದ ಮನವಿ ವಿಫಲಗೊಂಡಿದೆ"
 
 msgid "Could not query the directory server."
-msgstr ""
+msgstr "ಡಿರೆಕ್ಟರಿ ಪರಿಚಾರಕಕ್ಕೆ ಮನವಿ ಮಾಡಲಾಗಲಿಲ್ಲ."
 
 #. Try to translate the message (see static message
 #. list in jabber_user_dir_comments[])
@@ -3999,9 +4074,10 @@
 
 msgid "Fill in one or more fields to search for any matching XMPP users."
 msgstr ""
+"ತಾಳೆಯಾಗುವ ಯಾವುದೆ XMPP ಬಳಕೆದಾರರಿಗಾಗಿ ಹುಡುಕಲು ಒಂದು ಅಥವ ಹೆಚ್ಚಿನ ಸ್ಥಳಗಳನ್ನು ತುಂಬಿಸಿ."
 
 msgid "Email Address"
-msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ"
+msgstr "ಇ-ಮೈಲ್‌ ವಿಳಾಸ"
 
 msgid "Search for XMPP users"
 msgstr "XMPP ಬಳಕೆದಾರನನ್ನು ಹುಡುಕಿ"
@@ -4017,13 +4093,13 @@
 msgstr "ಒಂದು ಬಳಕೆದಾರ ಕೋಶವನ್ನು ನಮೂದಿಸಿ"
 
 msgid "Select a user directory to search"
-msgstr ""
+msgstr "ಹುಡುಕು ಒಂದು ಬಳಕೆದಾರ ಕೋಶವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"
 
 msgid "Search Directory"
 msgstr "ಕಡತಕೋಶ ಹುಡುಕಿ"
 
 msgid "_Room:"
-msgstr "ಕೋಣೆ(_R)"
+msgstr "ಕೋಣೆ(_R):"
 
 msgid "_Server:"
 msgstr "ಪರಿಚಾರಕ(ಸರ್ವರ್‍)(_S) :"
@@ -4047,10 +4123,10 @@
 
 #, c-format
 msgid "%s is not a valid room handle"
-msgstr ""
+msgstr "%s ಎನ್ನುವುದು ಒಂದು ಮಾನ್ಯವಾದ ಕೋಣೆ ಹ್ಯಾಂಡಲ್ ಆಗಿಲ್ಲ"
 
 msgid "Invalid Room Handle"
-msgstr ""
+msgstr "ಸರಿಯಲ್ಲದ ಕೋಣೆ ಹ್ಯಾಂಡಲ್"
 
 msgid "Configuration error"
 msgstr "ಸಂರಚನೆ ದೋಷ"
@@ -4068,7 +4144,7 @@
 msgstr "ನೋಂದಣಿ ದೋಷ"
 
 msgid "Nick changing not supported in non-MUC chatrooms"
-msgstr ""
+msgstr "MUC ಅಲ್ಲದೆ ಮಾತುಕತೆಕೋಣೆಗಳಲ್ಲಿ ಅಡ್ಡಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ"
 
 msgid "Error retrieving room list"
 msgstr "ಕೋಣೆಪಟ್ಟಿ ಪಡೆಯುವಲ್ಲಿ ದೋಷ"
@@ -4077,17 +4153,16 @@
 msgstr "ತಪ್ಪು ಪರಿಚಾರಕ(ಸರ್ವರ್‍)"
 
 msgid "Enter a Conference Server"
-msgstr ""
+msgstr "ಒಂದು ಸಮ್ಮೇಳನ ಪರಿಚಾರಕವನ್ನು ಪ್ರವೇಶಿಸು"
 
 msgid "Select a conference server to query"
-msgstr ""
+msgstr "ಮನವಿ ಸಲ್ಲಿಸಲು ಒಂದು ಸಮ್ಮೇಳನ ಪರಿಚಾರಕವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"
 
 msgid "Find Rooms"
 msgstr "ಕೋಣೆಗಳನ್ನು ಹುಡುಕಿ"
 
-#, fuzzy
 msgid "Affiliations:"
-msgstr "ಅಲಿಯಾಸ್:"
+msgstr "ಸೇರ್ಪಡೆಗಳು:"
 
 msgid "No users found"
 msgstr "ಯಾವುದೆ ಬಳಕೆದಾರರು ಕಂಡುಬಂದಿಲ್ಲ"
@@ -4102,7 +4177,7 @@
 msgstr "ಅಮಾನ್ಯವಾದ XMPP ಐಡಿ"
 
 msgid "Invalid XMPP ID. Domain must be set."
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ XMPP ID. ಡೊಮೈನನ್ನು ಸೂಚಿಸಬೇಕು."
 
 msgid "Malformed BOSH URL"
 msgstr "ಸರಿಯಲ್ಲದ BOSH URL"
@@ -4177,28 +4252,26 @@
 msgid "Change Registration"
 msgstr "ನೋಂದಣಿಯನ್ನು ಬದಲಿಸಿ"
 
-#, fuzzy
 msgid "Error unregistering account"
-msgstr "ಖಾತೆಮಾಹಿತಿ ಬದಲಿಸುವಲ್ಲಿ ದೋಷ"
-
-#, fuzzy
+msgstr "ಖಾತೆಯ ನೋಂದಾವಣಿಯನ್ನು ರದ್ದುಗೊಳಿಸುವಲ್ಲಿ ದೋಷ"
+
 msgid "Account successfully unregistered"
-msgstr "ನೀವು ಯಶಸ್ವಿಯಾಗಿ ಗುಂಪಿನಿಂದ ಹೊರಬಿದ್ದಿದ್ದೀರಿ."
+msgstr "ಖಾತೆಯ ನೋಂದಾವಣಿಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ"
 
 msgid "Initializing Stream"
-msgstr ""
+msgstr "ಸ್ಟ್ರೀಮನ್ನು ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Initializing SSL/TLS"
-msgstr ""
+msgstr "SSL/TLS ಅನ್ನು ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Authenticating"
 msgstr "ಧೃಡೀಕರಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Re-initializing Stream"
-msgstr ""
+msgstr "ಸ್ಟ್ರೀಮನ್ನು ಮರಳಿ ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Server doesn't support blocking"
-msgstr ""
+msgstr "ನಿಷೇಧಿಸುವುದನ್ನು ಪರಿಚಾರಕವು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"
 
 msgid "Not Authorized"
 msgstr "ಅಧಿಕಾರ ಪಡೆದಿಲ್ಲ"
@@ -4208,13 +4281,13 @@
 msgstr "ಲಹರಿ"
 
 msgid "Now Listening"
-msgstr ""
+msgstr "ಈಗ ಆಲಿಸುತ್ತಿರುವುದು"
 
 msgid "Both"
-msgstr ""
+msgstr "ಎರಡೂ"
 
 msgid "From (To pending)"
-msgstr ""
+msgstr "ಇವರಿಂದ (ಬಾಕಿ ಇರುವ)"
 
 msgid "From"
 msgstr "ಇವರಿಂದ"
@@ -4223,7 +4296,7 @@
 msgstr "ಗೆ"
 
 msgid "None (To pending)"
-msgstr ""
+msgstr "ಏನೂ ಇಲ್ಲ (ಬಾಕಿ ಇರುವ)"
 
 #. 0
 msgid "None"
@@ -4233,41 +4306,38 @@
 msgid "Subscription"
 msgstr "ಚಂದಾದಾರಿಕೆ"
 
-#, fuzzy
 msgid "Mood Text"
-msgstr "ರಕ್ತದ ಗುಂಪು"
-
-#, fuzzy
+msgstr "ಲಹರಿಯ(ಮೂಡ್) ಪಠ್ಯ"
+
 msgid "Allow Buzz"
-msgstr "ಅನುಮತಿಸು"
+msgstr "ಝೇಂಕರಿಸುವಿಕೆಯನ್ನು ಅನುಮತಿಸು"
 
 msgid "Tune Artist"
-msgstr ""
-
-#, fuzzy
+msgstr "ರಾಗದ ಕಲಾವಿದ"
+
 msgid "Tune Title"
-msgstr "ಶೀರ್ಷಿಕೆ"
+msgstr "ರಾಗದ ಶೀರ್ಷಿಕೆ"
 
 msgid "Tune Album"
-msgstr ""
+msgstr "ರಾಗದ ಆಲ್ಬಮ್"
 
 msgid "Tune Genre"
-msgstr ""
+msgstr "ರಾಗದ ಶೈಲಿ"
 
 msgid "Tune Comment"
-msgstr ""
+msgstr "ರಾಗದ ಟಿಪ್ಪಣಿ"
 
 msgid "Tune Track"
-msgstr ""
+msgstr "ರಾಗದ ಹಾಡು"
 
 msgid "Tune Time"
-msgstr ""
+msgstr "ರಾಗದ ಸಮಯ"
 
 msgid "Tune Year"
-msgstr ""
+msgstr "ರಾಗದ ವರ್ಷ"
 
 msgid "Tune URL"
-msgstr ""
+msgstr "ರಾಗದ ತಾಣಸೂಚಿ"
 
 msgid "Password Changed"
 msgstr "ಗುಪ್ತಪದ ಬದಲಾಗಿದೆ"
@@ -4302,22 +4372,22 @@
 msgstr "ಬಿಕ್ಕಟ್ಟು"
 
 msgid "Feature Not Implemented"
-msgstr ""
+msgstr "ಸವಲತ್ತನ್ನು ಅನ್ವಯಿಸಲಾಗಿಲ್ಲ"
 
 msgid "Forbidden"
 msgstr "ನಿಷಿದ್ಧ"
 
 msgid "Gone"
-msgstr ""
+msgstr "ಆಚೆ ಹೋಗಿದ್ದಾರೆ"
 
 msgid "Internal Server Error"
-msgstr ""
+msgstr "ಆಂತರಿಕ ಪರಿಚಾರಕ ದೋಷ"
 
 msgid "Item Not Found"
-msgstr ""
+msgstr "ಅಂಶವು ಕಂಡು ಬಂದಿಲ್ಲ"
 
 msgid "Malformed XMPP ID"
-msgstr ""
+msgstr "ತಪ್ಪಾಗಿ ರೂಪುಗೊಂಡ XMPP ID ."
 
 msgid "Not Acceptable"
 msgstr "ಒಪ್ಪುವಂಥದ್ದಲ್ಲ "
@@ -4335,10 +4405,10 @@
 msgstr "ನೋಂದಣಿ ಅಗತ್ಯ"
 
 msgid "Remote Server Not Found"
-msgstr ""
+msgstr "ದೂರದ ಪರಿಚಾರಕವು ಕಂಡು ಬಂದಿಲ್ಲ"
 
 msgid "Remote Server Timeout"
-msgstr ""
+msgstr "ದೂರಸ್ಥ ಪರಿಚಾರಕದ ಕಾಲಾವಧಿ ತೀರಿಕೆ"
 
 msgid "Server Overloaded"
 msgstr "ಪರಿಚಾರಕದ(ಸರ್ವರ್‍) ಹೊರೆ ಅತಿಯಾಗಿದೆ"
@@ -4356,13 +4426,13 @@
 msgstr "ಧೃಡೀಕರಣ ನಿಲ್ಲಿಸಿದೆ"
 
 msgid "Incorrect encoding in authorization"
-msgstr ""
+msgstr "ದೃಢೀಕರಣದಲ್ಲಿ ಅಮಾನ್ಯವಾದ ಎನ್ಕೋಡಿಂಗ್"
 
 msgid "Invalid authzid"
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ authzid"
 
 msgid "Invalid Authorization Mechanism"
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ ದೃಢೀಕರಣ ವ್ಯವಸ್ಥೆ"
 
 msgid "Authorization mechanism too weak"
 msgstr "ಧೃಡೀಕರಣ ವ್ಯವಸ್ಥೆ ಬಹಳ ದುರ್ಬಲ"
@@ -4377,7 +4447,7 @@
 msgstr "ತಪ್ಪು ಸ್ವರೂಪ"
 
 msgid "Bad Namespace Prefix"
-msgstr ""
+msgstr "ಸರಿಯಲ್ಲದ ನೆಮ್‌ಸ್ಪೇಸ್‌ನ ಪೂರ್ವಪ್ರತ್ಯಯ"
 
 msgid "Resource Conflict"
 msgstr "ಸಂಪನ್ಮೂಲ ಬಿಕ್ಕಟ್ಟು"
@@ -4386,25 +4456,25 @@
 msgstr "ಸಂಪರ್ಕ ಸಮಯಮೀರಿದೆ"
 
 msgid "Host Gone"
-msgstr ""
+msgstr "ಅತಿಥೇಯ ಆಚೆ ಹೋಗಿದ್ದಾರೆ"
 
 msgid "Host Unknown"
-msgstr ""
+msgstr "ಅಜ್ಞಾತ ಆತಿಥೇಯ"
 
 msgid "Improper Addressing"
-msgstr ""
+msgstr "ಅಸಮರ್ಪಕ ಸೂಚಿಸುವಿಕೆ"
 
 msgid "Invalid ID"
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ ಐಡಿ"
 
 msgid "Invalid Namespace"
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ ನೇಮ್‌ಸ್ಪೇಸ್"
 
 msgid "Invalid XML"
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ XML"
 
 msgid "Non-matching Hosts"
-msgstr ""
+msgstr "ತಾಳೆಯಾಗದ ಆತಿಥೇಯಗಳು"
 
 msgid "Policy Violation"
 msgstr "ನೀತಿ ಉಲ್ಲಂಘನೆ"
@@ -4416,31 +4486,31 @@
 msgstr "ಸಂಪನ್ಮೂಲ ಮಿತಿ"
 
 msgid "Restricted XML"
-msgstr ""
+msgstr "ನಿರ್ಬಂಧಿತ  XML"
 
 msgid "See Other Host"
-msgstr ""
+msgstr "ಇತರೆ ಆತಿಥೇಯವನ್ನು ನೋಡಿ"
 
 msgid "System Shutdown"
-msgstr ""
+msgstr "ವ್ಯವಸ್ಥೆಯ ಸ್ಥಗಿತಗೊಳಿಕೆ"
 
 msgid "Undefined Condition"
-msgstr ""
+msgstr "ವಿವರಿಸದೆ ಇರುವ ಸ್ಥಿತಿ"
 
 msgid "Unsupported Encoding"
-msgstr ""
+msgstr "ಬೆಂಬಲವಿರದ ಎನ್ಕೋಡಿಂಗ್ "
 
 msgid "Unsupported Stanza Type"
-msgstr ""
+msgstr "ಬೆಂಬಲವಿರದ ವಾಕ್ಯವೃಂದದ ಬಗೆ"
 
 msgid "Unsupported Version"
-msgstr ""
+msgstr "ಬೆಂಬಲವಿರದ ಆವೃತ್ತಿ"
 
 msgid "XML Not Well Formed"
-msgstr ""
+msgstr "XML ಸೂಕ್ತವಾಗಿ ರೂಪುಗೊಂಡಿಲ್ಲ"
 
 msgid "Stream Error"
-msgstr ""
+msgstr "ಸ್ಟ್ರೀಮ್‌ನ ದೋಷ"
 
 #, c-format
 msgid "Unable to ban user %s"
@@ -4448,11 +4518,11 @@
 
 #, c-format
 msgid "Unknown affiliation: \"%s\""
-msgstr ""
+msgstr "ಗೊತ್ತಿರದ ಸೇರ್ಪಡಿಕೆ: \"%s\""
 
 #, c-format
 msgid "Unable to affiliate user %s as \"%s\""
-msgstr ""
+msgstr "ಬಳಕೆದಾರ %s ಅನ್ನು \"%s\" ಎಂದು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"
 
 #, c-format
 msgid "Unknown role: \"%s\""
@@ -4464,66 +4534,70 @@
 
 #, c-format
 msgid "Unable to kick user %s"
-msgstr "ಬಳಕೆದಾರ %s ರನ್ನು ಒದೆಯಲು ಆಗಲಿಲ್ಲ "
-
-#, fuzzy, c-format
+msgstr "ಬಳಕೆದಾರ %s ರನ್ನು ಹೊರಗಟ್ಟಲು ಆಗಿಲ್ಲ "
+
+#, c-format
 msgid "Unable to ping user %s"
-msgstr "%s ಬಳಕೆದಾರರನ್ನು  ನಿಷೇಧಿಸಲು ಆಗಲಿಲ್ಲ"
-
-#, fuzzy, c-format
+msgstr "%s ಬಳಕೆದಾರರನ್ನು  ಪಿಂಗ್ ಮಾಡಲು ಆಗಲಿಲ್ಲ"
+
+#, c-format
 msgid "Unable to buzz, because there is nothing known about %s."
-msgstr "ಕಡತವನ್ನು  %s ರಿಗೆ ಕಳಿಸಲಗಲಿಲ್ಲ , ಬಳಕೆದಾರರು ಕಡತವರ್ಗಾವಣೆ ಬೆಂಬಲಿಸುವದಿಲ್ಲ "
-
-#, fuzzy, c-format
+msgstr "ಝೇಂಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ಏಕೆಂದರೆ %s ಬಗೆಗೆ ಏನೂ ತಿಳಿದಲ್ಲ."
+
+#, c-format
 msgid "Unable to buzz, because %s might be offline."
-msgstr "ಕಡತವನ್ನು  %s ರಿಗೆ ಕಳಿಸಲಗಲಿಲ್ಲ , ಬಳಕೆದಾರರು ಕಡತವರ್ಗಾವಣೆ ಬೆಂಬಲಿಸುವದಿಲ್ಲ "
-
-#, fuzzy, c-format
+msgstr "ಝೇಂಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ಏಕೆಂದರೆ %s ಆಫ್‌ಲೈನಿನಲ್ಲಿರಬಹುದು."
+
+#, c-format
 msgid ""
 "Unable to buzz, because %s does not support it or does not wish to receive "
 "buzzes now."
-msgstr "ಕಡತವನ್ನು  %s ರಿಗೆ ಕಳಿಸಲಗಲಿಲ್ಲ , ಬಳಕೆದಾರರು ಕಡತವರ್ಗಾವಣೆ ಬೆಂಬಲಿಸುವದಿಲ್ಲ "
+msgstr ""
+"ಝೇಂಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ಏಕೆಂದರೆ %s ಅದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಅಥವ ಅವರು ಝೇಂಕಾರವನ್ನು "
+"ಸ್ವೀಕರಿಸಲು ಬಯಸುವುದಿಲ್ಲ."
 
 #, c-format
 msgid "Buzzing %s..."
-msgstr ""
+msgstr "%s ನತ್ತ ಝೇಂಕರಿಸಲಾಗುತ್ತಿದೆ..."
 
 #. Yahoo only supports one attention command: the 'buzz'.
 #. This is index number YAHOO_BUZZ.
 msgid "Buzz"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಝೇಂಕಾರ"
+
+#, c-format
 msgid "%s has buzzed you!"
-msgstr "%s ರವರು  ನಿಮ್ಮನ್ನು [%s] ಸೇರಿಸಿದ್ದಾರೆ"
-
-#, fuzzy, c-format
+msgstr "%s ರವರು ನಿಮ್ಮತ್ತ ಝೇಂಕರಿಸದ್ದಾರೆ!"
+
+#, c-format
 msgid "Unable to initiate media with %s: invalid JID"
-msgstr "%s ರಿಗೆ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ."
-
-#, fuzzy, c-format
+msgstr "%s ದೊಂದಿಗೆ ಮಾಧ್ಯಮವನ್ನು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: ಅಮಾನ್ಯವಾದ JID"
+
+#, c-format
 msgid "Unable to initiate media with %s: user is not online"
-msgstr "ಕಡತವನ್ನು  %s ರಿಗೆ ಕಳಿಸಲಗಲಿಲ್ಲ , ಬಳಕೆದಾರರು ಕಡತವರ್ಗಾವಣೆ ಬೆಂಬಲಿಸುವದಿಲ್ಲ "
-
-#, fuzzy, c-format
+msgstr "%s ದೊಂದಿಗೆ ಮಾಧ್ಯಮವನ್ನು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: ಬಳಕೆದಾರರು ಆನ್‌ಲೈನಿನಲ್ಲಿಲ್ಲ "
+
+#, c-format
 msgid "Unable to initiate media with %s: not subscribed to user presence"
-msgstr "ಕಡತವನ್ನು  %s ರಿಗೆ ಕಳಿಸಲಗಲಿಲ್ಲ , ಬಳಕೆದಾರರು ಕಡತವರ್ಗಾವಣೆ ಬೆಂಬಲಿಸುವದಿಲ್ಲ "
+msgstr ""
+"%s ದೊಂದಿಗೆ ಮಾಧ್ಯಮವನ್ನು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: ಬಳಕೆದಾರರು ಇರುವಿಕೆಗೆ ಚಂದಾದಾರನಾಗಿಲ್ಲ"
 
 msgid "Media Initiation Failed"
 msgstr "ಮಾಧ್ಯಮವನ್ನು(ಮೀಡಿಯಾ) ಆರಂಭಿಸುವಿಕೆಯು ವಿಫಲಗೊಂಡಿದೆ"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Please select the resource of %s with which you would like to start a media "
 "session."
-msgstr "ನೀವು ಸೇರಬಯಸುವ ಮಾತುಕತೆ ಕುರಿತು ಮಾಹಿತಿ ಕೊಡಿ.\n"
+msgstr ""
+"ನೀವು ಯಾವುದರೊಂದಿಗೆ ಒಂದು ಮಾಧ್ಯಮ ಅಧಿವೇಶನವನ್ನು ಆರಂಭಿಸಲು ಬಯಸುತ್ತೀರೊ ಅದರ %s "
+"ಸಂಪನ್ಮೂಲವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ."
 
 msgid "Select a Resource"
 msgstr "ಒಂದು ಸಂಪನ್ಮೂಲವನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
 
-#, fuzzy
 msgid "Initiate Media"
-msgstr "ಮಾತುಕತೆ ಆರಂಭಿಸಿ(_C)"
+msgstr "ಮಾಧ್ಯಮವನ್ನು ಆರಂಭಿಸಿ"
 
 msgid "config:  Configure a chat room."
 msgstr "config:ಮಾತುಕತೆ ಕೋಣೆಯನ್ನು ಸಂರಚಿಸಿ"
@@ -4538,39 +4612,48 @@
 msgstr "register:ಮಾತುಕತೆ ಕೋಣೆಗೆ ನೋಂದಾಯಿಸಿ"
 
 msgid "topic [new topic]:  View or change the topic."
-msgstr ""
+msgstr "topic [ಹೊಸ ವಿಷಯ]:  ವಿಷಯವನ್ನು ನೋಡಿ ಅಥವ ಬದಲಾಯಿಸಿ."
 
 msgid "ban &lt;user&gt; [reason]:  Ban a user from the room."
-msgstr ""
+msgstr "ban &lt;ಬಳಕೆದಾರ&gt; [ಕಾರಣ]:  ಒಬ್ಬ ಬಳಕೆದಾರನನ್ನು ಕೋಣೆಯಿಂದ ನಿಷೇಧಿಸಿ."
 
 msgid ""
 "affiliate &lt;owner|admin|member|outcast|none&gt; [nick1] [nick2] ...: Get "
 "the users with an affiliation or set users' affiliation with the room."
 msgstr ""
+"affiliate &lt;owner|admin|member|outcast|none&gt; [ಅಡ್ಡಹೆಸರು೧] "
+"[ಅಡ್ಡಹೆಸರು೨] ...: ಒಂದು ಸೇರ್ಪಡಿಕೆಯೊಂದಿಗೆ ಬಳಕೆದಾರರನ್ನು ಪಡೆದುಕೊಳ್ಳಿ ಅಥವ  "
+"ಕೋಣೆಯೊಂದಿಗೆ ಬಳಕೆದಾರರ ಸೇರ್ಪಡಿಕೆಯನ್ನು ಹೊಂದಿಸಿ."
 
 msgid ""
 "role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: Get the "
 "users with a role or set users' role with the room."
 msgstr ""
+"role &lt;moderator|participant|visitor|none&gt; [ಅಡ್ಡಹೆಸರು೧] [ಅಡ್ಡಹೆಸರು೨] ...: "
+"ಒಂದು ಪಾತ್ರವನ್ನು ಹೊಂದಿದ ಬಳಕೆದಾರರನ್ನು ಪಡೆದುಕೊಳ್ಳಿ ಅಥವ ಕೋಣೆಯೊಂದಿಗೆ ಬಳಕೆದಾರರ "
+"ಪಾತ್ರವನ್ನು ಸೂಚಿಸಿ."
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
-msgstr ""
+msgstr "invite &lt;ಬಳಕೆದಾರ&gt; [ಸಂದೇಶ]:  ಬಳಕೆದಾರನನ್ನು ಒಂದು ಕೋಣೆಗೆ ಆಮಂತ್ರಿಸಿ."
 
 msgid "join: &lt;room&gt; [password]:  Join a chat on this server."
 msgstr ""
+"join: &lt;ಕೋಣೆ&gt; [ಗುಪ್ತಪದ]:  ಈ ಪರಿಚಾರಕದಲ್ಲಿನ ಒಂದು ಮಾತುಕತೆಯಲ್ಲಿ ಸೇರಿಕೊಳ್ಳಿ."
 
 msgid "kick &lt;user&gt; [reason]:  Kick a user from the room."
-msgstr ""
+msgstr "kick &lt;ಬಳಕೆದಾರ&gt; [ಕಾರಣ]:  ಒಬ್ಬ ಬಳಕೆದಾರನನ್ನು ಕೋಣೆಯಿಂದ ಹೊರಗಟ್ಟಿ."
 
 msgid ""
 "msg &lt;user&gt; &lt;message&gt;:  Send a private message to another user."
 msgstr ""
+"msg &lt;ಬಳಕೆದಾರ&gt; &lt;ಸಂದೇಶ&gt;:  ಒಂದು ಖಾಸಗಿ ಸಂದೇಶವನ್ನು ಇನ್ನೊಬ್ಬ ಬಳಕೆದಾರನಿಗೆ "
+"ಕಳುಹಿಸಿ."
 
 msgid "ping &lt;jid&gt;:\tPing a user/component/server."
-msgstr ""
+msgstr "ping &lt;jid&gt;:\tಒಬ್ಬ ಬಳಕೆದಾರ/ಘಟಕ/ಪರಿಚಾರಕವನ್ನು ಪಿಂಗ್ ಮಾಡಿ."
 
 msgid "buzz: Buzz a user to get their attention"
-msgstr ""
+msgstr "buzz: ಬಳಕೆದಾರರ ಗಮನ ಸೆಳೆಯಲು ಅವರತ್ತ ಝೇಂಕರಿಸಿ"
 
 #. *< type
 #. *< ui_requirement
@@ -4590,13 +4673,13 @@
 msgstr "ಡೊಮೈನ್"
 
 msgid "Require SSL/TLS"
-msgstr ""
+msgstr "SSL/TLS ನ ಅಗತ್ಯವಿದೆ"
 
 msgid "Force old (port 5223) SSL"
-msgstr ""
+msgstr "ಹಳೆಯ (ಸಂಪರ್ಕಸ್ಥಾನ 5223) SSL ಅನ್ನು ಒತ್ತಾಯಿಸು"
 
 msgid "Allow plaintext auth over unencrypted streams"
-msgstr ""
+msgstr "ಗೂಢಲಿಪೀಕರಿಸದೆ ಇರುವ ಸ್ಟ್ರೀಮ್‌ನ ಮೂಲಕ ಸರಳಪಠ್ಯ ದೃಢೀಕರಣವನ್ನು ಅನುಮತಿಸು"
 
 msgid "Connect port"
 msgstr "ಪೋರ್ಟ್ ಸಂಪರ್ಕಿಸಿ"
@@ -4611,16 +4694,16 @@
 msgstr "ಕಡತ ವರ್ಗಾವಣೆ ಪ್ರಾಕ್ಸಿಗಳು"
 
 msgid "BOSH URL"
-msgstr ""
+msgstr "BOSH URL"
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
 msgid "Show Custom Smileys"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಇಚ್ಛೆಯ ಸ್ಮೈಲಿಗಳನ್ನು ತೋರಿಸು"
+
+#, c-format
 msgid "%s has left the conversation."
-msgstr "%s ಮಾತುಕತೆಯನ್ನು ಮುಕ್ತಾಯಗೊಳಿಸಿದ್ದಾರೆ"
+msgstr "%s ಮಾತುಕತೆಯಿಂದ ಹೊರನಡೆದಿದ್ದಾರೆ."
 
 #, c-format
 msgid "Message from %s"
@@ -4638,19 +4721,22 @@
 msgid "Message delivery to %s failed: %s"
 msgstr " %s ರಿಗೆ ಸಂದೇಶ ವಿತರಣೆ ವಿಫಲ : %s"
 
-#, fuzzy
 msgid "XMPP Message Error"
-msgstr "%s ಇವರಿಂದ ಸಂದೇಶ"
+msgstr "XMPP ಸಂದೇಶ ದೋಷ"
 
 #, c-format
 msgid "(Code %s)"
-msgstr ""
+msgstr "(ಸಂಕೇತ %s)"
+
+#, fuzzy
+msgid "A custom smiley in the message is too large to send."
+msgstr "ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ : ಸಂದೇಶವು ಬಹಳ ದೊಡ್ಡದು."
 
 msgid "XML Parse error"
-msgstr ""
+msgstr "XML ಪಾರ್ಸ್ ದೋಷ"
 
 msgid "Unknown Error in presence"
-msgstr ""
+msgstr "ಇರುವಿಕೆಯಲ್ಲಿ ಗೊತ್ತಿರದ ದೋಷ"
 
 #, c-format
 msgid "Error joining chat %s"
@@ -4667,34 +4753,34 @@
 "You are creating a new room.  Would you like to configure it, or accept the "
 "default settings?"
 msgstr ""
+"ನೀವು ಒಂದು ಹೊಸ ಕೋಣೆಯನ್ನು ರಚಿಸಲಿದ್ದೀರಿ. ನೀವದನ್ನು ಸಂರಚಿಸಲು ಬಯಸುತ್ತೀರೆ, ಅಥವ "
+"ಪೂರ್ವನಿಯೋಜಿತ ಸಿದ್ಧತೆಗಳನ್ನು ಒಪ್ಪಿಕೊಳ್ಳಲು ಬಯಸುತ್ತೀರೆ?"
 
 msgid "_Configure Room"
 msgstr "ಮಾತುಕತೆ ಸಂರಚಿಸಿ(_C)"
 
 msgid "_Accept Defaults"
-msgstr ""
+msgstr "ಪೂರ್ವನಿಯೋಜಿತಗಳನ್ನು ಒಪ್ಪಿಕೊ(_A)"
 
 msgid "No reason"
 msgstr "ಯಾವುದೆ ಕಾರಣ ಇಲ್ಲ"
 
-#, fuzzy, c-format
+#, c-format
 msgid "You have been kicked: (%s)"
-msgstr "%s: (%s) ನಿಮ್ಮನ್ನು ಒದ್ದಿದ್ದಾರೆ"
-
-#, fuzzy, c-format
+msgstr "ನಿಮ್ಮನ್ನು ಹೊರಗಟ್ಟಲಾಗಿದೆ: (%s)"
+
+#, c-format
 msgid "Kicked (%s)"
-msgstr "%s (%s) ರಿಂದ ಒದೆತ"
-
-#, fuzzy
+msgstr "ಹೊರಗಟ್ಟಲಾಗಿದೆ (%s)"
+
 msgid "An error occurred on the in-band bytestream transfer\n"
-msgstr "ಕಡತವನ್ನು ತೆರೆಯುವಾಗ ದೋಷವುಂಟಾಯಿತು"
-
-#, fuzzy
+msgstr "ಇನ್‌-ಬ್ಯಾಂಡ್ ಬೈಟ್‌ಸ್ಟ್ರೀಮ್‌ ವರ್ಗಾವಣೆಯಲ್ಲಿ ಒಂದು ದೋಷವುಂಟಾಗಿದೆ\n"
+
 msgid "Transfer was closed."
-msgstr "ಕಡತ ವರ್ಗಾವಣೆ ವಿಫಲ."
+msgstr "ವರ್ಗಾವಣೆ ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆ."
 
 msgid "Failed to open in-band bytestream"
-msgstr ""
+msgstr "ಇನ್‌-ಬ್ಯಾಂಡ್ ಬೈಟ್‌ಸ್ಟ್ರೀಮ್‌ ಅನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 #, c-format
 msgid "Unable to send file to %s, user does not support file transfers"
@@ -4703,59 +4789,57 @@
 msgid "File Send Failed"
 msgstr "ಕಡತ ಕಳಿಸುವಿಕೆ ವಿಫಲ"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send file to %s, invalid JID"
-msgstr "%s ರಿಗೆ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ."
-
-#, fuzzy, c-format
+msgstr "%s ರವರಿಗೆ ಕಡತವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ, ಅಮಾನ್ಯವಾದ JID"
+
+#, c-format
 msgid "Unable to send file to %s, user is not online"
-msgstr "ಕಡತವನ್ನು  %s ರಿಗೆ ಕಳಿಸಲಗಲಿಲ್ಲ , ಬಳಕೆದಾರರು ಕಡತವರ್ಗಾವಣೆ ಬೆಂಬಲಿಸುವದಿಲ್ಲ "
-
-#, fuzzy, c-format
+msgstr "ಕಡತವನ್ನು  %s ರವರಿಗೆ ಕಳಿಸಲಾಗಲಿಲ್ಲ, ಬಳಕೆದಾರರು ಆನ್‌ಲೈನಿನಲ್ಲಿ ಇಲ್ಲ "
+
+#, c-format
 msgid "Unable to send file to %s, not subscribed to user presence"
-msgstr "ಕಡತವನ್ನು  %s ರಿಗೆ ಕಳಿಸಲಗಲಿಲ್ಲ , ಬಳಕೆದಾರರು ಕಡತವರ್ಗಾವಣೆ ಬೆಂಬಲಿಸುವದಿಲ್ಲ "
-
-#, fuzzy, c-format
+msgstr "ಕಡತವನ್ನು  %s ರವರಿಗೆ ಕಳಿಸಲಾಗಲಿಲ್ಲ, ಬಳಕೆದಾರರ ಇರುವಿಕೆಗೆ ಚಂದಾದಾರನಾಗಿಲ್ಲ"
+
+#, c-format
 msgid "Please select the resource of %s to which you would like to send a file"
-msgstr "ನೀವು ಸೇರಬಯಸುವ ಮಾತುಕತೆ ಕುರಿತು ಮಾಹಿತಿ ಕೊಡಿ.\n"
+msgstr ""
+"ನೀವು ಯಾವುದರೊಂದಿಗೆ ಒಂದು ಕಡತವನ್ನು ಕಳುಹಿಸಲು ಬಯಸುತ್ತೀರೊ ಅದರ %s ಸಂಪನ್ಮೂಲವನ್ನು ಆಯ್ಕೆ "
+"ಮಾಡಿ"
 
 msgid "Edit User Mood"
-msgstr ""
+msgstr "ಬಳಕೆದಾರರ ಲಹರಿಯನ್ನು ಸಂಪಾದಿಸಿ"
 
 msgid "Please select your mood from the list."
-msgstr ""
-
-#, fuzzy
+msgstr "ಪಟ್ಟಿಯಿಂದ ನಿಮ್ಮ ಲಹರಿಯನ್ನು(ಮೂಡ್) ಆಯ್ಕೆ ಮಾಡಿಕೊಳ್ಳಿ"
+
 msgid "Set"
-msgstr "ನಿಶ್ಚಯಿಸಿ(_S)"
-
-#, fuzzy
+msgstr "ನಿಶ್ಚಯಿಸಿ"
+
 msgid "Set Mood..."
-msgstr "ಕದತಕೋಶ ಆಯ್ದುಕೊಳ್ಳಿ ...."
-
-#, fuzzy
+msgstr "ಲಹರಿಯನ್ನು ಹೊಂದಿಸಿ ...."
+
 msgid "Set User Nickname"
-msgstr "ಬಳಕೆದಾರಮಿತಿಯನ್ನು ನಿರ್ಧರಿಸಿ"
-
-#, fuzzy
+msgstr "ಬಳಕೆದಾರರ ಅಡ್ಡಹೆಸರನ್ನು ನಿರ್ಧರಿಸಿ"
+
 msgid "Please specify a new nickname for you."
-msgstr "%sಗಾಗಿ ಹೊಸ ಹೆಸರನ್ನು ದಾಖಲಿಸಿ"
+msgstr "ನಿಮಗಾಗಿ ಹೊಸ ಅಡ್ಡಹೆಸರನ್ನು ದಾಖಲಿಸಿ."
 
 msgid ""
 "This information is visible to all contacts on your contact list, so choose "
 "something appropriate."
 msgstr ""
-
-#, fuzzy
+"ಈ ಮಾಹಿತಿಯು ನಿಮ್ಮ ಸಂಪರ್ಕವಿಳಾಸ ಪಟ್ಟಿಯಲ್ಲಿರುವ ಎಲ್ಲಾ ಸಂಪರ್ಕವಿಳಾಸಗಳಿಗೂ ಕಾಣಿಸುತ್ತದೆ, "
+"ಆದ್ದರಿಂದ ಸೂಕ್ತವಾದುದನ್ನು ಆಯ್ಕೆ ಮಾಡಿ."
+
 msgid "Set Nickname..."
-msgstr "ಅಡ್ಡಹೆಸರು"
+msgstr "ಅಡ್ಡಹೆಸರನ್ನು ಸೂಚಿಸಿ..."
 
 msgid "Actions"
 msgstr "ಕ್ರಿಯೆಗಳು"
 
-#, fuzzy
 msgid "Select an action"
-msgstr "ಆಯ್ಕೆ"
+msgstr "ಒಂದು ಕ್ರಿಯೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"
 
 #. only notify the user about problems adding to the friends list
 #. * maybe we should do something else for other lists, but it probably
@@ -4765,39 +4849,42 @@
 msgstr "\"%s\"  ಸೇರಿಸಲಾಗಲಿಲ್ಲ. "
 
 msgid "Buddy Add error"
-msgstr ""
-
-#, fuzzy
+msgstr "ಗೆಳೆಯನನ್ನು ಸೇರಿಸುವಲ್ಲಿ ದೋಷ"
+
 msgid "The username specified does not exist."
-msgstr "ಜಾಲವೀಕ್ಷಣಾ ಆದೇಶ  \"%s\" ತಪ್ಪಾಗಿದೆ"
+msgstr "ಸೂಚಿಸಲಾದ ಬಳಕೆದಾರ ಹೆಸರು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ."
 
 #, c-format
 msgid "Buddy list synchronization issue in %s (%s)"
-msgstr ""
+msgstr "%s ನಲ್ಲಿ ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಮೇಳೈಸುವಲ್ಲಿ ತೊಂದರೆ ಉಂಟಾಗಿದೆ (%s)"
 
 #, c-format
 msgid ""
 "%s on the local list is inside the group \"%s\" but not on the server list. "
 "Do you want this buddy to be added?"
 msgstr ""
+"%s ಎನ್ನುವುದು \"%s\" ಗುಂಪಿನ ಒಳಗಿರುವ ಸ್ಥಳೀಯ ಪಟ್ಟಿಯಲ್ಲಿ ಇದೆ ಆದರೆ ಪರಿಚಾರಕದಲ್ಲಿಲ್ಲ.? "
+"ನೀವು ಈ ಗೆಳೆಯನನ್ನು ಸೇರಿಸಲು ಬಯಸುತ್ತೀರೆ?"
 
 #, c-format
 msgid ""
 "%s is on the local list but not on the server list. Do you want this buddy "
 "to be added?"
 msgstr ""
+"%s ಎನ್ನುವುದು ಸ್ಥಳೀಯ ಪಟ್ಟಿಯಲ್ಲಿ ಇದೆ ಆದರೆ ಪರಿಚಾರಕದ ಪಟ್ಟಿಯಲ್ಲಿ ಇಲ್ಲ. ನೀವು ಈ ಗೆಳೆಯನನ್ನು "
+"ಸೇರಿಸಲು ಬಯಸುತ್ತೀರೆ?"
 
 #, c-format
 msgid "Unable to parse message"
-msgstr ""
+msgstr "ಸಂದೇಶವನ್ನು ಪಾರ್ಸ್ ಮಾಡಲಾಗಿಲ್ಲ"
 
 #, c-format
 msgid "Syntax Error (probably a client bug)"
-msgstr ""
+msgstr "ಸಿಂಟಾಕ್ಸಿನ ದೋಷ (ಬಹುಷಃ ಒಂದು ಕ್ಲೈಂಟ್‌ ದೋಚವಾಗಿರಬಹುದು)"
 
 #, c-format
 msgid "Invalid email address"
-msgstr "ತಪ್ಪು ವಿ-ಅಂಚೆ ವಿಳಾಸ"
+msgstr "ತಪ್ಪು ಇ-ಮೈಲ್‌ ವಿಳಾಸ"
 
 #, c-format
 msgid "User does not exist"
@@ -4805,20 +4892,20 @@
 
 #, c-format
 msgid "Fully qualified domain name missing"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಸಂಪೂರ್ಣ ಅರ್ಹ ಡೊಮೈನ್ ಹೆಸರು ಕಾಣಿಸುತ್ತಿಲ್ಲ"
+
+#, c-format
 msgid "Already logged in"
-msgstr "ಈಗಾಗಲೇ ಲಾಗಿನ್ ಮಾಡಲಾಗಿದೆ"
+msgstr "ಈಗಾಗಲೇ ಪ್ರವೇಶಿಸಿದ್ದಾರೆ(ಲಾಗಿನ್)"
 
 # , c-format
 #, c-format
 msgid "Invalid username"
-msgstr "ತಪ್ಪು ಹೆಸರು"
-
-#, fuzzy, c-format
+msgstr "ತಪ್ಪು ಬಳಕೆದಾರಹೆಸರು"
+
+#, c-format
 msgid "Invalid friendly name"
-msgstr "ತಪ್ಪು ಹೆಸರು"
+msgstr "ತಪ್ಪು  ಪರಿಚಯದ ಹೆಸರು"
 
 # , c-format
 #, c-format
@@ -4835,11 +4922,11 @@
 
 #, c-format
 msgid "User is offline"
-msgstr ""
+msgstr "ಬಳಕೆದಾರರು ಆಫ್‍ಲೈನ್ ಆಗಿದ್ದಾರೆ"
 
 #, c-format
 msgid "Already in the mode"
-msgstr ""
+msgstr "ಈಗಾಗಲೆ ಲಹರಿಯಲ್ಲಿದ್ದೇನೆ"
 
 #, c-format
 msgid "Already in opposite list"
@@ -4863,27 +4950,28 @@
 
 #, c-format
 msgid "Cannot remove group zero"
-msgstr ""
+msgstr "ಶೂನ್ಯ ಗುಂಪನ್ನು ತೆಗೆದು ಹಾಕಲು ಆಗಲಿಲ್ಲ"
 
 #, c-format
 msgid "Tried to add a user to a group that doesn't exist"
 msgstr ""
+"ಅಸ್ತಿತ್ವದಲ್ಲಿ ಇರದೆ ಇರುವ ಒಂದು ಗುಂಪಿಗೆ ಒಬ್ಬ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗಿದೆ"
 
 #, c-format
 msgid "Switchboard failed"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಸ್ವಿಚ್‌ಬೋರ್ಡ್ ವಿಫಲಗೊಂಡಿದೆ"
+
+#, c-format
 msgid "Notify transfer failed"
-msgstr "ಕಡತ ವರ್ಗಾವಣೆ ವಿಫಲ."
+msgstr "ಸೂಚನೆ ವರ್ಗಾವಣೆ ವಿಫಲ"
 
 #, c-format
 msgid "Required fields missing"
-msgstr ""
+msgstr "ಅಗತ್ಯವಿರುವ ಸ್ಥಳಗಳನ್ನು ಕಾಣೆಯಾಗಿವೆ"
 
 #, c-format
 msgid "Too many hits to a FND"
-msgstr ""
+msgstr "ಒಂದು FND ಗೆ ಬಹಳಷ್ಟು ಭಾರಿ ಭೇಟಿ ನೀಡಲಾಗಿದೆ"
 
 #, c-format
 msgid "Not logged in"
@@ -4896,7 +4984,7 @@
 
 #, c-format
 msgid "Database server error"
-msgstr ""
+msgstr "ದತ್ತಸಂಚಯ ಪರಿಚಾರಕ ದೋಷ"
 
 #, c-format
 msgid "Command disabled"
@@ -4908,11 +4996,11 @@
 
 #, c-format
 msgid "Memory allocation error"
-msgstr ""
+msgstr "ಮೆಮೊರಿ ನಿಯೋಜನಾ ದೋಷ"
 
 #, c-format
 msgid "Wrong CHL value sent to server"
-msgstr ""
+msgstr "ತಪ್ಪು CHL ಮೌಲ್ಯವನ್ನು ಪರಿಚಾರಕಕ್ಕೆ ಕಳುಹಿಸಲಾಗಿದೆ"
 
 #, c-format
 msgid "Server busy"
@@ -4924,7 +5012,7 @@
 
 #, c-format
 msgid "Peer notification server down"
-msgstr ""
+msgstr "ಪೀರ್ ಸೂಚನಾ ಪರಿಚಾರಕವು ಕೆಲಸ ಮಾಡುತ್ತಿಲ್ಲ"
 
 #, c-format
 msgid "Database connect error"
@@ -4940,7 +5028,7 @@
 
 #, c-format
 msgid "CVR parameters are either unknown or not allowed"
-msgstr ""
+msgstr "CVR ನಿಯತಾಂಕಗಳು(ಪ್ಯಾರಾಮೀಟರ್ಸ್) ಒಂದೊ ತಿಳಿದಿಲ್ಲ ಅಥವ ಅನುಮತಿ ಇಲ್ಲ"
 
 #, c-format
 msgid "Unable to write"
@@ -4948,7 +5036,7 @@
 
 #, c-format
 msgid "Session overload"
-msgstr ""
+msgstr "ಅಧಿವೇಶನದಲ್ಲಿ ಹೆಚ್ಚು ಹೊರ ಉಂಟಾಗಿದೆ"
 
 #, c-format
 msgid "User is too active"
@@ -4960,18 +5048,18 @@
 
 #, c-format
 msgid "Passport not verified"
-msgstr ""
+msgstr "ಪಾಸ್‌ಪೋರ್ಟನ್ನು ಪರಿಶೀಲಿಸಲಾಗಿಲ್ಲ"
 
 #, c-format
 msgid "Bad friend file"
-msgstr ""
+msgstr "ಸರಿ ಇಲ್ಲದ ಪರಿಚಯದ ಕಡತ"
 
 #, c-format
 msgid "Not expected"
 msgstr "ನಿರೀಕ್ಷಿತ ಅಲ್ಲ"
 
 msgid "Friendly name is changing too rapidly"
-msgstr ""
+msgstr "ಪರಿಚಯದ ಹೆಸರು ವೇಗವಾಗಿ ಬದಲಾಗುತ್ತಿದೆ"
 
 #, c-format
 msgid "Server too busy"
@@ -4983,7 +5071,7 @@
 
 #, c-format
 msgid "Not allowed when offline"
-msgstr ""
+msgstr "ಆಫ್‌ಲೈನಿನಲ್ಲಿದ್ದಾಗ ಅನುಮತಿ ಇಲ್ಲ"
 
 #, c-format
 msgid "Not accepting new users"
@@ -4991,18 +5079,18 @@
 
 #, c-format
 msgid "Kids Passport without parental consent"
-msgstr ""
+msgstr "ಪಾಲಕರ ಅರಿವಿಗೆ ಬಾರದೆ ಇರುವ ಮಕ್ಕಳ ಪಾಸ್‌ಪೋರ್ಟ್"
 
 #, c-format
 msgid "Passport account not yet verified"
-msgstr ""
+msgstr "ಪಾಸ್‌ಪೋರ್ಟ್ ಖಾತೆಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗಿಲ್ಲ"
 
 msgid "Passport account suspended"
-msgstr ""
+msgstr "ಪಾಸ್‌ಪೋರ್ಟ್ ಖಾತೆಯನ್ನು ಅಮಾನತ್ತು ಮಾಡಲಾಗಿದೆ"
 
 #, c-format
 msgid "Bad ticket"
-msgstr ""
+msgstr "ಸರಿಯಲ್ಲದ ಟಿಕೆಟ್"
 
 #, c-format
 msgid "Unknown Error Code %d"
@@ -5015,73 +5103,81 @@
 msgid "Other Contacts"
 msgstr "ಇತರೆ ಸಂಪರ್ಕವಿಳಾಸಗಳು"
 
-#, fuzzy
 msgid "Non-IM Contacts"
-msgstr "ಸಂಪರ್ಕವನ್ನು ತೆಗೆದುಹಾಕಿ"
+msgstr "IM ಅಲ್ಲದ ಸಂಪರ್ಕ ವಿಳಾಸಗಳು"
 
 #, c-format
 msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>"
 msgstr ""
+"%s ನಿಮ್ಮತ್ತ ಕಣ್ಣು ಮಿಟುಕಿಸಿದ್ದಾರೆ. <a href='msn-wink://%s'>ಅದನ್ನು ನೋಡಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ "
+"ಮಾಡಿ</a>"
 
 #, c-format
 msgid "%s sent a wink, but it could not be saved"
-msgstr ""
+msgstr "%s ನಿಮ್ಮತ್ತ ಕಣ್ಣು ಮಿಟುಕಿಸಿದ್ದಾರೆ, ಆದರೆ ಅದನ್ನು ಉಳಿಸಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 #, c-format
 msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>"
 msgstr ""
+"%s ನಿಮಗೆ ಒಂದು ಧ್ವನಿಯ ತುಣುಕನ್ನು ಕಳಿಸಿದ್ದಾರೆ. <a href='audio://%s'>ಅದನ್ನು ಆಲಿಸಲು "
+"ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ</a>"
 
 #, c-format
 msgid "%s sent a voice clip, but it could not be saved"
 msgstr ""
+"%s ನಿಮಗೆ ಒಂದು ಧ್ವನಿಯ ತುಣುಕನ್ನು ಕಳಿಸಿದ್ದಾರೆ. ಆದರೆ ಅದನ್ನು ಉಳಿಸಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 #, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
 msgstr ""
+"%s ನಿಮಗೆ ಒಂದು ಧ್ವನಿಯ ಮಾತುಕತೆಯ ಆಮಂತ್ರಣವನ್ನು ಕಳಿಸಿದ್ದಾರೆ, ಆದರೆ ಅದನ್ನು "
+"ಬೆಂಬಲಿಸುವುದಿಲ್ಲ."
 
 msgid "Nudge"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಮೆತ್ತಗೆ ತಿವಿಯುವಿಕೆ"
+
+#, c-format
 msgid "%s has nudged you!"
-msgstr "%s ರವರು  ನಿಮ್ಮನ್ನು [%s] ಸೇರಿಸಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮ್ಮನ್ನು  ಮೆತ್ತಗೆ ತಿವಿದಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Nudging %s..."
-msgstr ""
+msgstr "%s ರವರನ್ನು ಮೆತ್ತಗೆ ತಿವಿಯಲಾಗುತ್ತಿದೆ..."
 
 msgid "Email Address..."
-msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ..."
+msgstr "ಇ-ಮೈಲ್‌ ವಿಳಾಸ..."
 
 msgid "Your new MSN friendly name is too long."
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ನಿಮ್ಮ ಹೊಸ MSN ಪರಿಚಯದ ಹೆಸರು ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ."
+
+#, c-format
 msgid "Set friendly name for %s."
-msgstr "ತಪ್ಪು ಹೆಸರು"
+msgstr "%s ಗಾಗಿ ಒಂದು ಪರಿಚಯದ ಹೆಸರನ್ನು ಹೊಂದಿಸಿ."
 
 msgid "Set your friendly name."
-msgstr ""
+msgstr "ನಿಮ್ಮ ಪರಿಚಯದ ಹೆಸರನ್ನು ಹೊಂದಿಸಿ."
 
 msgid "This is the name that other MSN buddies will see you as."
-msgstr ""
+msgstr "ಇತರೆ MSN ಗೆಳೆಯರು ನಿಮ್ಮನ್ನು ಈ ಹೆಸರಿನಿಂದ ಗುರುತಿಸುತ್ತಾರೆ."
 
 msgid "Set your home phone number."
-msgstr ""
+msgstr "ನಿಮ್ಮ ಮನೆಯ ದೂರವಾಣಿ ಸಂಖ್ಯೆಯನ್ನು ಬರೆಯಿರಿ."
 
 msgid "Set your work phone number."
-msgstr "ನಿಮ್ಮ ಕಛೇರಿಯ ದೂರವಾಣಿಸಂಖ್ಯೆ ಬರೆಯಿರಿ"
+msgstr "ನಿಮ್ಮ ಕಛೇರಿಯ ದೂರವಾಣಿಸಂಖ್ಯೆ ಬರೆಯಿರಿ."
 
 msgid "Set your mobile phone number."
-msgstr "ನಿಮ್ಮಸಂಚಾರಿ ದೂರವಾಣಿಸಂಖ್ಯೆ ಬರೆಯಿರಿ"
+msgstr "ನಿಮ್ಮ ಮೊಬೈಲ್ ದೂರವಾಣಿ ಸಂಖ್ಯೆ ಬರೆಯಿರಿ."
 
 msgid "Allow MSN Mobile pages?"
-msgstr ""
+msgstr "MSN ಮೊಬೈಲ್ ಪುಟಗಳನ್ನು ಅನುಮತಿಸಬೇಕೆ?"
 
 msgid ""
 "Do you want to allow or disallow people on your buddy list to send you MSN "
 "Mobile pages to your cell phone or other mobile device?"
 msgstr ""
+"ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿರುವವರು MSN ಮೊಬೈಲ್ ಪುಟಗಳನ್ನು ನಿಮ್ಮ ಸೆಲ್‌ ಫೋನ್ ಅಥವ ಇತರೆ ಮೊಬೈಲ್ "
+"ಸಾಧನಗಳಿಗೆ ಕಳುಹಿಸುವುದನ್ನು ಅನುಮತಿಸಲು ಅಥವ ಅನುಮತಿಯನ್ನು ನಿರಾಕರಿಸಲು ಬಯಸುತ್ತೀರೆ?"
 
 msgid "Allow"
 msgstr "ಅನುಮತಿಸು"
@@ -5091,20 +5187,19 @@
 
 #, c-format
 msgid "Blocked Text for %s"
-msgstr ""
-
-#, fuzzy
+msgstr "%s ಗಾಗಿ ಪಠ್ಯವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"
+
 msgid "No text is blocked for this account."
-msgstr "ಈ ಗೆಳೆಯ ಚಿನ್ಹೆಯನ್ನು ಈ ಖಾತೆಗೆ ಬಳಸಿ"
+msgstr "ಈ ಖಾತೆಗೆ ಯಾವುದೆ ಪಠ್ಯವನ್ನು ನಿರ್ಬಂಧಿಸಿಲ್ಲ."
 
 #, c-format
 msgid ""
 "MSN servers are currently blocking the following regular expressions:<br/>%s"
 msgstr ""
-
-#, fuzzy
+"MSN ಪರಿಚಾರಕಗಳು ಪ್ರಸಕ್ತ ಈ ಕೆಳಗಿನ ರೆಗ್ಯುಲರ್ ಎಕ್ಸ್‌ಪ್ರೆಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತಿವೆ:<br/>%s"
+
 msgid "This account does not have email enabled."
-msgstr "ಈ ಹಾಟ್‍ಮೇಲ್ ಖಾತೆಯು ಸಕ್ರಿಯವಾಗಿರಲಿಕ್ಕಿಲ್ಲ"
+msgstr "ಈ ಖಾತೆಗೆ ಇಮೈಲನ್ನು ಸಕ್ರಿಯವಾಗಿಸಿಲ್ಲ."
 
 msgid "Send a mobile message."
 msgstr "ಮೊಬೈಲ್ ಸಂದೇಶ ಕಳಿಸಿ"
@@ -5113,14 +5208,13 @@
 msgstr "ಪುಟ"
 
 msgid "Playing a game"
-msgstr ""
-
-#, fuzzy
+msgstr "ಒಂದು ಆಟ ಆಡಲಾಗುತ್ತಿದೆ"
+
 msgid "Working"
-msgstr "ಕಛೇರಿ ಫ್ಯಾಕ್ಸ"
+msgstr "ಕಛೇರಿ"
 
 msgid "Has you"
-msgstr ""
+msgstr "ನಿಮ್ಮನ್ನು ಹೊಂದಿದೆ"
 
 msgid "Home Phone Number"
 msgstr "ಮನೆಯ ದೂರವಾಣಿ ಸಂಖ್ಯೆ"
@@ -5135,7 +5229,7 @@
 msgstr "ಬೇಗ ಹಿಂತಿರುಗಲಿದ್ದೇನೆ"
 
 msgid "Busy"
-msgstr ""
+msgstr "ಕಾರ್ಯನಿರತ"
 
 msgid "On the Phone"
 msgstr "ದೂರವಾಣಿಯಲ್ಲಿ  ಮಾತನಾಡುತ್ತ"
@@ -5153,7 +5247,7 @@
 msgstr "ಕಲಾವಿದ"
 
 msgid "Album"
-msgstr ""
+msgstr "ಆಲ್ಬಂ"
 
 msgid "Game Title"
 msgstr "ಆಟದ ಶೀರ್ಷಿಕೆ"
@@ -5162,46 +5256,49 @@
 msgstr "ಆಫೀಸ್ ಶೀರ್ಷಿಕೆ"
 
 msgid "Set Friendly Name..."
-msgstr ""
+msgstr "ಪರಿಚಯದ ಹೆಸರನ್ನು ಹೊಂದಿಸಿ..."
 
 msgid "Set Home Phone Number..."
-msgstr ""
+msgstr "ಮನೆಯ ದೂರವಾಣಿ ಸಂಖ್ಯೆಯನ್ನು ಬರೆಯಿರಿ..."
 
 msgid "Set Work Phone Number..."
-msgstr ""
+msgstr "ಕಛೇರಿಯ ದೂರವಾಣಿಸಂಖ್ಯೆ ಬರೆಯಿರಿ..."
 
 msgid "Set Mobile Phone Number..."
-msgstr ""
+msgstr "ಮೊಬೈಲ್ ದೂರವಾಣಿ ಸಂಖ್ಯೆ ಬರೆಯಿರಿ..."
 
 msgid "Enable/Disable Mobile Devices..."
-msgstr ""
+msgstr "ಮೊಬೈಲ್ ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ/ಅಶಕ್ತಗೊಳಿಸಿ..."
 
 msgid "Allow/Disallow Mobile Pages..."
-msgstr ""
+msgstr "ಮೊಬೈಲ್ ಪುಟಗಳನ್ನು ಅನುಮತಿಸಿ/ಅನುಮತಿಯನ್ನು ರದ್ದುಗೊಳಿಸಿ..."
 
 msgid "View Blocked Text..."
-msgstr ""
+msgstr "ನಿರ್ಬಂಧಿಸಲಾದ ಪಠ್ಯವನ್ನು ನೋಡಿ..."
 
 msgid "Open Hotmail Inbox"
-msgstr ""
+msgstr "ಹಾಟ್‌ಮೈಲ್ ಇನ್‌ಬಾಕ್ಸನ್ನು ತೆರೆಯಿರಿ"
 
 msgid "Send to Mobile"
 msgstr "ಮೊಬೈಲಿಗೆ ಕಳಿಸಿ"
 
 msgid "SSL support is needed for MSN. Please install a supported SSL library."
 msgstr ""
+"MSN ಗಾಗಿ SSL ಬೆಂಬಲದ ಅಗತ್ಯವಿದೆ. ದಯವಿಟ್ಟು ಒಂದು ಬೆಂಬಲಿತ SSL ಲೈಬ್ರರಿಯನ್ನು ಅನುಸ್ಥಾಪಿಸಿ."
 
 #, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
 msgstr ""
+"%s ಎಂಬ ಹೆಸರಿನ ಗೆಳೆಯನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ ಏಕೆಂದರೆ ಬಳಕೆದಾರ ಹೆಸರು ಸರಿಯಾಗಿಲ್ಲ.  "
+"ಬಳಕೆದಾರ ಹೆಸರುಗಳು ಒಂದು ಸರಿಯಾದ ಇಮೈಲ್ ವಿಳಾಸಗಳಾಗಿರಬೇಕು."
 
 msgid "Unable to Add"
 msgstr "ಸೇರಿಸಲು ಆಗಲಿಲ್ಲ"
 
 msgid "Authorization Request Message:"
-msgstr ""
+msgstr "ದೃಢೀಕರಣಕ್ಕಾಗಿನ ಮನವಿ ಸಂದೇಶ:"
 
 msgid "Please authorize me!"
 msgstr "ದಯವಿಟ್ಟು ನನಗೆ ಅಧಿಕಾರ ನೀಡಿ!"
@@ -5213,7 +5310,7 @@
 msgstr "ಸರಿ(_O)"
 
 msgid "Error retrieving profile"
-msgstr ""
+msgstr "ಪ್ರೊಫೈಲನ್ನು ಹಿಂಪಡೆದುಕೊಳ್ಳುವಲ್ಲಿ ದೋಷ"
 
 msgid "General"
 msgstr "ಸಾಮಾನ್ಯ"
@@ -5234,7 +5331,7 @@
 msgstr "ನನ್ನ ಬಗ್ಗೆ ಒಂದಿಷ್ಟು"
 
 msgid "Social"
-msgstr ""
+msgstr "ಸಾಮಾಜಿಕ"
 
 msgid "Marital Status"
 msgstr "ಮದುವೆ ಸ್ಥಿತಿ"
@@ -5288,10 +5385,10 @@
 msgstr "ಮನೆ ಫ್ಯಾಕ್ಸ"
 
 msgid "Personal Email"
-msgstr "ಖಾಸಗಿ ವಿ-ಅಂಚೆ"
+msgstr "ಖಾಸಗಿ ಇ-ಮೈಲ್"
 
 msgid "Personal IM"
-msgstr ""
+msgstr "ವೈಯಕ್ತಿಕ IM"
 
 msgid "Anniversary"
 msgstr "ವಾರ್ಷಿಕೋತ್ಸವ"
@@ -5331,10 +5428,10 @@
 msgstr "ಕಛೇರಿ ಫ್ಯಾಕ್ಸ"
 
 msgid "Work Email"
-msgstr "ಕಛೇರಿ  ವಿ-ಅಂಚೆ ವಿಳಾಸ"
+msgstr "ಕಛೇರಿ  ಇ-ಮೈಲ್‌ ವಿಳಾಸ"
 
 msgid "Work IM"
-msgstr ""
+msgstr "ಕೆಲಸದ IM"
 
 msgid "Start Date"
 msgstr "ಆರಂಭ ದಿನಾಂಕ"
@@ -5343,28 +5440,32 @@
 msgstr "ಮೆಚ್ಚಿನ ವಿಷಯಗಳು"
 
 msgid "Last Updated"
-msgstr ""
+msgstr "ಕೊನೆಯ ಬಾರಿಗೆ ಅಪ್‌ಡೇಟ್ ಮಾಡಿದ್ದು"
 
 msgid "Homepage"
 msgstr "ನಿಮ್ಮ ಜಾಲಪುಟ:"
 
 msgid "The user has not created a public profile."
-msgstr ""
+msgstr "ಬಳಕೆದಾರರು ಒಂದು ಸಾರ್ವಜನಿಕ ಪ್ರೊಫೈಲನ್ನು ರಚಿಸಿಲ್ಲ."
 
 msgid ""
 "MSN reported not being able to find the user's profile. This either means "
 "that the user does not exist, or that the user exists but has not created a "
 "public profile."
 msgstr ""
+"ಬಳಕೆದಾರರ ಪ್ರೊಫೈಲನ್ನು ಪತ್ತೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ ಎಂದು MSN ವರದಿ ಮಾಡಿದೆ. ಇದರರ್ಥ ಒಂದೊ ಆ "
+"ಹೆಸರಿನ ಬಳಕೆದಾರರಿಲ್ಲ ಅಥವ ಬಳಕೆದಾರರು ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೂ ಸಹ ಅವರು ಒಂದು ಸಾರ್ವಜನಿಕ "
+"ಪ್ರೊಫೈಲನ್ನು ರಚಿಸಿಲ್ಲ."
 
 msgid ""
 "Could not find any information in the user's profile. The user most likely "
 "does not exist."
 msgstr ""
-
-#, fuzzy
+"ಬಳಕೆದಾರರ ಪ್ರೊಫೈಲಿನಲ್ಲಿ ಯಾವುದೆ ಮಾಹಿತಿಯು ಕಂಡು ಬಂದಿಲ್ಲ. ಬಹುಷಃ ಆ ಹೆಸರಿನ ಬಳಕೆದಾರರು "
+"ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸಾಧ್ಯತೆ ಕಡಿಮೆ."
+
 msgid "View web profile"
-msgstr "ಗೆಳೆಯನು ಆಫ್ಲೈನ್ ಆಗಿದ್ದಾನೆ"
+msgstr "ಜಾಲ ಪ್ರೊಫೈಲನ್ನು ನೋಡಿ"
 
 #. *< type
 #. *< ui_requirement
@@ -5375,58 +5476,51 @@
 #. *< name
 #. *< version
 #. *< summary
-#, fuzzy
 msgid "Windows Live Messenger Protocol Plugin"
-msgstr "Zephyr ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
+msgstr "ವಿಂಡೋಸ್‌ ಲೈವ್ ಮೆಸೆಂಜರ್ ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
 
 msgid "Use HTTP Method"
-msgstr ""
-
-#, fuzzy
+msgstr "HTTP ವಿಧಾನವನ್ನು ಬಳಸು"
+
 msgid "HTTP Method Server"
-msgstr "ಪ್ರಾಕ್ಸಿ ದೋಷ"
+msgstr "HTTP ವಿಧಾನದ ಪರಿಚಾರಕ"
 
 msgid "Show custom smileys"
-msgstr ""
+msgstr "ಇಚ್ಛೆಯ ಸ್ಮೈಲಿಗಳನ್ನು ತೋರಿಸು"
 
 msgid "nudge: nudge a user to get their attention"
-msgstr ""
-
-#, fuzzy
+msgstr "nudge(ಮೆತ್ತಗೆ ತಿವಿ): ಬಳಕೆದಾರರ ಗಮನ ಸೆಳೆಯಲು ಅವರನ್ನು ಮೆತ್ತಗೆ ತಿವಿ"
+
 msgid "Windows Live ID authentication:Unable to connect"
-msgstr "ಸಾಮಾನ್ಯ ಧೃಡೀಕರಣ ವಿಫಲ"
-
-#, fuzzy
+msgstr "ವಿಂಡೋಸ್‌ ಲೈವ್ ಐಡಿ ಧೃಡೀಕರಣ: ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
 msgid "Windows Live ID authentication:Invalid response"
-msgstr "ಸಾಮಾನ್ಯ ಧೃಡೀಕರಣ ವಿಫಲ"
-
-#, fuzzy, c-format
+msgstr "ವಿಂಡೋಸ್‌ ಲೈವ್ ಐಡಿ ಧೃಡೀಕರಣ: ಸರಿಯಲ್ಲದ ಪ್ರತಿಕ್ರಿಯೆ"
+
+#, c-format
 msgid "%s just sent you a Nudge!"
-msgstr "%s ನಿಮಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿದ್ದಾರೆ"
-
-#, fuzzy
+msgstr "%s ಈಗ ತಾನೆ ನಿಮಗೆ ಮೆತ್ತಗೆ ತಿವಿದಿದ್ದಾರೆ! "
+
 msgid "The following users are missing from your addressbook"
-msgstr "ನಿಮ್ಮ ಹುಡುಕುವಿಕೆಯ ಫಲಿತಾಂಶಗಳು ಇಲ್ಲಿವೆ"
-
-#, fuzzy, c-format
+msgstr "ನಿಮ್ಮ ವಿಳಾಸಪುಸ್ತಕದಲ್ಲಿ ಈ ಕೆಳಗಿನ ಬಳಕೆದಾರರ ಹೆಸರು ಕಾಣೆಯಾಗಿದೆ"
+
+#, c-format
 msgid "Unknown error (%d): %s"
-msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ"
+msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ (%d): %s"
 
 msgid "Unable to add user"
 msgstr "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲಾಗಲಿಲ್ಲ"
 
 #. Unknown error!
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown error (%d)"
-msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ"
-
-#, fuzzy
+msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ (%d)"
+
 msgid "Unable to remove user"
-msgstr "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲಾಗಲಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ಬಳಕೆದಾರನನ್ನು ತೆಗೆದು ಹಾಕಲಾಗಲಿಲ್ಲ"
+
 msgid "Mobile message was not sent because it was too long."
-msgstr "ಬಹಳ ತೀವ್ರಗತಿಯಲ್ಲಿ ನಾವು ಕಳಿಸುತ್ತಿರುವದರಿಂದಾಗಿ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ "
+msgstr "ಮೊಬೈಲ್ ಸಂದೇಶವು ಬಹಳದ ದೊಡ್ಡದಾದ ಕಾರಣ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ "
 
 #, c-format
 msgid ""
@@ -5444,24 +5538,34 @@
 "After the maintenance has been completed, you will be able to successfully "
 "sign in."
 msgstr[0] ""
+"MSN ಪರಿಚಾರಕವನ್ನು ದುರಸ್ತಿಯ ಸಲುವಾಗಿ ಇನ್ನು %d ನಿಮಿಷದಲ್ಲಿ ಸ್ಥಗಿತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಆಗ "
+"ನೀವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಮಿಸಲ್ಪಡುತ್ತೀರಿ.  ದಯವಿಟ್ಟು ಯಾವುದೆ ಮಾತುಕತೆಗಳು ಬಾಕಿ ಇದ್ದಲ್ಲಿ "
+"ಮುಗಿಸಿಕೊಳ್ಳಿ.\n"
+"\n"
+"ದುರಸ್ತಿಯ ಕಾರ್ಯವು ಪೂರ್ಣಗೊಂಡ ನಂತರ ನೀವು ಯಶಸ್ವಿಯಾಗಿ ಮರುಪ್ರವೇಶಿಸಬಹುದಾಗಿರುತ್ತದೆ."
 msgstr[1] ""
+"MSN ಪರಿಚಾರಕವನ್ನು ದುರಸ್ತಿಯ ಸಲುವಾಗಿ ಇನ್ನು %d ನಿಮಿಷಗಳಲ್ಲಿ ಸ್ಥಗಿತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಆಗ "
+"ನೀವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಮಿಸಲ್ಪಡುತ್ತೀರಿ.  ದಯವಿಟ್ಟು ಯಾವುದೆ ಮಾತುಕತೆಗಳು ಬಾಕಿ ಇದ್ದಲ್ಲಿ "
+"ಮುಗಿಸಿಕೊಳ್ಳಿ.\n"
+"\n"
+"ದುರಸ್ತಿಯ ಕಾರ್ಯವು ಪೂರ್ಣಗೊಂಡ ನಂತರ ನೀವು ಯಶಸ್ವಿಯಾಗಿ ಮರುಪ್ರವೇಶಿಸಬಹುದಾಗಿರುತ್ತದೆ."
 
 msgid ""
 "Message was not sent because the system is unavailable. This normally "
 "happens when the user is blocked or does not exist."
 msgstr ""
-
-#, fuzzy
+"ವ್ಯವಸ್ಥೆಯ ಅಲಭ್ಯವಾದ ಕಾರಣ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. ಇದು ಸಾಮಾನ್ಯವಾಗಿ "
+"ಬಳಕೆದಾರರನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದ್ದರೆ ಅಥವ ಅಸ್ತಿತ್ವದಲ್ಲಿರದೆ ಇದ್ದಲ್ಲಿ ಹೀಗೆ ಆಗುತ್ತದೆ."
+
 msgid "Message was not sent because messages are being sent too quickly."
-msgstr "ಬಹಳ ತೀವ್ರಗತಿಯಲ್ಲಿ ನಾವು ಕಳಿಸುತ್ತಿರುವದರಿಂದಾಗಿ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ "
-
-#, fuzzy
+msgstr ""
+"ಸಂದೇಶಗಳನ್ನು ಬಹಳ ತೀವ್ರಗತಿಯಲ್ಲಿ ನಾವು ಕಳಿಸುತ್ತಿರುವುದರಿಂದ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ."
+
 msgid "Message was not sent because an unknown encoding error occurred."
-msgstr "ಯಾವುದೋ ಗೊತ್ತಿಲ್ಲದ ದೋಷ ಸಂಭವಿಸಿದ್ದರಿಂದ ಸಂದೇಶವು ಕಳಿಸಲ್ಪಟ್ಟಿರಲಿಕ್ಕಿಲ್ಲ."
-
-#, fuzzy
+msgstr "ಗೊತ್ತಿಲ್ಲದ ಎನ್ಕೋಡಿಂಗ್ ದೋಷ ಸಂಭವಿಸಿದ್ದರಿಂದ ಸಂದೇಶವು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ."
+
 msgid "Message was not sent because an unknown error occurred."
-msgstr "ಯಾವುದೋ ಗೊತ್ತಿಲ್ಲದ ದೋಷ ಸಂಭವಿಸಿದ್ದರಿಂದ ಸಂದೇಶವು ಕಳಿಸಲ್ಪಟ್ಟಿರಲಿಕ್ಕಿಲ್ಲ."
+msgstr "ಯಾವುದೋ ಗೊತ್ತಿಲ್ಲದ ದೋಷ ಸಂಭವಿಸಿದ್ದರಿಂದ ಸಂದೇಶವು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ."
 
 msgid "Writing error"
 msgstr "ಬರೆಯುವಲ್ಲಿ ದೋಷ"
@@ -5474,31 +5578,34 @@
 "Connection error from %s server:\n"
 "%s"
 msgstr ""
-
-#, fuzzy
+"%s ಪರಿಚಾರಕದಿಂದ ಸಂಪರ್ಕ ದೋಷ:\n"
+"%s"
+
 msgid "Our protocol is not supported by the server"
-msgstr "ಈ ಪ್ರೋಟೋಕಾಲ್ ಮಾತುಕತೆ ಕೋಣೆಗಳನ್ನು ಅಳವಡಿಸಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ನಮ್ಮ ಪ್ರೋಟೋಕಾಲ್‌ಗೆ ಪರಿಚಾರಕದಿಂದ ಬೆಂಬಲವಿಲ್ಲ"
+
 msgid "Error parsing HTTP"
-msgstr "ಸಂಪರ್ಕ ರಚಿಸುವಲ್ಲಿ ದೋಷ"
+msgstr "HTTP ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡುವಲ್ಲಿ ದೋಷ"
 
 msgid "You have signed on from another location"
-msgstr ""
+msgstr "ನೀವು ಬೇರೆ ಸ್ಥಳದಿಂದ ಪ್ರವೇಶಿಸಿದ್ದೀರಿ"
 
 msgid "The MSN servers are temporarily unavailable. Please wait and try again."
 msgstr ""
+"MSN ಪರಿಚಾರಕಗಳು ತಾತ್ಕಾಲಿಕವಾಗಿ ಅಲಭ್ಯವಾಗಿವೆ. ದಯವಿಟ್ಟು ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ಪ್ರಯತ್ನಿಸಿ."
 
 msgid "The MSN servers are going down temporarily"
-msgstr ""
+msgstr "MSN ಪರಿಚಾರಕಗಳನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಸ್ಥಗಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ"
 
 #, c-format
 msgid "Unable to authenticate: %s"
-msgstr ""
+msgstr "ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
 
 msgid ""
 "Your MSN buddy list is temporarily unavailable. Please wait and try again."
 msgstr ""
+"ನಿಮ್ಮ MSN ಗೆಳೆಯರ ಪಟ್ಟಿಯು ತಾತ್ಕಾಲಿಕವಾಗಿ ಅಲಭ್ಯವಾಗಿವೆ. ದಯವಿಟ್ಟು ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ "
+"ಪ್ರಯತ್ನಿಸಿ."
 
 msgid "Handshaking"
 msgstr "ಕೈ ಕುಲುಕಲಾಗುತ್ತಿದೆ"
@@ -5516,15 +5623,19 @@
 msgstr "ಕುಕೀಗಳನ್ನು  ಕಳಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Retrieving buddy list"
-msgstr ""
+msgstr "ಗೆಳೆಯರಪಟ್ಟಿಯನ್ನು ಹಿಂಪಡೆಯಲಾಗುತ್ತಿದೆ"
 
 #, c-format
 msgid "%s requests to view your webcam, but this request is not yet supported."
 msgstr ""
+"%s ರವರು ನಿಮಗೆ ವೆಬ್‌ಕ್ಯಾಮನ್ನು ನೋಡುವಂತೆ ಮನವಿ ಮಾಡಿದ್ದಾರೆ, ಆದರೆ ಈ ಮನವಿಗೆ ಇನ್ನೂ ಸಹ "
+"ಬೆಂಬಲವಿಲ್ಲ."
 
 #, c-format
 msgid "%s invited you to view his/her webcam, but this is not yet supported."
 msgstr ""
+"%s ರವರು ತಮ್ಮ ವೆಬ್‌ಕ್ಯಾಮನ್ನು ನೋಡುವಂತೆ ಮನವಿ ಮಾಡಿದ್ದಾರೆ, ಆದರೆ ಈ ಮನವಿಗೆ ಇನ್ನೂ ಸಹ "
+"ಬೆಂಬಲವಿಲ್ಲ."
 
 msgid "Away From Computer"
 msgstr ""
@@ -5540,7 +5651,7 @@
 msgstr "ಸಮಯಮಿತಿ ಮೀರಿದ್ದರಿಂದ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ "
 
 msgid "Message could not be sent, not allowed while invisible:"
-msgstr ""
+msgstr "ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ, ಏಕೆಂದರೆ ಅದೃಶ್ಯವಾಗಿದ್ದಾಗ ಇದಕ್ಕೆ ಅನುಮತಿ ಇಲ್ಲ:"
 
 msgid "Message could not be sent because the user is offline:"
 msgstr "ಬಳಕೆದಾರನು ಆಫ್‍ಲೈನ್ ಇದ್ದ ಕಾರಣ ಸಂದೇಶವನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ "
@@ -5555,28 +5666,31 @@
 "Message could not be sent because we were unable to establish a session with "
 "the server. This is likely a server problem, try again in a few minutes:"
 msgstr ""
+"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ ಏಕೆಂದರೆ ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕವನ್ನು ಸಾಧಿಸಲು "
+"ಸಾಧ್ಯವಾಗಿಲ್ಲ. ಇದು ಬಹುಷಃ ಒಂದು ಪರಿಚಾರಕದ ತೊಂದರೆಯಾಗಿರಬಹುದು, ಕೆಲವು ನಿಮಿಷದ ನಂತರ "
+"ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ:"
 
 msgid ""
 "Message could not be sent because an error with the switchboard occurred:"
 msgstr ""
+"ಸ್ವಿಚ್‌ಬೋರ್ಡಿನಲ್ಲಿ ಒಂದು ದೋಷವು ಸಂಭವಿಸಿದ್ದರ ಕಾರಣದಿಂದಾಗಿ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು "
+"ಸಾಧ್ಯವಾಗಿಲ್ಲ:"
 
 msgid "Message may have not been sent because an unknown error occurred:"
 msgstr "ಯಾವುದೋ ಗೊತ್ತಿಲ್ಲದ ದೋಷ ಸಂಭವಿಸಿದ್ದರಿಂದ ಸಂದೇಶವು ಕಳಿಸಲ್ಪಟ್ಟಿರಲಿಕ್ಕಿಲ್ಲ."
 
-#, fuzzy
 msgid "Delete Buddy from Address Book?"
-msgstr "ವಿಳಾಸಪುಸ್ತಕಕ್ಕೆ ಸೇರಿಸಿ"
+msgstr "ವಿಳಾಸಪುಸ್ತಕದಿಂದ ಗೆಳೆಯನ ಸಂಪರ್ಕವಿಳಾಸವನ್ನು ಅಳಿಸಬೇಕೆ?"
 
 msgid "Do you want to delete this buddy from your address book as well?"
-msgstr ""
-
-#, fuzzy
+msgstr "ವಿಳಾಸಪುಸ್ತಕದಿಂದ ಈ ಗೆಳೆಯನ ಸಂಪರ್ಕವಿಳಾಸವನ್ನೂ ಸಹ ಅಳಿಸ ಹಾಕಲು ಬಯಸುತ್ತೀರೆ?"
+
 msgid "The username specified is invalid."
-msgstr "ಜಾಲವೀಕ್ಷಣಾ ಆದೇಶ  \"%s\" ತಪ್ಪಾಗಿದೆ"
+msgstr "ಸೂಚಿಸಲಾದ ಬಳಕೆದಾರ ಹೆಸರು ತಪ್ಪಾಗಿದೆ."
 
 #, c-format
 msgid "Friendly name changes too rapidly"
-msgstr ""
+msgstr "ಪರಿಚಯದ ಹೆಸರು ವೇಗವಾಗಿ ಬದಲಾಗುತ್ತದೆ"
 
 msgid "This Hotmail account may not be active."
 msgstr "ಈ ಹಾಟ್‍ಮೇಲ್ ಖಾತೆಯು ಸಕ್ರಿಯವಾಗಿರಲಿಕ್ಕಿಲ್ಲ"
@@ -5599,10 +5713,10 @@
 
 #, c-format
 msgid "%s is not a valid group."
-msgstr ""
+msgstr "%s ಯು ಒಂದು ಮಾನ್ಯವಾದ ಗುಂಪು ಅಲ್ಲ."
 
 msgid "Unknown error."
-msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ"
+msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ."
 
 #, c-format
 msgid "%s on %s (%s)"
@@ -5618,7 +5732,7 @@
 
 #, c-format
 msgid "Unable to permit user on %s (%s)"
-msgstr ""
+msgstr "ಬಳಕೆದಾರರಿಗೆ %s ನಲ್ಲಿ ಅನುಮತಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)"
 
 #, c-format
 msgid "%s could not be added because your buddy list is full."
@@ -5626,7 +5740,7 @@
 
 #, c-format
 msgid "%s is not a valid passport account."
-msgstr ""
+msgstr "%s ಯು ಒಂದು ಸರಿಯಾದ ಪಾಸ್‌ಪೋರ್ಟ್ ಖಾತೆಯಾಗಿಲ್ಲ."
 
 msgid "Service Temporarily Unavailable."
 msgstr "ಸೇವೆ ಸದ್ಯಕ್ಕೆ ಅಲಭ್ಯ"
@@ -5654,9 +5768,8 @@
 msgstr "ಉತ್ತೇಜಿತ"
 
 #. 3
-#, fuzzy
 msgid "Grumpy"
-msgstr "ಗುಂಪು"
+msgstr "ಸಿಡುಕು"
 
 #. 4
 msgid "Happy"
@@ -5680,21 +5793,19 @@
 
 #. 9
 msgid "Sick"
-msgstr ""
+msgstr "ರೋಗಗ್ರಸ್ತ"
 
 #. 10
 msgid "Sleepy"
 msgstr "ನಿದ್ದೆ!"
 
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "ನಿಮ್ಮ ಸದ್ಯದ ಭಾವಲಹರಿ"
+msgstr "ಸದ್ಯದ ಭಾವಲಹರಿ"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "ಬಳಕೆದಾರ ಕೋಣೆಗಳು"
+msgstr "ಹೊಸ ಲಹರಿ"
 
 msgid "Change your Mood"
 msgstr "ನಿಮ್ಮ ಮೂಡನ್ನು ಬದಲಿಸಿ"
@@ -5723,9 +5834,8 @@
 "ನಮೂದಿಸಲಾದ ಹುಟ್ಟಿದ ದಿನಾಂಕವು ತಪ್ಪಾಗಿದೆ. ಸರಿಯಾದ ರೂಪವು ಹೀಗಿರಬೇಕು: 'YYYY-MM-DD'."
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "ಬರೆಯುವಲ್ಲಿ ದೋಷ"
+msgstr "ಪ್ರೊಫೈಲ್ ಅಪ್‌ಡೇಟ್ ಮಾಡುವಲ್ಲಿ ದೋಷ"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5734,6 +5844,7 @@
 
 msgid "Your profile information is not yet retrieved. Please try again later."
 msgstr ""
+"ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಮಾಹಿತಿಯನ್ನು ಇನ್ನೂ ಸಹ ಪಡೆಯಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ಪ್ರಯತ್ನಿಸಿ."
 
 #. pin
 msgid "PIN"
@@ -5754,35 +5865,32 @@
 msgid "Mobile Number"
 msgstr "ಮೊಬೈಲ್ ಸಂಖ್ಯೆ"
 
-#, fuzzy
 msgid "Update your Profile"
-msgstr "MSN ವ್ಯಕ್ತಿಪರಿಚಯ"
+msgstr "ನಿಮ್ಮ ಪ್ರೊಫೈಲನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ"
 
 msgid "Here you can update your MXit profile"
-msgstr ""
+msgstr "ಇಲ್ಲಿ ನೀವು ನಿಮ್ಮ MXit ಪ್ರೊಫೈಲನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಬಹುದು"
 
 msgid "View Splash"
-msgstr ""
+msgstr "ಎರಚು ತೆರೆಯನ್ನು ನೋಡಿ"
 
 msgid "There is no splash-screen currently available"
-msgstr ""
+msgstr "ಪ್ರಸಕ್ತ ಯಾವುದೆ ಎರಚು ತೆರೆಯು ಲಭ್ಯವಿಲ್ಲ"
 
 msgid "About"
 msgstr "ಇದರ ಕುರಿತು"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "ಪ್ರವೇಶಪದ ಬದಲಾಯಿಸಿ..."
+msgstr "ಲಹರಿಯನ್ನು ಬದಲಾಯಿಸಿ..."
 
 #. display / change profile
 msgid "Change Profile..."
 msgstr "ವ್ಯಕ್ತಿಪರಿಚಯವನ್ನು ಬದಲಿಸಿ..."
 
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "ದಿನಚರಿ ವೀಕ್ಷಿಸಿ"
+msgstr "ಎರಚು ತೆರೆಯನ್ನು ನೋಡಿ..."
 
 #. display plugin version
 msgid "About..."
@@ -5891,234 +5999,204 @@
 msgid "Retrieving User Information..."
 msgstr "ಬಳಕೆದಾರ ಮಾಹಿತಿಯನ್ನು ಮರಳಿ ಪಡೆಯಲಾಗುತ್ತಿದೆ..."
 
-#, fuzzy
 msgid "Loading menu..."
-msgstr "ದಾಖಲಾತಿ"
-
-#, fuzzy
+msgstr "ಮೆನುವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."
+
 msgid "Status Message"
-msgstr "ಗಣಕವ್ಯವಸ್ಥೆಯ ಸಂದೇಶ"
-
-#, fuzzy
+msgstr "ಸ್ಥಿತಿಯ ಸಂದೇಶ"
+
 msgid "Hidden Number"
-msgstr "ನಡುವಿನ  ಹೆಸರು"
-
-#, fuzzy
+msgstr "ಅಡಗಿಸಲಾದ ಸಂಖ್ಯೆ"
+
 msgid "Your Mobile Number..."
-msgstr "ಸಂಚಾರಿ ದೂರವಾಣಿ"
+msgstr "ನಿಮ್ಮ ಮೊಬೈಲ್ ದೂರವಾಣಿ ಸಂಖ್ಯೆ..."
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
 msgid "WAP Server"
 msgstr "WAP ಪರಿಚಾರಕ(ಸರ್ವರ್‍)"
 
-#, fuzzy
 msgid "Connect via HTTP"
-msgstr "ಸಂಪರ್ಕಿಸುತ್ತಿದೆ"
+msgstr "HTTP ಮೂಲಕ ಸಂಪರ್ಕಿಸುತ್ತಿದೆ"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "ಎರಚು-ತೆರೆ ಪುಟಿಕೆಯನ್ನು ಶಕ್ತಗೊಳಿಸು"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr ""
+msgstr "MXit ನೊಂದಿಗಿನ ಸಂಪರ್ಕವು ಕಡಿದು ಹೋಗಿದೆ. ದಯವಿಟ್ಟು ಮರಳಿ ಸಂಪರ್ಕಿಸು."
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "%s ಇವರಿಂದ ಸಂದೇಶ"
-
-#, fuzzy
+msgstr "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವಲ್ಲಿ ದೋಷ"
+
 msgid "Unable to process your request at this time"
-msgstr "ಸರ್ವರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಆಗಲಿಲ್ಲ"
+msgstr "ಈಗ ನಿಮ್ಮ ಮನವಿಯನ್ನು ಸಂಸ್ಕರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 msgid "Timeout while waiting for a response from the MXit server."
-msgstr ""
-
-#, fuzzy
+msgstr "MXit ಪರಿಚಾರಕದಿಂದ ಪ್ರತ್ಯುತ್ತರಕ್ಕಾಗಿ ಕಾಯುವಾಗ ಕಾಲಾವಧಿ ತೀರಿದೆ."
+
 msgid "Successfully Logged In..."
-msgstr "ನೀವು ಒಬ್ಬ ಸ್ನೇಹಿತರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದು ಹಾಕಿದ್ದೀರಿ."
+msgstr "ಯಶಸ್ವಿಯಾಗಿ ಪ್ರವೇಶಿಸಲಾಗಿದೆ..."
 
 #, c-format
 msgid ""
 "%s sent you an encrypted message, but it is not supported on this client."
 msgstr ""
-
-#, fuzzy
+"%s ರವರು ಒಂದು ಗೂಢಲಿಪೀಕರಿಸಲಾದ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಿದ್ದಾರೆ, ಆದರೆ ಇದಕ್ಕೆ ಕ್ಲೈಂಟ್‌ನಲ್ಲಿ "
+"ಬೆಂಬಲವಿಲ್ಲ."
+
 msgid "Message Error"
-msgstr "%s ಇವರಿಂದ ಸಂದೇಶ"
+msgstr "ಸಂದೇಶ ದೋಷ"
 
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "ನಿಸ್ಚಿತ ಪ್ರೊಟೊಕಾಲ್‌ ಬಳಸಿಕೊಂಡು ಮರುನಿರ್ದೇಶಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
 msgid "An internal MXit server error occurred."
-msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ, %d,  ಸಂಭವಿಸಿದೆ.  ಮಾಹಿತಿ : %s"
-
-#, fuzzy, c-format
+msgstr "ಒಂದು ಆಂತರಿಕ MXit ಪರಿಚಾರಕ ದೋಷ ಸಂಭವಿಸಿದೆ."
+
+#, c-format
 msgid "Login error: %s (%i)"
-msgstr "MSN ದೋಷ: %s\n"
-
-#, fuzzy, c-format
+msgstr "ಪ್ರವೇಶಿಸುವಲ್ಲಿ ದೋಷ: %s (%i)"
+
+#, c-format
 msgid "Logout error: %s (%i)"
-msgstr "MSN ದೋಷ: %s\n"
-
-#, fuzzy
+msgstr "ನಿರ್ಗಮಿಸುವಲ್ಲಿ ದೋಷ: %s (%i)"
+
 msgid "Contact Error"
-msgstr "ಸಂಪರ್ಕದಲ್ಲಿ ದೋಷ"
-
-#, fuzzy
+msgstr "ಸಂಪರ್ಕ ದೋಷ"
+
 msgid "Message Sending Error"
-msgstr "%s ಇವರಿಂದ ಸಂದೇಶ"
-
-#, fuzzy
+msgstr "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವಲ್ಲಿ ದೋಷ"
+
 msgid "Status Error"
-msgstr "%s ನ ಸ್ಥಿತಿ"
-
-#, fuzzy
+msgstr "ಸ್ಥಿತಿಯ ದೋಷ"
+
 msgid "Mood Error"
-msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ"
-
-#, fuzzy
+msgstr "ಲಹರಿಯಲ್ಲಿ ದೋಷ"
+
 msgid "Invitation Error"
-msgstr "ನೋಂದಣಿ ದೋಷ"
-
-#, fuzzy
+msgstr "ಆಮಂತ್ರಣದಲ್ಲಿ ದೋಷ"
+
 msgid "Contact Removal Error"
-msgstr "ಸಂಪರ್ಕದಲ್ಲಿ ದೋಷ"
-
-#, fuzzy
+msgstr "ಸಂಪರ್ಕವನ್ನು ತೆಗೆದು ಹಾಕುವಲ್ಲಿ ದೋಷ"
+
 msgid "Subscription Error"
-msgstr "ಚಂದಾದಾರಿಕೆ"
-
-#, fuzzy
+msgstr "ಚಂದಾದಾರಿಕೆ ದೋಷ"
+
 msgid "Contact Update Error"
-msgstr "ಸಂಪರ್ಕದಲ್ಲಿ ದೋಷ"
-
-#, fuzzy
+msgstr "ಸಂಪರ್ಕವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡುವಲ್ಲಿ ದೋಷ"
+
 msgid "File Transfer Error"
-msgstr "ಕಡತ ವರ್ಗಾವಣೆ "
-
-#, fuzzy
+msgstr "ಕಡತ ವರ್ಗಾವಣೆ ದೋಷ"
+
 msgid "Cannot create MultiMx room"
-msgstr "ಅಡ್ದ ಹೆಸರು ಬದಲಿಸಲಾಗದು "
-
-#, fuzzy
+msgstr "MultiMx ಕೋಣೆಯನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
 msgid "MultiMx Invitation Error"
-msgstr "ನೋಂದಣಿ ದೋಷ"
-
-#, fuzzy
+msgstr "MultiMx ಆಮಂತ್ರಣ ದೋಷ"
+
 msgid "Profile Error"
-msgstr "ಬರೆಯುವಲ್ಲಿ ದೋಷ"
+msgstr "ಪ್ರೊಫೈಲ್ ದೋಷ"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
+msgstr "MXit ಇಂದ ಪಡೆಯಲಾದ ಪ್ಯಾಕೆಟ್ ಸರಿಯಾಗಿಲ್ಲ."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "MXit ಗೆ ಒಂದು ಸಂಪರ್ಕ ದೋಷ ಉಂಟಾಗಿದೆ. (ಓದಿದ ಹಂತ 0x01)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
+msgstr "MXit ಗೆ ಒಂದು ಸಂಪರ್ಕ ದೋಷ ಉಂಟಾಗಿದೆ. (ಓದಿದ ಹಂತ 0x02)"
 
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
+msgstr "MXit ಗೆ ಒಂದು ಸಂಪರ್ಕ ದೋಷ ಉಂಟಾಗಿದೆ. (ಓದಿದ ಹಂತ 0x03)"
 
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
+msgstr "MXit ಗೆ ಒಂದು ಸಂಪರ್ಕ ದೋಷ ಉಂಟಾಗಿದೆ. (ಓದಿದ ಹಂತ 0x04)"
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
+msgstr "MXit ಗೆ ಒಂದು ಸಂಪರ್ಕ ದೋಷ ಉಂಟಾಗಿದೆ. (ಓದಿದ ಹಂತ 0x05)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit ಗೆ ಒಂದು ಸಂಪರ್ಕ ದೋಷ ಉಂಟಾಗಿದೆ. (ಓದಿದ ಹಂತ 0x06)"
+
 msgid "Pending"
-msgstr "ಕಳಿಸಿ"
-
-#, fuzzy
+msgstr "ಬಾಕಿ ಇರುವ"
+
 msgid "Invited"
-msgstr "ಆಮಂತ್ರಿಸಿ"
+msgstr "ಆಮಂತ್ರಿತ"
 
 #  ತಿರಸ�ಕರಿಸ�  ಸರಿಯಾದ ಶಬ�ದ .    ನಿರಾಕರಿಸ�   ಅಂದರೆ   ಡಿನೈ ! .
-#, fuzzy
 msgid "Rejected"
-msgstr "ತಿರಸ್ಕರಿಸು"
-
-#, fuzzy
+msgstr "ತಿರಸ್ಕರಿಸಲಾಗಿದೆ"
+
 msgid "Deleted"
-msgstr "ಅಳಿಸಿಹಾಕಿ"
+msgstr "ಅಳಿಸಿಹಾಕಲಾಗಿದೆ"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit ಪ್ರಚಾರ"
+
 msgid "More Information"
-msgstr "ಕೆಲಸದ ಮಾಹಿತಿ"
+msgstr "ಹೆಚ್ಚಿನ ಮಾಹಿತಿ"
 
 #, c-format
 msgid "No such user: %s"
-msgstr ""
-
-#, fuzzy
+msgstr "ಅಂತಹ ಯಾವುದೆ ಬಳಕೆದಾರ ಇಲ್ಲ: %s"
+
 msgid "User lookup"
-msgstr "ಬಳಕೆದಾರ ಕೋಣೆಗಳು"
-
-#, fuzzy
+msgstr "ಬಳಕೆದಾರರ ಹುಡುಕಾಟ"
+
 msgid "Reading challenge"
-msgstr "ಓದುವಲ್ಲಿ ದೋಷ "
+msgstr "ಓದುವ ಸವಾಲು"
 
 msgid "Unexpected challenge length from server"
-msgstr ""
-
-#, fuzzy
+msgstr "ಪರಿಚಾರಕದಿಂದ ಅನಿರೀಕ್ಷಿತವಾದ ಸವಾಲಿನ ಗಾತ್ರ"
+
 msgid "Logging in"
-msgstr "ದಾಖಲಾತಿ"
-
-#, fuzzy
+msgstr "ಒಳಗೆ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ"
+
 msgid "MySpaceIM - No Username Set"
-msgstr "ಹೆಸರು ಇಲ್ಲ."
+msgstr "MySpaceIM - ಯಾವುದೆ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಸೂಚಿಸಿಲ್ಲ"
 
 msgid "You appear to have no MySpace username."
-msgstr ""
+msgstr "ನೀವು ಯಾವುದೆ MySpace ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಹೊಂದಿರುವಂತೆ ಕಾಣುತ್ತಿಲ್ಲ."
 
 msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)"
 msgstr ""
-
-#, fuzzy
+"ನೀವು ಹೊಸದೊಂದನ್ನು ಸೇರಿಸಲು ಬಯಸುತ್ತೀರೆ? (ಸೂಚನೆ: ಇದನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ!)"
+
 msgid "Lost connection with server"
-msgstr "ಸರ್ವರ್‍ಗೆ ಸಂಪರ್ಕ ಹೊಂದಿಲ್ಲ"
+msgstr "ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕ ಕಡಿದು ಹೋಗಿದೆ"
 
 #. Can't write _()'d strings in array initializers. Workaround.
 #. khc: then use N_() in the array initializer and use _() when they are
 #. used
-#, fuzzy
 msgid "New mail messages"
-msgstr "ಒಂದು ಸಂದೇಶ ಕಳಿಸಿ(_m)"
+msgstr "ಒಂದು ಅಂಚೆ ಸಂದೇಶಗಳು"
 
 msgid "New blog comments"
-msgstr ""
+msgstr "ಬ್ಲಾಗ್‌ನ ಹೊಸ ಅಭಿಪ್ರಾಯಗಳು"
 
 msgid "New profile comments"
-msgstr ""
+msgstr "ಹೊಸ ಪ್ರೊಫೈಲ್ ಟಿಪ್ಪಣಿಗಳು"
 
 msgid "New friend requests!"
-msgstr ""
+msgstr "ಹೊಸ ಸ್ನೇಹಿತರ ಮನವಿಗಳು!"
 
 msgid "New picture comments"
-msgstr ""
+msgstr "ಹೊಸ ಚಿತ್ರದ ಟಿಪ್ಪಣಿಗಳು"
 
 msgid "MySpace"
-msgstr ""
+msgstr "MySpace"
 
 msgid "IM Friends"
-msgstr ""
+msgstr "IM ಸ್ನೇಹಿತರು"
 
 #, c-format
 msgid ""
@@ -6128,14 +6206,18 @@
 "%d buddies were added or updated from the server (including buddies already "
 "on the server-side list)"
 msgstr[0] ""
+"%d ಗೆಳೆಯನನ್ನು ಪರಿಚಾರಕದಿಂದ ಸೇರಿಸಲಾಗಿದೆ ಅಥವ ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ (ಪರಿಚಾರಕದಲ್ಲಿನ "
+"ಪಟ್ಟಿಯಲ್ಲಿ ಈಗಾಗಲೆ ಇರುವ ಗೆಳೆಯರನ್ನೂ ಸಹ ಸೇರಿಸಿ)"
 msgstr[1] ""
+"%d ಗೆಳೆಯರನ್ನು ಪರಿಚಾರಕದಿಂದ ಸೇರಿಸಲಾಗಿದೆ ಅಥವ ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ (ಪರಿಚಾರಕದಲ್ಲಿನ "
+"ಪಟ್ಟಿಯಲ್ಲಿ ಈಗಾಗಲೆ ಇರುವ ಗೆಳೆಯರನ್ನೂ ಸಹ ಸೇರಿಸಿ)"
 
 msgid "Add contacts from server"
-msgstr ""
+msgstr "ಪರಿಚಾರದಿಂದ ಸಂಪರ್ಕವಿಳಾಸವನ್ನು ಸೇರಿಸಿ"
 
 #, c-format
 msgid "Protocol error, code %d: %s"
-msgstr ""
+msgstr "ಪ್ರೊಟೊಕಾಲ್ ದೋಷ, ಸಂಕೇತ %d: %s"
 
 #, c-format
 msgid ""
@@ -6143,142 +6225,136 @@
 "of %d.  Please shorten your password at http://profileedit.myspace.com/index."
 "cfm?fuseaction=accountSettings.changePassword and try again."
 msgstr ""
+"%s ನಿಮ್ಮ ಗುಪ್ತಪದ %zu ಎನ್ನುವುದು ಅಕ್ಷರಗಳಿಗಿಂತಾ ದೊಡ್ಡದಾಗಿದೆ, ಇದು ಗರಿಷ್ಟ ಉದ್ದವಾದಂತಹ %d "
+"ಅನ್ನು ಮೀರಿದೆ.  ದಯವಿಟ್ಟು  http://profileedit.myspace.com/index.cfm?"
+"fuseaction=accountSettings.changePassword ಗೆ ತೆರಳಿ ನಿಮ್ಮ ಗುಪ್ತಪದವನ್ನು "
+"ಚಿಕ್ಕದಾಗಿಸಿ ನಂತರ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ."
 
 msgid "Incorrect username or password"
 msgstr "ತಪ್ಪು ಬಳಕೆದಾರ ಹೆಸರು ಅಥವ ಗುಪ್ತಪದ"
 
 msgid "MySpaceIM Error"
-msgstr ""
-
-#, fuzzy
+msgstr "MySpaceIM ದೋಷ"
+
 msgid "Invalid input condition"
-msgstr "ತಪ್ಪು ಶೀರ್ಷಿಕೆ"
-
-#, fuzzy
+msgstr "ತಪ್ಪು  ಇನ್‌ಪುಟ್ ಸ್ಥಿತಿ"
+
 msgid "Failed to add buddy"
-msgstr "ಮಾತುಕತೆಯಲ್ಲಿ ಗೆಳೆಯನನ್ನು ಸೇರಿಕೊಳ್ಳಲಾಗಲಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ಗೆಳೆಯನನ್ನು ಸೇರಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
+
 msgid "'addbuddy' command failed."
-msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಈ ಕಡತದಿಂದ  ತೆಗೆದುಕೊಳ್ಳಿ ..."
+msgstr "'addbuddy' ಆದೇಶವು ವಿಫಲಗೊಂಡಿದೆ."
 
 msgid "persist command failed"
-msgstr ""
-
-#, fuzzy
+msgstr "persist ಆದೇಶವು ವಿಫಲಗೊಂಡಿದೆ."
+
 msgid "Failed to remove buddy"
-msgstr "ಮಾತುಕತೆಯಲ್ಲಿ ಗೆಳೆಯನನ್ನು ಸೇರಿಕೊಳ್ಳಲಾಗಲಿಲ್ಲ"
+msgstr "ಗೆಳೆಯನನ್ನು ತೆಗೆದು ಹಾಕುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
 
 msgid "'delbuddy' command failed"
-msgstr ""
+msgstr "'delbuddy' ಆದೇಶವು ವಿಫಲಗೊಂಡಿದೆ"
 
 msgid "blocklist command failed"
-msgstr ""
+msgstr "blocklist ಆದೇಶವು ವಿಫಲಗೊಂಡಿದೆ"
 
 msgid "Missing Cipher"
-msgstr ""
+msgstr "ಸಿಫರ್ ಕಾಣಿಸುತ್ತಿಲ್ಲ"
 
 msgid "The RC4 cipher could not be found"
-msgstr ""
+msgstr "RC4 ಸಿಫರ್ ಕಂಡು ಬಂದಿಲ್ಲ"
 
 msgid ""
 "Upgrade to a libpurple with RC4 support (>= 2.0.1). MySpaceIM plugin will "
 "not be loaded."
 msgstr ""
+"RC4 ಬೆಂಬಲದೊಂದಿಗೆ (>= 2.0.1) libpurple ಗೆ ನವೀಕರಿಸಿ. MySpaceIM ಪ್ಲಗ್‌ಇನ್‌ ಲೋಡ್ "
+"ಆಗುವುದಿಲ್ಲ."
 
 msgid "Add friends from MySpace.com"
-msgstr ""
+msgstr "MySpace.com ಇಂದ ಸ್ನೇಹಿತರನ್ನು ಸೇರಿಸಿ"
 
 msgid "Importing friends failed"
-msgstr ""
+msgstr "ಸ್ನೇಹಿತರನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ"
 
 #. TODO: find out how
-#, fuzzy
 msgid "Find people..."
-msgstr "ಸ್ನೇಹಿತರನ್ನು ಹುಡುಕಿ..."
-
-#, fuzzy
+msgstr "ಜನರನ್ನು ಹುಡುಕಿ..."
+
 msgid "Change IM name..."
-msgstr "ಪ್ರವೇಶಪದ ಬದಲಾಯಿಸಿ..."
+msgstr "IM ಹೆಸರನ್ನು ಬದಲಾಯಿಸಿ..."
 
 msgid "myim URL handler"
-msgstr ""
+msgstr "myim URL ಹ್ಯಾಂಡ್ಲರ್"
 
 msgid "No suitable MySpaceIM account could be found to open this myim URL."
-msgstr ""
+msgstr "ಈ myim URL ಅನ್ನು ತೆರೆಯಲು ಯಾವುದೆ ಸೂಕ್ತವಾದ MySpaceIM ಖಾತೆಯುವ ಕಂಡುಬಂದಿಲ್ಲ."
 
 msgid "Enable the proper MySpaceIM account and try again."
-msgstr ""
+msgstr "ಸರಿಯಾದ MySpaceIM ಖಾತೆಯನ್ನು ಶಕ್ತಗೊಳಿಸಿ ನಂತರ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ."
 
 msgid "Show display name in status text"
-msgstr ""
+msgstr "ಸ್ಥಿತಿ ಪಠ್ಯದಲ್ಲಿ ಬಳಕೆಯ ಹೆಸರನ್ನು ತೋರಿಸು"
 
 msgid "Show headline in status text"
-msgstr ""
-
-#, fuzzy
+msgstr "ಸ್ಥಿತಿ ಪಠ್ಯದಲ್ಲಿ ಶೀರ್ಷಿಕೆಯನ್ನು ತೋರಿಸು"
+
 msgid "Send emoticons"
-msgstr "ಸದ್ದಿನ ಆಯ್ಕೆಗಳು"
+msgstr "ಎಮೋಟಿಕಾನ್‌ಗಳನ್ನು ಕಳುಹಿಸು"
 
 msgid "Screen resolution (dots per inch)"
-msgstr ""
-
-#, fuzzy
+msgstr "ತೆರೆಯ ರೆಸಲ್ಯೂಶನ್ (ಪ್ರತಿ ಇಂಚಿನಲ್ಲಿರುವ ಚುಕ್ಕಿಗಳ ಸಂಖ್ಯೆ)"
+
 msgid "Base font size (points)"
-msgstr "ದೊಡ್ಡ ಅಕ್ಷರಗಾತ್ರ"
-
-#, fuzzy
+msgstr "ಮೂಲ ಅಕ್ಷರಶೈಲಿಯ ಗಾತ್ರ (ಪಾಯಿಂಟ್‌ಗಳು)"
+
 msgid "User"
-msgstr "ಬಳಕೆದಾರರು"
+msgstr "ಬಳಕೆದಾರ"
 
 msgid "Headline"
-msgstr ""
-
-#, fuzzy
+msgstr "ಶೀರ್ಷಿಕೆ"
+
 msgid "Song"
-msgstr "ಶಬ್ಧ"
+msgstr "ಹಾಡು"
 
 msgid "Total Friends"
-msgstr ""
-
-#, fuzzy
+msgstr "ಒಟ್ಟು ಸ್ನೇಹಿತರು"
+
 msgid "Client Version"
-msgstr "ಮಾತುಕತೆಯನ್ನು ಮುಗಿಸಿರಿ"
+msgstr "ಕ್ಲೈಂಟ್ ಆವೃತ್ತಿ"
 
 msgid ""
 "An error occurred while trying to set the username.  Please try again, or "
 "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
 "to set your username."
 msgstr ""
-
-#, fuzzy
+"ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಸೂಚಿಸಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಒಂದು ದೋಷವು ಎದುರಾಗಿದೆ.  ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ "
+"ಪ್ರಯತ್ನಿಸಿ, ಅಥವ  http://editprofile.myspace.com/index.cfm?fuseaction=profile."
+"username ಗೆ ಭೇಟಿ ನೀಡಿ ನಂತರ ನಿಮ್ಮ ಹೆಸರನ್ನು ಹೊಂದಿಸಿ."
+
 msgid "MySpaceIM - Username Available"
-msgstr "ಸೇವೆ ಅಲಭ್ಯ"
+msgstr "MySpaceIM - ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಲಭ್ಯವಿಲ್ಲ"
 
 msgid "This username is available. Would you like to set it?"
-msgstr ""
+msgstr "ಬಳಕೆದಾರ ಹೆಸರು ಲಭ್ಯವಿಲ್ಲ. ನೀವು ಅದನ್ನು ಹೊಂದಿಸಲು ಬಯಸುತ್ತೀರೆ?"
 
 msgid "ONCE SET, THIS CANNOT BE CHANGED!"
-msgstr ""
+msgstr "ಒಮ್ಮೆ ಸೂಚಿಸಿದಲ್ಲಿ, ಇದನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ!"
 
 msgid "MySpaceIM - Please Set a Username"
-msgstr ""
-
-#, fuzzy
+msgstr "MySpaceIM - ದಯವಿಟ್ಟು ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಸೂಚಿಸಿ"
+
 msgid "This username is unavailable."
-msgstr "ಸೇವೆಯು ತಾತ್ಪೂರ್ತಿಕವಾಗಿ ಲಭ್ಯವಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ಬಳಕೆದಾರ ಹೆಸರು ಲಭ್ಯವಿಲ್ಲ."
+
 msgid "Please try another username:"
-msgstr "%sಗಾಗಿ ಹೊಸ ಹೆಸರನ್ನು ದಾಖಲಿಸಿ"
+msgstr "ದಯವಿಟ್ಟು ಬೇರೊಂದು ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಸೂಚಿಸಿ:"
 
 #. Protocol won't log in now without a username set.. Disconnect
-#, fuzzy
 msgid "No username set"
-msgstr "ಹೆಸರು ಇಲ್ಲ."
+msgstr "ಯಾವುದೆ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ"
 
 msgid "Please enter a username to check its availability:"
-msgstr ""
+msgstr "ಲಭ್ಯವಿದೆಯೆ ಇಲ್ಲವೆ ಎಂದು ಪರಿಶೀಲಿಸಲು ದಯವಿಟ್ಟು ಒಂದು ಬಳಕೆದಾರ ಹೆಸರನ್ನು ನಮೂದಿಸಿ:"
 
 #. TODO: icons for each zap
 #. Lots of comments for translators:
@@ -6287,120 +6363,117 @@
 #. * connotation, for example, "he was zapped by electricity when
 #. * he put a fork in the toaster."
 msgid "Zap"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಆಕ್ರಮಿಸು"
+
+#, c-format
 msgid "%s has zapped you!"
-msgstr "%s ರವರು  ನಿಮ್ಮನ್ನು [%s] ಸೇರಿಸಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮ್ಮನ್ನು ಆಕ್ರಮಿಸಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Zapping %s..."
-msgstr ""
+msgstr "%s ರವರನ್ನು ಆಕ್ರಮಿಸಲಾಗುತ್ತಿದೆ..."
 
 #. Whack means "to hit or strike someone with a sharp blow"
 msgid "Whack"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಹೊಡೆತ"
+
+#, c-format
 msgid "%s has whacked you!"
-msgstr "%s ರವರು  ನಿಮ್ಮನ್ನು [%s] ಸೇರಿಸಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮ್ಮನ್ನು ಹೊಡೆದಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Whacking %s..."
-msgstr ""
+msgstr "%s ರವರಿಗೆ ಹೊಡೆಯಲಾಗುತ್ತಿದೆ..."
 
 #. Torch means "to set on fire."  Don't worry, this doesn't
 #. * make a whole lot of sense in English, either.  Feel free
 #. * to translate it literally.
-#, fuzzy
 msgid "Torch"
-msgstr "ವಿಷಯ"
-
-#, fuzzy, c-format
+msgstr "ಬೆಳಕು"
+
+#, c-format
 msgid "%s has torched you!"
-msgstr "ಬಳಕೆದಾರರು ನಿಮ್ಮನ್ನು ನಿಷೇಧಿಸಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮ್ಮತ್ತ ಬೆಳಕನ್ನು ಬೀರಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Torching %s..."
-msgstr ""
+msgstr "%s ರವರತ್ತ ಬೆಳಕನ್ನು ಬೀರಲಾಗುತ್ತಿದೆ..."
 
 #. Smooch means "to kiss someone, often enthusiastically"
 msgid "Smooch"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಚುಂಬನ"
+
+#, c-format
 msgid "%s has smooched you!"
-msgstr "%s ಲಾಗಿನ್ ಆಗಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮಗೆ ಚುಂಬಿಸಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Smooching %s..."
-msgstr ""
+msgstr "%s ರವರನ್ನು ಚುಂಬಿಸಲಾಗುತ್ತಿದೆ..."
 
 #. A hug is a display of affection; wrapping your arms around someone
 msgid "Hug"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ತಬ್ಬಿಕೊಳ್ಳು"
+
+#, c-format
 msgid "%s has hugged you!"
-msgstr "%s ಲಾಗಿನ್ ಆಗಿದ್ದಾರೆ"
+msgstr "%s ನಿಮ್ಮನ್ನು ತಬ್ಬಿಕೊಂಡಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Hugging %s..."
-msgstr ""
+msgstr "%s ರವರನ್ನು ತಬ್ಬಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ..."
 
 #. Slap means "to hit someone with an open/flat hand"
-#, fuzzy
 msgid "Slap"
-msgstr "ಸ್ಲೋವಾಕ್"
-
-#, fuzzy, c-format
+msgstr "ತಪರಾಕಿ"
+
+#, c-format
 msgid "%s has slapped you!"
-msgstr "%s ರವರು  ನಿಮ್ಮನ್ನು [%s] ಸೇರಿಸಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮಗೆ ತಪರಾಕಿ ಕೊಟ್ಟಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Slapping %s..."
-msgstr ""
+msgstr "%s ರವರಿಗೆ ತಪರಾಕಿ ಕೊಡಲಾಗುತ್ತಿದೆ..."
 
 #. Goose means "to pinch someone on their butt"
-#, fuzzy
 msgid "Goose"
-msgstr "ಮರೆಯಾಗಿಸಿ"
-
-#, fuzzy, c-format
+msgstr "ಚಿವುಟು"
+
+#, c-format
 msgid "%s has goosed you!"
-msgstr " %s  ಆಚೆ ಹೋಗಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮಗೆ ಚಿವುಟಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Goosing %s..."
-msgstr ""
+msgstr "%s ರವರವನ್ನು ಚಿವುಟಲಾಗುತ್ತಿದೆ..."
 
 #. A high-five is when two people's hands slap each other
 #. * in the air above their heads.  It is done to celebrate
 #. * something, often a victory, or to congratulate someone.
 msgid "High-five"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಬಡ್ತಿ(ಹೈ-ಫೈವ್‌)"
+
+#, c-format
 msgid "%s has high-fived you!"
-msgstr "%s ಲಾಗಿನ್ ಆಗಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮಗೆ ಬಡ್ತಿ ನೀಡಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "High-fiving %s..."
-msgstr ""
+msgstr "%s ರವರಿಗೆ ಬಡ್ತಿ ನೀಡಲಾಗುತ್ತಿದೆ..."
 
 #. We're not entirely sure what the MySpace people mean by
 #. * this... but we think it's the equivalent of "prank."  Or, for
 #. * someone to perform a mischievous trick or practical joke.
 msgid "Punk"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಕುರಿ"
+
+#, c-format
 msgid "%s has punk'd you!"
-msgstr "%s ಲಾಗಿನ್ ಆಗಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮ್ಮನ್ನು ಕುರಿ ಮಾಡಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Punking %s..."
-msgstr ""
+msgstr "%s ರವರನ್ನು ಕುರಿ ಮಾಡಲಾಗುತ್ತಿದೆ..."
 
 #. Raspberry is a slang term for the vibrating sound made
 #. * when you stick your tongue out of your mouth with your
@@ -6410,27 +6483,27 @@
 #. * connotation.  It is generally used in a playful tone
 #. * with friends.
 msgid "Raspberry"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಅಸಮ್ಮತಿ"
+
+#, c-format
 msgid "%s has raspberried you!"
-msgstr "%s ಲಾಗಿನ್ ಆಗಿದ್ದಾರೆ"
+msgstr "%s ರವರು ನಿಮ್ಮತ್ತ ಅಸಮ್ಮತಿ ಸೂಚಿಸಿದ್ದಾರೆ!"
 
 #, c-format
 msgid "Raspberrying %s..."
-msgstr ""
+msgstr "%s ರವರತ್ತ ಅಸಮ್ಮತಿ ಸೂಚಿಸಲಾಗುತ್ತಿದೆ..."
 
 msgid "Required parameters not passed in"
-msgstr ""
+msgstr "ಅಗತ್ಯವಿರುವ ನಿಯತಾಂಕಗಳನ್ನು(ಪ್ಯಾರಾಮೀಟರ್) ಒಪ್ಪಿಕೊಳ್ಳಲಾಗಲಿಲ್ಲ"
 
 msgid "Unable to write to network"
-msgstr ""
+msgstr "ಜಾಲಬಂಧಕ್ಕೆ ಬರೆಯಲಾಗಲಿಲ್ಲ"
 
 msgid "Unable to read from network"
 msgstr "ಜಾಲದಿಂದ ಓದಲಾಗಲಿಲ್ಲ"
 
 msgid "Error communicating with server"
-msgstr ""
+msgstr "ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸುವಲ್ಲಿ ದೋಷ"
 
 msgid "Conference not found"
 msgstr "ಸಮ್ಮೇಳನ ಸಿಗಲಿಲ್ಲ"
@@ -6457,46 +6530,46 @@
 msgstr "ಖಾತೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
 
 msgid "The server could not access the directory"
-msgstr ""
+msgstr "ಕೋಶವನ್ನು ನಿಲುಕಿಸಿಕೊಳ್ಳಲು ಪರಿಚಾರಕಕ್ಕೆ ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 msgid "Your system administrator has disabled this operation"
-msgstr ""
+msgstr "ನಿಮ್ಮ ಗಣಕ ವ್ಯವಸ್ಥಾಪಕರು ಈ ಕಾರ್ಯವನ್ನು ಅಶಕ್ತಗೊಳಿಸಿದ್ದಾರೆ"
 
 msgid "The server is unavailable; try again later"
-msgstr ""
+msgstr "ಪರಿಚಾರಕವು ಲಭ್ಯವಿಲ್ಲ; ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ"
 
 msgid "Cannot add a contact to the same folder twice"
-msgstr ""
+msgstr "ಒಂದೇ ಕಡತಕೋಶಕ್ಕೆ ಎರಡುಬಾರಿ ಒಂದೆ ಸಂಪರ್ಕವಿಳಾಸವನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
 
 msgid "Cannot add yourself"
 msgstr "ನಿಮ್ಮನ್ನೇ ಸೇರಿಸಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ"
 
 msgid "Master archive is misconfigured"
-msgstr ""
+msgstr "ಪ್ರಮುಖ ಸಂಗ್ರಹವನ್ನು(ಆರ್ಕೈವ್) ಸರಿಯಾಗಿ ಸಂರಚಿಸಲಾಗಿಲ್ಲ"
 
 msgid "Could not recognize the host of the username you entered"
-msgstr ""
+msgstr "ನೀವು ನಮೂದಿಸಿದ ಬಳಕೆದಾರ ಹೆಸರಿನ ಆತಿಥೇಯವನ್ನು ಗುರುತಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 msgid ""
 "Your account has been disabled because too many incorrect passwords were "
 "entered"
 msgstr ""
+"ನೀವು ಹಲವು ಬಾರಿ ತಪ್ಪು ಗುಪ್ತಪದಗಳನ್ನು ಒದಗಿಸಿದ ಕಾರಣ ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಅಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ"
 
 msgid "You cannot add the same person twice to a conversation"
 msgstr "ಒಂದು ಮಾತುಕತೆಯಲ್ಲಿ ಒಂದೇ ವ್ಯಕ್ತಿಯನ್ನು ನೀವು ಎರಡುಸಲ ಸೇರಿಸಿವಂತಿಲ್ಲ"
 
 msgid "You have reached your limit for the number of contacts allowed"
-msgstr ""
-
-#, fuzzy
+msgstr "ಅನುಮತಿಸಲಾಗುವ ಸಂಪರ್ಕವಿಳಾಸದ ಗರಿಷ್ಟ ಮಿತಿಯನ್ನು ನೀವು ಮೀರಿದ್ದೀರಿ"
+
 msgid "You have entered an incorrect username"
 msgstr "ನೀವು ತಪ್ಪು ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಬರೆದಿದ್ದೀರಿ"
 
 msgid "An error occurred while updating the directory"
-msgstr ""
+msgstr "ಕೋಶವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡುವಲ್ಲಿ ಒಂದು ದೋಷವು ಎದುರಾಗಿದೆ"
 
 msgid "Incompatible protocol version"
-msgstr ""
+msgstr "ಹೊಂದಿಕೊಳ್ಳದೆ ಇರುವ ಪ್ರೊಟೊಕಾಲ್ ಆವೃತ್ತಿ"
 
 msgid "The user has blocked you"
 msgstr "ಬಳಕೆದಾರರು ನಿಮ್ಮನ್ನು ನಿಷೇಧಿಸಿದ್ದಾರೆ"
@@ -6505,25 +6578,28 @@
 "This evaluation version does not allow more than ten users to log in at one "
 "time"
 msgstr ""
+"ಇದು ಪ್ರಾಯೋಗಿಕ ಆವೃತ್ತಿಯಾಗಿದ್ದು ಒಂದೆ ಬಾರಿಗೆ ಹತ್ತಕ್ಕಿಂ ಹೆಚ್ಚಿನ ಬಳಕೆದಾರರು "
+"ಪ್ರವೇಶಿಸುವುದನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"
 
 msgid "The user is either offline or you are blocked"
-msgstr ""
+msgstr "ಬಳಕೆದಾರರು ಒಂದು ಆಫ್‌ಲೈನಿನಲ್ಲಿದ್ದಾರೆ ಅಥವ ನೀವು ಅವರನ್ನು ನಿರ್ಬಂಧಿಸಿದ್ದೀರಿ"
 
 #, c-format
 msgid "Unknown error: 0x%X"
 msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ: 0x%X"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "%s ಬಳಕೆದಾರರನ್ನು  ನಿಷೇಧಿಸಲು ಆಗಲಿಲ್ಲ"
+msgstr "ಪ್ರವೇಶಿಸಲು ಆಗಲಿಲ್ಲ: %s"
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
 msgstr ""
+"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. ಬಳಕೆದಾರರನ ಬಗೆಗಿನ ವಿವರಗಳನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to add %s to your buddy list (%s)."
-msgstr ""
+msgstr "%s ರವರನ್ನು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #. TODO: Improve this! message to who or for what conference?
 #, c-format
@@ -6537,53 +6613,58 @@
 #, c-format
 msgid "Unable to send message to %s. Could not create the conference (%s)."
 msgstr ""
+"%s ರವರಿಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. ಸಮ್ಮೇಳವನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to send message. Could not create the conference (%s)."
-msgstr ""
+msgstr "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. ಸಮ್ಮೇಳವನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid ""
 "Unable to move user %s to folder %s in the server side list. Error while "
 "creating folder (%s)."
 msgstr ""
+"ಪರಿಚಾರದಕದಲ್ಲಿನ ಪಟ್ಟಿಯಿಂದ %s ಎಂಬ ಬಳಕೆದಾರರನ್ನು %s ಎಂಬ ಕಡತಕೋಶಕ್ಕೆ ವರ್ಗಾಯಿಸಲು "
+"ಸಾಧ್ಯವಾಗಿಲ್ಲ. ಕಡತಕೋಶವನ್ನು ನಿರ್ಮಿಸುವಲ್ಲಿ ದೋಷ ಉಂಟಾಗಿದೆ (%s)."
 
 #, c-format
 msgid ""
 "Unable to add %s to your buddy list. Error creating folder in server side "
 "list (%s)."
 msgstr ""
+"%s ರವರನ್ನು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. ಪರಿಚಾರಕದಲ್ಲಿ ಪಟ್ಟಿಯನ್ನು "
+"ರಚಿಸುವಲ್ಲಿ ದೋಷ ಉಂಟಾಗಿದೆ (%s)."
 
 #, c-format
 msgid "Could not get details for user %s (%s)."
-msgstr ""
+msgstr "%s ಬಳಕೆದಾರರ ವಿವರಗಳನ್ನು ಪಡೆಯಲಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to add user to privacy list (%s)."
-msgstr ""
+msgstr "ಬಳಕೆದಾರರನ್ನು ಖಾಸಗಿ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to add %s to deny list (%s)."
-msgstr ""
+msgstr "%s ರವರನ್ನು ನಿರಾಕರಿಸುವ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to add %s to permit list (%s)."
-msgstr ""
+msgstr "%s ರವರನ್ನು ಅನುಮತಿಸುವ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to remove %s from privacy list (%s)."
-msgstr ""
+msgstr "%s ರವರನ್ನು ಖಾಸಗಿ ಪಟ್ಟಿಯಿಂದ ತೆಗೆದು ಹಾಕಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to change server side privacy settings (%s)."
-msgstr ""
+msgstr "ಪರಿಚಾರಕದಲ್ಲಿನ ಖಾಸಗಿ ಸಿದ್ಧತೆಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 #, c-format
 msgid "Unable to create conference (%s)."
-msgstr ""
+msgstr "ಸಮ್ಮೇಳನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ (%s)."
 
 msgid "Error communicating with server. Closing connection."
-msgstr ""
+msgstr "ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸುವಲ್ಲಿ ದೋಷ. ಸಂಪರ್ಕವನ್ನು ಮುಚ್ಚಲಾಗುತ್ತಿದೆ."
 
 msgid "Telephone Number"
 msgstr "ದೂರವಾಣಿ ಸಂಖ್ಯೆ"
@@ -6592,7 +6673,7 @@
 msgstr "ವೈಯಕ್ತಿಕ ಬಿರುದು"
 
 msgid "Mailstop"
-msgstr ""
+msgstr "ಮೈಲ್‌ಸ್ಟಾಪ್"
 
 msgid "User ID"
 msgstr "ಬಳಕೆದಾರನ ಗುರುತು"
@@ -6640,12 +6721,15 @@
 msgid ""
 "%s appears to be offline and did not receive the message that you just sent."
 msgstr ""
-
-#, fuzzy
+"%s ರವರು ಆಫ್‌ಲೈನಿನಲ್ಲಿದ್ದಾರೆ ಆದ್ದರಿಂದ ನೀವು ಕಳುಹಿಸಿದ ಸಂದೇಶವು ಅವರಿಗೆ ತಲುಪಿಲ್ಲ ಎಂದು "
+"ತೋರುತ್ತಿದೆ."
+
 msgid ""
 "Unable to connect to server. Please enter the address of the server to which "
 "you wish to connect."
-msgstr "ನೀವು ತಡೆಗಟ್ಟ ಬಯಸುವ ಬಳಕೆದಾರರ ಹೆಸರು ಬರೆಯಿರಿ"
+msgstr ""
+"ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನೀವು ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಬಯಸುವ ಪರಿಚಾರಕದ "
+"ವಿಳಾಸವನ್ನು ಬರೆಯಿರಿ."
 
 msgid "This conference has been closed. No more messages can be sent."
 msgstr "ಈ ಸಮ್ಮೇಳನ ಮುಗಿದಿದೆ . ಇನ್ನು ಸಂದೇಶಗಳನ್ನು ಕಳಿಸಲು ಆಗುವದಿಲ್ಲ"
@@ -6661,7 +6745,7 @@
 #. *  summary
 #. *  description
 msgid "Novell GroupWise Messenger Protocol Plugin"
-msgstr ""
+msgstr "ನೋವೆಲ್ ಗ್ರೂಪ್‌ವೈಸ್ ಮೆಸೆಂಜರ್ ಪ್ರೊಟೊಕಾಲ್ ಪ್ಲಗ್ಗಿನ್"
 
 msgid "Server address"
 msgstr "ಪರಿಚಾರಕ(ಸರ್ವರ್‍) ವಿಳಾಸ"
@@ -6669,36 +6753,44 @@
 msgid "Server port"
 msgstr "ಪರಿಚಾರಕ(ಸರ್ವರ್‍) ಸಂಪರ್ಕಸ್ಥಾನ"
 
-#. Note to translators: %s in this string is a URL
 #, fuzzy, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "%s ದಿಂದ ಅನಿರೀಕ್ಷಿತವಾದ ಪ್ರತ್ಯುತ್ತರವನ್ನು ಪಡೆಯಲಾಗಿದೆ"
+
+#, c-format
 msgid "Received unexpected response from %s"
-msgstr "%d %s ಓದಿರದ ಸಂದೇಶ\n"
+msgstr "%s ದಿಂದ ಅನಿರೀಕ್ಷಿತವಾದ ಪ್ರತ್ಯುತ್ತರವನ್ನು ಪಡೆಯಲಾಗಿದೆ"
 
 msgid ""
 "You have been connecting and disconnecting too frequently. Wait ten minutes "
 "and try again. If you continue to try, you will need to wait even longer."
 msgstr ""
+"ನೀವು ಪದೆ ಪದೆ ಸಂಪರ್ಕಿತಗೊಳ್ಳುತ್ತಿದ್ದೀರಿ ಹಾಗು ಸಂಪರ್ಕವನ್ನು ಕಡಿದು ಹಾಕುತ್ತಿದ್ದೀರಿ. ಹತ್ತು "
+"ನಿಮಿಷ ಕಾದು ನಂತರ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. ನೀವು ಹೀಗೆ ಮುಂದುವರೆಸಿದಲ್ಲಿ ಇದು ಇನ್ನಷ್ಟು "
+"ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ."
 
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting %s: %s"
-msgstr "ಸಂಪರ್ಕ ರಚಿಸುವಲ್ಲಿ ದೋಷ"
+msgstr "%s ಕ್ಕೆ ಮನವಿ ಸಲ್ಲಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
 
 msgid "AOL does not allow your screen name to authenticate here"
-msgstr ""
-
-#, fuzzy
+msgstr "ನಿಮ್ಮ ತೆರೆಯ ಹೆಸರನ್ನು ಇಲ್ಲಿ ದೃಢೀಕರಿಸುವುದನ್ನು AOL ಅನುಮತಿಸುವುದಿಲ್ಲ"
+
 msgid "Could not join chat room"
-msgstr "ಸಂಪರ್ಕಿಸಲಾಗಲಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ಮಾತುಕತೆ ಕೋಣೆಯನ್ನು ಸೇರಲಾಗಲಿಲ್ಲ"
+
 msgid "Invalid chat room name"
-msgstr "ತಪ್ಪು ಕೋಣೆಯ ಹೆಸರು"
-
-#, fuzzy
+msgstr "ಮಾತುಕತೆಯ ಕೋಣೆಯ ಹೆಸರು ತಪ್ಪಾಗಿದೆ"
+
 msgid "Received invalid data on connection with server"
-msgstr "ಸರ್ವರ್‍ಗೆ ಸಂಪರ್ಕ ಹೊಂದಿಲ್ಲ"
+msgstr "ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕ ಸಾಧಿಸುವಾಗ ತಪ್ಪು ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲಾಗಿದೆ"
 
 #. *< type
 #. *< ui_requirement
@@ -6710,12 +6802,11 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "AIM Protocol Plugin"
-msgstr "ಯಾಹೂ ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
+msgstr "AIM ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
 
 msgid "ICQ UIN..."
-msgstr ""
+msgstr "ICQ UIN..."
 
 #. *< type
 #. *< ui_requirement
@@ -6727,72 +6818,73 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "ICQ Protocol Plugin"
-msgstr "ಯಾಹೂ ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
+msgstr "ICQ ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
 
 msgid "Encoding"
-msgstr ""
+msgstr "ಎನ್ಕೋಡಿಂಗ್ "
 
 msgid "The remote user has closed the connection."
-msgstr ""
+msgstr "ದೂರದ ಬಳಕೆದಾರರು ಸಂಪರ್ಕವನ್ನು ಮುಚ್ಚಿದ್ದಾರೆ."
 
 msgid "The remote user has declined your request."
-msgstr ""
+msgstr "ದೂರದ ಬಳಕೆದಾರರು ನಿಮ್ಮ ಮನವಿಯನ್ನು ತಿರಸ್ಕರಿಸಿದ್ದಾರೆ."
 
 #, c-format
 msgid "Lost connection with the remote user:<br>%s"
-msgstr ""
+msgstr "ದೂರದ ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಪರ್ಕ ಕಡಿದುಹೋಗಿದೆ:<br>%s"
 
 msgid "Received invalid data on connection with remote user."
-msgstr ""
-
-#, fuzzy
+msgstr "ದೂರದ ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸುವಾಗ ತಪ್ಪು ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲಾಗಿದೆ."
+
 msgid "Unable to establish a connection with the remote user."
-msgstr "ಸಂಪರ್ಕ  ಸಾಧ್ಯವಗಲಿಲ್ಲ"
+msgstr "ದೂರದ ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಪರ್ಕವನ್ನು ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."
 
 msgid "Direct IM established"
-msgstr ""
+msgstr "ನೇರ IM ಅನ್ನು ಸಾಧಿಸಲಾಗಿದೆ"
 
 #, c-format
 msgid ""
 "%s tried to send you a %s file, but we only allow files up to %s over Direct "
 "IM.  Try using file transfer instead.\n"
 msgstr ""
+"%s ರವರು ನಿಮಗೆ %s ಕಡತವನ್ನು ಕಳುಹಿಸಲು ಪ್ರಯತ್ನಿಸಿದ್ದರು, ಆದರೆ ನೇರ IM ಯಲ್ಲಿ ಕೇವಲ %s "
+"ವರೆಗಿನ ಗಾತ್ರದ ಕಡತಗಳನ್ನು ಮಾತ್ರ ಕಳುಹಿಸಬಹುದಾಗಿದೆ.  ಇದರ ಬದಲಿಗೆ ಕಡತ ವರ್ಗಾವಣೆಯನ್ನು "
+"ಪ್ರಯತ್ನಿಸಿ.\n"
 
 #, c-format
 msgid "File %s is %s, which is larger than the maximum size of %s."
-msgstr ""
+msgstr "%s ಕಡತವು %s ನಷ್ಟಿದೆ, ಇದು ಗರಿಷ್ಟ ಗಾತ್ರವಾದಂತಹ %s ಅನ್ನು ಮೀರಿದೆ."
 
 msgid "Invalid error"
 msgstr "ತಪ್ಪು ದೋಷ"
 
 msgid "Invalid SNAC"
-msgstr ""
+msgstr "ಅಮಾನ್ಯವಾದ SNAC"
 
 msgid "Rate to host"
-msgstr ""
+msgstr "ಆತಿಥೇಯದೊಂದಿಗಿನ ದರ"
 
 msgid "Rate to client"
-msgstr ""
+msgstr "ಕ್ಲೈಂಟಿನೊಂದಿಗಿನ ದರ"
 
 msgid "Service unavailable"
 msgstr "ಸೇವೆ ಲಭ್ಯವಿಲ್ಲ"
 
 msgid "Service not defined"
-msgstr ""
+msgstr "ಸೇವೆಯನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ"
 
 msgid "Obsolete SNAC"
-msgstr ""
+msgstr "ಪ್ರಚಲಿತದಲ್ಲಿಲ್ಲದ SNAC"
 
 msgid "Not supported by host"
-msgstr ""
+msgstr "ಆತಿಥೇಯದಿಂದ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
 
 msgid "Not supported by client"
-msgstr ""
+msgstr "ಕ್ಲೈಂಟಿನಿಂದ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
 
 msgid "Refused by client"
-msgstr ""
+msgstr "ಕ್ಲೈಂಟಿನಿಂದ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ"
 
 msgid "Reply too big"
 msgstr "ಉತ್ತರ ಬಹಳ ದೊಡ್ಡದು."
@@ -6804,25 +6896,25 @@
 msgstr "ಕೋರಿಕೆ ನಿರಾಕರಿಸಲಾಗಿದೆ."
 
 msgid "Busted SNAC payload"
-msgstr ""
+msgstr "ಹಾಳಾದ SNAC ಪೇಲೋಡ್"
 
 msgid "Insufficient rights"
-msgstr ""
+msgstr "ಸಾಕಷ್ಟು ಹಕ್ಕುಗಳಿಲ್ಲ"
 
 msgid "In local permit/deny"
-msgstr ""
+msgstr "ಸ್ಥಳೀಯ ಅನುಮತಿ/ನಿರಾಕರಣೆಯಲ್ಲಿ"
 
 msgid "Warning level too high (sender)"
-msgstr ""
+msgstr "ಎಚ್ಚರಿಕೆ ಮಟ್ಟವು ಅತ್ಯಂತ ಹೆಚ್ಚಿನದಾಗಿದೆ (ಕಳುಹಿಸಿದವರು)"
 
 msgid "Warning level too high (receiver)"
-msgstr ""
+msgstr "ಎಚ್ಚರಿಕೆ ಮಟ್ಟವು ಅತ್ಯಂತ ಹೆಚ್ಚಿನದಾಗಿದೆ (ಸ್ವೀಕರಿಸಿದವರು)"
 
 msgid "User temporarily unavailable"
 msgstr "ಬಳಕೆದಾರರು ತಾತ್ಪೂರ್ತಿಕವಾಗಿ ಅಲಭ್ಯ"
 
 msgid "No match"
-msgstr ""
+msgstr "ಯಾವುದೂ ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ"
 
 msgid "List overflow"
 msgstr "ತುಂಬಿದ ಪಟ್ಟಿ"
@@ -6834,49 +6926,45 @@
 msgstr "ಸರತಿಯಸಾಲು ಭರತಿಯಾಗಿದೆ"
 
 msgid "Not while on AOL"
-msgstr ""
+msgstr "AOL ನಲ್ಲಿದ್ದಾಗ ಅಲ್ಲ"
 
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
+msgstr "ಪೋಷಕರ ನಿಯಂತ್ರಣದಿಂದ IM ಅನ್ನು ಸ್ವೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "ನಿಯಮಗಳನ್ನು ಒಪ್ಪಿಕೊಳ್ಳದ ಹೊರತು SMS ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
+
 msgid "Cannot send SMS"
-msgstr "ಕಡತವನ್ನು ಕಳಿಸಲು ಆಗಲಿಲ್ಲ"
+msgstr "SMS ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "ಕಡತಕೋಶವನ್ನು ಕಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
+msgstr "ಈ ದೇಶಕ್ಕೆ SMS ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
 
 #. Undocumented
 msgid "Cannot send SMS to unknown country"
-msgstr ""
+msgstr "ಅಜ್ಞಾತ ದೇಶಕ್ಕೆ SMS ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
 
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
+msgstr "ಬಾಟ್‌ ಖಾತೆಗಳಿಂದ IM ಗಳನ್ನು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ"
 
 msgid "Bot account cannot IM this user"
-msgstr ""
+msgstr "ಬಾಟ್‌ ಖಾತೆಯು ಈ ಬಳಕೆದಾರನಿಗೆ IM ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ"
 
 msgid "Bot account reached IM limit"
-msgstr ""
+msgstr "ಬಾಟ್‌ ಖಾತೆಯು IM ಮಿತಿಯನ್ನು ತಲುಪಿದೆ"
 
 msgid "Bot account reached daily IM limit"
-msgstr ""
+msgstr "ಬಾಟ್‌ ಖಾತೆಯು ದೈನಂದಿನ IM ಮಿತಿಯನ್ನು ತಲುಪಿದೆ"
 
 msgid "Bot account reached monthly IM limit"
-msgstr ""
-
-#, fuzzy
+msgstr "ಬಾಟ್‌ ಖಾತೆಯು ಮಾಸಿಕ IM ಮಿತಿಯನ್ನು ತಲುಪಿದೆ"
+
 msgid "Unable to receive offline messages"
-msgstr "ಸಂದೇಶವನ್ನು ಕಳಿಸಲು ಆಗಲಿಲ್ಲ."
-
-#, fuzzy
+msgstr "ಆಫ್‌ಲೈನ್ ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಆಗಲಿಲ್ಲ"
+
 msgid "Offline message store full"
-msgstr "ಓದಿರದ ಸಂದೇಶಗಳು"
+msgstr "ಆಫ್‌ಲೈನ್‌ ಸಂದೇಶದ ಶೇಖರಣೆ ತುಂಬಿದೆ"
 
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
@@ -6884,22 +6972,29 @@
 "encoding he is using, you can specify it in the advanced account options for "
 "your AIM/ICQ account.)"
 msgstr ""
+"(ಈ ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸುವಾಗ ಒಂದು ದೋಷ ಉಂಟಾಗಿದೆ.  ನೀವು ಮಾತನಾಡುತ್ತಿರುವ ಗೆಳೆಯರು ನಾವು "
+"ನಿರೀಕ್ಷಿಸಿದೆ ಇರುವ ಎನ್ಕೋಡಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತಿರಬಹುದು.  ಅವರು ಯಾವ ಎನ್ಕೋಡಿಂಗ್ ಅನ್ನು "
+"ಬಳಸುತ್ತಿದ್ದಾರೆ ಎಂದು ನಿಮಗೆ ತಿಳಿದಿದ್ದರೆ, ಅದನ್ನು ನಿಮ್ಮ AIM/ICQ ಖಾತೆಯಲ್ಲಿನ ಸುಧಾರಿತ "
+"ಖಾತೆ ಆಯ್ಕೆಗಳಲ್ಲಿ ಸೂಚಿಸಬಹುದು.)"
 
 #, c-format
 msgid ""
 "(There was an error receiving this message.  Either you and %s have "
 "different encodings selected, or %s has a buggy client.)"
 msgstr ""
+"(ಈ ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸುವಾಗ ಒಂದು ದೋಷ ಉಂಟಾಗಿದೆ.  ಒಂದೊ ನೀವು ಮತ್ತು %s ವಿಭಿನ್ನವಾದ "
+"ಎನ್ಕೋಡಿಂಗನ್ನು ಆಯ್ಕೆ ಮಾಡಿಕೊಂಡಿದ್ದೀರಿ, ಅಥವ %s ಒಂದು ದೋಷಪೂರಿತವಾದ ಕ್ಲೈಂಟನ್ನು "
+"ಬಳಸುತ್ತಿದ್ದಾರೆ.)"
 
 #. Label
 msgid "Buddy Icon"
-msgstr ""
+msgstr "ಗೆಳೆಯನ ಚಿಹ್ನೆ"
 
 msgid "Voice"
 msgstr "ಧ್ವನಿ"
 
 msgid "AIM Direct IM"
-msgstr ""
+msgstr "AIM ನೇರ IM"
 
 msgid "Get File"
 msgstr "ಕಡತ ಪಡೆಯಿರಿ"
@@ -6908,68 +7003,67 @@
 msgstr "ಆಟಗಳು"
 
 msgid "Add-Ins"
-msgstr ""
+msgstr "ಆಡ್‌-ಇನ್‌ಗಳು"
 
 msgid "Send Buddy List"
 msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿ ಕಳಿಸಿ"
 
 msgid "ICQ Direct Connect"
-msgstr ""
+msgstr "ICQ ನೇರ ಸಂಪರ್ಕ"
 
 msgid "AP User"
-msgstr ""
+msgstr "AP ಬಳಕೆದಾರ"
 
 msgid "ICQ RTF"
-msgstr ""
+msgstr "ICQ RTF"
 
 msgid "Nihilist"
-msgstr ""
+msgstr "Nihilist"
 
 msgid "ICQ Server Relay"
-msgstr ""
+msgstr "ICQ ಪರಿಚಾರಕ ರಿಲೆ"
 
 msgid "Old ICQ UTF8"
-msgstr ""
+msgstr "Old ICQ UTF8"
 
 msgid "Trillian Encryption"
-msgstr ""
+msgstr "ಟ್ರಿಲಿಯನ್ ಗೂಢಲಿಪೀಕರಣ"
 
 msgid "ICQ UTF8"
-msgstr ""
+msgstr "ICQ UTF8"
 
 msgid "Hiptop"
-msgstr ""
+msgstr "ಹಿಪ್‌ಟಾಪ್"
 
 msgid "Security Enabled"
-msgstr ""
+msgstr "ಸುರಕ್ಷತೆಯನ್ನು ಶಕ್ತಗೊಳಿಸಲಾದ"
 
 msgid "Video Chat"
-msgstr ""
+msgstr "ವೀಡಿಯೊ ಮಾತುಕತೆ"
 
 msgid "iChat AV"
-msgstr ""
+msgstr "iChat AV"
 
 msgid "Live Video"
-msgstr ""
+msgstr "ಲೈವ್ ವೀಡಿಯೊ"
 
 msgid "Camera"
-msgstr ""
-
-#, fuzzy
+msgstr "ಕ್ಯಾಮೆರಾ"
+
 msgid "Screen Sharing"
-msgstr "ಬಳಕೆಯ ಹೆಸರು"
+msgstr "ತೆರೆಯನ್ನು ಹಂಚಿಕೊಳ್ಳುವಿಕೆ"
 
 msgid "Free For Chat"
-msgstr ""
+msgstr "ಮಾತುಕತೆಗೆ ಮುಕ್ತ"
 
 msgid "Not Available"
 msgstr "ಲಭ್ಯವಿಲ್ಲ"
 
 msgid "Occupied"
-msgstr ""
+msgstr "ಆಕ್ರಮಿಸಲಾಗಿದೆ"
 
 msgid "Web Aware"
-msgstr ""
+msgstr "ಜಾಲ ತಿಳುವಳಿಕೆ"
 
 msgid "Invisible"
 msgstr "ಅದೃಶ್ಯ"
@@ -6978,29 +7072,28 @@
 msgstr "ಐಪಿ ವಿಳಾಸ"
 
 msgid "Warning Level"
-msgstr ""
+msgstr "ಎಚ್ಚರಿಕೆ ಮಟ್ಟ"
 
 msgid "Buddy Comment"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಗೆಳೆಯನ ಅಭಿಪ್ರಾಯ"
+
+#, c-format
 msgid "Unable to connect to authentication server: %s"
-msgstr "ವರ್ಗಾವಣೆಗಾಗಿ ಸಂಪರ್ಕಿಸಲು ಅಗಲಿಲ್ಲ"
-
-#, fuzzy, c-format
+msgstr "ದೃಢೀಕರಣ ಪರಿಚಾರಕದೊಂದಿಗೆ ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಆಗಲಿಲ್ಲ: %s"
+
+#, c-format
 msgid "Unable to connect to BOS server: %s"
-msgstr "ಸರ್ವರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಆಗಲಿಲ್ಲ"
-
-#, fuzzy
+msgstr "BOS ಪರಿಚಾರಕವನ್ನು ಸಂಪರ್ಕಿಸಲು ಆಗಲಿಲ್ಲ: %s"
+
 msgid "Username sent"
-msgstr "ಹೆಸರು ಇಲ್ಲ."
+msgstr "ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ."
 
 msgid "Connection established, cookie sent"
-msgstr ""
+msgstr "ಸಂಪರ್ಕವನ್ನು ಸಾಧಿಸಲಾಗಿದೆ, ಕುಕಿಯನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ"
 
 #. TODO: Don't call this with ssi
 msgid "Finalizing connection"
-msgstr ""
+msgstr "ಸಂಪರ್ಕವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ"
 
 #, c-format
 msgid ""
@@ -7008,36 +7101,38 @@
 "a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
+"%s ಎಂಬ ಬಳಕೆದಾರ ಹೆಸರಿನಲ್ಲಿ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.  ಬಳಕೆದಾರ ಹೆಸರುಗಳು ಒಂದು ಸರಿಯಾದ "
+"ಇಮೈಲ್ ವಿಳಾಸ ಆಗಿರಬೇಕು, ಅಥವ ಅದು ಕೇವಲ ಅಕ್ಷರಗಳಿಂದ ಮಾತ್ರ ಆರಂಭಗೊಳ್ಳಬೇಕು ಹಾಗು ಕೇವಲ "
+"ಅಕ್ಷರಗಳು, ಅಂಕೆಗಳು ಹಾಗು ಖಾಲಿ ಸ್ಥಳಗಳನ್ನು ಹೊಂದಿರಬೇಕು, ಅಥವ ಕೇವಲ ಅಂಕೆಗಳನ್ನು ಮಾತ್ರ "
+"ಹೊಂದಿರಬೇಕು."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
 msgstr ""
-
-#, fuzzy
+"ನಿಮ್ಮ ಸಂಪರ್ಕವು ಸದ್ಯದಲ್ಲೆ ಕಡಿದು ಹೋಗಲಿದೆ. ಹಾಗಾದಲ್ಲಿ ಅಪ್‌ಡೇಟ್‌ಗಳಿಗಾಗಿ %s ಅನ್ನು ನೋಡಿ."
+
 msgid "Unable to get a valid AIM login hash."
-msgstr "%s ಕಡತ ಓದಲು ಆಗಲಿಲ್ಲ"
-
-#, fuzzy
+msgstr "ಸರಿಯಾದ AIM ಪ್ರವೇಶ ಹ್ಯಾಶನ್ನು ಪಡೆಯಲಾಗಿಲ್ಲ."
+
 msgid "Unable to get a valid login hash."
-msgstr "%s ಕಡತ ಓದಲು ಆಗಲಿಲ್ಲ"
+msgstr "ಸರಿಯಾದ ಪ್ರವೇಶ ಹ್ಯಾಶನ್ನು ಪಡೆಯಲಾಗಿಲ್ಲ."
 
 msgid "Received authorization"
-msgstr ""
+msgstr "ಅಧಿಕಾರವನ್ನು ಪಡೆದುಕೊಳ್ಳಲಾಗಿದೆ"
 
 #. Unregistered username
 #. uid is not exist
 #. the username does not exist
-#, fuzzy
 msgid "Username does not exist"
-msgstr "ಬಲಕೆದಾರರು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"
+msgstr "ಬಳಕೆದಾರ ಹೆಸರು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"
 
 #. Suspended account
 msgid "Your account is currently suspended"
-msgstr ""
+msgstr "ನಿಮ್ಮ ಖಾತೆಯನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಅಮಾನತ್ತು ಮಾಡಲಾಗಿದೆ"
 
 #. service temporarily unavailable
 msgid "The AOL Instant Messenger service is temporarily unavailable."
-msgstr ""
+msgstr "AOL ತಕ್ಷಣ ಸಂದೇಶಗಾರ ಸೇವೆಯು ತಾತ್ಕಾಲಿಕವಾಗಿ ಅಲಭ್ಯವಾಗಿದೆ."
 
 #. username connecting too frequently
 msgid ""
@@ -7045,11 +7140,14 @@
 "minutes and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
+"ನಿಮ್ಮ ಬಳಕೆದಾರ ಹೆಸರು ಪದೆ ಪದೆ ಸಂಪರ್ಕಿತಗೊಳ್ಳುತ್ತಿದೆ ಹಾಗು ಸಂಪರ್ಕವನ್ನು ಕಡಿದು ಹಾಕುತ್ತಿದೆ. "
+"ಹತ್ತು ನಿಮಿಷ ಕಾದು ನಂತರ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. ನೀವು ಹೀಗೆ ಮುಂದುವರೆಸಿದಲ್ಲಿ ಇದು ಇನ್ನಷ್ಟು "
+"ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ."
 
 #. client too old
 #, c-format
 msgid "The client version you are using is too old. Please upgrade at %s"
-msgstr ""
+msgstr "ನೀವು ಬಳಸುತ್ತಿರುವ ಕ್ಲೈಂಟ್ ಆವೃತ್ತಿಯು ಬಹಳ ಹಳೆಯದಾಗಿದೆ. ದಯವಿಟ್ಟು %s ಗೆ ನವೀಕರಿಸಿ"
 
 #. IP address connecting too frequently
 msgid ""
@@ -7057,32 +7155,33 @@
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-
-#, fuzzy
+"ನಿಮ್ಮ IP ವಿಳಾಸವು ಪದೆ ಪದೆ ಸಂಪರ್ಕಿತಗೊಳ್ಳುತ್ತಿದೆ ಹಾಗು ಸಂಪರ್ಕವನ್ನು ಕಡಿದು ಹಾಕುತ್ತಿದೆ. "
+"ಹತ್ತು ನಿಮಿಷ ಕಾದು ನಂತರ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. ನೀವು ಹೀಗೆ ಮುಂದುವರೆಸಿದಲ್ಲಿ ಇದು ಇನ್ನಷ್ಟು "
+"ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ."
+
 msgid "The SecurID key entered is invalid"
-msgstr "ಜಾಲವೀಕ್ಷಣಾ ಆದೇಶ  \"%s\" ತಪ್ಪಾಗಿದೆ"
+msgstr "ನೀವು ನಮೂದಿಸಿದಿ SecurID ಕೀಲಿಯು ತಪ್ಪಾಗಿದೆ"
 
 msgid "Enter SecurID"
-msgstr ""
+msgstr "SecurID ಅನ್ನು ನಮೂದಿಸಿ"
 
 msgid "Enter the 6 digit number from the digital display."
-msgstr ""
+msgstr "ಡಿಜಿಟಲ್‌ ಪ್ರದರ್ಶಕದಲ್ಲಿ ಕಾಣಿಸುವ ೬ ಅಂಕೆಯ ಸಂಖ್ಯೆಯನ್ನು ದಾಖಲಿಸಿ."
 
 msgid "Password sent"
 msgstr "ಗುಪ್ತಪದವನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ"
 
-#, fuzzy
 msgid "Unable to initialize connection"
-msgstr "ಸಂಪರ್ಕ  ಸಾಧ್ಯವಗಲಿಲ್ಲ"
+msgstr "ಸಂಪರ್ಕವನ್ನು ಆರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"
 
 msgid "Please authorize me so I can add you to my buddy list."
-msgstr ""
+msgstr "ದಯವಿಟ್ಟು ನಿಮ್ಮನ್ನು ನನ್ನ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ನನಗೆ ಅಧಿಕಾರ ನೀಡಿ."
 
 msgid "No reason given."
-msgstr "ಕಾರಣ ಕೊಟ್ಟಿಲ್ಲ"
+msgstr "ಕಾರಣ ಕೊಟ್ಟಿಲ್ಲ."
 
 msgid "Authorization Denied Message:"
-msgstr ""
+msgstr "ಅಧಿಕಾರವನ್ನು ನಿರಾಕರಿಸಲಾದ ಸಂದೇಶ:"
 
 #, c-format
 msgid ""
@@ -7090,14 +7189,19 @@
 "following reason:\n"
 "%s"
 msgstr ""
+"%u ಎಂಬ ಬಳಕೆದಾರರನ್ನು ನೀವು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಬೇಕೆಂದಿರುವ ನಿಮ್ಮ ಮನವಿಯನ್ನು "
+"ಅವರು ಈ ಕೆಳಗಿನ ಕಾರಣದಿಂದಾಗಿ ತಿರಸ್ಕರಿಸಿದ್ದಾರೆ:\n"
+"%s"
 
 msgid "ICQ authorization denied."
-msgstr ""
+msgstr "ICQ ಅಧಿಕಾರ ನೀಡಿಕೆಯನ್ನು ನಿರಾಕರಿಸಲಾಗಿದೆ."
 
 #. Someone has granted you authorization
 #, c-format
 msgid "The user %u has granted your request to add them to your buddy list."
 msgstr ""
+"%u ಎಂಬ ಬಳಕೆದಾರರನ್ನು ನೀವು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಬೇಕೆಂದಿರುವ ಮನವಿಯನ್ನು ಅವರು "
+"ಅನುಮತಿಸಿದ್ದಾರೆ."
 
 #, c-format
 msgid ""
@@ -7106,6 +7210,10 @@
 "From: %s [%s]\n"
 "%s"
 msgstr ""
+"ನಿಮಗೆ ಒಂದು ವಿಶೇಷ ಸಂದೇಶವು ಬಂದಿದೆ\n"
+"\n"
+"ಕಳುಹಿಸಿದವರು: %s [%s]\n"
+"%s"
 
 #, c-format
 msgid ""
@@ -7114,6 +7222,10 @@
 "From: %s [%s]\n"
 "%s"
 msgstr ""
+"ನಿಮಗೆ ಒಂದು ICQ ಪುಟವು ಬಂದಿದೆ\n"
+"\n"
+"ಕಳುಹಿಸಿದವರು: %s [%s]\n"
+"%s"
 
 #, c-format
 msgid ""
@@ -7122,31 +7234,39 @@
 "Message is:\n"
 "%s"
 msgstr ""
+"ನಿಮಗೆ  %s ಒಂದು ICQ ಇಮೈಲ್ ಬಂದಿದೆ [%s]\n"
+"\n"
+"ಸಂದೇಶವು ಹೀಗಿದೆ: \n"
+"%s"
 
 #, c-format
 msgid "ICQ user %u has sent you a buddy: %s (%s)"
-msgstr ""
+msgstr "ICQ ಬಳಕೆದಾರ %u ರವರು ನಿಮಗೆ ಒಬ್ಬ ಗೆಳೆಯನನ್ನು ಕಳುಹಿಸಿದ್ದಾರೆ: %s (%s)"
 
 msgid "Do you want to add this buddy to your buddy list?"
-msgstr ""
+msgstr "ನೀವು ಈ ಗೆಳೆಯನನ್ನು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ಬಯಸುತ್ತೀರೆ?"
 
 msgid "_Add"
-msgstr "ಸೇರಿಸಿ(_A)"
+msgstr "ಸೇರಿಸು(_A)"
 
 msgid "_Decline"
-msgstr ""
+msgstr "ತಿರಸ್ಕರಿಸು(_D)"
 
 #, 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] ""
+"%hu ಸಂದೇಶವನ್ನು (%s ಕಳುಹಿಸಿದ್ದು) ನೀವು ಕಳೆದುಕೊಂಡಿರಿ ಏಕೆಂದರೆ ಅದು ಸರಿಯಾಗಿರಲಿಲ್ಲ."
 msgstr[1] ""
+"%hu ಸಂದೇಶಗಳನ್ನು (%s ಕಳುಹಿಸಿದ್ದು) ನೀವು ಕಳೆದುಕೊಂಡಿರಿ ಏಕೆಂದರೆ ಅದು ಸರಿಯಾಗಿರಲಿಲ್ಲ."
 
 #, 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] "ತೀರ ದೊಡ್ಡದಾದ  ಕಾರಣ ನೀವು  %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ"
-msgstr[1] "You missed %hu messages from %s because they were too large."
+msgstr[0] ""
+"ಗಾತ್ರವು ಬಹಳದ ದೊಡ್ಡದಾದ ಕಾರಣ ನೀವು %hu ಸಂದೇಶವನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ."
+msgstr[1] ""
+"ಗಾತ್ರವು ಬಹಳದ ದೊಡ್ಡದಾದ ಕಾರಣ ನೀವು %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ."
 
 #, c-format
 msgid ""
@@ -7154,44 +7274,56 @@
 msgid_plural ""
 "You missed %hu messages from %s because the rate limit has been exceeded."
 msgstr[0] ""
+"ದರದ ಮಿತಿಯು ಮೀರಿದ್ದರ ಕಾರಣ ನೀವು %hu ಸಂದೇಶವನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ."
 msgstr[1] ""
-
-#, fuzzy, c-format
+"ದರದ ಮಿತಿಯು ಮೀರಿದ್ದರ ಕಾರಣ ನೀವು %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ."
+
+#, c-format
 msgid ""
 "You missed %hu message from %s because his/her warning level is too high."
 msgid_plural ""
 "You missed %hu messages from %s because his/her warning level is too high."
-msgstr[0] "ತೀರ ದೊಡ್ಡದಾದ  ಕಾರಣ ನೀವು  %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ"
-msgstr[1] "You missed %hu messages from %s because they were too large."
-
-#, fuzzy, c-format
+msgstr[0] ""
+"ಅವರ ಎಚ್ಚರಿಕೆಯ ಮಟ್ಟವು ಅತಿ ಹೆಚ್ಚಿನದಾಗಿದ್ದರ ಕಾರಣ ನೀವು %hu ಸಂದೇಶವನ್ನು  (%s ಇವರಿಂದ) "
+"ಕಳೆದುಕೊಂಡಿರಿ."
+msgstr[1] ""
+"ಅವರ ಎಚ್ಚರಿಕೆಯ ಮಟ್ಟವು ಅತಿ ಹೆಚ್ಚಿನದಾಗಿದ್ದರ ಕಾರಣ ನೀವು  %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) "
+"ಕಳೆದುಕೊಂಡಿರಿ"
+
+#, c-format
 msgid "You missed %hu message from %s because your warning level is too high."
 msgid_plural ""
 "You missed %hu messages from %s because your warning level is too high."
-msgstr[0] "ತೀರ ದೊಡ್ಡದಾದ  ಕಾರಣ ನೀವು  %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ"
-msgstr[1] "You missed %hu messages from %s because they were too large."
+msgstr[0] ""
+"ನಿಮ್ಮ ಎಚ್ಚರಿಕೆಯ ಮಟ್ಟವು ಅತಿ ಹೆಚ್ಚಿನದಾಗಿದ್ದರ ಕಾರಣ ನೀವು %hu ಸಂದೇಶವನ್ನು  (%s ಇವರಿಂದ) "
+"ಕಳೆದುಕೊಂಡಿರಿ."
+msgstr[1] ""
+"ನಿಮ್ಮ ಎಚ್ಚರಿಕೆಯ ಮಟ್ಟವು ಅತಿ ಹೆಚ್ಚಿನದಾಗಿದ್ದರ ಕಾರಣ ನೀವು %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) "
+"ಕಳೆದುಕೊಂಡಿರಿ"
 
 #, c-format
 msgid "You missed %hu message from %s for an unknown reason."
 msgid_plural "You missed %hu messages from %s for an unknown reason."
 msgstr[0] ""
+"ಒಂದು ಅಜ್ಞಾತ ಕಾರಣದಿಂದಾಗಿ ನೀವು %hu ಸಂದೇಶವನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ."
 msgstr[1] ""
-
-#, fuzzy, c-format
+"ಒಂದು ಅಜ್ಞಾತ ಕಾರಣದಿಂದಾಗಿ ನೀವು %hu ಸಂದೇಶಗಳನ್ನು  (%s ಇವರಿಂದ) ಕಳೆದುಕೊಂಡಿರಿ."
+
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "(%s) ಸಂದೇಶ ಕಳಿಸಲು ಆಗಲಿಲ್ಲ"
+msgstr "ಸಂದೇಶವನ್ನು ಕಳಿಸಲು ಆಗಲಿಲ್ಲ: %s(%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
-msgstr "ಸಂದೇಶ: %s  ಕಳಿಸಲಾಗಲಿಲ್ಲ"
-
-#, fuzzy, c-format
+msgstr "ಸಂದೇಶವನ್ನು ಕಳಿಸಲು ಆಗಲಿಲ್ಲ: %s"
+
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "%s ರಿಗೆ ಸಂದೇಶ ಕಳಿಸಲಾಗಲಿಲ್ಲ"
-
-#, fuzzy, c-format
+msgstr "ಸಂದೇಶವನ್ನು %s ರವರಿಗೆ ಕಳಿಸಲು ಆಗಲಿಲ್ಲ: %s (%s)"
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "%s ರಿಗೆ ಸಂದೇಶ ಕಳಿಸಲಾಗಲಿಲ್ಲ"
+msgstr "ಸಂದೇಶವನ್ನು %s ರವರಿಗೆ ಕಳಿಸಲು ಆಗಲಿಲ್ಲ: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7201,31 +7333,28 @@
 msgstr "ಗೊತ್ತಿಲ್ಲದ ಕಾರಣ:"
 
 msgid "Online Since"
-msgstr ""
+msgstr "ಈ ಸಮಯದಿಂದ ಆನ್‌ಲೈನಿನಲ್ಲಿದ್ದಾರೆ"
 
 msgid "Member Since"
-msgstr ""
+msgstr "ಈ ಸಮಯದಿಂದ ಸದಸ್ಯರಾಗಿದ್ದಾರೆ"
 
 msgid "Capabilities"
-msgstr ""
+msgstr "ಸಾಮರ್ಥ್ಯಗಳು"
 
 msgid "Your AIM connection may be lost."
-msgstr ""
+msgstr "ನಿಮ್ಮ AIM ಸಂಪರ್ಕವು ಇಲ್ಲವಾಗಬಹುದು."
 
 #. The conversion failed!
 msgid ""
 "[Unable to display a message from this user because it contained invalid "
 "characters.]"
 msgstr ""
-
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
+"[ಈ ಬಳಕೆದಾರರಿಂದ ಸಂದೇಶಗಳನ್ನು ತೋರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಇದು ಸರಿಯಲ್ಲದ ಅಕ್ಷರಗಳನ್ನು "
+"ಹೊಂದಿದೆ.]"
 
 #, c-format
 msgid "You have been disconnected from chat room %s."
-msgstr ""
+msgstr "ಮಾತುಕತೆ ಕೋಣೆ %s ಇಂದ ನಿಮ್ಮ ಸಂಪರ್ಕವು ಕಡಿದು ಹೋಗಿದೆ."
 
 msgid "Mobile Phone"
 msgstr "ಸಂಚಾರಿ ದೂರವಾಣಿ"
@@ -7254,21 +7383,21 @@
 msgstr "ಜಾಲಪುಟ"
 
 msgid "Pop-Up Message"
-msgstr ""
+msgstr "ಪುಟಿಕೆ(ಪಾಪಪ್) ಸಂದೇಶ"
 
 #, c-format
 msgid "The following username is associated with %s"
 msgid_plural "The following usernames are associated with %s"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ಈ ಕೆಳಗಿನ ಬಳಕೆದಾರಹೆಸರು %s ರವರಿಗೆ ಸಂಬಂಧಿಸಿದ್ದಾಗಿರುತ್ತದೆ"
+msgstr[1] "ಈ ಕೆಳಗಿನ ಬಳಕೆದಾರಹೆಸರುಗಳು %s ರವರಿಗೆ ಸಂಬಂಧಿಸಿದ್ದಾಗಿರುತ್ತದೆ"
 
 #, c-format
 msgid "No results found for email address %s"
-msgstr ""
+msgstr "%s ಎಂಬ ಇಮೈಲ್ ವಿಳಾಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಯಾವುದೆ ಫಲಿತಾಂಶವು ಕಂಡುಬಂದಿಲ್ಲ"
 
 #, c-format
 msgid "You should receive an email asking to confirm %s."
-msgstr ""
+msgstr "%s ಅನ್ನು ಖಚಿತಪಡಿಸುವಂತೆ ನಿಮ್ಮನ್ನು ಕೇಳುವ ಒಂದು ಇಮೈಲ್ ನಿಮಗೆ ಬರಲಿದೆ."
 
 msgid "Account Confirmation Requested"
 msgstr "ಖಾತೆ ಧೃಡೀಕರಣ ಕೋರಲಾಗಿದೆ"
@@ -7278,34 +7407,45 @@
 "Error 0x%04x: Unable to format username because the requested name differs "
 "from the original."
 msgstr ""
+"ದೋಷ 0x%04x: ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಫಾರ್ಮಾಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ ಏಕೆಂದರೆ ಮನವಿ ಸಲ್ಲಿಸಲಾದ "
+"ಹೆಸರು ಮೂಲ ಹೆಸರಿಗಿಂತ ಭಿನ್ನವಾಗಿದೆ."
 
 #, c-format
 msgid "Error 0x%04x: Unable to format username because it is invalid."
 msgstr ""
+"ದೋಷ 0x%04x: ಬಳಕೆದಾರ ಹೆಸರು ಸರಿಯಿಲ್ಲದ ಕಾರಣನ್ನು ಅದನ್ನು ಫಾರ್ಮಾಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to format username because the requested name is too "
 "long."
 msgstr ""
+"ದೋಷ 0x%04x: ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಫಾರ್ಮಾಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ ಏಕೆಂದರೆ ಮನವಿ ಸಲ್ಲಿಸಲಾದ "
+"ಹೆಸರು ಬಹಳ ಉದ್ದವಾಗಿದೆ."
 
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change email address because there is already a "
 "request pending for this username."
 msgstr ""
+"ದೋಷ 0x%04x: ಈ ಬಳಕೆದಾರ ಹೆಸರಿಗಾಗಿ ಒಂದು ಮನವಿ ಈಗಾಗಲೆ ಬಾಕಿ ಇರುವುದರಿಂದ ಇಮೈಲ್ "
+"ವಿಳಾಸವನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change email address because the given address has "
 "too many usernames associated with it."
 msgstr ""
+"ದೋಷ 0x%04x: ಈ ಬಳಕೆದಾರ ಹೆಸರಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ಬಹಳಷ್ಟು ಇಮೈಲ್ ವಿಳಾಸವನ್ನು "
+"ಒದಗಿಸಿರುವುದರಿಂದ ಇಮೈಲ್ ವಿಳಾಸವನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 #, c-format
 msgid ""
 "Error 0x%04x: Unable to change email address because the given address is "
 "invalid."
 msgstr ""
+"ದೋಷ 0x%04x: ಒದಗಿಸಿರುವ ವಿಳಾಸವು ಸರಿಯಿಲ್ಲದ ಕಾರಣ ಇಮೈಲ್ ವಿಳಾಸವನ್ನು ಬದಲಾಯಿಸಲು "
+"ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 #, c-format
 msgid "Error 0x%04x: Unknown error."
@@ -7316,7 +7456,7 @@
 
 #, c-format
 msgid "The email address for %s is %s"
-msgstr " %s ಇವರ  ವಿ-ಅಂಚೆವಿಳಾಸ - %s"
+msgstr " %s ಇವರ  ಇ-ಮೈಲ್‌ ವಿಳಾಸವು %s ಆಗಿದೆ"
 
 msgid "Account Info"
 msgstr "ಖಾತೆಯ ಮಾಹಿತಿ"
@@ -7324,15 +7464,20 @@
 msgid ""
 "Your IM Image was not sent. You must be Direct Connected to send IM Images."
 msgstr ""
+"ನಿಮ್ಮ IM ಚಿತ್ರಿಕೆಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. IM ಚಿತ್ರಿಕೆಗಳನ್ನು ಕಳುಹಿಸಲು ನೀವು "
+"ನೇರವಾಗಿ (ಡೈರೆಕ್ಟ್) ಸಂಪರ್ಕಿತಗೊಂಡಿರಬೇಕು."
 
 msgid "Unable to set AIM profile."
-msgstr ""
+msgstr "AIM ಪ್ರೊಫೈಲನ್ನು ಸಿದ್ಧಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
 
 msgid ""
 "You have probably requested to set your profile before the login procedure "
 "completed.  Your profile remains unset; try setting it again when you are "
 "fully connected."
 msgstr ""
+"ಪ್ರವೇಶಿಸುವ ಪ್ರಕ್ರಿಯೆ ಪೂರ್ಣಗೊಳ್ಳುವ ಮೊದಲೆ ನೀವು ಬಹುಷಃ ನಿಮ್ಮ ವ್ಯಕ್ತಿಪರಿಚಯವನ್ನು(ಪ್ರೊಫೈಲ್) "
+"ಸಿದ್ಧಗೊಳಿಸಿರಬಹುದು. ನಿಮ್ಮ ಪರಿಚಯ ಚಿತ್ರಣವು ಸಿದ್ಧಗೊಂಡಿರುವುದಿಲ್ಲ; ನೀವು ಸಂಪೂರ್ಣವಾಗಿ "
+"ಸಂಪರ್ಕಿತಗೊಂಡಾಗ ಇದನ್ನು ಇನ್ನೊಮ್ಮೆ ಸಿದ್ಧಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ."
 
 #, c-format
 msgid ""
@@ -7342,10 +7487,14 @@
 "The maximum profile length of %d bytes has been exceeded.  It has been "
 "truncated for you."
 msgstr[0] ""
+"ವ್ಯಕ್ತಿಪರಿಚಯದ ಗರಿಷ್ಟ ಗಾತ್ರವಾದಂತಹ %d ಬೈಟನ್ನು ಮೀರಿದ್ದೀರಿ.  ಅದು ತುಂಡರಿಸಿದಂತೆ "
+"ಕಾಣಿಸುತ್ತದೆ."
 msgstr[1] ""
+"ವ್ಯಕ್ತಿಪರಿಚಯದ ಗರಿಷ್ಟ ಗಾತ್ರವಾದಂತಹ %d ಬೈಟುಗಳನ್ನು ಮೀರಿದ್ದೀರಿ.  ಅದು ತುಂಡರಿಸಿದಂತೆ "
+"ಕಾಣಿಸುತ್ತದೆ."
 
 msgid "Profile too long."
-msgstr ""
+msgstr "ವ್ಯಕ್ತಿಪರಿಚಯದ ಗಾತ್ರವು ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ."
 
 #, c-format
 msgid ""
@@ -7355,10 +7504,14 @@
 "The maximum away message length of %d bytes has been exceeded.  It has been "
 "truncated for you."
 msgstr[0] ""
+"ಆಚೆ ಹೋಗುವ ಸಂದೇಶದ ಗರಿಷ್ಟ ಗಾತ್ರವಾದಂತಹ %d ಬೈಟನ್ನು ಮೀರಿದ್ದೀರಿ.  ಅದು ತುಂಡರಿಸಿದಂತೆ "
+"ಕಾಣಿಸುತ್ತದೆ."
 msgstr[1] ""
+"ಆಚೆ ಹೋಗುವ ಸಂದೇಶದ ಗರಿಷ್ಟ ಗಾತ್ರವಾದಂತಹ %d ಬೈಟ್‌ಗಳನ್ನು ಮೀರಿದ್ದೀರಿ.  ಅದು ತುಂಡರಿಸಿದಂತೆ "
+"ಕಾಣಿಸುತ್ತದೆ."
 
 msgid "Away message too long."
-msgstr ""
+msgstr "ಆಚೆ ಹೋಗುವ ಸಂದೇಶವು ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ."
 
 #, c-format
 msgid ""
@@ -7366,39 +7519,47 @@
 "be a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-
-#, fuzzy
+"%s ಎಂಬ ಗೆಳೆಯನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ ಏಕೆಂದರೆ ಬಳಕೆದಾರಹೆಸರು ಅಮಾನ್ಯವಾಗಿದೆ.  "
+"ಬಳಕೆದಾರ ಹೆಸರುಗಳು ಒಂದು ಸರಿಯಾದ ಇಮೈಲ್ ವಿಳಾಸ ಆಗಿರಬೇಕು, ಅಥವ ಅದು ಕೇವಲ ಅಕ್ಷರಗಳಿಂದ "
+"ಮಾತ್ರ ಆರಂಭಗೊಳ್ಳಬೇಕು ಹಾಗು ಕೇವಲ ಅಕ್ಷರಗಳು, ಅಂಕೆಗಳು ಹಾಗು ಖಾಲಿ ಸ್ಥಳಗಳನ್ನು ಹೊಂದಿರಬೇಕು, "
+"ಅಥವ ಕೇವಲ ಅಂಕೆಗಳನ್ನು ಮಾತ್ರ ಹೊಂದಿರಬೇಕು."
+
 msgid "Unable to Retrieve Buddy List"
-msgstr "ಮಾತುಕತೆಯಲ್ಲಿ ಗೆಳೆಯನನ್ನು ಸೇರಿಕೊಳ್ಳಲಾಗಲಿಲ್ಲ"
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಮರಳಿ ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
 msgid ""
 "The AIM servers were temporarily unable to send your buddy list.  Your buddy "
 "list is not lost, and will probably become available in a few minutes."
 msgstr ""
+"ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಕಳುಹಿಸಲು AIM ಪರಿಚಾರಕಗಳಿಂದ ತಾತ್ಕಾಲಿಕವಾಗಿ ಅಸಾಧ್ಯವಾಗಿದೆ.  "
+"ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯು ಎಲ್ಲಿಯೂ ಹೋಗಿರುವುದಿಲ್ಲ, ಹಾಗು ಒಂದಿಷ್ಟು ಕ್ಷಣಗಳ ನಂತರ ಮತ್ತೆ "
+"ಲಭ್ಯವಾಗಬಹುದು."
 
 msgid "Orphans"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಅನಾಥರು"
+
+#, c-format
 msgid ""
 "Unable to add the buddy %s because you have too many buddies in your buddy "
 "list.  Please remove one and try again."
 msgstr ""
-"ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿ ಬಹಳಷ್ಟು ಗೆಳೆಯರಿರುವದರಿಂದ ಗೆಳೆಯ %s ರನ್ನು ಸೇರಿಸಲಾಗಲಿಲ್ಲ . . "
-"ಒಬ್ಬರನ್ನು ತೆಗೆದು ಹಾಕಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿರಿ "
+"ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿ ಬಹಳಷ್ಟು ಗೆಳೆಯರಿರುವುದರಿಂದ ಗೆಳೆಯ %s ರನ್ನು ಸೇರಿಸಲಾಗಲಿಲ್ಲ. "
+"ಒಬ್ಬರನ್ನು ತೆಗೆದು ಹಾಕಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿರಿ."
 
 msgid "(no name)"
-msgstr "(ಹೆಸರು ಇಲ್ಲ)"
-
-#, fuzzy, c-format
+msgstr "(ಹೆಸರಿಲ್ಲ)"
+
+#, c-format
 msgid "Unable to add the buddy %s for an unknown reason."
-msgstr "ನಿಮ್ಮ ಆದೇಶವು ವಿಫಲವಾಯಿತು. ಕಾರಣ ತಿಳಿದುಬರಲಿಲ್ಲ."
-
-#, fuzzy, c-format
+msgstr "ಗೊತ್ತಿಲ್ಲದ ಕಾರಣದಿಂದಾಗಿ ಗೆಳೆಯ %s ರನ್ನು ಸೇರಿಸಲಾಗಲಿಲ್ಲ."
+
+#, c-format
 msgid ""
 "The user %s has given you permission to add him or her to your buddy list.  "
 "Do you want to add this user?"
-msgstr "ನೀವು ಗೆಳೆಯರ ಪಟ್ಟಿಯಿಂದ  %s ಮಾತುಕತೆಯನ್ನು ತೆಗೆದು ಕುವವರಿದ್ದೀರಿ.ಮುಂದುವರೆಯಬೇಕೇ?"
+msgstr ""
+"%s ರವರು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಅವರನ್ನು ಸೇರಿಸಲು ಅನುಮತಿಸಿದ್ದಾರೆ. ಈ ಬಳಕೆದಾರರನ್ನು "
+"ಸೇರಿಸುವುದನ್ನು ಮುಂದುವರೆಸಬೇಕೇ?"
 
 msgid "Authorization Given"
 msgstr "ಅಧಿಕಾರ ಕೊಟ್ಟಿದೆ"
@@ -7407,6 +7568,8 @@
 #, c-format
 msgid "The user %s has granted your request to add them to your buddy list."
 msgstr ""
+"%s ಎಂಬ ಬಳಕೆದಾರರನ್ನು ನೀವು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಬೇಕೆಂದಿರುವ ಮನವಿಯನ್ನು "
+"ಅನುಮತಿಸಿದ್ದಾರೆ."
 
 msgid "Authorization Granted"
 msgstr "ಅಧಿಕಾರ ಕೊಡಲಾಗಿದೆ."
@@ -7418,76 +7581,83 @@
 "following reason:\n"
 "%s"
 msgstr ""
+"%s ಎಂಬ ಬಳಕೆದಾರರನ್ನು ನೀವು ನಿಮ್ಮ ಗೆಳೆಯರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಬೇಕೆಂದಿರುವ ನಿಮ್ಮ ಮನವಿಯನ್ನು ಈ "
+"ಕೆಳಗಿನ ಕಾರಣದಿಂದಾಗಿ ತಿರಸ್ಕರಿಸಿದ್ದಾರೆ:\n"
+"%s"
 
 msgid "Authorization Denied"
-msgstr ""
+msgstr "ಅಧಿಕಾರ ನೀಡಿಕೆಯನ್ನು ನಿರಾಕರಿಸಲಾಗಿದೆ"
 
 msgid "_Exchange:"
-msgstr "ವಿನಿಮಯ:(_E)"
+msgstr "ವಿನಿಮಯ(_E):"
 
 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats."
 msgstr ""
+"ನಿಮ್ಮ IM ಚಿತ್ರಿಕೆಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. IM ಚಿತ್ರಿಕೆಗಳನ್ನು AIM ಮಾತುಕತೆಗಳಲ್ಲಿ "
+"ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿರುವುದಿಲ್ಲ"
 
 msgid "iTunes Music Store Link"
-msgstr ""
+msgstr "iTunes ಮ್ಯೂಸಿಕ್ ಸ್ಟೋರ್ ಲಿಂಕ್"
 
 #, c-format
 msgid "Buddy Comment for %s"
-msgstr ""
+msgstr "%s ಬಗ್ಗೆ ಗೆಳೆಯನ ಅಭಿಪ್ರಾಯ"
 
 msgid "Buddy Comment:"
-msgstr ""
+msgstr "ಗೆಳೆಯನ ಅಭಿಪ್ರಾಯ:"
 
 #, c-format
 msgid "You have selected to open a Direct IM connection with %s."
-msgstr ""
+msgstr "ನೀವು %s ರವರೊಂದಿಗೆ ಒಂದು ನೇರ IM ಸಂಪರ್ಕವನ್ನು ತೆರೆದಿದ್ದೀರಿ."
 
 msgid ""
 "Because this reveals your IP address, it may be considered a security risk.  "
 "Do you wish to continue?"
 msgstr ""
-
-#, fuzzy
+"ಏಕೆಂದರೆ ಇದು ನಿಮ್ಮ IP ವಿಳಾಸವನ್ನು ತೋರಿಸುತ್ತದೆ, ಹಾಗು ಇದನ್ನು ಒಂದು ಸುರಕ್ಷತಾ ಅಪಾಯ ಎಂದು "
+"ಪರಿಗಣಿಸಬಹುದಾಗಿರುತ್ತದೆ.  ನೀವು ಮುಂದುವರೆಯಲು ಬಯಸುತ್ತೀರೆ?"
+
 msgid "C_onnect"
-msgstr "ಕನೆಕ್ಟ್ ಆಗಿ"
-
-#, fuzzy
+msgstr "ಸಂಪರ್ಕ ಕಲ್ಪಿಸು (_o)"
+
 msgid "You closed the connection."
-msgstr "ಸರ್ವರ್ ಸಂಪರ್ಕ ಮುಚ್ಚಿದೆ"
+msgstr "ನೀವು ಸಂಪರ್ಕವನ್ನು ಸಂಪರ್ಕ ಕಡಿದಿದ್ದೀರಿ."
 
 msgid "Get AIM Info"
-msgstr ""
+msgstr "AIM ಮಾಹಿತಿ ಪಡೆಯಿರಿ"
 
 #. We only do this if the user is in our buddy list
 msgid "Edit Buddy Comment"
-msgstr ""
+msgstr "ಗೆಳೆಯನ ಅಭಿಪ್ರಾಯವನ್ನು ಸಂಪಾದಿಸಿ"
 
 msgid "Get Status Msg"
-msgstr ""
+msgstr "ಸ್ಥಿತಿ ಸಂದೇಶವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"
 
 msgid "End Direct IM Session"
-msgstr ""
+msgstr "ನೇರವಾದ IM ಅಧಿವೇಶನವನ್ನು ಅಂತ್ಯಗೊಳಿಸು"
 
 msgid "Direct IM"
-msgstr ""
+msgstr "ನೇರವಾದ IM"
 
 msgid "Re-request Authorization"
-msgstr ""
+msgstr "(ಉತ್ತರ-)ಅಧಿಕಾರ ಕೋರಿಕೆ"
 
 msgid "Require authorization"
-msgstr ""
+msgstr "ಅಧಿಕಾರದ ಅಗತ್ಯವಿದೆ"
 
 msgid "Web aware (enabling this will cause you to receive SPAM!)"
-msgstr ""
+msgstr "ಜಾಲ ತಿಳುವಳಿಕೆ (ಇದನ್ನು ಶಕ್ತಗೊಳಿಸಿದಲ್ಲಿ ನಿಮಗೆ SPAM ಬರತೊಡಗುತ್ತದೆ!)"
 
 msgid "ICQ Privacy Options"
-msgstr ""
+msgstr "ICQ ಗೌಪ್ಯತಾ ಆಯ್ಕೆಗಳು"
 
 msgid "The new formatting is invalid."
-msgstr ""
+msgstr "ಹೊಸ ಫಾರ್ಮಾಟ್ ತಪ್ಪಾಗಿದೆ."
 
 msgid "Username formatting can change only capitalization and whitespace."
 msgstr ""
+"ಬಳಕೆದಾರಹೆಸರನ್ನು ಫಾರ್ಮಾಟ್‌ ಮಾಡಿದಾಗ ಕೇವಲ ದೊಡ್ಡಅಕ್ಷರಗಳು ಹಾಗು ಖಾಲಿಜಾಗಗಳು ಮಾತ್ರ "
+"ಬದಲಾಗುತ್ತವೆ."
 
 msgid "Change Address To:"
 msgstr "ವಿಳಾಸವನ್ನು ಹೀಗೆ ಬದಲಿಸಿ"
@@ -7502,191 +7672,179 @@
 "You can re-request authorization from these buddies by right-clicking on "
 "them and selecting \"Re-request Authorization.\""
 msgstr ""
+"ನೀವು ಈ ಗೆಳೆಯರಿಂದ ಮರಳಿ ದೃಢೀಕರಿಸುವಂತೆ ಮನವಿ ಸಲ್ಲಿಸಲು ಅವರ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿ ನಂತರ "
+"\"ದೃಢೀಕರಿಸಲು ಮರಳಿ-ಮನವಿ ಮಾಡಿ\" ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು. "
 
 msgid "Find Buddy by Email"
-msgstr ""
+msgstr "ಇಮೈಲ್ ಮೂಲಕ ಗೆಳೆಯನನ್ನು ಹುಡುಕಿ"
 
 msgid "Search for a buddy by email address"
-msgstr ""
+msgstr "ಇ-ಮೈಲ್‌ ವಿಳಾಸವನ್ನು ಬಳಸಿಕೊಂಡು ಒಬ್ಬ ಗೆಳೆಯನಿಗಾಗಿ ಹುಡುಕಿ"
 
 msgid "Type the email address of the buddy you are searching for."
-msgstr ""
-
-#, fuzzy
+msgstr "ನೀವು ಹುಡುಕಲು ಬಯಸುವ ಗೆಳೆಯನ ಇ-ಮೈಲ್‌ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ."
+
 msgid "_Search"
-msgstr "ಹುಡುಕಿ"
-
-#, fuzzy
+msgstr "ಹುಡುಕು(_S)"
+
 msgid "Set User Info (web)..."
-msgstr "ಬಳಕೆದಾರರ ಮಾಹಿತಿ ಕೊಡಿ.."
+msgstr "ಬಳಕೆದಾರರ ಮಾಹಿತಿ ಸೂಚಿಸಿ (ಜಾಲ).."
 
 #. This only happens when connecting with the old-style BUCP login
 msgid "Change Password (web)"
 msgstr "ಗುಪ್ತಪದ ಬದಲಿಸಿ (ಜಾಲ)"
 
 msgid "Configure IM Forwarding (web)"
-msgstr ""
+msgstr "IM ಫಾರ್ವಾರ್ಡಿಂಗ್ ಅನ್ನು ಸಂರಚಿಸಿ (web)"
 
 #. ICQ actions
 msgid "Set Privacy Options..."
-msgstr ""
+msgstr "ಗೌಪ್ಯತಾ ಆಯ್ಕೆಗಳನ್ನು ಸೂಚಿಸಿ..."
 
 #. AIM actions
 msgid "Confirm Account"
-msgstr ""
+msgstr "ಖಾತೆಯನ್ನು ಖಚಿತಪಡಿಸಿ"
 
 msgid "Display Currently Registered Email Address"
-msgstr ""
+msgstr "ಪ್ರಸಕ್ತ ನೋಂದಾಯಿಸಲಾದ ಇ-ಮೈಲ್‌ ವಿಳಾಸವನ್ನು ತೋರಿಸು"
 
 msgid "Change Currently Registered Email Address..."
-msgstr ""
+msgstr "ಪ್ರಸಕ್ತ ನೋಂದಾಯಿಸಲಾದ ಇ-ಮೈಲ್‌ ವಿಳಾಸವನ್ನು ಬದಲಾಯಿಸಿ..."
 
 msgid "Show Buddies Awaiting Authorization"
-msgstr ""
+msgstr "ದೃಢೀಕರಣಕ್ಕಾಗಿ ಕಾಯುತ್ತಿರುವ ಗೆಳೆಯರನ್ನು ತೋರಿಸು"
 
 msgid "Search for Buddy by Email Address..."
-msgstr ""
+msgstr "ಇ-ಮೈಲ್‌ ವಿಳಾಸವನ್ನು ಬಳಸಿಕೊಂಡು ಗೆಳೆಯನಿಗಾಗಿ ಹುಡುಕಿ..."
 
 msgid "Search for Buddy by Information"
-msgstr ""
-
-#, fuzzy
+msgstr "ಮಾಹಿತಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಒಬ್ಬ ಗೆಳೆಯನಿಗಾಗಿ ಹುಡುಕಿ"
+
 msgid "Use clientLogin"
-msgstr "ಬಳಕೆದಾರರು ಲಾಗಿನ್ ಆಗಿಲ್ಲ"
+msgstr "clientLogin ಅನ್ನು ಬಳಸಿ"
 
 msgid ""
 "Always use AIM/ICQ proxy server for\n"
 "file transfers and direct IM (slower,\n"
 "but does not reveal your IP address)"
 msgstr ""
+"ಕಡತ ವರ್ಗಾವಣೆಗೆ ಹಾಗ ನೇರ IM ಗೆ ಯಾವಾಗಲೂ\n"
+"AIM/ICQ ಪ್ರಾಕ್ಸಿ ಪರಿಚಾರಕವನ್ನು ಬಳಸಿ (ನಿಧಾನವಾಗಿದ್ದರೂ\n"
+"ಸಹ ನಿಮ್ಮ IP ವಿಳಾಸವನ್ನು ಹೊರಗೆಡುವುದಿಲ್ಲ)"
 
 msgid "Allow multiple simultaneous logins"
-msgstr ""
+msgstr "ಒಂದೇ ಬಾರಿಗೆ ಅನೇಕ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸು"
 
 #, c-format
 msgid "Asking %s to connect to us at %s:%hu for Direct IM."
-msgstr ""
+msgstr "%s ರವರು %s:%hu ಯಲ್ಲಿ ನೇರ IM ಗೆ ಸಂಪರ್ಕಿತಗೊಳ್ಳುವಂತೆ ನಮ್ಮನ್ನು ಕೇಳುತ್ತಿದ್ದಾರೆ."
 
 #, c-format
 msgid "Attempting to connect to %s:%hu."
-msgstr ""
+msgstr "%s:%hu ನೊಂದಿಗೆ ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ."
 
 msgid "Attempting to connect via proxy server."
-msgstr ""
+msgstr "ಪ್ರಾಕ್ಸಿ ಪರಿಚಾರಕದ ಮೂಲಕ ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ."
 
 #, c-format
 msgid "%s has just asked to directly connect to %s"
-msgstr ""
+msgstr "%s ರವರು %s ಗೆ ನೇರವಾಗಿ ಸಂಪರ್ಕಸಾಧಿಸುವಂತೆ ಕೇಳಿದ್ದಾರೆ"
 
 msgid ""
 "This requires a direct connection between the two computers and is necessary "
 "for IM Images.  Because your IP address will be revealed, this may be "
 "considered a privacy risk."
 msgstr ""
+"ಇದಕ್ಕಾಗಿ ಎರಡು ಗಣಕಗಳ ನಡುವೆ ನೇರ ಸಂಪರ್ಕದ ಅಗತ್ಯವಿರುತ್ತದೆ ಹಾಗು ಇದು IM ಚಿತ್ರಗಳಿಗೆ "
+"ಅತ್ಯಗತ್ಯವಾಗಿರುತ್ತದೆ.  ನಿಮ್ಮ IP ವಿಳಾಸವನ್ನು ಹೊರಗೆಡವುವುದರಿಂದ, ಇದನ್ನು ನಿಮ್ಮ ಖಾಸಗಿತನಕ್ಕೆ "
+"ಎರಗುವ ಅಪಾಯ ಎಂದು ಭಾವಿಸಲಾಗುತ್ತದೆ."
 
 msgid "Aquarius"
-msgstr ""
-
-#, fuzzy
+msgstr "ಕುಂಭ(ಅಕ್ವೇರಿಸ್)"
+
 msgid "Pisces"
-msgstr "ದನಿಗಳು"
-
-#, fuzzy
+msgstr "ಮೀನ(ಪೈಸೀಸ್)"
+
 msgid "Aries"
-msgstr "ವಿಳಾಸ"
-
-#, fuzzy
+msgstr "ಮೇಷ(ಏರೀಸ್)"
+
 msgid "Taurus"
-msgstr "ಟರ್ಕಿಶ್"
-
-#, fuzzy
+msgstr "ವೃಷಭ(ಟಾರಸ್)"
+
 msgid "Gemini"
-msgstr "ಜರ್ಮನ್"
-
-#, fuzzy
+msgstr "ಮಿಥುನ(ಜೆಮಿನಿ)"
+
 msgid "Cancer"
-msgstr "ರದ್ದುಗೊಳಿಸಿ"
+msgstr "ಕಟಕ(ಕ್ಯಾನ್ಸರ್)"
 
 msgid "Leo"
-msgstr ""
+msgstr "ಸಿಂಹ(ಲಿಯೊ)"
 
 msgid "Virgo"
-msgstr ""
+msgstr "ಕನ್ಯಾ(ವಿರ್ಗೊ)"
 
 msgid "Libra"
-msgstr ""
-
-#, fuzzy
+msgstr "ತುಲಾ(ಲಿಬ್ರಾ)"
+
 msgid "Scorpio"
-msgstr "ಚಂದಾದಾರಿಕೆ"
+msgstr "ವೃಷ್ಚಿಕ(ಸ್ಕಾರ್ಪಿಯೊ)"
 
 msgid "Sagittarius"
-msgstr ""
+msgstr "ಧನು(ಸ್ಯಾಜಿಟೇರಿಯಸ್)"
 
 msgid "Capricorn"
-msgstr ""
-
-#, fuzzy
+msgstr "ಮಕರ(ಕ್ಯಾಪ್ರಿಕಾರ್ನ್)"
+
 msgid "Rat"
-msgstr "ಕಚ್ಚಾ"
-
-#, fuzzy
+msgstr "ಇಲಿ"
+
 msgid "Ox"
-msgstr "ಓ"
-
-#, fuzzy
+msgstr "ಎತ್ತು"
+
 msgid "Tiger"
-msgstr "ಶೀರ್ಷಿಕೆ"
+msgstr "ಹುಲಿ"
 
 msgid "Rabbit"
-msgstr ""
+msgstr "ಮೊಲ"
 
 msgid "Dragon"
-msgstr ""
-
-#, fuzzy
+msgstr "ಡ್ರಾಗನ್"
+
 msgid "Snake"
-msgstr "ಉಳಿಸಿ"
-
-#, fuzzy
+msgstr "ಹಾವು"
+
 msgid "Horse"
-msgstr "ಆತಿಥೇಯಗಣಕ"
+msgstr "ಕುದುರೆ"
 
 msgid "Goat"
-msgstr ""
-
-#, fuzzy
+msgstr "ಮೇಕೆ"
+
 msgid "Monkey"
-msgstr "ಏನೂ ಇಲ್ಲ"
-
-#, fuzzy
+msgstr "ಕೋತಿ"
+
 msgid "Rooster"
-msgstr "ನೋಂದಾಯಿಸಿ"
+msgstr "ಹುಂಜ"
 
 msgid "Dog"
-msgstr ""
-
-#, fuzzy
+msgstr "ನಾಯಿ"
+
 msgid "Pig"
-msgstr "ಪಿಂಗ್"
+msgstr "ಹಂದಿ"
 
 msgid "Other"
 msgstr "ಇತರ"
 
-#, fuzzy
 msgid "Visible"
-msgstr "ಅದೃಶ್ಯ"
+msgstr "ಗೋಚರ"
 
 msgid "Friend Only"
-msgstr ""
-
-#, fuzzy
+msgstr "ಸ್ನೇಹಿತನು ಮಾತ್ರ"
+
 msgid "Private"
-msgstr "ಖಾಸಗಿತನ"
-
-#, fuzzy
+msgstr "ಖಾಸಗಿ"
+
 msgid "QQ Number"
-msgstr "ದೂರವಾಣಿ ಸಂಖ್ಯೆ"
+msgstr "QQ ಸಂಖ್ಯೆ"
 
 msgid "Country/Region"
 msgstr "ದೇಶ / ಪ್ರದೇಶ"
@@ -7700,9 +7858,8 @@
 msgid "Phone Number"
 msgstr "ದೂರವಾಣಿ ಸಂಖ್ಯೆ"
 
-#, fuzzy
 msgid "Authorize adding"
-msgstr "ಅಧಿಕಾರ ನೀಡಿ"
+msgstr "ಸೇರಿಸಲು ಅಧಿಕಾರ ನೀಡಿ"
 
 msgid "Cellphone Number"
 msgstr "ಸೆಲ್ ಫೋನ್ ಸಂಖ್ಯೆ"
@@ -7710,84 +7867,69 @@
 msgid "Personal Introduction"
 msgstr "ವೈಯುಕ್ತಿಕ ಪರಿಚಯ"
 
-#, fuzzy
 msgid "City/Area"
-msgstr "ನಗರ"
-
-#, fuzzy
+msgstr "ನಗರ/ಪ್ರದೇಶ"
+
 msgid "Publish Mobile"
-msgstr "ಖಾಸಗಿ ಸಂಚಾರಿ ದೂರವಾಣಿ"
-
-#, fuzzy
+msgstr "ಮೊಬೈಲ್ ಸಂಖ್ಯೆಯನ್ನು ತೋರಿಸು"
+
 msgid "Publish Contact"
-msgstr "ಅಲಿಯಾಸ್ ಸಂಪರ್ಕ"
+msgstr "ಸಂಪರ್ಕವಿಳಾಸವನ್ನು ತೋರಿಸು"
 
 msgid "College"
 msgstr "ಕಾಲೇಜು:"
 
-#, fuzzy
 msgid "Horoscope"
-msgstr "ಆತಿಥೇಯಗಣಕ"
+msgstr "ಜಾತಕ"
 
 msgid "Zodiac"
-msgstr ""
-
-#, fuzzy
+msgstr "ರಾಶಿಚಕ್ರ"
+
 msgid "Blood"
-msgstr "ತಡೆಯಲ್ಪಟ್ಟ"
-
-#, fuzzy
+msgstr "ರಕ್ತದ ಗುಂಪು"
+
 msgid "True"
-msgstr "ಟರ್ಕಿಶ್"
-
-#, fuzzy
+msgstr "ನಿಜ"
+
 msgid "False"
-msgstr "ವಿಫಲವಾಗಿದೆ"
-
-#, fuzzy
+msgstr "ಸುಳ್ಳು"
+
 msgid "Modify Contact"
-msgstr "ಖಾತೆ ಬದಲಾಯಿಸಿ"
-
-#, fuzzy
+msgstr "ಸಂಪರ್ಕವಿಳಾಸವನ್ನು  ಬದಲಾಯಿಸಿ"
+
 msgid "Modify Address"
-msgstr "ಮನೆವಿಳಾಸ"
-
-#, fuzzy
+msgstr "ವಿಳಾಸವನ್ನು ಬದಲಾಯಿಸಿ"
+
 msgid "Modify Extended Information"
-msgstr "ನನ್ನ ಮಾಹಿತಿ ತಿದ್ದಿ"
-
-#, fuzzy
+msgstr "ವಿಸ್ತರಿಸಲಾದ ಮಾಹಿತಿಯನ್ನು ಮಾರ್ಪಡಿಸಿ"
+
 msgid "Modify Information"
-msgstr "ನನ್ನ ಮಾಹಿತಿಯನ್ನು ತಿದ್ದಿ"
+msgstr "ಮಾಹಿತಿಯನ್ನು ಮಾರ್ಪಡಿಸಿ"
 
 msgid "Update"
 msgstr "ಪರಿಷ್ಕರಿಸಿ"
 
-#, fuzzy
 msgid "Could not change buddy information."
-msgstr "ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸ್ನೇಹಿತರ ವಿವರಗಳನ್ನು ಸೇರಿಸಿ"
+msgstr "ಗೆಳೆಯನ ಮಾಹಿತಿಯನ್ನು ಬದಲಾಯಿಸಲಾಗಲಿಲ್ಲ."
 
 msgid "Mobile"
-msgstr "ಸಂಚಾರಿ"
+msgstr "ಮೊಬೈಲ್"
 
 msgid "Note"
 msgstr "ಟಿಪ್ಪಣಿ"
 
 #. callback
-#, fuzzy
 msgid "Buddy Memo"
-msgstr "_ಗೆಳೆಯ"
+msgstr "ಗೆಳೆಯನ ಮಾಹಿತಿ"
 
 msgid "Change his/her memo as you like"
-msgstr ""
-
-#, fuzzy
+msgstr "ನೀವು ಬಯಸಿದಂತೆ ಅವರ ಮೆಮೊವನ್ನು ಬದಲಾಯಿಸಿ"
+
 msgid "_Modify"
-msgstr "ಬದಲಾಯಿಸು"
-
-#, fuzzy
+msgstr "ಬದಲಾಯಿಸು(_M)"
+
 msgid "Memo Modify"
-msgstr "ಬದಲಾಯಿಸು"
+msgstr "ಮೆಮೊವನ್ನು ಬದಲಾಯಿಸಿ"
 
 msgid "Server says:"
 msgstr "ಪರಿಚಾರಕ(ಸರ್ವರ್‍) ಹೀಗೆ ಹೇಳುತ್ತದೆ:"
@@ -7798,17 +7940,15 @@
 msgid "Your request was rejected."
 msgstr "ನಿಮ್ಮ ಮನವಿಯನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ."
 
-#, fuzzy, c-format
+#, c-format
 msgid "%u requires verification"
-msgstr "%s ಸೇರಲು ಆಮಂತ್ರಣ ಅಗತ್ಯ"
-
-#, fuzzy
+msgstr "%u ಗಾಗಿ ಪರಿಶೀಲಿಸುವ ಅಗತ್ಯವಿರುತ್ತದೆ"
+
 msgid "Add buddy question"
-msgstr "ನಿಮ್ಮ ಸ್ನೇಹಿತರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಬಹುದೇ?"
-
-#, fuzzy
+msgstr "ಗೆಳೆಯರ ಪ್ರಶ್ನೆಯನ್ನು ಸೇರಿಸಿ"
+
 msgid "Enter answer here"
-msgstr "ಕೋರಿಕೆಯನ್ನು ಇಲ್ಲಿ ಸಲ್ಲಿಸಿ"
+msgstr "ಉತ್ತರವನ್ನು ಇಲ್ಲಿ ಸಲ್ಲಿಸಿ"
 
 msgid "Send"
 msgstr "ಕಳಿಸಿ"
@@ -7816,56 +7956,47 @@
 msgid "Invalid answer."
 msgstr "ತಪ್ಪು ಉತ್ತರ."
 
-#, fuzzy
 msgid "Authorization denied message:"
-msgstr "ಅಧಿಕಾರ ಕೋರಿಕೆ"
-
-#, fuzzy
+msgstr "ಅಧಿಕಾರವನ್ನು ನಿರಾಕರಿಸಲಾದ ಸಂದೇಶ:"
+
 msgid "Sorry, you're not my style."
-msgstr "ಕ್ಷಮಿಸಿ , ನೀವು ನನ್ನ ತರಹದವರಲ್ಲ..."
-
-#, fuzzy, c-format
+msgstr "ಕ್ಷಮಿಸಿ, ನೀವು ನನಗೆ ಹೊಂದಿಕೆಯಾಗುವವರಲ್ಲ."
+
+#, c-format
 msgid "%u needs authorization"
-msgstr "%d  ಬಳಕೆದಾರರಿಗೆ ಧೃಡೀಕರಣ ಅಗತ್ಯವಿದೆ"
-
-#, fuzzy
+msgstr "%u ಗೆ ಧೃಡೀಕರಣ ಅಗತ್ಯವಿದೆ"
+
 msgid "Add buddy authorize"
-msgstr "ನಿಮ್ಮ ಸ್ನೇಹಿತರ ಪಟ್ಟಿಗೆ ಸೇರಿಸಬಹುದೇ?"
-
-#, fuzzy
+msgstr "ಗೆಳೆಯರಿಗೆ ಅಧಿಕಾರ ನೀಡಿಕೆಯನ್ನು ಸೇರಿಸಿ"
+
 msgid "Enter request here"
 msgstr "ಕೋರಿಕೆಯನ್ನು ಇಲ್ಲಿ ಸಲ್ಲಿಸಿ"
 
 msgid "Would you be my friend?"
 msgstr "ನೀವು ನನ್ನ  ಸ್ನೇಹಿತರಾಗುವಿರಾ?"
 
-#, fuzzy
 msgid "QQ Buddy"
-msgstr "ಸ್ನೇಹಿತರನ್ನು ಸೇರಿಸಿ"
-
-#, fuzzy
+msgstr "QQ ಗೆಳೆಯ"
+
 msgid "Add buddy"
-msgstr "ಸ್ನೇಹಿತರನ್ನು ಸೇರಿಸಿ"
-
-#, fuzzy
+msgstr "ಗೆಳೆಯನನ್ನು ಸೇರಿಸಿ"
+
 msgid "Invalid QQ Number"
-msgstr "ತಪ್ಪು ಹೆಸರು"
-
-#, fuzzy
+msgstr "ತಪ್ಪು QQ ಸಂಖ್ಯೆ"
+
 msgid "Failed sending authorize"
-msgstr "ದಯವಿಟ್ಟು ನನಗೆ ಅಧಿಕಾರ ನೀಡಿ!"
-
-#, fuzzy, c-format
+msgstr "ಅಧಿಕಾರವನ್ನು ಕಳುಹಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
+
+#, c-format
 msgid "Failed removing buddy %u"
-msgstr "ಮಾತುಕತೆಯಲ್ಲಿ ಗೆಳೆಯನನ್ನು ಸೇರಿಕೊಳ್ಳಲಾಗಲಿಲ್ಲ"
-
-#, fuzzy, c-format
+msgstr "%u ಎಂಬ ಗೆಳೆಯನನ್ನು ತೆಗೆದು ಹಾಕುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
+
+#, c-format
 msgid "Failed removing me from %d's buddy list"
-msgstr "%s ನಿಮ್ಮನ್ನು ತಮ್ಮ ಗೆಳೆಯರಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕಿದ್ದಾರೆ "
-
-#, fuzzy
+msgstr "%d ರವರು ತಮ್ಮ ಗೆಳೆಯರಪಟ್ಟಿಯಿಂದ ನನ್ನನ್ನು ತೆಗೆದುಹಾಕುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದ್ದಾರೆ "
+
 msgid "No reason given"
-msgstr "ಕಾರಣ ಕೊಟ್ಟಿಲ್ಲ"
+msgstr "ಯಾವುದೆ ಕಾರಣ ಕೊಟ್ಟಿಲ್ಲ"
 
 #. only need to get value
 #, c-format
@@ -7876,9 +8007,9 @@
 msgstr "ನೀವು ಅವರನ್ನು ಸೇರಿಸಬಯಸುವಿರಾ?"
 
 #  ತಿರಸ�ಕರಿಸ�  ಸರಿಯಾದ ಶಬ�ದ .    ನಿರಾಕರಿಸ�   ಅಂದರೆ   ಡಿನೈ ! .
-#, fuzzy, c-format
+#, c-format
 msgid "Rejected by %s"
-msgstr "ತಿರಸ್ಕರಿಸು"
+msgstr "%s ಇಂದ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ"
 
 #, c-format
 msgid "Message: %s"
@@ -7891,294 +8022,267 @@
 msgstr "ಗುಂಪಿನ ಗುರುತು:"
 
 msgid "QQ Qun"
-msgstr ""
-
-#, fuzzy
+msgstr "QQ Qun"
+
 msgid "Please enter Qun number"
-msgstr "%sಗಾಗಿ ಹೊಸ ಹೆಸರನ್ನು ದಾಖಲಿಸಿ"
+msgstr "ದಯವಿಟ್ಟು Qun ಸಂಖ್ಯೆಯನ್ನು ದಾಖಲಿಸಿ"
 
 msgid "You can only search for permanent Qun\n"
-msgstr ""
+msgstr "ನೀವು ಕೇವಲ ಶಾಶ್ವತ Qun ಗಾಗಿ ಮಾತ್ರ ಹುಡುಕಬಹುದು\n"
 
 msgid "(Invalid UTF-8 string)"
-msgstr ""
-
-#, fuzzy
+msgstr "(ಅಮಾನ್ಯವಾದ UTF-8 ವಾಕ್ಯ)"
+
 msgid "Not member"
 msgstr "ನಾನು ಸದಸ್ಯನಲ್ಲ"
 
 msgid "Member"
-msgstr ""
-
-#, fuzzy
+msgstr "ಸದಸ್ಯ"
+
 msgid "Requesting"
-msgstr "ಸಂವಾದ ಕೋರಿರಿ"
-
-#, fuzzy
+msgstr "ಕೋರಿಕೆ"
+
 msgid "Admin"
-msgstr "ಆಡಳಿತಗಾರ:"
-
-#, fuzzy
+msgstr "ವ್ಯವಸ್ಥಾಪಕ"
+
 msgid "Notice"
-msgstr "ಟಿಪ್ಪಣಿ"
-
-#, fuzzy
+msgstr "ಸೂಚನೆ"
+
 msgid "Detail"
-msgstr "ಅಳಿಸಿಹಾಕಿ"
+msgstr "ವಿವರ"
 
 msgid "Creator"
 msgstr "ರಚಿಸಿದವರು"
 
-#, fuzzy
 msgid "About me"
-msgstr "'ಗೈಮ್ ಕುರಿತು"
-
-#, fuzzy
+msgstr "ನನ್ನ ಕುರಿತು"
+
 msgid "Category"
-msgstr "ಮಾತುಕತೆ ದೋಷ"
-
-#, fuzzy
+msgstr "ವರ್ಗ"
+
 msgid "The Qun does not allow others to join"
-msgstr "ಈ ಗುಂಪು ಇತರರನ್ನು ಸೇರಲು ಅನುಮತಿಸುವದಿಲ್ಲ"
-
-#, fuzzy
+msgstr "Qun ಇತರರು ಸೇರುವುದನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"
+
 msgid "Join QQ Qun"
-msgstr "ಮಾತುಕತೆ ಸೇರಿರಿ"
+msgstr "QQ Qun ಸೇರಿರಿ"
 
 msgid "Input request here"
 msgstr "ಕೋರಿಕೆಯನ್ನು ಇಲ್ಲಿ ಸಲ್ಲಿಸಿ"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Successfully joined Qun %s (%u)"
-msgstr "ನೀವು ಒಬ್ಬ ಸ್ನೇಹಿತರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದು ಹಾಕಿದ್ದೀರಿ."
-
-#, fuzzy
+msgstr "ನೀವು ಯಶಸ್ವಿಯಾಗಿ Qun %s ಅನ್ನು ಸೇರಿದ್ದೀರಿ (%u)"
+
 msgid "Successfully joined Qun"
-msgstr "ನೀವು ಒಬ್ಬ ಸ್ನೇಹಿತರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದು ಹಾಕಿದ್ದೀರಿ."
+msgstr "ನೀವು ಯಶಸ್ವಿಯಾಗಿ Qun ಅನ್ನು ಸೇರಿದ್ದೀರಿ"
 
 #, c-format
 msgid "Qun %u denied from joining"
-msgstr ""
+msgstr "Qun %u ಸೇರಲು ನಿರಾಕರಿಸಿದೆ"
 
 msgid "QQ Qun Operation"
-msgstr ""
-
-#, fuzzy
+msgstr "QQ Qun ಕಾರ್ಯಾಚರಣೆ"
+
 msgid "Failed:"
-msgstr "ವಿಫಲವಾಗಿದೆ"
+msgstr "ವಿಫಲವಾಗಿದೆ:"
 
 msgid "Join Qun, Unknown Reply"
-msgstr ""
-
-#, fuzzy
+msgstr "Qun ಅನ್ನು ಸೇರಿಕೊಳ್ಳಿ, ಅಜ್ಞಾತವಾದ ಪ್ರತ್ಯುತ್ತರ"
+
 msgid "Quit Qun"
-msgstr "ಮಾತುಕತೆ ಸೇರಿರಿ"
+msgstr "Qun ಇಂದ ನಿರ್ಗಮಿಸಿ"
 
 msgid ""
 "Note, if you are the creator, \n"
 "this operation will eventually remove this Qun."
 msgstr ""
-
-#, fuzzy
+"ಸೂಚನೆ, ನೀವು ಇದರ ನಿರ್ಮಾಣಗಾರರಾಗಿದ್ದರೆ, \n"
+"ಈ ಕಾರ್ಯದಿಂದಾಗಿ Qun ಅನ್ನು ಹಾಕಲ್ಪಡುತ್ತದೆ."
+
 msgid "Sorry, you are not our style"
-msgstr "ಕ್ಷಮಿಸಿ , ನೀವು ನನ್ನ ತರಹದವರಲ್ಲ..."
-
-#, fuzzy
+msgstr "ಕ್ಷಮಿಸಿ, ನೀವು ನಮಗೆ ಹೊಂದಿಕೆಯಾಗುವವರಲ್ಲ"
+
 msgid "Successfully changed Qun members"
-msgstr "ನೀವು ಒಬ್ಬ ಸ್ನೇಹಿತರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದು ಹಾಕಿದ್ದೀರಿ."
-
-#, fuzzy
+msgstr "ನೀವು ಯಶಸ್ವಿಯಾಗಿ Qun ಸದಸ್ಯರುಗಳನ್ನು ಬದಲಾಯಿಸಿದ್ದೀರಿ"
+
 msgid "Successfully changed Qun information"
-msgstr "ನೀವು ಒಬ್ಬ ಸ್ನೇಹಿತರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದು ಹಾಕಿದ್ದೀರಿ."
+msgstr "ನೀವು ಯಶಸ್ವಿಯಾಗಿ Qun ಅನ್ನು ಮಾಹಿತಿಯನ್ನು ಬದಲಾಯಿಸಿದ್ದೀರಿ"
 
 msgid "You have successfully created a Qun"
-msgstr ""
-
-#, fuzzy
+msgstr "ನೀವು ಯಶಸ್ವಿಯಾಗಿ Qun ಅನ್ನು ರಚಿಸಿದ್ದೀರಿ"
+
 msgid "Would you like to set up detailed information now?"
-msgstr "ಈ ಮಾತುಕತೆಯಲ್ಲಿ ಸೇರಬಯಸುವಿರಾ?"
+msgstr "ನೀವು ಈಗ ವಿವರವಾದ ಮಾಹಿತಿಯನ್ನು ಸಿದ್ಧಗೊಳಿಸಲು ಬಯಸುತ್ತೀರಾ?"
 
 msgid "Setup"
 msgstr "ಸಿದ್ಧತೆ"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%u requested to join Qun %u for %s"
-msgstr " %d ಈ ಬಳಕೆದಾರರು  %d ಗುಂಪನ್ನು ಸೇರಲು ಕೋರಿಕೆ ಸಲ್ಲಿಸಿದ್ದಾರೆ"
-
-#, fuzzy, c-format
+msgstr "%u ರವರು Qun %u ಅನ್ನು %s ಗಾಗಿ ಸೇರುವಂತೆ ಕೋರಿಕೆ ಸಲ್ಲಿಸಿದ್ದಾರೆ"
+
+#, c-format
 msgid "%u request to join Qun %u"
-msgstr " %d ಈ ಬಳಕೆದಾರರು  %d ಗುಂಪನ್ನು ಸೇರಲು ಕೋರಿಕೆ ಸಲ್ಲಿಸಿದ್ದಾರೆ"
-
-#, fuzzy, c-format
+msgstr "%u ರವರು Qun %u ಅನ್ನು ಸೇರುವಂತೆ ಕೋರಿಕೆ ಸಲ್ಲಿಸಿದ್ದಾರೆ"
+
+#, c-format
 msgid "Failed to join Qun %u, operated by admin %u"
-msgstr "ಮಾತುಕತೆಯಲ್ಲಿ ಗೆಳೆಯನನ್ನು ಸೇರಿಕೊಳ್ಳಲಾಗಲಿಲ್ಲ"
+msgstr ""
+"Qun %u ಗೆ ಸೇರುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ, ಇದು %u ಎಂಬ ವ್ಯವಸ್ಥಾಪಕರಿಂದ ನಿರ್ವಹಿಸಲ್ಪಡುತ್ತಿದೆ"
 
 #, c-format
 msgid "<b>Joining Qun %u is approved by admin %u for %s</b>"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "<b>Qun %u ಗೆ ಸೇರುವುದನ್ನು %u ವ್ಯವಸ್ಥಾಪಕರಿಂದ %s ಗಾಗಿ ಅಂಗೀಕರಿಸಿದ್ದಾರೆ</b>"
+
+#, c-format
 msgid "<b>Removed buddy %u.</b>"
-msgstr "ಗೆಳೆಯನನ್ನು ತೆಗೆದುಹಾಕಿ"
-
-#, fuzzy, c-format
+msgstr "<b>%u ಎಂಬ ಗೆಳೆಯನನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ.</b>"
+
+#, c-format
 msgid "<b>New buddy %u joined.</b>"
-msgstr "ಗೆಳೆಯನನ್ನು ತೆಗೆದುಹಾಕಿ"
-
-#, fuzzy, c-format
+msgstr "<b>ಹೊಸ ಗೆಳೆಯ %u ರವರು ಸೇರಿದ್ದಾರೆ.</b>"
+
+#, c-format
 msgid "Unknown-%d"
-msgstr "ಗೊತ್ತಿಲ್ಲ(ದ)"
-
-#, fuzzy
+msgstr "ಗೊತ್ತಿಲ್ಲದ-%d"
+
 msgid "Level"
-msgstr "ಎಂದಿಗೂ ಇಲ್ಲ"
+msgstr "ಮಟ್ಟ"
 
 msgid " VIP"
-msgstr ""
+msgstr " VIP"
 
 msgid " TCP"
-msgstr ""
-
-#, fuzzy
+msgstr " TCP"
+
 msgid " FromMobile"
-msgstr "ಸಂಚಾರಿ"
-
-#, fuzzy
+msgstr "ಫ್ರಮ್‌ಮೊಬೈಲ್"
+
 msgid " BindMobile"
-msgstr "ಸಂಚಾರಿ"
+msgstr "ಬೈಂಡ್‌ಮೊಬೈಲ್"
 
 msgid " Video"
-msgstr ""
-
-#, fuzzy
+msgstr " ವೀಡಿಯೋ"
+
 msgid " Zone"
-msgstr "ಏನೂ ಇಲ್ಲ"
+msgstr "ವಲಯ"
 
 msgid "Flag"
-msgstr ""
-
-#, fuzzy
+msgstr "ಗುರುತು"
+
 msgid "Ver"
-msgstr "ಖಚಿತಪಡಿಸಿ"
+msgstr "Ver"
 
 msgid "Invalid name"
 msgstr "ತಪ್ಪು ಹೆಸರು"
 
-#, fuzzy
 msgid "Select icon..."
-msgstr "ಕದತಕೋಶ ಆಯ್ದುಕೊಳ್ಳಿ ...."
-
-#, fuzzy, c-format
+msgstr "ಚಿಹ್ನೆಯನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ ...."
+
+#, c-format
 msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n"
-msgstr "<b>ಲಾಗಿನ್ ಸಮಯ</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>ಲಾಗಿನ್ ಸಮಯ</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
 msgid "<b>Total Online Buddies</b>: %d<br>\n"
-msgstr "<b>ಲಾಗಿನ್ ಸಮಯ</b>: %s<br>\n"
+msgstr "<b>ಒಟ್ಟು ಆನಲೈನಿನಲ್ಲಿರುವ ಗೆಳೆಯರು</b>: %d<br>\n"
 
 #, c-format
 msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "<b>ಕೊನೆಯ ಬಾರಿಗೆ ಪುನಶ್ಚೇತನಗೊಳಿಕೆ</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
 msgid "<b>Server</b>: %s<br>\n"
-msgstr " <b>ಬಳಕೆದಾರ:</b> %s<br> "
-
-#, fuzzy, c-format
+msgstr "<b>ಪರಿಚಾರಕ(ಸರ್ವರ್‍)</b>: %s<br>\n"
+
+#, c-format
 msgid "<b>Client Tag</b>: %s<br>\n"
-msgstr "<b>ಲಾಗಿನ್ ಸಮಯ</b>: %s<br>\n"
+msgstr "<b>ಕ್ಲೈಂಟ್ ಟ್ಯಾಗ್</b>: %s<br>\n"
 
 #, c-format
 msgid "<b>Connection Mode</b>: %s<br>\n"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "<b>ಸಂಪರ್ಕದ ವಿಧಾನ</b>: %s<br>\n"
+
+#, c-format
 msgid "<b>My Internet IP</b>: %s:%d<br>\n"
-msgstr "<b>ಐಪಿ ವಿಳಾಸ:</b> %s<br>"
-
-#, fuzzy, c-format
+msgstr "<b>ನನ್ನ ಅಂತರಜಾಲ IP</b>: %s:%d<br>\n"
+
+#, c-format
 msgid "<b>Sent</b>: %lu<br>\n"
-msgstr " <b>ಬಳಕೆದಾರ:</b> %s<br> "
-
-#, fuzzy, c-format
+msgstr "<b>ಕಳುಹಿಸಿದ್ದು</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Resend</b>: %lu<br>\n"
-msgstr " <b>ಬಳಕೆದಾರ:</b> %s<br> "
-
-#, fuzzy, c-format
+msgstr "<b>ಮರಳಿ ಕಳುಹಿಸು</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Lost</b>: %lu<br>\n"
-msgstr "<b>%s:</b> %s<br>"
-
-#, fuzzy, c-format
+msgstr "<b>ಕಳೆದದ್ದು</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Received</b>: %lu<br>\n"
-msgstr "<b>ಲಾಗಿನ್ ಸಮಯ</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>ಸ್ವೀಕರಿಸಿದ್ದು</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Received Duplicate</b>: %lu<br>\n"
-msgstr "<b>ಲಾಗಿನ್ ಸಮಯ</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>ದ್ವಿಪ್ರತಿಯನ್ನು ಸ್ವೀಕರಿಸಲಾಗಿದೆ</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n"
-msgstr "<b>ಲಾಗಿನ್ ಸಮಯ</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>ಸಮಯ</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
 msgid "<b>IP</b>: %s<br>\n"
-msgstr " <b>ಬಳಕೆದಾರ:</b> %s<br> "
+msgstr "<b>IP</b>: %s<br>\n"
 
 msgid "Login Information"
 msgstr "ಲಾಗಿನ್ ಮಾಹಿತಿ"
 
-#, fuzzy
 msgid "<p><b>Original Author</b>:<br>\n"
-msgstr "<b>ಬಾಹ್ಯ ಬಳಕೆದಾರ</b><br>"
+msgstr "<p><b>ಮೂಲ ಕತೃ</b>:<br>\n"
 
 msgid "<p><b>Code Contributors</b>:<br>\n"
-msgstr ""
+msgstr "<p><b>ಸಂಕೇತ(ಕೋಡ್) ದೇಣಿಗೆದಾರರು</b>:<br>\n"
 
 msgid "<p><b>Lovely Patch Writers</b>:<br>\n"
-msgstr ""
-
-#, fuzzy
+msgstr "<p><b>ಸುಂದರವಾದ ತೇಪೆಯನ್ನು ರಚಿಸಿದವರು</b>:<br>\n"
+
 msgid "<p><b>Acknowledgement</b>:<br>\n"
-msgstr " <b>ಬಳಕೆದಾರ:</b> %s<br> "
-
-#, fuzzy
+msgstr "<p><b>ವಂದನೆ</b>:<br>\n"
+
 msgid "<p><b>Scrupulous Testers</b>:<br>\n"
-msgstr "<b>ಬಾಹ್ಯ ಬಳಕೆದಾರ</b><br>"
+msgstr "<p><b>ಕಟ್ಟುನಿಟ್ಟಿನ ಪರೀಕ್ಷಕರು</b>:<br>\n"
 
 msgid "and more, please let me know... thank you!))"
-msgstr ""
+msgstr "ಹಾಗು ಇನ್ನು ಹೆಚ್ಚಿನವರು ಇದಲ್ಲಿ ದಯವಿಟ್ಟು ನನಗೆ ತಿಳಿಸಿ... ಧನ್ಯವಾದಗಳು!))"
 
 msgid "<p><i>And, all the boys in the backroom...</i><br>\n"
-msgstr ""
+msgstr "<p><i>ಹಾಗು, ಹಿಂದಿನಕೋಣೆಯಲ್ಲಿರುವ ಎಲ್ಲಾ ಹುಡುಗರು...</i><br>\n"
 
 msgid "<i>Feel free to join us!</i> :)"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "<i>ನಮ್ಮೊಂದಿಗೆ ಮುಕ್ತವಾಗಿ ಸೇರಿಕೊಳ್ಳಿ!</i> :)"
+
+#, c-format
 msgid "About OpenQ %s"
-msgstr "'ಗೈಮ್ ಕುರಿತು"
-
-#, fuzzy
+msgstr "OpenQ %s ಕುರಿತು"
+
 msgid "Change Icon"
-msgstr "ಲಾಂಛನವನ್ನು ಉಳಿಸಿ"
+msgstr "ಲಾಂಛನವನ್ನು ಬದಲಾಯಿಸಿ"
 
 msgid "Change Password"
 msgstr "ಗುಪ್ತಪದವನ್ನು ಬದಲಿಸಿ"
 
-#, fuzzy
 msgid "Account Information"
-msgstr "ಲಾಗಿನ್ ಮಾಹಿತಿ"
+msgstr "ಖಾತೆಯ ಮಾಹಿತಿ"
 
 msgid "Update all QQ Quns"
-msgstr ""
-
-#, fuzzy
+msgstr "ಎಲ್ಲಾ QQ Quns ಅನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ"
+
 msgid "About OpenQ"
-msgstr "'ಗೈಮ್ ಕುರಿತು"
-
-#, fuzzy
+msgstr "OpenQ ಕುರಿತು"
+
 msgid "Modify Buddy Memo"
-msgstr "ಮನೆವಿಳಾಸ"
+msgstr "ಗೆಳೆಯನ ಮೆಮೊವನ್ನು ಮಾರ್ಪಡಿಸಿ"
 
 #. *< type
 #. *< ui_requirement
@@ -8190,30 +8294,26 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "QQ Protocol Plugin"
-msgstr "ಯಾಹೂ ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
-
-#, fuzzy
+msgstr "QQ ಪ್ರೋಟೋಕಾಲ್ ಪ್ಲಗ್ಗಿನ್ನು"
+
 msgid "Auto"
-msgstr "ಅಧಿಕಾರ ನೀಡಿ"
-
-#, fuzzy
+msgstr "ಸ್ವಯಂ"
+
 msgid "Select Server"
-msgstr "ಬಳಕೆದಾರನನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
+msgstr "ಪರಿಚಾರಕವನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
 
 msgid "QQ2005"
-msgstr ""
+msgstr "QQ2005"
 
 msgid "QQ2007"
-msgstr ""
+msgstr "QQ2007"
 
 msgid "QQ2008"
-msgstr ""
-
-#, fuzzy
+msgstr "QQ2008"
+
 msgid "Connect by TCP"
-msgstr "ಸಂಪರ್ಕಿಸುತ್ತಿದೆ"
+msgstr "TCP ಯ ಮೂಲಕ ಸಂಪರ್ಕ ಹೊಂದಿ"
 
 msgid "Show server notice"
 msgstr "ಪರಿಚಾರಕದ(ಸರ್ವರ್‍) ಮಾಹಿತಿಯನ್ನು ತೋರಿಸು"
@@ -8222,72 +8322,63 @@
 msgstr "ಪರಿಚಾರಕದ(ಸರ್ವರ್‍) ಸುದ್ಧಿಯನ್ನು ತೋರಿಸು"
 
 msgid "Show chat room when msg comes"
-msgstr ""
-
-#, fuzzy
+msgstr "ಸಂದೇಶವು ಬಂದಾಗ ಮಾತುಕತೆಯ ಕೋಣೆಯನ್ನು ತೋರಿಸು"
+
 msgid "Keep alive interval (seconds)"
-msgstr "ಓದುವಲ್ಲಿ ದೋಷ "
-
-#, fuzzy
+msgstr "ಜೀವಂತವಾಗಿ ಇರಿಸಬೇಕಿರುವ ಕಾಲಾವಧಿ (ಸೆಕೆಂಡುಗಳು)"
+
 msgid "Update interval (seconds)"
-msgstr "ಓದುವಲ್ಲಿ ದೋಷ "
-
-#, fuzzy
+msgstr "ಅಪ್‌ಡೇಟ್ ಕಾಲಾವಧಿ (ಸೆಕೆಂಡುಗಳು)"
+
 msgid "Unable to decrypt server reply"
-msgstr "ಸರ್ವರ್ ಮಾಹಿತಿ ಪಡೆಯಲಾಗಲಿಲ್ಲ"
+msgstr "ಪರಿಚಾರಕದ ಮಾಹಿತಿಯನ್ನು ಬಿಡಿಸಲಾಗಲಿಲ್ಲ(ಡೀಕ್ರಿಪ್ಟ್)"
 
 #, c-format
 msgid "Failed requesting token, 0x%02X"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಟೋಕನ್‌ಗಾಗಿ ಮನವಿ ಸಲ್ಲಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ, 0x%02X"
+
+#, c-format
 msgid "Invalid token len, %d"
-msgstr "ತಪ್ಪು ಶೀರ್ಷಿಕೆ"
+msgstr "ಟೋಕನ್‌ನ ಗಾತ್ರವು ಸರಿಯಾಗಿಲ್ಲ, %d"
 
 #. extend redirect used in QQ2006
 msgid "Redirect_EX is not currently supported"
-msgstr ""
+msgstr "Redirect_EX ಗೆ ಪ್ರಸಕ್ತ ಬೆಂಬಲವಿಲ್ಲ"
 
 #. need activation
 #. need activation
 #. need activation
-#, fuzzy
 msgid "Activation required"
-msgstr "ನೋಂದಣಿ ಅಗತ್ಯ"
+msgstr "ಸಕ್ರಿಯಗೊಳಿಕೆಯ ಅಗತ್ಯವಿದೆ"
 
 #, c-format
 msgid "Unknown reply code when logging in (0x%02X)"
 msgstr ""
 
-#, fuzzy
 msgid "Requesting captcha"
-msgstr "ಸಂವಾದ ಕೋರಿರಿ"
+msgstr "ಕ್ಯಾಪ್ಚಾಕ್ಕಾಗಿ ಕೋರಿಕೆ"
 
 msgid "Checking captcha"
-msgstr ""
-
-#, fuzzy
+msgstr "ಕ್ಯಾಪ್ಚಾವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ"
+
 msgid "Failed captcha verification"
-msgstr "ಯಾಹೂ! ಧೃಡೀಕರಣ ವಿಫಲ"
-
-#, fuzzy
+msgstr "ಕ್ಯಾಪ್ಚಾ ಪರಿಶೀಲನೆಯು ವಿಫಲಗೊಂಡಿದೆ"
+
 msgid "Captcha Image"
-msgstr "ಚಿತ್ರ ಉಳಿಸಿ"
-
-#, fuzzy
+msgstr "ಕ್ಯಾಪ್ಚಾ ಚಿತ್ರ"
+
 msgid "Enter code"
-msgstr "ಪ್ರವೇಶಪದ ಬರೆಯಿರಿ"
+msgstr "ಸಂಕೇತವನ್ನು ಬರೆಯಿರಿ"
 
 msgid "QQ Captcha Verification"
-msgstr ""
-
-#, fuzzy
+msgstr "QQ ಕ್ಯಾಪ್ಚಾ ಮಾಹಿತಿ"
+
 msgid "Enter the text from the image"
-msgstr "ಗುಂಪಿನ ಹೆಸರನ್ನು ದಾಖಲಿಸಿ"
+msgstr "ಚಿತ್ರದಿಂದ ಪಠ್ಯವನ್ನು ದಾಖಲಿಸಿ"
 
 #, c-format
 msgid "Unknown reply when checking password (0x%02X)"
-msgstr ""
+msgstr "ಗುಪ್ತಪದವನ್ನು ಪರಿಶೀಲಿಸುವಾಗ ಗೊತ್ತಿರದ ಪ್ರತ್ಯುತ್ತರ ಬಂದಿದೆ (0x%02X)"
 
 #, c-format
 msgid ""
@@ -8296,30 +8387,26 @@
 msgstr ""
 
 msgid "Socket error"
-msgstr ""
-
-#, fuzzy
+msgstr "ಸಾಕೆಟ್‌ ದೋಷ"
+
 msgid "Getting server"
-msgstr "ಬಳಕೆದಾರರ ಮಾಹಿತಿ ಕೊಡಿ.."
-
-#, fuzzy
+msgstr "ಪರಿಚಾರಕವನ್ನು ಪಡೆಯಲಾಗುತ್ತಿದೆ."
+
 msgid "Requesting token"
-msgstr "ಕೋರಿಕೆ ನಿರಾಕರಿಸಲಾಗಿದೆ."
+msgstr "ಟೋಕನ್‌ಗಾಗಿ ಕೋರಲಾಗುತ್ತಿದೆ."
 
 #, fuzzy
 msgid "Unable to resolve hostname"
 msgstr "ಸರ್ವರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಆಗಲಿಲ್ಲ"
 
-#, fuzzy
 msgid "Invalid server or port"
-msgstr "ತಪ್ಪು ದೋಷ"
+msgstr "ಸರಿಯಲ್ಲದ ಪರಿಚಾರಕ ಅಥವ ಸಂಪರ್ಕಸ್ಥಾನ"
 
 msgid "Connecting to server"
 msgstr "ಪರಿಚಾರಕದೊಂದಿಗೆ(ಸರ್ವರ್‍) ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
 
-#, fuzzy
 msgid "QQ Error"
-msgstr "ದೋಷ"
+msgstr "QQ ದೋಷ"
 
 # , c-format
 #, c-format
@@ -8334,23 +8421,24 @@
 "%s\n"
 "%s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s:%s"
-msgstr "%s (%s)"
-
-#, fuzzy, c-format
+msgstr "%s:%s"
+
+#, c-format
 msgid "From %s:"
-msgstr "ಇವರಿಂದ"
-
-#, fuzzy, c-format
+msgstr "%s ಇಂದ:"
+
+#, c-format
 msgid ""
 "Server notice From %s: \n"
 "%s"
-msgstr "ಸರ್ವರ್ ಸೂಚನೆಗಳು %s"
-
-#, fuzzy
+msgstr ""
+"%s ಇಂದ ಪರಿಚಾರಕದ ಸೂಚನೆಗಳು: \n"
+"%s"
+
 msgid "Unknown SERVER CMD"
-msgstr "ಗೊತ್ತಿಲ್ಲದ ಕಾರಣ."
+msgstr "ಗೊತ್ತಿಲ್ಲದ SERVER CMD"
 
 #, c-format
 msgid ""
@@ -8358,32 +8446,29 @@
 "Room %u, reply 0x%02X"
 msgstr ""
 
-#, fuzzy
 msgid "QQ Qun Command"
-msgstr "ಆದೇಶ"
+msgstr "QQ Qun ಆಜ್ಞೆ"
 
 #, fuzzy
 msgid "Unable to decrypt login reply"
 msgstr "ಸರ್ವರ್ ಮಾಹಿತಿ ಪಡೆಯಲಾಗಲಿಲ್ಲ"
 
-#, fuzzy
 msgid "Unknown LOGIN CMD"
-msgstr "ಗೊತ್ತಿಲ್ಲದ ಕಾರಣ."
-
-#, fuzzy
+msgstr "ಗೊತ್ತಿಲ್ಲದ LOGIN CMD"
+
 msgid "Unknown CLIENT CMD"
-msgstr "ಗೊತ್ತಿಲ್ಲದ ಕಾರಣ."
-
-#, fuzzy, c-format
+msgstr "ಗೊತ್ತಿಲ್ಲದ CLIENT CMD"
+
+#, c-format
 msgid "%d has declined the file %s"
-msgstr "%s ವಿಷಯವನ್ನು  %s ಎಂದು ಬದಲಿಸಿದ್ದಾರೆ"
+msgstr "%d ರವರು %s ಕಡತವನ್ನು ತಿರಸ್ಕರಿಸಿದ್ದಾರೆ"
 
 msgid "File Send"
 msgstr "ಕಡತ  ಕಳಿಸಿ"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%d cancelled the transfer of %s"
-msgstr "%s ರವರು %s  ಕಡತದ ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದುಗೊಳಿಸಿದರು."
+msgstr "%d ರವರು %s ನ ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದುಗೊಳಿಸಿದ್ದಾರೆ"
 
 #, c-format
 msgid "<b>Group Title:</b> %s<br>"
@@ -8398,34 +8483,34 @@
 msgstr " %s ಗುಂಪಿನ ಮಾಹಿತಿ"
 
 msgid "Notes Address Book Information"
-msgstr ""
+msgstr "ವಿಳಾಸ ಪುಸ್ತಕ ಮಾಹಿತಿಯ ಟಿಪ್ಪಣಿಗಳು"
 
 msgid "Invite Group to Conference..."
 msgstr "ಗುಂಪನ್ನು ಸಮ್ಮೇಳನಕ್ಕೆ ಆಮಂತ್ರಿಸಿ"
 
 msgid "Get Notes Address Book Info"
-msgstr ""
+msgstr "ವಿಳಾಸ ಪುಸ್ತಕ ಮಾಹಿತಿ ಟಿಪ್ಪಣಿಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"
 
 msgid "Sending Handshake"
-msgstr ""
+msgstr "ಹ್ಯಾಂಡ್‌ಶೇಕನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Waiting for Handshake Acknowledgement"
-msgstr ""
+msgstr "ಹ್ಯಾಂಡ್‌ಶೇಕ್‌ ತಲುಪಿದ್ದನ್ನು ಖಾತ್ರಿಪಡಿಸುವ ಪ್ರತ್ಯುತ್ತರಕ್ಕಾಗಿ ಕಾಯಲಾಗುತ್ತಿದೆ"
 
 msgid "Handshake Acknowledged, Sending Login"
-msgstr ""
+msgstr "ಹ್ಯಾಂಡ್‌ಶೇಕ್‌ ತಲುಪಿದ್ದನ್ನು ಖಾತ್ರಿಪಡಿಸಲಾಗಿದೆ, ಪ್ರವೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Waiting for Login Acknowledgement"
-msgstr ""
+msgstr "ಪ್ರವೇಶವನ್ನು ಖಾತ್ರಿಪಡಿಸುವ ಪ್ರತ್ಯುತ್ತರಕ್ಕಾಗಿ ಕಾಯಲಾಗುತ್ತಿದೆ"
 
 msgid "Login Redirected"
-msgstr ""
+msgstr "ಪ್ರವೇಶವನ್ನು ಮರು ನಿರ್ದೇಶಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Forcing Login"
-msgstr ""
+msgstr "ಪ್ರವೇಶವನ್ನು ಒತ್ತಾಯಿಸಲಾಗುತ್ತಿದೆ"
 
 msgid "Login Acknowledged"
-msgstr ""
+msgstr "ಪ್ರವೇಶಕ್ಕೆ ಪ್ರತ್ಯುತ್ತರಿಸಲಾಗಿದೆ"
 
 msgid "Starting Services"
 msgstr "ಸೇವೆಗಳನ್ನು ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ"
@@ -8434,9 +8519,10 @@
 msgid ""
 "A Sametime administrator has issued the following announcement on server %s"
 msgstr ""
+"ಅದೇ ಸಮಯದ ಒಬ್ಬ ವ್ಯವಸ್ಥಾಪಕರು %s ಎಂಬ ಪರಿಚಾರಕದಲ್ಲಿ ಈ ಕೆಳಗಿನ ಪ್ರಕಟಣೆಯನ್ನು ಒದಗಿಸಿದ್ದಾರೆ"
 
 msgid "Sametime Administrator Announcement"
-msgstr ""
+msgstr "ಅದೇಸಮಯದ ವ್ಯವಸ್ಥಾಪಕರ ಪ್ರಕಟಣೆ"
 
 #, c-format
 msgid "Announcement from %s"
@@ -8453,7 +8539,7 @@
 msgstr "%s ರಿಗೆ ಸಂದೇಶ ಕಳಿಸಲಾಗಲಿಲ್ಲ"
 
 msgid "Place Closed"
-msgstr ""
+msgstr "ಸ್ಥಳವನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"
 
 msgid "Microphone"
 msgstr "ಮೈಕ್ರೋಫೋನ್"
@@ -8467,24 +8553,21 @@
 msgid "File Transfer"
 msgstr "ಕಡತ ವರ್ಗಾವಣೆ "
 
-#, fuzzy
 msgid "Supports"
-msgstr "ಬೆಂಬಲ"
-
-#, fuzzy
+msgstr "ಬೆಂಬಲಿಸುತ್ತದೆ"
+
 msgid "External User"
-msgstr ""
-"\n"
-"<b>ಬಾಹ್ಯ ಬಳಕೆದಾರ</b>"
+msgstr "ಬಾಹ್ಯ ಬಳಕೆದಾರ"
 
 msgid "Create conference with user"
-msgstr ""
+msgstr "ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಮ್ಮೇಳನವನ್ನು ರಚಿಸಿ"
 
 #, c-format
 msgid ""
 "Please enter a topic for the new conference, and an invitation message to be "
 "sent to %s"
 msgstr ""
+"ದಯವಿಟ್ಟು  ಹೊಸ ಸಮ್ಮೇಳನಕ್ಕೆ ಒಂದು ಹೆಸರನ್ನೂ ಹಾಗು %s ರವರಿಗೆ ಒಂದು ಆಹ್ವಾನವನ್ನು ಕಳುಹಿಸಿ"
 
 msgid "New Conference"
 msgstr "ಹೊಸ ಅಧಿವೇಶನ"
@@ -8543,7 +8626,7 @@
 msgstr "ಗೊತ್ತಿಲ್ಲದ  (0x%04x)<br>"
 
 msgid "Last Known Client"
-msgstr ""
+msgstr "ಗೊತ್ತಿರುವ ಕೊನೆಯ ಕ್ಲೈಂಟ್‌"
 
 msgid "User Name"
 msgstr "ಬಳಕೆದಾರನ ಹೆಸರು"
@@ -8552,7 +8635,7 @@
 msgstr "ಸೇಮ್‍ಟೈಂ ಗುರುತು"
 
 msgid "An ambiguous user ID was entered"
-msgstr ""
+msgstr "ಅಸ್ಪಷ್ಟ ಬಳಕೆದಾರ ಐಡಿಯನ್ನು ದಾಖಲಿಸಲಾಗಿದೆ"
 
 #, c-format
 msgid ""
@@ -8581,22 +8664,22 @@
 "%s\n"
 
 msgid "Remotely Stored Buddy List"
-msgstr ""
+msgstr "ದೂರದಲ್ಲಿ ಶೇಖರಿಸಿಡಲಾದ ಗೆಳೆಯರ ಪಟ್ಟಿ"
 
 msgid "Buddy List Storage Mode"
 msgstr ""
 
 msgid "Local Buddy List Only"
-msgstr ""
+msgstr "ಸ್ಥಳೀಯ ಗೆಳೆಯರ ಪಟ್ಟಿಯು ಮಾತ್ರ"
 
 msgid "Merge List from Server"
-msgstr ""
+msgstr "ಪರಿಚಾರದಿಂದ ಪಟ್ಟಿಯನ್ನು ವಿಲೀನಗೊಳಿಸಿ"
 
 msgid "Merge and Save List to Server"
 msgstr ""
 
 msgid "Synchronize List with Server"
-msgstr ""
+msgstr "ಪರಿಚಾರದಲ್ಲಿನ ಪಟ್ಟಿಯೊಂದಿಗೆ ಮೇಳೈಸಿ"
 
 #, c-format
 msgid "Import Sametime List for Account %s"
@@ -8633,7 +8716,7 @@
 msgstr ""
 
 msgid "Unable to add group: group not found"
-msgstr ""
+msgstr "ಗುಂಪನ್ನು ಸೇರಿಸಲು ಆಗಲಿಲ್ಲ : ಗುಂಪು ಕಂಡುಬಂದಿಲ್ಲ."
 
 #, c-format
 msgid ""
@@ -8664,14 +8747,14 @@
 msgstr "ಹುಡುಕುವಿಕೆಯ ಫಲಿತಾಂಶಗಳು"
 
 msgid "No matches"
-msgstr ""
+msgstr "ಯಾವುವೂ ತಾಳೆಯಾಗುವುದಿಲ್ಲ"
 
 #, c-format
 msgid "The identifier '%s' did not match any users in your Sametime community."
 msgstr ""
 
 msgid "No Matches"
-msgstr ""
+msgstr "ಯಾವುವೂ ತಾಳೆಯಾಗುವುದಿಲ್ಲ"
 
 msgid "Search for a user"
 msgstr "ಬಳಕೆದಾರನನ್ನು ಹುಡುಕಿ"
@@ -8751,25 +8834,25 @@
 msgstr ""
 
 msgid "IM With Password"
-msgstr ""
+msgstr "ಗುಪ್ತಪದದೊಂದಿಗೆ IM"
 
 msgid "Cannot set IM key"
-msgstr ""
+msgstr "IM ಕೀಲಿಯನ್ನು ಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
 
 msgid "Set IM Password"
-msgstr ""
+msgstr "IM ಗುಪ್ತಪದವನ್ನು ಹೊಂದಿಸು"
 
 msgid "Get Public Key"
-msgstr ""
+msgstr "ಸಾರ್ವಜನಿಕ ಕೀಲಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"
 
 msgid "Cannot fetch the public key"
-msgstr ""
+msgstr "ಸಾರ್ವಜನಿಕ ಕೀಲಿಯನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ"
 
 msgid "Show Public Key"
-msgstr ""
+msgstr "ಸಾರ್ವಜನಿಕ ಕೀಲಿಯನ್ನು ತೋರಿಸು"
 
 msgid "Could not load public key"
-msgstr ""
+msgstr "ಸಾರ್ವಜನಿಕ ಕೀಲಿಯನ್ನು ಲೋಡ್‌ ಮಾಡಲಾಗಲಿಲ್ಲ"
 
 msgid "User Information"
 msgstr "ಬಳಕೆದಾರ ಮಾಹಿತಿ"
@@ -8779,7 +8862,7 @@
 
 #, c-format
 msgid "The %s buddy is not trusted"
-msgstr ""
+msgstr "%s ಗೆಳೆಯನನ್ನು ನಂಬಲಾಗಲಿಲ್ಲ"
 
 msgid ""
 "You cannot receive buddy notifications until you import his/her public key.  "
@@ -8800,7 +8883,7 @@
 msgstr ""
 
 msgid "_Import..."
-msgstr "ಆಮದು ಮಾಡಿರಿ(_I)"
+msgstr "ಆಮದು ಮಾಡಿರಿ(_I)..."
 
 msgid "Select correct user"
 msgstr "ಸರಿಯಾದ ಬಳಕೆದಾರರನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
@@ -8828,7 +8911,7 @@
 msgstr "ಅತಿಕ್ರಿಯಾಶೀಲ"
 
 msgid "Robot"
-msgstr ""
+msgstr "ರೊಬೊಟ್"
 
 msgid "Jealous"
 msgstr "ಅಸೂಯೆ"
@@ -8843,7 +8926,7 @@
 msgstr "ಆತುರ"
 
 msgid "User Modes"
-msgstr ""
+msgstr "ಬಳಕೆದಾರ ಕ್ರಮಗಳು"
 
 msgid "Preferred Contact"
 msgstr "ಬಯಕೆಯ ಸಂಪರ್ಕ"
@@ -8861,25 +8944,25 @@
 msgstr ""
 
 msgid "Reset IM Key"
-msgstr ""
+msgstr "IM ಕೀಲಿಯನ್ನು ಹಿಂದಿನ ಸ್ಥಿತಿಗೆ ಮರಳಿಸು"
 
 msgid "IM with Key Exchange"
 msgstr ""
 
 msgid "IM with Password"
-msgstr ""
+msgstr "ಗುಪ್ತಪದದೊಂದಿಗೆ IM"
 
 msgid "Get Public Key..."
-msgstr ""
+msgstr "ಸಾರ್ವಜನಿಕ ಕೀಲಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳಿ..."
 
 msgid "Kill User"
-msgstr ""
+msgstr "ಬಳಕೆದಾರರನ್ನು ಕೊಲ್ಲು"
 
 msgid "Draw On Whiteboard"
 msgstr ""
 
 msgid "_Passphrase:"
-msgstr "ಪ್ರವೇಶನುಡಿ(_P)"
+msgstr "ಗುಪ್ತಪದ(_P):"
 
 #, c-format
 msgid "Channel %s does not exist in the network"
@@ -8889,7 +8972,7 @@
 msgstr "ವಾಹಿನಿಯ ಮಾಹಿತಿ"
 
 msgid "Cannot get channel information"
-msgstr ""
+msgstr "ವಾಹಿನಿಯ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ"
 
 #, c-format
 msgid "<b>Channel Name:</b> %s"
@@ -8901,16 +8984,16 @@
 
 #, c-format
 msgid "<br><b>Channel Founder:</b> %s"
-msgstr ""
+msgstr "<br><b>ವಾಹಿನಿಯ ಸ್ಥಾಪಕರು:</b> %s"
 
 #, c-format
 msgid "<br><b>Channel Cipher:</b> %s"
-msgstr ""
+msgstr "<br><b>ವಾಹಿನಿಯ ಸಿಫರ್:</b> %s"
 
 #. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC
 #, c-format
 msgid "<br><b>Channel HMAC:</b> %s"
-msgstr ""
+msgstr "<br><b>ವಾಹಿನಿಯ HMAC:</b> %s"
 
 #, c-format
 msgid "<br><b>Channel Topic:</b><br>%s"
@@ -8918,7 +9001,7 @@
 
 #, c-format
 msgid "<br><b>Channel Modes:</b> "
-msgstr ""
+msgstr "<br><b>ವಾಹಿನಿಯ ಕ್ರಮಗಳು:</b> "
 
 #, c-format
 msgid "<br><b>Founder Key Fingerprint:</b><br>%s"
@@ -8933,13 +9016,13 @@
 
 #. Add new public key
 msgid "Open Public Key..."
-msgstr ""
+msgstr "ಸಾರ್ವಜನಿಕ ಕೀಲಿಯನ್ನು ತೆರೆಯಿರಿ..."
 
 msgid "Channel Passphrase"
-msgstr ""
+msgstr "ವಾಹಿನಿಯ ಗುಪ್ತವಾಕ್ಯ"
 
 msgid "Channel Public Keys List"
-msgstr ""
+msgstr "ವಾಹಿನಿಯ ಸಾರ್ವಜನಿಕ ಕೀಲಿಗಳ ಪಟ್ಟಿ"
 
 #, c-format
 msgid ""
@@ -8960,7 +9043,7 @@
 msgstr "ಗುಂಪಿನ ಹೆಸರು"
 
 msgid "Passphrase"
-msgstr ""
+msgstr "ಗುಪ್ತವಾಕ್ಯ"
 
 #, c-format
 msgid "Please enter the %s channel private group name and passphrase."
@@ -9074,7 +9157,7 @@
 msgstr "ಕಡತವನ್ನು ಕಳಿಸಲು ಆಗಲಿಲ್ಲ"
 
 msgid "Error occurred"
-msgstr ""
+msgstr "ದೋಷವು ಸಂಭವಿಸಿದೆ"
 
 #, c-format
 msgid "%s has changed the topic of <I>%s</I> to: %s"
@@ -9141,7 +9224,7 @@
 msgstr "ನಿಜವಾದ ಹೆಸರು"
 
 msgid "Status Text"
-msgstr ""
+msgstr "ಸ್ಥಿತಿ ಪಠ್ಯ"
 
 msgid "Public Key Fingerprint"
 msgstr ""
@@ -9150,7 +9233,7 @@
 msgstr ""
 
 msgid "_More..."
-msgstr "ಇನ್ನಷ್ಟು..(_M)"
+msgstr "ಇನ್ನಷ್ಟು(_M)..."
 
 msgid "Detach From Server"
 msgstr ""
@@ -9170,9 +9253,8 @@
 msgid "Cannot get room list"
 msgstr "ಕೋಣೆಗಳ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ"
 
-#, fuzzy
 msgid "Network is empty"
-msgstr "ಜಾಲದ ಅಂಕಿಸಂಖ್ಯೆ"
+msgstr "ಜಾಲಬಂಧವು ಖಾಲಿ ಇದೆ"
 
 msgid "No public key was received"
 msgstr ""
@@ -9224,7 +9306,7 @@
 msgstr ""
 
 msgid "WATCH"
-msgstr ""
+msgstr "ಗಮನಿಸು"
 
 #, fuzzy
 msgid "Cannot watch user"
@@ -9440,20 +9522,26 @@
 msgid "topic [&lt;new topic&gt;]:  View or change the topic"
 msgstr ""
 
+#, fuzzy
 msgid "join &lt;channel&gt; [&lt;password&gt;]:  Join a chat on this network"
 msgstr ""
+"join: &lt;ವಾಹಿನಿ&gt; [ಗುಪ್ತಪದ]:  ಈ ಪರಿಚಾರಕದಲ್ಲಿನ ಒಂದು ಮಾತುಕತೆಯಲ್ಲಿ ಸೇರಿಕೊಳ್ಳಿ"
 
 msgid "list:  List channels on this network"
 msgstr ""
 
 msgid "whois &lt;nick&gt;:  View nick's information"
-msgstr ""
+msgstr "whois &lt;ಅಡ್ಡಹೆಸರು&gt;: ನಿಶ್ಚಿತ ಅಡ್ಡಹೆಸರಿನ ಬಗೆಗಿನ ಮಾಹಿತಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"
 
 msgid "msg &lt;nick&gt; &lt;message&gt;:  Send a private message to a user"
 msgstr ""
+"msg &lt;ಅಡ್ಡಹೆಸರು&gt; &lt;ಸಂದೇಶ&gt;:  ಒಬ್ಬ ಬಳಕೆದಾರನಿಗೆ ಒಂದು ಖಾಸಗಿ ಸಂದೇಶವನ್ನು "
+"ಕಳುಹಿಸಿ"
 
 msgid "query &lt;nick&gt; [&lt;message&gt;]:  Send a private message to a user"
 msgstr ""
+"query &lt;ಅಡ್ಡಹೆಸರು&gt; [&lt;ಸಂದೇಶ&gt;]:  ಒಬ್ಬ ಬಳಕೆದಾರನಿಗೆ ಒಂದು ಖಾಸಗಿ "
+"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಿ."
 
 msgid "motd:  View the server's Message Of The Day"
 msgstr ""
@@ -9463,6 +9551,8 @@
 
 msgid "quit [message]:  Disconnect from the server, with an optional message"
 msgstr ""
+"quit [ಸಂದೇಶ]: ಪರಿಚಾರಕದಿಂದ ಸಂಪರ್ಕ ಕಡಿದು ಹಾಕಿ, ಬೇಕಿದ್ದಲ್ಲಿ ಒಂದು ಸಂದೇಶವನ್ನೂ ಸಹ "
+"ಸೇರಿಸಬಹುದು"
 
 msgid "call &lt;command&gt;:  Call any silc client command"
 msgstr ""
@@ -9592,7 +9682,7 @@
 
 #, c-format
 msgid "Email: \t\t%s\n"
-msgstr "ವಿ-ಅಂಚೆ: \t\t%s\n"
+msgstr "ಇ-ಮೈಲ್‌: \t\t%s\n"
 
 #, c-format
 msgid "Host Name: \t%s\n"
@@ -10189,13 +10279,13 @@
 msgstr "ಯಾರಾದರೂ "
 
 msgid "_Class:"
-msgstr ""
+msgstr "ವರ್ಗ(_C):"
 
 msgid "_Instance:"
 msgstr ""
 
 msgid "_Recipient:"
-msgstr "ಸ್ವೀಕಾರಕರ್ತರು(_R)"
+msgstr "ಸ್ವೀಕರಿಸುವವರು(_R):"
 
 #, c-format
 msgid "Attempt to subscribe to %s,%s,%s failed"
@@ -10311,11 +10401,9 @@
 #. *
 #. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons.
 #.
-#, fuzzy
 msgid "_Yes"
 msgstr "ಹೌದು(_Y)"
 
-#, fuzzy
 msgid "_No"
 msgstr "ಇಲ್ಲ(_N)"
 
@@ -10323,7 +10411,7 @@
 #. * A wrapper for purple_request_action() that uses Accept and Cancel buttons.
 #.
 msgid "_Accept"
-msgstr "ಸ್ವೀಕರಿಸಿ(_A)"
+msgstr "ಸ್ವೀಕರಿಸು(_A)"
 
 #. *
 #. * The default message to use when the user becomes auto-away.
@@ -10574,12 +10662,11 @@
 msgid "Login Options"
 msgstr "ಪ್ರವೇಶದ ಆಯ್ಕೆಗಳು"
 
-#, fuzzy
 msgid "Pro_tocol:"
-msgstr "ಪ್ರೋಟೋಕಾಲ್ "
+msgstr "ಪ್ರೋಟೋಕಾಲ್(_t): "
 
 msgid "_Username:"
-msgstr "ಬಳಕೆಯ ಹೆಸರು"
+msgstr "ಬಳಕೆಯ ಹೆಸರು(_U):"
 
 #, fuzzy
 msgid "Remember pass_word"
@@ -10589,22 +10676,19 @@
 msgid "User Options"
 msgstr "ಬಳಕೆದಾರ ಆಯ್ಕೆಗಳು"
 
-#, fuzzy
 msgid "_Local alias:"
-msgstr "ಸ್ಥಳೀಯ ಅಲಿಯಾಸ್"
-
-#, fuzzy
+msgstr "ಸ್ಥಳೀಯ ಅಲಿಯಾಸ್(_L):"
+
 msgid "New _mail notifications"
-msgstr "ಹೊಸ ಸಂದೇಶದ ಸೂಚನೆ"
+msgstr "ಹೊಸ ಸಂದೇಶದ ಸೂಚನೆಗಳು(_m):"
 
 #. Buddy icon
 #, fuzzy
 msgid "Use this buddy _icon for this account:"
 msgstr "ಈ ಗೆಳೆಯ ಚಿನ್ಹೆಯನ್ನು ಈ ಖಾತೆಗೆ ಬಳಸಿ"
 
-#, fuzzy
 msgid "Ad_vanced"
-msgstr "_ಮುಂದುವರಿದ"
+msgstr "ಸುಧಾರಿತ(_v)"
 
 #, fuzzy
 msgid "Use GNOME Proxy Settings"
@@ -10641,13 +10725,13 @@
 msgstr "ನೀವು ಸಂಧಿಸುತ್ತಿರುವ ಚಿಟ್ಟೆಗಳನ್ನು ನೋಡಬಹುದು"
 
 msgid "Proxy _type:"
-msgstr "ಪ್ರಾಕ್ಸಿ _ಬಗೆ"
+msgstr "ಪ್ರಾಕ್ಸಿ ಬಗೆ(_t):"
 
 msgid "_Host:"
-msgstr "_ಅತಿಥೇಯ ಗಣಕ"
+msgstr "ಅತಿಥೇಯ ಗಣಕ(_H):"
 
 msgid "_Port:"
-msgstr "_ಪೋರ್ಟು"
+msgstr "ಸಂಪರ್ಕಸ್ಥಾನ(_P):"
 
 msgid "Pa_ssword:"
 msgstr "ಗುಪ್ತಪದ(_s):"
@@ -10663,14 +10747,13 @@
 msgstr "ಖಾತೆಯನ್ನು ಸೇರಿಸಿ"
 
 msgid "_Basic"
-msgstr "_ಸರಳ"
+msgstr "ಸರಳ(_B)"
 
 msgid "Create _this new account on the server"
 msgstr ""
 
-#, fuzzy
 msgid "P_roxy"
-msgstr "ಪ್ರಾಕ್ಸಿ "
+msgstr "ಪ್ರಾಕ್ಸಿ(_r) "
 
 msgid "Enabled"
 msgstr "ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
@@ -10840,56 +10923,50 @@
 msgid "Please update the necessary fields."
 msgstr "ದಯವಿಟ್ಟು ಎಲ್ಲ ಖಡ್ಡಾಯ ವಿವರಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ"
 
-#, fuzzy
 msgid "A_ccount"
-msgstr "ಖಾತೆ:"
+msgstr "ಖಾತೆ(_c)"
 
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
 "join.\n"
 msgstr "ನೀವು ಸೇರಬಯಸುವ ಮಾತುಕತೆ ಕುರಿತು ಮಾಹಿತಿ ಕೊಡಿ.\n"
 
-#, fuzzy
 msgid "Room _List"
-msgstr "ಕೋಣೆಗಳ ಪಟ್ಟಿ"
+msgstr "ಕೋಣೆಗಳ ಪಟ್ಟಿ(_L)"
 
 msgid "_Block"
-msgstr "ನಿಷೇಧಿಸಿ(_B)"
-
-#, fuzzy
+msgstr "ನಿಷೇಧಿಸು(_B)"
+
 msgid "Un_block"
-msgstr "ನಿಷೇಧವನ್ನು ತೆಗೆದು ಹಾಕಿ"
+msgstr "ನಿಷೇಧವನ್ನು ತೆಗೆದು ಹಾಕು(_b)"
 
 msgid "Move to"
 msgstr ""
 
 msgid "Get _Info"
-msgstr "ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ(_I)"
+msgstr "ಮಾಹಿತಿಯನ್ನು ಪಡೆ(_I)"
 
 msgid "I_M"
-msgstr "_ತ್ವರಿತ ಸಂದೇಶ"
-
-#, fuzzy
+msgstr "I_M"
+
 msgid "_Audio Call"
-msgstr "ಮಾತುಕತೆ ಸೇರಿಸಿ (_A)"
+msgstr "ಆಡಿಯೊ ಕರೆ (_A)"
 
 msgid "Audio/_Video Call"
-msgstr ""
-
-#, fuzzy
+msgstr "ಆಡಿಯೊ/ವೀಡಿಯೊ ಕರೆ (_V)"
+
 msgid "_Video Call"
-msgstr "ವೀಡಿಯೋ ಕ್ಯಾಮೆರಾ"
-
-#, fuzzy
+msgstr "ವೀಡಿಯೋ ಕರೆ(_V)"
+
 msgid "_Send File..."
-msgstr "_ಕಡತವನ್ನು ಕಳುಹಿಸಿ"
+msgstr "ಕಡತವನ್ನು ಕಳುಹಿಸು(_S)..."
 
 #, fuzzy
 msgid "Add Buddy _Pounce..."
 msgstr "ಗೆಳೆಯನ-ಮೇಲೆ-ಎರಗಪ್ಪ ಸೇರಿಸಿ(_P)"
 
 msgid "View _Log"
-msgstr "ಲಾಗ್ ಅನ್ನು ನೋಡಿ(_L)"
+msgstr "ದಾಖಲೆಯನ್ನು ನೋಡು(_L)"
 
 #, fuzzy
 msgid "Hide When Offline"
@@ -10900,7 +10977,7 @@
 msgstr "ಗೆಳೆಯನು ಆಫ್ಲೈನ್ ಆಗಿದ್ದಾನೆ"
 
 msgid "_Alias..."
-msgstr "_ಅಲಿಯಾಸ್..."
+msgstr "ಅಲಿಯಾಸ್(_A)..."
 
 msgid "_Remove"
 msgstr "ತೆಗೆದುಹಾಕು(_R)"
@@ -10913,23 +10990,22 @@
 msgid "Remove Custom Icon"
 msgstr "ಸಂಪರ್ಕವನ್ನು ತೆಗೆದುಹಾಕಿ"
 
-#, fuzzy
 msgid "Add _Buddy..."
-msgstr "ಸ್ನೇಹಿತರನ್ನು ಸೇರಿಸಿ"
+msgstr "ಸ್ನೇಹಿತರನ್ನು ಸೇರಿಸು(_B)..."
 
 #, fuzzy
 msgid "Add C_hat..."
 msgstr "ಮಾತುಕತೆಯನ್ನು ಸೇರಿಸಿ"
 
 msgid "_Delete Group"
-msgstr "ಗುಂಪನ್ನು ಅಳಿಸಿ(_D)"
+msgstr "ಗುಂಪನ್ನು ಅಳಿಸು(_D)"
 
 msgid "_Rename"
-msgstr "ಹೆಸರುಬದಲಿಸಿ(_R)"
+msgstr "ಹೆಸರುಬದಲಿಸು(_R)"
 
 #. join button
 msgid "_Join"
-msgstr "_ಸೇರು"
+msgstr "ಸೇರು(_J)"
 
 msgid "Auto-Join"
 msgstr "ಸ್ವಯಂ-ಜೋಡಣೆ"
@@ -10943,10 +11019,10 @@
 msgstr "ಸ್ಥಾಪನೆಗಳನ್ನು ತಿದ್ದಿ"
 
 msgid "_Collapse"
-msgstr "_ಕುಗ್ಗಿಸಿ"
+msgstr "ಕುಗ್ಗಿಸು(_C)"
 
 msgid "_Expand"
-msgstr "_ವಿಸ್ತರಿಸಿ"
+msgstr "ವಿಸ್ತರಿಸು(_E)"
 
 msgid "/Tools/Mute Sounds"
 msgstr "/ಸಾಧನಗಳು/ಸದ್ದುಗಳನ್ನು ಅಡಗಿಸಿ"
@@ -10964,19 +11040,19 @@
 
 #. Buddies menu
 msgid "/_Buddies"
-msgstr "/_ಗೆಳೆಯರು"
+msgstr "/ಗೆಳೆಯರು(_B)"
 
 msgid "/Buddies/New Instant _Message..."
-msgstr "/ಗೆಳೆಯರು/ಹೊಸ ಸಂದೇಶ..."
+msgstr "/ಗೆಳೆಯರು/ಹೊಸ ತಕ್ಷಣದ ಸಂದೇಶ(_M)..."
 
 msgid "/Buddies/Join a _Chat..."
-msgstr "/ಗೆಳೆಯರು/ಮಾತುಕತೆಯೊಂದನ್ನು ಸೇರಿ"
+msgstr "/ಗೆಳೆಯರು/ಮಾತುಕತೆಯೊಂದನ್ನು ಸೇರಿ(_C)..."
 
 msgid "/Buddies/Get User _Info..."
-msgstr "/ಗೆಳೆಯರು/ಬಳಕೆದಾರನ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ"
+msgstr "/ಗೆಳೆಯರು/ಬಳಕೆದಾರನ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ(_I)..."
 
 msgid "/Buddies/View User _Log..."
-msgstr "/ಗೆಳೆಯರು/ಬಳಕೆಯ ಲಾಗ್ ನೋಡಿ"
+msgstr "/ಗೆಳೆಯರು/ಬಳಕೆಯ ದಾಖಲೆಯನ್ನು ನೋಡು(_L)..."
 
 #, fuzzy
 msgid "/Buddies/Sh_ow"
@@ -11003,23 +11079,23 @@
 msgstr "/ಗೆಳೆಯರು/ಖಾಲಿ ಇರುವ ಗುಂಪುಗಳನ್ನು ನೋಡಿ"
 
 msgid "/Buddies/_Sort Buddies"
-msgstr "/ಗೆಳೆಯರು/_ಮಿತ್ರರ ಪಟ್ಟಿಯನ್ನು ವರ್ಗೀಕರಿಸಿ"
+msgstr "/ಗೆಳೆಯರು/ಮಿತ್ರರ ಪಟ್ಟಿಯನ್ನು ವರ್ಗೀಕರಿಸು(_S)"
 
 msgid "/Buddies/_Add Buddy..."
-msgstr "/ಗೆಳೆಯರು/ಗೆಳೆಯನನ್ನು ಸೇರಿಸಿ..."
+msgstr "/ಗೆಳೆಯರು/ಗೆಳೆಯನನ್ನು ಸೇರಿಸು(_A)..."
 
 msgid "/Buddies/Add C_hat..."
-msgstr "/ಗೆಳೆಯರು/ಮಾತುಕತೆಯನ್ನು ಸೇರಿಸಿ"
+msgstr "/ಗೆಳೆಯರು/ಮಾತುಕತೆಯನ್ನು ಸೇರಿಸು(_h)..."
 
 msgid "/Buddies/Add _Group..."
-msgstr "/ಪರಮಮಿತ್ರರು/ಗುಂಪನ್ನು _ಸೇರಿಸಿ"
+msgstr "/ಗೆಳೆಯರು/ಗುಂಪನ್ನು  ಸೇರಿಸು(_G)..."
 
 msgid "/Buddies/_Quit"
-msgstr "/ಗೆಳೆಯರು/_ಹೊರಕ್ಕೆ"
+msgstr "/ಗೆಳೆಯರು/ಹೊರಕ್ಕೆ(_Q)"
 
 #. Accounts menu
 msgid "/_Accounts"
-msgstr "/_ಖಾತೆಗಳು"
+msgstr "/ಖಾತೆಗಳು(_A)"
 
 #, fuzzy
 msgid "/Accounts/Manage Accounts"
@@ -11027,10 +11103,11 @@
 
 #. Tools
 msgid "/_Tools"
-msgstr "/_ಸಾಧನಗಳು"
-
+msgstr "/ಉಪಕರಣಗಳು(_T)"
+
+#, fuzzy
 msgid "/Tools/Buddy _Pounces"
-msgstr "/ಸಾಧನಗಳು/ಗೆಳೆಯರ _ಪ್ರವೇಶ ತಿಳಿಸುವ ಟೂಲ್"
+msgstr "/ಸಾಧನಗಳು/ಗೆಳೆಯರ ಪ್ರವೇಶ ತಿಳಿಸುವ ಉಪಕರಣ(_P)"
 
 #, fuzzy
 msgid "/Tools/_Certificates"
@@ -11040,31 +11117,39 @@
 msgid "/Tools/Custom Smile_ys"
 msgstr "/ಸಾಧನಗಳು/ಖಾಸಗಿ ಮಾಹಿತಿ"
 
+#, fuzzy
 msgid "/Tools/Plu_gins"
 msgstr "/ಸಾಧನಗಳು/ಪ್ಲಗ್ಗಿನ್ನುಗಳು"
 
+#, fuzzy
 msgid "/Tools/Pr_eferences"
 msgstr "/ಸಾಧನಗಳು/ಇಚ್ಛೆಗಳು"
 
+#, fuzzy
 msgid "/Tools/Pr_ivacy"
 msgstr "/ಸಾಧನಗಳು/_ಖಾಸಗಿಮಾಹಿತಿ"
 
+#, fuzzy
 msgid "/Tools/_File Transfers"
 msgstr "/ಸಾಧನಗಳು/_ಕಡತ ವರ್ಗಾವಣೆಗಳು"
 
+#, fuzzy
 msgid "/Tools/R_oom List"
 msgstr "/ಸಾಧನಗಳು/ಕೋ_ಣೆಗಳ ಪಟ್ಟಿ"
 
+#, fuzzy
 msgid "/Tools/System _Log"
 msgstr "/ಸಾಧನಗಳು/ಸಿಸ್ಟಂ _ಲಾಗ್"
 
+#, fuzzy
 msgid "/Tools/Mute _Sounds"
 msgstr "/ಪರಿಕರಗಳು/ಶಬ್ಧ _ಬೇಡ"
 
 #. Help
 msgid "/_Help"
-msgstr "/_ಸಹಾಯ"
-
+msgstr "/ನೆರವು(_H)"
+
+#, fuzzy
 msgid "/Help/Online _Help"
 msgstr "/ಸಹಾಯ/ಆ_ನ್‍ಲೈನ್ ಸಹಾಯ"
 
@@ -11305,13 +11390,13 @@
 msgstr ""
 
 msgid "_Edit Account"
-msgstr "_ಖಾತೆಯನ್ನು ತಿದ್ದಿ"
+msgstr "ಖಾತೆಯನ್ನು ಸಂಪಾದಿಸು(_E)"
 
 msgid "No actions available"
 msgstr "ಯಾವ ಕ್ರಮಗಳೂ ಲಭ್ಯವಿಲ್ಲ"
 
 msgid "_Disable"
-msgstr "_ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"
+msgstr "ಅಶಕ್ತಗೊಳಿಸು(_D)"
 
 msgid "/Tools"
 msgstr "/ಸಾಧನಗಳು"
@@ -11340,11 +11425,12 @@
 msgid "Invite Buddy Into Chat Room"
 msgstr "ಗೆಳೆಯನನ್ನು ಮಾತುಕತೆಕೋಣೆಗೆ ಆಮಂತ್ರಿಸಿ"
 
+#, fuzzy
 msgid "_Buddy:"
 msgstr "_ಗೆಳೆಯ"
 
 msgid "_Message:"
-msgstr "_ಸಂದೇಶ:"
+msgstr "ಸಂದೇಶ(_M):"
 
 #, c-format
 msgid "<h1>Conversation with %s</h1>\n"
@@ -11357,7 +11443,7 @@
 msgstr "ಹುಡುಕಿ"
 
 msgid "_Search for:"
-msgstr "_ಇದರ ಬಗ್ಗೆ ಹುಡುಕಿ: "
+msgstr "ಇದಕ್ಕಾಗಿ ಹುಡುಕು(_S):"
 
 msgid "Un-Ignore"
 msgstr "ನಿರ್ಲಕ್ಷಿಸುವುದು ಬೇಡ"
@@ -11399,9 +11485,11 @@
 msgstr ""
 
 #. Conversation menu
+#, fuzzy
 msgid "/_Conversation"
 msgstr "/_ಮಾತುಕತೆ"
 
+#, fuzzy
 msgid "/Conversation/New Instant _Message..."
 msgstr "/ಮಾತುಕತೆ/ಹೊಸ ತಕ್ಷಣ _ಸಂದೇಶ..."
 
@@ -11409,12 +11497,15 @@
 msgid "/Conversation/Join a _Chat..."
 msgstr "/ಮಾತುಕತೆ/ಆಮಂ_ತ್ರಿಸಿ..."
 
+#, fuzzy
 msgid "/Conversation/_Find..."
 msgstr "/ಮಾತುಕತೆ/_ಹುಡುಕಿ..."
 
+#, fuzzy
 msgid "/Conversation/View _Log"
 msgstr "/ಮಾತುಕತೆ/ಲಾಗ್ _ನೋಡಿ"
 
+#, fuzzy
 msgid "/Conversation/_Save As..."
 msgstr "/ಮಾತುಕತೆ/ಉಳಿಸಿ ಈ ಹೆಸರಿನಲ್ಲಿ..."
 
@@ -11437,24 +11528,31 @@
 msgid "/Conversation/Media/Audio\\/Video _Call"
 msgstr "/ಮಾತುಕತೆ/ಲಾಗ್ _ನೋಡಿ"
 
+#, fuzzy
 msgid "/Conversation/Se_nd File..."
 msgstr "/ಮಾತುಕತೆ/ಕಡತ _ಕಳಿಸಿ"
 
+#, fuzzy
 msgid "/Conversation/Add Buddy _Pounce..."
 msgstr "/ಮಾತುಕತೆ/ಗೆಳೆಯರ ಪ್ರವೇಶ ಉಪಕರಣ ಸೇರಿಸಿ..."
 
+#, fuzzy
 msgid "/Conversation/_Get Info"
 msgstr "/ಮಾತುಕತೆ/_ಮಾಹಿತಿ ಪಡೆಯಿರಿ"
 
+#, fuzzy
 msgid "/Conversation/In_vite..."
 msgstr "/ಮಾತುಕತೆ/ಆಮಂ_ತ್ರಿಸಿ..."
 
+#, fuzzy
 msgid "/Conversation/M_ore"
 msgstr "/ಮಾತುಕತೆ/_ಇನ್ನಷ್ಟು"
 
+#, fuzzy
 msgid "/Conversation/Al_ias..."
 msgstr "/ಮಾತುಕತೆ/_ಅಲಿಯಾಸ್..."
 
+#, fuzzy
 msgid "/Conversation/_Block..."
 msgstr "/ಮಾತುಕತೆ/_ತಡೆಗಟ್ಟಿ..."
 
@@ -11462,25 +11560,31 @@
 msgid "/Conversation/_Unblock..."
 msgstr "/ಮಾತುಕತೆ/_ತಡೆಗಟ್ಟಿ..."
 
+#, fuzzy
 msgid "/Conversation/_Add..."
 msgstr "/ಮಾತುಕತೆ/_ಸೇರಿಸಿ..."
 
+#, fuzzy
 msgid "/Conversation/_Remove..."
 msgstr "/ಮಾತುಕತೆ/_ತೆಗೆದುಹಾಕಿ"
 
+#, fuzzy
 msgid "/Conversation/Insert Lin_k..."
 msgstr "/ಮಾತುಕತೆ/ಕೊಂಡಿಯನ್ನು _ಸೇರಿಸಿ..."
 
+#, fuzzy
 msgid "/Conversation/Insert Imag_e..."
 msgstr "/ಮಾತುಕತೆ/Insert Imag_e..."
 
+#, fuzzy
 msgid "/Conversation/_Close"
 msgstr "/ಮಾತುಕತೆ/_ಮುಚ್ಚಿ"
 
 #. Options
 msgid "/_Options"
-msgstr "/_ಆಯ್ಕೆಗಳು"
-
+msgstr "/ಆಯ್ಕೆಗಳು(_O)"
+
+#, fuzzy
 msgid "/Options/Enable _Logging"
 msgstr "/ಆಯ್ಕೆಗಳು/ಲಾಗ್ಗಿಂಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"
 
@@ -11490,6 +11594,7 @@
 msgid "/Options/Show Formatting _Toolbars"
 msgstr ""
 
+#, fuzzy
 msgid "/Options/Show Ti_mestamps"
 msgstr "/ಆಯ್ಕೆಗಳು/ಸಮಯಮುದ್ರೆ _ತೋರಿಸಿ"
 
@@ -11526,6 +11631,7 @@
 msgid "/Conversation/Send File..."
 msgstr "/ಮಾತುಕತೆ/ಕಡತ ಕಳಿಸಿ..."
 
+#, fuzzy
 msgid "/Conversation/Add Buddy Pounce..."
 msgstr "/ಮಾತುಕತೆ/ಗೆಳೆಯನ-ಮೇಲೆ-ಎರಗಪ್ಪ ಸೇರಿಸಿ..."
 
@@ -11916,6 +12022,10 @@
 msgid "Occitan"
 msgstr ""
 
+#, fuzzy
+msgid "Oriya"
+msgstr "ಒಪೆರಾ"
+
 msgid "Punjabi"
 msgstr ""
 
@@ -12022,6 +12132,9 @@
 "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
 "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
 msgstr ""
+"<FONT SIZE=\"4\">ಸಾಮಾನ್ಯವಾಗಿ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು:</FONT> <A HREF=\"http://"
+"developer.pidgin.im/wiki/FAQ\">http://developer.pidgin.im/wiki/FAQ</A><BR/"
+"><BR/>"
 
 #, c-format
 msgid ""
@@ -12065,8 +12178,9 @@
 msgstr "ದೋಷನಿವಾರಣೆಯ ಮಾಹಿತಿ"
 
 msgid "_Name"
-msgstr "_ಹೆಸರು"
-
+msgstr "ಹೆಸರು(_N)"
+
+#, fuzzy
 msgid "_Account"
 msgstr "_ಖಾತೆ"
 
@@ -12146,6 +12260,7 @@
 msgid "Remove Group"
 msgstr "ಗುಂಪು ತೆಗೆದುಹಾಕಿ"
 
+#, fuzzy
 msgid "_Remove Group"
 msgstr "_ಗುಂಪು ತೆಗೆದುಹಾಕಿ"
 
@@ -12169,6 +12284,7 @@
 msgid "Remove Chat"
 msgstr "ಮಾತುಕತೆಯನ್ನು ತೆಗೆದುಹಾಕಿ"
 
+#, fuzzy
 msgid "_Remove Chat"
 msgstr "_ಮಾತುಕತೆಯನ್ನು ತೆಗೆದುಹಾಕಿ"
 
@@ -12191,17 +12307,14 @@
 msgid "New _Message..."
 msgstr "ಹೊಸ ಸಂದೇಶ..."
 
-#, fuzzy
 msgid "_Accounts"
-msgstr "/_ಖಾತೆಗಳು"
-
-#, fuzzy
+msgstr "ಖಾತೆಗಳು(_A)"
+
 msgid "Plu_gins"
-msgstr "ಪ್ಲಗಿನ್‍ಗಳು"
-
-#, fuzzy
+msgstr "ಪ್ಲಗ್‌ಇನ್‌ಗಳು(_g)"
+
 msgid "Pr_eferences"
-msgstr "ಆದ್ಯತೆಗಳು "
+msgstr "ಆದ್ಯತೆಗಳು(_e)"
 
 #, fuzzy
 msgid "Mute _Sounds"
@@ -12263,16 +12376,20 @@
 msgid "Time Remaining:"
 msgstr "ಉಳಿದಿರುವ ಸಮಯ:"
 
+#, fuzzy
 msgid "Close this window when all transfers _finish"
 msgstr "_ಎಲ್ಲಾ ವರ್ಗಾವಣೆಗಳು ಮುಗಿದಾಗ ಈ ಕಿಡಿಕಿ ಮುಚ್ಚಿ"
 
+#, fuzzy
 msgid "C_lear finished transfers"
 msgstr "ಮು_ಗಿದ ವರ್ಗಾವಣೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ"
 
 #. "Download Details" arrow
+#, fuzzy
 msgid "File transfer _details"
 msgstr "_ಕಡತ ವರ್ಗಾವಣೆ ವಿವರ"
 
+#, fuzzy
 msgid "Paste as Plain _Text"
 msgstr "ಸಾದಾ _ಪಠ್ಯವಾಗಿ ಅಂಟಿಸಿ"
 
@@ -12393,6 +12510,7 @@
 msgid "Save Image"
 msgstr "ಚಿತ್ರ ಉಳಿಸಿ"
 
+#, fuzzy
 msgid "_Save Image..."
 msgstr "_ಚಿತ್ರ ಉಳಿಸಿ..."
 
@@ -12409,10 +12527,10 @@
 msgstr "ಹಿನ್ನೆಲೆ ಬಣ್ಣವನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
 
 msgid "_URL"
-msgstr "_ಯುಆರ್ಎಲ್"
+msgstr "_URL"
 
 msgid "_Description"
-msgstr "_ವಿವರಣೆ"
+msgstr "ವಿವರಣೆ(_D)"
 
 msgid ""
 "Please enter the URL and description of the link that you want to insert. "
@@ -12450,9 +12568,8 @@
 msgid "This theme has no available smileys."
 msgstr ""
 
-#, fuzzy
 msgid "_Font"
-msgstr "ಅಕ್ಷರಶೈಲಿಗಳು"
+msgstr "ಅಕ್ಷರ ಶೈಲಿ(_F)"
 
 #, fuzzy
 msgid "Group Items"
@@ -12682,7 +12799,7 @@
 msgstr ""
 
 msgid "_Pause"
-msgstr "_ತಡೆಯಿರಿ"
+msgstr "ವಿರಮಿಸು(_ P)"
 
 #, c-format
 msgid "%s has %d new message."
@@ -12772,6 +12889,7 @@
 msgid "<b>Filename:</b>"
 msgstr "ಬಳಕೆದಾರನ ಹೆಸರು:"
 
+#, fuzzy
 msgid "Configure Pl_ugin"
 msgstr "ಪ್ಲಗ್ಗಿನ್ ಸಂರಚಿಸಿ"
 
@@ -12786,12 +12904,14 @@
 msgstr "ಬಡ್ಡಿ ಪೌನ್ಸ್ ತಿದ್ದಿ"
 
 #. Create the "Pounce on Whom" frame.
+#, fuzzy
 msgid "Pounce on Whom"
 msgstr "ಯಾರ ಮೇಲೆ ನಿಗಾ ಇಡಬೇಕು"
 
 msgid "_Account:"
-msgstr "_ಖಾತೆ:"
-
+msgstr "ಖಾತೆ(_A):"
+
+#, fuzzy
 msgid "_Buddy name:"
 msgstr "_ಗೆಳೆಯನ ಹೆಸರು:"
 
@@ -12855,6 +12975,7 @@
 msgid "_Recurring"
 msgstr "ಪುನರಾವರ್ತಿಸುವ (_R)"
 
+#, fuzzy
 msgid "Pounce Target"
 msgstr "ಗುರಿಯ ಮೇಲೆರಗಿ"
 
@@ -13019,7 +13140,7 @@
 msgstr ""
 
 msgid "N_ew conversations:"
-msgstr "ಹೊಸ ಮಾತುಕತೆಗಳು(e):"
+msgstr "ಹೊಸ ಮಾತುಕತೆಗಳು(_e):"
 
 msgid "Show _formatting on incoming messages"
 msgstr ""
@@ -13037,6 +13158,7 @@
 msgid "_Notify buddies that you are typing to them"
 msgstr "ಗೆಳೆಯರಿಗೆ ನೀವು ಟೈಪಿಸುತ್ತಿರುವದರ  ಸೂಚನೆ ಕೊಡಿ (_N)"
 
+#, fuzzy
 msgid "Highlight _misspelled words"
 msgstr "ತಪ್ಪು ಕಾಗುಣಿತದ ಶಬ್ದ ತೋರಿಸಿ"
 
@@ -13173,9 +13295,11 @@
 msgid "Configure _Browser"
 msgstr "ಮಾತುಕತೆ ಸಂರಚಿಸಿ(_C)"
 
+#, fuzzy
 msgid "_Browser:"
 msgstr "_ಜಾಲವೀಕ್ಷಕ:"
 
+#, fuzzy
 msgid "_Open link in:"
 msgstr "_ಕೊಂಡಿಯನ್ನು ಇದರಲ್ಲಿ ತೆರೆಯಿರಿ ->"
 
@@ -13313,7 +13437,7 @@
 msgstr ""
 
 msgid "Based on keyboard or mouse use"
-msgstr ""
+msgstr "ಕೀಲಿಮನೆ ಅಥವ ಮೌಸ್‌ನ ಬಳಕೆಯ ಆಧಾರದ ಮೇಲೆ"
 
 msgid "_Minutes before becoming idle:"
 msgstr "ಜಡಗೊಳ್ಳುವ ಮುಂಚಿನ ನಿಮಿಷಗಳು(_M):"
@@ -13322,6 +13446,7 @@
 msgid "Change to this status when _idle:"
 msgstr "ಉಪಯೋಸುತ್ತಿಲ್ಲದಾಗ ಸ್ಟೇಟಸ್ ಬದಲಾಯಿಸಿ"
 
+#, fuzzy
 msgid "_Auto-reply:"
 msgstr "_ಆಟೋಮ್ಯಾಟಿಕ್-ಉತ್ತರ:"
 
@@ -13338,20 +13463,17 @@
 msgid "Status to a_pply at startup:"
 msgstr ""
 
-#, fuzzy
 msgid "Interface"
-msgstr "ಆಸಕ್ತಿಗಳು"
+msgstr "ಸಂಪರ್ಕಸಾಧನ"
 
 msgid "Browser"
 msgstr "ವೀಕ್ಷಕ"
 
-#, fuzzy
 msgid "Status / Idle"
-msgstr "ಸ್ಥಿತಿ:"
-
-#, fuzzy
+msgstr "ಸ್ಥಿತಿ / ನಿಶ್ಚಲ"
+
 msgid "Themes"
-msgstr "ಪರೀಕ್ಷಿಸಿ"
+msgstr "ಪರಿಸರವಿನ್ಯಾಸಗಳು"
 
 msgid "Allow all users to contact me"
 msgstr "ಎಲ್ಲ ಬಳಕೆದಾರರಿಗೂ ನನ್ನನ್ನು ಸಂಪರ್ಕಿಸಲು ಅನುಮತಿಸಿ"
@@ -13378,9 +13500,8 @@
 msgstr ""
 
 #. Remove All button
-#, fuzzy
 msgid "Remove Al_l"
-msgstr "ತೆಗೆದು ಹಾಕಿ"
+msgstr "ಎಲ್ಲವನ್ನೂ ತೆಗೆದು ಹಾಕು(_l)"
 
 msgid "Permit User"
 msgstr "ಬಳಕೆದಾರನನ್ನು ಅನುಮತಿಸಿ"
@@ -13467,11 +13588,11 @@
 
 #. Different status message expander
 msgid "Use a _different status for some accounts"
-msgstr ""
+msgstr "ಕೆಲವು ಖಾತೆಗಳಿಗಾಗಿ ಬೇರೊಂದು ಸ್ಥಿತಿಯನ್ನು ಬಳಸು(_d)"
 
 #. Save & Use button
 msgid "Sa_ve & Use"
-msgstr "ಉಳಿಸಿ ಹಾಗೂ ಬಳಸಿ"
+msgstr "ಉಳಿಸಿ ಹಾಗೂ ಬಳಸಿ(_v)"
 
 #, c-format
 msgid "Status for %s"
@@ -13480,71 +13601,56 @@
 #, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
-msgstr ""
-
-#, fuzzy
+msgstr "'%s' ಗಾಗಿ ಇಚ್ಛೆಯ ಸ್ಮೈಲಿ ಈಗಾಗಲೆ ಇದೆ. ದಯವಿಟ್ಟು ಬೇರೊಂದು ಶಾರ್ಟ್-ಕಟ್‌ ಅನ್ನು ಬಳಸಿ."
+
 msgid "Custom Smiley"
-msgstr "ಸ್ಮೈಲಿ ಸೇರಿಸಿ"
-
-#, fuzzy
+msgstr "ಇಚ್ಛೆಯ ಸ್ಮೈಲಿ"
+
 msgid "Duplicate Shortcut"
-msgstr "ಡೂಪ್ಲಿಕೇಟ್ ತಿದ್ದುಪಡಿ"
-
-#, fuzzy
+msgstr "ನಕಲಿ ಶಾರ್ಟ್-ಕಟ್"
+
 msgid "Edit Smiley"
-msgstr "ಸ್ಮೈಲಿ ಸೇರಿಸಿ"
-
-#, fuzzy
+msgstr "ಸ್ಮೈಲಿಯನ್ನು ಸಂಪಾದಿಸಿ"
+
 msgid "Add Smiley"
-msgstr "ಮುಗುಳ್ನಗಿ!"
-
-#, fuzzy
+msgstr "ಸ್ಮೈಲಿಯನ್ನು ಸೇರಿಸಿ"
+
 msgid "_Image:"
-msgstr "ಚಿತ್ರ ಉಳಿಸಿ"
+msgstr "ಚಿತ್ರ(_I):"
 
 #. Shortcut text
-#, fuzzy
 msgid "S_hortcut text:"
-msgstr "ಪೋರ್ಟ್"
-
-#, fuzzy
+msgstr "ಶಾರ್ಟ್-ಕಟ್ ಪಠ್ಯ(_h):"
+
 msgid "Smiley"
-msgstr "ಮುಗುಳ್ನಗಿ!"
-
-#, fuzzy
+msgstr "ಸ್ಮೈಲಿ"
+
 msgid "Shortcut Text"
-msgstr "ಪೋರ್ಟ್"
+msgstr "ಶಾರ್ಟ್-ಕಟ್ ಪಠ್ಯ"
 
 msgid "Custom Smiley Manager"
-msgstr ""
-
-#, fuzzy
+msgstr "ಇಚ್ಛೆಯ ಸ್ಮೈಲಿ ವ್ಯವಸ್ಥಾಪಕ"
+
 msgid "Select Buddy Icon"
-msgstr "ಗೆಳೆಯನನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
-
-#, fuzzy
+msgstr "ಗೆಳೆಯ ಚಿಹ್ನೆಯನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
+
 msgid "Click to change your buddyicon for this account."
-msgstr "ಈ ಗೆಳೆಯ ಚಿನ್ಹೆಯನ್ನು ಈ ಖಾತೆಗೆ ಬಳಸಿ"
-
-#, fuzzy
+msgstr "ಈ ಖಾತೆಗೆ ನಿಮ್ಮ ಗೆಳೆಯಚಿಹ್ನೆಯನ್ನು ಬದಲಾಯಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ."
+
 msgid "Click to change your buddyicon for all accounts."
-msgstr "ಈ ಗೆಳೆಯ ಚಿನ್ಹೆಯನ್ನು ಈ ಖಾತೆಗೆ ಬಳಸಿ"
-
-#, fuzzy
+msgstr "ಎಲ್ಲಾ ಖಾತೆಗಳಿಗೂ ನಿಮ್ಮ ಗೆಳೆಯಚಿಹ್ನೆಯನ್ನು ಬದಲಾಯಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ."
+
 msgid "Waiting for network connection"
-msgstr "ವರ್ಗಾವಣೆಯ ಪ್ರಾರಂಭಕ್ಕಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ"
-
-#, fuzzy
+msgstr "ಜಾಲಬಂಧ ಸಂಪರ್ಕಕ್ಕಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ"
+
 msgid "New status..."
-msgstr "ಹೊಸ ಸಂದೇಶ..."
-
-#, fuzzy
+msgstr "ಹೊಸ ಸ್ಥಿತಿ..."
+
 msgid "Saved statuses..."
-msgstr "ಉಳಿಸಿದ ಸ್ಥಿತಿಗಳು"
-
-#, fuzzy
+msgstr "ಉಳಿಸಿದ ಸ್ಥಿತಿಗಳು..."
+
 msgid "Status Selector"
-msgstr "ಸದ್ದಿನ ಆಯ್ಕೆ"
+msgstr "ಸ್ಥಿತಿ ಆಯ್ಕೆಗಾರ"
 
 msgid "Google Talk"
 msgstr "ಗೂಗಲ್ ಟಾಕ್"
@@ -13565,17 +13671,21 @@
 "%s cannot transfer a folder. You will need to send the files within "
 "individually."
 msgstr ""
+"%s ಒಂದು ಕಡತಕೋಶವನ್ನು ಕಳುಹಿಸಲು ಆಗುತ್ತಿಲ್ಲ. ನೀವು ಕಡತಗಳನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ "
+"ಕಳುಹಿಸಬೇಕಾಗುತ್ತದೆ."
 
 msgid "You have dragged an image"
-msgstr ""
+msgstr "ನೀವು ಒಂದು ಚಿತ್ರವನ್ನು ಎಳೆದು ಸೇರಿಸಿದ್ದೀರಿ"
 
 msgid ""
 "You can send this image as a file transfer, embed it into this message, or "
 "use it as the buddy icon for this user."
 msgstr ""
+"ಈ ಚಿತ್ರವನ್ನು ಬೇಕಿದ್ದಲ್ಲಿ ಒಂದು ಕಡತ ವರ್ಗಾವಣೆಯಲ್ಲಿ ಕಳುಹಿಸಬಹುದು, ಈ ಸಂದೇಶದಲ್ಲಿ "
+"ಸೇರಿಬಹುದು, ಅಥವ ಈ ಬಳಕೆದಾರನಿಗಾಗಿ ಇದನ್ನು ಚಿಹ್ನೆಯಾಗಿ ಬಳಸಲು ಉಪಯೋಗಿಸಬಹುದು"
 
 msgid "Set as buddy icon"
-msgstr ""
+msgstr "ಗೆಳೆಯನ ಚಿಹ್ನೆಯಾಗಿ ಹೊಂದಿಸಿ"
 
 msgid "Send image file"
 msgstr "ಚಿತ್ರ ಕಡತವನ್ನು  ಕಳುಹಿಸಿ"
@@ -13584,17 +13694,21 @@
 msgstr "ಸಂದೇಶದಲ್ಲಿ ಸೇರಿಸಿ"
 
 msgid "Would you like to set it as the buddy icon for this user?"
-msgstr ""
+msgstr "ಈ ಬಳಕೆದಾರನಿಗಾಗಿ ಇದನ್ನು ಚಿಹ್ನೆಯಾಗಿ ಬಳಸಲು ಬಯಸುತ್ತೀರೆ?"
 
 msgid ""
 "You can send this image as a file transfer, or use it as the buddy icon for "
 "this user."
 msgstr ""
+"ಈ ಚಿತ್ರವನ್ನು ಬೇಕಿದ್ದಲ್ಲಿ ಒಂದು ಕಡತ ವರ್ಗಾವಣೆಯಲ್ಲಿ ಕಳುಹಿಸಬಹುದು, ಅಥವ ಈ ಬಳಕೆದಾರನಿಗಾಗಿ "
+"ಇದನ್ನು ಚಿಹ್ನೆಯಾಗಿ ಬಳಸಲು ಉಪಯೋಗಿಸಬಹುದು"
 
 msgid ""
 "You can insert this image into this message, or use it as the buddy icon for "
 "this user"
 msgstr ""
+"ಈ ಚಿತ್ರವನ್ನು ಬೇಕಿದ್ದಲ್ಲಿ ಈ ಸಂದೇಶದೊಂದಿಗೆ ಸೇರಿಸಬಹುದು, ಅಥವ ಈ ಬಳಕೆದಾರನಿಗಾಗಿ ಇದನ್ನು "
+"ಚಿಹ್ನೆಯಾಗಿ ಬಳಸಲು ಉಪಯೋಗಿಸಬಹುದು"
 
 #. I don't know if we really want to do anything here.  Most of the desktop item types are crap like
 #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really
@@ -13602,12 +13716,14 @@
 #. * Probably not.  I'll just give an error and return.
 #. The original patch sent the icon used by the launcher.  That's probably wrong
 msgid "Cannot send launcher"
-msgstr ""
+msgstr "ಆರಂಭಕವು(ಲಾಂಚರ್) ಕಂಡು ಬಂದಿಲ್ಲ"
 
 msgid ""
 "You dragged a desktop launcher. Most likely you wanted to send the target of "
 "this launcher instead of this launcher itself."
 msgstr ""
+"ನೀವು ಒಂದು ಗಣಕತೆರೆ ಆರಂಭಕವನ್ನು(ಲಾಂಚರ್) ಎಳೆದು ಸೇರಿಸಿದ್ದೀರಿ. ಬಹುಷಃ ನೀವು ಈ ಆರಂಭಕದ "
+"ಬದಲಿಗೆ ಕೇವಲ ಈ ಆರಂಭಕದ ಗುರಿಯನ್ನು ಕಳುಹಿಸಲು ಬಯಸಿರಬಹುದು."
 
 #, c-format
 msgid ""
@@ -13615,18 +13731,21 @@
 "<b>File size:</b> %s\n"
 "<b>Image size:</b> %dx%d"
 msgstr ""
+"<b>ಕಡತ:</b> %s\n"
+"<b>ಕಡತದ ಗಾತ್ರ:</b> %s\n"
+"<b>ಚಿತ್ರದ ಗಾತ್ರ:</b> %dx%d"
 
 #, c-format
 msgid "The file '%s' is too large for %s.  Please try a smaller image.\n"
 msgstr ""
-
-#, fuzzy
+"'%s' ಎಂಬ ಕಡತವು %s ಗೆ ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ.  ದಯವಿಟ್ಟು ಒಂದು ಸಣ್ಣ ಚಿತ್ರಯೊಂದಿಗೆ "
+"ಪ್ರಯತ್ನಿಸಿ.\n"
+
 msgid "Icon Error"
-msgstr "ಗೊತ್ತಿಲ್ಲದ ದೋಷ"
-
-#, fuzzy
+msgstr "ಚಿಹ್ನೆಯ ದೋಷ"
+
 msgid "Could not set icon"
-msgstr "ಕಳಿಸಲಾಗಲಿಲ್ಲ"
+msgstr "ಚಿಹ್ನೆಯನ್ನು ಹೊಂದಿಸಲಾಗಲಿಲ್ಲ"
 
 #, c-format
 msgid "Failed to open file '%s': %s"
@@ -13639,97 +13758,89 @@
 "ಚಿತ್ರ '%s'ವನ್ನು ಲೋಡ್ ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ: ಕಾರಣ ತಿಳಿದಿಲ್ಲ, ಬಹುಷಃ ಒಂದು ಭ್ರಷ್ಟಗೊಂಡ ಚಿತ್ರ "
 "ಕಡತದಿಂದಾಗಿರಬಹುದು"
 
-#, fuzzy
 msgid "_Open Link"
-msgstr "_ಕೊಂಡಿಯನ್ನು ಇದರಲ್ಲಿ ತೆರೆಯಿರಿ ->"
+msgstr "ಕೊಂಡಿಯನ್ನು ತೆರೆ(_O)"
 
 msgid "_Copy Link Location"
 msgstr "ಕೊಂಡಿಯ ತಾಣವನ್ನು ಕಾಪಿ ಮಾಡು(_C)"
 
 msgid "_Copy Email Address"
-msgstr "_ಇ-ಮೇಯ್ಲ್ ವಿಳಾಸವನ್ನು ನಕಲು ಮಾಡಿ"
-
-#, fuzzy
+msgstr "ಇ-ಮೇಯ್ಲ್ ವಿಳಾಸವನ್ನು ಕಾಪಿ ಮಾಡು(_C)"
+
 msgid "_Open File"
-msgstr "ಕಡತ ತೆರೆಯಿರಿ..."
-
-#, fuzzy
+msgstr "ಕಡತವನ್ನು ತೆರೆ(_O)..."
+
 msgid "Open _Containing Directory"
-msgstr "ಲಾಗ್ ಕಡತಕೋಶ"
+msgstr "ಇದನ್ನು ಹೊಂದಿರುವ ಕೋಶವನ್ನು ತೆರೆ(_C)"
 
 msgid "Save File"
 msgstr "ಕಡತ ಉಳಿಸಿ"
 
-#, fuzzy
 msgid "_Play Sound"
-msgstr "ಸದ್ದೊಂದನ್ನು ಮಾಡಿ(_l)"
-
-#, fuzzy
+msgstr "ಸದ್ದೊಂದನ್ನು ಮಾಡು(_P)"
+
 msgid "_Save File"
-msgstr "ಕಡತ ಉಳಿಸಿ"
+msgstr "ಕಡತವನ್ನು ಉಳಿಸು(_S)"
+
+#, fuzzy
+msgid "Do you really want to clear?"
+msgstr " %s ಅನ್ನು ನಿಜವಾಗಿಯೂ ಅಳಿಸಬೇಕೆ?"
 
 msgid "Select color"
 msgstr "ಬಣ್ಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
-#, fuzzy
 msgid "Pidgin"
-msgstr "ಪ್ಲಗಿನ್‍ಗಳು"
+msgstr "ಪಿಜಿನ್"
 
 msgid "_Alias"
-msgstr "_ಅಲಿಯಾಸ್"
+msgstr "ಅಲಿಯಾಸ್(_A)"
 
 msgid "Close _tabs"
-msgstr "_ಟ್ಯಾಬ್ ಗಳನ್ನು ಮರೆಯಾಗಿಸಿ"
+msgstr "ಹಾಳೆಗಳನ್ನು ಮುಚ್ಚು(_t)"
 
 msgid "_Get Info"
-msgstr "_ಮಾಹಿತಿ ಪಡೆಯಿರಿ"
+msgstr "ಮಾಹಿತಿ ಪಡೆ(_G)"
 
 msgid "_Invite"
-msgstr "_ಆಹ್ವಾನ"
-
-#, fuzzy
+msgstr "ಆಮಂತ್ರಿಸು(_I)"
+
 msgid "_Modify..."
-msgstr "_ಬದಲಿಸಿ"
-
-#, fuzzy
+msgstr "ಬದಲಾಯಿಸು(_M)..."
+
 msgid "_Add..."
-msgstr "ಸೇರಿಸಿ(_A)"
+msgstr "ಸೇರಿಸು(_A)..."
 
 msgid "_Open Mail"
-msgstr "_ಪತ್ರ ತೆರೆಯಿರಿ"
-
-#, fuzzy
+msgstr "ಮೈಲನ್ನು ತೆರೆ(_O)"
+
 msgid "_Edit"
-msgstr "ತಿದ್ದಿ"
-
-#, fuzzy
+msgstr "ಸಂಪಾದನೆ (_E)"
+
 msgid "Pidgin Tooltip"
-msgstr "ಪ್ಲಗಿನ್‍ಗಳು"
+msgstr "ಪಿಜಿನ್ ಉಪಕರಣಸಲಹೆ"
 
 msgid "Pidgin smileys"
-msgstr ""
+msgstr "ಪಿಜಿನ್ ಸ್ಮೈಲಿಗಳು"
 
 msgid "Selecting this disables graphical emoticons."
-msgstr ""
-
-#, fuzzy
+msgstr "ಇದನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದರಿಂದ ಚಿತ್ರಾತ್ಮಕ ಎಮೊಟಿಕನ್‌ಗಳನ್ನು ಅಶಕ್ತಗೊಳಿಸುತ್ತದೆ."
+
 msgid "none"
-msgstr "(ಯಾವುದೂ ಇಲ್ಲ}"
-
-#, fuzzy
+msgstr "ಏನೂ ಇಲ್ಲ"
+
 msgid "Small"
-msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ"
+msgstr "ಸಣ್ಣ"
 
 msgid "Smaller versions of the default smilies"
-msgstr ""
+msgstr "ಪೂರ್ವನಿಯೋಜಿತ ಸ್ಮೈಲಿಗಳ ಸಣ್ಣ ಆವೃತ್ತಿಗಳು"
 
 msgid "Response Probability:"
 msgstr "ಪ್ರತಿಕ್ರಿಯೆ ಸಾಧ್ಯತೆ:"
 
 msgid "Statistics Configuration"
-msgstr ""
+msgstr "ಅಂಕಿಅಂಶಗಳ ಸಂರಚನೆ"
 
 #. msg_difference spinner
 msgid "Maximum response timeout:"
@@ -13762,7 +13873,7 @@
 
 #. *  summary
 msgid "Displays statistical information about your buddies' availability"
-msgstr ""
+msgstr "ನಿಮ್ಮ ಗೆಳೆಯರ ಲಭ್ಯತೆಯ ಬಗೆಗಿನ ಅಂಕಿಅಂಶದ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸುತ್ತದೆ"
 
 msgid "Buddy is idle"
 msgstr "ಸ್ನೇಹಿತರು ಜಡವಾಗಿದ್ದಾರೆ"
@@ -13771,11 +13882,11 @@
 msgstr "ಸ್ನೇಹಿತರು ಇಲ್ಲಿಲ್ಲ"
 
 msgid "Buddy is \"extended\" away"
-msgstr ""
+msgstr "ಗೆಳೆಯರು ಆಚೆಹೋಗಿದ್ದನ್ನು \"ವಿಸ್ತರಿಸಲಾಗಿದೆ\""
 
 #. Not used yet.
 msgid "Buddy is mobile"
-msgstr ""
+msgstr "ಸ್ನೇಹಿತರು ಮೊಬೈಲ್‌ ದೂರವಾಣಿಯಲ್ಲಿದ್ದಾರೆ"
 
 msgid "Buddy is offline"
 msgstr "ಗೆಳೆಯನು ಆಫ್ಲೈನ್ ಆಗಿದ್ದಾನೆ"
@@ -13787,12 +13898,14 @@
 "The buddy with the <i>largest score</i> is the buddy who will have priority "
 "in the contact.\n"
 msgstr ""
+"<i>ಅತಿ ಹೆಚ್ಚಿನ ಅಂಕ</i>ವನ್ನು ಹೊಂದಿರುವ ಗೆಳೆಯನಿಗೆ ಸಂಪರ್ಕ ಪಟ್ಟಿಯಲ್ಲಿ ಹೆಚ್ಚಿನ ಆದ್ಯತೆ "
+"ಇರುತ್ತದೆ.\n"
 
 msgid "Use last buddy when scores are equal"
-msgstr ""
+msgstr "ಅಂಕಗಳು ಒಂದೆ ಆಗಿದ್ದಾಗ ಕೊನೆಯ ಗೆಳೆಯನನ್ನು ಬಳಸು"
 
 msgid "Point values to use for account..."
-msgstr ""
+msgstr "ಖಾತೆಯಲ್ಲಿ ಬಳಸಲು ಮೌಲ್ಯಗಳನ್ನು ಸೂಚಿಸಿ..."
 
 #. *< type
 #. *< ui_requirement
@@ -13816,44 +13929,36 @@
 "in contact priority computations."
 msgstr ""
 
-#, fuzzy
 msgid "Conversation Colors"
-msgstr "/ಮಾತುಕತೆ/_ಮುಚ್ಚಿ"
-
-#, fuzzy
+msgstr "ಮಾತುಕತೆಯ ಬಣ್ಣಗಳು"
+
 msgid "Customize colors in the conversation window"
-msgstr "ಪ್ರತಿ ಕಿಟಕಿಗೆ ಮಾತುಕತೆಗಳ ಸಂಖ್ಯೆ"
-
-#, fuzzy
+msgstr "ಮಾತುಕತೆಗಳ ವಿಂಡೊದಲ್ಲಿ ಬಣ್ಣಗಳನ್ನು ನಿಮ್ಮ ಇಚ್ಛೆಗೆ ತಕ್ಕಂತೆ ಬದಲಾಯಿಸಿ"
+
 msgid "Error Messages"
-msgstr "ಓದಿರದ ಸಂದೇಶಗಳು"
-
-#, fuzzy
+msgstr "ದೋಷ ಸಂದೇಶಗಳು"
+
 msgid "Highlighted Messages"
-msgstr "ತಾಳೆಯಾದ ಅಂಶಗಳನ್ನು ಎತ್ತಿತೋರಿಸಿ"
-
-#, fuzzy
+msgstr "ಎತ್ತಿತೋರಿಸಲಾದ ಸಂದೇಶಗಳು"
+
 msgid "System Messages"
-msgstr "ಗಣಕವ್ಯವಸ್ಥೆಯ ಸಂದೇಶ"
-
-#, fuzzy
+msgstr "ವ್ಯವಸ್ಥೆಯ ಸಂದೇಶಗಳು"
+
 msgid "Sent Messages"
-msgstr "ಗಣಕವ್ಯವಸ್ಥೆಯ ಸಂದೇಶ"
-
-#, fuzzy
+msgstr "ಕಳುಹಿಸಲಾದ ಸಂದೇಶಗಳು"
+
 msgid "Received Messages"
-msgstr "ಓದಿರದ ಸಂದೇಶಗಳು"
+msgstr "ಸ್ವೀಕರಿಸಲಾದ ಸಂದೇಶಗಳು"
 
 #, c-format
 msgid "Select Color for %s"
 msgstr " %s ಗೆ ಬಣ್ಣವನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ"
 
 msgid "Ignore incoming format"
-msgstr ""
-
-#, fuzzy
+msgstr "ಒಳಬರುವ ವಿನ್ಯಾಸವನ್ನು ಆಲಕ್ಷಿಸಿ"
+
 msgid "Apply in Chats"
-msgstr "ಅಲಿಯಾಸ್ ಮಾತುಕತೆ"
+msgstr "ಮಾತುಕತೆಗಳಲ್ಲಿ ಅನ್ವಯಿಸಿ"
 
 msgid "Apply in IMs"
 msgstr "IMಗಳಿಗೆ ಅನ್ವಯಿಸು"
@@ -13863,71 +13968,62 @@
 msgid "Server name request"
 msgstr "ಪರಿಚಾರಕದ(ಸರ್ವರ್‍) ಹೆಸರನ್ನು ನಮೂದಿಸಲು ಮನವಿ"
 
-#, fuzzy
 msgid "Enter an XMPP Server"
-msgstr "ಕೋರಿಕೆಯನ್ನು ಇಲ್ಲಿ ಸಲ್ಲಿಸಿ"
+msgstr "ಒಂದು XMPP ಪರಿಚಾರಕವನ್ನು ನಮೂದಿಸಿ"
 
 msgid "Select an XMPP server to query"
-msgstr ""
-
-#, fuzzy
+msgstr "ಮನವಿ ಸಲ್ಲಿಸಲು ಒಂದು XMPP ಪರಿಚಾರಕವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"
+
 msgid "Find Services"
-msgstr "ಆನ್‍ಲೈನ್ ಸೇವೆಗಳು"
-
-#, fuzzy
+msgstr "ಸೇವೆಗಳನ್ನು ಪತ್ತೆ ಮಾಡಿ"
+
 msgid "Add to Buddy List"
-msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿ ಕಳಿಸಿ"
-
-#, fuzzy
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿ ಗೆ ಸೇರಿಸಿ"
+
 msgid "Gateway"
-msgstr "ಆಚೆ ಹೋದಾಗ(_w)"
-
-#, fuzzy
+msgstr "ಗೇಟ್‌ವೇ"
+
 msgid "Directory"
-msgstr "ಲಾಗ್ ಕಡತಕೋಶ"
-
-#, fuzzy
+msgstr "ಕೋಶ"
+
 msgid "PubSub Collection"
-msgstr "ಸದ್ದಿನ ಆಯ್ಕೆ"
+msgstr "PubSub ಆಯ್ಕೆ"
 
 msgid "PubSub Leaf"
-msgstr ""
-
-#, fuzzy
+msgstr "PubSub ಲೀಫ್"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
 msgstr ""
 "\n"
-"<b>ವಿವರ:</b> ಹೆದರಿ ನಡುಗುತ್ತ"
+"<b>ವಿವರ:</b>"
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "ಬಳಕೆದಾರ ಮಾಹಿತಿ  ಬರೆಯಿರಿ"
-
-#, fuzzy
+msgstr "ಸೇವೆಯನ್ನು ಪತ್ತೆ ಮಾಡುವಿಕೆ"
+
 msgid "_Browse"
-msgstr "_ಜಾಲವೀಕ್ಷಕ:"
-
-#, fuzzy
+msgstr "ವೀಕ್ಷಿಸು(_B)"
+
 msgid "Server does not exist"
-msgstr "ಬಲಕೆದಾರರು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"
+msgstr "ಪರಿಚಾರವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"
 
 msgid "Server does not support service discovery"
-msgstr ""
-
-#, fuzzy
+msgstr "ಪರಿಚಾರಕವು ಸೇವೆಯನ್ನು ಪತ್ತೆಹಚ್ಚುವುದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"
+
 msgid "XMPP Service Discovery"
-msgstr "ಬಳಕೆದಾರ ಮಾಹಿತಿ  ಬರೆಯಿರಿ"
+msgstr "XMPP ಸೇವೆಯ ಪತ್ತೆ ಮಾಡುವಿಕೆ"
 
 msgid "Allows browsing and registering services."
-msgstr ""
+msgstr "ಸೇವೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಹಾಗು ನೋಂದಾಯಿಸಲು ಅನುಮತಿಸುತ್ತದೆ."
 
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
 msgstr ""
+"ಈ ಪ್ಲಗ್‌ಇನ್ ಸಾಂಪ್ರದಾಯಿಕ ವರ್ಗಾವಣೆಗಳು ಅಥವ XMPP ಸೇವೆಗಳನ್ನು ನೋಂದಾಯಿಸಲು ಬಹಳ "
+"ಉಪಯುಕ್ತವಾಗುತ್ತದೆ."
 
 msgid "By conversation count"
 msgstr "ಮಾತುಕತೆಗಳ ಸಂಖ್ಯೆವಾರು "
@@ -13945,7 +14041,7 @@
 msgstr "ಪ್ರತಿ ವಿಂಡೊಗೆ ಮಾತುಕತೆಗಳ ಸಂಖ್ಯೆ"
 
 msgid "Separate IM and Chat windows when placing by number"
-msgstr ""
+msgstr "ಒಂದು ಸಂಖ್ಯೆ ಆಧಾರದಲ್ಲಿ ಇರಿಸುವಾಗಿನ ಪ್ರತ್ಯೇಕ IM ಮತ್ತು ಮಾತುಕತೆ ವಿಂಡೊಗಳು"
 
 #. *< type
 #. *< ui_requirement
@@ -13954,12 +14050,12 @@
 #. *< priority
 #. *< id
 msgid "ExtPlacement"
-msgstr ""
+msgstr "ExtPlacement"
 
 #. *< name
 #. *< version
 msgid "Extra conversation placement options."
-msgstr ""
+msgstr "ಮಾತುಕತೆಯ ಸ್ಥಳನಿರ್ಧಾರದ ಹೆಚ್ಚುವರಿ ಆಯ್ಕೆಗಳು."
 
 #. *< summary
 #. *  description
@@ -13970,7 +14066,7 @@
 
 #. Configuration frame
 msgid "Mouse Gestures Configuration"
-msgstr ""
+msgstr "ಮೌಸ್‌ನ ವರ್ತನೆಗಳ ಸಂರಚನೆ"
 
 msgid "Middle mouse button"
 msgstr "ಮೌಸ್‌ನ ಮಧ್ಯದ ಗುಂಡಿ"
@@ -13980,7 +14076,7 @@
 
 #. "Visual gesture display" checkbox
 msgid "_Visual gesture display"
-msgstr ""
+msgstr "ದೃಶ್ಯರೂಪದ ವರ್ತನೆಯ ಪ್ರದರ್ಶನ(_V)"
 
 #. *< type
 #. *< ui_requirement
@@ -13989,13 +14085,13 @@
 #. *< priority
 #. *< id
 msgid "Mouse Gestures"
-msgstr ""
+msgstr "ಮೌಸ್‌ನ ವರ್ತನೆಗಳು"
 
 #. *< name
 #. *< version
 #. *  summary
 msgid "Provides support for mouse gestures"
-msgstr ""
+msgstr "ಮೌಸ್‌ನ ವರ್ತನೆಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ"
 
 #. *  description
 msgid ""
@@ -14005,6 +14101,11 @@
 " • Drag up and then to the left to switch to the previous conversation.\n"
 " • Drag up and then to the right to switch to the next conversation."
 msgstr ""
+"ಮಾತುಕತೆಯ ವಿಂಡೊದಲ್ಲಿ ಮೌಸ್‌ನ ವರ್ತನೆಗೆ ಬೆಂಬಲವನ್ನು ನೀಡುತ್ತದೆ. ನಿಶ್ಚಿತ ಕಾರ್ಯಗಳನ್ನು "
+"ನಿರ್ವಹಿಸಲು ಮೌಸ್‌ನ ಮಧ್ಯದ ಗುಂಡಿಯನ್ನು ಎಳೆಯಿರಿ:\n"
+" • ಮಾತುಕತೆಯನ್ನು ಮುಚ್ಚಲು ಅದನ್ನು ಕೆಳಕ್ಕೆ ಎಳೆದು ನಂತರ ಬಲಕ್ಕೆ ಎಳೆಯಿರಿ.\n"
+" • ಹಿಂದಿನ ಮಾತುಕತೆಗೆ ಬದಲಾಯಿಸಲು ಮೇಲಕ್ಕೆ ಎಳೆದು ನಂತರ ಎಡಕ್ಕೆ ಎಳೆಯಿರಿ.\n"
+" • ಮುಂದಿನ ಮಾತುಕತೆಗೆ ಬದಲಾಯಿಸಲು ಮೇಲಕ್ಕೆ ಎಳೆದು ನಂತರ ಬಲಕ್ಕೆ ಎಳೆಯಿರಿ."
 
 msgid "Instant Messaging"
 msgstr "ತಕ್ಷಣ ಸಂದೇಶ ನೀಡುವಿಕೆ"
@@ -14012,6 +14113,8 @@
 #. Add the label.
 msgid "Select a person from your address book below, or add a new person."
 msgstr ""
+"ಈ ಕೆಳಗಿನ ನಿಮ್ಮ ವಿಳಾಸ ಪುಸ್ತಕದಿಂದ ಒಬ್ಬ ವ್ಯಕ್ತಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ, ಅಥವ ಹೊಸ ವ್ಯಕ್ತಿಯನ್ನು "
+"ಸೇರಿಸಿ."
 
 msgid "Group:"
 msgstr "ಗುಂಪು:"
@@ -14029,20 +14132,23 @@
 "Select a person from your address book to add this buddy to, or create a new "
 "person."
 msgstr ""
+"ಈ ಗೆಳೆಯನನ್ನು ಸೇರಿಸಲು ನಿಮ್ಮ ವಿಳಾಸ ಪುಸ್ತಕದಿಂದ ಒಬ್ಬ ವ್ಯಕ್ತಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ, ಅಥವ ಹೊಸ "
+"ವ್ಯಕ್ತಿಯನ್ನು ರಚಿಸಿ."
 
 #. Add the expander
 msgid "User _details"
 msgstr "ಬಳಕೆದಾರನ ವಿವರ(_d)"
 
 #. "Associate Buddy" button
+#, fuzzy
 msgid "_Associate Buddy"
-msgstr ""
+msgstr "ಗೆಳೆಯನನ್ನು (_A)"
 
 msgid "Unable to send email"
-msgstr "ವಿ_ಅಂಚೆಯನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ"
+msgstr "ಇಮೈಲನ್ನು ಕಳಿಸಲಾಗಲಿಲ್ಲ"
 
 msgid "The evolution executable was not found in the PATH."
-msgstr ""
+msgstr "PATH ನಲ್ಲಿ ಇವಲ್ಯೂಶನ್‌ನಿಂದ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದುದು ಕಂಡು ಬಂದಿಲ್ಲ."
 
 msgid "An email address was not found for this buddy."
 msgstr "ಈ ಸ್ನೇಹಿತರ ಇಮೈಲ್ ವಿಳಾಸವು ಕಂಡು ಬಂದಿಲ್ಲ"
@@ -14051,15 +14157,15 @@
 msgstr "ವಿಳಾಸಪುಸ್ತಕಕ್ಕೆ ಸೇರಿಸಿ"
 
 msgid "Send Email"
-msgstr "ವಿ-ಅಂಚೆ ಕಳುಹಿಸಿ"
+msgstr "ಇ-ಮೈಲ್‌ ಕಳುಹಿಸಿ"
 
 #. Configuration frame
 msgid "Evolution Integration Configuration"
-msgstr ""
+msgstr "ಇವಲ್ಯೂಶನ್‌ನೊಂದಿಗೆ ಹೊಂದಿಸುವ ಸಂರಚನೆ"
 
 #. Label
 msgid "Select all accounts that buddies should be auto-added to."
-msgstr ""
+msgstr "ಯಾವ ಖಾತೆಗಳಿಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೇರಿಸಬೇಕಿರುವ ಅವುಗಳೆಲ್ಲವನ್ನೂ ಆರಿಸಿ."
 
 #. *< type
 #. *< ui_requirement
@@ -14068,21 +14174,20 @@
 #. *< priority
 #. *< id
 msgid "Evolution Integration"
-msgstr ""
+msgstr "ಇವಲ್ಯೂಶನ್‌ನೊಂದಿಗೆ ಹೊಂದಿಕೆ"
 
 #. *< name
 #. *< version
 #. *  summary
 #. *  description
 msgid "Provides integration with Evolution."
-msgstr ""
+msgstr "ಇವಲ್ಯೂಶನ್‌ನೊಂದಿಗೆ ಹೊಂದಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ."
 
 msgid "Please enter the person's information below."
 msgstr "ವ್ಯಕ್ತಿಯ ಮಾಹಿತಿಯನ್ನು ಕೆಳಗೆ ಬರೆಯಿರಿ"
 
-#, fuzzy
 msgid "Please enter the buddy's username and account type below."
-msgstr "ವ್ಯಕ್ತಿಯ ಮಾಹಿತಿಯನ್ನು ಕೆಳಗೆ ಬರೆಯಿರಿ"
+msgstr "ಗೆಳೆಯ ಬಳಕೆದಾರ ಹೆಸರು ಹಾಗು ಖಾತೆಯ ಬಗೆಯನ್ನು ಕೆಳಗೆ ಬರೆಯಿರಿ."
 
 msgid "Account type:"
 msgstr "ಖಾತೆಯ ಬಗೆ"
@@ -14098,7 +14203,7 @@
 msgstr "ಕೊನೆಯ (ಅಡ್ಡ)ಹೆಸರು:"
 
 msgid "Email:"
-msgstr "ವಿ-ಅಂಚೆ:"
+msgstr "ಇ-ಮೈಲ್‌:"
 
 #. *< type
 #. *< ui_requirement
@@ -14107,22 +14212,22 @@
 #. *< priority
 #. *< id
 msgid "GTK Signals Test"
-msgstr ""
+msgstr "GTK ಸೂಚನೆಗಳ ಪರೀಕ್ಷೆ"
 
 #. *< name
 #. *< version
 #. *  summary
 #. *  description
 msgid "Test to see that all ui signals are working properly."
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "ಎಲ್ಲಾ ui ಸಂಜ್ಞೆಗಳು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತಿವೆಯೆ ಎಂದು ಪರಿಶೀಲಿಸಿ."
+
+#, c-format
 msgid ""
 "\n"
 "<b>Buddy Note</b>: %s"
 msgstr ""
 "\n"
-"<b>ಗೆಳೆಯನ/ಳ ಅಲಿಯಾಸ್:</b> %s"
+"<b>ಗೆಳೆಯನ ಟಿಪ್ಪಣಿ:</b> %s"
 
 msgid "History"
 msgstr "ಇತಿಹಾಸ"
@@ -14134,7 +14239,7 @@
 #. *< priority
 #. *< id
 msgid "Iconify on Away"
-msgstr ""
+msgstr "ಆಚೆ ಹೋದಾಗ ಚಿಹ್ನೆಯ ರೂಪದಲ್ಲಿ ತೋರಿಸು"
 
 #. *< name
 #. *< version
@@ -14142,6 +14247,8 @@
 #. *  description
 msgid "Iconifies the buddy list and your conversations when you go away."
 msgstr ""
+"ನೀವು ಆಚೆ ಹೋದಾಗ ಗೆಳೆಯರ ಪಟ್ಟಿ ಹಾಗು ನಿಮ್ಮ ಮಾತುಕತೆಗಳನ್ನು ಚಿಹ್ನೆಯ ರೂಪದಲ್ಲಿ "
+"ತೋರಿಸಲಾಗುತ್ತದೆ."
 
 msgid "Mail Checker"
 msgstr "ಅಂಚೆ ಪರೀಕ್ಷಕ"
@@ -14151,20 +14258,19 @@
 
 msgid "Adds a small box to the buddy list that shows if you have new mail."
 msgstr ""
-
-#, fuzzy
+"ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿ ನಿಮಗೆ ಹೊಸ ಮೈಲ್ ಬಂದಿದೆ ಎಂದು ಸೂಚಿಸುವ ಒಂದು ಸಣ್ಣ ಚೌಕವನ್ನು ಸೇರಿಸುತ್ತದೆ."
+
 msgid "Markerline"
-msgstr "ಅಡಿಗೆರೆ ಎಳೆ"
+msgstr "ಗುರುತುರೇಖೆ"
 
 msgid "Draw a line to indicate new messages in a conversation."
-msgstr ""
-
-#, fuzzy
+msgstr "ಒಂದು ಮಾತುಕತೆಯಲ್ಲಿ ಹೊಸ ಸಂದೇಶವನ್ನು ಸೂಚಿಸಲು ಒಂದು ಗೆರೆಯನ್ನು ಎಳೆಯಿರಿ."
+
 msgid "Jump to markerline"
-msgstr "ಅಡಿಗೆರೆ ಎಳೆ"
+msgstr "ಗುರುತುರೇಖೆಗೆ ಹೋಗಿ"
 
 msgid "Draw Markerline in "
-msgstr ""
+msgstr "ಗುರುತುರೇಖೆಯನ್ನು ಇಲ್ಲಿ ಎಳೆಯಿರಿ"
 
 msgid "_IM windows"
 msgstr "_IM ವಿಂಡೋಗಳು"
@@ -14176,32 +14282,33 @@
 "A music messaging session has been requested. Please click the MM icon to "
 "accept."
 msgstr ""
+"ಒಂದು ಸಂಗೀತ ಸಂದೇಶ ಅಧಿವೇಶನಕ್ಕಾಗಿ ಮನವಿ ಮಾಡಲಾಗಿದೆ. ದಯವಿಟ್ಟು MM ಚಿಹ್ನೆಯ ಮೇಲೆ ಕ್ಲಿಕ್‌ "
+"ಮಾಡಿ."
 
 msgid "Music messaging session confirmed."
-msgstr ""
+msgstr "ಸಂಗೀತ ಸಂದೇಶದ ಅಧಿವೇಶವನ್ನು ಖಚಿತಪಡಿಸಲಾಗಿದೆ."
 
 msgid "Music Messaging"
 msgstr "ಸಂಗೀತ ಸಂದೇಶ"
 
 msgid "There was a conflict in running the command:"
-msgstr ""
+msgstr "ಆದೇಶವನ್ನು ಚಲಾಯಿಸುವಲ್ಲಿ ಒಂದು ಸಂದಿಗ್ಧತೆ ಉಂಟಾಗಿದೆ:"
 
 msgid "Error Running Editor"
-msgstr ""
-
-#, fuzzy
+msgstr "ಸಂಪಾದಕವನ್ನು ಚಲಾಯಿಸುವಲ್ಲಿ ದೋಷ"
+
 msgid "The following error has occurred:"
-msgstr "ಈ ಕೆಳಗಿನ ದೋಷವು ಸಂಭವಿಸಿದೆ"
+msgstr "ಈ ಕೆಳಗಿನ ದೋಷವು ಸಂಭವಿಸಿದೆ:"
 
 #. Configuration frame
 msgid "Music Messaging Configuration"
-msgstr ""
+msgstr "ಸಂಗೀತ ಸಂದೇಶದ ಸಂರಚನೆ"
 
 msgid "Score Editor Path"
 msgstr ""
 
 msgid "_Apply"
-msgstr "ಅನ್ವಯಿಸಿ(_A)"
+msgstr "ಅನ್ವಯಿಸು(_A)"
 
 #. *< type
 #. *< ui_requirement
@@ -14222,33 +14329,32 @@
 
 #. ---------- "Notify For" ----------
 msgid "Notify For"
-msgstr "ಸೂಚಿಸಿ"
-
-#, fuzzy
+msgstr "ಇದಕ್ಕೆ ಸೂಚಿಸಿ"
+
 msgid "\t_Only when someone says your username"
-msgstr "ಯಾರೋ ನಿಮ್ಮ ಪರದೆಯ ಹೆಸರನ್ನು ಹೇಳುತ್ತಾರೆ"
+msgstr "\t ಕೇವಲ ಯಾರಾದರೂ ನಿಮ್ಮ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಹೇಳಿದಾಗ(_O)"
 
 msgid "_Focused windows"
-msgstr ""
+msgstr "ಗಮನ ಹರಿಸಲಾದ ವಿಂಡೊಗಳು(_F)"
 
 #. ---------- "Notification Methods" ----------
 msgid "Notification Methods"
 msgstr "ಸೂಚನಾ ಪದ್ಧತಿಗಳು"
 
 msgid "Prepend _string into window title:"
-msgstr ""
+msgstr "ವಿಂಡೋ ಶೀರ್ಷಿಕೆಯ ಮೊದಲಿಗೆ ವಾಕ್ಯವನ್ನು ಸೇರಿಸಿ(_s):"
 
 #. Count method button
 msgid "Insert c_ount of new messages into window title"
-msgstr ""
+msgstr "ಹೊಸ ಸಂದೇಶದ ಎಣಿಕೆಯನ್ನು ವಿಂಡೊದ ಶೀರ್ಷಿಕೆಗೆ ಸೇರಿಸು(_o)"
 
 #. Count xprop method button
 msgid "Insert count of new message into _X property"
-msgstr ""
+msgstr "ಹೊಸ ಸಂದೇಶದ ಎಣಿಕೆಯನ್ನು _X ಗುಣಕ್ಕೆ ಸೇರಿಸು"
 
 #. Urgent method button
 msgid "Set window manager \"_URGENT\" hint"
-msgstr ""
+msgstr "ವಿಂಡೊ ವ್ಯವಸ್ಥಾಪಕನ \"_URGENT(ತುರ್ತು)\" ಸುಳಿವು"
 
 msgid "_Flash window"
 msgstr "ಮಾತುಕತೆ ವಿಂಡೊ(_C)"
@@ -14267,23 +14373,23 @@
 
 #. Remove on focus button
 msgid "Remove when conversation window _gains focus"
-msgstr ""
+msgstr "ಮಾತುಕತೆ ವಿಂಡೊದತ್ತ ಗಮನ ಕೇಂದ್ರೀಕರಿಸಿದಾಗ ತೆಗೆದುಹಾಕು(_g)"
 
 #. Remove on click button
 msgid "Remove when conversation window _receives click"
-msgstr ""
+msgstr "ಮಾತುಕತೆ ವಿಂಡೊದಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ತೆಗೆದುಹಾಕು(_r)"
 
 #. Remove on type button
 msgid "Remove when _typing in conversation window"
-msgstr "ಮಾತುಕತೆ ವಿಂಡೊದಲ್ಲಿ ಟೈಪಿಸುವಾಗ ತೆಗೆದುಹಾಕಿ(_t)"
+msgstr "ಮಾತುಕತೆ ವಿಂಡೊದಲ್ಲಿ ಟೈಪಿಸುವಾಗ ತೆಗೆದುಹಾಕು(_t)"
 
 #. Remove on message send button
 msgid "Remove when a _message gets sent"
-msgstr "ಸಂದೇಶವು _ಕಳಿಸಲ್ಪಟ್ಟಾಗ ತೆಗೆದುಹಾಕಿ"
+msgstr "ಸಂದೇಶವು ಕಳಿಸಲ್ಪಟ್ಟಾಗ ತೆಗೆದುಹಾಕು(_m)"
 
 #. Remove on conversation switch button
 msgid "Remove on switch to conversation ta_b"
-msgstr ""
+msgstr "ಮಾತುಕತೆಯ ಹಾಳೆಗೆ ಬದಲಾಯಿಸಿದಾಗ ತೆಗೆದು ಹಾಕು(_b)"
 
 #. *< type
 #. *< ui_requirement
@@ -14314,7 +14420,7 @@
 #. *< version
 #. *  summary
 msgid "An example plugin that does stuff - see the description."
-msgstr ""
+msgstr "ಆ ಕೆಲಸಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಪ್ಲಗ್ಗಿನ್ನಿನ ಒಂದು ಉದಾಹರಣೆಗಾಗಿ - ಉದಾಹರಣೆಯನ್ನು ನೋಡಿ."
 
 #. *  description
 msgid ""
@@ -14323,6 +14429,10 @@
 "- It reverses all incoming text\n"
 "- It sends a message to people on your list immediately when they sign on"
 msgstr ""
+"ಇದು ಒಂದು ಉತ್ತಮವಾದ ಪ್ಲಗ್ಗಿನ್ ಆಗಿದ್ದು ಈ ಕೆಳಗಿನ ಕೆಲಸಗಳನ್ನು ಮಾಡುತ್ತದೆ:\n"
+"- ಪ್ರೊಗ್ರಾಮನ್ನು ಯಾರು ರಚಿಸಿದರು ಎಂದು ನೀವು ಒಳಕ್ಕೆ ಪ್ರವೇಶಿಸಿದಾಗ ಇದು ತಿಳಿಸುತ್ತದೆ\n"
+"- ಒಳಕ್ಕೆ ಬರುವ ಎಲ್ಲಾ ಪಠ್ಯವನ್ನು ಹಿಂದು ಮುಂದಾಗಿಸುತ್ತದೆ\n"
+"- ನಿಮ್ಮ ಪಟ್ಟಿಯಲ್ಲಿ ಇರುವವರು ಒಳಕ್ಕೆ ಪ್ರವೇಶಿಸಿದ ಕೂಡಲೆ ಅವರಿಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುತ್ತದೆ"
 
 msgid "Hyperlink Color"
 msgstr "ಜಾಲಕೊಂಡಿಯ ಬಣ್ಣ"
@@ -14330,16 +14440,14 @@
 msgid "Visited Hyperlink Color"
 msgstr "ಭೇಟಿ ನೀಡಲಾದ ಜಾಲಕೊಂಡಿಯ ಬಣ್ಣ"
 
-#, fuzzy
 msgid "Highlighted Message Name Color"
-msgstr "ತಾಳೆಯಾದ ಅಂಶಗಳನ್ನು ಎತ್ತಿತೋರಿಸಿ"
-
-#, fuzzy
+msgstr "ಹೈಲೈಟ್ ಮಾಡಲಾದ ಸಂದೇಶದ ಹೆಸರಿನ ಬಣ್ಣ"
+
 msgid "Typing Notification Color"
-msgstr "ಸೂಚನೆ ತೆಗೆದುಹಾಕುವಿಕೆ"
+msgstr "ಬರೆಯುವ ಸೂಚನೆಯ ಬಣ್ಣ"
 
 msgid "GtkTreeView Horizontal Separation"
-msgstr ""
+msgstr "GtkTreeView ಅಡ್ಡ ವಿಭಜನೆ"
 
 msgid "Conversation Entry"
 msgstr "ಮಾತುಕತೆಯ ದಾಖಲೆ"
@@ -14368,13 +14476,13 @@
 msgstr "GTK+ ಸಂಪರ್ಕಸಾಧನದ(ಇಂಟರ್ಫೇಸ್) ಅಕ್ಷರಶೈಲಿ"
 
 msgid "GTK+ Text Shortcut Theme"
-msgstr ""
+msgstr "GTK+ ಪಠ್ಯ ಶಾರ್ಟ್-ಕಟ್ ಪರಿಸರವಿನ್ಯಾಸ(ತೀಮ್)"
 
 msgid "Disable Typing Notification Text"
 msgstr "ನಮೂದಿಸುವ ಸೂಚನಾ ಪಠ್ಯವನ್ನು ಅಶಕ್ತಗೊಳಿಸು"
 
 msgid "GTK+ Theme Control Settings"
-msgstr ""
+msgstr "GTK+ ಪರಿಸರವಿನ್ಯಾಸ(ತೀಮ್) ನಿಯಂತ್ರಣದ ಸಿದ್ಧತೆಗಳು"
 
 msgid "Colors"
 msgstr "ಬಣ್ಣಗಳು"
@@ -14396,7 +14504,7 @@
 msgstr "gtkrc ಕಡತಗಳನ್ನು ಮರಳಿ ಓದು"
 
 msgid "Pidgin GTK+ Theme Control"
-msgstr ""
+msgstr "ಪಿಜಿನ್ GTK+ ಪರಿಸರವಿನ್ಯಾಸ(ತೀಮ್) ನಿಯಂತ್ರಣ"
 
 msgid "Provides access to commonly used gtkrc settings."
 msgstr "ಸಾಮಾನ್ಯವಾಗಿ ಬಳಸಲಾಗುವ gtkrc ಸಿದ್ಧತೆಗಳಿಗೆ ನಿಲುಕಣೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ."
@@ -14465,15 +14573,16 @@
 
 #. *< name
 #. *< version
-#, fuzzy
 msgid "Conversation Window Send Button."
-msgstr " %s ದಲ್ಲಿ ಮಾತುಕತೆ"
+msgstr "ಮಾತುಕತೆ ವಿಂಡೊದಲ್ಲಿನ ಕಳುಹಿಸುವ ಗುಂಡಿ."
 
 #. *< summary
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
 "for use when no physical keyboard is present."
 msgstr ""
+"ಮಾತುಕತೆಯ ವಿಂಡೊದಲ್ಲಿನ ಬರೆಯುವ ಜಾಗದಲ್ಲಿ ಒಂದು ಕಳುಹಿಸುವ ಗುಂಡಿಯನ್ನು ಸೇರಿಸುತ್ತದೆ. "
+"ಯಾವುದೆ ಭೌತಿಕವಾದ ಕೀಲಿಮಣೆಯು ಇಲ್ಲದೆ ಇದ್ದಾಗೆ ಬಳಸುವ ಉದ್ಧೇಶವನ್ನು ಹೊಂದಿದೆ."
 
 msgid "Duplicate Correction"
 msgstr "ಡೂಪ್ಲಿಕೇಟ್ ತಿದ್ದುಪಡಿ"
@@ -14508,6 +14617,8 @@
 #. Created here so it can be passed to whole_words_button_toggled.
 msgid "_Exact case match (uncheck for automatic case handling)"
 msgstr ""
+"ನಿಖರವಾಗಿ ತಾಳೆಯಾಗುವ (ತಾನಾಗಿಯೆ ಕೇಸನ್ನು ನಿಭಾಯಿಸುವುದಾಗಿದ್ದಲ್ಲಿ ಇದನ್ನು ಗುರುತು ಹಾಕಬೇಡಿ)"
+"(_E)"
 
 msgid "Only replace _whole words"
 msgstr "ಕೇವಲ ಸಂಪೂರ್ಣ ಪದಗಳನ್ನು ಮಾತ್ರ ಬದಲಾಯಿಸು(_w)"
@@ -14516,13 +14627,15 @@
 msgstr "ಸಾಮಾನ್ಯ ಪಠ್ಯ ಬದಲಾವಣೆಯ ಆಯ್ಕೆಗಳು"
 
 msgid "Enable replacement of last word on send"
-msgstr ""
+msgstr "ಕಳುಹಿಸುವಾಗ ಕೊನೆಯ ಪದವನ್ನು ಬದಲಾಯಿಸುವುದನ್ನು ಶಕ್ತಗೊಳಿಸು"
 
 msgid "Text replacement"
 msgstr "ಪಠ್ಯ ಬದಲಾವಣೆ"
 
 msgid "Replaces text in outgoing messages according to user-defined rules."
 msgstr ""
+"ಬಳೆದಾರರಿಂದ ಸೂಚಿತಗೊಂಡಂತಹ ನಿಯಮಗಳಿಗೆ ಅನುಸಾರವಾಗಿ ಹೊರ ಹೋಗುವ ಸಂದೇಶಗಳಲ್ಲಿನ ಪಠ್ಯವನ್ನು "
+"ಬದಲಾಯಿಸುತ್ತದೆ."
 
 msgid "Just logged in"
 msgstr "ಈಗತಾನೆ ಪ್ರವೇಶಿಸಲಾಗಿದೆ"
@@ -14534,10 +14647,11 @@
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
-
-#, fuzzy
+"ಸಂಪರ್ಕವಿಳಾಸಕ್ಕಾಗಿನ ಚಿಹ್ನೆ/\n"
+"ಅಜ್ಞಾತ ವ್ಯಕ್ತಿಗಾಗಿ ಚಿಹ್ನೆ"
+
 msgid "Icon for Chat"
-msgstr "ಮಾತುಕತೆಗೆ ಸೇರಿಕೊಳ್ಳಿ"
+msgstr "ಮಾತುಕತೆಗಾಗಿನ ಚಿಹ್ನೆ"
 
 msgid "Ignored"
 msgstr "ಆಲಕ್ಷಿತ"
@@ -14585,21 +14699,19 @@
 msgstr "ಸಂವಾದ ಲಾಂಛನಗಳು"
 
 msgid "Pidgin Icon Theme Editor"
-msgstr ""
+msgstr "ಪಿಜಿನ್ ಚಿಹ್ನೆ ಪರಿಸರವಿನ್ಯಾಸ(ತೀಮ್) ಸಂಪಾದಕ"
 
 msgid "Contact"
 msgstr "ಸಂಪರ್ಕ ವಿಳಾಸ"
 
-#, fuzzy
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "ಸ್ನೇಹಿತರ ಪಟ್ಟಿ"
-
-#, fuzzy
+msgstr "ಪಿಜಿನ್ ಸ್ನೇಹಿತರ ಪಟ್ಟಿ ಪರಿಸರವಿನ್ಯಾಸ(ತೀಮ್) ಸಂಪಾದಕ"
+
 msgid "Edit Buddylist Theme"
-msgstr "ಸ್ನೇಹಿತರ ಪಟ್ಟಿ"
+msgstr "ಸ್ನೇಹಿತರ ಪಟ್ಟಿಯ ಪರಿಸರವಿನ್ಯಾಸವನ್ನು(ತೀಮ್) ಸಂಪಾದಿಸು"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "ಚಿಹ್ನೆಯ ಪರಿಸರವಿನ್ಯಾಸವನ್ನು(ತೀಮ್) ಸಂಪಾದಿಸು"
 
 #. *< type
 #. *< ui_requirement
@@ -14608,15 +14720,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "ಗೈಮ್ ಬಳಕೆದಾರ"
+msgstr "ಪಿಜಿನ್ ಪರಿಸರವಿನ್ಯಾಸ(ತೀಮ್) ಸಂಪಾದಕ"
 
 #. *< name
 #. *< version
 #. *  summary
 msgid "Pidgin Theme Editor."
-msgstr ""
+msgstr "ಪಿಜಿನ್ ಪರಿಸರವಿನ್ಯಾಸ(ತೀಮ್) ಸಂಪಾದಕ."
 
 #. *< type
 #. *< ui_requirement
@@ -14625,14 +14736,14 @@
 #. *< priority
 #. *< id
 msgid "Buddy Ticker"
-msgstr ""
+msgstr "ಗೆಳೆಯನ ಗುರುತುಗಾರ(ಟಿಕರ್)"
 
 #. *< name
 #. *< version
 #. *  summary
 #. *  description
 msgid "A horizontal scrolling version of the buddy list."
-msgstr ""
+msgstr "ಗೆಳೆಯರ ಪಟ್ಟಿಯ ಅಡ್ಡ ಚಲನಾ ಆವೃತ್ತಿ."
 
 msgid "Display Timestamps Every"
 msgstr "ಪ್ರತಿ ಈ ಸಮಯದಲ್ಲಿ ಸಮಯಮುದ್ರೆಯನ್ನು ತೋರಿಸು "
@@ -14662,10 +14773,10 @@
 # , c-format
 #, c-format
 msgid "_Force 24-hour time format"
-msgstr "೨೪ ಗಂಟೆ ಸಮಯಸ್ವರೂಪವನ್ನು ಬಲವಂತವಾಗಿ ಹೇರಿರಿ(_F)"
+msgstr "೨೪ ಗಂಟೆ ಸಮಯಸ್ವರೂಪವನ್ನು ಬಲವಂತವಾಗಿ ಸೂಚಿಸಿ(_F)"
 
 msgid "Show dates in..."
-msgstr "ದಿನಾಂಕಗಳನ್ನು ಹೀಗೆ ತೋರಿಸಿ..."
+msgstr "ದಿನಾಂಕಗಳನ್ನು ಹೀಗೆ ತೋರಿಸು..."
 
 msgid "Co_nversations:"
 msgstr "ಮಾತುಕತೆಗಳು(_n)"
@@ -14674,7 +14785,7 @@
 msgstr "ತಡವಾದ ಸಂದೇಶಗಳಿಗಾಗಿ"
 
 msgid "For delayed messages and in chats"
-msgstr ""
+msgstr "ತಡವಾದ ಸಂದೇಶಗಳು ಹಾಗು ಮಾತುಕತೆಗಳಿಗಾಗಿ"
 
 msgid "_Message Logs:"
 msgstr "ಸಂದೇಶ ಲಾಗ್‍ಗಳು(_M):"
@@ -14699,6 +14810,8 @@
 "This plugin allows the user to customize conversation and logging message "
 "timestamp formats."
 msgstr ""
+"ಈ ಪ್ಲಗ್ಗಿನ್ನನ್ನು ಬಳಸಿಕೊಂಡು ಮಾತುಕತೆಯ ಹಾಗು ದಾಖಲೆಯ ಸಂದೇಶದ ಸಮಯಮುದ್ರೆಯ ರೂಪವನ್ನು ನಿಮ್ಮ "
+"ಇಚ್ಛೆಗೆ ತಕ್ಕಂತೆ ಬದಲಾಯಿಸಬಹುದು."
 
 msgid "Audio"
 msgstr "ಆಡಿಯೊ"
@@ -14733,9 +14846,8 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#, fuzzy
 msgid "Voice/Video Settings"
-msgstr "ಸ್ಥಾಪನೆಗಳನ್ನು ತಿದ್ದಿ"
+msgstr "ಧ್ವನಿ/ವೀಡಿಯೊ ಸಿದ್ಧತೆಗಳು"
 
 #. *< name
 #. *< version
@@ -14774,6 +14886,7 @@
 
 msgid "Remove Buddy List window transparency on focus"
 msgstr ""
+"ಗಮನ ಕೇಂದ್ರೀಕರಿಸಿದಾಗ ಗೆಳೆಯರ ಪಟ್ಟಿಯ ವೇರಿಯೇಬಲ್ ಆಲ್ಫಾ ಪಾರದರ್ಶಕತೆಯನ್ನು ತೆಗೆದು ಹಾಕು"
 
 #. *< type
 #. *< ui_requirement
@@ -14788,7 +14901,7 @@
 #. *< version
 #. *  summary
 msgid "Variable Transparency for the buddy list and conversations."
-msgstr ""
+msgstr "ಮಾತುಕತೆಗಳಲ್ಲಿ ಹಾಗು ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿ ವೇರಿಯೇಬಲ್ ಆಲ್ಫಾ ಪಾರದರ್ಶಕತೆ."
 
 #. *  description
 msgid ""
@@ -14797,6 +14910,10 @@
 "\n"
 "* Note: This plugin requires Win2000 or greater."
 msgstr ""
+"ಈ ಪ್ಲಗ್ಗಿನ್ ಮಾತುಕತೆಯ ವಿಂಡೊಗಳು ಹಾಗು ಗೆಳೆಯರ ಪಟ್ಟಿಯಲ್ಲಿ ವೇರಿಯೇಬಲ್ ಆಲ್ಫಾ ಪಾರದರ್ಶಕತೆಯನ್ನು "
+"ಶಕ್ತಗೊಳಿಸುತ್ತದೆ.\n"
+"\n"
+"* ಸೂಚನೆ: ಈ ಪ್ಲಗ್ಗಿನ್‌ಗೆ Win2000 ಅಥವ ಅದರ ನಂತರದ ಆವೃತ್ತಿಯ ಅಗತ್ಯವಿರುತ್ತದೆ."
 
 #. Autostart
 msgid "Startup"
@@ -14808,7 +14925,7 @@
 msgstr "ವಿಂಡೋಸ್ ಆರಂಭಗೊಂಡಾಗ  %s ಅನ್ನು ಆರಂಭಿಸಿ(_S)"
 
 msgid "Allow multiple instances"
-msgstr ""
+msgstr "ಅನೇಕ ಸನ್ನಿವೇಶಗಳನ್ನು ಅನುಮತಿಸು"
 
 msgid "_Dockable Buddy List"
 msgstr "ಡಾಕ್ ಮಾಡಬಹುದಾದ ಗೆಳೆಯರ ಪಟ್ಟಿ(_D)"
@@ -14821,18 +14938,16 @@
 msgid "Only when docked"
 msgstr "ಕೇವಲ ಡಾಕ್ ಮಾಡಿದಾಗ"
 
-#, fuzzy
 msgid "Windows Pidgin Options"
-msgstr "ವಿಂಡೋಸ್ ಪಿಡ್ಗಿನ್ ಆಯ್ಕೆಗಳು"
-
-#, fuzzy
+msgstr "ವಿಂಡೋಸ್ ಪಿಜಿನ್ ಆಯ್ಕೆಗಳು"
+
 msgid "Options specific to Pidgin for Windows."
-msgstr "ವಿಂಡೋಸ್ ಗೈಮ್ ಗೆ ವಿಶಿಷ್ಟವಾದ ಆಯ್ಕೆಗಳು"
-
-#, fuzzy
+msgstr "ವಿಂಡೋಸ್ ನಿಶ್ಚಿತವಾದ ಪಿಜಿನ್‌ನ ಆಯ್ಕೆಗಳು."
+
 msgid ""
 "Provides options specific to Pidgin for Windows, such as buddy list docking."
-msgstr "ವಿಂಡೋಸ್ ಗೈಮ್ ಗೆ ವಿಶಿಷ್ಟವಾದ ಆಯ್ಕೆಗಳು"
+msgstr ""
+"ಗೆಳೆಯರ ಪಟ್ಟಿಯನ್ನು ಡಾಕ್‌ ಮಾಡುವಂತಹ ವಿಂಡೋಸ್ ನಿಶ್ಚಿತವಾದ ಪಿಜಿನ್‌ನ ಆಯ್ಕೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ."
 
 msgid "<font color='#777777'>Logged out.</font>"
 msgstr "<font color='#777777'>ಹೊರ ನಿರ್ಗಮಿಸಿದೆ.</font>"
@@ -14865,11 +14980,13 @@
 #. *< version
 #. *  summary
 msgid "Send and receive raw XMPP stanzas."
-msgstr ""
+msgstr "ಕಚ್ಛಾ XMPP ವಾಕ್ಯವೃಂದಗಳನ್ನು ಕಳುಹಿಸಿ ಹಾಗು ಸ್ವೀಕರಿಸಿ."
 
 #. *  description
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr ""
+"XMPP ಪರಿಚಾರಕಗಳಿಗಾಗಿ ಅಥವ ಕ್ಲೈಂಟುಗಳಿಗಾಗಿ ದೋಷ ನಿವಾರಣೆ ಮಾಡುವಲ್ಲಿ ಈ ಪ್ಲಗ್‌ಇನ್ "
+"ಸಹಾಯಕವಾಗುತ್ತದೆ."
 
 #~ msgid "%s"
 #~ msgstr "%s"
@@ -15015,7 +15132,7 @@
 
 #, fuzzy
 #~ msgid "Reachability Address"
-#~ msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ"
+#~ msgstr "ಇ-ಮೈಲ್‌ ವಿಳಾಸ"
 
 #, fuzzy
 #~ msgid "Jingle"
@@ -15838,3 +15955,11 @@
 
 #~ msgid "Unable to read"
 #~ msgstr "ಓದಲು ಅಸಮರ್ಥ"
+
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "ನೀವು ಕೊನೆಯ ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ ಕಾರ್ಯವನ್ನು ನಿರ್ವಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ನೀವು ದರದ "
+#~ "ಮಿತಿಯನ್ನು ಮೀರಿದ್ದೀರಿ. ದಯವಿಟ್ಟು ೧೦ ಸೆಕೆಂಡುಗಳವರೆಗೆ ಕಾಯಿರಿ ನಂತರ ಇನ್ನೊಮ್ಮೆ "
+#~ "ಪ್ರಯತ್ನಿಸಿ.\n"
--- a/po/mr.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/mr.po	Thu Feb 18 21:38:43 2010 +0000
@@ -8,8 +8,8 @@
 msgstr ""
 "Project-Id-Version: mr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-13 17:40-0800\n"
-"PO-Revision-Date: 2010-01-04 19:37+0530\n"
+"POT-Creation-Date: 2010-02-10 20:02-0800\n"
+"PO-Revision-Date: 2010-02-10 18:27+0530\n"
 "Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
 "Language-Team: Marathi <fedora-trans-mr@redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -4625,6 +4625,9 @@
 msgid "(Code %s)"
 msgstr "(कोड %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "संदेशमधील पसंतीची स्माईली पाठवण्यासाठी खूपच मोठे आहे."
+
 msgid "XML Parse error"
 msgstr "XML दोष स्पष्ट करण्यात दोष"
 
@@ -6593,7 +6596,10 @@
 msgid "Server port"
 msgstr "सर्व्हर पोर्ट"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "%s पासून अनपेक्षीत प्रतिसाद आढळले: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "%s पासून अनपेक्षीत प्रतिसाद आढळले"
@@ -6612,6 +6618,13 @@
 msgid "Error requesting %s: %s"
 msgstr "%s करीता विनंती करत आहे: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"प्रवेश करण्यासाठी सर्व्हरने CAPTCHA भरून काढण्याची विनंती केली आहे, परंतु सध्या क्लाएंट "
+"CAPTCHAs करीता समर्थन पुरवत नाही."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL पडद्यावरील नावाची ओळख पटवण्यासाठी येथे परवानगी देण्यास मनाई करतो"
 
@@ -7159,13 +7172,6 @@
 msgstr ""
 "[ह्या वापरकर्त्याकडून संदेश दाखवण्यास असमर्थ कारण त्यात अवैध अक्षरे समाविष्ट केली आहेत.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"मर्यादा ओलांडल्यामुळे शेवटची कृती कार्यरत होण्यास अशक्य. कृपया 10 सेकंद थांबा व पुनः प्रयत्न "
-"करा.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "  %s संभाषण खोलीतून  आपली जोडणी काढली."
@@ -11759,9 +11765,8 @@
 msgid "Mongolian"
 msgstr "मंगोलीयन"
 
-#, fuzzy
 msgid "Marathi"
-msgstr "गुजराती"
+msgstr "मराठी"
 
 msgid "Malay"
 msgstr "मलय"
@@ -11781,6 +11786,9 @@
 msgid "Occitan"
 msgstr "ओक्सिटन"
 
+msgid "Oriya"
+msgstr "उडिया"
+
 msgid "Punjabi"
 msgstr "पंजाबी"
 
@@ -13481,6 +13489,9 @@
 msgid "_Save File"
 msgstr "फाइल साठवा (_S)"
 
+msgid "Do you really want to clear?"
+msgstr "तुम्हाला नक्की नष्ट करायचे?"
+
 msgid "Select color"
 msgstr "रंग निवडा"
 
@@ -14668,6 +14679,3 @@
 #. *  description
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "हा प्लगईन डिबगिंग XMPP सर्व्हरसाठी किंवा ग्राहकांसाठी उपयुक्त ठरतो."
-
-#~ msgid "%s"
-#~ msgstr "%s"
--- a/po/nb.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/nb.po	Thu Feb 18 21:38:43 2010 +0000
@@ -8,21 +8,20 @@
 #  Petter Johan Olsen. (Updates for 0.x)
 #  Kyrre Ness Sjøbæk  <kyrre@solution-forge.net>, 2005. (Updates for 1.x)
 #  Hallvard Glad <hallvard.glad@gmail.com>, 2007.  (Updates for 2.x)
-#  Hans Fredrik Nordhaug <hans@nordhaug.priv.no>, 2009. (Updates for 2.5)
+#  Hans Fredrik Nordhaug <hans@nordhaug.priv.no>, 2009-2010. (Updates for 2.5-2.6)
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: nb\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:35-0500\n"
-"PO-Revision-Date: 2009-02-24 18:47+0100\n"
+"POT-Creation-Date: 2010-02-11 21:50-0800\n"
+"PO-Revision-Date: 2010-02-11 12:17+0100\n"
 "Last-Translator: Hans Fredrik Nordhaug <hans@nordhaug.priv.no>\n"
 "Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.ui.no>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: MagicPO 0.4-3042svn\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -624,7 +623,7 @@
 msgstr "Vis tidsstempler"
 
 msgid "Add Buddy Pounce..."
-msgstr "Legg til kontaktvarsling..."
+msgstr "Legg til kontaktvarsling ..."
 
 msgid "Invite..."
 msgstr "Inviter ..."
@@ -635,9 +634,8 @@
 msgid "Enable Sounds"
 msgstr "Aktiver lyder"
 
-#, fuzzy
 msgid "You are not connected."
-msgstr "Klarte ikke koble til"
+msgstr "Du er ikke tilkoblet."
 
 msgid "<AUTO-REPLY> "
 msgstr "<AUTO-SVAR> "
@@ -648,9 +646,8 @@
 msgstr[0] "Liste med %d bruker:\n"
 msgstr[1] "Liste med %d brukere:\n"
 
-#, fuzzy
 msgid "Supported debug options are: plugins version"
-msgstr "Støttede feilsøkingsvalg er: version"
+msgstr "Støttede feilsøkingsvalg er: plugins version"
 
 msgid "No such command (in this context)."
 msgstr "Ingen slik kommando (i denne sammenheng)."
@@ -876,12 +873,11 @@
 msgid "System Log"
 msgstr "Systemlogg"
 
-#, fuzzy
 msgid "Calling..."
-msgstr "Beregner..."
+msgstr "Ringer ..."
 
 msgid "Hangup"
-msgstr ""
+msgstr "Legg på"
 
 #. Number of actions
 msgid "Accept"
@@ -891,25 +887,24 @@
 msgstr "Avslå"
 
 msgid "Call in progress."
-msgstr ""
+msgstr "Samtale i gang."
 
 msgid "The call has been terminated."
-msgstr ""
+msgstr "Samtalen er avsluttet."
 
 #, c-format
 msgid "%s wishes to start an audio session with you."
-msgstr ""
+msgstr "%s ønsker å starte en lydøkt med deg."
 
 #, c-format
 msgid "%s is trying to start an unsupported media session type with you."
-msgstr ""
-
-#, fuzzy
+msgstr "%s prøver å starte en media-økt med deg som ikke er støttet."
+
 msgid "You have rejected the call."
-msgstr "Du har forlatt kanalen%s%s"
+msgstr "Du har avvist samtalen."
 
 msgid "call: Make an audio call."
-msgstr ""
+msgstr "samtale: Gjør en lydsamtale"
 
 msgid "Emails"
 msgstr "E-poster"
@@ -1526,33 +1521,36 @@
 "\n"
 "Fetching TinyURL..."
 msgstr ""
+"\n"
+"Henter TinyURL ..."
 
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr ""
+msgstr "TinyURL for adressen over: %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr ""
+msgstr "Vent mens TinyURL henter en kortere nettadresse ..."
 
 msgid "Only create TinyURL for URLs of this length or greater"
-msgstr ""
+msgstr "Bare opprett TinyURL for nettadresser med denne lengden eller større"
 
 msgid "TinyURL (or other) address prefix"
-msgstr ""
-
-#, fuzzy
+msgstr "TinyURL (eller andre) adressetillegg"
+
 msgid "TinyURL"
-msgstr "Melodiens nettadresse"
+msgstr "TinyURL"
 
 msgid "TinyURL plugin"
-msgstr ""
+msgstr "TinyURL-tillegg"
 
 msgid "When receiving a message with URL(s), use TinyURL for easier copying"
 msgstr ""
+"Når du mottar en melding med nettadresser, bruk TinyURL for lettere kopiering"
 
 msgid "Online"
 msgstr "Pålogget"
 
+#. primative,						no,							id,			name
 msgid "Offline"
 msgstr "Avlogget"
 
@@ -1655,29 +1653,25 @@
 msgid "buddy list"
 msgstr "kontaktliste"
 
-#, fuzzy
 msgid "The certificate is self-signed and cannot be automatically checked."
-msgstr ""
-"Sertifikatet presentert av \"%s\" er sjøl signert. Det kan ikke bli "
-"automatisk sjekket."
+msgstr "Sertifikatet er selvsignert og kan ikke sjekkes automatisk."
 
 msgid ""
 "The certificate is not trusted because no certificate that can verify it is "
 "currently trusted."
 msgstr ""
-
-#, fuzzy
+"Dette sertifikatet er ikke betrodd fordi det ikke fins noe sertifikat som "
+"kan verfisere at det er betrodd for tiden."
+
 msgid "The certificate is not valid yet."
-msgstr "Sertifikat lenken presentert for %s gjelder ikke."
-
-#, fuzzy
+msgstr "Sertifikatet er ikke gyldig enda."
+
 msgid "The certificate has expired and should not be considered valid."
-msgstr "Sertifikat lenken presentert for %s gjelder ikke."
+msgstr "Sertifikatet har utgått og bør ikke regnes som gyldig."
 
 #. Translators: "domain" refers to a DNS domain (e.g. talk.google.com)
-#, fuzzy
 msgid "The certificate presented is not issued to this domain."
-msgstr "Sertifikat lenken presentert for %s gjelder ikke."
+msgstr "Det presenterte sertifikatet er ikke utstedt for dette domenet."
 
 msgid ""
 "You have no database of root certificates, so this certificate cannot be "
@@ -1686,17 +1680,14 @@
 "Du har ingen database av root sertifikater, så dette sertifikatet kan ikke "
 "bli validisert."
 
-#, fuzzy
 msgid "The certificate chain presented is invalid."
-msgstr "Sertifikat lenken presentert for %s gjelder ikke."
-
-#, fuzzy
+msgstr "Den presenterte sertifikatkjeden er ikke gyldig."
+
 msgid "The certificate has been revoked."
-msgstr "Sertifikat lenken presentert for %s gjelder ikke."
-
-#, fuzzy
+msgstr "Sertifikatet er tilbakekalt."
+
 msgid "An unknown certificate error occurred."
-msgstr "En ukjent påloggingsfeil har inntruffet: %s."
+msgstr "En ukjent sertifikatfeil har inntruffet."
 
 msgid "(DOES NOT MATCH)"
 msgstr "(MATCHER IKKE)"
@@ -1740,25 +1731,24 @@
 msgid "_View Certificate..."
 msgstr "_Se på sertfikat..."
 
-#, fuzzy, c-format
+#, c-format
 msgid "The certificate for %s could not be validated."
-msgstr "Sertifikat lenken presentert for %s gjelder ikke."
+msgstr "Klarte ikke sjekk gyldigheten av sertifikatet for %s."
 
 #. TODO: Probably wrong.
 msgid "SSL Certificate Error"
 msgstr "SSL Sertifikat Feil"
 
-#, fuzzy
 msgid "Unable to validate certificate"
-msgstr "Klarte ikke autentisere: %s"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke sjekke gyldigheten av sertifikatet."
+
+#, c-format
 msgid ""
 "The certificate claims to be from \"%s\" instead. This could mean that you "
 "are not connecting to the service you believe you are."
 msgstr ""
-"Serifikatet presentert av \"%s\" hevder av være fra \"%s\" istedet.  Dette "
-"kan bety at du ikke er tilkoblet til den tjenesten du tror du er."
+"Serifikatet hevder av være fra «%s» istedet.  Dette kan bety at du ikke er "
+"tilkoblet til den tjenesten du tror du er."
 
 #. Make messages
 #, c-format
@@ -1844,9 +1834,8 @@
 msgid "%s left the room (%s)."
 msgstr "%s forlot rommet (%s)."
 
-#, fuzzy
 msgid "Invite to chat"
-msgstr "Innviter til Konferanse"
+msgstr "Innviter til samtale"
 
 #. Put our happy label in it.
 msgid ""
@@ -1904,9 +1893,9 @@
 msgid "Resolver process exited without answering our request"
 msgstr "Oppslagsprosess avsluttet uten å svare på vår forespørsel"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "Klarte ikke lese %s: %d"
+msgstr "Klarte konvertere %s til punykode: %d"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -1955,6 +1944,9 @@
 "%s er ikke en vanlig fil. Pidgin nekter å overskrive den for å ikke risikere "
 "å ødelegge noe.\n"
 
+msgid "File is not readable."
+msgstr "Fila er ikke lesbar."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s ønsker å sende deg %s (%s)"
@@ -1993,9 +1985,9 @@
 msgid "Starting transfer of %s from %s"
 msgstr "Starter overføring av %s fra %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Transfer of file <A HREF=\"file://%s\">%s</A> complete"
-msgstr "Overføring av filen %s er ferdig"
+msgstr "Overføring av filen <a href=\"file://%s\">%s</a> er ferdig"
 
 #, c-format
 msgid "Transfer of file %s complete"
@@ -2004,18 +1996,18 @@
 msgid "File transfer complete"
 msgstr "Filoverføring ferdig"
 
-#, fuzzy, c-format
+#, c-format
 msgid "You cancelled the transfer of %s"
 msgstr "Du avbrøt overføringen av %s"
 
 msgid "File transfer cancelled"
 msgstr "Filoverføring avbrutt"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s cancelled the transfer of %s"
 msgstr "%s avbrøt overføringen av %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s cancelled the file transfer"
 msgstr "%s avbrøt filoverføringen"
 
@@ -2219,27 +2211,24 @@
 "No codecs left. Your codec preferences in fs-codecs.conf are too strict."
 msgstr ""
 
-#, fuzzy
 msgid "A non-recoverable Farsight2 error has occurred."
-msgstr "En ukjent påloggingsfeil har inntruffet: %s."
-
-#, fuzzy
+msgstr "En ugjenopprettelig Farsight2-feil har inntruffet."
+
 msgid "Conference error"
-msgstr "Konferanse lukket"
+msgstr "Konferansefeil"
 
 msgid "Error with your microphone"
-msgstr ""
+msgstr "Problem med mikrofonen din"
 
 msgid "Error with your webcam"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "Problem med nettkameraet ditt"
+
+#, c-format
 msgid "Error creating session: %s"
-msgstr "Feil: kunne ikke koble til"
-
-#, fuzzy
+msgstr "Klarte ikke opprette økt: %s"
+
 msgid "Error creating conference."
-msgstr "Feil: kunne ikke koble til"
+msgstr "Klarte ikke opprette konferanse."
 
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
@@ -2498,14 +2487,14 @@
 "Test IPC-støtte for tillegg (som tjener). Dette registrerer IPC-kommandoene."
 
 msgid "Hide Joins/Parts"
-msgstr ""
+msgstr "Skjul Joins/Parts"
 
 #. Translators: Followed by an input request a number of people
 msgid "For rooms with more than this many people"
-msgstr ""
+msgstr "For rom med mer enn så mange personer"
 
 msgid "If user has not spoken in this many minutes"
-msgstr ""
+msgstr "Hvis en bruker ikke har snakket på så mange minutter"
 
 msgid "Apply hiding rules to buddies"
 msgstr "Bruker regler for å skjule kontakter"
@@ -2642,7 +2631,6 @@
 msgstr "Inkluderer andre lynmeldingsklienters logger i logg-viseren."
 
 #. * description
-#, fuzzy
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
 "Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
@@ -2651,10 +2639,10 @@
 "at your own risk!"
 msgstr ""
 "Når man ser på logger, vil dette tillegget inkludere logger fra andre "
-"lynmeldingsklienter. For tiden inkluderer dette Adium, MSN Messenger og "
-"Trillian.\n"
-"\n"
-"ADVARSEL: Dette tillegget er enda alpha kode og kan krasje ofte.  Bruk den "
+"lynmeldingsklienter. For tiden inkluderer dette Adium, MSN Messenger, aMSN "
+"og Trillian.\n"
+"\n"
+"ADVARSEL: Dette tillegget er fortsatt alfakode og kan krasje ofte.  Bruk den "
 "på egen risiko!"
 
 #
@@ -2701,12 +2689,11 @@
 msgid "Save messages sent to an offline user as pounce."
 msgstr "Lagre beskjeder sendt til en avlogget bruker som pounce."
 
-#, fuzzy
 msgid ""
 "The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
-"Resten av beskjedene vil bli lagret som varsling. Du kan forandre/slette "
+"Resten av beskjedene vil bli lagret som varslinger. Du kan forandre/slette "
 "varslingen fra kontaktvarslingsdialogen."
 
 #, c-format
@@ -2735,9 +2722,8 @@
 msgid "Do not ask. Always save in pounce."
 msgstr "Ikke spør. Alltid lagre som varsling."
 
-#, fuzzy
 msgid "One Time Password"
-msgstr "Oppgi passord"
+msgstr "Engangspassord"
 
 #. *< type
 #. *< ui_requirement
@@ -2746,13 +2732,13 @@
 #. *< priority
 #. *< id
 msgid "One Time Password Support"
-msgstr ""
+msgstr "Støtte for engangspassord"
 
 #. *< name
 #. *< version
 #. *  summary
 msgid "Enforce that passwords are used only once."
-msgstr ""
+msgstr "Tving at passord brukes kun en gang."
 
 #. *  description
 msgid ""
@@ -2956,17 +2942,15 @@
 "Klarte ikke finne en ActiveTCL installasjon. Om du ønsker å bruke TCL "
 "tillegg, installer ActiveTCL fra http://www.activestate.com\n"
 
-#, fuzzy
 msgid ""
 "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin."
 "im/BonjourWindows for more information."
 msgstr ""
-"Fant ikke verktøysamlingen til Apple Bonjour for Windows. Du finner flere "
-"opplysninger på adressa http://d.pidgin.im/BonjourWindows."
-
-#, fuzzy
+"Klarte ikke finne Apples «Bonjour for Windows» verktøysamling, se http://d."
+"pidgin.im/BonjourWindows for flere opplysninger."
+
 msgid "Unable to listen for incoming IM connections"
-msgstr "Klarte ikke lage ny tilkobling\n"
+msgstr "Klarte ikke lytte etter innkommende lynmeldingsforbindelser"
 
 msgid ""
 "Unable to establish connection with the local mDNS server.  Is it running?"
@@ -3020,21 +3004,17 @@
 msgid "Unable to send the message, the conversation couldn't be started."
 msgstr "Klarte ikke sende beskjeden, samtalen kunne ikke startes."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to create socket: %s"
-msgstr ""
-"Klarte ikke lage endepunkt:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke lage endepunkt: %s"
+
+#, c-format
 msgid "Unable to bind socket to port: %s"
-msgstr "Klarte ikke binde endepunkt til port"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke binde endepunkt til port: %s"
+
+#, c-format
 msgid "Unable to listen on socket: %s"
-msgstr ""
-"Klarte ikke lage endepunkt:\n"
-"%s"
+msgstr "Klarte ikke lytte på endepunkt: %s"
 
 msgid "Error communicating with local mDNSResponder."
 msgstr "Feil i kommunikasjonen med lokal mDNSResponder."
@@ -3081,17 +3061,14 @@
 msgid "Load buddylist from file..."
 msgstr "Last inn kontaktliste fra fil..."
 
-#, fuzzy
 msgid "You must fill in all registration fields"
-msgstr "Fyll inn registrerings feltene."
-
-#, fuzzy
+msgstr "Fyll inn alle registreringsfeltene"
+
 msgid "Passwords do not match"
-msgstr "Passordene stemmer ikke overens."
-
-#, fuzzy
+msgstr "Passordene stemmer ikke overens"
+
 msgid "Unable to register new account.  An unknown error occurred."
-msgstr "Klarte ikke registere ny konto. En feil oppsto.\n"
+msgstr "Klarte ikke registere ny konto. En ukjent feil oppsto."
 
 msgid "New Gadu-Gadu Account Registered"
 msgstr "Ny Gadu-Gadu konto registrert"
@@ -3106,11 +3083,10 @@
 msgstr "Passord (igjen)"
 
 msgid "Enter captcha text"
-msgstr ""
-
-#, fuzzy
+msgstr "Fyll inn captcha-tekst"
+
 msgid "Captcha"
-msgstr "Captcha-bilde"
+msgstr "Captcha"
 
 msgid "Register New Gadu-Gadu Account"
 msgstr "Registrere ny Gadu-Gadu-konto"
@@ -3188,10 +3164,12 @@
 msgid "Add to chat..."
 msgstr "Legg til samtale..."
 
+#. 0
 #. Global
 msgid "Available"
 msgstr "Tilgjengelig"
 
+#. 1
 #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
 #. Away stuff
@@ -3253,9 +3231,9 @@
 msgid "Chat _name:"
 msgstr "Samtale _navn:"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to resolve hostname '%s': %s"
-msgstr "Kan ikke koble til tjener."
+msgstr "Klarte ikke finne ip-adressen for vertsnavnet «%s»: %s"
 
 #. 1. connect to server
 #. connect to the server
@@ -3268,9 +3246,8 @@
 msgid "This chat name is already in use"
 msgstr "Dette samtalenavnet er allerede i bruk"
 
-#, fuzzy
 msgid "Not connected to the server"
-msgstr "Ikke koblet til tjeneren."
+msgstr "Ikke koblet til tjeneren"
 
 msgid "Find buddies..."
 msgstr "Finn kontakter..."
@@ -3311,9 +3288,8 @@
 msgid "Gadu-Gadu User"
 msgstr "Gadu-Gadu Bruker"
 
-#, fuzzy
 msgid "GG server"
-msgstr "Henter tjener"
+msgstr "GG-tjener"
 
 #, c-format
 msgid "Unknown command: %s"
@@ -3329,9 +3305,8 @@
 msgid "File Transfer Failed"
 msgstr "Filoverføring feilet"
 
-#, fuzzy
 msgid "Unable to open a listening port."
-msgstr "Klarte ikke åpne port for lytting."
+msgstr "Klarte ikke åpne en port for lytting."
 
 msgid "Error displaying MOTD"
 msgstr "Feil under visning av MOTD"
@@ -3353,11 +3328,9 @@
 #.
 #. TODO: what to do here - do we really have to disconnect?
 #. TODO: do we really want to disconnect on a failure to write?
-#, fuzzy, c-format
+#, c-format
 msgid "Lost connection with server: %s"
-msgstr ""
-"Mistet forbindelse med server:\n"
-"%s"
+msgstr "Mistet forbindelse med tjener: %s"
 
 msgid "View MOTD"
 msgstr "Vis MOTD"
@@ -3368,9 +3341,8 @@
 msgid "_Password:"
 msgstr "_Passord:"
 
-#, fuzzy
 msgid "IRC nick and server may not contain whitespace"
-msgstr "IRC-kallenavn kan ikke inneholde mellomrom"
+msgstr "IRC-kallenavn og -tjener kan ikke inneholde mellomrom"
 
 msgid "SSL support unavailable"
 msgstr "SSL-støtte utilgjengelig"
@@ -3379,13 +3351,13 @@
 msgstr "Klarte ikke koble til"
 
 #. this is a regular connect, error out
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect: %s"
-msgstr "Kan ikke koble til %s"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke koble til: %s"
+
+#, c-format
 msgid "Server closed the connection"
-msgstr "Tjeneren lukket forbindelsen."
+msgstr "Tjeneren lukket forbindelsen"
 
 msgid "Users"
 msgstr "Brukere"
@@ -3569,13 +3541,12 @@
 #. We only want to do the following dance if the connection
 #. has not been successfully completed.  If it has, just
 #. notify the user that their /nick command didn't go.
-#, fuzzy, c-format
+#, c-format
 msgid "The nickname \"%s\" is already being used."
-msgstr "Dette samtalenavnet er allerede i bruk"
-
-#, fuzzy
+msgstr "Kallenavnet «%s» er allerede i bruk"
+
 msgid "Nickname in use"
-msgstr "Kallenavn"
+msgstr "Kallenavn i bruk"
 
 msgid "Cannot change nick"
 msgstr "Kan ikke endre kallenavn"
@@ -3698,7 +3669,7 @@
 msgstr "names [channel]:  Vis brukere i denne kanalen."
 
 msgid "nick &lt;new nickname&gt;:  Change your nickname."
-msgstr "nick &lt;new nickname&gt;:  Skift nick."
+msgstr "nick &lt;new nickname&gt;:  Endre ditt kallenavn."
 
 msgid "nickserv: Send a command to nickserv"
 msgstr "nickserv:  Send en kommando til nickserv"
@@ -3810,13 +3781,9 @@
 msgid "execute"
 msgstr "utfør"
 
-#, fuzzy
 msgid "Server requires TLS/SSL, but no TLS/SSL support was found."
-msgstr ""
-"Tjeneren krever TLS/SSL for å logge inn, men støtte for dette ble ikke "
-"funnet."
-
-#, fuzzy
+msgstr "Tjeneren krever TLS/SSL, men støtte for dette ble ikke funnet."
+
 msgid "You require encryption, but no TLS/SSL support was found."
 msgstr "Du krever kryptering, men ingen støtte for TLS/SSL ble funnet."
 
@@ -3825,6 +3792,13 @@
 "Tjeneren forlanger identitetsbekreftelse i ren tekst over en ukryptert "
 "forbindelse"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "Ugyldig svar fra tjener"
+
+msgid "Server does not use any supported authentication method"
+msgstr "Tjeneren bruker ikke noen av de støttede autentiseringsmetodene"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3836,17 +3810,6 @@
 msgid "Plaintext Authentication"
 msgstr "Identitetsbekreftelse i ren tekst"
 
-#, fuzzy
-msgid "SASL authentication failed"
-msgstr "Autentisering feilet"
-
-#, fuzzy
-msgid "Invalid response from server"
-msgstr "Ugyldig svar fra tjener."
-
-msgid "Server does not use any supported authentication method"
-msgstr "Tjeneren bruker ikke noen av de støttede autentiseringsmetodene"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr ""
 "Du krever kryptering, men det er ikke støtte for det på denne serveren."
@@ -3854,36 +3817,46 @@
 msgid "Invalid challenge from server"
 msgstr "Ugyldig utfordring fra tjener"
 
-#, fuzzy, c-format
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "Tjeneren tror autentiseringen er ferdig, men det gjør ikke klienten"
+
+msgid "SASL authentication failed"
+msgstr "SASL-autentisering feilet"
+
+#, c-format
 msgid "SASL error: %s"
-msgstr "SASL-feil"
+msgstr "SASL-feil: %s"
+
+msgid "Unable to canonicalize username"
+msgstr "Klarte ikke kanonisere brukernavn"
+
+msgid "Unable to canonicalize password"
+msgstr "Klarte ikke kanonisere passord"
+
+msgid "Malicious challenge from server"
+msgstr "Fiendtlig utfordring fra tjener"
+
+msgid "Unexpected response from server"
+msgstr "Uventet svar fra tjener"
 
 msgid "The BOSH connection manager terminated your session."
 msgstr ""
 
-#, fuzzy
 msgid "No session ID given"
-msgstr "Ingen grunn spesifisert"
-
-#, fuzzy
+msgstr "Ingen økt-ID angitt"
+
 msgid "Unsupported version of BOSH protocol"
-msgstr "Denne versjonen er ikke støttet"
-
-#, fuzzy
+msgstr "Denne versjonen av BOSH-protokollen er ikke støttet"
+
 msgid "Unable to establish a connection with the server"
-msgstr ""
-"Klarte ikke etablere kontakt med serveren:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke etablere en forbindelse med tjeneren"
+
+#, c-format
 msgid "Unable to establish a connection with the server: %s"
-msgstr ""
-"Klarte ikke etablere kontakt med serveren:\n"
-"%s"
-
-#, fuzzy
+msgstr "Klarte ikke etablere en forbindelse med tjeneren: %s"
+
 msgid "Unable to establish SSL connection"
-msgstr "Klarte ikke lage ny tilkobling"
+msgstr "Klarte ikke etablere SSL-forbindelse"
 
 msgid "Full Name"
 msgstr "Fullt navn"
@@ -3957,9 +3930,8 @@
 msgid "Operating System"
 msgstr "Operativsystem"
 
-#, fuzzy
 msgid "Local Time"
-msgstr "Lokal fil:"
+msgstr "Lokal tid"
 
 msgid "Priority"
 msgstr "Prioritet"
@@ -3967,13 +3939,15 @@
 msgid "Resource"
 msgstr "Ressurs"
 
+msgid "Uptime"
+msgstr "Oppetid"
+
+msgid "Logged Off"
+msgstr "Logget av"
+
 #, c-format
 msgid "%s ago"
-msgstr ""
-
-#, fuzzy
-msgid "Logged Off"
-msgstr "Logget inn"
+msgstr "%s siden"
 
 msgid "Middle Name"
 msgstr "Mellomnavn"
@@ -3990,11 +3964,12 @@
 msgid "Logo"
 msgstr "Logo"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s will no longer be able to see your status updates.  Do you want to "
 "continue?"
-msgstr "Er du sikker på at du vil fjerne %s fra kontaktlisten din?"
+msgstr ""
+"%s vil ikke lenger kunne se dine statusoppdateringer. Vil du fortsette?"
 
 msgid "Cancel Presence Notification"
 msgstr "Avbryt varsling av tilstedeværelse"
@@ -4014,7 +3989,7 @@
 msgstr "Fjern abonnement"
 
 msgid "Initiate _Chat"
-msgstr "Start gruppesamtale"
+msgstr "Start _samtale"
 
 msgid "Log In"
 msgstr "Logg inn"
@@ -4022,12 +3997,14 @@
 msgid "Log Out"
 msgstr "Logg ut"
 
+#. 2
 msgid "Chatty"
 msgstr "Pratsom"
 
 msgid "Extended Away"
 msgstr "Utvidet borte"
 
+#. 3
 msgid "Do Not Disturb"
 msgstr "Ikke forstyrr"
 
@@ -4050,7 +4027,7 @@
 "felt har støtte for wild card søk (%)"
 
 msgid "Directory Query Failed"
-msgstr "Mappeforespørsel feilet"
+msgstr "Katalogforespørsel feilet"
 
 msgid "Could not query the directory server."
 msgstr "Klarte ikke legge til kø hos katalog server."
@@ -4079,14 +4056,14 @@
 msgstr "Ugyldig katalog"
 
 msgid "Enter a User Directory"
-msgstr "Kan ikke sende en katalog"
+msgstr "Skriv inn en brukerkatalog"
 
 msgid "Select a user directory to search"
-msgstr "Velg en brukermappe å søke i"
+msgstr "Velg en brukerkatalog å søke i"
 
 #
 msgid "Search Directory"
-msgstr "Søke Katalog"
+msgstr "Søk i katalog"
 
 msgid "_Room:"
 msgstr "_Rom:"
@@ -4122,14 +4099,14 @@
 msgstr "Feil i oppsett"
 
 msgid "Unable to configure"
-msgstr "Klarte ikke å konfigurere"
+msgstr "Klarte ikke sette opp"
 
 #
 msgid "Room Configuration Error"
 msgstr "Oppsettsfeil ved rom"
 
 msgid "This room is not capable of being configured"
-msgstr "Dette rommet er ikke i stand til å bli konfigurert"
+msgstr "Dette rommet er ikke i stand til å bli satt opp"
 
 #
 msgid "Registration error"
@@ -4153,36 +4130,26 @@
 msgid "Find Rooms"
 msgstr "Finn samtalerom"
 
-#, fuzzy
 msgid "Affiliations:"
-msgstr "Alias:"
-
-#, fuzzy
+msgstr "Tilknytninger:"
+
 msgid "No users found"
-msgstr "Ingen passende brukere funnet."
-
-#, fuzzy
+msgstr "Ingen brukere funnet"
+
 msgid "Roles:"
-msgstr "Rolle"
-
-#, fuzzy
+msgstr "Roller:"
+
 msgid "Ping timed out"
 msgstr "Tidsavbrudd for ping"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-
 msgid "Invalid XMPP ID"
 msgstr "Ugyldig XMPP ID"
 
 msgid "Invalid XMPP ID. Domain must be set."
 msgstr "Ugyldig XMPP ID. Domenet må være satt."
 
-#, fuzzy
 msgid "Malformed BOSH URL"
-msgstr "Klarte ikke koble til tjener."
+msgstr "Ugyldig BOSH-nettadresse"
 
 #, c-format
 msgid "Registration of %s@%s successful"
@@ -4298,6 +4265,7 @@
 msgid "None (To pending)"
 msgstr "Ingen (Til pågående)"
 
+#. 0
 msgid "None"
 msgstr "Ingen"
 
@@ -4541,19 +4509,21 @@
 msgid "Unable to ping user %s"
 msgstr "Klarte ikke pinge brukeren %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to buzz, because there is nothing known about %s."
-msgstr "Klarte ikke alarmere, fordi det er ingenting kjent med bruker %s."
-
-#, fuzzy, c-format
+msgstr "Klarte ikke alarmere fordi det er ingenting kjent med %s."
+
+#, c-format
 msgid "Unable to buzz, because %s might be offline."
-msgstr "Klarte ikke alarmere, fordi bruker %s kan være avlogget."
-
-#, fuzzy, c-format
+msgstr "Klarte ikke alarmere fordi %s kan være avlogget."
+
+#, c-format
 msgid ""
 "Unable to buzz, because %s does not support it or does not wish to receive "
 "buzzes now."
-msgstr "Klarer ikke alarmere fordi brukeren %s ikke støtter dette."
+msgstr ""
+"Klarte ikke alarmere fordi %s ikke støtter dette eller ikke ønsker å motta "
+"alarmer nå."
 
 #, c-format
 msgid "Buzzing %s..."
@@ -4568,34 +4538,32 @@
 msgid "%s has buzzed you!"
 msgstr "%s har alarmert deg!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to initiate media with %s: invalid JID"
-msgstr "Klarte ikke sende fil til %s, ugyldig JID"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke starte media med %s: Ugyldig JID"
+
+#, c-format
 msgid "Unable to initiate media with %s: user is not online"
-msgstr "Klarte ikke sende fil til %s - brukeren er ikke pålogget"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke starte media med %s: Brukeren er ikke pålogget"
+
+#, c-format
 msgid "Unable to initiate media with %s: not subscribed to user presence"
-msgstr "Klarte ikke sende fila til %s. Abonnerer ikke på brukernærvær"
-
-#, fuzzy
+msgstr "Klarte ikke starte media med %s: Abonnerer ikke på brukernærvær"
+
 msgid "Media Initiation Failed"
-msgstr "Registrering feilet"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke starte media"
+
+#, c-format
 msgid ""
 "Please select the resource of %s with which you would like to start a media "
 "session."
-msgstr "Velg hvilken ressurs av %s du ønskjer å senda fila til"
+msgstr "Velg hvilken ressurs av %s som du ønsker å starte en mediaøkt med."
 
 msgid "Select a Resource"
 msgstr "Velg en ressurs"
 
-#, fuzzy
 msgid "Initiate Media"
-msgstr "Start gruppesamtale"
+msgstr "Start media"
 
 msgid "config:  Configure a chat room."
 msgstr "config:  Endre innstillingene for et samtalerom."
@@ -4603,9 +4571,8 @@
 msgid "configure:  Configure a chat room."
 msgstr "configure:  Endre innstillingene for et samtalerom."
 
-#, fuzzy
 msgid "part [message]:  Leave the room."
-msgstr "part [rom]:  Forlat rommet."
+msgstr "part [melding]:  Forlat rommet."
 
 msgid "register:  Register with a chat room."
 msgstr "register:  Registrer med et gruppesamtalerom."
@@ -4616,21 +4583,21 @@
 msgid "ban &lt;user&gt; [reason]:  Ban a user from the room."
 msgstr "ban &lt;bruker&gt; [grunn]:  Forby en bruker fra rommet."
 
-#, fuzzy
 msgid ""
 "affiliate &lt;owner|admin|member|outcast|none&gt; [nick1] [nick2] ...: Get "
 "the users with an affiliation or set users' affiliation with the room."
 msgstr ""
-"Knytt &lt;bruker&gt; &lt;eier|admin|medlem|utstøtt|ingen&gt;: Sett en "
-"brukers tilknyting til rommet."
-
-#, fuzzy
+"affiliate &lt;eier|admin|medlem|utstøtt|ingen&gt; [kallenavn1]"
+"[kallenavn2] ...: Finn brukerne med en tilknytning eller sett brukernes "
+"tilknyting til rommet."
+
 msgid ""
 "role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: Get the "
 "users with a role or set users' role with the room."
 msgstr ""
-"rolle &lt;user&gt; &lt;moderator|deltaker|besøkende|ingen&gt;: Sett en "
-"brukers rolle i rommet."
+"role &lt;moderator|deltaker|besøkende|ingen&gt; [kallenavn1]"
+"[kallenavn2] ...: Finn brukerne med en rolle eller sett brukernes rolle i "
+"rommet."
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
 msgstr "invite &lt;bruker&gt; [rom]:  Inviter en bruker til rommet."
@@ -4693,7 +4660,7 @@
 msgstr "Filoverføringsproxyer"
 
 msgid "BOSH URL"
-msgstr ""
+msgstr "BOSH-nettadresse"
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
@@ -4727,6 +4694,9 @@
 msgid "(Code %s)"
 msgstr " (Kode %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Klarte ikke sende tilpasset smilefjes fordi det var for stort."
+
 msgid "XML Parse error"
 msgstr "XML-parsefeil"
 
@@ -4757,25 +4727,22 @@
 msgid "_Accept Defaults"
 msgstr "_Aksepter standardinnstillinger"
 
-#, fuzzy
 msgid "No reason"
 msgstr "Ingen grunn spesifisert"
 
-#, fuzzy, c-format
+#, c-format
 msgid "You have been kicked: (%s)"
-msgstr "Du har blitt sparket ut fra %s: %s"
-
-#, fuzzy, c-format
+msgstr "Du har blitt sparket: (%s)"
+
+#, c-format
 msgid "Kicked (%s)"
-msgstr "Sparket av %s: %s"
-
-#, fuzzy
+msgstr "Sparket (%s)"
+
 msgid "An error occurred on the in-band bytestream transfer\n"
-msgstr "En feil oppsto under åpningen av filen."
-
-#, fuzzy
+msgstr "En feil oppsto under in-band bytestream overføringen\n"
+
 msgid "Transfer was closed."
-msgstr "Filoverføring feilet"
+msgstr "Overføring ble lukket."
 
 msgid "Failed to open in-band bytestream"
 msgstr ""
@@ -5050,7 +5017,6 @@
 msgid "Not expected"
 msgstr "Uventet"
 
-#, fuzzy
 msgid "Friendly name is changing too rapidly"
 msgstr "Visningsnavnet endres for raskt"
 
@@ -5103,22 +5069,25 @@
 #, c-format
 msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>"
 msgstr ""
+"%s sendte et tegn. <a href='msn-wink://%s'>Klikk her for å vise det</a>"
 
 #, c-format
 msgid "%s sent a wink, but it could not be saved"
-msgstr ""
+msgstr "%s sendte et tegn, men det ble ikke lagret"
 
 #, c-format
 msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>"
 msgstr ""
-
-#, fuzzy, c-format
+"%s sendte et lydklipp. <a href='audio://%s'>Klikk her for å spille det av</a>"
+
+#, c-format
 msgid "%s sent a voice clip, but it could not be saved"
-msgstr "%s har sendt deg en webcam invitasjon som enda ikke er støttet."
-
-#, fuzzy, c-format
+msgstr "%s sendte deg et lydklipp, men det ble ikke lagret"
+
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
-msgstr "%s har sendt deg en webcam invitasjon som enda ikke er støttet."
+msgstr ""
+"%s har sendt deg en invitasjon til stemmesamtale som enda ikke er støttet."
 
 msgid "Nudge"
 msgstr "Dytt"
@@ -5135,10 +5104,14 @@
 msgstr "E-postadresse ..."
 
 msgid "Your new MSN friendly name is too long."
-msgstr "Det nye MSN-kallenavnet er for langt."
+msgstr "Det nye MSN vennlige navnet er for langt."
+
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "Sett vennlig navn for %s."
 
 msgid "Set your friendly name."
-msgstr "Sett kallenavn."
+msgstr "Sett ditt vennlige navn."
 
 msgid "This is the name that other MSN buddies will see you as."
 msgstr "Dette er navnet som andre MSN-kompiser vil se deg som."
@@ -5237,7 +5210,7 @@
 msgstr "Kontortittel"
 
 msgid "Set Friendly Name..."
-msgstr "Sett kallenavn..."
+msgstr "Sett vennlig navn ..."
 
 msgid "Set Home Phone Number..."
 msgstr "Sett telefonnummer (hjemme)..."
@@ -5267,14 +5240,13 @@
 msgstr ""
 "SSL-støtte kreves for MSN. Vennligst installer et støttet SSL-bibliotek."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
 msgstr ""
 "Klarte ikke legge til kontakten %s fordi brukernavnet er ugyldig. Brukernavn "
-"må enten være en gyldig e-postadresse eller starte med en bokstav og "
-"inneholde kun bokstaver, tall og mellomrom, eller bare inneholde nummer."
+"må være en gyldig e-postadresse."
 
 msgid "Unable to Add"
 msgstr "Klarte ikke legge til"
@@ -5486,9 +5458,9 @@
 msgid "The following users are missing from your addressbook"
 msgstr "Følgende brukere mangler i din adressebok"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown error (%d): %s"
-msgstr "Ukjent feil (%d)"
+msgstr "Ukjent feil (%d): %s"
 
 msgid "Unable to add user"
 msgstr "Klarte ikke legge til bruker"
@@ -5498,9 +5470,8 @@
 msgid "Unknown error (%d)"
 msgstr "Ukjent feil (%d)"
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "Klarte ikke legge til bruker"
+msgstr "Klarte ikke fjerne bruker"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "Mobilbeskjeden ble ikke bli sendt fordi den var for lang."
@@ -5561,25 +5532,21 @@
 "Tilkoblingsfeil fra %s tjener:\n"
 "%s"
 
-#, fuzzy
 msgid "Our protocol is not supported by the server"
-msgstr "Vår protokoll er ikke støttet av tjeneren."
-
-#, fuzzy
+msgstr "Vår protokoll er ikke støttet av tjeneren"
+
 msgid "Error parsing HTTP"
-msgstr "Feil under tolkning av HTTP."
-
-#, fuzzy
+msgstr "Feil under tolkning av HTTP"
+
 msgid "You have signed on from another location"
-msgstr "Du ble logget av fordi du har logget på et annet sted."
+msgstr "Du har logget på et annet sted"
 
 msgid "The MSN servers are temporarily unavailable. Please wait and try again."
 msgstr ""
 "MSN-tjenerene er midlertidig utilgjengelig.Vennligst prøv igjen senere."
 
-#, fuzzy
 msgid "The MSN servers are going down temporarily"
-msgstr "MSN-tjenerne vil bli utilgjengelig en liten stund."
+msgstr "MSN-tjenerne er midlertidig utilgjengelig"
 
 #, c-format
 msgid "Unable to authenticate: %s"
@@ -5609,13 +5576,14 @@
 msgid "Retrieving buddy list"
 msgstr "Henter kontaktliste"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s requests to view your webcam, but this request is not yet supported."
-msgstr "%s har sendt deg en webcam invitasjon som enda ikke er støttet."
-
-#, fuzzy, c-format
+msgstr "%s ber om å få se nettkameraet ditt, men det er ikke støttet enda."
+
+#, c-format
 msgid "%s invited you to view his/her webcam, but this is not yet supported."
-msgstr "%s har sendt deg en webcam invitasjon som enda ikke er støttet."
+msgstr ""
+"%s inviterte deg til å se nettkameraet sitt, men det er ikke støttet enda."
 
 msgid "Away From Computer"
 msgstr "Borte"
@@ -5669,7 +5637,7 @@
 
 #, c-format
 msgid "Friendly name changes too rapidly"
-msgstr "Visningsnavnet endres for raskt"
+msgstr "Det vennlige navnet endres for raskt"
 
 msgid "This Hotmail account may not be active."
 msgstr "Det kan hende denne Hotmail kontoen ikke er aktiv."
@@ -5739,28 +5707,82 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "%s har fjernet deg fra sin kontaktliste."
 
+#. 1
+msgid "Angry"
+msgstr "Sint"
+
+#. 2
+msgid "Excited"
+msgstr "Oppglødd"
+
+#. 3
+msgid "Grumpy"
+msgstr "Gretten"
+
+#. 4
+msgid "Happy"
+msgstr "Glad"
+
+#. 5
+msgid "In Love"
+msgstr "Forelsket"
+
+#. 6
+msgid "Invincible"
+msgstr "Uovervinnelig"
+
+#. 7
+msgid "Sad"
+msgstr "Trist"
+
+#. 8
+msgid "Hot"
+msgstr "Varm"
+
+#. 9
+msgid "Sick"
+msgstr "Syk"
+
+#. 10
+msgid "Sleepy"
+msgstr "Trøtt"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "Dit nåværende humør"
+msgstr "Gjeldende humør"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Brukerens tilstander"
-
-#, fuzzy
+msgstr "Nytt humør"
+
 msgid "Change your Mood"
-msgstr "Bytt passord"
-
-#, fuzzy
+msgstr "Endre ditt humør"
+
 msgid "How do you feel right now?"
-msgstr "Jeg er ikke her akkurat nå"
+msgstr "Hvordan føler du deg akkurat nå?"
+
+msgid "The PIN you entered is invalid."
+msgstr "Den inntastede PIN-koden er ugyldig."
+
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "Lengden på PIN-koden du tastet inn er ugyldig [4-10]."
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr "PIN-koden er ugyldig. Den skal bare bestå av tall [0-9]."
+
+msgid "The two PINs you entered do not match."
+msgstr "De nye PIN-kodene du tastet inn stemmer ikke overens."
+
+msgid "The name you entered is invalid."
+msgstr "Navnet du skrev er ugyldig."
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr "Fødselsdatoen du skrev er ugyldig. Riktig format er: YYYY-MM-DD"
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "Feil ved skriving"
+msgstr "Feil ved oppdatering av profile"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5768,354 +5790,297 @@
 msgstr "Profil"
 
 msgid "Your profile information is not yet retrieved. Please try again later."
-msgstr ""
+msgstr "Klarte ikke hente profilinformasjonen din. Prøv igjen seinere."
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "PIN"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "Kontrollere PIN"
 
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "Etternavn"
+msgstr "Visningsnavn"
 
 #. hidden
 msgid "Hide my number"
-msgstr ""
+msgstr "Skjul nummeret mitt"
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
-msgstr "Telefonnummer - mobil"
-
-#, fuzzy
+msgstr "Mobilnummer"
+
 msgid "Update your Profile"
-msgstr "Brukers profil"
+msgstr "Oppdater profilen din"
 
 msgid "Here you can update your MXit profile"
-msgstr ""
+msgstr "Her kan du oppdatere MXit-profilen din."
 
 msgid "View Splash"
-msgstr ""
+msgstr "Vis velkomstbilde"
 
 msgid "There is no splash-screen currently available"
-msgstr ""
-
-#, fuzzy
+msgstr "Intet velkomstbilde er tilgjengelig for øyeblikket"
+
 msgid "About"
-msgstr "Om meg"
+msgstr "Om"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "Endre passord..."
+msgstr "Endre humør ..."
 
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "Bytt passord..."
+msgstr "Endre profil ..."
 
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "Vis logg ..."
+msgstr "Vis velkomstbilder ..."
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "Om meg"
+msgstr "Om ..."
 
 #. the file is too big
-#, fuzzy
 msgid "The file you are trying to send is too large!"
-msgstr "Beskjeden er for stor."
-
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
+msgstr "Fila du prøver å sende er for stor."
+
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"Klarte ikke koble til HTTP-tjeneren for MXit. Sjekk tjenerinnstillingene "
+"dine."
+
 msgid "Logging In..."
-msgstr "Logger inn"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
-msgstr ""
-"Klarte ikke kople til tjener, skriv inn adressen til tjeneren du ønsker å "
-"kople til."
-
-#, fuzzy
+msgstr "Logger inn ..."
+
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr ""
+"Klarte ikke koble til tjeneren for MXit. Sjekk tjenerinnstillingene dine."
+
 msgid "Connecting..."
-msgstr "Kobler til"
+msgstr "Kobler til ..."
+
+msgid "The nick name you entered is invalid."
+msgstr "Det inntastede kallenavnet er ugyldig."
+
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "Den inntastede PIN-koden har feil lengde [7-10]."
 
 #. mxit login name
 msgid "MXit Login Name"
-msgstr ""
+msgstr "MXit brukernavn"
 
 #. nick name
-#, fuzzy
 msgid "Nick Name"
 msgstr "Kallenavn"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "Registrer Ny XMPP-Konto"
-
-#, fuzzy
+msgstr "Registrer ny MXit-konto"
+
 msgid "Please fill in the following fields:"
-msgstr "Vennligst fyll ut følgende felt"
+msgstr "Fyll ut følgende felt:"
 
 #. no reply from the WAP site
 msgid "Error contacting the MXit WAP site. Please try again later."
-msgstr ""
+msgstr "Klarte ikke kontakte MXit WAP-nettstedet. Prøv igjen seinere."
 
 #. wapserver error
 #. server could not find the user
 msgid ""
 "MXit is currently unable to process the request. Please try again later."
-msgstr ""
+msgstr "MXit klarte it behandle forespørselen. Prøv igjen seinere."
 
 msgid "Wrong security code entered. Please try again later."
-msgstr ""
+msgstr "Du skrev feil sikkerhetskode. Prøv igjen seinere."
 
 msgid "Your session has expired. Please try again later."
-msgstr ""
+msgstr "Økta di er utgått. Prøv igjen seinere."
 
 msgid "Invalid country selected. Please try again."
-msgstr ""
+msgstr "Ugyldig land valgt. Prøv igjen seinere."
 
 msgid "Username is not registered. Please register first."
-msgstr ""
+msgstr "Brukernavnet er ikke registrert. Du må registrere det først."
 
 msgid "Username is already registered. Please choose another username."
-msgstr ""
-
-#, fuzzy
+msgstr "Brukernavnet er allerede registrert. Du må velge et annet brukernavn."
+
 msgid "Internal error. Please try again later."
-msgstr "Tjeneren er utilgjengelig"
+msgstr "Intern feil. Prøv igjen seinere."
 
 msgid "You did not enter the security code"
-msgstr ""
-
-#, fuzzy
+msgstr "Du skrev ikke inn sikkerhetskoden"
+
 msgid "Security Code"
-msgstr "Sikkerhet slått på"
+msgstr "Sikkerhetskode"
 
 #. ask for input
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "Skriv inn kode"
-
-#, fuzzy
+msgstr "Skriv inn sikkerhetskode"
+
 msgid "Your Country"
-msgstr "Land"
-
-#, fuzzy
+msgstr "Ditt land"
+
 msgid "Your Language"
-msgstr "Foretrukket språk"
+msgstr "Ditt språk"
 
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "Krever godkjenning"
+msgstr "MXit-godkjenning"
 
 msgid "MXit account validation"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit-kontovalidering"
+
 msgid "Retrieving User Information..."
-msgstr "Tjenerinformasjon"
-
-#, fuzzy
+msgstr "Henter brukerinformasjon ..."
+
+msgid "Loading menu..."
+msgstr "Leser inn meny ..."
+
 msgid "Status Message"
-msgstr "Sendte beskjeder"
-
-#, fuzzy
+msgstr "Statusmelding"
+
 msgid "Hidden Number"
-msgstr "Mellomnavn"
-
-#, fuzzy
+msgstr "Skjult nummer"
+
 msgid "Your Mobile Number..."
-msgstr "Sett telefonnummer (mobil)..."
+msgstr "Ditt mobilnummer ..."
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
 msgid "WAP Server"
-msgstr "Tjener"
-
-#, fuzzy
+msgstr "WAP-tjener"
+
 msgid "Connect via HTTP"
-msgstr "Koble til med TCP"
+msgstr "Koble til via HTTP"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "Slå på sprettopp-velkomstbilde"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr ""
+msgstr "Vi har mistet forbindelsen til MXit. Du må koble til på nytt."
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "JXMPP-feilmelding"
-
-#, fuzzy
+msgstr "Feil ved sending av beskjed"
+
 msgid "Unable to process your request at this time"
-msgstr "Kan ikke koble til tjener."
+msgstr "Klarte ikke behandle din forespørsel nå"
 
 msgid "Timeout while waiting for a response from the MXit server."
-msgstr ""
-
-#, fuzzy
+msgstr "Tidsavbrudd under venting på svar fra MXit-tjeneren."
+
 msgid "Successfully Logged In..."
-msgstr "Ble med i Qun"
-
-#, fuzzy
+msgstr "Vellykket innlogging ..."
+
+#, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr ""
+"%s sendte deg en kryptert beskjed, men det er ikke støttet av denne klienten."
+
 msgid "Message Error"
-msgstr "JXMPP-feilmelding"
+msgstr "Meldingsfeil"
 
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "Kan ikke utføre videresending med den spesifisert protokollen"
+
+msgid "An internal MXit server error occurred."
+msgstr "En intern feil i MXit-tjener har inntruffet."
+
+#, c-format
+msgid "Login error: %s (%i)"
+msgstr "Feil ved innlogging: %s (%i)"
+
+#, c-format
+msgid "Logout error: %s (%i)"
+msgstr "Feil ved utlogging: %s (%i)"
+
 msgid "Contact Error"
-msgstr "Feil ved tilkobling"
-
-#, fuzzy
+msgstr "Kontaktfeil"
+
 msgid "Message Sending Error"
-msgstr "JXMPP-feilmelding"
-
-#, fuzzy
+msgstr "Feil ved sending av beskjed"
+
 msgid "Status Error"
-msgstr "Feil i datastrøm"
-
-#, fuzzy
+msgstr "Statusfeil"
+
 msgid "Mood Error"
-msgstr "Ikon Feil"
-
-#, fuzzy
+msgstr "Humørfeil"
+
 msgid "Invitation Error"
-msgstr "Avregistreringsfeil"
-
-#, fuzzy
+msgstr "Invitasjonsfeil"
+
 msgid "Contact Removal Error"
-msgstr "Feil ved tilkobling"
-
-#, fuzzy
+msgstr "Feil ved fjerning av kontakt"
+
 msgid "Subscription Error"
-msgstr "Abonnement"
-
-#, fuzzy
+msgstr "Abonnementsfeil"
+
 msgid "Contact Update Error"
-msgstr "Feil ved tilkobling"
-
-#, fuzzy
+msgstr "Feil ved oppdatering av kontakt"
+
 msgid "File Transfer Error"
-msgstr "Filoverføring"
-
-#, fuzzy
+msgstr "Filoverføringsfeil"
+
 msgid "Cannot create MultiMx room"
-msgstr "Kan ikke opprette varsling"
-
-#, fuzzy
+msgstr "Klarte ikke opprette MultiMx-rom"
+
 msgid "MultiMx Invitation Error"
-msgstr "Avregistreringsfeil"
-
-#, fuzzy
+msgstr "MultiMx-invitasjonsfeil"
+
 msgid "Profile Error"
-msgstr "Feil ved skriving"
+msgstr "Profilefeil"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
+msgstr "Mottok ugyldig pakke fra MXit."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "En feil i MXit-forbindelsen oppstod. (read stage 0x01)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
+msgstr "En feil i MXit-forbindelsen oppstod. (read stage 0x02)"
 
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
+msgstr "En feil i MXit-forbindelsen oppstod. (read stage 0x03)"
 
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
+msgstr "En feil i MXit-forbindelsen oppstod. (read stage 0x04)"
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
+msgstr "En feil i MXit-forbindelsen oppstod. (read stage 0x05)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-msgid "Angry"
-msgstr "Sint"
-
-msgid "Excited"
-msgstr "Oppglødd"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Gruppe"
-
-msgid "Happy"
-msgstr "Glad"
-
-msgid "In Love"
-msgstr "Forelsket"
-
-msgid "Invincible"
-msgstr "Uovervinnelig"
-
-msgid "Sad"
-msgstr "Trist"
-
-#, fuzzy
-msgid "Hot"
-msgstr "_Vert:"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Kallenavn"
-
-msgid "Sleepy"
-msgstr "Trøtt"
-
-#, fuzzy
+msgstr "En feil i MXit-forbindelsen oppstod. (read stage 0x06)"
+
 msgid "Pending"
-msgstr "Sender"
-
-#, fuzzy
+msgstr "Utestående"
+
 msgid "Invited"
-msgstr "Inviter"
-
-#, fuzzy
+msgstr "Invitert"
+
 msgid "Rejected"
-msgstr "Avslå"
-
-#, fuzzy
+msgstr "Avvist"
+
 msgid "Deleted"
-msgstr "Slett"
+msgstr "Slettet"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit-reklame"
+
 msgid "More Information"
-msgstr "Arbeid ekstra info"
+msgstr "Mer informasjon"
 
 #, c-format
 msgid "No such user: %s"
@@ -6190,13 +6155,13 @@
 msgid "Protocol error, code %d: %s"
 msgstr "Protokoll feil, kode %d: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s Your password is %zu characters, which is longer than the maximum length "
 "of %d.  Please shorten your password at http://profileedit.myspace.com/index."
 "cfm?fuseaction=accountSettings.changePassword and try again."
 msgstr ""
-"%s Passordet ditt er på %d tegn. MySpaceIM godtar bare %d tegn. Gjør "
+"%s Passordet ditt er på %zu tegn som er lenger en maksimumlengden %d. Gjør "
 "passordet ditt kortere på nettsiden http://profileedit.myspace.com/index.cfm?"
 "fuseaction=accountSettings.changePassword og prøv på nytt."
 
@@ -6292,14 +6257,14 @@
 msgid "Client Version"
 msgstr "Klientversjon"
 
-#, fuzzy
 msgid ""
 "An error occurred while trying to set the username.  Please try again, or "
 "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
 "to set your username."
 msgstr ""
-"Vennligst gå til http://editprofile.myspace.com/index.cfm?fuseaction=profile."
-"username og velg et brukernavn og prøv å logge inn igjen."
+"En feil oppstod ved valg av brukernavn. Prøv igjen eller gå til http://"
+"editprofile.myspace.com/index.cfm?fuseaction=profile.username og velg et "
+"brukernavn."
 
 msgid "MySpaceIM - Username Available"
 msgstr "MySpaceIM - brukernavn tilgjengelig"
@@ -6558,9 +6523,9 @@
 msgid "Unknown error: 0x%X"
 msgstr "Ukjent feil: 0x%X"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "Klarte ikke pinge brukeren %s"
+msgstr "Klarte ikke logge inn: %s"
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
@@ -6692,13 +6657,12 @@
 "%s appears to be offline and did not receive the message that you just sent."
 msgstr "%s ser ut til å være  frakoplet, og mottok ikke meldingen du sendte."
 
-#, fuzzy
 msgid ""
 "Unable to connect to server. Please enter the address of the server to which "
 "you wish to connect."
 msgstr ""
-"Klarte ikke kople til tjener, skriv inn adressen til tjeneren du ønsker å "
-"kople til."
+"Klarte ikke koble til tjener. Skriv inn adressen til tjeneren du ønsker å "
+"koble til."
 
 msgid "This conference has been closed. No more messages can be sent."
 msgstr ""
@@ -6723,10 +6687,13 @@
 msgid "Server port"
 msgstr "Tjenerport"
 
-#. Note to translators: %s in this string is a URL
-#, fuzzy, c-format
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Mottok uventet svar fra %s: %s"
+
+#, c-format
 msgid "Received unexpected response from %s"
-msgstr "Mottok uventet HTTP-svar fra tjener."
+msgstr "Mottok uventet svar fra %s"
 
 msgid ""
 "You have been connecting and disconnecting too frequently. Wait ten minutes "
@@ -6737,12 +6704,19 @@
 
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting %s: %s"
-msgstr "Feil: kunne ikke koble til"
+msgstr "Feil ved forespørsel %s: %s"
+
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Tjeneren krever at du løser en CAPTCHA for å logge på, men denne klienten "
+"støtter ikke CAPTCHA enda."
 
 msgid "AOL does not allow your screen name to authenticate here"
-msgstr ""
+msgstr "AOL tillater ikke at ditt skjermnavn autentiserer her"
 
 msgid "Could not join chat room"
 msgstr "Klarte ikke ble med i samtalerom"
@@ -6750,9 +6724,8 @@
 msgid "Invalid chat room name"
 msgstr "Ugyldig samtaleromnavn"
 
-#, fuzzy
 msgid "Received invalid data on connection with server"
-msgstr "Mottok ugyldige data over forbindelsen med tjeneren."
+msgstr "Mottok ugyldige data over forbindelsen med tjeneren"
 
 #. *< type
 #. *< ui_requirement
@@ -6799,9 +6772,8 @@
 msgid "Received invalid data on connection with remote user."
 msgstr "Mottok ugyldig data på forbindelse med annen bruker."
 
-#, fuzzy
 msgid "Unable to establish a connection with the remote user."
-msgstr "Klarte ikke etablere en forbindelse med bruker."
+msgstr "Klarte ikke etablere en forbindelse med den eksterne brukeren."
 
 msgid "Direct IM established"
 msgstr "Direkte lynmelding opprettet"
@@ -6891,23 +6863,21 @@
 msgstr "Ikke mens du er på AOL"
 
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
+msgstr "Klarte ikke motta lynmelding på grunn av foreldrekontroll"
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "Kan ikke sende SMS uten at du godtar vilkårene"
+
 msgid "Cannot send SMS"
-msgstr "Kan ikke sende fil"
+msgstr "Klarte ikke sende SMS"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "Kan ikke sende en katalog."
+msgstr "Klarte ikke sende SMS til dette landet"
 
 #. Undocumented
 msgid "Cannot send SMS to unknown country"
-msgstr ""
+msgstr "Kan ikke sende SMS til ukjent land"
 
 msgid "Bot accounts cannot initiate IMs"
 msgstr ""
@@ -6924,13 +6894,11 @@
 msgid "Bot account reached monthly IM limit"
 msgstr ""
 
-#, fuzzy
 msgid "Unable to receive offline messages"
-msgstr "Klarte ikke sende beskjed."
-
-#, fuzzy
+msgstr "Klarte ikke motta avloggede beskjeder"
+
 msgid "Offline message store full"
-msgstr "Avlogget beskjed"
+msgstr "Lager avloggede beskjeder er fullt"
 
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
@@ -7042,15 +7010,13 @@
 msgid "Buddy Comment"
 msgstr "Kontakt Kommentar"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect to authentication server: %s"
-msgstr ""
-"Klarte ikke koble til autentiseringstjener:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke koble til autentiseringstjener: %s"
+
+#, c-format
 msgid "Unable to connect to BOS server: %s"
-msgstr "Kan ikke koble til OIM server"
+msgstr "Klarte ikke koble til BOS-tjener: %s"
 
 msgid "Username sent"
 msgstr "Brukernavn sendt"
@@ -7062,16 +7028,15 @@
 msgid "Finalizing connection"
 msgstr "Fullfører tilkobling"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to sign on as %s because the username is invalid.  Usernames must be "
 "a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-"Får ikke til å logge inn: Klarte ikke logge på som %s fordi brukernavnet er "
-"ugyldig. Brukernavn må være en gyldig e-postadresse, eller begynna med en "
-"bokstav og bare inneholde bokstaver, tall og mellomrom, eller bare inneholde "
-"tall."
+"Klarte ikke logge på som %s fordi brukernavnet er ugyldig. Brukernavn må "
+"være en gyldig e-postadresse, eller begynna med en bokstav og bare inneholde "
+"bokstaver, tall og mellomrom, eller bare inneholde tall."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -7091,28 +7056,25 @@
 #. Unregistered username
 #. uid is not exist
 #. the username does not exist
-#, fuzzy
 msgid "Username does not exist"
-msgstr "Brukeren eksisterer ikke"
+msgstr "Brukernavn eksisterer ikke"
 
 #. Suspended account
-#, fuzzy
 msgid "Your account is currently suspended"
-msgstr "Kontoen din er frosset."
+msgstr "Kontoen din er midlertidig frosset"
 
 #. service temporarily unavailable
 msgid "The AOL Instant Messenger service is temporarily unavailable."
 msgstr "AOL Instant Messenger-tjenesten er midlertidig utilgjengelig."
 
 #. username connecting too frequently
-#, fuzzy
 msgid ""
 "Your username has been connecting and disconnecting too frequently. Wait ten "
 "minutes and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Du har koblet til og koblet fra for hurtig. Vent ti minutter og prøv igjen. "
-"Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger."
+"Brukernavnet ditt har koblet til og fra for hurtig. Vent ti minutter og prøv "
+"igjen. Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger."
 
 #. client too old
 #, c-format
@@ -7120,18 +7082,16 @@
 msgstr "Klientversjonen av programmet er for gammel. Vennligst oppgrader på %s"
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "Your IP address has been connecting and disconnecting too frequently. Wait a "
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Du har koblet til og koblet fra for hurtig. Vent ti minutter og prøv igjen. "
-"Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger."
-
-#, fuzzy
+"Din IP-adresse har koblet til og fra for hurtig. Vent ti minutter og prøv "
+"igjen. Hvis du fortsetter å prøve nå, vil du måtte vente enda lenger."
+
 msgid "The SecurID key entered is invalid"
-msgstr "Den inntastede SecurID-nøkkelen er ugyldig."
+msgstr "Den inntastede SecurID-nøkkelen er ugyldig"
 
 msgid "Enter SecurID"
 msgstr "Tast inn SecurID"
@@ -7275,21 +7235,21 @@
 msgstr[0] "Du har gått glipp av %hu beskjed fra %s, ingen grunn oppgitt."
 msgstr[1] "Du har gått glipp av %hu beskjeder fra %s, ingen grunn oppgitt."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "Klarte ikke sende beskjed (%s)."
+msgstr "Klarte ikke sende beskjed: %s (%s)."
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Klarte ikke sende beskjed: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "Klarte ikke sende beskjed til %s:"
-
-#, fuzzy, c-format
+msgstr "Klarte ikke sende beskjed til %s: %s (%s)"
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "Klarte ikke sende beskjed til %s:"
+msgstr "Klarte ikke sende beskjed til %s: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7318,14 +7278,6 @@
 "[Klarte ikke vise en melding fra denne brukeren da den inneholdt ugyldige "
 "tegn.]"
 
-#, fuzzy
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Den siste kommandoen ble ikke utført fordi du har overskredet "
-"hastighetsgrensen. Vennligst vent 10 sekunder og prøv igjen."
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Du har blitt koblet fra samtalegruppen %s."
@@ -7486,7 +7438,7 @@
 msgid "Away message too long."
 msgstr "Fraværsbeskjeden er for lang."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be a valid email address, or start with a letter and contain only letters, "
@@ -7509,18 +7461,18 @@
 msgid "Orphans"
 msgstr "Ugrupperte"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because you have too many buddies in your buddy "
 "list.  Please remove one and try again."
 msgstr ""
 "Klarte ikke legge til kontakten %s fordi du har for mange kontakter i "
-"listen. Vennligst fjern en og prøv igjen."
+"listen. Fjern en og prøv igjen."
 
 msgid "(no name)"
 msgstr "(uten navn)"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add the buddy %s for an unknown reason."
 msgstr "Klarte ikke legge til kontakten %s pga ukjent årsak."
 
@@ -7591,9 +7543,8 @@
 msgid "C_onnect"
 msgstr "K_oble til"
 
-#, fuzzy
 msgid "You closed the connection."
-msgstr "Tjeneren lukket forbindelsen."
+msgstr "Du lukket forbindelsen."
 
 msgid "Get AIM Info"
 msgstr "Hent AIM Informasjon"
@@ -7605,9 +7556,8 @@
 msgid "Get Status Msg"
 msgstr "Hent statusbeskjed"
 
-#, fuzzy
 msgid "End Direct IM Session"
-msgstr "Direkte lynmelding opprettet"
+msgstr "Avslutt direkte lynmelding-økt"
 
 msgid "Direct IM"
 msgstr "Direkte samtale"
@@ -7692,9 +7642,8 @@
 msgid "Search for Buddy by Information"
 msgstr "Vennesøk etter informasjon"
 
-#, fuzzy
 msgid "Use clientLogin"
-msgstr "Brukeren er ikke pålogget"
+msgstr "Bruk clientLogin"
 
 msgid ""
 "Always use AIM/ICQ proxy server for\n"
@@ -7893,30 +7842,26 @@
 msgstr "Merknad"
 
 #. callback
-#, fuzzy
 msgid "Buddy Memo"
-msgstr "Endre kontaktmemo"
+msgstr "Kontaktmemo"
 
 msgid "Change his/her memo as you like"
-msgstr ""
-
-#, fuzzy
+msgstr "Endre sitt memo som du vil"
+
 msgid "_Modify"
-msgstr "Endre"
-
-#, fuzzy
+msgstr "_Endre"
+
 msgid "Memo Modify"
-msgstr "Endre"
-
-#, fuzzy
+msgstr "Endre memo"
+
 msgid "Server says:"
-msgstr "Tjeneren er opptatt"
+msgstr "Tjeneren sier:"
 
 msgid "Your request was accepted."
-msgstr ""
+msgstr "Din forespørsel ble akseptert."
 
 msgid "Your request was rejected."
-msgstr ""
+msgstr "Forespørselen din ble avvist."
 
 #, c-format
 msgid "%u requires verification"
@@ -8230,7 +8175,7 @@
 msgstr "<p><b>Nøyaktige testere</b>:<br>\n"
 
 msgid "and more, please let me know... thank you!))"
-msgstr ""
+msgstr "og mer, la meg vite ... takk!))"
 
 msgid "<p><i>And, all the boys in the backroom...</i><br>\n"
 msgstr "<p><i>Og, alle guttene på bakrommet ...</i><br>\n"
@@ -8307,7 +8252,6 @@
 msgid "Update interval (seconds)"
 msgstr "Oppdateringsintervall (sekund)"
 
-#, fuzzy
 msgid "Unable to decrypt server reply"
 msgstr "Klarte ikke dekryptere tjenersvaret"
 
@@ -8375,9 +8319,8 @@
 msgid "Requesting token"
 msgstr "Spør etter symbol"
 
-#, fuzzy
 msgid "Unable to resolve hostname"
-msgstr "Kan ikke koble til tjener."
+msgstr "Klarte ikke finne ip-adressen for vertsnavnet"
 
 msgid "Invalid server or port"
 msgstr "Ugyldig tjener eller port"
@@ -8433,7 +8376,6 @@
 msgid "QQ Qun Command"
 msgstr "QQ Qun-kommando"
 
-#, fuzzy
 msgid "Unable to decrypt login reply"
 msgstr "Klarte ikke dekryptere innloggingssvaret"
 
@@ -8450,7 +8392,7 @@
 msgid "File Send"
 msgstr "Filsending"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%d cancelled the transfer of %s"
 msgstr "%d avbrøt overføringen av %s"
 
@@ -9400,7 +9342,6 @@
 msgid "Disconnected by server"
 msgstr "Frakoplet av tjener"
 
-#, fuzzy
 msgid "Error connecting to SILC Server"
 msgstr "Feil under tilkobling til SILC-tjener"
 
@@ -9417,9 +9358,8 @@
 msgid "Performing key exchange"
 msgstr "Gjennomfører nøkkelutveksling"
 
-#, fuzzy
 msgid "Unable to load SILC key pair"
-msgstr "Klarte ikke laste SILC nøkkelpar"
+msgstr "Klarte ikke laste SILC-nøkkelpar"
 
 #. Progress
 msgid "Connecting to SILC Server"
@@ -9428,9 +9368,8 @@
 msgid "Out of memory"
 msgstr "Tom for minne"
 
-#, fuzzy
 msgid "Unable to initialize SILC protocol"
-msgstr "Klarte ikke kjøre SILC-protokollen"
+msgstr "Klarte ikke starte opp SILC-protokollen"
 
 msgid "Error loading SILC key pair"
 msgstr "Genererer SILC-nøkkelpar"
@@ -9726,9 +9665,8 @@
 msgid "Creating SILC key pair..."
 msgstr "Genererer SILC-nøkkelpar..."
 
-#, fuzzy
 msgid "Unable to create SILC key pair"
-msgstr "Genererer SILC-nøkkelpar\n"
+msgstr "Klarte ikke opprette SILC-nøkkelpar"
 
 #. Hint for translators: Please check the tabulator width here and in
 #. the next strings (short strings: 2 tabs, longer strings 1 tab,
@@ -9865,27 +9803,24 @@
 msgid "Failure: Authentication failed"
 msgstr "Autentisering feilet"
 
-#, fuzzy
 msgid "Unable to initialize SILC Client connection"
-msgstr "Kan ikke klargjøre SILC klientforbindelse"
+msgstr "Kan ikke starte opp SILC-klientforbindelse"
 
 msgid "John Noname"
 msgstr "Ola Normann"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to load SILC key pair: %s"
-msgstr "Klarte ikke laste inn SILC nøkkelparet: %s"
+msgstr "Klarte ikke laste inn SILC-nøkkelparet: %s"
 
 msgid "Unable to create connection"
 msgstr "Klarte ikke lage ny tilkobling"
 
-#, fuzzy
 msgid "Unknown server response"
 msgstr "Ukjent tjenersvar"
 
-#, fuzzy
 msgid "Unable to create listen socket"
-msgstr "Klarte ikke opprette endepunkt"
+msgstr "Klarte ikke opprette lytteendepunkt"
 
 msgid "SIP usernames may not contain whitespaces or @ symbols"
 msgstr "SIP-brukernavn kan ikke inneholde mellomrom eller alfakrøll"
@@ -9948,9 +9883,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! Protocol Plugin"
-msgstr "Yahoo-protokolltillegg"
+msgstr "Yahoo!-protokolltillegg"
 
 msgid "Pager server"
 msgstr "Søketjenestetjener"
@@ -9971,7 +9905,7 @@
 msgstr "Ignorer konferanse og samtalerom invitasjoner"
 
 msgid "Use account proxy for SSL connections"
-msgstr ""
+msgstr "Bruk kontoens mellomtjener for SSL-forbindelser"
 
 msgid "Chat room list URL"
 msgstr "Samtaleroms URL"
@@ -9982,9 +9916,8 @@
 msgid "Yahoo Chat port"
 msgstr "Yahoo Chat port"
 
-#, fuzzy
 msgid "Yahoo JAPAN ID..."
-msgstr "Yahoo! ID ..."
+msgstr "Yahoo! JAPAN ID ..."
 
 #. *< type
 #. *< ui_requirement
@@ -9996,16 +9929,15 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! JAPAN Protocol Plugin"
-msgstr "Yahoo-protokolltillegg"
+msgstr "Yahoo! JAPAN-protokolltillegg"
 
 #, c-format
 msgid "%s has sent you a webcam invite, which is not yet supported."
 msgstr "%s har sendt deg en webcam invitasjon som enda ikke er støttet."
 
 msgid "Your SMS was not delivered"
-msgstr ""
+msgstr "SMS-en din ble ikke levert."
 
 msgid "Your Yahoo! message did not get sent."
 msgstr "Din Yahoo!-beskjed ble ikke sendt."
@@ -10032,30 +9964,28 @@
 msgstr "Legge til kontakt avslått"
 
 #. Some error in the received stream
-#, fuzzy
 msgid "Received invalid data"
-msgstr "Mottok ugyldige data over forbindelsen med tjeneren."
+msgstr "Mottok ugyldige data"
 
 #. security lock from too many failed login attempts
-#, fuzzy
 msgid ""
 "Account locked: Too many failed login attempts.  Logging into the Yahoo! "
 "website may fix this."
 msgstr ""
-"Ukjent feilkode %d. Å logge inn på Yahoo!s nettside, kan kanskje løse dette."
+"Konto låst: For mange mislykkede innloggingsforsøk. Å logge inn på Yahoo! "
+"sitt nettsted, kan kanskje løse dette."
 
 #. indicates a lock of some description
-#, fuzzy
 msgid ""
 "Account locked: Unknown reason.  Logging into the Yahoo! website may fix "
 "this."
 msgstr ""
-"Ukjent feilkode %d. Å logge inn på Yahoo!s nettside, kan kanskje løse dette."
+"Konto låst: Ukjent grunn. Å logge inn på Yahoo! sitt nettsted, kan kanskje "
+"løse dette."
 
 #. username or password missing
-#, fuzzy
 msgid "Username or password missing"
-msgstr "Feil brukernavn eller passord"
+msgstr "Brukernavn eller passord mangler"
 
 #, c-format
 msgid ""
@@ -10081,59 +10011,54 @@
 msgid "Ignore buddy?"
 msgstr "Ignorere kontakt?"
 
-#, fuzzy
 msgid "Invalid username or password"
-msgstr "Feil brukernavn eller passord"
-
-#, fuzzy
+msgstr "Ugyldig brukernavn eller passord"
+
 msgid ""
 "Your account has been locked due to too many failed login attempts.  Please "
 "try logging into the Yahoo! website."
 msgstr ""
-"Ukjent feilkode %d. Å logge inn på Yahoo!s nettside, kan kanskje løse dette."
+"Kontoen din er låst på grunn av for mange mislykkede innloggingsforsøk. Prøv "
+"å logge inn på Yahoo! sitt nettsted."
 
 #, c-format
 msgid "Unknown error 52.  Reconnecting should fix this."
-msgstr ""
+msgstr "Ukjent feil 52. Koble til igjen for å løse dette."
 
 msgid ""
 "Error 1013: The username you have entered is invalid.  The most common cause "
 "of this error is entering your email address instead of your Yahoo! ID."
 msgstr ""
+"Feil 1013: Brukernavnet er ugyldig. Den mest vanlige grunnen til denne "
+"feilen er at du skrev inn e-postadressen i steden for Yahoo!-IDen din."
 
 #, c-format
 msgid "Unknown error number %d. Logging into the Yahoo! website may fix this."
 msgstr ""
 "Ukjent feilkode %d. Å logge inn på Yahoo!s nettside, kan kanskje løse dette."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add buddy %s to group %s to the server list on account %s."
 msgstr ""
 "Klarte ikke legge til kontakt %s i gruppen %s i tjenerlisten på konto %s."
 
-#, fuzzy
 msgid "Unable to add buddy to server list"
-msgstr "Klarte ikke legge kontakt til tjenerens kontaktliste"
+msgstr "Klarte ikke legge kontakt til tjenerlisten"
 
 #, c-format
 msgid "[ Audible %s/%s/%s.swf ] %s"
 msgstr "[ Hørbar %s/%s/%s.swf ] %s"
 
-#, fuzzy
 msgid "Received unexpected HTTP response from server"
-msgstr "Mottok uventet HTTP-svar fra tjener."
-
-#, fuzzy, c-format
+msgstr "Mottok uventet HTTP-svar fra tjener"
+
+#, c-format
 msgid "Lost connection with %s: %s"
-msgstr ""
-"Mistet forbindelse med %s:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "Mistet forbindelse med %s: %s"
+
+#, c-format
 msgid "Unable to establish a connection with %s: %s"
-msgstr ""
-"Klarte ikke etablere kontakt med serveren:\n"
-"%s"
+msgstr "Klarte ikke etablere en forbindelse med %s: %s"
 
 msgid "Not at Home"
 msgstr "Ikke hjemme"
@@ -10181,7 +10106,7 @@
 msgstr "Start kruseduller"
 
 msgid "Select the ID you want to activate"
-msgstr ""
+msgstr "Velg ID-en du vil aktivere"
 
 msgid "Join whom in chat?"
 msgstr "Bli med hvem i samtalegruppe?"
@@ -10196,13 +10121,13 @@
 msgstr "Åpne innboks"
 
 msgid "Can't send SMS. Unable to obtain mobile carrier."
-msgstr ""
+msgstr "Klarte ikke sende SMS. Fant ingen mobiloperatør."
 
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
+msgstr "Klarte ikke sende SMS. Ukjent mobiloperatør."
 
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "Finner mobiloperatør for å sende SMS."
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
@@ -10291,9 +10216,9 @@
 msgid "The user's profile is empty."
 msgstr "Brukerens profil er tom."
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s has declined to join."
-msgstr "%s har logget på."
+msgstr "%s har avslått å bli med."
 
 msgid "Failed to join chat"
 msgstr "Klarte ikke bli med i samtalegruppen"
@@ -10345,9 +10270,8 @@
 msgid "User Rooms"
 msgstr "Brukerrom"
 
-#, fuzzy
 msgid "Connection problem with the YCHT server"
-msgstr "Problem ved tilkobling til YHCT-tjener."
+msgstr "Problem ved tilkobling til YHCT-tjener"
 
 msgid ""
 "(There was an error converting this message.\t Check the 'Encoding' option "
@@ -10476,17 +10400,18 @@
 msgid "Exposure"
 msgstr "Eksponering"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to parse response from HTTP proxy: %s"
-msgstr "Klarte ikke analysere syntaktisk respons fra HTTP proxy: %s\n"
+msgstr "Klarte ikke tolke svar fra HTTP-mellomtjener: %s"
 
 #, c-format
 msgid "HTTP proxy connection error %d"
 msgstr "Feil %d i forbindelsen mot HTTP-mellomtjeneren"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Access denied: HTTP proxy server forbids port %d tunneling"
-msgstr "Tilgang nektet: Mellomtjener nekter å formidle tunell for port %d."
+msgstr ""
+"Tilgang nektet: HTTP-mellomtjener nekter å formidle tunell for port %d."
 
 #, c-format
 msgid "Error resolving %s"
@@ -10730,17 +10655,18 @@
 msgid "Error Reading %s"
 msgstr "Feil ved lesing av %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "An error was encountered reading your %s.  The file has not been loaded, and "
 "the old file has been renamed to %s~."
 msgstr ""
-"Det oppstod en feil under lesing av %s. Den har ikke blitt lastet, og den "
-"gamle filen ble flyttet til %s~."
+"Det oppstod en feil under lesing av din %s. Fila har ikke blitt lastet, og "
+"den gamle filen ble flyttet til %s~."
 
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
+"Samtale over IM. Støtter AIM, Google Talk, Jabber/XMPP, MSN, Yahoo! og mer"
 
 msgid "Internet Messenger"
 msgstr "Lynmeldingsklient"
@@ -10781,7 +10707,6 @@
 msgid "Use this buddy _icon for this account:"
 msgstr "Bruk dette kontakt _ikon for denne kontoen:"
 
-#, fuzzy
 msgid "Ad_vanced"
 msgstr "_Avansert"
 
@@ -10845,9 +10770,8 @@
 msgid "Create _this new account on the server"
 msgstr "Opprett denne _nye kontoen på tjeneren"
 
-#, fuzzy
 msgid "P_roxy"
-msgstr "Proxy"
+msgstr "_Mellomtjener"
 
 msgid "Enabled"
 msgstr "Aktivert"
@@ -10881,132 +10805,119 @@
 msgid "Background Color"
 msgstr "Bakgrunnsfarge"
 
-#, fuzzy
 msgid "The background color for the buddy list"
-msgstr "Denne gruppen har blitt lagt til kontaktlisten din"
-
-#, fuzzy
+msgstr "Bakgrunnsfargen for kontaktlisten"
+
 msgid "Layout"
-msgstr "Lao"
+msgstr "Layout"
 
 msgid "The layout of icons, name, and status of the buddy list"
-msgstr ""
+msgstr "Utformingen av ikon, navn og statuser i kontaktlista"
 
 #. Group
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list group when in its expanded state
-#, fuzzy
 msgid "Expanded Background Color"
-msgstr "Bakgrunnsfarge"
+msgstr "Bakgrunnsfarge for foldet ut"
 
 msgid "The background color of an expanded group"
-msgstr ""
+msgstr "Bakgrunnsfargen for ei gruppe som er foldet ut"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list group when in its expanded state
-#, fuzzy
 msgid "Expanded Text"
-msgstr "_Utvid"
+msgstr "Tekst som er foldet ut"
 
 msgid "The text information for when a group is expanded"
-msgstr ""
+msgstr "Tekstinformasjon for en gruppe som er foldet ut"
 
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list group when in its collapsed state
-#, fuzzy
 msgid "Collapsed Background Color"
-msgstr "Velg bakgrunnsfarge"
+msgstr "Bakgrunnsfarge for foldet sammen"
 
 msgid "The background color of a collapsed group"
-msgstr ""
+msgstr "Bakgrunnsfargen for ei gruppe som er foldet sammen"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list group when in its collapsed state
-#, fuzzy
 msgid "Collapsed Text"
-msgstr "_Lukk"
+msgstr "Tekst som er foldet sammen"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "Tekstinformasjon for en gruppe som er foldet sammen"
 
 #. Buddy
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list contact or chat room
-#, fuzzy
 msgid "Contact/Chat Background Color"
-msgstr "Velg bakgrunnsfarge"
+msgstr "Bakgrunnsfarge for kontakt/samtale"
 
 msgid "The background color of a contact or chat"
-msgstr ""
+msgstr "Bakgrunnsfargen for en kontakt eller samtale"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list contact when in its expanded state
-#, fuzzy
 msgid "Contact Text"
-msgstr "Snarvei"
+msgstr "Tekst for kontakt"
 
 msgid "The text information for when a contact is expanded"
-msgstr ""
+msgstr "Tekstinformasjon for en kontakt som er foldet ut"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is online
-#, fuzzy
 msgid "Online Text"
-msgstr "Pålogget"
+msgstr "Pålogget-tekst"
 
 msgid "The text information for when a buddy is online"
-msgstr ""
+msgstr "Tekstinformasjon for en kontakt som er pålogget"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is away
-#, fuzzy
 msgid "Away Text"
-msgstr "Borte"
+msgstr "Borte-tekst"
 
 msgid "The text information for when a buddy is away"
-msgstr ""
+msgstr "Tekstinformasjon for en kontakt som er borte"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is offline
-#, fuzzy
 msgid "Offline Text"
-msgstr "Avlogget"
-
-#, fuzzy
+msgstr "Avlogget-tekst"
+
 msgid "The text information for when a buddy is offline"
-msgstr "Endre brukerinformasjon for %s"
+msgstr "Tekstinformasjonen for en kontakt som ikke er pålogget"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is idle
-#, fuzzy
 msgid "Idle Text"
-msgstr "Sinnsstemningstekst"
+msgstr "Inaktiv-tekst"
 
 msgid "The text information for when a buddy is idle"
-msgstr ""
+msgstr "Tekstinformasjon for en kontakt som er inaktiv"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
-#, fuzzy
 msgid "Message Text"
-msgstr "Beskjed sendt"
+msgstr "Beskjed-tekst"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr ""
+msgstr "Tekstinformasjon for en kontakt som har en ulest beskjed"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
 msgid "Message (Nick Said) Text"
-msgstr ""
+msgstr "Tekst for beskjed (Kallenavn sa)"
 
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nickname"
 msgstr ""
-
-#, fuzzy
+"Tekstinformasjonen for en samtale som har en ulest beskjed som nevner "
+"kallenavnet ditt"
+
 msgid "The text information for a buddy's status"
-msgstr "Endre brukerinformasjon for %s"
+msgstr "Tekstinformasjonen for en kontakt sin status"
 
 #, c-format
 msgid "You have %d contact named %s. Would you like to merge them?"
@@ -11027,7 +10938,6 @@
 msgid "Please update the necessary fields."
 msgstr "Oppdater de nødvendige feltene."
 
-#, fuzzy
 msgid "A_ccount"
 msgstr "K_onto:"
 
@@ -11054,16 +10964,14 @@
 msgid "I_M"
 msgstr "Direkte_melding"
 
-#, fuzzy
 msgid "_Audio Call"
-msgstr "_Legg til samtale"
+msgstr "_Lydsamtale"
 
 msgid "Audio/_Video Call"
-msgstr ""
-
-#, fuzzy
+msgstr "_Lyd/videosamtale"
+
 msgid "_Video Call"
-msgstr "Videosamtale"
+msgstr "_Videosamtale"
 
 msgid "_Send File..."
 msgstr "_Send fil..."
@@ -11074,11 +10982,9 @@
 msgid "View _Log"
 msgstr "Vis _logg"
 
-#, fuzzy
 msgid "Hide When Offline"
 msgstr "Skjul når avlogget"
 
-#, fuzzy
 msgid "Show When Offline"
 msgstr "Vis når avlogget"
 
@@ -11204,9 +11110,8 @@
 msgid "/Tools/_Certificates"
 msgstr "/Verktøy/S_ertifikater"
 
-#, fuzzy
 msgid "/Tools/Custom Smile_ys"
-msgstr "/Verktøy/S_milefjes"
+msgstr "/Verktøy/Tilpassede smilef_jes"
 
 msgid "/Tools/Plu_gins"
 msgstr "/Verktøy/ _Tillegg"
@@ -11335,7 +11240,7 @@
 msgstr "Etter status"
 
 msgid "By recent log activity"
-msgstr ""
+msgstr "Etter siste loggaktivitet"
 
 #, c-format
 msgid "%s disconnected"
@@ -11352,7 +11257,7 @@
 msgstr "Reaktiver"
 
 msgid "SSL FAQs"
-msgstr ""
+msgstr "SSL OSS"
 
 msgid "Welcome back!"
 msgstr "Velkommen tilbake!"
@@ -11441,9 +11346,8 @@
 msgid "_Group:"
 msgstr "_Gruppe:"
 
-#, fuzzy
 msgid "Auto_join when account connects."
-msgstr "Bli med automatisk når kontoen er pålogget."
+msgstr "Bli med _automatisk når kontoen er pålogget."
 
 msgid "_Remain in chat after window is closed."
 msgstr "_Forbli i samtale etter at vinduet er lukket."
@@ -11475,9 +11379,8 @@
 msgid "/Buddies/Sort Buddies"
 msgstr "/Kontakter/Sorter kontakter"
 
-#, fuzzy
 msgid "Type the host name for this certificate."
-msgstr "Skriv inn vertsnavnet som dette sertifikatet er for."
+msgstr "Skriv inn vertsnavnet for dette sertifikatet."
 
 #. Widget creation function
 msgid "SSL Servers"
@@ -11526,7 +11429,6 @@
 msgid "Get Away Message"
 msgstr "Hent fraværsbeskjed"
 
-#, fuzzy
 msgid "Last Said"
 msgstr "Sa sist"
 
@@ -11561,9 +11463,8 @@
 msgid "/Conversation/New Instant _Message..."
 msgstr "/Samtale/Ny direkte_melding ..."
 
-#, fuzzy
 msgid "/Conversation/Join a _Chat..."
-msgstr "/Samtale/In_viter ..."
+msgstr "/Samtale/Bli med i en _samtale ..."
 
 msgid "/Conversation/_Find..."
 msgstr "/Samtale/_Finn..."
@@ -11577,21 +11478,17 @@
 msgid "/Conversation/Clea_r Scrollback"
 msgstr "/Samtale/Tø_m tilbakeblikk"
 
-#, fuzzy
 msgid "/Conversation/M_edia"
-msgstr "/Samtale/M_ere"
-
-#, fuzzy
+msgstr "/Samtale/_Media"
+
 msgid "/Conversation/Media/_Audio Call"
-msgstr "/Samtale/M_ere"
-
-#, fuzzy
+msgstr "/Samtale/Media/_Lyd"
+
 msgid "/Conversation/Media/_Video Call"
-msgstr "/Samtale/M_ere"
-
-#, fuzzy
+msgstr "/Samtale/Media/_Video"
+
 msgid "/Conversation/Media/Audio\\/Video _Call"
-msgstr "/Samtale/_Vis logg"
+msgstr "/Samtale/Media/Lyd\\/Video"
 
 msgid "/Conversation/Se_nd File..."
 msgstr "/Samtale/Se_nd fil..."
@@ -11666,18 +11563,15 @@
 msgid "/Conversation/View Log"
 msgstr "/Samtale/Vis logg"
 
-#, fuzzy
 msgid "/Conversation/Media/Audio Call"
-msgstr "/Samtale/Mere"
+msgstr "/Samtale/Media/Lyd"
 
 #
-#, fuzzy
 msgid "/Conversation/Media/Video Call"
-msgstr "/Samtale/Vis logg"
-
-#, fuzzy
+msgstr "/Samtale/Media/Video"
+
 msgid "/Conversation/Media/Audio\\/Video Call"
-msgstr "/Samtale/Mere"
+msgstr "/Samtale/Media/Lyd\\/Video"
 
 msgid "/Conversation/Send File..."
 msgstr "/Samtale/Send fil..."
@@ -11862,7 +11756,7 @@
 msgstr "Ka-Hing Cheung"
 
 msgid "voice and video"
-msgstr ""
+msgstr "stemme og video"
 
 #
 msgid "support"
@@ -11957,7 +11851,7 @@
 msgstr "Estisk"
 
 msgid "Basque"
-msgstr ""
+msgstr "Baskisk"
 
 msgid "Persian"
 msgstr "Persisk"
@@ -11989,9 +11883,8 @@
 msgid "Hungarian"
 msgstr "Ungarsk"
 
-#, fuzzy
 msgid "Armenian"
-msgstr "Rumensk"
+msgstr "Armensk"
 
 msgid "Indonesian"
 msgstr "Indonesisk"
@@ -12008,9 +11901,8 @@
 msgid "Ubuntu Georgian Translators"
 msgstr "Ubuntu georgisk-oversettere"
 
-#, fuzzy
 msgid "Khmer"
-msgstr "Andre"
+msgstr "Khmer"
 
 msgid "Kannada"
 msgstr "Kannada"
@@ -12027,15 +11919,18 @@
 msgid "Lao"
 msgstr "Lao"
 
-msgid "Lithuanian"
-msgstr "Litauisk"
-
 msgid "Macedonian"
 msgstr "Makedonsk"
 
 msgid "Mongolian"
 msgstr "Mongolsk"
 
+msgid "Marathi"
+msgstr "Marathi"
+
+msgid "Malay"
+msgstr "Malayisk"
+
 msgid "Bokmål Norwegian"
 msgstr "Norsk Bokmål"
 
@@ -12051,6 +11946,9 @@
 msgid "Occitan"
 msgstr "Oksitansk"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Panjabi"
 
@@ -12091,7 +11989,7 @@
 msgstr "Svensk"
 
 msgid "Swahili"
-msgstr ""
+msgstr "Swahili"
 
 msgid "Tamil"
 msgstr "Tamil"
@@ -12105,6 +12003,9 @@
 msgid "Turkish"
 msgstr "Tyrkisk"
 
+msgid "Ukranian"
+msgstr "Ukrainsk"
+
 msgid "Urdu"
 msgstr "Urdu"
 
@@ -12127,6 +12028,9 @@
 msgid "Amharic"
 msgstr "Amharisk"
 
+msgid "Lithuanian"
+msgstr "Litauisk"
+
 #, c-format
 msgid "About %s"
 msgstr "Om %s"
@@ -12169,6 +12073,12 @@
 "primary language is <b>English</b>.  You are welcome to post in another "
 "language, but the responses may be less helpful.<br/><br/>"
 msgstr ""
+"<font size=\"4\">Hjelp fra andre Pidgin-brukere:</font> <a href=\"mailto:"
+"support@pidgin.im\">support@pidgin.im</a><br/>Dette er en <b>offentlig</b> e-"
+"postliste! (<a href=\"http://pidgin.im/pipermail/support/\">arkiv</a>)<br/"
+">Vi kan ikke hjelpe med tredjeparts protokoller eller tillegg!<br/>Listens "
+"hovedspråk er <b>engelsk</b>.  Du må gjøre bruke et annet språk, men da får "
+"du gjerne færre/dårligere svar.<br/><br/>"
 
 #, c-format
 msgid ""
@@ -12419,9 +12329,8 @@
 msgid "Hyperlink visited color"
 msgstr "Farge på besøkte lenker"
 
-#, fuzzy
 msgid "Color to draw hyperlink after it has been visited (or activated)."
-msgstr "Lenkefarge etter at lenka er besøkt (eller tatt i bruk)."
+msgstr "Farge for å tegne en lenke etter at den er besøkt (eller tatt i bruk)."
 
 msgid "Hyperlink prelight color"
 msgstr "Lenkefarge (før bruk)"
@@ -12457,23 +12366,20 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr "Farge for navn på handlingsmelding for hviska beskjeder"
 
-#, fuzzy
 msgid "Color to draw the name of a whispered action message."
-msgstr "Farge for å tegne navnet på en handlingsbeskjed."
+msgstr "Farge for å tegne navnet på en hvisket handlingsbeskjed."
 
 msgid "Whisper Message Name Color"
 msgstr "Farge på navn på hviskebeskjed"
 
-#, fuzzy
 msgid "Color to draw the name of a whispered message."
-msgstr "Farge for å tegne navnet på en handlingsbeskjed."
+msgstr "Farge for å tegne navnet på en hvisket beskjed."
 
 msgid "Typing notification color"
 msgstr "Skrivevarslingsfarge"
 
-#, fuzzy
 msgid "The color to use for the typing notification"
-msgstr "Skrifttypefargen som skal brukes ved skrivevarsling"
+msgstr "Fargen som skal brukes ved skrivevarsling"
 
 msgid "Typing notification font"
 msgstr "Skrifttype for skrivevarsling"
@@ -12732,31 +12638,32 @@
 "Usage: %s [OPTION]...\n"
 "\n"
 msgstr ""
+"Bruk: %s [VALG]...\n"
+"\n"
 
 msgid "DIR"
-msgstr ""
+msgstr "MAPPE"
 
 msgid "use DIR for config files"
-msgstr ""
+msgstr "bruk MAPPE for oppsettsfiler"
 
 msgid "print debugging messages to stdout"
-msgstr ""
+msgstr "skriv feilsøkingsbeskjed til standard ut"
 
 msgid "force online, regardless of network status"
-msgstr ""
+msgstr "tving pålogget, uavhengig av nettverkstatus"
 
 msgid "display this help and exit"
-msgstr ""
-
-#, fuzzy
+msgstr "vis denne hjelpen og avslutt"
+
 msgid "allow multiple instances"
-msgstr "Tillat flere samstidige innlogginger"
+msgstr "tillat flere samtidige innlogginger"
 
 msgid "don't automatically login"
-msgstr ""
+msgstr "ikke logg inn automatisk"
 
 msgid "NAME"
-msgstr ""
+msgstr "NAVN"
 
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
@@ -12765,10 +12672,10 @@
 msgstr ""
 
 msgid "X display to use"
-msgstr ""
+msgstr "X-skjerm som skal brukes"
 
 msgid "display the current version and exit"
-msgstr ""
+msgstr "vis gjeldende versjon og avslutt"
 
 #, c-format
 msgid ""
@@ -12803,21 +12710,21 @@
 msgstr "Avslutter fordi en annen libpurple-klient allerede kjører.\n"
 
 msgid "/_Media"
-msgstr ""
+msgstr "/_Media"
 
 msgid "/Media/_Hangup"
-msgstr ""
+msgstr "/Media/_Legg på"
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
-msgstr ""
+msgstr "%s ønsker å starte en lyd/videoøkt med deg."
 
 #, c-format
 msgid "%s wishes to start a video session with you."
-msgstr ""
+msgstr "%s ønsker å starte en videoøkt med deg."
 
 msgid "Incoming Call"
-msgstr ""
+msgstr "Innkommende oppringing"
 
 msgid "_Pause"
 msgstr "_Pause"
@@ -12851,9 +12758,8 @@
 "Klarte ikke å starte en nettleser fordi 'Manuell' nettleserkommando er "
 "valgt, men ingen kommando for denne har blitt satt."
 
-#, fuzzy
 msgid "No message"
-msgstr "Ukjent beskjed"
+msgstr "Ingen beskjed"
 
 msgid "Open All Messages"
 msgstr "Åpne alle beskjeder"
@@ -12861,16 +12767,14 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Du har fått e-post!</span>"
 
-#, fuzzy
 msgid "New Pounces"
-msgstr "Legg til kontaktvarsling"
+msgstr "Nye varslinger"
 
 msgid "Dismiss"
-msgstr ""
-
-#, fuzzy
+msgstr "Avslå"
+
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
-msgstr "<span weight=\"bold\" size=\"larger\">Du har fått e-post!</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Du har varslet!</span>"
 
 msgid "The following plugins will be unloaded."
 msgstr "Følgende tillegg kunne ikke losses."
@@ -12918,7 +12822,6 @@
 msgid "Select a file"
 msgstr "Velg fil"
 
-#, fuzzy
 msgid "Modify Buddy Pounce"
 msgstr "Rediger kontaktvarsling"
 
@@ -12995,91 +12898,86 @@
 msgid "Pounce Target"
 msgstr "Pounce mål"
 
-#, fuzzy
 msgid "Started typing"
-msgstr "Starter å skrive"
-
-#, fuzzy
+msgstr "Startet å skrive"
+
 msgid "Paused while typing"
-msgstr "Brukeren skriver en melding"
-
-#, fuzzy
+msgstr "Tok i en pause i skrivinga"
+
 msgid "Signed on"
-msgstr "Logger på"
-
-#, fuzzy
+msgstr "Logget på"
+
 msgid "Returned from being idle"
-msgstr "%s har blitt aktiv igjen (%s)"
-
-#, fuzzy
+msgstr "Er aktiv igjen"
+
 msgid "Returned from being away"
-msgstr "Returnerer fra fravær"
-
-#, fuzzy
+msgstr "Er tilbake igjen"
+
 msgid "Stopped typing"
 msgstr "Stoppet å skrive"
 
-#, fuzzy
 msgid "Signed off"
-msgstr "Logger av"
-
-#, fuzzy
+msgstr "Logget av"
+
 msgid "Became idle"
-msgstr "Blir inaktiv"
-
-#, fuzzy
+msgstr "Ble inaktiv"
+
 msgid "Went away"
-msgstr "Når fraværende"
-
-#, fuzzy
+msgstr "Ble borte"
+
 msgid "Sent a message"
-msgstr "Send en beskjed"
-
-#, fuzzy
+msgstr "Sendte en beskjed"
+
 msgid "Unknown.... Please report this!"
-msgstr "Ukjent varslingshendelse. Vennligst rapporter dette!"
+msgstr "Ukjent ... Rapporter dette."
 
 msgid "(Custom)"
-msgstr ""
-
-#, fuzzy
-msgid "(Default)"
-msgstr "(forvalgt)"
+msgstr "(Tilpasset)"
+
+msgid "Penguin Pimps"
+msgstr "Penguin Pimps"
 
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Standard Pidgin lyd"
+
 msgid "The default Pidgin buddy list theme"
-msgstr "Kontaktliste"
+msgstr "Standard kontaktliste for Pidgin"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Standardtema for ikon i Pidgin"
+
 msgid "Theme failed to unpack."
-msgstr "Smiley tema feilet å pakke ut."
-
-#, fuzzy
+msgstr "Klarte ikke pakke ut temaet."
+
 msgid "Theme failed to load."
-msgstr "Smiley tema feilet å pakke ut."
-
-#, fuzzy
+msgstr "Klarte ikke laste temaet."
+
 msgid "Theme failed to copy."
-msgstr "Smiley tema feilet å pakke ut."
-
-msgid "Install Theme"
-msgstr "Installer tema"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
-"Velg smilefjes-temaet du vil bruke fra listen nedenfor. Nye temaer kan "
-"installeres ved å dra og slippe dem over temalisten."
-
-msgid "Icon"
-msgstr "Ikon"
+msgstr "Klarte ikke kopiere temaet."
+
+msgid "Theme Selections"
+msgstr "Temavalg"
+
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"Velg et tema du vil bruke fra listen nedenfor.\n"
+"Nye temaer kan installeres ved å dra og slippe dem over temalisten."
+
+msgid "Buddy List Theme:"
+msgstr "Tema for kontaktliste:"
+
+msgid "Status Icon Theme:"
+msgstr "Tema for statusikon:"
+
+msgid "Sound Theme:"
+msgstr "Tema for lyd:"
+
+msgid "Smiley Theme:"
+msgstr "Tema for smilefjes:"
 
 msgid "Keyboard Shortcuts"
 msgstr "Tastatursnarveier"
@@ -13087,11 +12985,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "_Lukk samtaler med Esc-tasten"
 
-#. Buddy List Themes
-#, fuzzy
-msgid "Buddy List Theme"
-msgstr "Kontaktliste"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "System-trayikon"
@@ -13102,9 +12995,8 @@
 msgid "On unread messages"
 msgstr "Ved uleste beskjeder"
 
-#, fuzzy
 msgid "Conversation Window"
-msgstr "Samtalevinduer for lynmeldinger"
+msgstr "Samtalevindu"
 
 msgid "_Hide new IM conversations:"
 msgstr "_Gjem nye lynmeldingssamtaler:"
@@ -13179,9 +13071,6 @@
 msgid "Font"
 msgstr "Skrifttype"
 
-msgid "Use document font from _theme"
-msgstr "Bruk dokument font fra _tema"
-
 msgid "Use font from _theme"
 msgstr "Bruk font fra _tema"
 
@@ -13204,15 +13093,13 @@
 msgid "Cannot start browser configuration program."
 msgstr "Klarte ikke starte oppsettsprogram for nettleser."
 
-#, fuzzy
 msgid "Disabled"
-msgstr "_Deaktiver"
-
-#, fuzzy, c-format
+msgstr "Deaktivert"
+
+#, c-format
 msgid "Use _automatically detected IP address: %s"
-msgstr "Finn IP-adresse _automatisk"
-
-#, fuzzy
+msgstr "Bruk _automatisk oppdaget IP-adresse: %s"
+
 msgid "ST_UN server:"
 msgstr "ST_UN-tjener:"
 
@@ -13228,78 +13115,27 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "Slå på automatisk port_videresending"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "_Manuellt spesifiser et intervall av porter å lytte på"
-
-#, fuzzy
+msgstr "_Manuellt spesifiser et intervall av porter å lytte på:"
+
 msgid "_Start:"
-msgstr "_Status:"
-
-#, fuzzy
+msgstr "_Start:"
+
 msgid "_End:"
-msgstr "_Utvid"
+msgstr "_Slutt:"
 
 #. TURN server
 msgid "Relay Server (TURN)"
-msgstr ""
-
-#, fuzzy
+msgstr "Relay-tjener (TURN)"
+
 msgid "_TURN server:"
-msgstr "ST_UN-tjener:"
-
-#, fuzzy
+msgstr "_TURN-tjener:"
+
 msgid "Use_rname:"
-msgstr "Brukernavn:"
-
-#, fuzzy
+msgstr "_Brukernavn:"
+
 msgid "Pass_word:"
-msgstr "Passord:"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "Proxytjener &amp; nettleser"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>Fant ikke innstillingsprogrammet for mellomlageret.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>Fant ikke innstillingsprogrammet for nettleseren.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"Mellomlager- og nettleserinnstillinger endrer\n"
-"en i GNOME-innstillingene"
-
-msgid "Configure _Proxy"
-msgstr "Sett opp _proxy"
-
-msgid "Configure _Browser"
-msgstr "Sett opp _nettleser"
-
-msgid "Proxy Server"
-msgstr "Proxytjener"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Bruk fjern DNS med SOCKS4-mellomtenarar"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "Proxy_type:"
-
-msgid "No proxy"
-msgstr "Ingen proxy"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "_Port:"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Brukernavn:"
+msgstr "_Passord:"
 
 msgid "Seamonkey"
 msgstr "Seamonkey"
@@ -13340,6 +13176,15 @@
 msgid "Browser Selection"
 msgstr "Valg av nettleser"
 
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr "Nettleserinnstillinger endrer en i GNOME-innstillingene"
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>Fant ikke innstillingsprogrammet for nettleseren.</b>"
+
+msgid "Configure _Browser"
+msgstr "Sett opp _nettleser"
+
 msgid "_Browser:"
 msgstr "_Nettleser:"
 
@@ -13363,6 +13208,35 @@
 "_Egendefinert:\n"
 "(%s for URL)"
 
+msgid "Proxy Server"
+msgstr "Proxytjener"
+
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr "Mellomtjenerinnstillinger endrer en i GNOME-innstillingene"
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>Fant ikke innstillingsprogrammet for mellomlageret.</b>"
+
+msgid "Configure _Proxy"
+msgstr "Sett opp _proxy"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Bruk fjern _DNS med SOCKS4-mellomtjenere"
+
+msgid "Proxy t_ype:"
+msgstr "Proxy_type:"
+
+msgid "No proxy"
+msgstr "Ingen proxy"
+
+msgid "P_ort:"
+msgstr "P_ort:"
+
+msgid "User_name:"
+msgstr "_Brukernavn:"
+
 msgid "Log _format:"
 msgstr "Logg_format:"
 
@@ -13446,25 +13320,18 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Basert på tastatur eller mus bruk"
 
+msgid "_Minutes before becoming idle:"
+msgstr "Antall _minutter før man regnes som inaktiv:"
+
+msgid "Change to this status when _idle:"
+msgstr "Endre til denne statusen hvis _inaktiv:"
+
 msgid "_Auto-reply:"
 msgstr "_Automatisk svar:"
 
 msgid "When both away and idle"
 msgstr "Når både fraværende og inaktiv"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Automatisk fraværsmarkering"
-
-msgid "_Minutes before becoming idle:"
-msgstr "Antall _minutter før man regnes som inaktiv:"
-
-msgid "Change status when _idle"
-msgstr "Endre status hvis _inaktiv"
-
-msgid "Change _status to:"
-msgstr "Endre _status til:"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "Status ved oppstart"
@@ -13478,15 +13345,15 @@
 msgid "Interface"
 msgstr "Grensesnitt"
 
-msgid "Smiley Themes"
-msgstr "Smilefjes-tema"
-
 msgid "Browser"
 msgstr "Nettleser"
 
 msgid "Status / Idle"
 msgstr "Status / inaktiv"
 
+msgid "Themes"
+msgstr "Tema"
+
 msgid "Allow all users to contact me"
 msgstr "Tillat alle brukere å kontakte meg"
 
@@ -13502,9 +13369,8 @@
 msgid "Block only the users below"
 msgstr "Blokker kun brukerne vist nedenfor"
 
-#, fuzzy
 msgid "Privacy"
-msgstr "Privat"
+msgstr "Personvern"
 
 msgid "Changes to privacy settings take effect immediately."
 msgstr "Endringer i sikkerhetsinnstillingene skjer umiddelbart."
@@ -13610,12 +13476,11 @@
 msgid "Status for %s"
 msgstr "Status for %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
 msgstr ""
-"Et tilpasset smilefjes finnes allerede for den valgte snarveien. Oppgi en "
-"annen snarvei."
+"Et tilpasset smilefjes finnes allerede for «%s». Oppgi en annen snarvei."
 
 msgid "Custom Smiley"
 msgstr "Tilpassede smilefjes"
@@ -13629,28 +13494,24 @@
 msgid "Add Smiley"
 msgstr "Legg til smilefjes"
 
-#, fuzzy
 msgid "_Image:"
-msgstr "_Bilde"
+msgstr "_Bilde:"
 
 #. Shortcut text
-#, fuzzy
 msgid "S_hortcut text:"
-msgstr "Snarvei"
+msgstr "S_narveitekst:"
 
 msgid "Smiley"
 msgstr "Smilefjes"
 
-#, fuzzy
 msgid "Shortcut Text"
-msgstr "Snarvei"
+msgstr "Snarveitekst"
 
 msgid "Custom Smiley Manager"
 msgstr "Tilpassede smilefjes"
 
-#, fuzzy
 msgid "Select Buddy Icon"
-msgstr "Velg kontakt"
+msgstr "Velg kontaktikon"
 
 msgid "Click to change your buddyicon for this account."
 msgstr "Klikk for å endre kontaktikonet for denne kontoen."
@@ -13734,7 +13595,6 @@
 msgid "Cannot send launcher"
 msgstr "Klarte ikke sende lasteren"
 
-#, fuzzy
 msgid ""
 "You dragged a desktop launcher. Most likely you wanted to send the target of "
 "this launcher instead of this launcher itself."
@@ -13772,9 +13632,8 @@
 msgstr ""
 "Feilet å laste bilde '%s': grunn ukjent, sannsynligvis en korrupt bilde fil"
 
-#, fuzzy
 msgid "_Open Link"
-msgstr "_Åpne lenke i:"
+msgstr "_Åpne lenke"
 
 msgid "_Copy Link Location"
 msgstr "_Kopier lenkemål"
@@ -13782,25 +13641,24 @@
 msgid "_Copy Email Address"
 msgstr "_Kopier e-postadresse"
 
-#, fuzzy
 msgid "_Open File"
-msgstr "Åpne fil..."
+msgstr "_Åpne fil"
 
 #
-#, fuzzy
 msgid "Open _Containing Directory"
-msgstr "Logg Katalog"
+msgstr "Åpne _inneholdende katalog "
 
 msgid "Save File"
 msgstr "Lagre fil"
 
-#, fuzzy
 msgid "_Play Sound"
-msgstr "Spill av en lyd"
-
-#, fuzzy
+msgstr "_Spill av en lyd"
+
 msgid "_Save File"
-msgstr "Lagre fil"
+msgstr "_Lagre fil"
+
+msgid "Do you really want to clear?"
+msgstr "Er du sikker på at du vil tømme?"
 
 msgid "Select color"
 msgstr "Velg farge"
@@ -13840,9 +13698,6 @@
 msgid "Pidgin smileys"
 msgstr "Pidgin smileys"
 
-msgid "Penguin Pimps"
-msgstr "Penguin Pimps"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Valg av dette fjerner bruk av grafiske animasjons ikoner."
 
@@ -13987,79 +13842,66 @@
 
 #. Note to translators: The string "Enter an XMPP Server" is asking the
 #. user to type the name of an XMPP server which will then be queried
-#, fuzzy
 msgid "Server name request"
-msgstr "Tjeneradresse"
-
-#, fuzzy
+msgstr "Tjenernavnforespørsel"
+
 msgid "Enter an XMPP Server"
-msgstr "Skriv inn en konferansetjener"
-
-#, fuzzy
+msgstr "Skriv inn en XMPP-tjener"
+
 msgid "Select an XMPP server to query"
-msgstr "Velg en konferanseserver å spørre"
-
-#, fuzzy
+msgstr "Velg en XMPP-tjener å spørre"
+
 msgid "Find Services"
-msgstr "Tjenester på nett"
-
-#, fuzzy
+msgstr "Finn tjenester"
+
 msgid "Add to Buddy List"
-msgstr "Send kontaktliste"
-
-#, fuzzy
+msgstr "Legg till i kontaktliste"
+
 msgid "Gateway"
-msgstr "Forlater"
+msgstr "Gateway"
 
 #
-#, fuzzy
 msgid "Directory"
-msgstr "Logg Katalog"
-
-#, fuzzy
+msgstr "Katalog"
+
 msgid "PubSub Collection"
-msgstr "Lydvalg"
-
-#, fuzzy
+msgstr "PubSub-samling"
+
 msgid "PubSub Leaf"
-msgstr "PubSub Service"
-
-#, fuzzy
+msgstr "PubSub-løv"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
-msgstr "Beskrivelse"
+msgstr ""
+"\n"
+"<b>Beskrivelse:</b> "
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "Tjenesteoppdagingsinfo"
-
-#, fuzzy
+msgstr "Tjenesteoppdagelse"
+
 msgid "_Browse"
-msgstr "_Nettleser:"
-
-#, fuzzy
+msgstr "_Bla gjennom"
+
 msgid "Server does not exist"
-msgstr "Brukeren eksisterer ikke"
-
-#, fuzzy
+msgstr "Tjener eksisterer ikke"
+
 msgid "Server does not support service discovery"
-msgstr "Tjener støtter ikke blokkering"
-
-#, fuzzy
+msgstr "Tjener støtter ikke tjenesteoppdagelse"
+
 msgid "XMPP Service Discovery"
-msgstr "Tjenesteoppdagingsinfo"
+msgstr "XMPP-tjenesteoppdaging"
 
 msgid "Allows browsing and registering services."
-msgstr ""
-
-#, fuzzy
+msgstr "Tillat søking i og registrering av tjenester."
+
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
 msgstr ""
-"Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter."
+"Dette tillegget er kjekt å ha for registrering med gamle transport eller "
+"andre XMPP-tjenester."
 
 msgid "By conversation count"
 msgstr "Etter samtaleantall"
@@ -14362,13 +14204,12 @@
 msgstr "Musikk Samtale Tillegg for samarbeids komposisjon."
 
 #. *  summary
-#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
 "on a piece of music by editing a common score in real-time."
 msgstr ""
-"Musikk Samtale Tillegg tillater flere brukere å arbeide på et stykke musikk "
-"samtidig ved å redigere et felles resultat i samtid."
+"Tillegget for musikksamtale tillater flere brukere å arbeide på et stykke "
+"musikk samtidig ved å redigere et felles partitur i samtid."
 
 #. ---------- "Notify For" ----------
 msgid "Notify For"
@@ -14490,7 +14331,6 @@
 msgid "Highlighted Message Name Color"
 msgstr "Farge for fremhevede beskjednavn"
 
-#, fuzzy
 msgid "Typing Notification Color"
 msgstr "Skrivevarslingsfarge"
 
@@ -14500,6 +14340,9 @@
 msgid "Conversation Entry"
 msgstr "Samtale"
 
+msgid "Conversation History"
+msgstr "Samtalehistorikk"
+
 msgid "Request Dialog"
 msgstr "Forespørselsdialog"
 
@@ -14523,23 +14366,20 @@
 msgid "GTK+ Text Shortcut Theme"
 msgstr "GTK+ Tekst Tema Snarvei"
 
-#, fuzzy
 msgid "Disable Typing Notification Text"
-msgstr "Aktiver varsling om skriving"
-
-#, fuzzy
+msgstr "Tekst for deaktivering av skrivevarsling"
+
 msgid "GTK+ Theme Control Settings"
-msgstr "Pidgin GTK+ Tema Kontroll"
-
-#, fuzzy
+msgstr "Innstillinger for GTK+-temakontroll"
+
 msgid "Colors"
-msgstr "Lukk"
+msgstr "Farger"
 
 msgid "Fonts"
 msgstr "Fonter"
 
 msgid "Miscellaneous"
-msgstr ""
+msgstr "Diverse"
 
 msgid "Gtkrc File Tools"
 msgstr "Gtkrc Fil Verktøy"
@@ -14622,13 +14462,12 @@
 msgstr "Send-knapp i samtalevindu"
 
 #. *< summary
-#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
 "for use when no physical keyboard is present."
 msgstr ""
-"Legg til en Send-knapp i samtalevinduet. Tenkt brukt når intet fysisk "
-"tastatur er tilgjengelig."
+"Legg til en send-knapp i skriveområdet av samtalevinduet. Tenkt brukt når "
+"intet fysisk tastatur er tilgjengelig."
 
 msgid "Duplicate Correction"
 msgstr "Dupliserings Korrigering"
@@ -14679,97 +14518,81 @@
 msgid "Replaces text in outgoing messages according to user-defined rules."
 msgstr "Erstatter tekst i utgående beskjeder etter regler som du bestemmer."
 
-#, fuzzy
 msgid "Just logged in"
-msgstr "Ikke pålogget"
-
-#, fuzzy
+msgstr "Akkurat logget på"
+
 msgid "Just logged out"
-msgstr "Ikke pålogget"
+msgstr "Akkurat logget av"
 
 msgid ""
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
-
-#, fuzzy
+"Ikon for kontact/\n"
+"Ikon for ukjent person"
+
 msgid "Icon for Chat"
-msgstr "Bli med i en samtalegruppe"
-
-#, fuzzy
+msgstr "Ikon for samtale"
+
 msgid "Ignored"
-msgstr "Ignorer"
-
-#, fuzzy
+msgstr "Ignorert"
+
 msgid "Founder"
-msgstr "Høyere"
+msgstr "Grunnlegger"
 
 #. A user in a chat room who has special privileges.
-#, fuzzy
 msgid "Operator"
-msgstr "Opera"
+msgstr "Operatør"
 
 #. A half operator is someone who has a subset of the privileges
 #. that an operator has.
 msgid "Half Operator"
-msgstr ""
-
-#, fuzzy
+msgstr "Halvoperatør"
+
 msgid "Authorization dialog"
-msgstr "Godkjent"
-
-#, fuzzy
+msgstr "Godkjennelsesdialog"
+
 msgid "Error dialog"
-msgstr "Feil"
-
-#, fuzzy
+msgstr "Feildialog"
+
 msgid "Information dialog"
-msgstr "Informasjon"
+msgstr "Informasjonsdialog"
 
 msgid "Mail dialog"
-msgstr ""
-
-#, fuzzy
+msgstr "E-postdialog"
+
 msgid "Question dialog"
-msgstr "Forespørselsdialog"
-
-#, fuzzy
+msgstr "Spørsmålsdialog"
+
 msgid "Warning dialog"
-msgstr "Advarselsnivåer"
+msgstr "Advarselsdialog"
 
 msgid "What kind of dialog is this?"
-msgstr ""
-
-#, fuzzy
+msgstr "Hvilken type dialog er dette?"
+
 msgid "Status Icons"
-msgstr "Status for %s"
-
-#, fuzzy
+msgstr "Statusikon"
+
 msgid "Chatroom Emblems"
-msgstr "Samtaleroms språk"
-
-#, fuzzy
+msgstr "Samtaleromsymbol"
+
 msgid "Dialog Icons"
-msgstr "Endre ikon"
-
-#, fuzzy
+msgstr "Dialogikon"
+
 msgid "Pidgin Icon Theme Editor"
-msgstr "Pidgin GTK+ Tema Kontroll"
-
-#, fuzzy
+msgstr "Editor for Pidgin-ikontema"
+
 msgid "Contact"
-msgstr "Kontaktinformasjon"
-
-#, fuzzy
+msgstr "Kontakt"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "Kontaktliste"
-
-#, fuzzy
+msgstr "Editor for Pidgin-kontaktlistetema"
+
 msgid "Edit Buddylist Theme"
-msgstr "Kontaktliste"
+msgstr "Rediger kontaktlistetema"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "Rediger ikontema"
 
 #. *< type
 #. *< ui_requirement
@@ -14778,16 +14601,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "Pidgin GTK+ Tema Kontroll"
+msgstr "Editor for Pidgin-tema"
 
 #. *< name
 #. *< version
 #. *  summary
-#, fuzzy
 msgid "Pidgin Theme Editor."
-msgstr "Pidgin GTK+ Tema Kontroll"
+msgstr "Editor for Pidgin-tema."
 
 #. *< type
 #. *< ui_requirement
@@ -14873,35 +14694,29 @@
 "Dette tillegget tillater brukeren å lage egne samtale og loggings "
 "tidsstempler."
 
-#, fuzzy
 msgid "Audio"
-msgstr "Auto"
-
-#, fuzzy
+msgstr "Lyd"
+
 msgid "Video"
 msgstr "Video"
 
 msgid "Output"
-msgstr ""
-
-#, fuzzy
+msgstr "Utdata"
+
 msgid "_Plugin"
-msgstr "Tillegg"
-
-#, fuzzy
+msgstr "_Tillegg"
+
 msgid "_Device"
-msgstr "Enhet"
+msgstr "_Enhet"
 
 msgid "Input"
-msgstr ""
-
-#, fuzzy
+msgstr "Inndata"
+
 msgid "P_lugin"
-msgstr "Tillegg"
-
-#, fuzzy
+msgstr "_Tillegg"
+
 msgid "D_evice"
-msgstr "Enhet"
+msgstr "_Enhet"
 
 #. *< magic
 #. *< major version
@@ -14912,18 +14727,19 @@
 #. *< dependencies
 #. *< priority
 #. *< id
-#, fuzzy
 msgid "Voice/Video Settings"
-msgstr "Rediger innstillinger"
+msgstr "Lyd/videoinnstillinger"
 
 #. *< name
 #. *< version
 msgid "Configure your microphone and webcam."
-msgstr ""
+msgstr "Sett opp mikrofonen din og nettkameraet ditt. "
 
 #. *< summary
 msgid "Configure microphone and webcam settings for voice/video calls."
 msgstr ""
+"Sett opp mikrofonen din og nettkameraet innstillinger for stemme/"
+"videosamtaler. "
 
 msgid "Opacity:"
 msgstr "Ugjennomsiktighet:"
@@ -14990,9 +14806,8 @@
 msgid "_Start %s on Windows startup"
 msgstr "_Start %s når Windows starter"
 
-#, fuzzy
 msgid "Allow multiple instances"
-msgstr "Tillat flere samstidige innlogginger"
+msgstr "Tillat flere samtidige innlogginger"
 
 msgid "_Dockable Buddy List"
 msgstr "_Skjuling av kontaktliste i systemstatusfeltet"
@@ -15011,7 +14826,6 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "Innstillinger som er spesifikke for Pidgin på Windows."
 
-#, fuzzy
 msgid ""
 "Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
@@ -15057,6 +14871,36 @@
 "Dette tillegget er kjekt å ha for debugging av XMPP servere og klienter."
 
 #, fuzzy
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Den siste kommandoen ble ikke utført fordi du har overskredet "
+#~ "hastighetsgrensen. Vennligst vent 10 sekunder og prøv igjen."
+
+#, fuzzy
+#~ msgid "(Default)"
+#~ msgstr "(forvalgt)"
+
+#~ msgid "Install Theme"
+#~ msgstr "Installer tema"
+
+#~ msgid "Icon"
+#~ msgstr "Ikon"
+
+#~ msgid "Use document font from _theme"
+#~ msgstr "Bruk dokument font fra _tema"
+
+#~ msgid "Proxy Server &amp; Browser"
+#~ msgstr "Proxytjener &amp; nettleser"
+
+#~ msgid "Auto-away"
+#~ msgstr "Automatisk fraværsmarkering"
+
+#~ msgid "Change _status to:"
+#~ msgstr "Endre _status til:"
+
+#, fuzzy
 #~ msgid "The root certificate this one claims to be issued by is unknown."
 #~ msgstr ""
 #~ "Root sertifikatet som denne hevder å bli utstedt av er ukjent for Pidgin."
--- a/po/nn.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/nn.po	Thu Feb 18 21:38:43 2010 +0000
@@ -1,16 +1,20 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Pidgin 2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-13 17:24-0800\n"
-"PO-Revision-Date: 2010-01-07 15:35+0100\n"
+"POT-Creation-Date: 2010-02-13 23:32-0800\n"
+"PO-Revision-Date: 2010-02-12 23:52+0100\n"
 "Last-Translator: Yngve Spjeld Landro <nynorsk(a)strilen(.)net>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Poedit-Bookmarks: -1,1060,1063,3712,-1,-1,-1,-1,-1,-1\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -4697,6 +4701,9 @@
 msgid "(Code %s)"
 msgstr "(Kode %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Eit tilpassa smilefjes i meldinga er for stor til å kunna sendast."
+
 msgid "XML Parse error"
 msgstr "Feil i XML-tolkinga"
 
@@ -6693,7 +6700,10 @@
 msgid "Server port"
 msgstr "Tenarport"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Fekk uventa svar frå %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Fekk uventa svar frå %s"
@@ -6711,6 +6721,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Klarte ikkje å henta %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Tenaren bad deg skriva inn ein CAPTCHA for å logga deg på, men denne "
+"klienten støttar enno ikkje CAPTCHA-er."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL tillèt ikkje at brukarnamnet ditt kan autentiserast her"
 
@@ -7267,14 +7284,6 @@
 "Klarer ikkje visa ei melding frå denne brukaren: ho inneheldt ulovlege "
 "teikn.]"
 
-# mengdegrensa?
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Klarte ikkje å utføra den siste handlinga sidan du er over mengdegrensa. "
-"Vent i 10 sekund og prøv igjen.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Du er blitt fråkopla praterommet %s."
@@ -11934,6 +11943,9 @@
 msgid "Mongolian"
 msgstr "Mongolsk"
 
+msgid "Marathi"
+msgstr "Marathi"
+
 msgid "Malay"
 msgstr "Malayisk"
 
@@ -11952,6 +11964,9 @@
 msgid "Occitan"
 msgstr "Oksitansk"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Panjabi"
 
@@ -13673,6 +13688,9 @@
 msgid "_Save File"
 msgstr "_Lagra fila"
 
+msgid "Do you really want to clear?"
+msgstr "Vil du verkeleg tømma?"
+
 msgid "Select color"
 msgstr "Vel farge"
 
@@ -14876,6 +14894,14 @@
 msgstr ""
 "Dette programtillegget er nyttig ved feilsøking av XMPP-tenarar og -klientar."
 
+# mengdegrensa?
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Klarte ikkje å utføra den siste handlinga sidan du er over mengdegrensa. "
+#~ "Vent i 10 sekund og prøv igjen.\n"
+
 #~ msgid "%s"
 #~ msgstr "%s"
 
--- a/po/or.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/or.po	Thu Feb 18 21:38:43 2010 +0000
@@ -1,14 +1,14 @@
-# translation of pidgin.or.po to Oriya
+# translation of or.po to Oriya
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Manoj Kumar Giri <mgiri@redhat.com>, 2009, 2010.
 msgid ""
 msgstr ""
-"Project-Id-Version: pidgin.or\n"
+"Project-Id-Version: or\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-06 16:30-0800\n"
-"PO-Revision-Date: 2010-02-02 17:59+0530\n"
+"POT-Creation-Date: 2010-02-10 22:30-0800\n"
+"PO-Revision-Date: 2010-02-11 11:31+0530\n"
 "Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
 "Language-Team: Oriya <oriya-it@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
@@ -29,6 +29,7 @@
 "\n"
 "\n"
 "\n"
+"\n"
 "X-Generator: KBabel 1.11.4\n"
 
 #. Translators may want to transliterate the name.
@@ -4643,9 +4644,8 @@
 msgid "(Code %s)"
 msgstr "(ସଂକେତ %s)"
 
-#, fuzzy
 msgid "A custom smiley in the message is too large to send."
-msgstr "ସଂଦେଶ ପଠାଇବାକୁ ଅସମର୍ଥ: ସଂଦେଶ ବହୁତ ବଡ ଅଟେ ।"
+msgstr "ସଂଦେଶରେ ଥିବା ଇଚ୍ଛାରୂପଣ smiley ପଠାଇବା ପାଇଁ ଅତ୍ୟଧିକ ବଡ ଅଟେ।"
 
 msgid "XML Parse error"
 msgstr "XML ପାର୍ସ ଭୂଲ"
@@ -6628,9 +6628,9 @@
 msgid "Server port"
 msgstr "ସରଭର ପୋର୍ଟ"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Received unexpected response from %s: %s"
-msgstr "%s ରୁ ଅପ୍ରତ୍ୟାଶିତ ଉତ୍ତର ଗ୍ରହଣ କରିଅଛି"
+msgstr "%s ରୁ ଅପ୍ରତ୍ୟାଶିତ ଉତ୍ତର ଗ୍ରହଣ କରିଅଛି: %s"
 
 #, c-format
 msgid "Received unexpected response from %s"
@@ -6649,6 +6649,13 @@
 msgid "Error requesting %s: %s"
 msgstr "%s କୁ ଅନୁରୋଧ କରିବାରେ ତ୍ରୁଟି: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"ସର୍ଭର ଅନୁରୋଧ କରିଥିଲା ଯେ ଆପଣ ଗୋଟିଏ CAPTCHA କୁ ସାଇନ ଇନ କରିବା ପାଇଁ ପୁରଣ କରନ୍ତୁ, କିନ୍ତୁ ଏହି "
+"କ୍ଲାଏଣ୍ଟ ବର୍ତ୍ତମାନ CAPTCHA ଗୁଡ଼ିକୁ ସମର୍ଥନ କରେନାହିଁ।"
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "ଏଠାରେ ବୈଧିକୃତ ହେବା ପାଇଁ AOL ଆପଣଙ୍କର ପରଦା ନାମକୁ ଅନୁମତି ଦେଇନଥାଏ"
 
@@ -6658,13 +6665,6 @@
 msgid "Invalid chat room name"
 msgstr "ଅବୈଧ ଚାର୍ଟ କୋଠରୀ ନାମ"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"ଆପଣ ଚେଷ୍ଟାକରିଥିବା ଅନ୍ତିମ କାର୍ଯ୍ୟକୁ କାର୍ଯ୍ୟକାରୀ କରିହେଲା ନାହିଁ କାରଣ ଆପଣ ହାର ସୀମା ଉପରେ ଅଛନ୍ତି। "
-"ଦୟାକରି 10 ସେକଣ୍ଡ ଅପେକ୍ଷା କରନ୍ତୁ ଏବଂ ପୁଣିଥରେ ଚେଷ୍ଟାକରନ୍ତୁ।\n"
-
 msgid "Received invalid data on connection with server"
 msgstr "ସର୍ଭର ସହିତ ସଂଯୁକ୍ତ ହେବା ସମୟରେ ଅବୈଧ ତଥ୍ୟ ଗ୍ରହଣ କରିଥିଲା"
 
@@ -11796,9 +11796,8 @@
 msgid "Mongolian"
 msgstr "ମୋଙ୍ଗୋଲିୟାନ"
 
-#, fuzzy
 msgid "Marathi"
-msgstr "ଗୁଜୁରାଟୀ"
+msgstr "ମୋରାଠୀ"
 
 msgid "Malay"
 msgstr "ମାଳୟ"
@@ -11818,9 +11817,8 @@
 msgid "Occitan"
 msgstr "ଓସିଟାନ"
 
-#, fuzzy
 msgid "Oriya"
-msgstr "ଅପେରା"
+msgstr "ଓଡ଼ିଆ"
 
 msgid "Punjabi"
 msgstr "ପଞ୍ଜାବୀ"
@@ -13522,6 +13520,9 @@
 msgid "_Save File"
 msgstr "ଫାଇଲକୁ ସଂରକ୍ଷଣ କରନ୍ତୁ (_S)"
 
+msgid "Do you really want to clear?"
+msgstr "ଆପଣ ପ୍ରକୃତରେ ବିଲୋପ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି କି?"
+
 msgid "Select color"
 msgstr "ରଙ୍ଗ ମନୋନୀତକର"
 
@@ -14714,6 +14715,3 @@
 #. *  description
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "ଏହି ପ୍ଲଗଇନ XMPP ସର୍ଭରଗୁଡିକୁ କିମ୍ବା ଗ୍ରାହକଗୁଡିକୁ ତ୍ରୁଟିନିବାରଣ କରିବା ପାଇଁ ଉପଯୋଗୀ ହୋଇଥାଏ।"
-
-#~ msgid "%s"
-#~ msgstr "%s"
--- a/po/pl.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/pl.po	Thu Feb 18 21:38:43 2010 +0000
@@ -14,8 +14,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin polish translation\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-15 17:07-0800\n"
-"PO-Revision-Date: 2010-01-14 17:22+0100\n"
+"POT-Creation-Date: 2010-02-10 20:02-0800\n"
+"PO-Revision-Date: 2010-02-10 16:27+0100\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <pl@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -4739,6 +4739,9 @@
 msgid "(Code %s)"
 msgstr "(Kod %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Własna emotikona w wiadomości jest za duża do wysłania."
+
 msgid "XML Parse error"
 msgstr "Błąd podczas przetwarzania XML"
 
@@ -6758,7 +6761,10 @@
 msgid "Server port"
 msgstr "Port serwera"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Odebrano nieoczekiwaną odpowiedź z %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Odebrano nieoczekiwaną odpowiedź z adresu %s"
@@ -6777,6 +6783,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Błąd podczas żądania adresu %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Serwer zażądał wypełnienia pola CAPTCHA przed zalogowaniem, ale ten klient "
+"obecnie ich nie obsługuje."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL nie umożliwia uwierzytelnienia nazwy użytkownika w tym miejscu"
 
@@ -7357,13 +7370,6 @@
 "[Nie można wyświetlić wiadomości od tego użytkownika, ponieważ zawiera ona "
 "nieprawidłowe znaki]."
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Ostatnia czynność nie została wykonana, ponieważ przekroczono ograniczenie "
-"prędkości. Proszę poczekać dziesięć sekund i spróbować ponownie.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Rozłączono z pokoju konferencji %s."
@@ -8377,10 +8383,10 @@
 msgstr "Żądanie CAPTCHA"
 
 msgid "Checking captcha"
-msgstr "Sprawdzanie CAPTCHA"
+msgstr "Sprawdzanie pola CAPTCHA"
 
 msgid "Failed captcha verification"
-msgstr "Sprawdzenie CAPTCHA nie powiodło się"
+msgstr "Sprawdzenie pola CAPTCHA nie powiodło się"
 
 msgid "Captcha Image"
 msgstr "Obraz CAPTCHA"
@@ -8389,7 +8395,7 @@
 msgstr "Proszę podać kod"
 
 msgid "QQ Captcha Verification"
-msgstr "Sprawdzanie CAPTCHA QQ"
+msgstr "Sprawdzanie pola CAPTCHA QQ"
 
 msgid "Enter the text from the image"
 msgstr "Proszę podać tekst z obrazu"
@@ -12056,6 +12062,9 @@
 msgid "Occitan"
 msgstr "oksytański"
 
+msgid "Oriya"
+msgstr "orija"
+
 msgid "Punjabi"
 msgstr "pendżabski"
 
@@ -13781,6 +13790,9 @@
 msgid "_Save File"
 msgstr "Zapi_sz plik"
 
+msgid "Do you really want to clear?"
+msgstr "Na pewno wyczyścić?"
+
 msgid "Select color"
 msgstr "Wybór koloru"
 
--- a/po/sk.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/sk.po	Thu Feb 18 21:38:43 2010 +0000
@@ -1,7 +1,7 @@
 # translation of pidgin.po to Slovak
 # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the Pidgin package.
-# loptosko <loptosko@gmail.com>, 2007, 2008, 2009.
+# loptosko <loptosko@gmail.com>, 2007, 2008, 2009, 2010.
 # Jozef Káčer <quickparser@gmail.com>, 2007.
 # Ivan Masár <helix84@centrum.sk>, 2007.
 # Pavol Klačanský <pavolzetor@gmail.com>, 2008.
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin 2.6.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:36-0500\n"
-"PO-Revision-Date: 2009-09-03 14:47+0100\n"
+"POT-Creation-Date: 2010-02-15 18:31-0800\n"
+"PO-Revision-Date: 2010-02-15 21:06+0100\n"
 "Last-Translator: loptosko <loptosko@gmail.com>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
 "MIME-Version: 1.0\n"
@@ -635,9 +635,8 @@
 msgid "Enable Sounds"
 msgstr "Zapnúť zvuky"
 
-#, fuzzy
 msgid "You are not connected."
-msgstr "Nepodarilo sa pripojiť"
+msgstr "Nie ste pripojený."
 
 msgid "<AUTO-REPLY> "
 msgstr "<AUTOMATICKÁ ODPOVEĎ> "
@@ -649,9 +648,8 @@
 msgstr[1] "Zoznam %d používateľov:\n"
 msgstr[2] "Zoznam %d používateľov:\n"
 
-#, fuzzy
 msgid "Supported debug options are: plugins version"
-msgstr "Podporované ladiace voľby sú:  version"
+msgstr "Podporované ladiace voľby sú: plugins version"
 
 msgid "No such command (in this context)."
 msgstr "Tento príkaz neexistuje (v tejto situácii)."
@@ -1529,10 +1527,10 @@
 
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr ""
+msgstr "TinyURL pre vyššie: %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr ""
+msgstr "Čakajte, prosím, kým TinyURL získa kratšiu URL ..."
 
 msgid "Only create TinyURL for URLs of this length or greater"
 msgstr "TinyURL vytvárať iba pre adresy tejto dĺžky alebo dlhšie"
@@ -1552,6 +1550,7 @@
 msgid "Online"
 msgstr "Prihlásený"
 
+#. primative,						no,							id,			name
 msgid "Offline"
 msgstr "Odhlásený"
 
@@ -1661,6 +1660,8 @@
 "The certificate is not trusted because no certificate that can verify it is "
 "currently trusted."
 msgstr ""
+"Certifikát nie je dôverihodný, pretože žiadny z certifikátov, ktoré ho môžu "
+"overiť, momentálne nie je dôverihodný.  "
 
 msgid "The certificate is not valid yet."
 msgstr "Certifikát zatiaľ nie je platný."
@@ -1892,9 +1893,9 @@
 msgid "Resolver process exited without answering our request"
 msgstr "Proces resolvera bol ukončený bez toho, aby odpovedal na požiadavku"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "Chyba pri preklade %s: %d"
+msgstr "Chyba pri preklade %s na punycode: %d"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -1941,6 +1942,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s nie je bežný súbor. Odmietam ho prepísať.\n"
 
+msgid "File is not readable."
+msgstr "Nie je možné čítať súbor."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "Používateľ %s vám chce poslať súbor %s (%s)"
@@ -2203,17 +2207,14 @@
 msgid "A non-recoverable Farsight2 error has occurred."
 msgstr "Vyskytla sa závažná chyba v Farsight2."
 
-#, fuzzy
 msgid "Conference error"
-msgstr "Chyba konferencie."
-
-#, fuzzy
+msgstr "Chyba konferencie"
+
 msgid "Error with your microphone"
-msgstr "Chyba mikrofónu."
-
-#, fuzzy
+msgstr "Chyba mikrofónu"
+
 msgid "Error with your webcam"
-msgstr "Chyba webkamery."
+msgstr "Chyba webkamery"
 
 #, c-format
 msgid "Error creating session: %s"
@@ -3149,10 +3150,12 @@
 msgid "Add to chat..."
 msgstr "Pridať na chat..."
 
+#. 0
 #. Global
 msgid "Available"
 msgstr "Prihlásený"
 
+#. 1
 #. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 #. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message
 #. Away stuff
@@ -3779,6 +3782,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "Server vyžaduje textovú autentifikáciu cez nezašifrovaný prúd"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "Chybná odpoveď zo servera"
+
+msgid "Server does not use any supported authentication method"
+msgstr "Server nepoužíva žiadny z podporovaných spôsobov autentifikácie"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3790,25 +3800,34 @@
 msgid "Plaintext Authentication"
 msgstr "Čisto textová autentifikácia"
 
-msgid "SASL authentication failed"
-msgstr "SASL autentifikácia zlyhala"
-
-msgid "Invalid response from server"
-msgstr "Chybná odpoveď zo servera"
-
-msgid "Server does not use any supported authentication method"
-msgstr "Server nepoužíva žiadny z podporovaných spôsobov autentifikácie"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "Požadovali ste šifrovanie, ale na tomto serveri nie je dostupné."
 
 msgid "Invalid challenge from server"
 msgstr "Chybná výzva zo servera"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "Server považuje autentizáciu za dokončenú, ale klient nie"
+
+msgid "SASL authentication failed"
+msgstr "SASL autentifikácia zlyhala"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "Chyba SASL: %s"
 
+msgid "Unable to canonicalize username"
+msgstr "Nebolo možné kanonikalizovať používateľské meno"
+
+msgid "Unable to canonicalize password"
+msgstr "Nebolo možné kanonikalizovať heslo"
+
+msgid "Malicious challenge from server"
+msgstr "Nebezpečná výzva zo servera"
+
+msgid "Unexpected response from server"
+msgstr "Nečakaná odpoveď zo servera"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "Manažér pripojení BOSH prerušil vaše sedenie."
 
@@ -3909,13 +3928,16 @@
 msgid "Resource"
 msgstr "Zdroj"
 
+msgid "Uptime"
+msgstr "Čas v prevádzke"
+
+msgid "Logged Off"
+msgstr "Odhlásený"
+
 #, c-format
 msgid "%s ago"
 msgstr "%s dozadu"
 
-msgid "Logged Off"
-msgstr "Odhlásený"
-
 msgid "Middle Name"
 msgstr "Prostredné meno"
 
@@ -3964,12 +3986,14 @@
 msgid "Log Out"
 msgstr "Odhlásiť"
 
+#. 2
 msgid "Chatty"
 msgstr "Zhovorčivý"
 
 msgid "Extended Away"
 msgstr "Dlhšie neprítomný"
 
+#. 3
 msgid "Do Not Disturb"
 msgstr "Nerušiť"
 
@@ -4104,12 +4128,6 @@
 msgid "Ping timed out"
 msgstr "Ping vypršal"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"Neboli nájdené iné metódy XMPP spojenia po tom čo zlyhalo priame spojenie."
-
 msgid "Invalid XMPP ID"
 msgstr "Chybné XMPP ID"
 
@@ -4234,6 +4252,7 @@
 msgid "None (To pending)"
 msgstr "Žiadny (Čaká sa)"
 
+#. 0
 msgid "None"
 msgstr "Žiadne"
 
@@ -4541,9 +4560,8 @@
 msgid "configure:  Configure a chat room."
 msgstr "configure:  Nastavenie miestnosti chatu."
 
-#, fuzzy
 msgid "part [message]:  Leave the room."
-msgstr "part [miestnosť]:  Opustí miestnosť."
+msgstr "part [správa]:  Opustí miestnosť."
 
 msgid "register:  Register with a chat room."
 msgstr "register:  Zaregistrovať sa v diskusnej miestnosti."
@@ -4663,6 +4681,9 @@
 msgid "(Code %s)"
 msgstr "(Kód %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Vlastný smajlík v správe je na odoslanie príliš veľký."
+
 msgid "XML Parse error"
 msgstr "Chyba pri spracovaní XML"
 
@@ -5071,6 +5092,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "Vaše nové MSN priateľské meno je príliš dlhé."
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "Vyplňte priateľské meno pre %s."
+
 msgid "Set your friendly name."
 msgstr "Vyplňte vaše priateľské meno."
 
@@ -5203,13 +5228,13 @@
 "Pre MSN je potrebná podpora SSL. Nainštalujte, prosím, podporovanú SSL "
 "knižnicu."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
 msgstr ""
-"Nepodarilo sa pridať priateľa %s, pretože používateľské meno je chybné.  "
-"Používateľské mená musia byť správna e-mailová adresa."
+"Nepodarilo sa pridať priateľa %s pretože používateľské meno je chybné.  "
+"Používateľské mená musia byť platná e-mailová adresa."
 
 msgid "Unable to Add"
 msgstr "Nepodarilo sa pridať"
@@ -5432,9 +5457,8 @@
 msgid "Unknown error (%d)"
 msgstr "Neznáma chyba (%d)"
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "Nebolo možné pridať používateľa"
+msgstr "Nebolo možné odstrániť používateľa"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "Mobilná správa nebola odoslaná, pretože bola príliš dlhá."
@@ -5670,28 +5694,82 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "Používateľ %s vás odstránil zo svojho zoznamu priateľov."
 
+#. 1
+msgid "Angry"
+msgstr "Nahnevaný"
+
+#. 2
+msgid "Excited"
+msgstr "Vzrušený"
+
+#. 3
+msgid "Grumpy"
+msgstr "Urazený"
+
+#. 4
+msgid "Happy"
+msgstr "Šťastný"
+
+#. 5
+msgid "In Love"
+msgstr "Zaľúbený"
+
+#. 6
+msgid "Invincible"
+msgstr "Neprekonateľný"
+
+#. 7
+msgid "Sad"
+msgstr "Smutný"
+
+#. 8
+msgid "Hot"
+msgstr "Horúčava"
+
+#. 9
+msgid "Sick"
+msgstr "Chorý"
+
+#. 10
+msgid "Sleepy"
+msgstr "Ospalý"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "Vaša aktuálna nálada"
+msgstr "Aktuálna nálada"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Nálada používateľa"
-
-#, fuzzy
+msgstr "Nová nálada"
+
 msgid "Change your Mood"
-msgstr "Zmeniť heslo"
-
-#, fuzzy
+msgstr "Zmeniť vašu náladu"
+
 msgid "How do you feel right now?"
-msgstr "Momentálne nie som prítomný"
+msgstr "Ako sa práve cítite?"
+
+msgid "The PIN you entered is invalid."
+msgstr "Zadaný PIN je neplatný"
+
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "Zadaný PIN má chybnú dĺžku [4-10]."
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr "PIN je neplatný. Mal by obsahovať iba číslice [0-9]."
+
+msgid "The two PINs you entered do not match."
+msgstr "Dva PINy ktoré ste zadali sa nezhodujú."
+
+msgid "The name you entered is invalid."
+msgstr "Zadané meno je neplatné"
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr "Narodeniny sú zadané chybne. Správny formát má byť: 'RRRR-MM-DD'."
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "Chyba zápisu"
+msgstr "Chyba aktualizácie profilu"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5699,354 +5777,300 @@
 msgstr "Profil"
 
 msgid "Your profile information is not yet retrieved. Please try again later."
-msgstr ""
+msgstr "Údaje z vášho profilu nie sú načítané. Prosím, skúste to znovu neskôr."
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "PIN"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "Overiť PIN"
 
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "Priezvisko"
+msgstr "Používateľské meno"
 
 #. hidden
 msgid "Hide my number"
-msgstr ""
+msgstr "Skryť moje číslo"
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
-msgstr "Telefónne číslo na mobilný telefón"
-
-#, fuzzy
+msgstr "Číslo na mobilný telefón"
+
 msgid "Update your Profile"
-msgstr "Profil používateľa"
+msgstr "Aktualizovať váš profil"
 
 msgid "Here you can update your MXit profile"
-msgstr ""
+msgstr "Tu môžete aktualizovať váš MXit profil"
 
 msgid "View Splash"
-msgstr ""
+msgstr "Zobraziť úvod"
 
 msgid "There is no splash-screen currently available"
-msgstr ""
-
-#, fuzzy
+msgstr "Nie je dostupná žiadna úvodná obrazovka"
+
 msgid "About"
-msgstr "O mne"
+msgstr "O module"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "Zmeniť heslo..."
+msgstr "Zmeniť náladu..."
 
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "Zmeniť heslo..."
+msgstr "Zmeniť profil..."
 
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "Zobraziť záznam..."
+msgstr "Zobraziť úvod..."
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "O mne"
+msgstr "O module..."
 
 #. the file is too big
-#, fuzzy
 msgid "The file you are trying to send is too large!"
-msgstr "Správa je príliš dlhá."
-
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
+msgstr "Súbor ktorý chcete poslať je príliš veľký!"
+
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"Nepodarilo sa pripojiť na MXit HTTP server. Skontrolujte, prosím, vaše "
+"nastavenie serveru."
+
 msgid "Logging In..."
-msgstr "Prihlasuje sa"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
-msgstr ""
-"Nepodarilo sa pripojiť na server. Zadajte, prosím, adresu servera, na ktorý "
-"sa chcete pripojiť."
-
-#, fuzzy
+msgstr "Prihlasuje sa..."
+
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr ""
+"Nepodarilo sa pripojiť na MXit server. Skontrolujte, prosím, vaše nastavenie "
+"serveru."
+
 msgid "Connecting..."
-msgstr "Pripája sa"
+msgstr "Pripája sa..."
+
+msgid "The nick name you entered is invalid."
+msgstr "Zadaná prezývka je neplatná."
+
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "Zadaný PIN má neplatnú dĺžku [7-10]."
 
 #. mxit login name
 msgid "MXit Login Name"
-msgstr ""
+msgstr "MXit prihlasovacie meno"
 
 #. nick name
-#, fuzzy
 msgid "Nick Name"
 msgstr "Prezývka"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "Registrovať nový XMPP účet"
-
-#, fuzzy
+msgstr "Registrovať nový MXit účet"
+
 msgid "Please fill in the following fields:"
-msgstr "Prosím, vyplňte nasledujúce políčka"
+msgstr "Prosím, vyplňte nasledujúce políčka:"
 
 #. no reply from the WAP site
 msgid "Error contacting the MXit WAP site. Please try again later."
-msgstr ""
+msgstr "Chyba kontaktovania MXit WAP stránky. Prosím, skúste to znovu neskôr."
 
 #. wapserver error
 #. server could not find the user
 msgid ""
 "MXit is currently unable to process the request. Please try again later."
 msgstr ""
+"MXit momentálne nedokáže spracovať požiadavku. Prosím, skúste to znovu "
+"neskôr."
 
 msgid "Wrong security code entered. Please try again later."
-msgstr ""
+msgstr "Zadaný nesprávny bezpečnostný kód. Prosím, skúste to znovu neskôr."
 
 msgid "Your session has expired. Please try again later."
-msgstr ""
+msgstr "Vaše prihlásenie vypršalo. Prosím, skúste to znovu neskôr."
 
 msgid "Invalid country selected. Please try again."
-msgstr ""
+msgstr "Vybraná chybná krajina. Prosím, skúste to znovu neskôr."
 
 msgid "Username is not registered. Please register first."
 msgstr ""
+"Používateľské meno nie je registrované. Prosím, najskôr sa zaregistrujte."
 
 msgid "Username is already registered. Please choose another username."
-msgstr ""
-
-#, fuzzy
+msgstr "Používateľské meno už je registrované. Prosím, vyberte si iné."
+
 msgid "Internal error. Please try again later."
-msgstr "Server je nedostupný; skúste to neskôr"
+msgstr "Vnútorná chyba. Prosím, skúste to znovu neskôr."
 
 msgid "You did not enter the security code"
-msgstr ""
-
-#, fuzzy
+msgstr "Nezadali ste bezpečnostný kód"
+
 msgid "Security Code"
-msgstr "Bezpečnosť zapnutá"
+msgstr "Bezpečnostný kód"
 
 #. ask for input
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "Zadajte kód"
-
-#, fuzzy
+msgstr "Zadajte bezpečnostný kód"
+
 msgid "Your Country"
-msgstr "Krajina"
-
-#, fuzzy
+msgstr "Vaša krajina"
+
 msgid "Your Language"
-msgstr "Preferovaný jazyk"
+msgstr "Váš jazyk"
 
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "Vyžadovať autorizáciu"
+msgstr "MXit autorizácia"
 
 msgid "MXit account validation"
-msgstr ""
-
-#, fuzzy
+msgstr "Overenie MXit účtu"
+
 msgid "Retrieving User Information..."
-msgstr "Podrobnosti o serveri"
-
-#, fuzzy
+msgstr "Načítavajú sa používateľské informácie..."
+
+msgid "Loading menu..."
+msgstr "Načítava sa ponuka..."
+
 msgid "Status Message"
-msgstr "Odoslané správy"
-
-#, fuzzy
+msgstr "Správa statusu"
+
 msgid "Hidden Number"
-msgstr "Prostredné meno"
-
-#, fuzzy
+msgstr "Skryté číslo"
+
 msgid "Your Mobile Number..."
-msgstr "Nastaviť číslo mobilného telefónu..."
+msgstr "Vaše mobilné číslo..."
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
 msgid "WAP Server"
-msgstr "Server"
-
-#, fuzzy
+msgstr "WAP server"
+
 msgid "Connect via HTTP"
-msgstr "Pripojiť sa pomocou TCP"
+msgstr "Pripojiť sa cez HTTP"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "Zapnúť úvodnú vyskakovaciu obrazovku"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr ""
+msgstr "Stratili sme pripojenie na MXit. Prosím, pripojte sa znovu."
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "Chyba správy XMPP"
-
-#, fuzzy
+msgstr "Chyba odoslania správy"
+
 msgid "Unable to process your request at this time"
-msgstr "Nepodarilo sa preložiť meno hostiteľa"
+msgstr "Nepodarilo sa teraz spracovať vašu požiadavku"
 
 msgid "Timeout while waiting for a response from the MXit server."
-msgstr ""
-
-#, fuzzy
+msgstr "Vypršal čas pri čakaní na odpoveď z MXit serveru."
+
 msgid "Successfully Logged In..."
-msgstr "Podarilo sa pripojiť do Qun"
-
-#, fuzzy
+msgstr "Úspešne prihlásený..."
+
+#, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr "%s vám poslal zašifrovanú správu ale tento klient to nepodporuje."
+
 msgid "Message Error"
-msgstr "Chyba správy XMPP"
+msgstr "Chyba správy"
 
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "Nebolo možné vykonať presmerovanie pomocou zadaného protokolu"
+
+msgid "An internal MXit server error occurred."
+msgstr "Vyskytla sa vnútorná chyba MXit serveru."
+
+#, c-format
+msgid "Login error: %s (%i)"
+msgstr "Chyba prihlásenia: %s (%i)"
+
+#, c-format
+msgid "Logout error: %s (%i)"
+msgstr "Chyba odhlásenia: %s (%i)"
+
 msgid "Contact Error"
-msgstr "Chyba pripojenia"
-
-#, fuzzy
+msgstr "Chyba kontaktu"
+
 msgid "Message Sending Error"
-msgstr "Chyba správy XMPP"
-
-#, fuzzy
+msgstr "Chyba odoslania správy"
+
 msgid "Status Error"
-msgstr "Chyba prúdu"
-
-#, fuzzy
+msgstr "Chyba stavu"
+
 msgid "Mood Error"
-msgstr "Chyba ikony"
-
-#, fuzzy
+msgstr "Chyba nálady"
+
 msgid "Invitation Error"
-msgstr "Chyba pri rušení registrácie"
-
-#, fuzzy
+msgstr "Chyba pozvánky"
+
 msgid "Contact Removal Error"
-msgstr "Chyba pripojenia"
-
-#, fuzzy
+msgstr "Chyba odstránenia kontaktu"
+
 msgid "Subscription Error"
-msgstr "Prihlásenie"
-
-#, fuzzy
+msgstr "Chyba zapísania"
+
 msgid "Contact Update Error"
-msgstr "Chyba pripojenia"
-
-#, fuzzy
+msgstr "Chyba aktualizácie kontaktu"
+
 msgid "File Transfer Error"
-msgstr "Prenos súborov"
-
-#, fuzzy
+msgstr "Chyba prenosu súboru"
+
 msgid "Cannot create MultiMx room"
-msgstr "Nebolo možné vytvoriť sledovanie"
-
-#, fuzzy
+msgstr "Nebolo možné vytvoriť MultiMx miestnosť"
+
 msgid "MultiMx Invitation Error"
-msgstr "Chyba pri rušení registrácie"
-
-#, fuzzy
+msgstr "Chyba pozvánky MultiMx"
+
 msgid "Profile Error"
-msgstr "Chyba zápisu"
+msgstr "Chyba profilu"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
+msgstr "Prijatý chybný paket z MXit."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "Na MXit sa vyskytla chyba pripojenia. (štádium čítania 0x01)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
+msgstr "Na MXit sa vyskytla chyba pripojenia. (štádium čítania 0x02)"
 
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
+msgstr "Na MXit sa vyskytla chyba pripojenia. (štádium čítania 0x03)"
 
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
+msgstr "Na MXit sa vyskytla chyba pripojenia. (štádium čítania 0x04)"
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
+msgstr "Na MXit sa vyskytla chyba pripojenia. (štádium čítania 0x05)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-msgid "Angry"
-msgstr "Nahnevaný"
-
-msgid "Excited"
-msgstr "Vzrušený"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Skupina"
-
-msgid "Happy"
-msgstr "Šťastný"
-
-msgid "In Love"
-msgstr "Zaľúbený"
-
-msgid "Invincible"
-msgstr "Neprekonateľný"
-
-msgid "Sad"
-msgstr "Smutný"
-
-#, fuzzy
-msgid "Hot"
-msgstr "_Hostiteľ:"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Prezývka"
-
-msgid "Sleepy"
-msgstr "Ospalý"
-
-#, fuzzy
+msgstr "Na MXit sa vyskytla chyba pripojenia. (štádium čítania 0x06)"
+
 msgid "Pending"
-msgstr "Odosiela sa"
-
-#, fuzzy
+msgstr "Čaká sa"
+
 msgid "Invited"
-msgstr "Pozvať"
-
-#, fuzzy
+msgstr "Pozvaný"
+
 msgid "Rejected"
-msgstr "Odmietnuť"
-
-#, fuzzy
+msgstr "Odmietnutý"
+
 msgid "Deleted"
-msgstr "Odstrániť"
+msgstr "Odstránený"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit reklama"
+
 msgid "More Information"
-msgstr "Pracovné informácie"
+msgstr "Viac informácií"
 
 #, c-format
 msgid "No such user: %s"
@@ -6660,7 +6684,10 @@
 msgid "Server port"
 msgstr "Port servera"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Bola prijatá neočakávaná odpoveď od %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Bola prijatá neočakávaná odpoveď od %s"
@@ -6678,6 +6705,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Chyba pri požadovaní %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Server pre prihlásenie vyžaduje, aby ste vypísali CAPTCHAg, ale tento klient "
+"nepodporuje CAPTCHA."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL neumožňuje vášmu používateľskému menu sa tu autentifikovať"
 
@@ -6826,46 +6860,42 @@
 msgstr "Nie, pokým ste na AOL"
 
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
+msgstr "Nie je možné prijať správu kvôli rodičovským obmedzeniam"
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "Nie je možné poslať SMS bez odsúhlasenia podmienok"
+
 msgid "Cannot send SMS"
-msgstr "Nepodarilo sa odoslať súbor"
+msgstr "Nepodarilo sa poslať SMS"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "Nie je možné odoslať priečinok."
+msgstr "Nie je možné poslať SMS do tejto krajiny."
 
 #. Undocumented
 msgid "Cannot send SMS to unknown country"
-msgstr ""
+msgstr "Nedá sa odoslať SMS do neznámej krajiny"
 
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
+msgstr "Účty robotov nemôžu zakladať rozhovory"
 
 msgid "Bot account cannot IM this user"
-msgstr ""
+msgstr "Účet robota nemôže komunikovať s týmto používateľom"
 
 msgid "Bot account reached IM limit"
-msgstr ""
+msgstr "Účet robota dosiahol limit komunikácie"
 
 msgid "Bot account reached daily IM limit"
-msgstr ""
+msgstr "Účet robota dosiahol denný limit komunikácie"
 
 msgid "Bot account reached monthly IM limit"
-msgstr ""
-
-#, fuzzy
+msgstr "Účet robota dosiahol mesačný limit komunikácie"
+
 msgid "Unable to receive offline messages"
-msgstr "Nepodarilo sa odoslať správu."
-
-#, fuzzy
+msgstr "Nepodarilo sa prijať offline správy."
+
 msgid "Offline message store full"
-msgstr "Offline správa"
+msgstr "Úložisko offline správ je plné"
 
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
@@ -7034,14 +7064,14 @@
 msgstr "Služba AOL je dočasne nedostupná."
 
 #. username connecting too frequently
-#, fuzzy
 msgid ""
 "Your username has been connecting and disconnecting too frequently. Wait ten "
 "minutes and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Pripájali a odpájali ste sa príliš často. Počkajte desať minút a skúste "
-"znova. Ak budete i naďalej skúšať, budete musieť čakať este dlhšie."
+"Vaše prihlasovacie meno sa pripájalo a odpájalo príliš často. Počkajte desať "
+"minút a skúste to znovu. Ak budete pokračovať, budete musieť čakať este "
+"dlhšie."
 
 #. client too old
 #, c-format
@@ -7051,14 +7081,13 @@
 "na %s"
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "Your IP address has been connecting and disconnecting too frequently. Wait a "
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Pripájali a odpájali ste sa príliš často. Počkajte minútu a skúste to znova. "
-"Ak budete pokračovať, budete musieť čakať este dlhšie."
+"Vaša IP adresa sa pripájala a odpájala príliš často. Počkajte minútu a "
+"skúste to znovu. Ak budete pokračovať, budete musieť čakať este dlhšie."
 
 msgid "The SecurID key entered is invalid"
 msgstr "Zadaný kľúč SecurID je neplatný"
@@ -7206,21 +7235,21 @@
 msgstr[1] "Z neznámeho dôvodu ste prišli o %hu správu od používateľa %s."
 msgstr[2] "Z neznámeho dôvodu ste prišli o %hu správy od používateľa %s."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "Nepodarilo sa odoslať správu (%s)."
+msgstr "Nepodarilo sa odoslať správu: %s (%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Nemôžem odoslať správu: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "Nemôžem poslať správu k %s:"
-
-#, fuzzy, c-format
+msgstr "Nemôžem poslať správu k %s: %s (%s)"
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "Nemôžem poslať správu k %s:"
+msgstr "Nemôžem poslať správu k %s: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7249,14 +7278,6 @@
 "[Správa od používateľa obsahovala nesprávne znaky, preto ju nebolo možné "
 "zobraziť.]"
 
-#, fuzzy
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Akciu nebolo možné vykonať, pretože ste prekročili limit hodnotenia. Prosím, "
-"počkajte 10 sekúnd a skúste to znovu."
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Boli ste odpojení z miestnosti %s."
@@ -10100,13 +10121,13 @@
 msgstr "Otvoriť schránku Doručené"
 
 msgid "Can't send SMS. Unable to obtain mobile carrier."
-msgstr ""
+msgstr "Nedá sa poslať SMS. Nebolo možné získať mobilného operátora."
 
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
+msgstr "Nedá sa poslať SMS. Neznámy mobilný operátor."
 
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "Zisťuje sa operátor na poslanie SMS."
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
@@ -10654,6 +10675,7 @@
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
+"Chat cez IM.  Podporuje AIM, Google Talk, Jabber/XMPP, MSN, Yahoo a ďalšie"
 
 msgid "Internet Messenger"
 msgstr "Internetový komunikátor"
@@ -11913,15 +11935,18 @@
 msgid "Lao"
 msgstr "laoština"
 
-msgid "Lithuanian"
-msgstr "litovčina"
-
 msgid "Macedonian"
 msgstr "macedónčina"
 
 msgid "Mongolian"
 msgstr "mongolčina"
 
+msgid "Marathi"
+msgstr "maráthčina"
+
+msgid "Malay"
+msgstr "malajčina"
+
 msgid "Bokmål Norwegian"
 msgstr "nórsky bokmål"
 
@@ -11937,6 +11962,9 @@
 msgid "Occitan"
 msgstr "okcitánčina"
 
+msgid "Oriya"
+msgstr "uríjčina"
+
 msgid "Punjabi"
 msgstr "pandžábčina"
 
@@ -11991,6 +12019,9 @@
 msgid "Turkish"
 msgstr "turečtina"
 
+msgid "Ukranian"
+msgstr "ukrajinčina"
+
 msgid "Urdu"
 msgstr "urdčina"
 
@@ -12012,6 +12043,9 @@
 msgid "Amharic"
 msgstr "amharčina"
 
+msgid "Lithuanian"
+msgstr "litovčina"
+
 #, c-format
 msgid "About %s"
 msgstr "O programe %s"
@@ -12619,7 +12653,7 @@
 msgstr "Použitie: %s [VOĽBA]...\n"
 
 msgid "DIR"
-msgstr ""
+msgstr "ADR"
 
 msgid "use DIR for config files"
 msgstr "pre konfiguračné súbory použije ADR"
@@ -12640,16 +12674,16 @@
 msgstr "neprihlasovať automaticky"
 
 msgid "NAME"
-msgstr ""
-
-#, fuzzy
+msgstr "MENO"
+
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
 "                      specifies account(s) to use, separated by commas.\n"
 "                      Without this only the first account will be enabled)."
 msgstr ""
 "povoliť vybrané účty (voliteľný argument MENO\n"
-"                      určuje účty, oddeľované čiarkami"
+"                      určuje účty, oddeľované čiarkami\n"
+"                      Bez toho bude povolený iba prvý účet)."
 
 msgid "X display to use"
 msgstr "X obrazovka, ktorú použiť"
@@ -12912,21 +12946,19 @@
 msgstr "Neznáme... Oznámte to, prosím!"
 
 msgid "(Custom)"
-msgstr ""
-
-#, fuzzy
-msgid "(Default)"
-msgstr "(predvolené)"
+msgstr "(Vlastné)"
+
+msgid "Penguin Pimps"
+msgstr "Autori Pidginu"
 
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Štandardná zvuková téma programu Pidgin"
+
 msgid "The default Pidgin buddy list theme"
-msgstr "Editor témy zoznamu priateľov programu Pidgin"
+msgstr "Štandardná téma zoznamu priateľov programu Pidgin"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "Štandardná téma stavových ikon programu Pidgin"
 
 msgid "Theme failed to unpack."
 msgstr "Nepodarilo sa rozbaliť tému."
@@ -12937,19 +12969,30 @@
 msgid "Theme failed to copy."
 msgstr "Nepodarilo sa skopírovať tému."
 
-msgid "Install Theme"
-msgstr "Inštalovať tému"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
-"Z nasledujúceho zoznamu vyberte tému smajlíkov, ktorú chcete používať. Nové "
-"témy je možné nainštalovať pridaním témy do tohto zoznamu metódou „ťahaj a "
-"pusť“."
-
-msgid "Icon"
-msgstr "Ikona"
+msgid "Theme Selections"
+msgstr "Výber témy"
+
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"Z nasledujúceho zoznamu vyberte tému smajlíkov, ktorú chcete používať.\n"
+"Nové témy je možné nainštalovať pridaním témy do tohto zoznamu metódou "
+"„ťahaj a pusť“."
+
+msgid "Buddy List Theme:"
+msgstr "Téma zoznamu priateľov:"
+
+msgid "Status Icon Theme:"
+msgstr "Ikony statusu:"
+
+msgid "Sound Theme:"
+msgstr "Zvuková téma:"
+
+msgid "Smiley Theme:"
+msgstr "Téma smajlíkov:"
 
 msgid "Keyboard Shortcuts"
 msgstr "Klávesové skratky"
@@ -12957,10 +13000,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "Z_avrieť rozhovory klávesom Esc"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "Téma zoznamu priateľov"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "Ikona v oznamovacej oblasti"
@@ -13047,9 +13086,6 @@
 msgid "Font"
 msgstr "Písmo"
 
-msgid "Use document font from _theme"
-msgstr "Použiť písmo dokumentov _témy"
-
 msgid "Use font from _theme"
 msgstr "Použiť písmo _témy"
 
@@ -13072,15 +13108,13 @@
 msgid "Cannot start browser configuration program."
 msgstr "Nebolo možné spustiť program na nastavenie prehliadača."
 
-#, fuzzy
 msgid "Disabled"
-msgstr "_Vypnúť"
+msgstr "Vypnuté"
 
 #, c-format
 msgid "Use _automatically detected IP address: %s"
 msgstr "Použiť _automaticky zistenú IP adresu: %s"
 
-#, fuzzy
 msgid "ST_UN server:"
 msgstr "ST_UN server:"
 
@@ -13096,78 +13130,27 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "Povoliť _automatické presmerovanie portu routeru"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "_Ručne určiť rozsah portov, na ktorých počúvať"
-
-#, fuzzy
+msgstr "_Manuálne zadať rozsah portov, na ktorých načúvať:"
+
 msgid "_Start:"
-msgstr "_Status:"
-
-#, fuzzy
+msgstr "Š_tart:"
+
 msgid "_End:"
-msgstr "_Rozbaliť"
+msgstr "_Koniec:"
 
 #. TURN server
 msgid "Relay Server (TURN)"
 msgstr "Relay Server (TURN)"
 
-#, fuzzy
 msgid "_TURN server:"
-msgstr "ST_UN server:"
-
-#, fuzzy
+msgstr "_TURN server:"
+
 msgid "Use_rname:"
-msgstr "Používateľské meno:"
-
-#, fuzzy
+msgstr "_Používateľské meno:"
+
 msgid "Pass_word:"
-msgstr "Heslo:"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "Proxy server a prehliadač"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>Program na nastavenie proxy nebol nájdený.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>Program na nastavenie prehliadača nebol nájdený.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"Predvoľby proxy a prehliadača sa dajú nastaviť\n"
-"v predvoľbách prostredia GNOME"
-
-msgid "Configure _Proxy"
-msgstr "Nastaviť _Proxy"
-
-msgid "Configure _Browser"
-msgstr "Nastaviť _Prehliadač"
-
-msgid "Proxy Server"
-msgstr "Proxy server"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Použiť vzdialené DNS s proxy SOCKS 4"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "_Typ proxy:"
-
-msgid "No proxy"
-msgstr "Bez proxy"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "_Port:"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Používateľské meno:"
+msgstr "_Heslo:"
 
 msgid "Seamonkey"
 msgstr "Seamonkey"
@@ -13208,6 +13191,15 @@
 msgid "Browser Selection"
 msgstr "Výber prehliadača"
 
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr "Predvoľby prehliadača sa nastavujú v predvoľbách prostredia GNOME"
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>Program na nastavenie prehliadača nebol nájdený.</b>"
+
+msgid "Configure _Browser"
+msgstr "Nastaviť _Prehliadač"
+
 msgid "_Browser:"
 msgstr "_Prehliadač:"
 
@@ -13231,6 +13223,35 @@
 "_Ručne:\n"
 "(%s for URL)"
 
+msgid "Proxy Server"
+msgstr "Proxy server"
+
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr "Predvoľby proxy sa nastavujú v predvoľbách prostredia GNOME"
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>Program na nastavenie proxy nebol nájdený.</b>"
+
+msgid "Configure _Proxy"
+msgstr "Nastaviť _Proxy"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Použiť vzdialené _DNS s proxy SOCKS 4"
+
+msgid "Proxy t_ype:"
+msgstr "T_yp proxy:"
+
+msgid "No proxy"
+msgstr "Bez proxy"
+
+msgid "P_ort:"
+msgstr "P_ort:"
+
+msgid "User_name:"
+msgstr "Používateľské me_no:"
+
 msgid "Log _format:"
 msgstr "_Formát záznamu:"
 
@@ -13314,25 +13335,18 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Podľa využitia klávesnice alebo myši"
 
+msgid "_Minutes before becoming idle:"
+msgstr "_Počet minút pred nečinnosťou:"
+
+msgid "Change to this status when _idle:"
+msgstr "Prepnúť na tento status pri _nečinnosti:"
+
 msgid "_Auto-reply:"
 msgstr "_Automatická odpoveď:"
 
 msgid "When both away and idle"
 msgstr "Pri neprítomnosti a nečinnosti"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Automatická neprítomnosť"
-
-msgid "_Minutes before becoming idle:"
-msgstr "_Počet minút pred nečinnosťou:"
-
-msgid "Change status when _idle"
-msgstr "Zmeniť status pri _nečinnosti"
-
-msgid "Change _status to:"
-msgstr "Zmeniť _status na:"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "Status pri spustení"
@@ -13346,15 +13360,15 @@
 msgid "Interface"
 msgstr "Rozhranie"
 
-msgid "Smiley Themes"
-msgstr "Témy smajlíkov"
-
 msgid "Browser"
 msgstr "Prehliadač"
 
 msgid "Status / Idle"
 msgstr "Status / nečinný"
 
+msgid "Themes"
+msgstr "Témy"
+
 msgid "Allow all users to contact me"
 msgstr "Povoliť všetkým používateľom kontaktovať ma"
 
@@ -13660,6 +13674,9 @@
 msgid "_Save File"
 msgstr "_Uložiť súbor"
 
+msgid "Do you really want to clear?"
+msgstr "Naozaj chcete vyprázdniť?"
+
 msgid "Select color"
 msgstr "Vyberte farbu"
 
@@ -13698,9 +13715,6 @@
 msgid "Pidgin smileys"
 msgstr "Smajlíci programu Pidgin"
 
-msgid "Penguin Pimps"
-msgstr "Autori Pidginu"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Vyberte túto možnosť, ak nechcete grafických smajlíkov."
 
@@ -14335,6 +14349,9 @@
 msgid "Conversation Entry"
 msgstr "Položka rozhovoru"
 
+msgid "Conversation History"
+msgstr "História rozhovoru"
+
 msgid "Request Dialog"
 msgstr "Dialóg požiadavku"
 
@@ -14799,9 +14816,8 @@
 msgid "_Start %s on Windows startup"
 msgstr "_Spustiť %s pri štarte Windows"
 
-#, fuzzy
 msgid "Allow multiple instances"
-msgstr "Umožniť viacero súbežných prihlásení"
+msgstr "Umožniť viacero spustení"
 
 msgid "_Dockable Buddy List"
 msgstr "_Ukotviteľný zoznam priateľov"
@@ -14863,6 +14879,42 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Tento modul je vhodný pre ladenie XMPP serverov alebo klientov."
 
+#~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr ""
+#~ "Neboli nájdené iné metódy XMPP spojenia po tom čo zlyhalo priame spojenie."
+
+#, fuzzy
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Akciu nebolo možné vykonať, pretože ste prekročili limit hodnotenia. "
+#~ "Prosím, počkajte 10 sekúnd a skúste to znovu."
+
+#, fuzzy
+#~ msgid "(Default)"
+#~ msgstr "(predvolené)"
+
+#~ msgid "Install Theme"
+#~ msgstr "Inštalovať tému"
+
+#~ msgid "Icon"
+#~ msgstr "Ikona"
+
+#~ msgid "Use document font from _theme"
+#~ msgstr "Použiť písmo dokumentov _témy"
+
+#~ msgid "Proxy Server &amp; Browser"
+#~ msgstr "Proxy server a prehliadač"
+
+#~ msgid "Auto-away"
+#~ msgstr "Automatická neprítomnosť"
+
+#~ msgid "Change _status to:"
+#~ msgstr "Zmeniť _status na:"
+
 #, fuzzy
 #~ msgid "The root certificate this one claims to be issued by is unknown."
 #~ msgstr ""
@@ -16068,9 +16120,6 @@
 #~ "súbore 'COPYRIGHT'. Na tento program vám neposkytujeme žiadnu záruku."
 #~ "<BR><BR>"
 
-#~ msgid "Conversation History"
-#~ msgstr "História rozhovoru"
-
 #~ msgid "Log Viewer"
 #~ msgstr "Zobrazovač záznamov"
 
--- a/po/sl.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/sl.po	Thu Feb 18 21:38:43 2010 +0000
@@ -8,8 +8,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin 2.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-29 20:30-0500\n"
-"PO-Revision-Date: 2009-11-24 01:00+0100\n"
+"POT-Creation-Date: 2010-02-11 21:49-0800\n"
+"PO-Revision-Date: 2010-02-11 16:48+0100\n"
 "Last-Translator: Martin Srebotnjak  <miles@filmsi.net>\n"
 "Language-Team: Martin Srebotnjak <miles@filmsi.net>\n"
 "MIME-Version: 1.0\n"
@@ -1954,6 +1954,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s ni veljavna datoteka. Plašni program je ne želi prepisati.\n"
 
+msgid "File is not readable."
+msgstr "Datoteka ni berljiva."
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s vam želi poslati %s (%s)"
@@ -3830,6 +3833,13 @@
 msgstr ""
 "Strežnik zahteva overovitev z navadnim besedilom preko nešifriranega toka"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "Neveljaven odgovor strežnika"
+
+msgid "Server does not use any supported authentication method"
+msgstr "Strežnik ne uporablja nobene podprte metode overovitve"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3841,25 +3851,34 @@
 msgid "Plaintext Authentication"
 msgstr "Overovitev z navadnim besedilom"
 
-msgid "SASL authentication failed"
-msgstr "Overovitev SASL ni uspela"
-
-msgid "Invalid response from server"
-msgstr "Neveljaven odgovor strežnika"
-
-msgid "Server does not use any supported authentication method"
-msgstr "Strežnik ne uporablja nobene podprte metode overovitve"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "Zahtevate šifriranje, vendar to na tem strežniku ni na voljo."
 
 msgid "Invalid challenge from server"
-msgstr "Neveljaven poziv strežnika"
+msgstr "Neveljaven izziv strežnika"
+
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "Strežnik meni, da je overovitev dokončana, odjemalec pa ne"
+
+msgid "SASL authentication failed"
+msgstr "Overovitev SASL ni uspela"
 
 #, c-format
 msgid "SASL error: %s"
 msgstr "Napaka SASL: %s"
 
+msgid "Unable to canonicalize username"
+msgstr "Uporabniškega imena ni mogoče kanonizirati"
+
+msgid "Unable to canonicalize password"
+msgstr "Gesla ni mogoče kanonizirati"
+
+msgid "Malicious challenge from server"
+msgstr "Škodljiv izziv strežnika"
+
+msgid "Unexpected response from server"
+msgstr "Nepričakovan odgovor s strežnika"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "Upravitelj povezave BOSH je zaključil vašo sejo."
 
@@ -3958,13 +3977,16 @@
 msgid "Resource"
 msgstr "Vir"
 
+msgid "Uptime"
+msgstr "Čas prisotnosti"
+
+msgid "Logged Off"
+msgstr "Se je odjavil"
+
 #, c-format
 msgid "%s ago"
 msgstr "pred %s"
 
-msgid "Logged Off"
-msgstr "Se je odjavil"
-
 msgid "Middle Name"
 msgstr "Drugo ime"
 
@@ -4155,13 +4177,6 @@
 msgid "Ping timed out"
 msgstr "Časovna prekoračitev pinga"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr ""
-"Po neuspehu neposredne povezave ni bilo mogoče najti drugih povezovalnih "
-"metod XMPP."
-
 msgid "Invalid XMPP ID"
 msgstr "Neveljaven ID za XMPP"
 
@@ -4710,6 +4725,9 @@
 msgid "(Code %s)"
 msgstr "(Koda %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Smeška po meri v sporočilu ni mogoče poslati, ker je prevelik."
+
 msgid "XML Parse error"
 msgstr "Napaka pri razčlenjevanu XML"
 
@@ -5122,6 +5140,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "Vaše novo MSN poimenovanje je predolgo."
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "Nastavite poimenovanje za %s."
+
 msgid "Set your friendly name."
 msgstr "Nastavite vaše poimenovanje."
 
@@ -6721,7 +6743,10 @@
 msgid "Server port"
 msgstr "Vrata strežnika"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Prejet nepričakovan odgovor s strani osebe %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Prejet nepričakovan odgovor s strani osebe %s"
@@ -6739,6 +6764,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Napaka pri zahtevanju %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Strežnik zahteva, da za vpis prepišete besedilo s slike, vendar ta odjemalec "
+"trenutno le-tega še ne podpira."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr ""
 "AOL ne dovoljuje, da bi se vaše pojavno ime overjalo prek tega spletnega "
@@ -7320,14 +7352,6 @@
 "[Ni mogoče prikazati sporočila tega uporabnika, ker vsebuje neveljavne "
 "znake.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Zadnjega dejanja, ki ste ga želeli izvesti, ni bilo mogoče izvesti, ker ste "
-"prekoračili dovoljeno pogostost. Prosim počakajte 10 sekund in poskusite "
-"znova.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Povezava do pogovorne sobe %s je bila prekinjena."
@@ -11997,18 +12021,17 @@
 msgid "Lao"
 msgstr "laoško"
 
-msgid "Lithuanian"
-msgstr "litvansko"
-
 msgid "Macedonian"
 msgstr "makedonsko"
 
 msgid "Mongolian"
 msgstr "mongolsko"
 
-#, fuzzy
+msgid "Marathi"
+msgstr "maratsko"
+
 msgid "Malay"
-msgstr "Moški"
+msgstr "malajsko"
 
 msgid "Bokmål Norwegian"
 msgstr "norveško (Bokmål)"
@@ -12025,6 +12048,9 @@
 msgid "Occitan"
 msgstr "okcitansko"
 
+msgid "Oriya"
+msgstr "orijsko"
+
 msgid "Punjabi"
 msgstr "pundžabsko"
 
@@ -12079,9 +12105,8 @@
 msgid "Turkish"
 msgstr "turško"
 
-#, fuzzy
 msgid "Ukranian"
-msgstr "armensko"
+msgstr "ukrajinsko"
 
 msgid "Urdu"
 msgstr "urdujsko"
@@ -12104,6 +12129,9 @@
 msgid "Amharic"
 msgstr "amharsko"
 
+msgid "Lithuanian"
+msgstr "litvansko"
+
 #, c-format
 msgid "About %s"
 msgstr "O programu %s"
@@ -13743,6 +13771,9 @@
 msgid "_Save File"
 msgstr "_Shrani datoteko"
 
+msgid "Do you really want to clear?"
+msgstr "Ste prepričani, da želite počistiti?"
+
 msgid "Select color"
 msgstr "Izberite barvo"
 
@@ -14953,6 +14984,21 @@
 msgstr ""
 "Ta vtičnik je uporaben za razhroščevanje strežnikov ali odjemalcev XMPP."
 
+#~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr ""
+#~ "Po neuspehu neposredne povezave ni bilo mogoče najti drugih povezovalnih "
+#~ "metod XMPP."
+
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Zadnjega dejanja, ki ste ga želeli izvesti, ni bilo mogoče izvesti, ker "
+#~ "ste prekoračili dovoljeno pogostost. Prosim počakajte 10 sekund in "
+#~ "poskusite znova.\n"
+
 #~ msgid "(Default)"
 #~ msgstr "(privzeto)"
 
--- a/po/uk.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/uk.po	Thu Feb 18 21:38:43 2010 +0000
@@ -9,8 +9,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-13 17:31-0800\n"
-"PO-Revision-Date: 2010-01-10 15:35+0300\n"
+"POT-Creation-Date: 2010-02-10 20:02-0800\n"
+"PO-Revision-Date: 2010-02-10 11:52+0300\n"
 "Last-Translator: Oleksandr Kovalenko <alx.kovalenko@gmail.com>\n"
 "Language-Team: Ukrainian <uk@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -76,7 +76,7 @@
 msgstr "Запам'ятати пароль"
 
 msgid "There are no protocol plugins installed."
-msgstr "Не встановлений жоден додаток протоколів."
+msgstr "Не встановлений жодний з додатків протоколів."
 
 msgid "(You probably forgot to 'make install'.)"
 msgstr "(Можливо, ви забули зробити 'make install'.)"
@@ -855,7 +855,7 @@
 "журналу всі балачки\" увімкнена."
 
 msgid "No logs were found"
-msgstr "Не знайдений жоден журнал"
+msgstr "Не знайдений жодний журнал"
 
 msgid "Total log size:"
 msgstr "Загальний розмір журналу:"
@@ -2440,7 +2440,7 @@
 msgstr "_Встановити"
 
 msgid "None of your accounts are idle."
-msgstr "Жоден з ваших облікових записів не бездіяльний."
+msgstr "Жодний з ваших облікових записів не бездіяльний."
 
 msgid "Unset Account Idle Time"
 msgstr "Обнулити час бездіяльності облікового запису"
@@ -4707,6 +4707,9 @@
 msgid "(Code %s)"
 msgstr "(Код %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Нетипова усмішка у повідомленні завелика, щоб її надіслати."
+
 msgid "XML Parse error"
 msgstr "Помилка аналізу XML"
 
@@ -5161,7 +5164,7 @@
 msgstr "Заблокований текст для %s"
 
 msgid "No text is blocked for this account."
-msgstr "Жоден текст не заблокований для цього облікового запису."
+msgstr "Жодний текст не заблокований для цього облікового запису."
 
 #, c-format
 msgid ""
@@ -6253,7 +6256,7 @@
 
 msgid "No suitable MySpaceIM account could be found to open this myim URL."
 msgstr ""
-"Не знайдений жоден підходящий обліковий запис MySpaceIM, щоб відкрити з "
+"Не знайдений жодний підходящий обліковий запис MySpaceIM, щоб відкрити з "
 "цього посилання URL myim."
 
 msgid "Enable the proper MySpaceIM account and try again."
@@ -6726,7 +6729,10 @@
 msgid "Server port"
 msgstr "Порт сервера"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Отримана неочікувана відповідь від %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Отримана неочікувана відповідь від %s"
@@ -6744,6 +6750,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Помилка запиту %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Сервер дав запит, щоб ви заповнили CAPTCHA для входу, але цей клієнт зараз "
+"не підтримує CAPTCHA."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL не дозволяє автентифікуватись тут з відображуваним ім'ям"
 
@@ -7330,13 +7343,6 @@
 "[Не вдається відобразити повідомлення від цього користувача, тому що воно "
 "містить недопустимі символи.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Остання дія, яку ви намагалися зробити, не могла бути виконана, тому що ви "
-"перевищили поріг. Будь ласка, зачекайте 10 секунд та спробуйте знову.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Вас було від'єднано від кімнати балачки %s."
@@ -9250,7 +9256,6 @@
 msgid "Public Key Fingerprint"
 msgstr "Відбитки загальнодоступного ключа"
 
-# TODO: закінчити переклад
 msgid "Public Key Babbleprint"
 msgstr "Babbleprint загальнодоступного ключа"
 
@@ -9279,7 +9284,7 @@
 msgstr "Мережа порожня"
 
 msgid "No public key was received"
-msgstr "Не був отриманий жоден загальноступний ключ"
+msgstr "Не був отриманий жодний загальноступний ключ"
 
 msgid "Server Information"
 msgstr "Відомості про сервер"
@@ -12011,6 +12016,9 @@
 msgid "Mongolian"
 msgstr "Монгольська"
 
+msgid "Marathi"
+msgstr "Мараті"
+
 msgid "Malay"
 msgstr "Малайська"
 
@@ -12029,6 +12037,9 @@
 msgid "Occitan"
 msgstr "Оксітанська"
 
+msgid "Oriya"
+msgstr "Орія"
+
 msgid "Punjabi"
 msgstr "Пенджабі"
 
@@ -13740,6 +13751,9 @@
 msgid "_Save File"
 msgstr "_Зберегти файл"
 
+msgid "Do you really want to clear?"
+msgstr "Ви дійсно хочете очистити?"
+
 msgid "Select color"
 msgstr "Вибрати колір"
 
@@ -14945,6 +14959,13 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "Додаток корисний для зневадження серверів або клієнтів XMPP."
 
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Остання дія, яку ви намагалися зробити, не могла бути виконана, тому що "
+#~ "ви перевищили поріг. Будь ласка, зачекайте 10 секунд та спробуйте знову.\n"
+
 #~ msgid "%s"
 #~ msgstr "%s"
 
--- a/po/zh_HK.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/zh_HK.po	Thu Feb 18 21:38:43 2010 +0000
@@ -1,14 +1,14 @@
-# NOTE: This file is generated from zh_TW.po by mkzhhk.pl,v 1.22 2009/11/27 10:02:35 acli Exp
+# NOTE: This file is generated from zh_TW.po by mkzhhk.pl,v 1.24 2010/02/15 23:14:17 acli Exp
 # ---
 # Pidgin's Traditional Chinese translation
-# Copyright (C) 2002-2009, Paladin R. Liu <paladin@ms1.hinet.net>
-# Copyright (C) 2003-2009, Ambrose C. Li <ambrose.li@gmail.com>
+# Copyright (C) 2002-2010, Paladin R. Liu <paladin@ms1.hinet.net>
+# Copyright (C) 2003-2010, Ambrose C. Li <ambrose.li@gmail.com>
 #
 # PLEASE DO NOT ATTEMPT TO UPDATE THIS FILE IF THERE ARE NO
 # LINE NUMBERS (LINES BEGINNING WITH #:) IN THIS FILE.
 #
 # This file is distributed under the same license as the "Pidgin" package.
-# $InternalId: zh_TW.po,v 1.615 2009/11/29 00:48:50 acli Exp $
+# $InternalId: zh_TW.po,v 1.619 2010/02/15 23:14:17 acli Exp $
 #
 # ----------------------------------------------------------
 # For internal use only:
@@ -60,10 +60,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Pidgin 2.6.4\n"
+"Project-Id-Version: Pidgin 2.6.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-29 20:30-0500\n"
-"PO-Revision-Date: 2009-09-03 06:04-0400\n"
+"POT-Creation-Date: 2010-02-15 18:32-0800\n"
+"PO-Revision-Date: 2010-02-14 03:06-0400\n"
 "Last-Translator: Ambrose Li <ambrose.li@gmail.com>\n"
 "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
 "MIME-Version: 1.0\n"
@@ -1652,11 +1652,13 @@
 msgid "No Grouping"
 msgstr "不分組"
 
+# XXX 暫譯 20100215/acli
 msgid "Nested Subgroup"
-msgstr ""
-
+msgstr "巢狀子羣組"
+
+# XXX 暫譯 20100215/acli
 msgid "Nested Grouping (experimental)"
-msgstr ""
+msgstr "巢狀分組(實驗性功能)"
 
 #  *< name
 #  *< version
@@ -2037,6 +2039,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s 不是一般檔案,因此不會覆蓋它。\n"
 
+msgid "File is not readable."
+msgstr "無法讀取檔案。"
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s 想要送 %s (%s) 給你"
@@ -3902,6 +3907,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "伺服器需要經由未經加密的串流進行明文認證"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "伺服器送來了無效的回應"
+
+msgid "Server does not use any supported authentication method"
+msgstr "伺服器並不提供任何一種被支援的認證方式"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3911,15 +3923,6 @@
 msgid "Plaintext Authentication"
 msgstr "明文認證"
 
-msgid "SASL authentication failed"
-msgstr "SASL 認證失敗"
-
-msgid "Invalid response from server"
-msgstr "伺服器送來了無效的回應"
-
-msgid "Server does not use any supported authentication method"
-msgstr "伺服器並不提供任何一種被支援的認證方式"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "你要求加密,但這伺服器沒有加密功能。"
 
@@ -3927,10 +3930,28 @@
 msgid "Invalid challenge from server"
 msgstr "伺服器送來了無效的驗證挑戰"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "伺服器認為驗證程序已經完畢,但用戶端不認同"
+
+msgid "SASL authentication failed"
+msgstr "SASL 認證失敗"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "SASL 錯誤:%s"
 
+msgid "Unable to canonicalize username"
+msgstr "無法把帳號轉成正則形態"
+
+msgid "Unable to canonicalize password"
+msgstr "無法把密碼轉成正則形態"
+
+msgid "Malicious challenge from server"
+msgstr "伺服器送來了惡意的驗證挑戰"
+
+msgid "Unexpected response from server"
+msgstr "伺服器發出了奇怪的回應"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "BOSH 連線管理員中斷了你的工作階段。"
 
@@ -4037,13 +4058,17 @@
 msgid "Resource"
 msgstr ""
 
+# NOTE 好像有點怪,但這是標準譯文 20100214
+msgid "Uptime"
+msgstr "工作時間"
+
+msgid "Logged Off"
+msgstr "已登出"
+
 #, c-format
 msgid "%s ago"
 msgstr "%s前"
 
-msgid "Logged Off"
-msgstr "已登出"
-
 # NOTE: 法、德文均譯「第二個名」,芬蘭文譯「其他名」,日文音譯了事
 # NOTE: 在網上幾間台灣大學寫「英文別名」,現套用,也跟芬蘭文PO檔處理手法相同
 msgid "Middle Name"
@@ -4246,11 +4271,6 @@
 msgid "Ping timed out"
 msgstr "Ping逾時"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr "無法直接連線,但無法找到其他的 XMPP 連線方法。"
-
 msgid "Invalid XMPP ID"
 msgstr "XMPP 帳號無效"
 
@@ -4881,6 +4901,9 @@
 msgid "(Code %s)"
 msgstr "(代碼 %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "訊息中含有一個因檔案大小超過上限而無法送出的自選表情。"
+
 msgid "XML Parse error"
 msgstr "XML 分析錯誤"
 
@@ -5305,6 +5328,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "你的新 MSN 網名太長。"
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "設定 %s 的網名。"
+
 msgid "Set your friendly name."
 msgstr "設定你的網名。"
 
@@ -6914,7 +6941,11 @@
 msgstr "伺服器通訊埠"
 
 # NOTE 參見 http://pidgin.im/pipermail/translators/2009-July/000394.html
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "%s 發出了奇怪的回應:%s"
+
+# NOTE 參見 http://pidgin.im/pipermail/translators/2009-July/000394.html
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "%s 發出了奇怪的回應"
@@ -6933,6 +6964,11 @@
 msgid "Error requesting %s: %s"
 msgstr "要求讀取 %s 途中發生了錯誤:%s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr "伺服器表示登入前必須完成圖片驗證,但這用戶端尚未支援圖片驗證。"
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL 不允許你的帳號在這裏登入"
 
@@ -7503,13 +7539,6 @@
 "characters.]"
 msgstr "(無法顯示來自這個使用者的訊息,因為它包含了無效字符。)"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"你最近做的一個動作無法完成,因為你已經達到這個動作的速率的上限。請等待十秒後"
-"再試一次。\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "你已經由聊天室 %s 停止連線。"
@@ -11147,7 +11176,7 @@
 msgstr "展開的羣組的名稱"
 
 msgid "The text information for when a group is expanded"
-msgstr "羣組展開時羣組名稱的字體及文字顏色"
+msgstr "羣組展開時羣組名稱的字體及字體顏色"
 
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list group when in its collapsed state
@@ -11163,7 +11192,7 @@
 msgstr "收起的羣組的名稱"
 
 msgid "The text information for when a group is collapsed"
-msgstr "羣組收起時羣組名稱的字體及文字顏色"
+msgstr "羣組收起時羣組名稱的字體及字體顏色"
 
 #. Buddy
 #. Note to translators: These two strings refer to the background color
@@ -11184,7 +11213,7 @@
 # NOTE 但當contact展開時,我們見到的是一個contact的名稱和包含在contact內的所有buddy
 # NOTE 照推理,所謂「text information for when a contact is expanded」應該是指contact的名稱
 msgid "The text information for when a contact is expanded"
-msgstr "好友展開時整組好友的名稱的字體及文字顏色"
+msgstr "好友展開時整組好友的名稱的字體及字體顏色"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is online
@@ -11192,7 +11221,7 @@
 msgstr "上線好友的名稱"
 
 msgid "The text information for when a buddy is online"
-msgstr "好友上線時好友名稱的字體及文字顏色"
+msgstr "好友上線時好友名稱的字體及字體顏色"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is away
@@ -11200,7 +11229,7 @@
 msgstr "離開好友的名稱"
 
 msgid "The text information for when a buddy is away"
-msgstr "好友離開時好友名稱的字體及文字顏色"
+msgstr "好友離開時好友名稱的字體及字體顏色"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is offline
@@ -11208,7 +11237,7 @@
 msgstr "離線好友的名稱"
 
 msgid "The text information for when a buddy is offline"
-msgstr "好友離線時好友名稱的字體及文字顏色"
+msgstr "好友離線時好友名稱的字體及字體顏色"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is idle
@@ -11216,7 +11245,7 @@
 msgstr "閒置好友的名稱"
 
 msgid "The text information for when a buddy is idle"
-msgstr "好友閒置時好友名稱的字體及文字顏色"
+msgstr "好友閒置時好友名稱的字體及字體顏色"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
@@ -11224,7 +11253,7 @@
 msgstr "有未讀訊息的好友名稱"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr "好友有未讀訊息時好友名稱的字體及文字顏色"
+msgstr "好友有未讀訊息時好友名稱的字體及字體顏色"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
@@ -11234,10 +11263,10 @@
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nickname"
-msgstr "聊天室中有人提到你的網名而你未讀該訊息時聊天室名稱的字體及文字顏色"
+msgstr "聊天室中有人提到你的網名而你未讀該訊息時聊天室名稱的字體及字體顏色"
 
 msgid "The text information for a buddy's status"
-msgstr "好友狀態的字體及文字顏色"
+msgstr "好友狀態的字體及字體顏色"
 
 #, c-format
 msgid "You have %d contact named %s. Would you like to merge them?"
@@ -12293,9 +12322,6 @@
 msgid "Lao"
 msgstr "寮國文"
 
-msgid "Lithuanian"
-msgstr "立陶宛文"
-
 #  NOTE「馬其頓文」是一種東歐語文,跟希臘的馬其頓並無關係
 msgid "Macedonian"
 msgstr "馬其頓文"
@@ -12303,6 +12329,10 @@
 msgid "Mongolian"
 msgstr "蒙古文"
 
+#  NOTE 參見 http://www.cnscode.org.tw/cnscode/lang.jsp?keyword=marathi&qrytype=en&x=15&y=4
+msgid "Marathi"
+msgstr "馬拉提文"
+
 msgid "Malay"
 msgstr "馬來文"
 
@@ -12328,6 +12358,10 @@
 msgid "Occitan"
 msgstr "奧克文"
 
+# NOTE 參見 http://www.cnscode.org.tw/cnscode/lang.jsp?keyword=oriya&qrytype=en&x=33&y=10
+msgid "Oriya"
+msgstr "奧里亞文"
+
 msgid "Punjabi"
 msgstr "旁遮普文"
 
@@ -12419,6 +12453,9 @@
 msgid "Amharic"
 msgstr "阿姆哈拉文"
 
+msgid "Lithuanian"
+msgstr "立陶宛文"
+
 #, c-format
 msgid "About %s"
 msgstr "關於 %s"
@@ -12848,7 +12885,7 @@
 msgstr "選擇字型"
 
 msgid "Select Text Color"
-msgstr "設定文字顏色"
+msgstr "設定字體顏色"
 
 msgid "Select Background Color"
 msgstr "設定背景顏色"
@@ -14067,6 +14104,9 @@
 msgid "_Save File"
 msgstr "儲存檔案(_S)"
 
+msgid "Do you really want to clear?"
+msgstr "你確定要清除?"
+
 msgid "Select color"
 msgstr "選擇顏色"
 
@@ -15319,6 +15359,18 @@
 msgstr "幫助為 XMPP 伺服器或客戶端進行除錯。"
 
 #~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr "無法直接連線,但無法找到其他的 XMPP 連線方法。"
+
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "您最近做的一個動作無法完成,因為您已經達到這個動作的速率的上限。請等待十秒"
+#~ "後再試一次。\n"
+
+#~ msgid ""
 #~ "The root certificate this one claims to be issued by is unknown to Pidgin."
 #~ msgstr "這張憑證聲稱由一所 Pidgin 不認識的根憑證機構簽發。"
 
--- a/po/zh_TW.po	Wed Feb 10 20:53:32 2010 +0000
+++ b/po/zh_TW.po	Thu Feb 18 21:38:43 2010 +0000
@@ -1,12 +1,12 @@
 # Pidgin's Traditional Chinese translation
-# Copyright (C) 2002-2009, Paladin R. Liu <paladin@ms1.hinet.net>
-# Copyright (C) 2003-2009, Ambrose C. Li <ambrose.li@gmail.com>
+# Copyright (C) 2002-2010, Paladin R. Liu <paladin@ms1.hinet.net>
+# Copyright (C) 2003-2010, Ambrose C. Li <ambrose.li@gmail.com>
 #
 # PLEASE DO NOT ATTEMPT TO UPDATE THIS FILE IF THERE ARE NO
 # LINE NUMBERS (LINES BEGINNING WITH #:) IN THIS FILE.
 #
 # This file is distributed under the same license as the "Pidgin" package.
-# $InternalId: zh_TW.po,v 1.615 2009/11/29 00:48:50 acli Exp $
+# $InternalId: zh_TW.po,v 1.619 2010/02/15 23:14:17 acli Exp $
 #
 # ----------------------------------------------------------
 # For internal use only:
@@ -58,10 +58,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Pidgin 2.6.4\n"
+"Project-Id-Version: Pidgin 2.6.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-29 20:30-0500\n"
-"PO-Revision-Date: 2009-09-03 06:04-0400\n"
+"POT-Creation-Date: 2010-02-15 18:33-0800\n"
+"PO-Revision-Date: 2010-02-14 03:06-0400\n"
 "Last-Translator: Ambrose Li <ambrose.li@gmail.com>\n"
 "Language-Team: Chinese (Traditional) <zh-l10n@linux.org.tw>\n"
 "MIME-Version: 1.0\n"
@@ -1650,11 +1650,13 @@
 msgid "No Grouping"
 msgstr "不分組"
 
+# XXX 暫譯 20100215/acli
 msgid "Nested Subgroup"
-msgstr ""
-
+msgstr "巢狀子群組"
+
+# XXX 暫譯 20100215/acli
 msgid "Nested Grouping (experimental)"
-msgstr ""
+msgstr "巢狀分組(實驗性功能)"
 
 #  *< name
 #  *< version
@@ -2035,6 +2037,9 @@
 msgid "%s is not a regular file. Cowardly refusing to overwrite it.\n"
 msgstr "%s 不是一般檔案,因此不會覆蓋它。\n"
 
+msgid "File is not readable."
+msgstr "無法讀取檔案。"
+
 #, c-format
 msgid "%s wants to send you %s (%s)"
 msgstr "%s 想要送 %s (%s) 給您"
@@ -3900,6 +3905,13 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "伺服器需要經由未經加密的串流進行明文認證"
 
+#. This should never happen!
+msgid "Invalid response from server"
+msgstr "伺服器送來了無效的回應"
+
+msgid "Server does not use any supported authentication method"
+msgstr "伺服器並不提供任何一種被支援的認證方式"
+
 #, c-format
 msgid ""
 "%s requires plaintext authentication over an unencrypted connection.  Allow "
@@ -3909,15 +3921,6 @@
 msgid "Plaintext Authentication"
 msgstr "明文認證"
 
-msgid "SASL authentication failed"
-msgstr "SASL 認證失敗"
-
-msgid "Invalid response from server"
-msgstr "伺服器送來了無效的回應"
-
-msgid "Server does not use any supported authentication method"
-msgstr "伺服器並不提供任何一種被支援的認證方式"
-
 msgid "You require encryption, but it is not available on this server."
 msgstr "您要求加密,但這伺服器沒有加密功能。"
 
@@ -3925,10 +3928,28 @@
 msgid "Invalid challenge from server"
 msgstr "伺服器送來了無效的驗證挑戰"
 
+msgid "Server thinks authentication is complete, but client does not"
+msgstr "伺服器認為驗證程序已經完畢,但用戶端不認同"
+
+msgid "SASL authentication failed"
+msgstr "SASL 認證失敗"
+
 #, c-format
 msgid "SASL error: %s"
 msgstr "SASL 錯誤:%s"
 
+msgid "Unable to canonicalize username"
+msgstr "無法把帳號轉成正準形式"
+
+msgid "Unable to canonicalize password"
+msgstr "無法把密碼轉成正準形式"
+
+msgid "Malicious challenge from server"
+msgstr "伺服器送來了惡意的驗證挑戰"
+
+msgid "Unexpected response from server"
+msgstr "伺服器發出了奇怪的回應"
+
 msgid "The BOSH connection manager terminated your session."
 msgstr "BOSH 連線管理員中斷了您的工作階段。"
 
@@ -4035,13 +4056,17 @@
 msgid "Resource"
 msgstr ""
 
+# NOTE 好像有點怪,但這是標準譯文 20100214
+msgid "Uptime"
+msgstr "工作時間"
+
+msgid "Logged Off"
+msgstr "已登出"
+
 #, c-format
 msgid "%s ago"
 msgstr "%s前"
 
-msgid "Logged Off"
-msgstr "已登出"
-
 # NOTE: 法、德文均譯「第二個名」,芬蘭文譯「其他名」,日文音譯了事
 # NOTE: 在網上幾間台灣大學寫「英文別名」,現套用,也跟芬蘭文PO檔處理手法相同
 msgid "Middle Name"
@@ -4244,11 +4269,6 @@
 msgid "Ping timed out"
 msgstr "Ping逾時"
 
-msgid ""
-"Unable to find alternative XMPP connection methods after failing to connect "
-"directly."
-msgstr "無法直接連線,但無法找到其他的 XMPP 連線方法。"
-
 msgid "Invalid XMPP ID"
 msgstr "XMPP 帳號無效"
 
@@ -4879,6 +4899,9 @@
 msgid "(Code %s)"
 msgstr "(代碼 %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "訊息中含有一個因檔案大小超過上限而無法送出的自訂表情。"
+
 msgid "XML Parse error"
 msgstr "XML 分析錯誤"
 
@@ -5303,6 +5326,10 @@
 msgid "Your new MSN friendly name is too long."
 msgstr "您的新 MSN 暱稱太長。"
 
+#, c-format
+msgid "Set friendly name for %s."
+msgstr "設定 %s 的暱稱。"
+
 msgid "Set your friendly name."
 msgstr "設定您的暱稱。"
 
@@ -6912,7 +6939,11 @@
 msgstr "伺服器通訊埠"
 
 # NOTE 參見 http://pidgin.im/pipermail/translators/2009-July/000394.html
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "%s 發出了奇怪的回應:%s"
+
+# NOTE 參見 http://pidgin.im/pipermail/translators/2009-July/000394.html
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "%s 發出了奇怪的回應"
@@ -6931,6 +6962,11 @@
 msgid "Error requesting %s: %s"
 msgstr "要求讀取 %s 途中發生了錯誤:%s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr "伺服器表示登入前必須完成圖片驗證,但這用戶端尚未支援圖片驗證。"
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL 不允許您的帳號在這裏登入"
 
@@ -7501,13 +7537,6 @@
 "characters.]"
 msgstr "(無法顯示來自這個使用者的訊息,因為它包含了無效字元。)"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"您最近做的一個動作無法完成,因為您已經達到這個動作的速率的上限。請等待十秒後"
-"再試一次。\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "您已經由聊天室 %s 停止連線。"
@@ -12287,9 +12316,6 @@
 msgid "Lao"
 msgstr "寮國文"
 
-msgid "Lithuanian"
-msgstr "立陶宛文"
-
 #  NOTE「馬其頓文」是一種東歐語文,跟希臘的馬其頓並無關係
 msgid "Macedonian"
 msgstr "馬其頓文"
@@ -12297,6 +12323,10 @@
 msgid "Mongolian"
 msgstr "蒙古文"
 
+#  NOTE 參見 http://www.cnscode.org.tw/cnscode/lang.jsp?keyword=marathi&qrytype=en&x=15&y=4
+msgid "Marathi"
+msgstr "馬拉提文"
+
 msgid "Malay"
 msgstr "馬來文"
 
@@ -12322,6 +12352,10 @@
 msgid "Occitan"
 msgstr "奧西坦文"
 
+# NOTE 參見 http://www.cnscode.org.tw/cnscode/lang.jsp?keyword=oriya&qrytype=en&x=33&y=10
+msgid "Oriya"
+msgstr "奧里亞文"
+
 msgid "Punjabi"
 msgstr "旁遮普文"
 
@@ -12413,6 +12447,9 @@
 msgid "Amharic"
 msgstr "阿姆哈拉文"
 
+msgid "Lithuanian"
+msgstr "立陶宛文"
+
 #, c-format
 msgid "About %s"
 msgstr "關於 %s"
@@ -14061,6 +14098,9 @@
 msgid "_Save File"
 msgstr "儲存檔案(_S)"
 
+msgid "Do you really want to clear?"
+msgstr "您確定要清除?"
+
 msgid "Select color"
 msgstr "選擇顏色"
 
@@ -15313,6 +15353,18 @@
 msgstr "幫助為 XMPP 伺服器或客戶端進行除錯。"
 
 #~ msgid ""
+#~ "Unable to find alternative XMPP connection methods after failing to "
+#~ "connect directly."
+#~ msgstr "無法直接連線,但無法找到其他的 XMPP 連線方法。"
+
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "您最近做的一個動作無法完成,因為您已經達到這個動作的速率的上限。請等待十秒"
+#~ "後再試一次。\n"
+
+#~ msgid ""
 #~ "The root certificate this one claims to be issued by is unknown to Pidgin."
 #~ msgstr "這張憑證聲稱由一所 Pidgin 不認識的根憑證機構簽發。"