[SCM] Azureus/Vuze packaging for Debian branch, upstream, updated. upstream/4.3.0.0-1-g2a572fe

Adrian Perez adrianperez-guest at alioth.debian.org
Thu Dec 17 21:34:48 UTC 2009


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Azureus/Vuze packaging for Debian".

The branch, upstream has been updated
       via  2a572fea0a045c7346346de077250b74f371d71a (commit)
      from  7f589b99ccb4db616a78d45152378a580a4abf08 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 ChangeLog.txt                                      |   47 +
 .../azureus/activities/VuzeActivitiesManager.java  |   68 +
 .../azureus/core/cnetwork/ContentNetwork.java      |    3 +-
 .../cnetwork/impl/ContentNetworkVuzeGeneric.java   |    1 +
 .../core/content/RelatedContentManager.java        |   63 +-
 .../core/devices/DeviceOfflineDownloader.java      |    3 +-
 .../devices/impl/DeviceOfflineDownloaderImpl.java  |    5 +-
 .../transport/udp/impl/DHTTransportUDPImpl.java    |    2 +-
 .../diskmanager/file/impl/FMFileAccessCompact.java |   19 +-
 .../core/download/EnhancedDownloadManager.java     |    6 +-
 com/aelitis/azureus/core/impl/AzureusCoreImpl.java |    5 +-
 .../azureus/core/lws/LWSDiskManagerState.java      |    7 +-
 .../azureus/core/lws/LightWeightSeedManager.java   |    5 +-
 .../core/messenger/browser/BrowserMessage.java     |  162 +---
 .../browser/BrowserMessageDispatcher.java          |   27 -
 .../config/PlatformMetaDataMessenger.java          |  336 +++++
 .../config/PlatformMetaSearchMessenger.java        |   35 +-
 com/aelitis/azureus/core/metasearch/Engine.java    |   26 +-
 .../azureus/core/metasearch/MetaSearch.java        |    4 +
 com/aelitis/azureus/core/metasearch/Result.java    |   24 +-
 .../azureus/core/metasearch/impl/EngineImpl.java   |   81 ++-
 .../core/metasearch/impl/MetaSearchImpl.java       |  201 +++-
 .../metasearch/impl/MetaSearchManagerImpl.java     |   73 +-
 .../core/metasearch/impl/plugin/PluginResult.java  |    4 +-
 .../core/metasearch/impl/web/WebResult.java        |    3 +-
 .../core/metasearch/impl/web/json/JSONEngine.java  |    3 +
 .../metasearch/impl/web/regex/RegexEngine.java     |    3 +
 .../core/networkmanager/admin/NetworkAdmin.java    |    2 +
 .../admin/impl/NetworkAdminImpl.java               |  280 +++--
 .../impl/tcp/VirtualChannelSelectorImpl.java       |    9 +-
 .../messaging/bittorrent/BTMessageDecoder.java     |    2 +-
 .../bittorrent/ltep/LTMessageDecoder.java          |   26 +-
 .../azureus/core/rssgen/RSSGeneratorPlugin.java    |   10 +-
 .../core/speedmanager/impl/SpeedManagerImpl.java   |   20 +-
 .../impl/v1/SpeedManagerAlgorithmProviderV1.java   |    6 +-
 .../impl/v3/SpeedManagerAlgorithmProviderV3.java   |    8 +-
 .../core/subs/impl/SubscriptionManagerImpl.java    |   14 +-
 .../azureus/core/torrent/PlatformTorrentUtils.java |   74 +-
 .../thread => util}/AEThreadMonitor.java           |    2 +-
 com/aelitis/azureus/core/util/CopyOnWriteList.java |   10 +
 com/aelitis/azureus/core/util/DNSUtils.java        |   70 +-
 .../azureus/core/util/FeatureAvailability.java     |    9 +
 com/aelitis/azureus/core/util/Java15Utils.java     |   90 +-
 .../core/versioncheck/VersionCheckClient.java      |  174 ++-
 com/aelitis/azureus/jdk15/Java15Initialiser.java   |   62 -
 com/aelitis/azureus/jdk15/Java15UtilsImpl.java     |   88 --
 com/aelitis/azureus/plugins/dht/DHTPlugin.java     |    4 +-
 .../extseed/impl/ExternalSeedReaderImpl.java       |   68 +-
 .../ExternalSeedReaderFactoryGetRight.java         |   51 +-
 .../impl/getright/ExternalSeedReaderGetRight.java  |   12 +-
 .../webseed/ExternalSeedReaderFactoryWebSeed.java  |   11 +
 .../impl/webseed/ExternalSeedReaderWebSeed.java    |   12 +-
 .../azureus/plugins/magnet/MagnetPlugin.java       |  282 ++++-
 .../magnet/MagnetPluginProgressListener.java       |    3 +
 .../azureus/plugins/net/buddy/BuddyPlugin.java     |   13 +-
 .../plugins/tracker/dht/DHTTrackerPlugin.java      |    7 +-
 .../azureus/ui/skin/skin3_constants.properties     |   14 -
 .../azureus/ui/swt/browser/BrowserContext.java     |   40 +-
 .../swt/browser/listener/MetaSearchListener.java   |   48 +-
 .../ui/swt/browser/msg/MessageDispatcherSWT.java   |  202 +--
 .../ui/swt/columns/torrent/ColumnThumbAndName.java |  203 ++--
 .../ui/swt/columns/utils/TableColumnCreatorV3.java |   16 -
 .../azureus/ui/swt/content/SBC_RCMView.java        |    2 +-
 .../azureus/ui/swt/devices/DeviceManagerUI.java    |   14 +-
 .../azureus/ui/swt/devices/DevicesODFTUX.java      |   77 +-
 .../azureus/ui/swt/extlistener/StimulusRPC.java    |   31 +-
 .../azureus/ui/swt/shells/main/MainWindow.java     |  196 +---
 .../ui/swt/shells/main/UIFunctionsImpl.java        |  166 +--
 .../azureus/ui/swt/utils/TorrentUIUtilsV3.java     |    8 +-
 .../ui/swt/views/skin/MyTorrentsView_Big.java      |    2 +-
 .../ui/swt/views/skin/SBC_AdvancedView.java        |  151 ---
 .../azureus/ui/swt/views/skin/SBC_LibraryView.java |   10 +-
 .../azureus/ui/swt/views/skin/sidebar/SideBar.java |  104 +-
 .../ui/swt/views/skin/sidebar/SideBarEntrySWT.java |   14 +-
 com/aelitis/azureus/util/ImportExportUtils.java    |   29 +
 .../azureus/util/InitialisationFunctions.java      |    2 -
 .../azureus/vivaldi/ver2/DeserializedPosition.java |   59 -
 com/aelitis/azureus/vivaldi/ver2/IDWrapper.java    |   62 -
 .../azureus/vivaldi/ver2/InitialPosition.java      |   45 -
 .../azureus/vivaldi/ver2/LocalPosition.java        |   42 -
 .../azureus/vivaldi/ver2/RemotePosition.java       |   54 -
 .../azureus/vivaldi/ver2/StableLocalPosition.java  |   15 -
 .../azureus/vivaldi/ver2/SyrahPosition.java        |   56 -
 .../azureus/vivaldi/ver2/TransientTuple.java       |   18 -
 .../vivaldi/ver2/VivaldiV2PositionProvider.java    |  465 -------
 .../ver2/stats/SerializationController.java        |   98 --
 .../vivaldi/ver2/stats/StatsSerializer.java        |   28 -
 .../azureus/vivaldi/ver2/stats/V1Serializer.java   |   33 -
 .../azureus/vivaldi/ver2/stats/V1Statistics.java   |  296 -----
 .../vivaldi/ver2/stats/VivaldiStatistics.java      |   16 -
 com/aelitis/net/magneturi/MagnetURIHandler.java    |   11 +
 .../net/magneturi/MagnetURIHandlerListener.java    |    1 +
 .../MagnetURIHandlerProgressListener.java          |    3 +
 .../net/magneturi/impl/MagnetURIHandlerImpl.java   |  103 ++-
 edu/harvard/syrah/nc/ApplicationObserver.java      |   33 -
 edu/harvard/syrah/nc/Coordinate.java               |  369 ------
 edu/harvard/syrah/nc/EWMAStatistic.java            |   49 -
 edu/harvard/syrah/nc/License.txt                   |  125 --
 edu/harvard/syrah/nc/ObserverList.java             |  114 --
 edu/harvard/syrah/nc/RemoteState.java              |  199 ---
 edu/harvard/syrah/nc/Vec.java                      |  219 ---
 edu/harvard/syrah/nc/VivaldiClient.java            | 1387 --------------------
 edu/harvard/syrah/nc/WindowStatistic.java          |  150 ---
 .../core3/config/COConfigurationManager.java       |    4 +-
 .../core3/config/impl/ConfigurationDefaults.java   |    4 +
 .../core3/config/impl/TransferSpeedValidator.java  |   70 +-
 .../azureus2/core3/disk/DiskManagerFactory.java    |    5 +-
 .../azureus2/core3/disk/impl/DiskManagerImpl.java  |   34 +-
 .../core3/disk/impl/access/impl/DMReaderImpl.java  |   13 +-
 .../core3/download/impl/DownloadManagerImpl.java   |   29 +-
 .../impl/TorrentDownloaderImpl.java                |   80 +-
 .../core3/tracker/client/TRTrackerAnnouncer.java   |    8 +-
 .../client/impl/TRTrackerAnnouncerFactoryImpl.java |   17 +-
 .../client/impl/TRTrackerAnnouncerImpl.java        |  236 +++-
 .../client/impl/TRTrackerAnnouncerMuxer.java       |  238 ++++
 .../client/impl/bt/TRTrackerBTAnnouncerImpl.java   |  138 ++-
 .../tracker/client/impl/bt/TrackerChecker.java     |    2 +-
 .../client/impl/dht/TRTrackerDHTAnnouncerImpl.java |   77 +-
 .../impl/tcp/nonblocking/TRNonBlockingServer.java  |    2 +-
 .../core3/tracker/util/TRTrackerUtils.java         |    3 +-
 org/gudy/azureus2/core3/util/AEDiagnostics.java    |   64 +-
 org/gudy/azureus2/core3/util/Constants.java        |    4 +-
 org/gudy/azureus2/core3/util/FileUtil.java         |   92 +-
 org/gudy/azureus2/core3/util/TorrentUtils.java     |   72 +-
 org/gudy/azureus2/core3/util/UrlUtils.java         |  141 +-
 .../core3/util/protocol/magnet/Handler.java        |    8 +-
 .../util/protocol/magnet/MagnetConnection.java     |    8 +-
 ...agnetConnection.java => MagnetConnection2.java} |   85 +-
 .../azureus2/internat/MessagesBundle.properties    |   52 +-
 .../internat/MessagesBundle_ar_SA.properties       |   38 +-
 .../internat/MessagesBundle_bg_BG.properties       |  104 --
 .../internat/MessagesBundle_bs_BA.properties       |   38 +-
 .../internat/MessagesBundle_ca_AD.properties       |   67 -
 .../internat/MessagesBundle_cs_CZ.properties       |   57 +-
 .../internat/MessagesBundle_da_DK.properties       |   75 +-
 .../internat/MessagesBundle_de_DE.properties       |    3 -
 .../internat/MessagesBundle_el_GR.properties       |   54 +-
 .../internat/MessagesBundle_en_GB.properties       |   50 +-
 .../internat/MessagesBundle_es_ES.properties       |   79 --
 .../azureus2/internat/MessagesBundle_eu.properties |   58 +-
 .../internat/MessagesBundle_fi_FI.properties       |   35 +-
 .../internat/MessagesBundle_fr_FR.properties       |   55 -
 .../internat/MessagesBundle_fy_NL.properties       |   54 +-
 .../internat/MessagesBundle_gl_ES.properties       |   46 +-
 .../internat/MessagesBundle_hu_HU.properties       |   82 +--
 .../internat/MessagesBundle_hy_AM.properties       |   20 +
 .../internat/MessagesBundle_in_ID.properties       |   18 -
 .../internat/MessagesBundle_it_IT.properties       |  143 +--
 .../internat/MessagesBundle_iw_IL.properties       |   38 +-
 .../internat/MessagesBundle_ja_JP.properties       |  123 +--
 .../internat/MessagesBundle_ka_GE.properties       |   36 +-
 .../internat/MessagesBundle_km_KH.properties       |   19 +-
 .../internat/MessagesBundle_ko_KR.properties       |   71 -
 .../internat/MessagesBundle_li_NL.properties       |  135 +--
 .../internat/MessagesBundle_lt_LT.properties       |   29 +-
 .../internat/MessagesBundle_mk_MK.properties       |   30 +-
 .../internat/MessagesBundle_ms_SG.properties       |   40 +-
 .../internat/MessagesBundle_nl_NL.properties       |   98 +--
 .../internat/MessagesBundle_pl_PL.properties       |   97 --
 .../internat/MessagesBundle_pt_BR.properties       |  108 --
 .../internat/MessagesBundle_pt_PT.properties       |   59 +-
 .../internat/MessagesBundle_ro_RO.properties       |  351 ++----
 .../internat/MessagesBundle_ru_RU.properties       |  185 ---
 .../internat/MessagesBundle_sk_SK.properties       |   56 +-
 .../internat/MessagesBundle_sl_SI.properties       |   40 +-
 .../azureus2/internat/MessagesBundle_sr.properties |   29 -
 .../internat/MessagesBundle_sv_SE.properties       |   47 -
 .../internat/MessagesBundle_th_TH.properties       |   40 +-
 .../internat/MessagesBundle_tr_TR.properties       |   70 +-
 .../internat/MessagesBundle_uk_UA.properties       |  115 --
 .../internat/MessagesBundle_zh_CN.properties       |  150 ---
 .../internat/MessagesBundle_zh_TW.properties       |   44 +-
 .../platform/unix/PlatformManagerUnixPlugin.java   |   21 +-
 .../platform/win32/access/impl/Release/aereg64.dll |  Bin 85504 -> 0 bytes
 org/gudy/azureus2/plugins/peers/PeerStats.java     |    7 +
 .../plugins/ui/sidebar/SideBarDropListener.java    |    7 +-
 .../local/peers/PeerForeignNetworkConnection.java  |    9 +-
 .../pluginsimpl/local/peers/PeerStatsImpl.java     |   13 +
 .../pluginsimpl/local/utils/xml/rss/RSSUtils.java  |   19 +-
 org/gudy/azureus2/ui/console/commands/Hack.java    |   10 +-
 org/gudy/azureus2/ui/console/commands/Show.java    |    2 +-
 org/gudy/azureus2/ui/swt/OpenTorrentWindow.java    |   69 +-
 org/gudy/azureus2/ui/swt/PasswordWindow.java       |   16 +-
 org/gudy/azureus2/ui/swt/StartServer.java          |   55 +-
 org/gudy/azureus2/ui/swt/TorrentUtil.java          |   51 +-
 org/gudy/azureus2/ui/swt/Utils.java                |    5 +-
 .../azureus2/ui/swt/mainwindow/MainStatusBar.java  |   55 +-
 .../azureus2/ui/swt/mainwindow/MenuFactory.java    |   18 +-
 org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java |    3 +
 .../ui/swt/mainwindow/SelectableSpeedMenu.java     |    2 +-
 .../ui/swt/maketorrent/MultiTrackerEditor.java     |    2 +-
 org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java  |   24 +-
 .../azureus2/ui/swt/progress/ProgressReporter.java |    8 +-
 .../ui/swt/progress/ProgressReporterPanel.java     |    1 +
 org/gudy/azureus2/ui/swt/views/GeneralView.java    |    2 +-
 org/gudy/azureus2/ui/swt/views/ManagerView.java    |   62 +-
 .../azureus2/ui/swt/views/TorrentInfoView.java     |    2 +-
 .../ui/swt/views/clientstats/ClientStatsView.java  |   89 ++-
 ...olumnCS_Sent.java => ColumnCS_ReceivedPer.java} |    8 +-
 .../ConfigSectionConnectionAdvanced.java           |    3 +-
 .../azureus2/ui/swt/views/stats/StatsView.java     |    2 +-
 .../ui/swt/views/stats/TrackerStatsView.java       |    2 +-
 .../ui/swt/views/table/impl/TableViewSWTImpl.java  |   46 +-
 .../swt/views/table/utils/TableColumnManager.java  |   34 +-
 .../azureus2/ui/swt/win32/Win32UIEnhancer.java     |    6 +-
 org/gudy/azureus2/ui/webplugin/WebPlugin.java      |  187 ++-
 206 files changed, 4828 insertions(+), 8598 deletions(-)

diff --git a/ChangeLog.txt b/ChangeLog.txt
index 9e71e84..0273f61 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,6 +1,53 @@
 VUZE CHANGELOG
 -----------------
 
+2009.12.10 | Vuze 4.3.0.6
+
+BUGFIX: Core  | Fixed bug where compact file types could lead to spurious 'file length too large' errors [Parg]
+
+
+
+2009.11.20 | Vuze 4.3.0.4
+
+BUGFIX: UI    | Prevent main window from popping up when adding a torrent and "Add Torrent Silently" set [TuxPaper]
+BUGFIX: UI    | Ensure that the correct progress reports are passed to listeners [Parg]
+BUGFIX: UI    | Fixed bug whereby the destruction of the torrent-open window was cancelling torrent download dialogs [Parg]
+BUGFIX: UI    | (OSX) Fixed bug where scrollers on some mice would cause table to blank [TuxPaper]
+BUGFIX: UIvz  | Handle magnet links within internal browser [TuxPaper]
+BUGFIX: Plug  | Improved the fallback lookup service by passing the all params [Parg]
+BUGFIX: Plug  | Verify that downloaded torrents are valid before passing to caller [Parg]
+
+
+
+2009.11.19 | Vuze 4.3.0.2
+
+FEATURE: Core | Support per-url config for http seeds and max_speed setting [Parg]
+FEATURE: Plug | Start of a fallback magnet lookup service [Parg]
+FEATURE: UI   | Clicking on dock icon always opens main window [TuxPaper]
+
+CHANGE: Core  | Parse hex-encoded magnet URIs too [The 8472]
+CHANGE: Core  | Immediate-close option for tracker socket connections [Parg]
+CHANGE: Core  | Return IP address instead of DNS names for external seeds [Parg]
+CHANGE: Core  | Support more non-conformant RSS feed dates [Parg]
+CHANGE: Core  | Auto-speed bias towards min ping times rather than pure average [Parg]
+
+BUGFIX: Core  | Reverted socket handling to initial 1.6 fix status to fix with network binding/stall problems [Parg]
+BUGFIX: Core  | Added option to disable all IPv6 support and defaulted to 'disable' on OSX as some users experiencing crash when enabled [Parg] 
+BUGFIX: Plug  | Don't cause all dht torrents to perform an 'announce' when 'pause-all' selected [Parg]
+BUGFIX: Plug  | Webplugin config section override was using the wrong variable prefix [Parg]
+BUGFIX: UI    | Fixed name column sort [TuxPaper]
+BUGFIX: UI    | (OSX) Fixed opening .vuze files when client isn't running [TuxPaper]
+BUGFIX: UI    | Fixed table view not loading (showing gray area) sometimes [TuxPaper]
+BUGFIX: UI    | (Windows) "Open Containing Folder" in default "folder association" app [TuxPaper]
+BUGFIX: UI    | (*nix) Fixed name column blanking [TuxPaper]
+BUGFIX: UI    | (OSX) Fixed Password option hanging UI [TuxPaper]
+BUGFIX: UI    | Fixed sidebar font sizes (mostly for *nix) [TuxPaper]
+BUGFIX: UI    | (OSX) Opening .torrent file when "Add Silently" is enable should no longer activate the main window [TuxPaper]
+BUGFIX: UI    | Fix losing cursor indication on Sashes (and other widgets) [TuxPaper]
+BUGFIX: UI    | Sidebar now accepts dropping torrents [TuxPaper] 
+
+
+
 2009.11.11 | Vuze 4.3.0.0
 
 FEATURE: Core | Added support for UPnP based offline-downloader services [Parg]
diff --git a/com/aelitis/azureus/activities/VuzeActivitiesManager.java b/com/aelitis/azureus/activities/VuzeActivitiesManager.java
index 1a0f2ec..a215d06 100644
--- a/com/aelitis/azureus/activities/VuzeActivitiesManager.java
+++ b/com/aelitis/azureus/activities/VuzeActivitiesManager.java
@@ -18,8 +18,11 @@
 
 package com.aelitis.azureus.activities;
 
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.*;
 
+import org.gudy.azureus2.core3.config.COConfigurationManager;
 import org.gudy.azureus2.core3.util.*;
 
 import com.aelitis.azureus.core.AzureusCore;
@@ -167,6 +170,71 @@ public class VuzeActivitiesManager
 				}
 			}
 		});
+		
+		final String id_str = cn.getServiceURL( ContentNetwork.SERVICE_IDENTIFY );
+		
+		if ( id_str != null && id_str.length() > 0 ){
+			
+			try{
+				SimpleTimer.addPeriodicEvent(
+					"act:id",
+					23*60*60*1000,
+					new TimerEventPerformer()
+					{
+						public void 
+						perform(
+							TimerEvent event ) 
+						{
+							identify( cn, id_str );
+						}
+					});
+				
+				identify( cn, id_str );
+				
+			}catch( Throwable e ){
+				
+				Debug.out( e );
+			}
+		}
+	}
+	
+	private static void
+	identify(
+		ContentNetwork		cn,
+		String				str )
+	{
+		try{
+			URL	url = new URL( str );
+			
+			HttpURLConnection con = (HttpURLConnection)url.openConnection();
+			
+			String	key = "cn." + cn.getID() + ".identify.cookie";
+			
+			String cookie = COConfigurationManager.getStringParameter( key, null );
+			
+			if ( cookie != null ){
+				
+				con.setRequestProperty( "Cookie", cookie + ";" );
+			}
+			
+			con.setRequestProperty( "Connection", "close" );
+			
+			con.getResponseCode();
+			
+			cookie = con.getHeaderField( "Set-Cookie" );
+			
+			if ( cookie != null ){
+				
+				String[] bits = cookie.split( ";" );
+				
+				if ( bits.length > 0 && bits[0].length() > 0 ){
+					
+					COConfigurationManager.setParameter( key, bits[0] );
+				}
+			}
+		}catch( Throwable e ){
+			
+		}
 	}
 
 	/**
diff --git a/com/aelitis/azureus/core/cnetwork/ContentNetwork.java b/com/aelitis/azureus/core/cnetwork/ContentNetwork.java
index f830c46..fac30af 100644
--- a/com/aelitis/azureus/core/cnetwork/ContentNetwork.java
+++ b/com/aelitis/azureus/core/cnetwork/ContentNetwork.java
@@ -82,7 +82,8 @@ ContentNetwork
 	public static final int		SERVICE_POSTPLAYBACK  		= 33;
 	public static final int		SERVICE_SIDEBAR_CLOSE  		= 34;
 	public static final int		SERVICE_ABOUT				= 35;
-	
+	public static final int		SERVICE_IDENTIFY			= 36;	
+
 		// content network properties
 	
 	public static final int		PROPERTY_SITE_HOST			= 1;	// String
diff --git a/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java b/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java
index 89d104d..35d7aa2 100644
--- a/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java
+++ b/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java
@@ -224,6 +224,7 @@ ContentNetworkVuzeGeneric
 		addService( SERVICE_PREPLAYBACK,		URL_PREFIX + "emp/load/" );
 		addService( SERVICE_POSTPLAYBACK, 		URL_PREFIX + "emp/recommend/" );
 		addService( SERVICE_SIDEBAR_CLOSE, 		URL_PREFIX + "sidebar.close" );
+		addService( SERVICE_IDENTIFY,			"http://pixel.quantserve.com/pixel/p-64Ix1G_SXwOa-.gif" );
 		
 		if ( URL_RELAY_RPC != null ){
 			 
diff --git a/com/aelitis/azureus/core/content/RelatedContentManager.java b/com/aelitis/azureus/core/content/RelatedContentManager.java
index 841b9d5..2889283 100644
--- a/com/aelitis/azureus/core/content/RelatedContentManager.java
+++ b/com/aelitis/azureus/core/content/RelatedContentManager.java
@@ -55,6 +55,7 @@ import org.gudy.azureus2.core3.util.SystemTime;
 import org.gudy.azureus2.core3.util.TimerEvent;
 import org.gudy.azureus2.core3.util.TimerEventPerformer;
 import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.core3.util.UrlUtils;
 import org.gudy.azureus2.plugins.PluginInterface;
 import org.gudy.azureus2.plugins.PluginListener;
 import org.gudy.azureus2.plugins.ddb.DistributedDatabase;
@@ -105,6 +106,8 @@ RelatedContentManager
 	private static final int	MAX_TITLE_LENGTH			= 80;
 	private static final int	MAX_CONCURRENT_PUBLISH		= 2;
 	private static final int	MAX_REMOTE_SEARCH_RESULTS	= 30;
+	private static final int	MAX_REMOTE_SEARCH_CONTACTS	= 50;
+	private static final int	MAX_REMOTE_SEARCH_MILLIS	= 25*1000;
 	
 	private static final int	TEMPORARY_SPACE_DELTA	= 50;
 	
@@ -2253,14 +2256,21 @@ RelatedContentManager
 				public void
 				run()
 				{
-					final Set<String>	titles_or_hashes = new HashSet<String>();
+					final Set<String>	hashes = new HashSet<String>();
 					
 					try{				
 						List<RelatedContent>	matches = matchContent( term );
 							
 						for ( final RelatedContent c: matches ){
 							
-							titles_or_hashes.add( c.getHash()==null?c.getTitle():Base32.encode(c.getHash()));
+							final byte[] hash = c.getHash();
+							
+							if ( hash == null ){
+								
+								continue;
+							}
+							
+							hashes.add( Base32.encode( hash ));
 							
 							SearchResult result = 
 								new SearchResult()
@@ -2277,6 +2287,10 @@ RelatedContentManager
 											
 											return( c.getSize());
 											
+										}else if ( property_name == SearchResult.PR_HASH ){
+											
+											return( hash );
+											
 										}else if ( property_name == SearchResult.PR_RANK ){
 											
 												// this rank isn't that accurate, scale down
@@ -2319,7 +2333,7 @@ RelatedContentManager
 											
 											if ( hash != null ){
 												
-												return( TorrentUtils.getMagnetURI( hash ));
+												return( UrlUtils.getMagnetURI( hash ));
 											}
 										}
 										
@@ -2332,8 +2346,6 @@ RelatedContentManager
 					}finally{
 						
 						try{
-							int	max_contacts = 20;
-							
 							DHT[]	dhts = dht_plugin.getDHTs();
 	
 							Set<InetSocketAddress>	addresses = new HashSet<InetSocketAddress>();
@@ -2351,7 +2363,7 @@ RelatedContentManager
 								}
 							}
 							
-							if ( addresses.size() < max_contacts ){
+							if ( addresses.size() < MAX_REMOTE_SEARCH_CONTACTS ){
 								
 								for ( DHT dht: dhts ){
 									
@@ -2363,14 +2375,14 @@ RelatedContentManager
 											
 											addresses.add( c.getAddress());
 											
-											if ( addresses.size() >= max_contacts ){
+											if ( addresses.size() >= MAX_REMOTE_SEARCH_CONTACTS ){
 												
 												break;
 											}
 										}
 									}
 									
-									if ( addresses.size() >= max_contacts ){
+									if ( addresses.size() >= MAX_REMOTE_SEARCH_CONTACTS ){
 										
 										break;
 									}
@@ -2383,7 +2395,7 @@ RelatedContentManager
 							
 							List<DistributedDatabaseContact>	ddb_contacts = new ArrayList<DistributedDatabaseContact>();
 							
-							for (int i=0;i<Math.min( list.size(), max_contacts );i++){
+							for (int i=0;i<Math.min( list.size(), MAX_REMOTE_SEARCH_CONTACTS );i++){
 								
 								try{				
 									ddb_contacts.add( ddb.importContact( list.get(i), DHTTransportUDP.PROTOCOL_VERSION_REPLICATION_CONTROL ));
@@ -2393,7 +2405,7 @@ RelatedContentManager
 							}
 							
 							long	start		= SystemTime.getMonotonousTime();
-							long	max			= 25*1000;
+							long	max			= MAX_REMOTE_SEARCH_MILLIS;
 							
 							final AESemaphore	sem = new AESemaphore( "RCM:rems" );
 							
@@ -2411,7 +2423,7 @@ RelatedContentManager
 									run()
 									{
 										try{
-											sendRemoteSearch( si, titles_or_hashes, c, term, observer );
+											sendRemoteSearch( si, hashes, c, term, observer );
 																						
 										}finally{
 											
@@ -2438,10 +2450,10 @@ RelatedContentManager
 									}
 								}
 								
-								if ( i > 5 ){
+								if ( i > 10 ){
 									
 									try{
-										Thread.sleep( 500 );
+										Thread.sleep( 250 );
 										
 									}catch( Throwable e ){
 									}
@@ -2450,7 +2462,7 @@ RelatedContentManager
 							
 							for (int i=0;i<sent;i++){
 								
-								if ( done[0] > sent*2/3 ){
+								if ( done[0] > sent*4/5 ){
 									
 									break;
 								}
@@ -2467,7 +2479,7 @@ RelatedContentManager
 								}
 							}
 						}finally{
-													
+															
 							observer.complete();
 						}
 					}
@@ -2481,7 +2493,7 @@ RelatedContentManager
 	protected void
 	sendRemoteSearch(
 		SearchInstance					si,
-		Set<String>						titles_or_hashes,
+		Set<String>						hashes,
 		DistributedDatabaseContact		contact,
 		String							term,
 		SearchObserver					observer )
@@ -2534,16 +2546,21 @@ RelatedContentManager
 				
 				final String title = ImportExportUtils.importString( map, "n" );
 				
-				byte[] hash = (byte[])map.get( "h" );
+				final byte[] hash = (byte[])map.get( "h" );
+				
+				if ( hash == null ){
+					
+					continue;
+				}
 				
-				String	title_or_hash = hash==null?title:Base32.encode( hash );
+				String	hash_str = Base32.encode( hash );
 					
-				if ( titles_or_hashes.contains( title_or_hash )){
+				if ( hashes.contains( hash_str )){
 					
 					continue;
 				}
 				
-				titles_or_hashes.add( title_or_hash );
+				hashes.add( hash_str );
 
 				SearchResult result = 
 					new SearchResult()
@@ -2561,6 +2578,10 @@ RelatedContentManager
 									
 									return( ImportExportUtils.importLong( map, "s" ));
 									
+								}else if ( property_name == SearchResult.PR_HASH ){
+									
+									return( hash );
+									
 								}else if ( property_name == SearchResult.PR_RANK ){
 									
 									return( ImportExportUtils.importLong( map, "r" ) / 4 );
@@ -2603,7 +2624,7 @@ RelatedContentManager
 									
 									if ( hash != null ){
 										
-										return( TorrentUtils.getMagnetURI( hash ));
+										return( UrlUtils.getMagnetURI( hash ));
 									}
 								}
 							}catch( Throwable e ){
diff --git a/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java b/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java
index f1c1a0f..ae64da0 100644
--- a/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java
+++ b/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java
@@ -42,7 +42,8 @@ DeviceOfflineDownloader
 	getManufacturer();
 	
 	public long
-	getSpaceAvailable()
+	getSpaceAvailable(
+		boolean		force )
 	
 		throws DeviceManagerException;
 	
diff --git a/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java b/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java
index da569e9..fd0451d 100644
--- a/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java
+++ b/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java
@@ -1299,11 +1299,12 @@ DeviceOfflineDownloaderImpl
 	}
 	
 	public long
-	getSpaceAvailable()
+	getSpaceAvailable(
+		boolean		force )
 	
 		throws DeviceManagerException
 	{
-		if ( space_on_device >= 0 ){
+		if ( space_on_device >= 0 && !force ){
 			
 			return( space_on_device );
 		}
diff --git a/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java b/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java
index 46c3e61..a013b8e 100644
--- a/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java
+++ b/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java
@@ -162,7 +162,7 @@ DHTTransportUDPImpl
 			}
 		};
 		
-	private static final int ROUTABLE_CONTACT_HISTORY_MAX 		= 64;
+	private static final int ROUTABLE_CONTACT_HISTORY_MAX 		= 128;
 
 	private Map<InetSocketAddress,DHTTransportContact>	routable_contact_history = 
 		new LinkedHashMap<InetSocketAddress,DHTTransportContact>(ROUTABLE_CONTACT_HISTORY_MAX,0.75f,true)
diff --git a/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java b/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java
index fcfdacf..d2bde8c 100644
--- a/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java
+++ b/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java
@@ -29,6 +29,7 @@ import java.util.Map;
 
 import org.gudy.azureus2.core3.torrent.TOTorrent;
 import org.gudy.azureus2.core3.torrent.TOTorrentFile;
+import org.gudy.azureus2.core3.util.Debug;
 import org.gudy.azureus2.core3.util.DirectByteBuffer;
 import org.gudy.azureus2.core3.util.FileUtil;
 
@@ -194,11 +195,12 @@ FMFileAccessCompact
 	
 		throws FMFileManagerException
 	{
-		if(length != current_length)
+		if ( length != current_length ){
+					
+			current_length	= length;
+			
 			write_required = true;
-		
-		current_length	= length;
-		
+		}
 	}
 	
 	protected void
@@ -317,7 +319,14 @@ FMFileAccessCompact
 		
 			read( raf, buffer, position );
 			
-			position += len;
+			int	rem = buffers[i].remaining( SS );
+			
+			position += len - rem;
+			
+			if ( rem > 0 ){
+				
+				break;
+			}
 		}
 		
 		if ( position > current_length ){
diff --git a/com/aelitis/azureus/core/download/EnhancedDownloadManager.java b/com/aelitis/azureus/core/download/EnhancedDownloadManager.java
index b044f68..dc4955c 100644
--- a/com/aelitis/azureus/core/download/EnhancedDownloadManager.java
+++ b/com/aelitis/azureus/core/download/EnhancedDownloadManager.java
@@ -257,7 +257,11 @@ EnhancedDownloadManager
 			
 			Map meta_data = PlatformTorrentUtils.getFileMetaData( torrent );
 
-			Map files_info = meta_data==null?null:(Map)meta_data.get( "files" );
+				// dunno why but I have a user with an ArrayList being returned here...
+			
+			Object o_files_info = meta_data==null?null:meta_data.get( "files" );
+			
+			Map files_info = o_files_info instanceof Map?(Map)o_files_info:null;
 			
 			long	offset = 0;
 			
diff --git a/com/aelitis/azureus/core/impl/AzureusCoreImpl.java b/com/aelitis/azureus/core/impl/AzureusCoreImpl.java
index 151940a..e0b4622 100644
--- a/com/aelitis/azureus/core/impl/AzureusCoreImpl.java
+++ b/com/aelitis/azureus/core/impl/AzureusCoreImpl.java
@@ -901,9 +901,8 @@ AzureusCoreImpl
 						protected void
 						checkConfig()
 						{
-							String	key = TransferSpeedValidator.getActiveAutoUploadParameter( global_manager );
-							
-							speed_manager.setEnabled( COConfigurationManager.getBooleanParameter( key ));
+
+							speed_manager.setEnabled( TransferSpeedValidator.isAutoSpeedActive(global_manager) );
 						}
 						
 					});
diff --git a/com/aelitis/azureus/core/lws/LWSDiskManagerState.java b/com/aelitis/azureus/core/lws/LWSDiskManagerState.java
index b0964ec..dc69a7e 100644
--- a/com/aelitis/azureus/core/lws/LWSDiskManagerState.java
+++ b/com/aelitis/azureus/core/lws/LWSDiskManagerState.java
@@ -40,6 +40,8 @@ public class
 LWSDiskManagerState
 	implements DownloadManagerState
 {
+	private long flags = FLAG_LOW_NOISE | FLAG_DISABLE_AUTO_FILE_MOVE;
+	
 	protected
 	LWSDiskManagerState()
 	{
@@ -115,19 +117,20 @@ LWSDiskManagerState
 		long		flag,
 		boolean		set )
 	{
+		flags |= flag;
 	}
 	
 	public boolean
 	getFlag(
 		long		flag )
 	{
-		return( false );
+		return(( flags & flag ) != 0 );
 	}
 	
 	public long 
 	getFlags() 
 	{
-		return 0;
+		return( flags );
 	}
 	
 	public boolean 
diff --git a/com/aelitis/azureus/core/lws/LightWeightSeedManager.java b/com/aelitis/azureus/core/lws/LightWeightSeedManager.java
index 278b63c..58c6fe0 100644
--- a/com/aelitis/azureus/core/lws/LightWeightSeedManager.java
+++ b/com/aelitis/azureus/core/lws/LightWeightSeedManager.java
@@ -38,6 +38,7 @@ import org.gudy.azureus2.core3.util.TimerEvent;
 import org.gudy.azureus2.core3.util.TimerEventPerformer;
 import org.gudy.azureus2.core3.util.TimerEventPeriodic;
 import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.core3.util.UrlUtils;
 import org.gudy.azureus2.plugins.PluginInterface;
 import org.gudy.azureus2.plugins.download.Download;
 import org.gudy.azureus2.pluginsimpl.local.ddb.DDBaseImpl;
@@ -209,7 +210,7 @@ LightWeightSeedManager
 							});
 			}
 			
-			log( "Added LWS: " + name + ", " + TorrentUtils.getMagnetURI( hash.getBytes()));
+			log( "Added LWS: " + name + ", " + UrlUtils.getMagnetURI( hash.getBytes()));
 		}
 		
 		lws.start();
@@ -270,7 +271,7 @@ LightWeightSeedManager
 			}
 		}
 		
-		log( "Added LWS: " + lws.getName() + ", " + TorrentUtils.getMagnetURI( lws.getHash().getBytes()));
+		log( "Added LWS: " + lws.getName() + ", " + UrlUtils.getMagnetURI( lws.getHash().getBytes()));
 	}
 	
 	protected void
diff --git a/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java b/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java
index c02d987..93e81c8 100644
--- a/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java
+++ b/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java
@@ -30,7 +30,6 @@ import org.gudy.azureus2.core3.util.Debug;
 import com.aelitis.azureus.core.messenger.browser.listeners.BrowserMessageListener;
 import com.aelitis.azureus.core.messenger.browser.listeners.MessageCompletionListener;
 import com.aelitis.azureus.util.ConstantsVuze;
-import com.aelitis.azureus.util.JSONUtils;
 
 /**
  * Holds a message being dispatched to a {@link BrowserMessageListener}.
@@ -65,21 +64,13 @@ public class BrowserMessage
 		}
 	}
 
-	static int seqFake = 1;
-
-	private int sequence;
-
 	private String listenerId;
 
 	private String operationId;
 
 	private String params;
 
-	private int paramType;
-
-	private Object decodedParams;
-
-	private String sFullMessage;
+	private Map decodedParams;
 
 	private ArrayList completionListeners = new ArrayList();
 
@@ -89,13 +80,11 @@ public class BrowserMessage
 
 	private String referer;
 
-	public BrowserMessage(String sMsg) {
-		if (sMsg == null) {
-			throw new IllegalArgumentException("event must be non-null");
-		}
-
-		this.sFullMessage = sMsg;
-		parse();
+	
+	public BrowserMessage(String listenerId, String operationId, Map<?, ?> params) {
+		this.listenerId = listenerId;
+		this.operationId = operationId;
+		decodedParams = params;
 	}
 
 	public void addCompletionListener(MessageCompletionListener l) {
@@ -144,22 +133,8 @@ public class BrowserMessage
 		}
 	}
 
-	public List getDecodedArray() {
-		if (!isParamArray()) {
-			throw new IllegalStateException("Decoded parameter is not a List");
-		}
-		return (List) decodedParams;
-	}
-
 	public Map getDecodedMap() {
-		if (!isParamObject()) {
-			throw new IllegalStateException("Decoded parameter is not a Map");
-		}
-		return (Map) decodedParams;
-	}
-
-	public String getFullMessage() {
-		return sFullMessage;
+		return decodedParams == null ? Collections.EMPTY_MAP : decodedParams;
 	}
 
 	public String getListenerId() {
@@ -170,129 +145,10 @@ public class BrowserMessage
 		return operationId;
 	}
 
-	public String getParams() {
-		return params;
-	}
-
 	public String getReferer() {
 		return referer;
 	}
 
-	/*
-	    public StatusTextEvent getMessage( ) {
-	        return event;
-	    }
-
-
-	    public Browser getBrowser ( ) {
-	        return (Browser) event.widget;
-	    }
-
-	    public Object getBrowserData ( String key ) {
-	        return getBrowser().getData(key);
-	    }
-
-	    public void setBrowserData ( String key , Object value ) {
-	        getBrowser().setData(key, value);
-	    }
-
-	    public void executeInBrowser ( String javascript ) {
-	        getBrowser().execute(javascript);
-	    }
-	*/
-	public int getSequence() {
-		return sequence;
-	}
-
-	public boolean isParamArray() {
-		return paramType == ARRAY_PARAM;
-	}
-
-	public boolean isParamObject() {
-		return paramType == OBJECT_PARAM;
-	}
-
-	/**
-	 * Parses the full message into its component parts.
-	 * 
-	 * @throws IllegalArgumentException 
-	 *              if the message cannot be parsed
-	 */
-	protected void parse() {
-		String text = sFullMessage;
-
-		// DJH: StringTokenizer was not used so that listeners
-		//      could define their message format
-		int delimSeqNum = text.indexOf(MESSAGE_DELIM);
-		if (delimSeqNum == -1) {
-			throw new IllegalArgumentException("Message has no delimeters: " + text);
-		}
-		if (delimSeqNum == text.length() - 1) {
-			throw new IllegalArgumentException("Message has no sequence number: "
-					+ text);
-		}
-
-		int delimListener = text.indexOf(MESSAGE_DELIM, delimSeqNum + 1);
-		if (delimListener == -1 || delimListener == text.length() - 1) {
-			throw new IllegalArgumentException("Message has no listener ID: " + text);
-		}
-		try {
-			sequence = Integer.parseInt(text.substring(delimSeqNum + 1, delimListener));
-		} catch (NumberFormatException e) {
-			System.err.println("Plese put the throw back in once souk fixes the seq # bug");
-			sequence = seqFake++;
-			//throw new IllegalArgumentException("Message has no sequence number: " + text);
-		}
-
-		int delimOperation = text.indexOf(MESSAGE_DELIM, delimListener + 1);
-		if (delimOperation == -1 || delimOperation == text.length() - 1) {
-			// listener ID without operation
-			throw new IllegalArgumentException("Message has no operation ID: " + text);
-		}
-
-		listenerId = text.substring(delimListener + 1, delimOperation);
-
-		int delimParams = text.indexOf(MESSAGE_DELIM, delimOperation + 1);
-		if (delimParams == -1) {
-			// operation without parameters
-			operationId = text.substring(delimOperation + 1);
-		} else if (delimParams == text.length() - 1) {
-			// operation without parameters
-			operationId = text.substring(delimOperation + 1, delimParams);
-			params = null;
-			paramType = NO_PARAM;
-			decodedParams = null;
-		} else {
-			// operation with parameters
-			operationId = text.substring(delimOperation + 1, delimParams);
-			params = text.substring(delimParams + 1);
-			char leading = params.charAt(0);
-			try {
-				switch (leading) {
-					case '{':
-						paramType = OBJECT_PARAM;
-						decodedParams = JSONUtils.decodeJSON(params);
-						break;
-
-					case '[':
-						paramType = ARRAY_PARAM;
-						Map decodeJSON = JSONUtils.decodeJSON(params);
-						if (decodeJSON != null) {
-							decodedParams = decodeJSON.get("value");
-						} else {
-							decodedParams = null;
-						}
-						break;
-				}
-			} catch (Exception e) {
-				decodedParams = null;
-			}
-			if (decodedParams == null) {
-				paramType = NO_PARAM;
-			}
-		}
-	}
-
 	public void removeCompletionListener(MessageCompletionListener l) {
 		completionListeners.remove(l);
 	}
@@ -306,8 +162,8 @@ public class BrowserMessage
 	}
 
 	public String toString() {
-		return "[" + sequence + "] " + listenerId + "." + operationId + "("
-				+ params + ")";
+		return listenerId + "." + operationId + "("
+				+ (params == null ? decodedParams : params) + ")";
 	}
 
 	private void triggerCompletionListeners(boolean success, Object data) {
diff --git a/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java b/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java
index 4ece5b3..5937268 100644
--- a/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java
+++ b/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java
@@ -58,26 +58,6 @@ public interface BrowserMessageDispatcher
 	public abstract BrowserMessageListener getListener(String id);
 
 	/**
-	 * Handles operations intended for the dispatcher.
-	 * 
-	 * @param message holds all message information
-	 */
-	public abstract void handleMessage(BrowserMessage message);
-
-	/**
-	 * Determines whether or not the given sequence number is still valid
-	 * for the given {@link org.eclipse.swt.browser.Browser}. If the number is valid, it is stored
-	 * as the last seen sequence number.
-	 * 
-	 * @param browser {@link org.eclipse.swt.browser.Browser} to test
-	 * @param sequence the sequence number from an incoming message
-	 * 
-	 * @return <code>true</code> if the sequence number is valid
-	 *          (greater than the last seen sequence number); <code>false</code> otherwise
-	 */
-	public abstract boolean isValidSequence(BrowserMessage message);
-
-	/**
 	 * Deregisters the listener with the given ID.
 	 * 
 	 * @param id unique identifier of the listener to be removed
@@ -90,11 +70,4 @@ public interface BrowserMessageDispatcher
 	 * @param id unique identifier of the listener to be removed
 	 */
 	void removeListener(String id);
-
-	/**
-	 * Resets the sequence number for the given {@link org.eclipse.swt.browser.Browser} to 0.
-	 * 
-	 * @param browser {@link org.eclipse.swt.browser.Browser} to reset
-	 */
-	public void resetSequence();
 }
\ No newline at end of file
diff --git a/com/aelitis/azureus/core/messenger/config/PlatformMetaDataMessenger.java b/com/aelitis/azureus/core/messenger/config/PlatformMetaDataMessenger.java
new file mode 100644
index 0000000..7f9d81c
--- /dev/null
+++ b/com/aelitis/azureus/core/messenger/config/PlatformMetaDataMessenger.java
@@ -0,0 +1,336 @@
+/*
+ * Created on December 4, 2009
+ * Created by Olivier Chalouhi
+ * 
+ * Copyright 2008 Vuze, Inc.  All rights reserved.
+ * 
+ * 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; version 2 of the License only.
+ * 
+ * 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.
+ */
+
+
+package com.aelitis.azureus.core.messenger.config;
+
+import java.util.*;
+
+import com.aelitis.azureus.core.messenger.PlatformMessengerException;
+
+public class 
+PlatformMetaDataMessenger 
+{
+	
+	private static final PlatformMessengerConfig	dispatcher = 
+			new PlatformMessengerConfig( "metadata", false );
+
+	private static final String OP_LOOKUP		= "lookup";
+	private static final String OP_SEARCH		= "search";
+	private static final String OP_SUBMIT		= "submit";
+
+
+	public static Association 
+	getAssociation(
+		String hash)
+	
+		throws PlatformMessengerException
+	{
+		Map reply = dispatcher.syncInvoke(	OP_LOOKUP, getParameter( hash ) ); 
+
+		Association assoc = getAssociation( reply );
+		
+		if ( assoc == null ){
+			
+			throw( new PlatformMessengerException( "Invalid reply: " + reply ));
+		}
+		
+		return assoc;
+	}
+	
+	private static Association getAssociation(Map reply) {
+		try {
+			Map result = (Map) reply.get("result");
+			return getAssociationFromMap(result);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	private static Association getAssociationFromMap(Map assoc) {
+		try {
+			String title = (String) assoc.get("title");
+			String db =  (String)  assoc.get("db");
+			String db_id =  (String)  assoc.get("db_id");
+			String hash =  (String)  assoc.get("hash");
+			String type =  (String)  assoc.get("type");
+			
+			if(type == null) {
+				EmptyAssociation result = new EmptyAssociation();
+				result.hash = hash;
+				return result;
+			}
+			
+			if("movie".equals(type)) {
+				String quality = (String)  assoc.get("quality");
+				String language = (String)  assoc.get("language");
+				MovieAssociation association = new MovieAssociation();
+				association.db = db;
+				association.db_id = db_id;
+				association.title = title;
+				association.quality = VideoQuality.fromString(quality);
+				association.language = new Locale(language);
+				association.hash = hash;
+				return association;
+			}
+			if("tv".equals(type)) {
+				String quality = (String)  assoc.get("quality");
+				String language = (String)  assoc.get("language");
+				TvShowAssociation association = new TvShowAssociation();
+				association.db = db;
+				association.db_id = db_id;
+				association.title = title;
+				association.quality = VideoQuality.fromString(quality);
+				association.language = new Locale(language);
+				association.hash = hash;
+				return association;
+			}
+			if("music".equals(type)) {
+				String quality = (String)  assoc.get("quality");
+				MusicAssociation association = new MusicAssociation();
+				association.db = db;
+				association.db_id = db_id;
+				association.title = title;
+				association.quality = AudioQuality.fromString(quality);
+				association.hash = hash;
+				return association;
+			}
+			
+			
+			return null;
+		
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+	
+	private static Map<String,Association> getAssociations(Map reply) {
+		try {
+			Map<String,Map> result = (Map<String,Map>) reply.get("results");
+			Map<String,Association> results = new HashMap<String, Association>();
+			for(String key : result.keySet()) {
+				results.put(key, getAssociationFromMap(result.get(key)));
+			}
+			return results;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return new HashMap<String,Association>();
+		}
+	}
+	
+	public static Map<String,Association>
+   	getAssociations(
+   		String[]		hashes )
+   	
+   		throws PlatformMessengerException
+   	{
+		Map<String,Association> result = new HashMap<String, Association>();
+		if( hashes.length == 0 ){
+			
+			return result;
+		}
+
+
+   		Map reply = dispatcher.syncInvoke(	OP_LOOKUP, getParameters(hashes) ); 
+
+   		return( getAssociations( reply ));
+   	}
+	
+	public static void 
+	addSubmission(Association assoc)
+	
+		throws PlatformMessengerException
+	{
+		Map<String,Object> parameters = new HashMap<String,Object>();
+		
+		Map<String,Object> submission = new HashMap<String,Object>();
+		submission.put("hash",assoc.hash);
+		submission.put("db", assoc.db);
+		submission.put("db_id",assoc.db_id);
+		if(assoc instanceof MovieAssociation) {
+			submission.put("type", "movie");
+			submission.put("quality", ((MovieAssociation)assoc).quality.quality);
+			submission.put("language", ((MovieAssociation)assoc).language.getLanguage());
+		}
+		if(assoc instanceof TvShowAssociation) {
+			submission.put("type", "tv");
+			submission.put("quality", ((MovieAssociation)assoc).quality.quality);
+			submission.put("language", ((MovieAssociation)assoc).language.getLanguage());
+		}
+		if(assoc instanceof MusicAssociation) {
+			submission.put("type", "music");
+			submission.put("quality", ((MovieAssociation)assoc).quality.quality);
+		}
+		
+		parameters.put("submission", submission);
+		
+		dispatcher.syncInvoke(	OP_SUBMIT, parameters ); 
+
+	}
+	
+	public static SearchResult[]
+	search(String title) throws PlatformMessengerException {
+		Map<String,String> parameters = new HashMap<String, String>();
+		parameters.put("title", title);
+		Map reply = dispatcher.syncInvoke(	OP_SEARCH, parameters );
+		List<Map> results = (List<Map>)reply.get("results");
+		SearchResult[] searchResults = new SearchResult[results.size()];
+		int i = 0;
+		for(Map result : results) {
+			SearchResult searchResult = new SearchResult();
+			searchResult.title = (String)result.get("title");
+			searchResult.db = (String)result.get("db");
+			searchResult.db_id = (String)result.get("db_id");
+			searchResults[i++] = searchResult;
+		}
+		
+		return searchResults;
+		
+	}
+	
+	public static class SearchResult {
+		String title;
+		String db;
+		String db_id;
+		
+		@Override
+		public String toString() {
+			return db + "." + db_id + " : " + title;
+		}
+		
+	}
+	
+	protected static Map
+	getParameter(
+		String		hash )
+	{
+		Map parameters = new HashMap();
+		
+		parameters.put( "hash",  hash );
+
+		return( parameters );
+	}
+	
+	protected static Map
+	getParameters(
+		String[]		hashes )
+	{
+		Map parameters = new HashMap();
+		
+		parameters.put( "hashes", hashes);
+
+		return( parameters );
+	}
+	
+	public static abstract class Association {
+		public String hash;
+	    public String db;
+	    public String db_id;
+
+	    //Cached but not stored
+	    public String title;
+	    
+	    @Override
+	    public String toString() {
+	    	return hash + " > " + db + "." + db_id + " : " + title;
+	    }
+	}
+	
+	public static class EmptyAssociation extends Association {
+
+	}
+	
+	public static abstract class VideoAssociation extends Association {
+		 public VideoQuality quality;
+		 public Locale language;
+	}
+	
+	public static class MovieAssociation extends VideoAssociation {
+		
+	}
+	
+	public static class TvShowAssociation extends VideoAssociation {
+		
+	}
+	
+	public static class MusicAssociation extends Association {
+		public AudioQuality quality;
+	}
+	
+	public static enum VideoQuality {
+		LOW("low"),DVD("dvd"),HD_720p("720p"),HD_1080p("1080p");
+		
+		String quality;
+		
+		private VideoQuality(String quality) {
+			this.quality = quality;
+		}
+		
+		public static VideoQuality fromString(String quality) {
+			quality = quality.toLowerCase();
+			if(LOW.quality.equals(quality)) return LOW;
+			if(DVD.quality.equals(quality)) return DVD;
+			if(HD_720p.quality.equals(quality)) return HD_720p;
+			if(HD_1080p.quality.equals(quality)) return HD_1080p;
+			return null;
+		}
+	}
+	
+	public static enum AudioQuality {
+		LOW("low"),HIGH("high"),LOSSLESS("lossless");
+		
+		String quality;
+		
+		private AudioQuality(String quality) {
+			this.quality = quality;
+		}
+		
+		public static AudioQuality fromString(String quality) {
+			quality = quality.toLowerCase();
+			if(LOW.quality.equals(quality)) return LOW;
+			if(HIGH.quality.equals(quality)) return HIGH;
+			if(LOSSLESS.quality.equals(quality)) return LOSSLESS;
+			return null;
+		}
+		
+	}
+	
+	public static void main(String[] args) throws Exception {
+		SearchResult[] results = search("Dark Knight");
+		for(SearchResult result : results) {
+			System.out.println(result);
+		}
+		
+		MovieAssociation assoc = new MovieAssociation();
+		assoc.db = "tmdb";
+		assoc.db_id = "155";
+		assoc.hash = "test";
+		assoc.quality = VideoQuality.DVD;
+		assoc.language = new Locale("en");
+		addSubmission(assoc);
+		
+		Association assocL = getAssociation("test");
+		System.out.println(assocL);
+		
+	}
+
+}
diff --git a/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java b/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java
index 24b6ff9..39f6ec9 100644
--- a/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java
+++ b/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java
@@ -23,6 +23,8 @@ package com.aelitis.azureus.core.messenger.config;
 
 import java.util.*;
 
+import org.gudy.azureus2.core3.util.Debug;
+
 import com.aelitis.azureus.core.messenger.PlatformMessenger;
 import com.aelitis.azureus.core.messenger.PlatformMessengerException;
 
@@ -188,6 +190,20 @@ PlatformMetaSearchMessenger
 		Boolean	show	= (Boolean)m.get( "show" );
 		Long	date 	= (Long)m.get( "modified_dt" );
 
+		float	rank_bias = 1;
+		
+		try{
+			String	str = (String)m.get( "rank_bias" );
+			
+			if ( str != null ){
+				
+				rank_bias = Float.parseFloat( str );
+			}
+		}catch( Throwable e ){
+			
+			Debug.out( e );
+		}
+		
 		if ( show == null ){
 			
 			show = new Boolean( true );
@@ -199,7 +215,7 @@ PlatformMetaSearchMessenger
 
 		}else{
 
-			return( new templateInfo( id.longValue(), date.longValue(), show.booleanValue()));
+			return( new templateInfo( id.longValue(), date.longValue(), show.booleanValue(), rank_bias ));
 
 			/*
 			SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.S");
@@ -255,16 +271,19 @@ PlatformMetaSearchMessenger
 		private long		id;
 		private long		date;
 		private boolean		visible;
+		private float		rank_bias;
 		
 		protected
 		templateInfo(
 			long		_id,
 			long		_date,
-			boolean		_visible )
+			boolean		_visible,
+			float		_rank_bias )
 		{
 			id			= _id;
 			date		= _date;
 			visible		= _visible;
+			rank_bias	= _rank_bias;
 		}
 		
 		public long
@@ -284,6 +303,12 @@ PlatformMetaSearchMessenger
 		{
 			return( visible );
 		}
+		
+		public float
+		getRankBias()
+		{
+			return( rank_bias );
+		}
 	}
 	
 	public static class
@@ -329,6 +354,12 @@ PlatformMetaSearchMessenger
 			return( info.getModifiedDate());
 		}
 		
+		public float
+		getRankBias()
+		{
+			return( info.getRankBias());
+		}
+		
 		public boolean
 		isVisible()
 		{
diff --git a/com/aelitis/azureus/core/metasearch/Engine.java b/com/aelitis/azureus/core/metasearch/Engine.java
index d075cc6..ef80ed9 100644
--- a/com/aelitis/azureus/core/metasearch/Engine.java
+++ b/com/aelitis/azureus/core/metasearch/Engine.java
@@ -54,18 +54,20 @@ Engine
 	public static final int FIELD_PLAYLINK 		= 104;
 	public static final int FIELD_DOWNLOADBTNLINK 		= 105;
 	
+	public static final int FIELD_HASH			= 200;
+	
 	public static final int[] FIELD_IDS = {
 		FIELD_NAME, FIELD_DATE, FIELD_SIZE, FIELD_PEERS, FIELD_SEEDS, FIELD_CATEGORY,
 		FIELD_COMMENTS, FIELD_CONTENT_TYPE, FIELD_DISCARD, 
 		FIELD_TORRENTLINK, FIELD_CDPLINK, FIELD_PLAYLINK,FIELD_DOWNLOADBTNLINK, FIELD_VOTES, FIELD_SUPERSEEDS,
-		FIELD_PRIVATE, FIELD_DRMKEY, FIELD_VOTES_DOWN
+		FIELD_PRIVATE, FIELD_DRMKEY, FIELD_VOTES_DOWN, FIELD_HASH
 	};
 		
 	public static final String[] FIELD_NAMES = {
 		"TITLE", "DATE", "SIZE", "PEERS", "SEEDS", "CAT",
 		"COMMENTS", "CONTENT_TYPE", "DISCARD",
 		"TORRENT", "CDP", "PLAY","DLBTN", "VOTES", "XSEEDS",
-		"PRIVATE", "DRMKEY", "VOTESDOWN"
+		"PRIVATE", "DRMKEY", "VOTESDOWN", "HASH"
 	};
 	
 	public static final int ENGINE_TYPE_REGEX		= 1;
@@ -98,6 +100,8 @@ Engine
 	public static final String	SC_AZID				= "azid";
 	public static final String	SC_FORCE_FULL		= "force_full";	// ignore if-modified stuff and force a full search
 	public static final String	SC_BATCH_PERIOD		= "batch_millis";
+	public static final String	SC_REMOVE_DUP_HASH	= "remove_dup_hash";
+
 	
 	public static final String	CT_VIDEO	= "video";
 	public static final String	CT_AUDIO	= "audio";
@@ -176,6 +180,24 @@ Engine
 	public String
 	getReferer();
 	
+	public float
+	getRankBias();
+	
+	public void
+	setRankBias(
+		float		bias );
+	
+	public void
+	setPreferredDelta(
+		float	delta  );
+	
+	public float
+	getPreferredWeighting();
+	
+	public float
+	applyRankBias(
+		float	rank );
+	
 	public boolean
 	supportsField(
 		int		field_id );
diff --git a/com/aelitis/azureus/core/metasearch/MetaSearch.java b/com/aelitis/azureus/core/metasearch/MetaSearch.java
index dfcb246..a8fd593 100644
--- a/com/aelitis/azureus/core/metasearch/MetaSearch.java
+++ b/com/aelitis/azureus/core/metasearch/MetaSearch.java
@@ -103,6 +103,10 @@ MetaSearch
 	getEngineCount();
 	
 	public void
+	enginePreferred(
+		Engine		engine );
+	
+	public void
 	addListener(
 		MetaSearchListener		listener );
 	
diff --git a/com/aelitis/azureus/core/metasearch/Result.java b/com/aelitis/azureus/core/metasearch/Result.java
index 8d23db0..8700b21 100644
--- a/com/aelitis/azureus/core/metasearch/Result.java
+++ b/com/aelitis/azureus/core/metasearch/Result.java
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
-import java.util.StringTokenizer;
 
 import org.gudy.azureus2.core3.util.DisplayFormatters;
 import org.json.simple.JSONObject;
@@ -133,7 +132,10 @@ public abstract class Result {
 		
 		int votes = getVotes();
 		if(votes > 0) {
-			totalVirtualPeers += 10 * votes;
+			if(votes > 50) {
+				votes = 50;
+			}
+			totalVirtualPeers += 5 * votes;
 		}
 		
 		int votesDown = getVotesDown();
@@ -191,11 +193,27 @@ public abstract class Result {
 			}
 		}
 		
-		if(rank > 1f) rank = 1f;
+		rank = applyRankBias( rank );
 		
 		return rank;
 	}
 	
+	protected float
+	applyRankBias(
+		float	_rank )
+	{
+		float rank = engine.applyRankBias( _rank );
+		
+		/*
+		if ( rank != _rank ){
+			
+			System.out.println( "bias applied for " + engine.getName() + ": " + _rank + "-> " + rank );
+		}
+		*/
+		
+		return( rank );
+	}
+	
 	public Map toJSONMap() {
 		Map object = new JSONObject();
 		try {
diff --git a/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java b/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java
index 9659a61..0ebb0a7 100644
--- a/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java
+++ b/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java
@@ -180,6 +180,10 @@ EngineImpl
 	
 	private int			source	= ENGINE_SOURCE_UNKNOWN;
 	
+	private float		rank_bias		= 1;
+	private float		preferred_count	= 0;
+	
+	
 		// first mappings used to canonicalise names and map field to same field
 		// typically used for categories (musak->music)
 	
@@ -241,6 +245,9 @@ EngineImpl
 		
 		source			= (int)ImportExportUtils.importLong( map, "source", ENGINE_SOURCE_UNKNOWN );
 		
+		rank_bias		= ImportExportUtils.importFloat( map, "rank_bias", 1.0f );
+		preferred_count	= ImportExportUtils.importFloat( map, "pref_count", 0.0f );
+		
 		first_level_mapping 	= importBEncodedMappings( map, "l1_map" );
 		second_level_mapping 	= importBEncodedMappings( map, "l2_map" );
 		
@@ -284,6 +291,9 @@ EngineImpl
 		
 		map.put( "source", new Long( source ));
 		
+		ImportExportUtils.exportFloat( map, "rank_bias", rank_bias );
+		ImportExportUtils.exportFloat( map, "pref_count", preferred_count );
+		
 		exportBEncodedMappings( map, "l1_map", first_level_mapping );
 		exportBEncodedMappings( map, "l2_map", second_level_mapping );
 		
@@ -644,7 +654,18 @@ EngineImpl
 			Map	m1 = exportToBencodedMap();
 			Map	m2 = other.exportToBencodedMap();
 		
-			String[]	to_remove = {"type","id","last_updated","selected","select_rec","source", "version", "az_version", "uid" };
+			String[]	to_remove = 
+				{	"type", 
+					"id", 
+					"last_updated",
+					"selected",
+					"select_rec",
+					"source",
+					"rank_bias",
+					"pref_count",
+					"version", 
+					"az_version", 
+					"uid" };
 			
 			for (int i=0;i<to_remove.length;i++){
 				
@@ -1112,6 +1133,62 @@ EngineImpl
 		}
 	}
 	
+	public float
+	getRankBias()
+	{
+		return( rank_bias );
+	}
+	
+	public void
+	setRankBias(
+		float	_rank_bias )
+	{
+		if ( rank_bias != _rank_bias ){
+			
+			rank_bias	= _rank_bias;
+		
+			configDirty();
+		}
+	}
+	
+	public void
+	setPreferredDelta(
+		float	 delta )
+	{
+		float new_pref = preferred_count + delta;
+		
+		new_pref = Math.max( 0, new_pref );
+		new_pref = Math.min( 10, new_pref );
+		
+		if ( new_pref != preferred_count ){
+			
+			preferred_count = new_pref;
+			
+			configDirty();
+		}
+	}
+	
+	public float
+	getPreferredWeighting()
+	{
+		return( preferred_count );
+	}
+	
+	public float
+	applyRankBias(
+		float	rank )
+	{
+		rank *= rank_bias;
+				
+		rank *= (1 + 0.025 * preferred_count );
+		
+		rank = Math.min( rank, 1.0f );
+		
+		rank = Math.max( rank, 0.0f );
+		
+		return( rank );
+	}
+	
 	public boolean
 	isMine()
 	{
@@ -1471,7 +1548,7 @@ EngineImpl
 	public String
 	getString()
 	{
-		return( "id=" + getId() + ", name=" + getName() + ", source=" + ENGINE_SOURCE_STRS[getSource()] + ", selected=" + SEL_STATE_STRINGS[getSelectionState()]);
+		return( "id=" + getId() + ", name=" + getName() + ", source=" + ENGINE_SOURCE_STRS[getSource()] + ", selected=" + SEL_STATE_STRINGS[getSelectionState()] + ", rb=" + rank_bias + ", pref=" + preferred_count );
 	}
 	
 	public String
diff --git a/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java b/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java
index fc7136a..f8c50d4 100644
--- a/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java
+++ b/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java
@@ -36,6 +36,7 @@ import org.gudy.azureus2.core3.util.Constants;
 import org.gudy.azureus2.core3.util.Debug;
 import org.gudy.azureus2.core3.util.DelayedEvent;
 import org.gudy.azureus2.core3.util.FileUtil;
+import org.gudy.azureus2.core3.util.HashWrapper;
 import org.gudy.azureus2.core3.util.IndentWriter;
 import org.gudy.azureus2.core3.util.SimpleTimer;
 import org.gudy.azureus2.core3.util.SystemTime;
@@ -108,6 +109,7 @@ MetaSearchImpl
 		int			type,
 		long		id,
 		long		last_updated,
+		float		rank_bias,
 		String		name,
 		String		content )
 	
@@ -458,6 +460,7 @@ MetaSearchImpl
 						details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
 						details.getId(),
 						details.getModifiedDate(),
+						details.getRankBias(),
 						details.getName(),
 						details.getValue());
 				
@@ -700,6 +703,43 @@ MetaSearchImpl
 		return( search( engines, listener, search_parameters, headers, new HashMap<String,String>(), max_results_per_engine ));
 	}
 	
+	public void
+	enginePreferred(
+		Engine		engine )
+	{
+		Engine[] engines = getEngines( true, false );
+		
+		int	num_other_preferred = 0;
+		
+		for ( Engine e: engines ){
+			
+			if ( e.getId() == engine.getId()){
+				
+				e.setPreferredDelta( +1 );
+				
+			}else{
+				
+				if ( e.getPreferredWeighting() > 0 ){
+					
+					num_other_preferred++;
+				}
+			}
+		}
+				
+		if ( num_other_preferred > 0 ){
+			
+			float negative_weighting = -1 / num_other_preferred;
+		
+			for ( Engine e: engines ){
+			
+				if ( e.getId() != engine.getId() && e.getPreferredWeighting() > 0 ){
+				
+					e.setPreferredDelta( negative_weighting );
+				}
+			}
+		}
+	}
+	
 	public Engine[] 
   	search(
   		Engine[]				engines,
@@ -722,6 +762,10 @@ MetaSearchImpl
 		
 		final long batch_millis = batch_millis_str==null?0:Long.parseLong( batch_millis_str );
 		
+		String rem_dups_str = context.get( Engine.SC_REMOVE_DUP_HASH );
+		
+		final boolean rem_dups = rem_dups_str==null?false:rem_dups_str.equalsIgnoreCase( "true" );
+
 		ResultListener	listener = 
 			new ResultListener()
 			{
@@ -731,7 +775,9 @@ MetaSearchImpl
 
 				final private Map<Engine,List<Result[]>>	pending_results = new HashMap<Engine,List<Result[]>>();
 				
-				public void 
+				final private Map<Engine,Set<String>>	result_hashes = new HashMap<Engine, Set<String>>();
+				
+				public void
 				contentReceived(
 					final Engine engine, 
 					final String content ) 
@@ -867,6 +913,108 @@ MetaSearchImpl
 					}
 				}
 				
+				protected Result[]
+             	truncateResults(
+             		Engine		engine,
+             		Result[] 	a_results,
+             		int			max )
+             	{
+					Set<String>	hash_set = result_hashes.get( engine );
+					
+					if ( hash_set == null ){
+						
+						hash_set = new HashSet<String>();
+						
+						result_hashes.put( engine, hash_set );
+					}
+						
+					List<Result>	results = new ArrayList<Result>( a_results.length );
+					
+					for ( Result r: a_results ){
+							
+						String name = r.getName();
+							
+						if ( name == null || name.trim().length() == 0 ){
+								
+							continue;
+						}
+					
+						if ( rem_dups ){
+
+							String hash = r.getHash();
+							
+							if ( 	hash == null ||
+									hash.length() == 0 ){
+								
+								results.add( r );
+								
+							}else{
+								
+								if ( !hash_set.contains( hash )){
+									
+									results.add( r );
+									
+									hash_set.add( hash );
+								}
+							}
+						}else{
+							
+							results.add( r );
+						}
+					}
+					
+             		if ( max < results.size() ){
+             		
+             			log( "Truncating search results for " + engine.getName() + " from " + results.size() + " to " + max );
+             			
+             			Collections.sort(
+             				results,
+             				new Comparator<Result>()
+             				{
+             					Map<Result,Float>	ranks = new HashMap<Result, Float>();
+             					
+             					public int 
+             					compare(
+             						Result r1, 
+             						Result r2) 
+             					{						
+             						Float	rank1 = (Float)ranks.get(r1);
+             						
+             						if ( rank1 == null ){	
+             							rank1 = new Float(r1.getRank());
+             							ranks.put( r1, rank1 );
+             						}
+             						
+             						Float	rank2 = (Float)ranks.get(r2);
+             						
+             						if ( rank2 == null ){	
+             							rank2 = new Float(r2.getRank());
+             							ranks.put( r2, rank2 );
+             						}
+             						
+             						return( -rank1.compareTo( rank2 ));
+             					}
+             				});
+             		
+             			Result[] x = new Result[max];
+             			
+             			int	pos = 0;
+             			
+             			while( pos < max ){
+             			
+             				x[pos] = results.get( pos );
+             				
+             				pos++;
+             			}
+             			
+             			return( x );
+             			
+             		}else{
+             			
+             			return( results.toArray( new Result[ results.size()] ));
+             		}
+             	}
+				
 				public void 
 				engineFailed(
 					final Engine 	engine,
@@ -924,57 +1072,6 @@ MetaSearchImpl
 		return( engines );
 	}
 	
-	protected Result[]
-	truncateResults(
-		Engine		engine,
-		Result[] 	results,
-		int			max )
-	{
-		if ( max < results.length ){
-		
-			log( "Truncating search results for " + engine.getName() + " from " + results.length + " to " + max );
-			
-			Arrays.sort(
-				results,
-				new Comparator<Result>()
-				{
-					Map<Result,Float>	ranks = new HashMap<Result, Float>();
-					
-					public int 
-					compare(
-						Result r1, 
-						Result r2) 
-					{						
-						Float	rank1 = (Float)ranks.get(r1);
-						
-						if ( rank1 == null ){	
-							rank1 = new Float(r1.getRank());
-							ranks.put( r1, rank1 );
-						}
-						
-						Float	rank2 = (Float)ranks.get(r2);
-						
-						if ( rank2 == null ){	
-							rank2 = new Float(r2.getRank());
-							ranks.put( r2, rank2 );
-						}
-						
-						return( -rank1.compareTo( rank2 ));
-					}
-				});
-		
-			Result[] x = new Result[max];
-			
-			System.arraycopy( results, 0, x, 0, max );
-			
-			return( x );
-			
-		}else{
-			
-			return( results );
-		}
-	}
-	
 	public void
 	addListener(
 		MetaSearchListener		listener )
diff --git a/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java b/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java
index 0fa3fae..06f8486 100644
--- a/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java
+++ b/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java
@@ -53,7 +53,6 @@ import com.aelitis.azureus.core.metasearch.Engine;
 import com.aelitis.azureus.core.metasearch.MetaSearch;
 import com.aelitis.azureus.core.metasearch.MetaSearchException;
 import com.aelitis.azureus.core.metasearch.MetaSearchManager;
-import com.aelitis.azureus.core.metasearch.MetaSearchManagerFactory;
 import com.aelitis.azureus.core.metasearch.Result;
 import com.aelitis.azureus.core.metasearch.ResultListener;
 import com.aelitis.azureus.core.metasearch.SearchParameter;
@@ -478,12 +477,12 @@ MetaSearchManagerImpl
 				// popular ones are selected if in 'auto' mode
 				// manually selected ones are, well, manually selected
 			
-			Map		vuze_selected_ids 		= new HashMap();
-			Map		vuze_preload_ids 		= new HashMap();
+			Map<Long,PlatformMetaSearchMessenger.templateInfo>		vuze_selected_ids 		= new HashMap<Long, PlatformMetaSearchMessenger.templateInfo>();
+			Map<Long,PlatformMetaSearchMessenger.templateInfo>		vuze_preload_ids 		= new HashMap<Long,PlatformMetaSearchMessenger.templateInfo>();
 			
-			Set		featured_ids 			= new HashSet();
-			Set		popular_ids 			= new HashSet();
-			Set		manual_vuze_ids 		= new HashSet();
+			Set<Long>		featured_ids 			= new HashSet<Long>();
+			Set<Long>		popular_ids 			= new HashSet<Long>();
+			Set<Long>		manual_vuze_ids 		= new HashSet<Long>();
 			
 			boolean		auto_mode = isAutoMode();
 					
@@ -505,9 +504,7 @@ MetaSearchManagerImpl
 					
 					Long key = new Long( template.getId());
 					
-					vuze_selected_ids.put( 
-						key, 
-						new Long( template.getModifiedDate()));
+					vuze_selected_ids.put( key,	template );
 					
 					featured_ids.add( key );
 					
@@ -538,9 +535,7 @@ MetaSearchManagerImpl
 							
 							if ( !vuze_selected_ids.containsKey( key )){
 								
-								vuze_selected_ids.put( 
-									key, 
-									new Long( template.getModifiedDate()));
+								vuze_selected_ids.put( key,	template );
 								
 								popular_ids.add( key );
 								
@@ -550,9 +545,7 @@ MetaSearchManagerImpl
 							
 							if ( !vuze_preload_ids.containsKey( key )){
 								
-								vuze_preload_ids.put( 
-									key, 
-									new Long( template.getModifiedDate()));
+								vuze_preload_ids.put( key, template );
 																
 								preload_str += (preload_str.length()==0?"":",") + key;
 							}
@@ -589,13 +582,13 @@ MetaSearchManagerImpl
 					
 					long[]	manual_ids = new long[manual_vuze_ids.size()];
 					
-					Iterator it = manual_vuze_ids.iterator();
+					Iterator<Long> it = manual_vuze_ids.iterator();
 					
 					int	pos = 0;
 					
 					while( it.hasNext()){
 						
-						manual_ids[pos++] = ((Long)it.next()).longValue();
+						manual_ids[pos++] = it.next().longValue();
 					}
 					
 					PlatformMetaSearchMessenger.templateInfo[] manual = PlatformMetaSearchMessenger.getTemplateDetails( manual_ids );
@@ -611,9 +604,7 @@ MetaSearchManagerImpl
 						
 						Long	key = new Long( template.getId());
 													
-						vuze_selected_ids.put( 
-							key, 
-							new Long( template.getModifiedDate()));
+						vuze_selected_ids.put( key, template );
 														
 						manual_str += (manual_str.length()==0?"":",") + key;
 					}
@@ -621,7 +612,7 @@ MetaSearchManagerImpl
 				
 				log( "Manual templates: " + manual_str );
 				
-				Map existing_engine_map = new HashMap();
+				Map<Long,Engine> existing_engine_map = new HashMap<Long,Engine>();
 				
 				String existing_str = "";
 				
@@ -645,16 +636,19 @@ MetaSearchManagerImpl
 				
 					// update any that are out of date
 				
-				Iterator it = vuze_selected_ids.entrySet().iterator();
+				Iterator<Map.Entry<Long,PlatformMetaSearchMessenger.templateInfo>> it = vuze_selected_ids.entrySet().iterator();
 				
 				while( it.hasNext()){
 					
-					Map.Entry entry = (Map.Entry)it.next();
+					Map.Entry<Long,PlatformMetaSearchMessenger.templateInfo> entry = it.next();
 					
 					vuze_preload_ids.remove( entry.getKey());
 					
-					long	id 			= ((Long)entry.getKey()).longValue();
-					long	modified 	= ((Long)entry.getValue()).longValue();
+					long	id 			= entry.getKey().longValue();
+					
+					PlatformMetaSearchMessenger.templateInfo template = entry.getValue();
+					
+					long	modified 	= template.getModifiedDate();
 									
 					Engine this_engine = (Engine)existing_engine_map.get( new Long(id));
 					
@@ -675,18 +669,25 @@ MetaSearchManagerImpl
 										details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
 										details.getId(),
 										details.getModifiedDate(),
+										details.getRankBias(),
 										details.getName(),
 										details.getValue());
 								
 								this_engine.setSource( Engine.ENGINE_SOURCE_VUZE );
-								
+																
 								meta_search.addEngine( this_engine );
 								
 							}catch( Throwable e ){
 								
 								log( "Failed to import engine '" + details.getValue() + "'", e );
 							}
-						}			
+						}	
+					}else if ( this_engine.getRankBias() != template.getRankBias()){
+						
+						this_engine.setRankBias( template.getRankBias());
+						
+						log( "Updating rank bias for " + this_engine.getString() + " to " + template.getRankBias());
+
 					}else{
 						
 						log( "Not updating " + this_engine.getString() + " as unchanged" );
@@ -709,7 +710,7 @@ MetaSearchManagerImpl
 				
 				while( it.hasNext()){
 					
-					Map.Entry entry = (Map.Entry)it.next();
+					Map.Entry<Long,PlatformMetaSearchMessenger.templateInfo> entry = it.next();
 					
 					long	id 			= ((Long)entry.getKey()).longValue();
 									
@@ -730,13 +731,14 @@ MetaSearchManagerImpl
 										details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
 										details.getId(),
 										details.getModifiedDate(),
+										details.getRankBias(),
 										details.getName(),
 										details.getValue());
 								
 								this_engine.setSource( Engine.ENGINE_SOURCE_VUZE );
 								
 								this_engine.setSelectionState( Engine.SEL_STATE_DESELECTED );
-								
+																
 								meta_search.addEngine( this_engine );
 								
 							}catch( Throwable e ){
@@ -843,14 +845,14 @@ MetaSearchManagerImpl
 
 			Engine[]	engines = meta_search.getEngines( false, false );
 			
-			Map	engine_map = new HashMap();
+			Map<Long,Engine>	engine_map = new HashMap<Long,Engine>();
 			
 			for( int i=0;i<engines.length;i++){
 				
 				engine_map.put( new Long( engines[i].getId()), engines[i] );
 			}
 				
-			Set selected_engine_set = new HashSet();
+			Set<Engine> selected_engine_set = new HashSet<Engine>();
 			
 			for (int i=0;i<ids.length;i++){
 				
@@ -892,6 +894,7 @@ MetaSearchManagerImpl
 							details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
 							details.getId(),
 							details.getModifiedDate(),
+							details.getRankBias(),
 							details.getName(),
 							details.getValue());
 							
@@ -947,7 +950,9 @@ MetaSearchManagerImpl
 		}
 		
 		try{
-			Engine engine = meta_search.importFromJSONString( type,	id,	SystemTime.getCurrentTime(),name, json_value );
+			Engine engine = 
+				meta_search.importFromJSONString( 
+					type, id, SystemTime.getCurrentTime(), 1, name, json_value );
 			
 			engine.setSource( Engine.ENGINE_SOURCE_LOCAL );
 			
@@ -1087,7 +1092,7 @@ MetaSearchManagerImpl
 	loadFromVuzeFile(
 		VuzeFile		vf )
 	{
-		List	result = new ArrayList();
+		List<Engine>	result = new ArrayList<Engine>();
 		
 		VuzeFileComponent[] comps = vf.getComponents();
 		
@@ -1107,7 +1112,7 @@ MetaSearchManagerImpl
 			}
 		}
 		
-		return((Engine[])result.toArray(new Engine[result.size()]));
+		return(result.toArray(new Engine[result.size()]));
 	}
 	
 	public long
diff --git a/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java b/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java
index 72c9def..73f00d8 100644
--- a/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java
+++ b/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java
@@ -195,7 +195,7 @@ PluginResult
 	{
 		if (((PluginEngine)getEngine()).useAccuracyForRank()){
 			
-			return( getAccuracy());
+			return( applyRankBias( getAccuracy()));
 		}
 		
 		long	l_rank = getLongProperty( SearchResult.PR_RANK );
@@ -223,7 +223,7 @@ PluginResult
 			rank = 0;
 		}
 		
-		return( rank / 100 );
+		return( applyRankBias( rank / 100 ));
 	}
 	
 	public float 
diff --git a/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java b/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java
index 9c2b29a..4b26eb0 100644
--- a/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java
+++ b/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java
@@ -211,7 +211,8 @@ public class WebResult extends Result {
 	getRank()
 	{
 		if ( rank != -1 ){
-			return( rank );
+			
+			return( applyRankBias( rank ));
 		}
 		
 		return( super.getRank());
diff --git a/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java b/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java
index 28d6ecb..b7c3a7f 100644
--- a/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java
+++ b/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java
@@ -343,6 +343,9 @@ JSONEngine
 									case FIELD_VOTES_DOWN :
 										result.setVotesDownFromHTML(fieldContent);
 										break;
+									case FIELD_HASH :
+										result.setHash(fieldContent);
+										break;
 									default:
 										break;
 									}
diff --git a/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java b/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java
index 3660a2f..f46fb62 100644
--- a/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java
+++ b/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java
@@ -375,6 +375,9 @@ RegexEngine
 											case FIELD_VOTES_DOWN :
 												result.setVotesDownFromHTML(groupContent);
 												break;
+											case FIELD_HASH :
+												result.setHash(groupContent);
+												break;
 											default:
 												fields_matched--;
 												break;
diff --git a/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java b/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java
index 420a7cd..0a9b162 100644
--- a/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java
+++ b/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java
@@ -198,6 +198,8 @@ NetworkAdmin
 	
 	public abstract InetAddress getDefaultPublicAddressV6();
 	
+	public abstract boolean	hasDHTIPV6();
+	
 	public abstract void
 	addPropertyChangeListener(
 		NetworkAdminPropertyChangeListener	listener );
diff --git a/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java b/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java
index 99acc9e..dede097 100644
--- a/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java
+++ b/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java
@@ -72,14 +72,59 @@ NetworkAdminImpl
 	
 	private static final boolean	FULL_INTF_PROBE	= false;
 	
-	private Set<NetworkInterface>			old_network_interfaces;
+	private static InetAddress anyLocalAddress;
+	private static InetAddress anyLocalAddressIPv4;
+	private static InetAddress anyLocalAddressIPv6;
+	private static InetAddress localhostV4;
+	private static InetAddress localhostV6;
+	
+	static
+	{
+		try
+		{
+			anyLocalAddressIPv4 	= InetAddress.getByAddress(new byte[] { 0,0,0,0 });
+			anyLocalAddressIPv6  	= InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0});
+			anyLocalAddress			= new InetSocketAddress(0).getAddress();
+			localhostV4 = InetAddress.getByAddress(new byte[] {127,0,0,1});
+			localhostV6 = InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1});
+		} catch (UnknownHostException e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	
+	
+	
+	private Set<NetworkInterface>		old_network_interfaces;
 	private InetAddress[]				currentBindIPs			= new InetAddress[] { null };
 	private boolean						supportsIPv6withNIO		= true;
 	private boolean						supportsIPv6 = true;
 	private boolean						supportsIPv4 = true;
 	
+	private boolean						IPv6_enabled;
+	
+	{
+		COConfigurationManager.addAndFireParameterListener(
+				"IPV6 Enable Support",
+				new ParameterListener()
+				{
+					public void 
+					parameterChanged(
+						String parameterName )
+					{
+						setIPv6Enabled( COConfigurationManager.getBooleanParameter("IPV6 Enable Support"));
+					}
+				});
+	}
+	
+	private int roundRobinCounterV4 = 0;
+	private int roundRobinCounterV6 = 0;
+	
+
 	private CopyOnWriteList	listeners = new CopyOnWriteList();
-		
+	
+	
 	private NetworkAdminRouteListener
 		trace_route_listener = new NetworkAdminRouteListener()
 		{
@@ -131,6 +176,8 @@ NetworkAdminImpl
 			}
 		};
 		
+	private boolean 	initialised;
+	
 	public
 	NetworkAdminImpl()
 	{
@@ -155,22 +202,42 @@ NetworkAdminImpl
 				perform(
 					TimerEvent event )
 				{
-					checkNetworkInterfaces( false );
+					checkNetworkInterfaces( false, false );
 				}
 			});
 		
 			// populate initial values
 		
-		checkNetworkInterfaces(true);
+		checkNetworkInterfaces( true, true );
 		
-		checkDefaultBindAddress(true);
+		checkDefaultBindAddress( true );
 		
 		AEDiagnostics.addEvidenceGenerator( this );
+		
+		initialised = true;
+	}
+	
+	protected void
+	setIPv6Enabled(
+		boolean enabled )
+	{
+		IPv6_enabled	= enabled;
+		
+		supportsIPv6withNIO		= enabled;
+		supportsIPv6 			= enabled;
+
+		if ( initialised ){
+			
+			checkNetworkInterfaces( false, true );
+			
+			checkDefaultBindAddress( false );
+		}
 	}
 	
 	protected void
 	checkNetworkInterfaces(
-		boolean	first_time )
+		boolean		first_time,
+		boolean		force )
 	{
 		try{
 			Enumeration 	nis = NetworkInterface.getNetworkInterfaces();
@@ -224,9 +291,8 @@ NetworkAdminImpl
 				old_network_interfaces = new_network_interfaces;
 			}
 			
-			if ( changed ){
-				
-				
+			if ( changed || force ){
+							
 				boolean newV6 = false;
 				boolean newV4 = false;
 				
@@ -242,12 +308,16 @@ NetworkAdminImpl
 						{
 							InetAddress ia = (InetAddress) addresses.nextElement();
 
-							if (ia.isLoopbackAddress())
+							if (ia.isLoopbackAddress()){
 								continue;
-							if (ia instanceof Inet6Address && !ia.isLinkLocalAddress())
-								newV6 = true;
-							else if (ia instanceof Inet4Address)
+							}
+							if (ia instanceof Inet6Address && !ia.isLinkLocalAddress()){
+								if ( IPv6_enabled ){
+									newV6 = true;
+								}
+							}else if (ia instanceof Inet4Address){
 								newV4 = true;
+							}
 						}
 					}
 				}
@@ -293,9 +363,6 @@ NetworkAdminImpl
 		}
 	}
 	
-	private int roundRobinCounterV4 = 0;
-	private int roundRobinCounterV6 = 0;
-	
 	public InetAddress getMultiHomedOutgoingRoundRobinBindAddress(InetAddress target)
 	{
 		InetAddress[]	addresses = currentBindIPs;
@@ -325,26 +392,7 @@ NetworkAdminImpl
 			roundRobinCounterV4 = i;
 		return toReturn != null ? toReturn : (v6 ? localhostV6 : localhostV4);
 	}
-	
-	private static InetAddress anyLocalAddressIPv4;
-	private static InetAddress anyLocalAddressIPv6;
-	private static InetAddress localhostV4;
-	private static InetAddress localhostV6;
-	
-	static
-	{
-		try
-		{
-			anyLocalAddressIPv4 = InetAddress.getByAddress(new byte[] { 0,0,0,0 });
-			anyLocalAddressIPv6  = InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0});
-			localhostV4 = InetAddress.getByAddress(new byte[] {127,0,0,1});
-			localhostV6 = InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1});
-		} catch (UnknownHostException e)
-		{
-			e.printStackTrace();
-		}
-	}
-	
+		
 	public InetAddress[] getMultiHomedServiceBindAddresses(boolean nio)
 	{
 		InetAddress[] bindIPs = currentBindIPs;
@@ -416,77 +464,101 @@ NetworkAdminImpl
 	
 	private InetAddress[] calcBindAddresses(final String addressString, boolean enforceBind)
 	{
-		ArrayList addrs = new ArrayList();
+		ArrayList<InetAddress> addrs = new ArrayList<InetAddress>();
 		
 		Pattern addressSplitter = Pattern.compile(";");
 		Pattern interfaceSplitter = Pattern.compile("[\\]\\[]");
 		
 		String[] tokens = addressSplitter.split(addressString);
 
-			addressLoop: for(int i=0;i<tokens.length;i++)
+addressLoop: 
+		for(int i=0;i<tokens.length;i++)
+		{
+			String currentAddress = tokens[i];
+			
+			currentAddress = currentAddress.trim();
+			
+			if ( currentAddress.length() == 0 ){
+				continue;
+			}
+			
+			InetAddress parsedAddress = null;
+			
+			try
+			{ // literal ipv4 or ipv6 address
+				if(currentAddress.indexOf('.') != -1 || currentAddress.indexOf(':') != -1)
+					parsedAddress = InetAddress.getByName(currentAddress);
+			} catch (Exception e)
+			{ // ignore, could be an interface name containing a ':'
+			}
+			
+			if(parsedAddress != null)
 			{
-				String currentAddress = tokens[i];
-				InetAddress parsedAddress = null;
-				
 				try
-				{ // literal ipv4 or ipv6 address
-					if(currentAddress.indexOf('.') != -1 || currentAddress.indexOf(':') != -1)
-						parsedAddress = InetAddress.getByName(currentAddress);
-				} catch (Exception e)
-				{ // ignore, could be an interface name containing a ':'
-				}
-				
-				if(parsedAddress != null)
 				{
-					try
-					{
-						// allow wildcard address as 1st address, otherwise only interface addresses
-						if((!parsedAddress.isAnyLocalAddress() || addrs.size() > 0) && NetworkInterface.getByInetAddress(parsedAddress) == null)
-							continue;
-					} catch (SocketException e)
-					{
-						Debug.printStackTrace(e);
+					// allow wildcard address as 1st address, otherwise only interface addresses
+					if((!parsedAddress.isAnyLocalAddress() || addrs.size() > 0) && NetworkInterface.getByInetAddress(parsedAddress) == null)
 						continue;
-					}
-					addrs.add(parsedAddress);
-					continue;
-				}
-					
-				// interface name
-				String[] ifaces = interfaceSplitter.split(currentAddress);
-
-				NetworkInterface netInterface = null;
-				try
-				{
-					netInterface = NetworkInterface.getByName(ifaces[0]);
 				} catch (SocketException e)
 				{
-					e.printStackTrace(); // should not happen
-				}
-				if(netInterface == null)
+					Debug.printStackTrace(e);
 					continue;
+				}
+				addrs.add(parsedAddress);
+				continue;
+			}
+				
+			// interface name
+			String[] ifaces = interfaceSplitter.split(currentAddress);
 
-				Enumeration interfaceAddresses = netInterface.getInetAddresses();
-				if(ifaces.length != 2)
-					while(interfaceAddresses.hasMoreElements())
-						addrs.add(interfaceAddresses.nextElement());
-				else
-				{
-					int selectedAddress = 0;
-					try { selectedAddress = Integer.parseInt(ifaces[1]); }
-					catch (NumberFormatException e) {} // ignore, user could by typing atm
-					for(int j=0;interfaceAddresses.hasMoreElements();j++,interfaceAddresses.nextElement())
-						if(j==selectedAddress)
-						{
-							addrs.add(interfaceAddresses.nextElement());
-							continue addressLoop;						
-						}
+			NetworkInterface netInterface = null;
+			try
+			{
+				netInterface = NetworkInterface.getByName(ifaces[0]);
+			} catch (SocketException e)
+			{
+				e.printStackTrace(); // should not happen
+			}
+			if(netInterface == null)
+				continue;
+
+			Enumeration interfaceAddresses = netInterface.getInetAddresses();
+			if(ifaces.length != 2)
+				while(interfaceAddresses.hasMoreElements())
+					addrs.add((InetAddress)interfaceAddresses.nextElement());
+			else
+			{
+				int selectedAddress = 0;
+				try { selectedAddress = Integer.parseInt(ifaces[1]); }
+				catch (NumberFormatException e) {} // ignore, user could by typing atm
+				for(int j=0;interfaceAddresses.hasMoreElements();j++,interfaceAddresses.nextElement())
+					if(j==selectedAddress)
+					{
+						addrs.add((InetAddress)interfaceAddresses.nextElement());
+						continue addressLoop;						
+					}
+			}
+		}
+		
+		if ( !IPv6_enabled ){
+			
+			Iterator<InetAddress> it = addrs.iterator();
+			
+			while( it.hasNext()){
+				
+				if ( it.next() instanceof Inet6Address ){
+					
+					it.remove();
 				}
 			}
+		}
 		
-		if(addrs.size() < 1)
+		if(addrs.size() < 1){
 			return new InetAddress[] {enforceBind ? localhostV4 : (hasIPV6Potential() ? anyLocalAddressIPv6 : anyLocalAddressIPv4)};
-		return (InetAddress[])addrs.toArray(new InetAddress[0]);
+		}
+		
+		return( addrs.toArray(new InetAddress[addrs.size()]));
+
 	}
 	
 	
@@ -526,8 +598,10 @@ NetworkAdminImpl
 			Enumeration addresses = ni.getInetAddresses();
 			str+=ni.getName()+"\t("+ni.getDisplayName()+")\n";
 			int i = 0;
-			while(addresses.hasMoreElements())
-				str+="\t"+ni.getName()+"["+(i++)+"]\t"+((InetAddress)addresses.nextElement()).getHostAddress()+"\n";
+			while(addresses.hasMoreElements()){
+				InetAddress address = (InetAddress)addresses.nextElement();
+				str+="\t"+ni.getName()+"["+(i++)+"]\t"+(address).getHostAddress()+"\n";
+			}
 		}
 		return (str);
 	}
@@ -1007,6 +1081,19 @@ NetworkAdminImpl
 		return null;
 	}
 	
+	public boolean
+	hasDHTIPV6()
+	{
+		if ( hasIPV6Potential(false)){
+			
+			InetAddress v6 = getDefaultPublicAddressV6();
+			
+			return( v6 != null && !AddressUtils.isTeredo( v6 ));
+		}
+		
+		return( false );
+	}
+	
 	protected void
 	firePropertyChange(
 		String	property )
@@ -2063,6 +2150,8 @@ NetworkAdminImpl
 				
 				writer.println( "bindable: " + getString( getBindableAddresses()));
 				
+				writer.println( "ipv6_enabled=" + IPv6_enabled );
+
 				writer.println( "ipv4_potential=" + hasIPV4Potential());
 				writer.println( "ipv6_potential=" + hasIPV6Potential(false) + "/" + hasIPV6Potential(true));
 	
@@ -2468,7 +2557,14 @@ NetworkAdminImpl
 			
 			while( e.hasMoreElements()){
 				
-				addresses.add( new networkAddress((InetAddress)e.nextElement()));
+				InetAddress address = (InetAddress)e.nextElement();
+				
+				if ((address instanceof Inet6Address) && !IPv6_enabled ){
+					
+					continue;
+				}
+				
+				addresses.add( new networkAddress(address));
 			}
 	
 			return((NetworkAdminNetworkInterfaceAddress[])addresses.toArray( new NetworkAdminNetworkInterfaceAddress[addresses.size()]));
diff --git a/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java b/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java
index 4fa969f..7b79062 100644
--- a/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java
+++ b/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java
@@ -57,7 +57,7 @@ public class VirtualChannelSelectorImpl {
 		
 			// hack for 10.6 - will switch to not doing System.setProperty( "java.nio.preferSelect", "true" ); later
 		
-			//boolean	is_osx_16	= false;
+		boolean	is_osx_16	= false;
 		
 		try{
 				// unfortunately the package maintainer has set os.name to Linux for FreeBSD...
@@ -91,7 +91,6 @@ public class VirtualChannelSelectorImpl {
 						is_freebsd_7_or_higher = Integer.parseInt(digits) >= 7;
 					}	
 				}
-			/*
 			}else if ( Constants.isOSX ){
 				
 				String os_version = System.getProperty( "os.version", "" );
@@ -100,19 +99,17 @@ public class VirtualChannelSelectorImpl {
 					
 					is_osx_16 = true;
 				}
-			*/
 			}
 		}catch( Throwable e ){
 			
 			e.printStackTrace();
 		}
 			
-		MAYBE_BROKEN_SELECT = is_freebsd_7_or_higher || is_diablo; // || is_osx_16;
+		MAYBE_BROKEN_SELECT = is_freebsd_7_or_higher || is_diablo || is_osx_16;
 		
 		if ( MAYBE_BROKEN_SELECT ){
 			
-			System.out.println( "Enabling broken select detection: diablo=" + is_diablo + ", freebsd 7+=" + is_freebsd_7_or_higher ); //  + ", osx 10.6=" + is_osx_16 );
-
+			System.out.println( "Enabling broken select detection: diablo=" + is_diablo + ", freebsd 7+=" + is_freebsd_7_or_higher + ", osx 10.6=" + is_osx_16 );
 		}
 	}
 	
diff --git a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java
index 0334bd5..eb71a95 100644
--- a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java
+++ b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java
@@ -37,7 +37,7 @@ import com.aelitis.azureus.core.peermanager.messaging.*;
  */
 public class BTMessageDecoder implements MessageStreamDecoder {
   private static final int MIN_MESSAGE_LENGTH = 1;  //for type id
-  private static final int MAX_MESSAGE_LENGTH = 16393;  //should never be > 16KB+9B, as we never request chunks > 16KB
+  private static final int MAX_MESSAGE_LENGTH = 16*1024+128;  //should never be > 16KB+9B, as we never request chunks > 16KB - update, some LT extensions can be bigger
   private static final int HANDSHAKE_FAKE_LENGTH = 323119476;  //(byte)19 + "Bit" readInt() value of header
 
   private static final byte SS = DirectByteBuffer.SS_MSG;
diff --git a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java
index 9b8418b..0ba6c17 100644
--- a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java
+++ b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java
@@ -20,6 +20,9 @@
  */
 package com.aelitis.azureus.core.peermanager.messaging.bittorrent.ltep;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.gudy.azureus2.core3.util.DirectByteBuffer;
 
 import com.aelitis.azureus.core.peermanager.messaging.Message;
@@ -33,6 +36,8 @@ import com.aelitis.azureus.core.peermanager.messaging.bittorrent.BTMessageDecode
  */
 public class LTMessageDecoder extends BTMessageDecoder {
 	
+	private Map<Byte,byte[]>	entension_handlers = new HashMap<Byte, byte[]>();
+	
 	public LTMessageDecoder() {}
 
 	protected Message createMessage(DirectByteBuffer ref_buff) throws MessageException {
@@ -52,10 +57,29 @@ public class LTMessageDecoder extends BTMessageDecoder {
 			case 1:
 				return MessageManager.getSingleton().createMessage(LTMessage.ID_UT_PEX_BYTES, ref_buff, (byte)1);
 			default: {
+			  byte[]	message_id;
+			  synchronized( entension_handlers ){
+					
+				  message_id = entension_handlers.get( id );
+			  }
+			  
+			  if ( message_id != null ){
+				return MessageManager.getSingleton().createMessage( message_id, ref_buff, (byte)1);
+			  }
 		      System.out.println( "Unknown LTEP message id [" +id+ "]" );
 		      throw new MessageException( "Unknown LTEP message id [" +id+ "]" );
 			}
 		}
 	}
-
+	
+	public void
+	addExtensionHandler(
+		byte		id,
+		byte[]		message_id )
+	{
+		synchronized( entension_handlers ){
+		
+			entension_handlers.put( id, message_id );
+		}
+	}
 }
diff --git a/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java b/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java
index cedd134..bb3ae83 100644
--- a/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java
+++ b/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java
@@ -36,7 +36,6 @@ import org.gudy.azureus2.plugins.tracker.web.TrackerWebPageGenerator;
 import org.gudy.azureus2.plugins.tracker.web.TrackerWebPageRequest;
 import org.gudy.azureus2.plugins.tracker.web.TrackerWebPageResponse;
 import org.gudy.azureus2.plugins.ui.config.ConfigSection;
-import org.gudy.azureus2.plugins.ui.model.BasicPluginConfigModel;
 import org.gudy.azureus2.ui.webplugin.WebPlugin;
 
 
@@ -44,7 +43,7 @@ public class
 RSSGeneratorPlugin
 	extends WebPlugin
 {
-	public static final String	PLUGIN_NAME		= "Internal RSS";
+	public static final String	PLUGIN_NAME		= "Local RSS etc.";
 	public static final int 	DEFAULT_PORT    = 6905;
 	public static final String	DEFAULT_ACCESS	= "all";
 	
@@ -112,6 +111,7 @@ RSSGeneratorPlugin
 			COConfigurationManager.setParameter( "rss.internal.migrated", true );	
 		}
 		
+		defaults.put( WebPlugin.PR_ENABLE, new Boolean( COConfigurationManager.getBooleanParameter( "Plugin.default.device.rss.enable", false )));
 		defaults.put( WebPlugin.PR_DISABLABLE, new Boolean( true ));
 	    defaults.put( WebPlugin.PR_PORT, rss_port );
 	    defaults.put( WebPlugin.PR_ACCESS, rss_access );
@@ -119,12 +119,8 @@ RSSGeneratorPlugin
 	    defaults.put( WebPlugin.PR_ENABLE_KEEP_ALIVE, new Boolean(true));
 	    defaults.put( WebPlugin.PR_HIDE_RESOURCE_CONFIG, new Boolean(true));
 	    defaults.put( WebPlugin.PR_PAIRING_SID, "rss" );
-
-	    BasicPluginConfigModel config = 
-	    	plugin_interface.getUIManager().createBasicPluginConfigModel(
-	    		ConfigSection.SECTION_ROOT, "rss" );
 	    
-	    defaults.put( WebPlugin.PR_CONFIG_MODEL, config );
+	    defaults.put( WebPlugin.PR_CONFIG_MODEL_PARAMS, new String[]{ ConfigSection.SECTION_ROOT, "rss" });
 	}
 	
 	public static RSSGeneratorPlugin
diff --git a/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java b/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java
index f73aefa..b25e3e9 100644
--- a/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java
+++ b/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java
@@ -569,7 +569,8 @@ SpeedManagerImpl
 						boolean	miss = false;
 						
 						int	worst_value	= -1;
-						
+						int	min_value	= Integer.MAX_VALUE;
+
 						int	num_values	= 0;
 						int	total		= 0;
 						
@@ -583,13 +584,18 @@ SpeedManagerImpl
 									
 									int	rtt = round_trip_times[i];
 									
-									if ( rtt > 0 ){
+									if ( rtt >= 0 ){
 										
 										if ( rtt > worst_value ){
 											
 											worst_value = rtt;
 										}
 										
+										if ( rtt < min_value ){
+											
+											min_value = rtt;
+										}
+										
 										num_values++;
 										
 										total += rtt;
@@ -620,9 +626,15 @@ SpeedManagerImpl
 								num_values--;
 							}
 
-							if ( num_values> 0 ){
+							if ( num_values > 0 ){
+																
+								int	average = total/num_values;
 								
-								addPingHistory( total/num_values, sources_changed );
+									// bias towards min
+
+								average = ( average + min_value ) / 2;
+		
+								addPingHistory( average, sources_changed );
 							}
 						}
 					}
diff --git a/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java b/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java
index f880eb8..d6c9656 100644
--- a/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java
+++ b/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java
@@ -243,7 +243,7 @@ SpeedManagerAlgorithmProviderV1
 			
 			int	rtt =  sources[i].getPingTime();
 
-			if ( rtt > 0 && rtt < min_rtt ){
+			if ( rtt >= 0 && rtt < min_rtt ){
 				
 				min_rtt	= rtt;
 			}
@@ -299,6 +299,10 @@ SpeedManagerAlgorithmProviderV1
 		
 		int	ping_average = ping_total/ping_count;
 				
+			// bias towards min
+		
+		ping_average = ( ping_average + min_rtt ) / 2;
+		
 		int	running_average = (int)ping_average_history.update( ping_average );
 		
 		if ( ping_average > max_ping ){
diff --git a/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java b/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java
index 143cd3e..b21cc0b 100644
--- a/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java
+++ b/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java
@@ -246,7 +246,7 @@ SpeedManagerAlgorithmProviderV3
 			
 			int	rtt =  sources[i].getPingTime();
 
-			if ( rtt > 0 && rtt < min_rtt ){
+			if ( rtt >= 0 && rtt < min_rtt ){
 				
 				min_rtt	= rtt;
 			}
@@ -301,7 +301,11 @@ SpeedManagerAlgorithmProviderV3
 		}
 		
 		int	ping_average = ping_total/ping_count;
-				
+			
+			// bias towards min
+		
+		ping_average = ( ping_average + min_rtt ) / 2;
+
 		int	running_average = (int)ping_average_history.update( ping_average );
 		
 		if ( ping_average > max_ping ){
diff --git a/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java b/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java
index f8056ab..107ee4a 100644
--- a/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java
+++ b/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java
@@ -4217,12 +4217,7 @@ SubscriptionManagerImpl
 					reportActivity(
 						String	str )
 					{
-						if ( 	str.indexOf( "found " ) == -1 &&
-								str.indexOf( " is dead" ) == -1 &&
-								str.indexOf( " is alive" ) == -1){
-			
-							log( "    MagnetDownload: " + str );
-						}
+						log( "    MagnetDownload: " + str );
 					}
 					
 					public void
@@ -4240,8 +4235,15 @@ SubscriptionManagerImpl
 							sender[0] = address;
 						}
 					}
+
+					public boolean 
+					verbose() 
+					{
+						return( false );
+					}
 				},
 				hash,
+				"",
 				new InetSocketAddress[0],
 				300*1000 );
 			
diff --git a/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java b/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java
index 915a0b6..95e448e 100644
--- a/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java
+++ b/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java
@@ -26,6 +26,7 @@ import java.net.URL;
 import java.util.*;
 
 import org.gudy.azureus2.core3.download.DownloadManager;
+import org.gudy.azureus2.core3.download.DownloadManagerState;
 import org.gudy.azureus2.core3.global.GlobalManager;
 import org.gudy.azureus2.core3.torrent.TOTorrent;
 import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLSet;
@@ -534,49 +535,54 @@ public class PlatformTorrentUtils
 		return false;
 	}
 	
-	public static boolean isUpdateDM(DownloadManager dm) {
-		Boolean oisUpdate = (Boolean) dm.getUserData("isUpdate");
+	public static boolean isAdvancedViewOnly(DownloadManager dm) {
+		Boolean oisUpdate = (Boolean) dm.getUserData("isAdvancedViewOnly");
 		if (oisUpdate != null) {
 			return oisUpdate.booleanValue();
 		}
 
-		boolean isUpdate = true;
-		TOTorrent torrent = dm.getTorrent();
-		if (torrent == null) {
-			isUpdate = false;
-		} else {
-			URL announceURL = torrent.getAnnounceURL();
-
-			if (announceURL != null) {
-				String	host = announceURL.getHost();
-				
-				if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
-					isUpdate = false;
-				}
-			}
+		boolean advanced_view = true;
+		
+		if ( !dm.getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE )){
 			
-			if (isUpdate) {
-				TOTorrentAnnounceURLSet[] sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
-
-				for (int i = 0; i < sets.length; i++) {
-
-					URL[] urls = sets[i].getAnnounceURLs();
-
-					for (int j = 0; j < urls.length; j++) {
-
-						String host = urls[j].getHost();
-						
-						if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
-							isUpdate = false;
-							break;
+			TOTorrent torrent = dm.getTorrent();
+			if (torrent == null) {
+				advanced_view = false;
+			} else {
+				URL announceURL = torrent.getAnnounceURL();
+	
+				if (announceURL != null) {
+					String	host = announceURL.getHost();
+					
+					if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
+						advanced_view = false;
+					}
+				}
+				
+				if (advanced_view) {
+					TOTorrentAnnounceURLSet[] sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
+	
+					for (int i = 0; i < sets.length; i++) {
+	
+						URL[] urls = sets[i].getAnnounceURLs();
+	
+						for (int j = 0; j < urls.length; j++) {
+	
+							String host = urls[j].getHost();
+							
+							if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
+								advanced_view = false;
+								break;
+							}
 						}
 					}
 				}
 			}
 		}
-
-		dm.setUserData("isUpdate", new Boolean(isUpdate));
-		return isUpdate;
+		
+		dm.setUserData("isAdvancedViewOnly", new Boolean(advanced_view));
+		
+		return advanced_view;
 	}
 
 	public static boolean isContentProgressive(TOTorrent torrent) {
@@ -743,7 +749,7 @@ public class PlatformTorrentUtils
 			return true;
 		}
 		boolean opened = getContentMapLong(torrent, TOR_AZ_PROP_OPENED, -1) > 0;
-		if (opened || isUpdateDM(dm)) {
+		if (opened || isAdvancedViewOnly(dm)) {
 			return true;
 		}
 
diff --git a/com/aelitis/azureus/core/monitoring/thread/AEThreadMonitor.java b/com/aelitis/azureus/core/util/AEThreadMonitor.java
similarity index 99%
rename from com/aelitis/azureus/core/monitoring/thread/AEThreadMonitor.java
rename to com/aelitis/azureus/core/util/AEThreadMonitor.java
index c1fc3cf..4afb036 100644
--- a/com/aelitis/azureus/core/monitoring/thread/AEThreadMonitor.java
+++ b/com/aelitis/azureus/core/util/AEThreadMonitor.java
@@ -20,7 +20,7 @@
  *
  */
 
-package com.aelitis.azureus.core.monitoring.thread;
+package com.aelitis.azureus.core.util;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
diff --git a/com/aelitis/azureus/core/util/CopyOnWriteList.java b/com/aelitis/azureus/core/util/CopyOnWriteList.java
index 74e8eb2..300c770 100644
--- a/com/aelitis/azureus/core/util/CopyOnWriteList.java
+++ b/com/aelitis/azureus/core/util/CopyOnWriteList.java
@@ -127,6 +127,16 @@ implements Iterable<T>
 		}
 	}
 	
+	public T
+	get(
+		int		index )
+	{
+		synchronized( this ){
+			
+			return( list.get(index));
+		}
+	}
+	
 	public boolean
 	remove(
 		T	obj )
diff --git a/com/aelitis/azureus/core/util/DNSUtils.java b/com/aelitis/azureus/core/util/DNSUtils.java
index 932b230..fbeee55 100644
--- a/com/aelitis/azureus/core/util/DNSUtils.java
+++ b/com/aelitis/azureus/core/util/DNSUtils.java
@@ -21,9 +21,17 @@
 
 package com.aelitis.azureus.core.util;
 
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
 import java.util.Hashtable;
+import java.util.List;
 
+import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
 import javax.naming.directory.DirContext;
 import javax.naming.directory.InitialDirContext;
 
@@ -43,9 +51,67 @@ DNSUtils
 	{
 		Hashtable env = new Hashtable();
 		
-		env.put("java.naming.factory.initial", getFactory());
+		env.put ("java.naming.factory.initial", getFactory());
 		
-		return( new InitialDirContext(env));
+		return( new InitialDirContext( env ));
 
 	}
+	
+	public static Inet6Address
+	getIPV6ByName(
+		String		host )
+	
+		throws UnknownHostException
+	{
+		List<Inet6Address>	all = getAllIPV6ByName( host );
+	
+		return( all.get(0));
+	}
+	
+	public static List<Inet6Address>
+	getAllIPV6ByName(
+		String		host )
+		
+		throws UnknownHostException
+	{
+		List<Inet6Address>	result = new ArrayList<Inet6Address>();
+
+		try{			
+			DirContext context = getInitialDirContext();
+			
+			Attributes attrs = context.getAttributes( host, new String[]{ "AAAA" });
+			
+			if ( attrs != null ){
+			
+				Attribute attr = attrs.get( "aaaa" );
+			
+				if ( attr != null ){
+					
+					NamingEnumeration values = attr.getAll();
+			
+					while( values.hasMore()){
+					
+						Object value = values.next();
+						
+						if ( value instanceof String ){
+							
+							try{
+								result.add( (Inet6Address)InetAddress.getByName((String)value));
+								
+							}catch( Throwable e ){
+							}
+						}
+					}
+				}
+			}
+		}catch( Throwable e ){
+		}
+		
+		if ( result.size() > 0 ){
+		
+			return( result );
+		}
+		
+		throw( new UnknownHostException( host ));
+	}
 }
diff --git a/com/aelitis/azureus/core/util/FeatureAvailability.java b/com/aelitis/azureus/core/util/FeatureAvailability.java
index 569c3c5..5375c27 100644
--- a/com/aelitis/azureus/core/util/FeatureAvailability.java
+++ b/com/aelitis/azureus/core/util/FeatureAvailability.java
@@ -34,6 +34,7 @@ FeatureAvailability
 	private static final long	FT_AUTO_SPEED_DEFAULT_CLASSIC		= 0x0000000000000008;
 	private static final long	FT_DISABLE_RCM						= 0x0000000000000010;
 	private static final long	FT_DISABLE_DHT_REP_V2				= 0x0000000000000020;
+	private static final long	FT_DISABLE_MAGNET_SL				= 0x0000000000000040;
 	
 	private static VersionCheckClient vcc = VersionCheckClient.getSingleton();
 	
@@ -84,4 +85,12 @@ FeatureAvailability
 				
 		return( result );
 	}
+	
+	public static boolean
+	isMagnetSLEnabled()
+	{
+		final boolean result = ( vcc.getFeatureFlags() & FT_DISABLE_MAGNET_SL ) == 0;
+				
+		return( result );
+	}
 }
diff --git a/com/aelitis/azureus/core/util/Java15Utils.java b/com/aelitis/azureus/core/util/Java15Utils.java
index 299ebc0..15bf705 100644
--- a/com/aelitis/azureus/core/util/Java15Utils.java
+++ b/com/aelitis/azureus/core/util/Java15Utils.java
@@ -22,97 +22,67 @@
 package com.aelitis.azureus.core.util;
 
 import java.io.IOException;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+import java.net.Proxy;
 import java.net.URL;
 import java.net.URLConnection;
 
-public class
+
+public class 
 Java15Utils 
 {
-	private static volatile Java15UtilsProvider	provider;
-	
-	public static boolean
-	isAvailable()
-	{
-		return( provider != null );
-	}
+	private static ThreadMXBean	thread_bean;
 	
-	public static void
-	setProvider(
-		Java15UtilsProvider		_provider )
-	{
-		provider	= _provider;
+	static{
+		try{
+			thread_bean = ManagementFactory.getThreadMXBean();
+			
+		}catch( Throwable e ){
+			
+			e.printStackTrace();
+		}
 	}
-	
+
 	public static void
 	setConnectTimeout(
-		URLConnection	con,
-		int				timeout )
+		URLConnection		con,
+		int					timeout )
 	{
-		if ( provider != null ){
-			
-			provider.setConnectTimeout( con, timeout );
-		}
+		con.setConnectTimeout( timeout );
 	}
 	
 	public static void
 	setReadTimeout(
-		URLConnection	con,
-		int				timeout )
+		URLConnection		con,
+		int					timeout )
 	{
-		if ( provider != null ){
-			
-			provider.setReadTimeout( con, timeout );
-		}
+		con.setReadTimeout( timeout );
 	}
 	
 	public static long
 	getThreadCPUTime()
 	{
-		if ( provider != null ){
+		if ( thread_bean == null ){
 			
-			return( provider.getThreadCPUTime());
+			return( 0 );
 		}
 		
-		return( 0 );
+		return( thread_bean.getCurrentThreadCpuTime());
 	}
 	
 	public static void
 	dumpThreads()
 	{
-		if ( provider != null ){
-			
-			provider.dumpThreads();
-		}
+		AEThreadMonitor.dumpThreads();
 	}
 	
-	public static URLConnection openConnectionForceNoProxy(URL url) throws IOException {
-		if (provider != null) {
-			return provider.openConnectionForceNoProxy(url);
-		}
-		else {
-			return url.openConnection();
-		}
-	}
+	public static URLConnection 
+	openConnectionForceNoProxy(
+		URL url) 
 	
-	public interface
-	Java15UtilsProvider
+		throws IOException 
 	{
-		public void
-		setConnectTimeout(
-			URLConnection	con,
-			int				timeout );
-		
-		public void
-		setReadTimeout(
-			URLConnection	con,
-			int				timeout );
-		
-		public long
-		getThreadCPUTime();
-		
-		public void
-		dumpThreads();
-		
-		public URLConnection openConnectionForceNoProxy(URL url) throws IOException;
+		return url.openConnection(Proxy.NO_PROXY);
 	}
 }
diff --git a/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java b/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java
index 0ff3592..e1ee6fd 100644
--- a/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java
+++ b/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java
@@ -51,6 +51,8 @@ import com.aelitis.azureus.core.impl.AzureusCoreImpl;
 import com.aelitis.azureus.core.clientmessageservice.*;
 import com.aelitis.azureus.core.networkmanager.admin.NetworkAdmin;
 import com.aelitis.azureus.core.networkmanager.admin.NetworkAdminASN;
+import com.aelitis.azureus.core.security.CryptoManagerFactory;
+import com.aelitis.azureus.core.util.DNSUtils;
 import com.aelitis.net.udp.uc.PRUDPPacketHandler;
 import com.aelitis.net.udp.uc.PRUDPPacketHandlerFactory;
 import com.aelitis.net.udp.uc.PRUDPReleasablePacketHandler;
@@ -122,6 +124,7 @@ public class VersionCheckClient {
 	  return( instance );
   }
   
+  private boolean	enable_v6;
   private boolean	prefer_v6;
 
   private Map last_check_data_v4 = null;
@@ -139,15 +142,16 @@ public class VersionCheckClient {
   private 
   VersionCheckClient()
   {
-	  COConfigurationManager.addAndFireParameterListener(
-			  "IPV6 Prefer Addresses",
+	  COConfigurationManager.addAndFireParameterListeners(
+			  new String[]{ "IPV6 Prefer Addresses", "IPV6 Enable Support" },
 			  new ParameterListener()
 			  {
 				 public void 
 				 parameterChanged(
 					String 	name )
 				 {
-					 prefer_v6 = COConfigurationManager.getBooleanParameter( name );
+					 enable_v6	= COConfigurationManager.getBooleanParameter( "IPV6 Enable Support" );
+					 prefer_v6 	= COConfigurationManager.getBooleanParameter( "IPV6 Prefer Addresses" );
 				 } 
 			  });
   }
@@ -243,47 +247,50 @@ public class VersionCheckClient {
   {
   	if ( v6 ){
 
-	    try {  check_mon.enter();
-	    
-	      long time_diff = SystemTime.getCurrentTime() - last_check_time_v6;
-	     
-	      force = force || time_diff > CACHE_PERIOD || time_diff < 0;
-	      
-	      if( last_check_data_v6 == null || last_check_data_v6.size() == 0 || force ) {
-	    	  // if we've never checked before then we go ahead even if the "only_if_cached"
-	    	  // flag is set as its had not chance of being cached yet!
-	    	if ( only_if_cached && last_check_data_v6 != null ){
-	    		return( new HashMap() );
-	    	}
-	        try {
-	          last_check_data_v6 = performVersionCheck( constructVersionCheckMessage( reason ), true, true, true );
-	          
-	          if ( last_check_data_v6 != null && last_check_data_v6.size() > 0 ){
-	       
-	        	  COConfigurationManager.setParameter( "versioncheck.cache.v6", last_check_data_v6 );
-	          }
-	        }
-	        catch(SocketException t) {
-	        	// internet is broken
-	        	// Debug.out(t.getClass().getName() + ": " + t.getMessage());
-	        }
-	        catch(UnknownHostException t) {
-	        	// dns is broken
-	        	// Debug.out(t.getClass().getName() + ": " + t.getMessage());
-	        }
-	        catch( Throwable t ) {
-	        	Debug.out(t);
-	          last_check_data_v6 = new HashMap();
-	        }
-	      }
-	      else {
-	      	Logger.log(new LogEvent(LOGID, "VersionCheckClient is using "
-							+ "cached version check info. Using " + last_check_data_v6.size()
-							+ " reply keys.")); 
-	      }
-	    }
-	    finally {  check_mon.exit();  }
-	    
+  		if ( enable_v6 ){
+  			
+	 	    try {  check_mon.enter();
+		    
+		      long time_diff = SystemTime.getCurrentTime() - last_check_time_v6;
+		     
+		      force = force || time_diff > CACHE_PERIOD || time_diff < 0;
+		      
+		      if( last_check_data_v6 == null || last_check_data_v6.size() == 0 || force ) {
+		    	  // if we've never checked before then we go ahead even if the "only_if_cached"
+		    	  // flag is set as its had not chance of being cached yet!
+		    	if ( only_if_cached && last_check_data_v6 != null ){
+		    		return( new HashMap() );
+		    	}
+		        try {
+		          last_check_data_v6 = performVersionCheck( constructVersionCheckMessage( reason ), true, true, true );
+		          
+		          if ( last_check_data_v6 != null && last_check_data_v6.size() > 0 ){
+		       
+		        	  COConfigurationManager.setParameter( "versioncheck.cache.v6", last_check_data_v6 );
+		          }
+		        }
+		        catch(SocketException t) {
+		        	// internet is broken
+		        	// Debug.out(t.getClass().getName() + ": " + t.getMessage());
+		        }
+		        catch(UnknownHostException t) {
+		        	// dns is broken
+		        	// Debug.out(t.getClass().getName() + ": " + t.getMessage());
+		        }
+		        catch( Throwable t ) {
+		        	Debug.out(t);
+		          last_check_data_v6 = new HashMap();
+		        }
+		      }
+		      else {
+		      	Logger.log(new LogEvent(LOGID, "VersionCheckClient is using "
+								+ "cached version check info. Using " + last_check_data_v6.size()
+								+ " reply keys.")); 
+		      }
+		    }
+		    finally {  check_mon.exit();  }
+  		}
+  		
 	    if( last_check_data_v6 == null )  last_check_data_v6 = new HashMap();
 	    
 	    return last_check_data_v6;
@@ -638,7 +645,12 @@ public class VersionCheckClient {
   
   	throws Exception
   {
-	  String	host = v6?AZ_MSG_SERVER_ADDRESS_V6:AZ_MSG_SERVER_ADDRESS_V4;
+	  if ( v6 && !enable_v6 ){
+		  
+		  throw( new Exception( "IPv6 is disabled" ));
+	  }
+
+	  String	host = getHost( v6, AZ_MSG_SERVER_ADDRESS_V6, AZ_MSG_SERVER_ADDRESS_V4 );
 	  
 	  if (Logger.isEnabled())
 		  Logger.log(new LogEvent(LOGID, "VersionCheckClient retrieving "
@@ -674,13 +686,18 @@ public class VersionCheckClient {
   
   	throws Exception
   {
-	  String	host = v6?HTTP_SERVER_ADDRESS_V6:HTTP_SERVER_ADDRESS_V4;
+	  if ( v6 && !enable_v6 ){
+		  
+		  throw( new Exception( "IPv6 is disabled" ));
+	  }
+	  
+	  String	host = getHost(v6, HTTP_SERVER_ADDRESS_V6, HTTP_SERVER_ADDRESS_V4 );
 
 	  if (Logger.isEnabled())
 		  Logger.log(new LogEvent(LOGID, "VersionCheckClient retrieving "
 				  + "version information from " + host + ":" + HTTP_SERVER_PORT + " via HTTP" )); 
 
-	  String	url_str = "http://" + host + (HTTP_SERVER_PORT==80?"":(":" + HTTP_SERVER_PORT)) + "/version?";
+	  String	url_str = "http://" + (v6?UrlUtils.convertIPV6Host(host):host) + (HTTP_SERVER_PORT==80?"":(":" + HTTP_SERVER_PORT)) + "/version?";
 
 	  url_str += URLEncoder.encode( new String( BEncoder.encode( data_to_send ), "ISO-8859-1" ), "ISO-8859-1" );
 	  
@@ -719,9 +736,9 @@ public class VersionCheckClient {
 	boolean	for_proxy,
 	boolean	v6 )
   {
-	  String	host = v6?HTTP_SERVER_ADDRESS_V6:HTTP_SERVER_ADDRESS_V4;
+	  String	host = getHost( v6, HTTP_SERVER_ADDRESS_V6, HTTP_SERVER_ADDRESS_V4 );
 
-	  String	get_str = "GET " + (for_proxy?("http://" + host + ":" + HTTP_SERVER_PORT ):"") +"/version?";
+	  String	get_str = "GET " + (for_proxy?("http://" + (v6?UrlUtils.convertIPV6Host( host ):host ) + ":" + HTTP_SERVER_PORT ):"") +"/version?";
 
 	  try{
 		  get_str += URLEncoder.encode( new String( BEncoder.encode( content ), "ISO-8859-1" ), "ISO-8859-1" );
@@ -743,7 +760,12 @@ public class VersionCheckClient {
   
   	throws Exception
   {
-	  String	host = v6?TCP_SERVER_ADDRESS_V6:TCP_SERVER_ADDRESS_V4;
+	  if ( v6 && !enable_v6 ){
+		  
+		  throw( new Exception( "IPv6 is disabled" ));
+	  }
+
+	  String	host = getHost(v6, TCP_SERVER_ADDRESS_V6, TCP_SERVER_ADDRESS_V4 );
 
 	  if (Logger.isEnabled())
 		  Logger.log(new LogEvent(LOGID, "VersionCheckClient retrieving "
@@ -881,7 +903,12 @@ public class VersionCheckClient {
   
   	throws Exception
   {
-	  String	host = v6?UDP_SERVER_ADDRESS_V6:UDP_SERVER_ADDRESS_V4;
+	  if ( v6 && !enable_v6 ){
+		  
+		  throw( new Exception( "IPv6 is disabled" ));
+	  }
+
+	  String	host = getHost( v6, UDP_SERVER_ADDRESS_V6, UDP_SERVER_ADDRESS_V4 );
 
 	  PRUDPReleasablePacketHandler handler = PRUDPPacketHandlerFactory.getReleasableHandler( bind_port );
 	  	  
@@ -1080,6 +1107,33 @@ public class VersionCheckClient {
 	  return( InetAddress.getByName( new String( address )));
   }
   
+  protected String
+  getHost(
+	boolean		v6,
+	String		v6_address,
+	String		v4_address )
+  {
+	 if ( v6 ){
+		 
+		 try{
+			 return( InetAddress.getByName( v6_address ).getHostAddress());
+			 
+		 }catch( UnknownHostException e ){
+			 
+			 try{
+				 return( DNSUtils.getIPV6ByName(v6_address ).getHostAddress());
+				 
+			 }catch( UnknownHostException f ){
+				 
+				 return( v6_address );
+			 }
+		 }
+	 }else{
+		 
+		 return( v4_address );
+	 }
+  }
+  
   /**
    * Construct the default version check message.
    * @return message to send
@@ -1135,8 +1189,16 @@ public class VersionCheckClient {
     String id = COConfigurationManager.getStringParameter( "ID", null );
 
     if( id != null && send_info ) {    	
-      message.put( "id", id );      
+      message.put( "id", id );    
+      
+      try{
+    	  byte[] id2 = CryptoManagerFactory.getSingleton().getSecureID();
     
+    	  message.put( "id2", id2 );
+    	  
+      }catch( Throwable e ){
+      }
+      
       if ( last_send_time != -1 && last_send_time < current_send_time ){    	  
     	  // time since last    	  
     	  message.put( "tsl", new Long(current_send_time-last_send_time));
@@ -1303,13 +1365,13 @@ public class VersionCheckClient {
 	  try{
 		  COConfigurationManager.initialise();
 		  
-		  boolean v6= false;
+		  boolean v6= true;
 		  
 		  // Test connectivity.
 		  if (true) {
-			//  System.out.println( "UDP:  " + getSingleton().getExternalIpAddressUDP(null,0,v6));
-			  System.out.println( "TCP:  " + getSingleton().getExternalIpAddressTCP(null,0,v6));
-			//  System.out.println( "HTTP: " + getSingleton().getExternalIpAddressHTTP(v6));
+			 // System.out.println( "UDP:  " + getSingleton().getExternalIpAddressUDP(null,0,v6));
+			 // System.out.println( "TCP:  " + getSingleton().getExternalIpAddressTCP(null,0,v6));
+			  System.out.println( "HTTP: " + getSingleton().getExternalIpAddressHTTP(v6));
 		  }
 		  
 		  Map data = constructVersionCheckMessage(VersionCheckClient.REASON_UPDATE_CHECK_START);
diff --git a/com/aelitis/azureus/jdk15/Java15Initialiser.java b/com/aelitis/azureus/jdk15/Java15Initialiser.java
deleted file mode 100644
index aa40905..0000000
--- a/com/aelitis/azureus/jdk15/Java15Initialiser.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Created on 24-Apr-2006
- * Created by Paul Gardner
- * Copyright (C) 2006 Aelitis, All Rights Reserved.
- *
- * 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.
- * 
- * AELITIS, SAS au capital de 46,603.30 euros
- * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
- *
- */
-
-package com.aelitis.azureus.jdk15;
-
-import com.aelitis.azureus.core.monitoring.thread.AEThreadMonitor;
-import com.aelitis.azureus.core.util.Java15Utils.Java15UtilsProvider;
-import com.aelitis.azureus.vivaldi.ver2.VivaldiV2PositionProvider;
-
-public class 
-Java15Initialiser 
-{
-	private static Java15UtilsProvider		utils_provider;
-	
-	static{
-		
-		try{
-				// try and pull in a 1.5 class
-			
-			Class.forName( "java.lang.management.ManagementFactory" );
-			
-			try{
-				utils_provider	= new Java15UtilsImpl();
-				
-				AEThreadMonitor.initialise();
-	
-				// VivaldiV2PositionProvider.initialise();
-				
-			}catch( Throwable e ){
-				
-				e.printStackTrace();
-			}
-			
-		}catch( Throwable e ){
-		}
-	}
-	
-	public static Java15UtilsProvider
-	getUtilsProvider()
-	{
-		return( utils_provider );
-	}
-}
diff --git a/com/aelitis/azureus/jdk15/Java15UtilsImpl.java b/com/aelitis/azureus/jdk15/Java15UtilsImpl.java
deleted file mode 100644
index 7766c17..0000000
--- a/com/aelitis/azureus/jdk15/Java15UtilsImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Created on Feb 11, 2008
- * Created by Paul Gardner
- * 
- * Copyright 2008 Vuze, Inc.  All rights reserved.
- * 
- * 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; version 2 of the License only.
- * 
- * 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.
- */
-
-
-package com.aelitis.azureus.jdk15;
-
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.lang.management.ThreadMXBean;
-import java.net.Proxy;
-import java.net.URL;
-import java.net.URLConnection;
-
-import com.aelitis.azureus.core.monitoring.thread.AEThreadMonitor;
-import com.aelitis.azureus.core.util.Java15Utils.Java15UtilsProvider;
-
-public class 
-Java15UtilsImpl 
-	implements Java15UtilsProvider
-{
-	private ThreadMXBean	thread_bean;
-	
-	public
-	Java15UtilsImpl()
-	{
-		try{
-			thread_bean = ManagementFactory.getThreadMXBean();
-			
-		}catch( Throwable e ){
-			
-			e.printStackTrace();
-		}
-	}
-
-	public void
-	setConnectTimeout(
-		URLConnection		con,
-		int					timeout )
-	{
-		con.setConnectTimeout( timeout );
-	}
-	
-	public void
-	setReadTimeout(
-		URLConnection		con,
-		int					timeout )
-	{
-		con.setReadTimeout( timeout );
-	}
-	
-	public long
-	getThreadCPUTime()
-	{
-		if ( thread_bean == null ){
-			
-			return( 0 );
-		}
-		
-		return( thread_bean.getCurrentThreadCpuTime());
-	}
-	
-	public void
-	dumpThreads()
-	{
-		AEThreadMonitor.dumpThreads();
-	}
-	
-	public URLConnection openConnectionForceNoProxy(URL url) throws IOException {
-		return url.openConnection(Proxy.NO_PROXY);
-	}
-}
diff --git a/com/aelitis/azureus/plugins/dht/DHTPlugin.java b/com/aelitis/azureus/plugins/dht/DHTPlugin.java
index e8953a2..7ea77bf 100644
--- a/com/aelitis/azureus/plugins/dht/DHTPlugin.java
+++ b/com/aelitis/azureus/plugins/dht/DHTPlugin.java
@@ -871,8 +871,8 @@ DHTPlugin
 												
 												if ( MAIN_DHT_V6_ENABLE ){
 													
-													if ( NetworkAdmin.getSingleton().hasIPV6Potential(false)){
-														
+													if ( NetworkAdmin.getSingleton().hasDHTIPV6()){
+															
 														main_v6_dht = 
 															new DHTPluginImpl(
 																plugin_interface,
diff --git a/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java b/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java
index 0d063e1..f092f8b 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java
@@ -27,6 +27,7 @@ import java.util.*;
 import org.gudy.azureus2.core3.config.impl.TransferSpeedValidator;
 import org.gudy.azureus2.core3.util.AESemaphore;
 import org.gudy.azureus2.core3.util.Debug;
+import org.gudy.azureus2.core3.util.HostNameToIPResolver;
 import org.gudy.azureus2.core3.util.SystemTime;
 import org.gudy.azureus2.plugins.PluginInterface;
 import org.gudy.azureus2.plugins.clientid.ClientIDGenerator;
@@ -65,6 +66,9 @@ ExternalSeedReaderImpl
 	private ExternalSeedPlugin	plugin;
 	private Torrent				torrent;
 	
+	private String			host;
+	private String			ip_use_accessor;
+	
 	private String			status;
 	
 	private boolean			active;
@@ -92,7 +96,8 @@ ExternalSeedReaderImpl
 	
 	private boolean		fast_activate;
 	private int			min_availability;
-	private int			min_speed;
+	private int			min_download_speed;
+	private int			max_peer_speed;
 	private long		valid_until;
 	private boolean		transient_seed;
 	
@@ -112,14 +117,17 @@ ExternalSeedReaderImpl
 	ExternalSeedReaderImpl(
 		ExternalSeedPlugin 		_plugin,
 		Torrent					_torrent,
+		String					_host,
 		Map						_params )
 	{
 		plugin	= _plugin;
 		torrent	= _torrent;
-				
+		host	= _host;
+		
 		fast_activate 		= getBooleanParam( _params, "fast_start", false );
 		min_availability 	= getIntParam( _params, "min_avail", 1 );	// default is avail based
-		min_speed			= getIntParam( _params, "min_speed", 0 );
+		min_download_speed	= getIntParam( _params, "min_speed", 0 );
+		max_peer_speed		= getIntParam( _params, "max_speed", 0 );
 		valid_until			= getIntParam( _params, "valid_ms", 0 );
 		
 		if ( valid_until > 0 ){
@@ -153,6 +161,28 @@ ExternalSeedReaderImpl
 		setActive( null, false );
 	}
 	
+	public String
+	getIP()
+	{
+		synchronized( host ){
+			
+			if ( ip_use_accessor == null ){
+				
+				try{
+					ip_use_accessor = HostNameToIPResolver.syncResolve( host ).getHostAddress();
+					
+				}catch( Throwable e ){
+					
+					ip_use_accessor = host;
+					
+					Debug.out( e );
+				}
+			}
+			
+			return( ip_use_accessor );
+		}
+	}
+	
 	public Torrent
 	getTorrent()
 	{
@@ -385,9 +415,9 @@ ExternalSeedReaderImpl
 					}
 				}
 					
-				if ( min_speed > 0 ){
+				if ( min_download_speed > 0 ){
 										
-					if ( peer_manager.getStats().getDownloadAverage() < min_speed ){
+					if ( peer_manager.getStats().getDownloadAverage() < min_download_speed ){
 						
 						log( getName() + ": activating as speed is slow" );
 						
@@ -443,13 +473,13 @@ ExternalSeedReaderImpl
 				}
 			}
 			
-			if ( min_speed > 0 ){
+			if ( min_download_speed > 0 ){
 				
 				long	my_speed 		= peer.getStats().getDownloadAverage();
 				
 				long	overall_speed 	= peer_manager.getStats().getDownloadAverage();
 				
-				if ( overall_speed - my_speed > 2 * min_speed ){
+				if ( overall_speed - my_speed > 2 * min_download_speed ){
 					
 					reason += (reason.length()==0?"":", ") + "speed is good";
 
@@ -498,7 +528,19 @@ ExternalSeedReaderImpl
 					
 					if ( now - peer_manager_change_time > INITIAL_DELAY && readyToDeactivate( peer_manager, peer )){
 													
-						setActive( peer_manager, false );			
+						setActive( peer_manager, false );
+						
+					}else{
+						
+						if ( max_peer_speed > 0 ){
+							
+							PeerStats ps = peer.getStats();
+							
+							if ( ps != null && ps.getDownloadRateLimit() != max_peer_speed ){
+								
+								ps.setDownloadRateLimit( max_peer_speed );
+							}
+						}
 					}
 				}else{
 					
@@ -506,6 +548,16 @@ ExternalSeedReaderImpl
 					
 						if ( readyToActivate( peer_manager, peer, time_since_started )){
 							
+							if ( max_peer_speed > 0 ){
+								
+								PeerStats ps = peer.getStats();
+								
+								if ( ps != null ){
+								
+									ps.setDownloadRateLimit( max_peer_speed );
+								}
+							}
+							
 							setActive( peer_manager, true );				
 						}
 					}
diff --git a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java
index 8d2412f..70d8d57 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java
@@ -69,6 +69,13 @@ ExternalSeedReaderFactoryGetRight
   				config.put( "url-list-params", obj );
   			}
   			
+			obj = torrent.getAdditionalProperty( "url-list-params2" );
+  			
+  			if ( obj != null ){
+  				
+  				config.put( "url-list-params2", obj );
+  			}
+  			
   			return( getSeedReaders( plugin, download, config ));
   			
   		}catch( Throwable e ){
@@ -103,12 +110,26 @@ ExternalSeedReaderFactoryGetRight
 
 				List	readers = new ArrayList();
 				
-				Object	_params = config.get( "url-list-params" );
+				Object	_global_params 		= config.get( "url-list-params" );
+				Object	_specific_params 	= config.get( "url-list-params2" );
 				
-				Map	params = _params instanceof Map?(Map)_params:new HashMap();
+				Map		global_params 		= _global_params instanceof Map?(Map)_global_params:new HashMap();
+				List	specific_params 	= _specific_params instanceof List?(List)_specific_params:new ArrayList();
 				
 				for (int i=0;i<urls.size();i++){
 					
+					Map my_params = global_params;
+					
+					if ( i < specific_params.size()){
+						
+						Object o = specific_params.get(i);
+						
+						if ( o instanceof Map ){
+							
+							my_params = (Map)o;
+						}
+					}
+					
 					try{	
 						String	url_str = new String((byte[])urls.get(i));
 						
@@ -122,7 +143,7 @@ ExternalSeedReaderFactoryGetRight
 																		
 						if ( protocol.equals( "http" )){
 							
-							readers.add( new ExternalSeedReaderGetRight(plugin, download.getTorrent(), url, params ));
+							readers.add( new ExternalSeedReaderGetRight(plugin, download.getTorrent(), url, my_params ));
 							
 						}else{
 							
@@ -161,15 +182,35 @@ ExternalSeedReaderFactoryGetRight
 			
 			Map	map = torrent.serialiseToMap();
 			
-			List	urls = new ArrayList();
-			
+			/*
+			List	urls = (List)map.get( "url-list" ); 
+				
+			if ( urls == null ){
+				
+				urls = new ArrayList();
+			}
+					
 			urls.add( "http://127.0.0.1:888/files/%DF%26%5B7w%C9%13I%88%8D%EC%E5b%2C9%0F%8D%0Co%BC/" );
 			
 			map.put( "url-list", urls);
+			*/
 			
+			/*
 			Map params = new HashMap();
 			
 			map.put( "url-list-params", params );
+			*/
+			
+			List params2 = new ArrayList();
+			
+			map.put( "url-list-params2", params2 );
+						
+			Map x_map = new HashMap();
+			
+			x_map.put( "max_speed", new Long(5*1024));
+			
+			params2.add( new Long(0));
+			params2.add( x_map );
 			
 			torrent = TOTorrentFactory.deserialiseFromMap( map );
 			
diff --git a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java
index fafc7b4..6e4ca1d 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java
@@ -53,7 +53,6 @@ ExternalSeedReaderGetRight
 	private static final int	TARGET_REQUEST_SIZE_DEFAULT	= 256*1024;
 	
 	private URL			url;
-	private String		ip;
 	private int			port;
 	
 	private ExternalSeedHTTPDownloader[]	http_downloaders;
@@ -76,7 +75,7 @@ ExternalSeedReaderGetRight
 	
 		throws Exception
 	{
-		super( _plugin, _torrent, _params );
+		super( _plugin, _torrent, _url.getHost(), _params );
 				
 		int target_request_size	= getIntParam( _params, "req_size", TARGET_REQUEST_SIZE_DEFAULT );
 		
@@ -84,7 +83,6 @@ ExternalSeedReaderGetRight
 
 		url		= _url;
 		
-		ip		= url.getHost();
 		port	= url.getPort();
 		
 		if ( port == -1 ){
@@ -178,13 +176,7 @@ ExternalSeedReaderGetRight
 	{
 		return( "GR: " + url );
 	}
-	
-	public String
-	getIP()
-	{
-		return( ip );
-	}
-	
+		
 	public int
 	getPort()
 	{
diff --git a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java
index 1d2d462..8b0fb81 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java
@@ -82,6 +82,17 @@ ExternalSeedReaderFactoryWebSeed
 		try{
 			Object	obj = config.get( "httpseeds" );
 			
+				// might as well handle case where there's a single entry rather than a list
+			
+			if ( obj instanceof byte[] ){
+				
+                List l = new ArrayList();
+                
+		        l.add(obj);
+		        
+		        obj = l;
+			}
+			
 			if ( obj instanceof List ){
 				
 				List	urls = (List)obj;
diff --git a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java
index 4c39c35..48e4b6b 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java
@@ -43,7 +43,6 @@ ExternalSeedReaderWebSeed
 	extends ExternalSeedReaderImpl
 {
 	private URL			url;
-	private String		ip;
 	private int			port;
 	private String		url_prefix;
 	
@@ -56,13 +55,12 @@ ExternalSeedReaderWebSeed
 		URL						_url,
 		Map						_params )
 	{
-		super( _plugin, _torrent, _params );
+		super( _plugin, _torrent, _url.getHost(), _params );
 
 		supports_503		= getBooleanParam( _params, "supports_503", true );
 		
 		url		= _url;
 		
-		ip		= url.getHost();
 		port	= url.getPort();
 		
 		if ( port == -1 ){
@@ -98,13 +96,7 @@ ExternalSeedReaderWebSeed
 	{
 		return( "WS: " + url );
 	}
-	
-	public String
-	getIP()
-	{
-		return( ip );
-	}
-	
+		
 	public int
 	getPort()
 	{
diff --git a/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java b/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java
index 9c48f51..26d47fa 100644
--- a/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java
+++ b/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java
@@ -26,21 +26,27 @@ import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.net.InetSocketAddress;
 import org.eclipse.swt.graphics.Image;
+import org.gudy.azureus2.core3.torrent.TOTorrent;
+import org.gudy.azureus2.core3.torrent.TOTorrentFactory;
 import org.gudy.azureus2.core3.util.AEMonitor;
 import org.gudy.azureus2.core3.util.AERunnable;
 import org.gudy.azureus2.core3.util.AESemaphore;
 import org.gudy.azureus2.core3.util.AEThread2;
+import org.gudy.azureus2.core3.util.BEncoder;
 import org.gudy.azureus2.core3.util.Base32;
 import org.gudy.azureus2.core3.util.ByteFormatter;
 import org.gudy.azureus2.core3.util.Debug;
 import org.gudy.azureus2.core3.util.DelayedEvent;
 import org.gudy.azureus2.core3.util.SystemTime;
+import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.core3.util.UrlUtils;
 import org.gudy.azureus2.plugins.*;
 import org.gudy.azureus2.plugins.ddb.DistributedDatabase;
 import org.gudy.azureus2.plugins.ddb.DistributedDatabaseContact;
@@ -54,14 +60,22 @@ import org.gudy.azureus2.plugins.download.DownloadException;
 import org.gudy.azureus2.plugins.torrent.Torrent;
 import org.gudy.azureus2.plugins.ui.UIInstance;
 import org.gudy.azureus2.plugins.ui.UIManagerListener;
+import org.gudy.azureus2.plugins.ui.config.BooleanParameter;
+import org.gudy.azureus2.plugins.ui.config.ConfigSection;
 import org.gudy.azureus2.plugins.ui.menus.MenuItem;
 import org.gudy.azureus2.plugins.ui.menus.MenuItemListener;
+import org.gudy.azureus2.plugins.ui.model.BasicPluginConfigModel;
 import org.gudy.azureus2.plugins.ui.tables.TableContextMenuItem;
 import org.gudy.azureus2.plugins.ui.tables.TableManager;
 import org.gudy.azureus2.plugins.ui.tables.TableRow;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderAdapter;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderException;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderFactory;
 import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
 
 import com.aelitis.azureus.core.util.CopyOnWriteList;
+import com.aelitis.azureus.core.util.FeatureAvailability;
 import com.aelitis.net.magneturi.*;
 
 /**
@@ -72,17 +86,28 @@ import com.aelitis.net.magneturi.*;
 public class 
 MagnetPlugin
 	implements Plugin
-{
+{	
+	private static final String	SECONDARY_LOOKUP 			= "http://magnet.vuze.com/";
+	private static final int	SECONDARY_LOOKUP_DELAY		= 20*1000;
+	private static final int	SECONDARY_LOOKUP_MAX_TIME	= 2*60*1000;
+	
+	private static final String	PLUGIN_NAME				= "Magnet URI Handler";
+	private static final String PLUGIN_CONFIGSECTION_ID = "plugins.magnetplugin";
+
 	private PluginInterface		plugin_interface;
 		
 	private CopyOnWriteList		listeners = new CopyOnWriteList();
 	
+	private boolean			first_download	= true;
+	
+	private BooleanParameter secondary_lookup;
+	
 	public static void
 	load(
 		PluginInterface		plugin_interface )
 	{
 		plugin_interface.getPluginProperties().setProperty( "plugin.version", 	"1.0" );
-		plugin_interface.getPluginProperties().setProperty( "plugin.name", 		"Magnet URI Handler" );
+		plugin_interface.getPluginProperties().setProperty( "plugin.name", PLUGIN_NAME );
 	}
 	
 	public void
@@ -91,6 +116,12 @@ MagnetPlugin
 	{
 		plugin_interface	= _plugin_interface;
 		
+		BasicPluginConfigModel	config = 
+			plugin_interface.getUIManager().createBasicPluginConfigModel( ConfigSection.SECTION_PLUGINS, 
+					PLUGIN_CONFIGSECTION_ID);
+		
+		secondary_lookup = config.addBooleanParameter2( "MagnetPlugin.use.lookup.service", "MagnetPlugin.use.lookup.service", true );
+		
 		MenuItemListener	listener = 
 			new MenuItemListener()
 			{
@@ -221,6 +252,7 @@ MagnetPlugin
 				download(
 					final MagnetURIHandlerProgressListener		muh_listener,
 					final byte[]								hash,
+					final String								args,
 					final InetSocketAddress[]					sources,
 					final long									timeout )
 				
@@ -274,8 +306,15 @@ MagnetPlugin
 									InetSocketAddress	address )
 								{
 								}
+								
+								public boolean 
+								verbose() 
+								{
+									return( muh_listener.verbose());
+								}
 							},
 							hash,
+							args,
 							sources,
 							timeout ));
 				}
@@ -432,14 +471,20 @@ MagnetPlugin
 	download(
 		final MagnetPluginProgressListener		listener,
 		final byte[]							hash,
+		final String							args,
 		final InetSocketAddress[]				sources,
 		final long								timeout )
 	
 		throws MagnetURIHandlerException
 	{
 		try{
-			listener.reportActivity( getMessageText( "report.waiting_ddb" ));
-
+			if ( first_download ){
+			
+				listener.reportActivity( getMessageText( "report.waiting_ddb" ));
+				
+				first_download = false;
+			}
+			
 			final DistributedDatabase db = plugin_interface.getDistributedDatabase();
 			
 			final List			potential_contacts 		= new ArrayList();
@@ -488,6 +533,8 @@ MagnetPlugin
 						}else if (	type == DistributedDatabaseEvent.ET_OPERATION_COMPLETE ||
 									type == DistributedDatabaseEvent.ET_OPERATION_TIMEOUT ){
 								
+							listener.reportActivity( getMessageText( "report.found", String.valueOf( found_set.size())));
+							
 								// now inject any explicit sources
 
 							addExplicitSources();
@@ -537,8 +584,11 @@ MagnetPlugin
 							found_set.add( key );
 						}
 						
-						listener.reportActivity( getMessageText( "report.found", contact.getName()));
-				
+						if ( listener.verbose()){
+						
+							listener.reportActivity( getMessageText( "report.found", contact.getName()));
+						}
+						
 						try{
 							potential_contacts_mon.enter();													
 
@@ -559,9 +609,12 @@ MagnetPlugin
 								{
 									try{
 										boolean	alive = event.getType() == DistributedDatabaseEvent.ET_OPERATION_COMPLETE;
-																						
-										listener.reportActivity( 
+											
+										if ( listener.verbose()){
+										
+											listener.reportActivity( 
 												getMessageText( alive?"report.alive":"report.dead",	contact.getName()));
+										}
 										
 										try{
 											potential_contacts_mon.enter();
@@ -623,6 +676,15 @@ MagnetPlugin
 			
 			long	remaining	= timeout;
 			
+			long 	overall_start 			= SystemTime.getMonotonousTime();
+			boolean	sl_enabled				= secondary_lookup.getValue() && FeatureAvailability.isMagnetSLEnabled();
+
+			long	secondary_lookup_time 	= -1;
+			
+			long last_found = -1;
+			
+			final Object[] secondary_result = { null };
+			
 			while( remaining > 0 ){
 					
 				try{
@@ -638,12 +700,68 @@ MagnetPlugin
 					
 					potential_contacts_mon.exit();
 				}
+								
 				
-				long start = SystemTime.getCurrentTime();
+				while( remaining > 0 ){
 				
-				potential_contacts_sem.reserve( remaining );
+					long wait_start = SystemTime.getMonotonousTime();
+
+					boolean got_sem = potential_contacts_sem.reserve( 1000 );
+		
+					long now = SystemTime.getMonotonousTime();
+					
+					remaining -= ( now - wait_start );
 				
-				remaining -= ( SystemTime.getCurrentTime() - start );
+					if ( got_sem ){
+					
+						last_found = now;
+						
+						break;
+						
+					}else{
+						
+						if ( sl_enabled ){
+							
+							if ( secondary_lookup_time == -1 ){
+							
+								long	base_time;
+								
+								if ( last_found == -1 || now - overall_start > 60*1000 ){
+									
+									base_time = overall_start;
+									
+								}else{
+									
+									base_time = last_found;
+								}
+								
+								long	time_so_far = now - base_time;
+								
+								if ( time_so_far > SECONDARY_LOOKUP_DELAY ){
+									
+									secondary_lookup_time = SystemTime.getMonotonousTime();
+									
+									doSecondaryLookup( listener, secondary_result, hash, args );
+								}
+							}else{
+								
+								try{
+									byte[] torrent = getSecondaryLookupResult( secondary_result );
+									
+									if ( torrent != null ){
+										
+										return( torrent );
+									}
+								}catch( ResourceDownloaderException e ){
+									
+									// ignore, we just continue processing
+								}
+							}
+						}
+
+						continue;
+					}
+				}
 				
 				DistributedDatabaseContact	contact;
 				boolean						live_contact;
@@ -718,9 +836,27 @@ MagnetPlugin
 										
 					if ( value != null ){
 						
-						listener.reportContributor( contact.getAddress());
+							// let's verify the torrent
 						
-						return( (byte[])value.getValue(byte[].class));
+						byte[]	data = (byte[])value.getValue(byte[].class);
+
+						try{
+							TOTorrent torrent = TOTorrentFactory.deserialiseFromBEncodedByteArray( data );
+							
+							if ( Arrays.equals( hash, torrent.getHash())){
+							
+								listener.reportContributor( contact.getAddress());
+						
+								return( data );
+								
+							}else{
+								
+								listener.reportActivity( getMessageText( "report.error", "torrent invalid (hash mismatch)" ));
+							}
+						}catch( Throwable e ){
+							
+							listener.reportActivity( getMessageText( "report.error", "torrent invalid (decode failed)" ));
+						}
 					}
 				}catch( Throwable e ){
 					
@@ -730,6 +866,34 @@ MagnetPlugin
 				}
 			}
 		
+			if ( sl_enabled ){
+				
+				if ( secondary_lookup_time == -1 ){
+					
+					secondary_lookup_time = SystemTime.getMonotonousTime();
+					
+					doSecondaryLookup(listener, secondary_result, hash, args );
+				}
+				
+				while( SystemTime.getMonotonousTime() - secondary_lookup_time < SECONDARY_LOOKUP_MAX_TIME ){
+					
+					try{
+						byte[] torrent = getSecondaryLookupResult( secondary_result );
+						
+						if ( torrent != null ){
+							
+							return( torrent );
+						}
+						
+						Thread.sleep( 500 );
+						
+					}catch( ResourceDownloaderException e ){
+						
+						break;
+					}
+				}
+			}
+			
 			return( null );		// nothing found
 			
 		}catch( Throwable e ){
@@ -742,6 +906,98 @@ MagnetPlugin
 		}
 	}
 	
+	protected void
+	doSecondaryLookup(
+		final MagnetPluginProgressListener		listener,
+		final Object[]							result,
+		byte[]									hash,
+		String									args )
+	{
+		listener.reportActivity( getMessageText( "report.secondarylookup", null ));
+		
+		try{
+			ResourceDownloaderFactory rdf = plugin_interface.getUtilities().getResourceDownloaderFactory();
+		
+			URL sl_url = new URL( SECONDARY_LOOKUP + "magnetLookup?hash=" + Base32.encode( hash ) + (args.length()==0?"":("&args=" + UrlUtils.encode( args ))));
+			
+			ResourceDownloader rd = rdf.create( sl_url );
+			
+			rd.addListener(
+				new ResourceDownloaderAdapter()
+				{
+					public boolean
+					completed(
+						ResourceDownloader	downloader,
+						InputStream			data )
+					{
+						listener.reportActivity( getMessageText( "report.secondarylookup.ok", null ));
+
+						synchronized( result ){
+						
+							result[0] = data;
+						}
+						
+						return( true );
+					}
+					
+					public void
+					failed(
+						ResourceDownloader			downloader,
+						ResourceDownloaderException e )
+					{
+						synchronized( result ){
+							
+							result[0] = e;
+						}
+						
+						listener.reportActivity( getMessageText( "report.secondarylookup.fail" ));
+					}
+				});
+			
+			rd.asyncDownload();
+			
+		}catch( Throwable e ){
+			
+			listener.reportActivity( getMessageText( "report.secondarylookup.fail", Debug.getNestedExceptionMessage( e ) ));
+		}
+	}
+	
+	protected byte[]
+	getSecondaryLookupResult(
+		final Object[]	result )
+	
+		throws ResourceDownloaderException
+	{
+		Object x;
+		
+		synchronized( result ){
+			
+			x = result[0];
+			
+			result[0] = null;
+		}
+			
+		if ( x instanceof InputStream ){
+			
+			InputStream is = (InputStream)x;
+				
+			try{
+				TOTorrent t = TOTorrentFactory.deserialiseFromBEncodedInputStream( is );
+				
+				TorrentUtils.setPeerCacheValid( t );
+		
+				return( BEncoder.encode( t.serialiseToMap()));
+				
+			}catch( Throwable e ){							
+			}
+		}else if ( x instanceof ResourceDownloaderException ){
+			
+			throw((ResourceDownloaderException)x);
+		}
+		
+		return( null );
+	}
+	
 	protected String
 	getMessageText(
 		String	resource )
diff --git a/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java b/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java
index f98042b..64763b1 100644
--- a/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java
+++ b/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java
@@ -47,4 +47,7 @@ MagnetPluginProgressListener
 	public void
 	reportContributor(
 		InetSocketAddress	address );
+	
+	public boolean
+	verbose();
 }
diff --git a/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java b/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java
index 98c80ce..34c6f95 100644
--- a/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java
+++ b/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java
@@ -3709,11 +3709,7 @@ BuddyPlugin
 								reportActivity(
 									String	str )
 								{
-									if ( 	str.indexOf( " found " ) == -1 &&
-											str.indexOf( " is dead " ) == -1 ){
-						
-										log( "    MagnetDownload: " + str );
-									}
+									log( "    MagnetDownload: " + str );
 								}
 								
 								public void
@@ -3727,8 +3723,15 @@ BuddyPlugin
 									InetSocketAddress	address )
 								{
 								}
+								
+								public boolean 
+								verbose() 
+								{
+									return( false );
+								}
 							},
 							hash,
+							"",
 							new InetSocketAddress[0],
 							timeout );
 						
diff --git a/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java b/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java
index 52d297c..ff2e418 100644
--- a/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java
+++ b/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java
@@ -2719,7 +2719,12 @@ DHTTrackerPlugin
 			this_mon.exit();
 		}
 		
-		checkDownloadForRegistration( download, false );
+			// don't do anything if paused as we want things to just continue as they are (we would force an announce here otherwise)
+		
+		if ( !download.isPaused()){
+		
+			checkDownloadForRegistration( download, false );
+		}
 	}
  
 	public void
diff --git a/com/aelitis/azureus/ui/skin/skin3_constants.properties b/com/aelitis/azureus/ui/skin/skin3_constants.properties
index 2b623bd..da2b05c 100644
--- a/com/aelitis/azureus/ui/skin/skin3_constants.properties
+++ b/com/aelitis/azureus/ui/skin/skin3_constants.properties
@@ -127,20 +127,6 @@ color.search.text.bg=#ffffff
 color.search.text.fg=#333333
 color.search.text.fg.default=#999999
 
-#===============================================================================
-#main.area.advancedtab
-#===============================================================================
-
-main.area.advancedtab.type=container
-main.area.advancedtab.onshow.skinviewclass=com.aelitis.azureus.ui.swt.views.skin.SBC_AdvancedView
-main.area.advancedtab.view=advanced
-main.area.advancedtab.attach.left=0,0
-main.area.advancedtab.attach.right=100,0
-main.area.advancedtab.attach.top=0,0
-main.area.advancedtab.attach.bottom=100,0
-#main.area.advancedtab.attach.template=template.tabcontentarea
-#main.area.advancedtab.widgets=main.advancedtab
-
 
 #===============================================================================
 #main.area.statusbar
diff --git a/com/aelitis/azureus/ui/swt/browser/BrowserContext.java b/com/aelitis/azureus/ui/swt/browser/BrowserContext.java
index c3dbf55..3829c30 100644
--- a/com/aelitis/azureus/ui/swt/browser/BrowserContext.java
+++ b/com/aelitis/azureus/ui/swt/browser/BrowserContext.java
@@ -41,6 +41,7 @@ import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader;
 import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
 import org.gudy.azureus2.ui.swt.Utils;
 import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;
+import org.gudy.azureus2.ui.swt.mainwindow.TorrentOpener;
 import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;
 
 import com.aelitis.azureus.core.messenger.ClientMessageContextImpl;
@@ -118,25 +119,7 @@ public class BrowserContext
 		browser 				= _browser;
 		forceVisibleAfterLoad 	= _forceVisibleAfterLoad;
 		widgetWaitIndicator 	= _widgetWaitingIndicator;
-/*		
-		BrowserFunction browserFunction = new BrowserFunction(browser, "sendMessageToClient") {
-			// @see org.eclipse.swt.browser.BrowserFunction#function(java.lang.Object[])
-			public Object function(Object[] arguments) {
-				if (arguments == null) {
-					debug("sendMessageToClient: arguments null on " + browser.getUrl());
-					return null;
-				}
-				if (arguments.length != 3) {
-					debug("sendMessageToClient: # arguments not 3 (" + arguments.length + ") on " + browser.getUrl());
-					return null;
-				}
 
-				BrowserMessage message = new BrowserMessage((String) arguments[0], (String) arguments[1], (Map<?, ?>) arguments[2]);
-				messageDispatcherSWT.dispatch(message);
-				return null;
-			}
-		};
-*/
 		// System.out.println( "Registered browser context: id=" + getID());
 		
 		messageDispatcherSWT = new MessageDispatcherSWT(this);
@@ -342,8 +325,9 @@ public class BrowserContext
 				if (!event.top) {
 					return;
 				}
-				boolean isWebURL = event.location.startsWith("http://")
-						|| event.location.startsWith("https://");
+				String location = event.location.toLowerCase();
+				boolean isWebURL = location.startsWith("http://")
+						|| location.startsWith("https://");
 				if (!isWebURL) {
 					if (event.location.startsWith("res://")) {
 						fillWithRetry(event.location, "top changed");
@@ -382,8 +366,20 @@ public class BrowserContext
 					return;
 				}
 
-				boolean isWebURL = event_location.startsWith("http://")
-						|| event_location.startsWith("https://");
+				
+				String lowerLocation = event_location.toLowerCase();
+				boolean isOurURI = lowerLocation.startsWith("magnet:")
+						|| lowerLocation.startsWith("vuze:")
+						|| lowerLocation.startsWith("dht:");
+
+				if (isOurURI) {
+					event.doit = false;
+					TorrentOpener.openTorrent(event_location);
+					return;
+				}
+
+				boolean isWebURL = lowerLocation.startsWith("http://")
+						|| lowerLocation.startsWith("https://");
 				if (!isWebURL) {
 					// we don't get a changed state on non URLs (mailto, javascript, etc)
 					return;
diff --git a/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java b/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java
index 876c6c1..cfe091c 100644
--- a/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java
+++ b/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java
@@ -46,7 +46,6 @@ import com.aelitis.azureus.core.AzureusCoreFactory;
 import com.aelitis.azureus.core.cnetwork.ContentNetwork;
 import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
 import com.aelitis.azureus.core.custom.CustomizationManagerFactory;
-import com.aelitis.azureus.core.impl.AzureusCoreImpl;
 import com.aelitis.azureus.core.messenger.browser.BrowserMessage;
 import com.aelitis.azureus.core.messenger.browser.listeners.AbstractBrowserMessageListener;
 import com.aelitis.azureus.core.metasearch.*;
@@ -77,6 +76,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 		
 	public static final String OP_GET_ENGINES 			= "get-engines";
 	public static final String OP_GET_ALL_ENGINES 		= "get-all-engines";
+	public static final String OP_ENGINE_PREFERRED		= "engine-preferred";
 
 	public static final String OP_CHANGE_ENGINE_SELECTION 	= "change-engine-selection";
 	
@@ -253,6 +253,19 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 
 			search( decodedMap, null );
 
+		}else if ( OP_ENGINE_PREFERRED.equals( opid )){
+			
+			final Map decodedMap = message.getDecodedMap();
+			
+			long engine_id = ((Long)decodedMap.get("engine_id")).longValue();
+
+			Engine engine = getEngineFromId( engine_id );
+
+			if ( engine != null ){
+				
+				metaSearchManager.getMetaSearch().enginePreferred( engine );
+			}
+
 		} else if(OP_ENGINE_LOGIN.equals(opid)) {
 			
 			final Map decodedMap = message.getDecodedMap();
@@ -434,11 +447,9 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			String subscriptionId  = null;
 			
 			try {
-				if(message.isParamObject()) {
-					final Map decodedMap = message.getDecodedMap();
+				final Map decodedMap = message.getDecodedMap();
 
-					subscriptionId		= ((String)decodedMap.get("subs_id"));
-				}
+				subscriptionId		= ((String)decodedMap.get("subs_id"));
 			} catch(Exception e) {
 				//No parameters
 			}
@@ -1059,17 +1070,14 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 				});
 		}else if ( OP_OPEN_SEARCH_RESULTS.equals(opid)){
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap()
-					: new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			openCloseSearchDetailsListener.openSearchResults(decodedMap);
 		}else if ( OP_CLOSE_SEARCH_RESULTS.equals(opid)){
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap()
-					: new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			openCloseSearchDetailsListener.closeSearchResults(decodedMap);
 		}else if(OP_LOAD_TORRENT.equals(opid)) {
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap()
-					: new HashMap();			
+			Map decodedMap = message.getDecodedMap();
 			
 			String torrentUrl		= (String) decodedMap.get( "torrent_url" );
 			String referer_str	= (String) decodedMap.get( "referer_url" );
@@ -1177,7 +1185,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			
 		}else if(OP_CREATE_SUBSCRIPTION.equals(opid)) {
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			
 			Long	 tid = (Long) decodedMap.get("tid");
 
@@ -1221,7 +1229,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			}
 		}else if( OP_READ_SUBSCRIPTION.equals(opid)){
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			
 			final Long	 tid = (Long) decodedMap.get("tid");
 
@@ -1290,7 +1298,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			}
 		}else if (OP_UPDATE_SUBSCRIPTION.equals(opid)) {
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			
 			final Long	 tid = (Long) decodedMap.get("tid");
 			
@@ -1360,7 +1368,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			
 		}else if (OP_SUBSCRIPTION_SET_AUTODL.equals(opid)){
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			
 			String 	sid = (String)decodedMap.get("id");
 			
@@ -1396,7 +1404,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			
 		}else if(OP_READ_SUBSCRIPTION_RESULTS.equals(opid)) {
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			
 			final Long	 tid = (Long) decodedMap.get("tid");
 			
@@ -1472,7 +1480,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			}
 		}else if( OP_DELETE_SUBSCRIPTION_RESULTS.equals(opid)){
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 						
 			String sid = (String)decodedMap.get("id");
 			
@@ -1511,7 +1519,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			}
 		}else if( OP_MARK_SUBSCRIPTION_RESULTS.equals(opid)){
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 						
 			String sid = (String)decodedMap.get("id");
 			
@@ -1555,7 +1563,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 			}
 		}else if( OP_DOWNLOAD_SUBSCRIPTION.equals(opid)) {
 			
-			Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+			Map decodedMap = message.getDecodedMap();
 			
 			final Long	 tid = (Long) decodedMap.get("tid");
 
@@ -1943,6 +1951,8 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
 		
 		context.put( Engine.SC_BATCH_PERIOD, "1000" );
 		
+		context.put( Engine.SC_REMOVE_DUP_HASH, "true" );
+		
 		if ( target == null ){
 		
 			metaSearchManager.getMetaSearch().search( listener, parameters, headers, context, max_per_engine );
diff --git a/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java b/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java
index ca1c647..f975fa4 100644
--- a/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java
+++ b/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java
@@ -19,62 +19,36 @@
  */
 package com.aelitis.azureus.ui.swt.browser.msg;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.eclipse.swt.browser.*;
 
-import org.gudy.azureus2.core3.util.AEMonitor;
 import org.gudy.azureus2.core3.util.AEThread2;
-import org.gudy.azureus2.core3.util.Debug;
 import org.gudy.azureus2.ui.swt.Utils;
 
 import com.aelitis.azureus.core.messenger.ClientMessageContext;
 import com.aelitis.azureus.core.messenger.browser.BrowserMessage;
 import com.aelitis.azureus.core.messenger.browser.BrowserMessageDispatcher;
 import com.aelitis.azureus.core.messenger.browser.listeners.BrowserMessageListener;
+import com.aelitis.azureus.util.JSONUtils;
 import com.aelitis.azureus.util.UrlFilter;
 
 /**
- * Dispatches messages to listeners registered with unique IDs. Each message sent
- * from the browser must be given a message sequence number that is different
- * from that of the previous message to detect duplicate events.
- *   <p/>
- * Messages are in the form
- * <pre>  PREFIX DELIM <em>&lt;seq-no&gt;</em> DELIM <em>&lt;listener-id&gt;</em> DELIM <em>&lt;operation-id&gt;</em> DELIM <em>&lt;params&gt;</em> . . .</pre>
- * 
- * For example,
- * <pre>  "AZMSG;37;publish;choose-files"</pre>
- * 
- * Sequence numbers are unique to each {@link Browser} instance in the UI,
- * and they start at 1, being reset each time an HTML page loads.
- * 
- * @author dharkness
- * @created Jul 18, 2006
+ * Dispatches messages to listeners registered with unique IDs.
  */
 public class MessageDispatcherSWT
-	implements StatusTextListener, TitleListener, BrowserMessageDispatcher
+	implements BrowserMessageDispatcher
 {
-	public static final String LISTENER_ID = "dispatcher";
-
-	public static final String OP_RESET_SEQUENCE = "reset-sequence";
-
-	public static final String CONTEXT_LISTENER_ID = "context";
-
-	private static final int INITIAL_LAST_SEQUENCE = -1;
-
 	private ClientMessageContext context;
 
-	private Map listeners = new HashMap();
-
-	private int lastSequence = INITIAL_LAST_SEQUENCE;
-
-	private String sLastEventText;
-
-	private AEMonitor class_mon = new AEMonitor("MessageDispatcher");
+	private Map<String, BrowserMessageListener> listeners = new HashMap<String, BrowserMessageListener>();
 
 	private Browser browser;
 
+	private BrowserFunction browserFunction;
+
 	/**
 	 * Registers itself as a listener to receive sequence number reset message.
 	 */
@@ -82,10 +56,44 @@ public class MessageDispatcherSWT
 		this.context = context;
 	}
 
-	public void registerBrowser(Browser browser) {
+	public void registerBrowser(final Browser browser) {
 		this.browser = browser;
-		browser.addStatusTextListener(this);
-		browser.addTitleListener(this);
+		
+		browserFunction = new BrowserFunction(browser, "sendMessageToAZ") {
+			public Object function(Object[] args) {
+				if (args == null) {
+					context.debug("sendMessageToAZ: arguments null on " + browser.getUrl());
+					return null;
+				}
+				if (args.length != 3 && args.length != 2) {
+					context.debug("sendMessageToAZ: # arguments not 2 or 3 (" + args.length + ") on " + browser.getUrl());
+					return null;
+				}
+				
+				if (!(args[0] instanceof String)) {
+					context.debug("sendMessageToAZ: Param 1 not String");
+					return null;
+				}
+				if (!(args[1] instanceof String)) {
+					context.debug("sendMessageToAZ: Param 2 not String");
+					return null;
+				}
+				Map params = Collections.EMPTY_MAP;
+				if (args.length == 3) {
+  				if (!(args[2] instanceof String)) {
+  					context.debug("sendMessageToAZ: Param 3 not String");
+  					return null;
+  				}
+ 
+  				params = JSONUtils.decodeJSON((String)args[2]);
+				}
+				
+
+				BrowserMessage message = new BrowserMessage((String) args[0], (String) args[1], params);
+				dispatch(message);
+				return null;
+			}
+		};
 	}
 
 	/**
@@ -96,8 +104,9 @@ public class MessageDispatcherSWT
 	 * @param browser {@link Browser} which will no longer send messages
 	 */
 	public void deregisterBrowser(Browser browser) {
-		browser.removeStatusTextListener(this);
-		browser.removeTitleListener(this);
+		if (browserFunction != null && !browserFunction.isDisposed()) {
+			browserFunction.dispose();
+		}
 	}
 
 	/**
@@ -111,7 +120,7 @@ public class MessageDispatcherSWT
 	 */
 	public synchronized void addListener(BrowserMessageListener listener) {
 		String id = listener.getId();
-		BrowserMessageListener registered = (BrowserMessageListener) listeners.get(id);
+		BrowserMessageListener registered = listeners.get(id);
 		if (registered != null) {
 			if (registered != listener) {
 				throw new IllegalStateException("Listener "
@@ -139,7 +148,7 @@ public class MessageDispatcherSWT
 	 * @param id unique identifier of the listener to be removed
 	 */
 	public synchronized void removeListener(String id) {
-		BrowserMessageListener removed = (BrowserMessageListener) listeners.remove(id);
+		BrowserMessageListener removed = listeners.remove(id);
 		if (removed == null) {
 			//            throw new IllegalStateException("No listener is registered for ID " + id);
 		} else {
@@ -149,56 +158,7 @@ public class MessageDispatcherSWT
 
 	// @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#getListener(java.lang.String)
 	public BrowserMessageListener getListener(String id) {
-		return (BrowserMessageListener) listeners.get(id);
-	}
-
-	/**
-	 * Parses the event to see if it's a valid message and dispatches it.
-	 * 
-	 * @param event contains the message
-	 * 
-	 * @see org.eclipse.swt.browser.StatusTextListener#changed(org.eclipse.swt.browser.StatusTextEvent)
-	 */
-	public void changed(StatusTextEvent event) {
-		if (event.widget.isDisposed() || ((Browser) event.widget).getShell().isDisposed()) {
-			return;
-		}
-		processIncomingMessage(event.text, ((Browser) event.widget).getUrl());
-	}
-
-	// @see org.eclipse.swt.browser.TitleListener#changed(org.eclipse.swt.browser.TitleEvent)
-	public void changed(TitleEvent event) {
-		if (event.widget.isDisposed() || ((Browser) event.widget).getShell().isDisposed()) {
-			return;
-		}
-		processIncomingMessage(event.title, ((Browser) event.widget).getUrl());
-	}
-
-	private void processIncomingMessage(String msg, String referer) {
-		if (msg == null) {
-			return;
-		}
-
-		try {
-			class_mon.enter();
-			if (sLastEventText != null && msg.equals(sLastEventText)) {
-				return;
-			}
-
-			sLastEventText = msg;
-		} finally {
-			class_mon.exit();
-		}
-
-		if (msg.startsWith(BrowserMessage.MESSAGE_PREFIX)) {
-			try {
-				BrowserMessage browserMessage = new BrowserMessage(msg);
-				browserMessage.setReferer(referer);
-				dispatch(browserMessage);
-			} catch (Exception e) {
-				Debug.out(e);
-			}
-		}
+		return listeners.get(id);
 	}
 
 	// @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#dispatch(com.aelitis.azureus.core.messenger.browser.BrowserMessage)
@@ -223,61 +183,17 @@ public class MessageDispatcherSWT
 		if ("lightbox-browser".equals(listenerId)) {
 			listenerId = "display";
 		}
-		if (LISTENER_ID.equals(listenerId)) {
-			handleMessage(message);
-		} else {
-			if (!isValidSequence(message)) {
-				context.debug("Ignoring duplicate: " + message);
-			} else {
-				final BrowserMessageListener listener = getListener(listenerId);
-				if (listener == null) {
-					context.debug("No listener registered with ID " + listenerId);
-				} else {
-					new AEThread2("dispatch for " + listenerId, true) {
-						public void run() {
-							listener.handleMessage(message);
-							message.complete(true, true, null);
-						}
-					}.start();
-				}
-			}
-		}
-	}
 
-	// @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#handleMessage(com.aelitis.azureus.core.messenger.browser.BrowserMessage)
-	public void handleMessage(BrowserMessage message) {
-		String operationId = message.getOperationId();
-		if (OP_RESET_SEQUENCE.equals(operationId)) {
-			resetSequence();
+		final BrowserMessageListener listener = getListener(listenerId);
+		if (listener == null) {
+			context.debug("No listener registered with ID " + listenerId);
 		} else {
-			throw new IllegalArgumentException("Unknown operation: " + operationId);
-		}
-	}
-
-	// @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#isValidSequence(com.aelitis.azureus.core.messenger.browser.BrowserMessage)
-	public boolean isValidSequence(BrowserMessage message) {
-		int sequence = message.getSequence();
-		if (sequence < 0) {
-			return true;
-		}
-
-		if (sequence <= lastSequence) {
-			context.debug("Duplicate sequence number: " + sequence + ", last: "
-					+ lastSequence);
-			return false;
+			new AEThread2("dispatch for " + listenerId, true) {
+				public void run() {
+					listener.handleMessage(message);
+					message.complete(true, true, null);
+				}
+			}.start();
 		}
-
-		lastSequence = sequence;
-		return true;
-	}
-
-	/**
-	 * Resets the sequence number for the given {@link Browser} to 0.
-	 * 
-	 * @param browser {@link Browser} to reset
-	 */
-	public void resetSequence() {
-		context.debug("Reseting sequence number");
-		lastSequence = INITIAL_LAST_SEQUENCE;
 	}
 }
diff --git a/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java b/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java
index 38c3632..25956c5 100644
--- a/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java
+++ b/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java
@@ -46,6 +46,7 @@ import org.gudy.azureus2.ui.swt.views.table.TableCellSWT;
 import org.gudy.azureus2.ui.swt.views.table.TableCellSWTPaintListener;
 import org.gudy.azureus2.ui.swt.views.table.utils.CoreTableColumn;
 
+import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;
 import com.aelitis.azureus.ui.swt.utils.TorrentUIUtilsV3;
 import com.aelitis.azureus.ui.swt.utils.TorrentUIUtilsV3.ContentImageLoadedListener;
 
@@ -127,24 +128,29 @@ public class ColumnThumbAndName
 	}
 
 	public void refresh(TableCell cell, boolean sortOnlyRefresh) {
-		if (sortOnlyRefresh) {
-			String name = null;
-			DownloadManager dm = (DownloadManager) cell.getDataSource();
-			if (dm != null) {
-				name = dm.getDisplayName();
-			}
-			if (name == null) {
-				name = "";
-			}
-			
-			cell.setSortValue(name);
+		String name = null;
+		DownloadManager dm = (DownloadManager) cell.getDataSource();
+		if (dm != null) {
+			name = dm.getDisplayName();
 		}
+		if (name == null) {
+			name = "";
+		}
+		
+		cell.setSortValue(name);
 	}
 
 	public void cellPaint(GC gc, final TableCellSWT cell) {
 		Object ds = cell.getDataSource();
 
 		Rectangle cellBounds = cell.getBounds();
+		
+		int textX = cellBounds.x;
+
+		if (!showIcon) {
+			cellPaintName(cell, gc, cellBounds, textX);
+			return;
+		}
 
 		Image[] imgThumbnail = TorrentUIUtilsV3.getContentImage(ds,
 				cellBounds.height >= 20,
@@ -158,98 +164,105 @@ public class ColumnThumbAndName
 					}
 				});
 
-		if (imgThumbnail == null) {
-			// don't need to release a null image
-			return;
-		}
+		if (imgThumbnail != null && ImageLoader.isRealImage(imgThumbnail[0])) {
+			try {
 		
-
-		if (cellBounds.height > 30) {
-			cellBounds.y += 1;
-			cellBounds.height -= 3;
-		}
-		Rectangle imgBounds = imgThumbnail[0].getBounds();
-
-		int dstWidth;
-		int dstHeight;
-		if (imgBounds.height > cellBounds.height) {
-			dstHeight = cellBounds.height;
-			dstWidth = imgBounds.width * cellBounds.height / imgBounds.height;
-		} else if (imgBounds.width > cellBounds.width) {
-			dstWidth = cellBounds.width - 4;
-			dstHeight = imgBounds.height * cellBounds.width / imgBounds.width;
-		} else {
-			dstWidth = imgBounds.width;
-			dstHeight = imgBounds.height;
-		}
-
-		if (cellBounds.height <= 18) {
-			dstWidth = Math.min(dstWidth, cellBounds.height);
-			dstHeight = Math.min(dstHeight, cellBounds.height);
-			if (imgBounds.width > 16) {
-				cellBounds.y++;
-				dstHeight -= 2;
-			}
-		}
+				if (cellBounds.height > 30) {
+					cellBounds.y += 1;
+					cellBounds.height -= 3;
+				}
+				Rectangle imgBounds = imgThumbnail[0].getBounds();
 		
-		try {
-			gc.setAdvanced(true);
-			gc.setInterpolation(SWT.HIGH);
-		} catch (Exception e) {
-		}
-		int x = cellBounds.x;
-		int textX = x + dstWidth + 3;
-		int minWidth = dstHeight * 7 / 4;
-		int imgPad = 0;
-		if (dstHeight > 25) {
-  		if (dstWidth < minWidth) {
-  			imgPad = ((minWidth - dstWidth + 1) / 2);
-  			x = cellBounds.x + imgPad;
-  			textX = cellBounds.x + minWidth + 3;
-  		}
-		}
-		if (cellBounds.width - dstWidth - (imgPad * 2) < 100 && dstHeight > 18) {
-			dstWidth = Math.min(32, dstHeight);
-			x = cellBounds.x + ((32 - dstWidth + 1) / 2);
-			dstHeight = imgBounds.height * dstWidth / imgBounds.width;
-			textX = cellBounds.x + dstWidth + 3;
-		}
-		int y = cellBounds.y + ((cellBounds.height - dstHeight + 1) / 2);
-		if (dstWidth > 0 && dstHeight > 0 && !imgBounds.isEmpty()) {
-			Rectangle dst = new Rectangle(x, y, dstWidth, dstHeight);
-			Rectangle lastClipping = gc.getClipping();
-			try {
-				gc.setClipping(cellBounds);
-
-				for (int i = 0; i < imgThumbnail.length; i++) {
-					Image image = imgThumbnail[i];
-					if (image == null || image.isDisposed()) {
-						continue;
+				int dstWidth;
+				int dstHeight;
+				if (imgBounds.height > cellBounds.height) {
+					dstHeight = cellBounds.height;
+					dstWidth = imgBounds.width * cellBounds.height / imgBounds.height;
+				} else if (imgBounds.width > cellBounds.width) {
+					dstWidth = cellBounds.width - 4;
+					dstHeight = imgBounds.height * cellBounds.width / imgBounds.width;
+				} else {
+					dstWidth = imgBounds.width;
+					dstHeight = imgBounds.height;
+				}
+		
+				if (cellBounds.height <= 18) {
+					dstWidth = Math.min(dstWidth, cellBounds.height);
+					dstHeight = Math.min(dstHeight, cellBounds.height);
+					if (imgBounds.width > 16) {
+						cellBounds.y++;
+						dstHeight -= 2;
 					}
-					Rectangle srcBounds = image.getBounds();
-					if (i == 0) {
-						int w = dstWidth;
-						int h = dstHeight;
-						if (imgThumbnail.length > 1) {
-							w = w * 9 / 10;
-							h = h * 9 / 10;
+				}
+				
+				try {
+					gc.setAdvanced(true);
+					gc.setInterpolation(SWT.HIGH);
+				} catch (Exception e) {
+				}
+				int x = cellBounds.x;
+				textX = x + dstWidth + 3;
+				int minWidth = dstHeight * 7 / 4;
+				int imgPad = 0;
+				if (dstHeight > 25) {
+		  		if (dstWidth < minWidth) {
+		  			imgPad = ((minWidth - dstWidth + 1) / 2);
+		  			x = cellBounds.x + imgPad;
+		  			textX = cellBounds.x + minWidth + 3;
+		  		}
+				}
+				if (cellBounds.width - dstWidth - (imgPad * 2) < 100 && dstHeight > 18) {
+					dstWidth = Math.min(32, dstHeight);
+					x = cellBounds.x + ((32 - dstWidth + 1) / 2);
+					dstHeight = imgBounds.height * dstWidth / imgBounds.width;
+					textX = cellBounds.x + dstWidth + 3;
+				}
+				int y = cellBounds.y + ((cellBounds.height - dstHeight + 1) / 2);
+				if (dstWidth > 0 && dstHeight > 0 && !imgBounds.isEmpty()) {
+					Rectangle dst = new Rectangle(x, y, dstWidth, dstHeight);
+					Rectangle lastClipping = gc.getClipping();
+					try {
+						gc.setClipping(cellBounds);
+		
+						for (int i = 0; i < imgThumbnail.length; i++) {
+							Image image = imgThumbnail[i];
+							if (image == null || image.isDisposed()) {
+								continue;
+							}
+							Rectangle srcBounds = image.getBounds();
+							if (i == 0) {
+								int w = dstWidth;
+								int h = dstHeight;
+								if (imgThumbnail.length > 1) {
+									w = w * 9 / 10;
+									h = h * 9 / 10;
+								}
+								gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
+										srcBounds.height, x, y, w, h);
+							} else {
+								int w = dstWidth * 3 / 8;
+								int h = dstHeight * 3 / 8;
+								gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
+										srcBounds.height, x + dstWidth - w, y + dstHeight - h, w, h);
+							}
 						}
-						gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
-								srcBounds.height, x, y, w, h);
-					} else {
-						int w = dstWidth * 3 / 8;
-						int h = dstHeight * 3 / 8;
-						gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
-								srcBounds.height, x + dstWidth - w, y + dstHeight - h, w, h);
+					} catch (Exception e) {
+						Debug.out(e);
+					} finally {
+						gc.setClipping(lastClipping);
 					}
 				}
-			} catch (Exception e) {
-				Debug.out(e);
-			} finally {
-				gc.setClipping(lastClipping);
+		
+				TorrentUIUtilsV3.releaseContentImage(ds);
+			} catch (Throwable t) {
+				Debug.out(t);
 			}
 		}
+		
+		cellPaintName(cell, gc, cellBounds, textX);
+	}
 
+	private void cellPaintName(TableCell cell, GC gc, Rectangle cellBounds, int textX) {
 		String name = null;
 		DownloadManager dm = (DownloadManager) cell.getDataSource();
 		if (dm != null)
@@ -260,8 +273,6 @@ public class ColumnThumbAndName
 		GCStringPrinter.printString(gc, name, new Rectangle(textX,
 				cellBounds.y, cellBounds.x + cellBounds.width - textX, cellBounds.height),
 				true, true, SWT.WRAP);
-
-		TorrentUIUtilsV3.releaseContentImage(ds);
 	}
 
 	public String getObfusticatedText(TableCell cell) {
diff --git a/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java b/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java
index d04d022..bd044b2 100644
--- a/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java
+++ b/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java
@@ -74,10 +74,6 @@ public class TableColumnCreatorV3
 				tcStatusItem.setShowTrackerErrors( true );
 			}
 		}
-		ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
-		if (tcColumnNameIcon != null) {
-			tcColumnNameIcon.setShowIcon(false);
-		}
 		if (big) {
 			ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
 			if (tcShareRatioItem != null) {
@@ -124,10 +120,6 @@ public class TableColumnCreatorV3
 				tcStatusItem.setChangeCellFG(false);
 			}
 		}
-		ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
-		if (tcColumnNameIcon != null) {
-			tcColumnNameIcon.setShowIcon(false);
-		}
 		
 		if (big) {
 			ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
@@ -196,10 +188,6 @@ public class TableColumnCreatorV3
 				tcStatusItem.setChangeCellFG(false);
 			}
 		}
-		ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
-		if (tcColumnNameIcon != null) {
-			tcColumnNameIcon.setShowIcon(false);
-		}
 		if (big) {
 			ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
 			if (tcShareRatioItem != null) {
@@ -246,10 +234,6 @@ public class TableColumnCreatorV3
 				tcStatusItem.setChangeCellFG(false);
 			}
 		}
-		ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
-		if (tcColumnNameIcon != null) {
-			tcColumnNameIcon.setShowIcon(false);
-		}
 		if (big) {
 			ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
 			if (tcShareRatioItem != null) {
diff --git a/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java b/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java
index 051c5d3..cd76cbc 100644
--- a/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java
+++ b/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java
@@ -405,7 +405,7 @@ SBC_RCMView
 								public DownloadUrlInfo 
 								getDownloadInfo() 
 								{
-									return(	new DownloadUrlInfo( TorrentUtils.getMagnetURI( rc.getHash())));
+									return(	new DownloadUrlInfo( UrlUtils.getMagnetURI( rc.getHash())));
 								}
 							});
 					}
diff --git a/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java b/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java
index 477c0bf..1dab65b 100644
--- a/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java
+++ b/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java
@@ -2082,12 +2082,12 @@ DeviceManagerUI
 										entry.addListener(
 											new SideBarDropListener()
 											{
-												public void 
+												public boolean 
 												sideBarEntryDrop(
 													SideBarEntry 		entry, 
 													Object 				payload  )
 												{
-													handleDrop((TranscodeTarget)device, payload );
+													return handleDrop((TranscodeTarget)device, payload );
 												}
 											});
 									}
@@ -2589,11 +2589,14 @@ DeviceManagerUI
 		}
 	}
 	
-	public static void
+	public static boolean
 	handleDrop(
 		TranscodeTarget			target,
 		final Object			payload )
 	{
+		if (!(payload instanceof String[]) && !(payload instanceof String)) {
+			return false;
+		}
 		TranscodeChooser deviceChooser = new TranscodeChooser(target) {
 			
 			public void 
@@ -2611,6 +2614,7 @@ DeviceManagerUI
 		};
 		
 		deviceChooser.show();
+		return true;
 	}
 
 	protected static void
@@ -2960,12 +2964,12 @@ DeviceManagerUI
 		entry.addListener(
 				new SideBarDropListener()
 				{
-					public void 
+					public boolean 
 					sideBarEntryDrop(
 						SideBarEntry 		entry, 
 						Object 				payload  )
 					{
-						handleDrop(null, payload);
+						return handleDrop(null, payload);
 					}
 				});
 	}
diff --git a/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java b/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java
index 52dd7d0..9b7b9e9 100644
--- a/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java
+++ b/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java
@@ -32,6 +32,7 @@ import org.eclipse.swt.widgets.*;
 
 import org.gudy.azureus2.core3.internat.MessageText;
 import org.gudy.azureus2.core3.util.AERunnable;
+import org.gudy.azureus2.core3.util.AEThread2;
 import org.gudy.azureus2.core3.util.Debug;
 
 import org.gudy.azureus2.ui.swt.Utils;
@@ -64,7 +65,8 @@ DevicesODFTUX
 	private Font subTitleFont;
 	private Font textInputFont;
 	
-	private Button turnOnButton;
+	private Button	turnOnButton;
+	private Label	noSpaceWarning;
 	
 	private String		dev_image_key;
 	private ImageLoader imageLoader;
@@ -77,7 +79,7 @@ DevicesODFTUX
 	{
 		device	= _device;
 		
-		final long avail = device.getSpaceAvailable();
+		final long avail = device.getSpaceAvailable( false );
 			
 		Utils.execSWTThread(
 			new AERunnable() 
@@ -196,7 +198,7 @@ DevicesODFTUX
 		
 		populateMain( main, no_space_available );
 		
-		populateFooter(footer);
+		populateFooter( footer, no_space_available );
 			
 		shell.setDefaultButton(turnOnButton);
 
@@ -268,12 +270,12 @@ DevicesODFTUX
 		text2.setFont( textInputFont );
 		text2.setText( MessageText.getString("devices.od.turnon.text2", new String[]{ router_text }));
 		
-		Label text3 = new Label(main, SWT.WRAP);
-		text3.setBackground( Colors.white );
-		text3.setFont( textInputFont );
-		text3.setText( MessageText.getString("devices.od.turnon.text3", new String[]{ router_text }));
-		text3.setForeground( Colors.red );
-		text3.setVisible( no_space_available );
+		noSpaceWarning = new Label(main, SWT.WRAP);
+		noSpaceWarning.setBackground( Colors.white );
+		noSpaceWarning.setFont( textInputFont );
+		noSpaceWarning.setText( MessageText.getString("devices.od.turnon.text3", new String[]{ router_text }));
+		noSpaceWarning.setForeground( Colors.red );
+		noSpaceWarning.setVisible( no_space_available );
 
 		Label link = new Label(main, SWT.WRAP);
 		link.setBackground( Colors.white );
@@ -322,10 +324,10 @@ DevicesODFTUX
 		data.top = new FormAttachment(text2, 10 );
 		data.left = new FormAttachment(0);
 		data.right = new FormAttachment(100);
-		text3.setLayoutData(data);
+		noSpaceWarning.setLayoutData(data);
 		
 		data = new FormData();
-		data.top = new FormAttachment(text3, 10 );
+		data.top = new FormAttachment(noSpaceWarning, 10 );
 		data.left = new FormAttachment(0);
 		link.setLayoutData(data);
 	}
@@ -375,7 +377,8 @@ DevicesODFTUX
 	
 	private void 
 	populateFooter(
-		Composite footer) 
+		Composite 				footer,
+		final boolean			no_space_available )
 	{
 		final Button	dont_ask_again = new Button( footer, SWT.CHECK );
 		dont_ask_again.setText(MessageText.getString("general.dont.ask.again"));
@@ -397,8 +400,8 @@ DevicesODFTUX
 		FormData data;
 			
 		data = new FormData();
-		data.left = new FormAttachment(0,50);
-		data.width = 100;
+		data.left = new FormAttachment(0,45);
+		data.right = new FormAttachment(turnOnButton);
 		dont_ask_again.setLayoutData(data);
 
 		data = new FormData();
@@ -429,7 +432,51 @@ DevicesODFTUX
 					shell.close();
 				}
 			});
-				
+			
+		turnOnButton.setEnabled( !no_space_available );
+					
+		new AEThread2( "scanner", true )
+		{
+			private long	last_avail = no_space_available?0:Long.MAX_VALUE;
+			
+			public void
+			run()
+			{
+				while( !shell.isDisposed()){
+					
+					try{
+						Thread.sleep(10*1000);
+						
+						final long avail = device.getSpaceAvailable( true );
+						
+						if ( avail != last_avail ){
+							
+							last_avail = avail;
+							
+							Utils.execSWTThread(
+								new AERunnable() 
+								{
+									public void
+									runSupport()
+									{
+										if ( !turnOnButton.isDisposed()){
+											
+											turnOnButton.setEnabled( avail > 0  );
+										}
+										
+										if ( !noSpaceWarning.isDisposed()){
+											
+											noSpaceWarning.setVisible( avail <= 0 );
+										}
+									}
+								});
+						}
+					}catch( Throwable e ){					
+					}
+				}
+			}
+		}.start();
+		
 		cancelButton.addListener(
 			SWT.Selection, 
 			new Listener() 
diff --git a/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java b/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java
index 4879036..a9f2e62 100644
--- a/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java
+++ b/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java
@@ -20,6 +20,7 @@
 
 package com.aelitis.azureus.ui.swt.extlistener;
 
+import java.util.Collections;
 import java.util.Map;
 
 import org.gudy.azureus2.core3.config.COConfigurationManager;
@@ -85,13 +86,20 @@ public class StimulusRPC
 					if (context == null) {
 						return false;
 					}
-					BrowserMessage browserMsg = new BrowserMessage(value);
-					context.debug("Received External message: " + browserMsg);
-					String opId = browserMsg.getOperationId();
-					String lId = browserMsg.getListenerId();
+					
+					// AZMSG;x;listener-id;op-id;params
+					String[] splitVal = value.split(";", 5);
+					if (splitVal.length != 5) {
+						return false;
+					}
+					String lId = splitVal[2];
+					String opId = splitVal[3];
+					Map decodedMap = JSONUtils.decodeJSON(splitVal[4]);
+					if (decodedMap == null) {
+						decodedMap = Collections.EMPTY_MAP;
+					}
 
 					if (opId.equals(DisplayListener.OP_OPEN_URL)) {
-						Map decodedMap = browserMsg.getDecodedMap();
 						String url = MapUtils.getMapString(decodedMap, "url", null);
 						if (!decodedMap.containsKey("target")) {
 							context.debug("no target for url: " + url);
@@ -110,8 +118,7 @@ public class StimulusRPC
 							// and return the boolean result if we wanted/needed
 							BrowserMessageDispatcher dispatcher = context.getDispatcher();
 							if (dispatcher != null) {
-								dispatcher.dispatch(browserMsg);
-								dispatcher.resetSequence();
+								dispatcher.dispatch(new BrowserMessage(lId, opId, decodedMap));
 							} else {
 								context.debug("No dispatcher for StimulusRPC" + opId);
 							}
@@ -120,7 +127,6 @@ public class StimulusRPC
 						}
 
 					} else if (opId.equals(TorrentListener.OP_LOAD_TORRENT)) {
-						Map decodedMap = browserMsg.getDecodedMap();
 						if (decodedMap.containsKey("b64")) {
 							String b64 = MapUtils.getMapString(decodedMap, "b64", null);
 							return TorrentListener.loadTorrentByB64(core, b64);
@@ -165,7 +171,6 @@ public class StimulusRPC
 						// determines this by the is-ready function
 						return mainWindow.isReady();
 					} else if (opId.equals("is-version-ge")) {
-						Map decodedMap = browserMsg.getDecodedMap();
 						if (decodedMap.containsKey("version")) {
 							String id = MapUtils.getMapString(decodedMap, "id", "client");
 							String version = MapUtils.getMapString(decodedMap, "version", "");
@@ -178,7 +183,6 @@ public class StimulusRPC
 						return false;
 
 					} else if (opId.equals("is-active-tab")) {
-						Map decodedMap = browserMsg.getDecodedMap();
 						if (decodedMap.containsKey("tab")) {
 							String tabID = MapUtils.getMapString(decodedMap, "tab", "");
 							if (tabID.length() > 0) {
@@ -205,17 +209,14 @@ public class StimulusRPC
 						}
 					} else if (DisplayListener.DEFAULT_LISTENER_ID.equals(lId)) {
 						if (DisplayListener.OP_REFRESH_TAB.equals(opId)) {
-							Map decodedMap = browserMsg.getDecodedMap();
 							DisplayListener.refreshTab(MapUtils.getMapString(decodedMap, "browser-id", ""));
 						} else if (DisplayListener.OP_SWITCH_TO_TAB.equals(opId)) {
-							Map decodedMap = browserMsg.getDecodedMap();
 							DisplayListener.switchToTab(MapUtils.getMapString(decodedMap,
 									"target", ""), MapUtils.getMapString(decodedMap,
 									"source-ref", null));
 						}
 
 					} else if (DisplayListener.OP_SHOW_DONATION_WINDOW.equals(lId)) {
-						Map decodedMap = browserMsg.getDecodedMap();
 						DonationWindow.open(true, MapUtils.getMapString(decodedMap,
 								"source-ref", "SRPC"));
 					}
@@ -227,11 +228,11 @@ public class StimulusRPC
 
 						BrowserMessageDispatcher dispatcher = context.getDispatcher();
 						if (dispatcher != null) {
-							dispatcher.dispatch(browserMsg);
+							dispatcher.dispatch(new BrowserMessage(lId, opId, decodedMap));
 						}
 					} else {
 
-						System.err.println("Unhandled external stimulus: " + browserMsg);
+						System.err.println("Unhandled external stimulus: " + value);
 					}
 				} catch (Exception e) {
 					Debug.out(e);
diff --git a/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java b/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java
index fe287f0..aba389e 100644
--- a/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java
+++ b/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java
@@ -20,6 +20,7 @@
 package com.aelitis.azureus.ui.swt.shells.main;
 
 import java.io.*;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.net.URLDecoder;
 import java.util.*;
@@ -113,12 +114,6 @@ public class MainWindow
 
 	private SWTSkin skin;
 
-	private org.gudy.azureus2.ui.swt.mainwindow.MainWindow oldMW_tab;
-
-	private org.gudy.azureus2.ui.swt.mainwindow.MainWindow oldMW_SB;
-
-	private org.gudy.azureus2.ui.swt.mainwindow.MainWindow oldMainWindow;
-
 	private MainMenu menu;
 
 	private UISWTInstanceImpl uiSWTInstanceImpl;
@@ -1054,24 +1049,14 @@ public class MainWindow
 		isReady = false;
 
 		disposedOrDisposing = true;
-		if (oldMainWindow != null) {
-			boolean res = oldMainWindow.dispose(bForRestart, bCloseAlreadyInProgress);
-			oldMainWindow = null;
-
-			if (res == false) {
-				disposedOrDisposing = false;
-				return false;
-			}
-		} else {
-			if (core != null
-					&& !UIExitUtilsSWT.canClose(core.getGlobalManager(), bForRestart)) {
-				disposedOrDisposing = false;
-				return false;
-			}
-
-			UIExitUtilsSWT.uiShutdown();
+		if (core != null
+				&& !UIExitUtilsSWT.canClose(core.getGlobalManager(), bForRestart)) {
+			disposedOrDisposing = false;
+			return false;
 		}
 
+		UIExitUtilsSWT.uiShutdown();
+
 		if (systemTraySWT != null) {
 			systemTraySWT.dispose();
 		}
@@ -1255,10 +1240,6 @@ public class MainWindow
 	}
 
 	private void showMainWindow() {
-		if (oldMainWindow != null) {
-			//oldMainWindow.postPluginSetup(-1, 0);
-		}
-
 		boolean isOSX = org.gudy.azureus2.core3.util.Constants.isOSX;
 		boolean bEnableTray = COConfigurationManager.getBooleanParameter("Enable System Tray");
 		boolean bPassworded = COConfigurationManager.getBooleanParameter("Password enabled");
@@ -1283,9 +1264,9 @@ public class MainWindow
 			if (!isOSX) {
 				shell.forceActive();
 			}
-		} else if (isOSX) {
-			shell.setMinimized(true);
+		} else if (Utils.isCarbon) {
 			shell.setVisible(true);
+			shell.setMinimized(true);
 		}
 		
 
@@ -2038,46 +2019,6 @@ public class MainWindow
 		}
 	}
 
-	/**
-	 * 
-	 */
-	private org.gudy.azureus2.ui.swt.mainwindow.MainWindow createOldMainWindow() {
-		if (oldMainWindow != null || disposedOrDisposing) {
-			return oldMainWindow;
-		}
-
-		SideBar sideBar = (SideBar) SkinViewManager.getByClass(SideBar.class);
-		if (sideBar != null) {
-			sideBar.showEntryByID(SideBar.SIDEBAR_SECTION_ADVANCED);
-		}
-
-		SkinView skinView = SkinViewManager.getByClass(SBC_AdvancedView.class);
-		if (skinView instanceof SBC_AdvancedView) {
-			oldMainWindow = ((SBC_AdvancedView) skinView).getOldMainWindow();
-		}
-		return oldMainWindow;
-	}
-
-	public org.gudy.azureus2.ui.swt.mainwindow.MainWindow getOldMainWindow(
-			boolean bForceCreate) {
-		if (oldMW_SB == null && bForceCreate) {
-			oldMainWindow = createOldMainWindow();
-		}
-		oldMainWindow = oldMW_SB;
-
-		return oldMainWindow;
-	}
-
-	public UIFunctionsSWT getOldUIFunctions(boolean bCreateOld) {
-		if (oldMainWindow == null && bCreateOld) {
-			createOldMainWindow();
-		}
-		if (oldMainWindow != null) {
-			return oldMainWindow.getUIFunctions();
-		}
-		return null;
-	}
-
 	public UISWTInstance getUISWTInstanceImpl() {
 		return uiSWTInstanceImpl;
 	}
@@ -2088,23 +2029,6 @@ public class MainWindow
 	 */
 	public void showURL(final String url, String target) {
 
-		if (url.startsWith("AZMSG%3B") && false) {
-			try {
-				BrowserMessage browserMsg;
-				browserMsg = new BrowserMessage(URLDecoder.decode(url, "utf-8"));
-				ClientMessageContext context = PlatformMessenger.getClientMessageContext();
-				BrowserMessageDispatcher dispatcher = context.getDispatcher();
-				if (dispatcher != null) {
-					dispatcher.dispatch(browserMsg);
-					dispatcher.resetSequence();
-				} else {
-					browserMsg.debug("no dispatcher for showURL action");
-				}
-			} catch (UnsupportedEncodingException e) {
-			}
-			return;
-		}
-
 		if ("_blank".equalsIgnoreCase(target)) {
 			Utils.launch(url);
 			return;
@@ -2166,12 +2090,6 @@ public class MainWindow
 
 	public boolean isVisible(int windowElement) {
 		if (windowElement == IMainWindow.WINDOW_ELEMENT_TOOLBAR) {
-			/*
-			 * Only the (embedded) old main window has a toolbar which is available only in Vuze Advanced
-			 */
-			if (null != oldMainWindow) {
-				return oldMainWindow.isVisible(windowElement);
-			}
 		} else if (windowElement == IMainWindow.WINDOW_ELEMENT_TOPBAR) {
 			SWTSkinObject skinObject = skin.getSkinObject(SkinConstants.VIEWID_PLUGINBAR);
 			if (skinObject != null) {
@@ -2193,12 +2111,6 @@ public class MainWindow
 
 	public void setVisible(int windowElement, boolean value) {
 		if (windowElement == IMainWindow.WINDOW_ELEMENT_TOOLBAR) {
-			if (null != oldMainWindow) {
-				/*
-				 * Only the (embedded) old main window has a toolbar which is available only in Vuze Advanced
-				 */
-				oldMainWindow.setVisible(windowElement, value);
-			}
 		} else if (windowElement == IMainWindow.WINDOW_ELEMENT_TOPBAR) {
 
 			SWTSkinUtils.setVisibility(skin, SkinConstants.VIEWID_PLUGINBAR
@@ -2217,12 +2129,6 @@ public class MainWindow
 
 	public Rectangle getMetrics(int windowElement) {
 		if (windowElement == IMainWindow.WINDOW_ELEMENT_TOOLBAR) {
-			if (null != oldMainWindow) {
-				/*
-				 * Only the (embedded) old main window has a toolbar which is available only in Vuze Advanced
-				 */
-				return oldMainWindow.getMetrics(windowElement);
-			}
 		} else if (windowElement == IMainWindow.WINDOW_ELEMENT_TOPBAR) {
 
 			SWTSkinObject skinObject = skin.getSkinObject(SkinConstants.VIEWID_PLUGINBAR);
@@ -2305,6 +2211,9 @@ public class MainWindow
 	public void openView(final String parentID, final Class cla, String id,
 			final Object data, final boolean closeable) {
 		final SideBar sideBar = (SideBar) SkinViewManager.getByClass(SideBar.class);
+		if (sideBar == null) {
+			return;
+		}
 
 		if (id == null) {
 			id = cla.getName();
@@ -2323,56 +2232,39 @@ public class MainWindow
 		Utils.execSWTThreadLater(0, new AERunnable() {
 
 			public void runSupport() {
-				if (sideBar != null) {
-					if (isOnAdvancedView()) {
-						try {
-							final IView view = (IView) cla.newInstance();
-
-							Tab mainTabSet = oldMainWindow.getMainTabSet();
-							mainTabSet.createTabItem(view, true);
-						} catch (Exception e) {
-							Debug.out(e);
-						}
-					} else {
-						if (sideBar.showEntryByID(_id)) {
-							return;
-						}
-						if (UISWTViewEventListener.class.isAssignableFrom(cla)) {
-							try {
-								UISWTViewEventListener l = (UISWTViewEventListener) cla.newInstance();
-								sideBar.createTreeItemFromEventListener(parentID, null, l, _id,
-										closeable, data);
-							} catch (Exception e) {
-								Debug.out(e);
-							}
-						} else {
-							sideBar.createTreeItemFromIViewClass(parentID, _id, null, cla,
-									null, null, data, null, true);
+				if (sideBar.showEntryByID(_id)) {
+					return;
+				}
+				if (UISWTViewEventListener.class.isAssignableFrom(cla)) {
+					UISWTViewEventListener l = null;
+					try {
+						Constructor<?> constructor = cla.getConstructor(new Class[] {
+							data.getClass()
+						});
+						l = (UISWTViewEventListener) constructor.newInstance(new Object[] {
+							data
+						});
+					} catch (Exception e) {
+					}
+					try {
+						if (l == null) {
+							l = (UISWTViewEventListener) cla.newInstance();
 						}
-						sideBar.showEntryByID(_id);
+						sideBar.createTreeItemFromEventListener(parentID, null, l, _id,
+								closeable, data);
+					} catch (Exception e) {
+						Debug.out(e);
 					}
+				} else {
+					sideBar.createTreeItemFromIViewClass(parentID, _id, null, cla,
+							null, null, data, null, true);
 				}
+				sideBar.showEntryByID(_id);
 			}
 		});
 
 	}
 
-	public boolean isOnAdvancedView() {
-		SideBar sideBar = (SideBar) SkinViewManager.getByClass(SideBar.class);
-		if (sideBar == null) {
-			return false;
-		}
-		SideBarEntrySWT currentSB = sideBar.getCurrentEntry();
-		if (currentSB == null) {
-			return false;
-		}
-		if (oldMainWindow != null && currentSB.id != null
-				&& currentSB.id.equals(SideBar.SIDEBAR_SECTION_ADVANCED)) {
-			return true;
-		}
-		return false;
-	}
-
 	// @see com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBarListener#sidebarItemSelected(com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBarInfoSWT, com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBarInfoSWT)
 	public void sidebarItemSelected(SideBarEntrySWT newSideBarEntry,
 			SideBarEntrySWT oldSideBarEntry) {
@@ -2395,20 +2287,6 @@ public class MainWindow
 			updateMapTrackUsage(id2);
 		}
 
-		if (newSideBarEntry.id.equals(SideBar.SIDEBAR_SECTION_ADVANCED)
-				&& oldMW_SB == null) {
-			SkinView[] advViews = SkinViewManager.getMultiByClass(SBC_AdvancedView.class);
-			if (advViews != null) {
-				for (int i = 0; i < advViews.length; i++) {
-					SBC_AdvancedView advView = (SBC_AdvancedView) advViews[i];
-					if (oldMW_tab == null || advView.getOldMainWindow() != oldMW_tab) {
-						oldMW_SB = advView.getOldMainWindow();
-					}
-				}
-			}
-			oldMainWindow = oldMW_SB;
-		}
-
 		if (mapTrackUsage != null) {
 			newSideBarEntry.addListener((SideBarLogIdListener) this);
 		}
diff --git a/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java b/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java
index a4401bb..03ce018 100644
--- a/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java
+++ b/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java
@@ -29,6 +29,8 @@ import org.eclipse.swt.events.PaintListener;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.*;
 
+import org.gudy.azureus2.core3.config.COConfigurationManager;
+import org.gudy.azureus2.core3.config.ParameterListener;
 import org.gudy.azureus2.core3.download.DownloadManager;
 import org.gudy.azureus2.core3.internat.MessageText;
 import org.gudy.azureus2.core3.logging.LogEvent;
@@ -45,6 +47,7 @@ import org.gudy.azureus2.ui.swt.Utils;
 import org.gudy.azureus2.ui.swt.mainwindow.*;
 import org.gudy.azureus2.ui.swt.mainwindow.MainWindow;
 import org.gudy.azureus2.ui.swt.minibar.AllTransfersBar;
+import org.gudy.azureus2.ui.swt.minibar.MiniBarManager;
 import org.gudy.azureus2.ui.swt.plugins.*;
 import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTInstanceImpl;
 import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewImpl;
@@ -104,30 +107,32 @@ public class UIFunctionsImpl
 	 */
 	private SWTSkin skin = null;
 
+	protected boolean isTorrentMenuVisible;
+
 	/**
 	 * @param window
 	 */
 	public UIFunctionsImpl(
 			com.aelitis.azureus.ui.swt.shells.main.MainWindow window) {
 		this.mainWindow = window;
+		
+		COConfigurationManager.addAndFireParameterListener(
+				"Menu.show.torrent.menu", new ParameterListener() {
+					public void parameterChanged(String parameterName) {
+						isTorrentMenuVisible = COConfigurationManager.getBooleanParameter("Menu.show.torrent.menu");
+					}
+				});
 	}
 
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#addPluginView(org.gudy.azureus2.plugins.PluginView)
 	public void addPluginView(PluginView view) {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions == null) {
-				pluginViews_mon.enter();
-				try {
-					mapPluginViews.put(view, null);
-				} finally {
-					pluginViews_mon.exit();
-				}
-				return;
+			pluginViews_mon.enter();
+			try {
+				mapPluginViews.put(view, null);
+			} finally {
+				pluginViews_mon.exit();
 			}
-
-			uiFunctions.addPluginView(view);
-
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "addPluginView", e));
 		}
@@ -153,19 +158,12 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#addPluginView(org.gudy.azureus2.ui.swt.plugins.UISWTPluginView)
 	public void addPluginView(UISWTPluginView view) {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions == null) {
-				pluginViews_mon.enter();
-				try {
-					mapPluginViews.put(view, null);
-				} finally {
-					pluginViews_mon.exit();
-				}
-				return;
+			pluginViews_mon.enter();
+			try {
+				mapPluginViews.put(view, null);
+			} finally {
+				pluginViews_mon.exit();
 			}
-
-			uiFunctions.addPluginView(view);
-
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "addPluginView", e));
 		}
@@ -196,12 +194,11 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closeDownloadBars()
 	public void closeDownloadBars() {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions == null) {
-				return;
-			}
-
-			uiFunctions.closeDownloadBars();
+			Utils.execSWTThreadLater(0, new AERunnable() {
+				public void runSupport() {
+					MiniBarManager.getManager().closeAll();
+				}
+			});
 
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "closeDownloadBars", e));
@@ -212,11 +209,6 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closePluginView(org.gudy.azureus2.ui.swt.views.IView)
 	public void closePluginView(IView view) {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions != null) {
-				uiFunctions.closePluginView(view);
-			}
-
 			SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
 			if (sideBarView instanceof SideBar) {
 				SideBar sideBar = (SideBar) sideBarView;
@@ -242,11 +234,6 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closePluginViews(java.lang.String)
 	public void closePluginViews(String sViewID) {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions != null) {
-				uiFunctions.closePluginViews(sViewID);
-			}
-
 			SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
 			if (sideBarView instanceof SideBar) {
 				SideBar sideBar = (SideBar) sideBarView;
@@ -285,13 +272,7 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#getPluginViews()
 	public UISWTView[] getPluginViews() {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(true);
-			if (uiFunctions == null) {
-				return new UISWTView[0];
-			}
-
-			return uiFunctions.getPluginViews();
-
+			return new UISWTView[0];
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "getPluginViews", e));
 		}
@@ -369,11 +350,6 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.UIFunctions#refreshIconBar()
 	public void refreshIconBar() {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions != null) {
-				uiFunctions.refreshIconBar();
-			}
-
 			ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class);
 			if (tb != null) {
 				tb.refreshCoreToolBarItems();
@@ -390,13 +366,6 @@ public class UIFunctionsImpl
 		try {
 			mainWindow.setSelectedLanguageItem();
 			
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions == null) {
-				return;
-			}
-
-			uiFunctions.refreshLanguage();
-
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "refreshLanguage", e));
 		}
@@ -406,13 +375,8 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.UIFunctions#removeManagerView(org.gudy.azureus2.core3.download.DownloadManager)
 	public void removeManagerView(DownloadManager dm) {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions == null) {
-				return;
-			}
-
-			uiFunctions.removeManagerView(dm);
-
+			// TODO: ????!
+			
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "removeManagerView", e));
 		}
@@ -422,19 +386,14 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#removePluginView(java.lang.String)
 	public void removePluginView(String viewID) {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions == null) {
-				pluginViews_mon.enter();
-				try {
-					mapPluginViews.remove(viewID);
-				} finally {
-					pluginViews_mon.exit();
-				}
-				PluginsMenuHelper.getInstance().removePluginViews(viewID);
-				return;
-			}
 
-			uiFunctions.removePluginView(viewID);
+			pluginViews_mon.enter();
+			try {
+				mapPluginViews.remove(viewID);
+			} finally {
+				pluginViews_mon.exit();
+			}
+			PluginsMenuHelper.getInstance().removePluginViews(viewID);
 
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "removePluginView", e));
@@ -445,19 +404,14 @@ public class UIFunctionsImpl
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#removePluginView(org.gudy.azureus2.ui.swt.plugins.UISWTPluginView)
 	public void removePluginView(UISWTPluginView view) {
 		try {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions == null) {
-				pluginViews_mon.enter();
-				try {
-					mapPluginViews.remove(view);
-				} finally {
-					pluginViews_mon.exit();
-				}
-				PluginsMenuHelper.getInstance().removePluginView(view, view.getPluginViewName());
-				return;
-			}
 
-			uiFunctions.removePluginView(view);
+			pluginViews_mon.enter();
+			try {
+				mapPluginViews.remove(view);
+			} finally {
+				pluginViews_mon.exit();
+			}
+			PluginsMenuHelper.getInstance().removePluginView(view, view.getPluginViewName());
 
 		} catch (Exception e) {
 			Logger.log(new LogEvent(LOGID, "removePluginView", e));
@@ -510,14 +464,6 @@ public class UIFunctionsImpl
 	}
 		
 	private void _openView(int viewID, Object data) {
-		if (mainWindow.isOnAdvancedView()) {
-			UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-			if (uiFunctions != null) {
-				uiFunctions.openView(viewID, data);
-				return;
-			}
-		}
-
 		switch (viewID) {
 			case VIEW_CONSOLE:
 				mainWindow.openView(SideBar.SIDEBAR_SECTION_TOOLS, LoggerView.class,
@@ -724,21 +670,15 @@ public class UIFunctionsImpl
 	}
 
 	public void refreshTorrentMenu() {
+		if (!isTorrentMenuVisible) {
+			return;
+		}
 		try {
-			if (mainWindow.isOnAdvancedView()) {
-				UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-
-				if (uiFunctions != null) {
-					uiFunctions.refreshTorrentMenu();
-				}
-				return;
-			}
-
 			Utils.execSWTThread(new AERunnable() {
 				public void runSupport() {
 					final MenuItem torrentItem = MenuFactory.findMenuItem(
 							mainWindow.getMainMenu().getMenu(IMenuConstants.MENU_ID_MENU_BAR),
-							MenuFactory.MENU_ID_TORRENT);
+							MenuFactory.MENU_ID_TORRENT, false);
 
 					if (null != torrentItem) {
 
@@ -788,12 +728,6 @@ public class UIFunctionsImpl
 	
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closeAllDetails()
 	public void closeAllDetails() {
-		UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-		if (uiFunctions != null) {
-			uiFunctions.closeAllDetails();
-			return;
-		}
-
 		SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
 		if (sideBarView instanceof SideBar) {
 			SideBar sideBar = (SideBar) sideBarView;
@@ -811,10 +745,6 @@ public class UIFunctionsImpl
 	
 	// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#hasDetailViews()
 	public boolean hasDetailViews() {
-		UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-		if (uiFunctions != null) {
-			return uiFunctions.hasDetailViews();
-		}
 		SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
 		if (sideBarView instanceof SideBar) {
 			SideBar sideBar = (SideBar) sideBarView;
diff --git a/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java b/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java
index 480c8f1..ceadecd 100644
--- a/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java
+++ b/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java
@@ -393,6 +393,7 @@ public class TorrentUIUtilsV3
 						}
 					}, 500);
 		}
+/**
 		if ((image == null || image.isDisposed()) && thumbnailUrl != null) {
 			//System.out.println("get image from " + thumbnailUrl);
 			image = imageLoader.getUrlImage(thumbnailUrl,
@@ -403,8 +404,9 @@ public class TorrentUIUtilsV3
 						}
 					});
 			//System.out.println("returning " + image + " (url loading)");
-			return new Image[] { image };
+			return image == null ? null : new Image[] { image };
 		}
+**/
 		if (image == null || image.isDisposed()) {
 			//System.out.println("build image from files");
 			DownloadManager dm = DataSourceUtils.getDM(datasource);
@@ -436,9 +438,9 @@ public class TorrentUIUtilsV3
 			}
 
 			if (image == null) {
-				imageLoader.addImage(id, ImageLoader.noImage);
+				imageLoader.addImageNoDipose(id, ImageLoader.noImage);
 			} else {
-				imageLoader.addImage(id, image);
+				imageLoader.addImageNoDipose(id, image);
 			}
 		} else {
 			//System.out.println("has mystery image");
diff --git a/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java b/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java
index dda89a7..8d0edf4 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java
@@ -39,7 +39,7 @@ public class MyTorrentsView_Big
 	
 
 	public boolean isOurDownloadManager(DownloadManager dm) {
-		if (PlatformTorrentUtils.isUpdateDM(dm)) {
+		if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
 			return false;
 		}
 		
diff --git a/com/aelitis/azureus/ui/swt/views/skin/SBC_AdvancedView.java b/com/aelitis/azureus/ui/swt/views/skin/SBC_AdvancedView.java
deleted file mode 100644
index 8eb3e79..0000000
--- a/com/aelitis/azureus/ui/swt/views/skin/SBC_AdvancedView.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Created on Jul 8, 2008
- *
- * Copyright 2008 Vuze, Inc.  All rights reserved.
- * 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; version 2 of the License only.
- * 
- * 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 
- */
-
-package com.aelitis.azureus.ui.swt.views.skin;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-
-import org.gudy.azureus2.core3.util.*;
-import org.gudy.azureus2.ui.swt.Messages;
-import org.gudy.azureus2.ui.swt.Utils;
-import org.gudy.azureus2.ui.swt.mainwindow.IMainMenu;
-import org.gudy.azureus2.ui.swt.mainwindow.MainWindow;
-import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
-import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTInstanceImpl;
-
-import com.aelitis.azureus.core.AzureusCoreFactory;
-import com.aelitis.azureus.ui.common.updater.UIUpdatable;
-import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
-import com.aelitis.azureus.ui.swt.UIFunctionsSWT;
-import com.aelitis.azureus.ui.swt.shells.main.UIFunctionsImpl;
-import com.aelitis.azureus.ui.swt.skin.SWTSkinObject;
-import com.aelitis.azureus.ui.swt.utils.ColorCache;
-
-/**
- * @author TuxPaper
- * @created Jul 8, 2008
- *
- */
-public class SBC_AdvancedView
-	extends SkinView
-	implements UIUpdatable
-{
-	private MainWindow oldMainWindow;
-
-
-	// @see com.aelitis.azureus.ui.swt.views.skin.SkinView#skinObjectInitialShow(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
-	public Object skinObjectInitialShow(SWTSkinObject skinObject, Object params) {
-		createOldMainWindow();
-		return null;
-	}
-
-	// @see com.aelitis.azureus.ui.swt.utils.UIUpdatable#getUpdateUIName()
-	public String getUpdateUIName() {
-		return "SB_AdvancedView";
-	}
-
-	// @see com.aelitis.azureus.ui.swt.utils.UIUpdatable#updateUI()
-	public void updateUI() {
-	}
-
-	private org.gudy.azureus2.ui.swt.mainwindow.MainWindow createOldMainWindow() {
-		final UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
-		final UISWTInstance uiSWTInstance = uiFunctions.getUISWTInstance();
-		if (uiSWTInstance == null) {
-			System.out.println("This will end only in disaster! "
-					+ Debug.getCompressedStackTrace());
-		}
-
-		return (org.gudy.azureus2.ui.swt.mainwindow.MainWindow) Utils.execSWTThreadWithObject(
-				"createOldMainWindow", new AERunnableObject() {
-
-					public Object runSupport() {
-
-						oldMainWindow = null;
-						final Composite cArea = (Composite) soMain.getControl();
-						Display display = cArea.getDisplay();
-
-						final Label lblWait = new Label(cArea, SWT.CENTER);
-						FormData formData = new FormData();
-						formData.left = new FormAttachment(0, 0);
-						formData.right = new FormAttachment(100, 0);
-						formData.top = new FormAttachment(0, 0);
-						formData.bottom = new FormAttachment(100, 0);
-						lblWait.setLayoutData(formData);
-						lblWait.setForeground(soMain.getProperties().getColor(
-								"color.row.fg"));
-						Messages.setLanguageText(lblWait, "v3.MainWindow.view.wait");
-						cArea.layout(true);
-						lblWait.update();
-
-						Color c = display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
-						if (Constants.isUnix) {
-							// Hack: For some reason, if we set the color of a Composite
-							// to the widget background color, it will use the color
-							// of the parent composite, even when backgroundmode is
-							// INHERIT_NONE
-							// The hack fix is to not use the exact color :(
-							if (c.getRed() > 0) {
-								c = ColorCache.getColor(display, c.getRed() - 1, c.getGreen(),
-										c.getBlue());
-							} else {
-								c = ColorCache.getColor(display, c.getRed() + 1, c.getGreen(),
-										c.getBlue());
-							}
-						}
-						cArea.setBackground(c);
-
-						oldMainWindow = new org.gudy.azureus2.ui.swt.mainwindow.MainWindow(
-								AzureusCoreFactory.getSingleton(), null, cArea.getShell(),
-								cArea, (UISWTInstanceImpl) uiSWTInstance);
-						oldMainWindow.setShowMainWindow(false);
-						oldMainWindow.runSupport();
-
-						Utils.execSWTThreadLater(10, new AERunnable() {
-							public void runSupport() {
-								oldMainWindow.postPluginSetup(-1, 0);
-
-
-								Object menu = cArea.getShell().getData("MainMenu");
-								if (menu instanceof IMainMenu) {
-									oldMainWindow.setMainMenu((IMainMenu) menu);
-								}
-
-								((UIFunctionsImpl) uiFunctions).oldMainWindowInitialized(oldMainWindow);
-
-								lblWait.dispose();
-								cArea.layout(true);
-							}
-						});
-
-						return oldMainWindow;
-					}
-
-				}, 0);
-	}
-
-	public MainWindow getOldMainWindow() {
-		return oldMainWindow;
-	}
-}
diff --git a/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java b/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java
index 863983a..86fcafb 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java
@@ -485,7 +485,7 @@ public class SBC_LibraryView
 		final GlobalManager gm = core.getGlobalManager();
 		final DownloadManagerListener dmListener = new DownloadManagerAdapter() {
 			public void stateChanged(DownloadManager dm, int state) {
-				if (PlatformTorrentUtils.isUpdateDM(dm)) {
+				if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
 					return;
 				}
 				if (dm.getAssumedComplete()) {
@@ -535,7 +535,7 @@ public class SBC_LibraryView
 			}
 			
 			public void completionChanged(DownloadManager dm, boolean completed) {
-				if (PlatformTorrentUtils.isUpdateDM(dm)) {
+				if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
 					return;
 				}
 				if (completed) {
@@ -610,7 +610,7 @@ public class SBC_LibraryView
 		
 		gm.addListener(new GlobalManagerAdapter() {
 			public void downloadManagerRemoved(DownloadManager dm) {
-				if (PlatformTorrentUtils.isUpdateDM(dm)) {
+				if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
 					return;
 				}
 				recountUnopened();
@@ -632,7 +632,7 @@ public class SBC_LibraryView
 			}
 			
 			public void downloadManagerAdded(DownloadManager dm) {
-				if (PlatformTorrentUtils.isUpdateDM(dm)) {
+				if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
 					return;
 				}
 				dm.addListener(dmListener, false);
@@ -658,7 +658,7 @@ public class SBC_LibraryView
 		List downloadManagers = gm.getDownloadManagers();
 		for (Iterator iter = downloadManagers.iterator(); iter.hasNext();) {
 			DownloadManager dm = (DownloadManager) iter.next();
-			if (PlatformTorrentUtils.isUpdateDM(dm)) {
+			if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
 				continue;
 			}
 			dm.addListener(dmListener, false);
diff --git a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java
index 4054c61..65a7a21 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java
@@ -50,9 +50,7 @@ import org.gudy.azureus2.ui.common.util.MenuItemManager;
 import org.gudy.azureus2.ui.swt.MenuBuildUtils;
 import org.gudy.azureus2.ui.swt.URLTransfer;
 import org.gudy.azureus2.ui.swt.Utils;
-import org.gudy.azureus2.ui.swt.mainwindow.Colors;
-import org.gudy.azureus2.ui.swt.mainwindow.MenuFactory;
-import org.gudy.azureus2.ui.swt.mainwindow.PluginsMenuHelper;
+import org.gudy.azureus2.ui.swt.mainwindow.*;
 import org.gudy.azureus2.ui.swt.mainwindow.PluginsMenuHelper.IViewInfo;
 import org.gudy.azureus2.ui.swt.mainwindow.PluginsMenuHelper.PluginAddedViewListener;
 import org.gudy.azureus2.ui.swt.plugins.UISWTViewEvent;
@@ -114,11 +112,11 @@ public class SideBar
 {
 	private static final boolean END_INDENT = Constants.isLinux || Constants.isWindows2000 || Constants.isWindows9598ME;
 	
-	private static final boolean USE_PAINTITEM = Utils.isCocoa;
+	private static final boolean USE_PAINTITEM = Utils.isCocoa || Constants.isWindows;
 	
 	// Need to use paint even on Cocoa, because there's cases where an area
 	// will become invalidated and we don't get a paintitem :(
-	private static final boolean USE_PAINT = true;
+	private static final boolean USE_PAINT = !Constants.isWindows;
 	
 	private static final boolean HIDE_NATIVE_EXPANDER = false;
 
@@ -146,8 +144,6 @@ public class SideBar
 	
 	public static final String SIDEBAR_SECTION_RELATED_CONTENT = "RelatedContent";
 
-	public static final String SIDEBAR_SECTION_ADVANCED = "Advanced";
-
 	public static final boolean SHOW_ALL_PLUGINS = false;
 
 	public static final boolean SHOW_TOOLS = false;
@@ -169,7 +165,7 @@ public class SideBar
 		"#1c2056"
 	};
 
-	private static final boolean DO_OUR_OWN_TREE_INDENT = Utils.isCocoa;
+	private static final boolean DO_OUR_OWN_TREE_INDENT = false;
 
 	private SWTSkin skin;
 
@@ -181,6 +177,8 @@ public class SideBar
 
 	private Font fontHeader;
 
+	private Font font;
+
 	private SideBarEntrySWT currentSideBarEntry;
 
 	private static Map mapTitleInfoToEntry = new LightHashMap();
@@ -559,12 +557,17 @@ public class SideBar
 
 		tree.setBackground(bg);
 		tree.setForeground(fg);
+		
+		int fontHeight = 13 + (tree.getItemHeight() > 18 ? tree.getItemHeight() - 18 : 0); 
 
 		FontData[] fontData = tree.getFont().getFontData();
+		Utils.getFontHeightFromPX(tree.getDisplay(), fontData, null, fontHeight - 1);
+		font = new Font(tree.getDisplay(), fontData);
+		tree.setFont(font);
 		//fontData[0].setHeight(fontData[0].getHeight() + 1);
 		fontData[0].setStyle(SWT.BOLD);
 		//fontData[0].setName("Helvetica");
-		Utils.getFontHeightFromPX(tree.getDisplay(), fontData, null, 13);
+		Utils.getFontHeightFromPX(tree.getDisplay(), fontData, null, fontHeight);
 		fontHeader = new Font(tree.getDisplay(), fontData);
 
 		Listener treeListener = new Listener() {
@@ -584,6 +587,10 @@ public class SideBar
 							event.width = size.x + event.x; // tree.getClientArea().width;
 							event.x = 0;
 						}
+						
+						if (Constants.isWindows) {
+							event.width = clientWidth - event.x;
+						}
 						int padding = 4;
 						//String id = (String) treeItem.getData("Plugin.viewID");
 						//SideBarEntrySWT entry = getSideBarInfo(id);
@@ -598,7 +605,7 @@ public class SideBar
 					case SWT.PaintItem: {
 						if (USE_PAINTITEM) {
 							String id = (String) ((TreeItem) event.item).getData("Plugin.viewID");
-							//System.out.println(event.item + ";" + event.index + ";" + event.detail + ";" + id);
+							//System.out.println("PaintItem: " + event.item + ";" + event.index + ";" + event.detail + ";" + id + ";" + event.getBounds() + ";" + event.gc.getClipping());
 							SideBarEntrySWT entry = getEntry(id);
 							paintSideBar(event, entry);
 						}
@@ -755,6 +762,7 @@ public class SideBar
 
 					case SWT.Dispose: {
 						fontHeader.dispose();
+						font.dispose();
 						if (dropTarget != null && !dropTarget.isDisposed()) {
 							dropTarget.dispose();
 						}
@@ -816,29 +824,26 @@ public class SideBar
 
 			// @see org.eclipse.swt.dnd.DropTargetAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
 			public void dragOver(DropTargetEvent event) {
-				if (!(event.item instanceof TreeItem)) {
-					event.detail = DND.DROP_NONE;
-					return;
-				}
-				TreeItem treeItem = (TreeItem) event.item;
-
-				String id = (String) treeItem.getData("Plugin.viewID");
-				SideBarEntrySWT entry = getEntry(id);
+				TreeItem treeItem = (event.item instanceof TreeItem)
+						? (TreeItem) event.item : null;
 
-				if (entry.hasDropListeners()) {
-					draggingOver = entry;
-					if (Constants.isOSX) {
-						tree.redraw();
-					}
-					if ((event.operations & DND.DROP_LINK) > 0)
-						event.detail = DND.DROP_LINK;
-					else if ((event.operations & DND.DROP_DEFAULT) > 0)
-						event.detail = DND.DROP_DEFAULT;
-					else if ((event.operations & DND.DROP_COPY) > 0)
-						event.detail = DND.DROP_COPY;
+				if (treeItem != null) {
+  				String id = (String) treeItem.getData("Plugin.viewID");
+  				SideBarEntrySWT entry = getEntry(id);
+  
+  				draggingOver = entry;
 				} else {
-					event.detail = DND.DROP_NONE;
+					draggingOver = null;
+				}
+				if (Constants.isOSX) {
+					tree.redraw();
 				}
+				if ((event.operations & DND.DROP_LINK) > 0)
+					event.detail = DND.DROP_LINK;
+				else if ((event.operations & DND.DROP_DEFAULT) > 0)
+					event.detail = DND.DROP_DEFAULT;
+				else if ((event.operations & DND.DROP_COPY) > 0)
+					event.detail = DND.DROP_COPY;
 			}
 			
 			// @see org.eclipse.swt.dnd.DropTargetAdapter#dragLeave(org.eclipse.swt.dnd.DropTargetEvent)
@@ -851,6 +856,7 @@ public class SideBar
 				draggingOver = null;
 				tree.redraw();
 				if (!(event.item instanceof TreeItem)) {
+					defaultDrop(event);
 					return;
 				}
 				TreeItem treeItem = (TreeItem) event.item;
@@ -858,7 +864,10 @@ public class SideBar
 				String id = (String) treeItem.getData("Plugin.viewID");
 				SideBarEntrySWT entry = getEntry(id);
 
-				entry.triggerDropListeners(event.data);
+				boolean handled = entry.triggerDropListeners(event.data);
+				if (!handled) {
+					defaultDrop(event);
+				}
 			}
 		});
 
@@ -988,6 +997,13 @@ public class SideBar
 	}
 
 	/**
+	 * @param event
+	 */
+	protected void defaultDrop(DropTargetEvent event) {
+		TorrentOpener.openDroppedTorrents(event, false);
+	}
+
+	/**
 	 * @param menuDropDown
 	 *
 	 * @since 3.1.1.1
@@ -1125,7 +1141,10 @@ public class SideBar
 	protected void paintSideBar(Event event, SideBarEntrySWT sideBarEntry) {
 		TreeItem treeItem = (TreeItem) event.item;
 		Rectangle itemBounds = treeItem.getBounds();
-		Rectangle drawBounds = Utils.isCocoa ? event.gc.getClipping() : event.getBounds();
+		Rectangle drawBounds = Utils.isCocoa || Constants.isWindows ? event.gc.getClipping() : event.getBounds();
+		if (drawBounds.isEmpty()) {
+			return;
+		}
 		
 		String text = (String) treeItem.getData("text");
 		if (text == null)
@@ -1162,7 +1181,7 @@ public class SideBar
 		int x1IndicatorOfs = SIDEBAR_SPACING;
 		int x0IndicatorOfs = itemBounds.x;
 
-		//System.out.println(System.currentTimeMillis() + "] refhres " + sideBarInfo.getId());
+		//System.out.println(System.currentTimeMillis() + "] refresh " + sideBarEntry.getId() + "; " + itemBounds + ";clip=" + event.gc.getClipping() + ";eb=" + event.getBounds());
 		if (sideBarEntry.titleInfo != null) {
 			String textIndicator = (String) sideBarEntry.titleInfo.getTitleInfoProperty(ViewTitleInfo.TITLE_INDICATOR_TEXT);
 			if (textIndicator != null) {
@@ -1509,8 +1528,6 @@ public class SideBar
 		entry.setImageLeftID("image.sidebar.library");
 		entry.disableCollapse = true;
 
-		addDropTest(entry);
-
 		createEntryFromSkinRef(SIDEBAR_SECTION_LIBRARY, SIDEBAR_SECTION_LIBRARY_DL,
 				"library", MessageText.getString("sidebar.LibraryDL"), null, null,
 				false, -1);
@@ -1628,11 +1645,6 @@ public class SideBar
 
 		loadCloseables();
 
-		if (System.getProperty("v3.sidebar.advanced", "0").equals("1")) {
-			createEntryFromSkinRef(null, SIDEBAR_SECTION_ADVANCED,
-					"main.area.advancedtab", "Advanced", null, null, false, -1);
-		}
-
 		Composite parent = tree.getParent();
 
 		if (parent.isVisible()) {
@@ -1692,7 +1704,7 @@ public class SideBar
 			return;
 		}
 		entry.addListener(new SideBarDropListener() {
-			public void sideBarEntryDrop(SideBarEntry entry, Object droppedObject) {
+			public boolean sideBarEntryDrop(SideBarEntry entry, Object droppedObject) {
 				String s = "You just dropped " + droppedObject.getClass() + "\n"
 						+ droppedObject + "\n\n";
 				if (droppedObject.getClass().isArray()) {
@@ -1709,6 +1721,7 @@ public class SideBar
 					}
 				}
 				new MessageBoxShell(SWT.OK, "test", s).open(null);
+				return true;
 			}
 		});
 
@@ -1726,6 +1739,7 @@ public class SideBar
 						"v3.MainWindow.menu.getting_started").replaceAll("&", ""), null,
 				null, true, 0);
 		entry.setImageLeftID("image.sidebar.welcome");
+		addDropTest(entry);
 		return entry;
 	}
 
@@ -2884,13 +2898,7 @@ public class SideBar
 			itemSelected(entry.treeItem);
 			return true;
 		}
-		if (id.equals(SIDEBAR_SECTION_ADVANCED)) {
-			SideBarEntrySWT entryAdv = createEntryFromSkinRef(null,
-					SIDEBAR_SECTION_ADVANCED, "main.area.advancedtab", "Advanced", null,
-					null, false, -1);
-			itemSelected(entryAdv.treeItem);
-			return true;
-		} else if (id.equals(SIDEBAR_SECTION_WELCOME)) {
+		if (id.equals(SIDEBAR_SECTION_WELCOME)) {
 			SideBarEntrySWT entryWelcome = createWelcomeSection();
 			itemSelected(entryWelcome.treeItem);
 			return true;
diff --git a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java
index 0a06210..73c7c6c 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java
@@ -412,12 +412,22 @@ public class SideBarEntrySWT implements SideBarEntry
 		return listDropListeners != null && listDropListeners.size() > 0;
 	}
 
-	protected void triggerDropListeners(Object o) {
+	/**
+	 * 
+	 * @param o
+	 * @return true: handled; false: not handled
+	 */
+	protected boolean triggerDropListeners(Object o) {
+		boolean handled = false;
 		Object[] list = listDropListeners.toArray();
 		for (int i = 0; i < list.length; i++) {
 			SideBarDropListener l = (SideBarDropListener) list[i];
-			l.sideBarEntryDrop(this, o);
+			handled = l.sideBarEntryDrop(this, o);
+			if (handled) {
+				break;
+			}
 		}
+		return handled;
 	}
 
 	public String getLogID() {
diff --git a/com/aelitis/azureus/util/ImportExportUtils.java b/com/aelitis/azureus/util/ImportExportUtils.java
index cf494db..7a45058 100644
--- a/com/aelitis/azureus/util/ImportExportUtils.java
+++ b/com/aelitis/azureus/util/ImportExportUtils.java
@@ -160,6 +160,35 @@ public final class ImportExportUtils {
 	}
 	
 	public final static void
+	exportFloat(
+		Map		map,
+		String	key,
+		float	value )
+	
+		throws IOException
+	{
+		exportString( map, key, String.valueOf( value ));
+	}
+	
+	public final static float
+	importFloat(
+		Map		map,
+		String	key,
+		float	def )
+	
+		throws IOException
+	{
+		String	str = importString( map, key );
+		
+		if ( str == null ){
+			
+			return( def );
+		}
+		
+		return( Float.parseFloat( str ));
+	}
+	
+	public final static void
 	exportBoolean(
 		Map		map,
 		String	key,
diff --git a/com/aelitis/azureus/util/InitialisationFunctions.java b/com/aelitis/azureus/util/InitialisationFunctions.java
index a45fc11..849a122 100644
--- a/com/aelitis/azureus/util/InitialisationFunctions.java
+++ b/com/aelitis/azureus/util/InitialisationFunctions.java
@@ -27,9 +27,7 @@ import java.net.URL;
 import com.aelitis.azureus.core.AzureusCore;
 import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
 import com.aelitis.azureus.core.content.AzureusPlatformContentDirectory;
-import com.aelitis.azureus.core.content.RelatedContent;
 import com.aelitis.azureus.core.content.RelatedContentManager;
-import com.aelitis.azureus.core.content.RelatedContentManagerListener;
 import com.aelitis.azureus.core.devices.DeviceManagerFactory;
 import com.aelitis.azureus.core.download.DownloadManagerEnhancer;
 import com.aelitis.azureus.core.metasearch.MetaSearchManagerFactory;
diff --git a/com/aelitis/azureus/vivaldi/ver2/DeserializedPosition.java b/com/aelitis/azureus/vivaldi/ver2/DeserializedPosition.java
deleted file mode 100644
index cbdd0b9..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/DeserializedPosition.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The DHTNetworkPosition implementation for deserialized coordinates.
- */
-class DeserializedPosition extends SyrahPosition {
-	private Coordinate coords;
-	private float error;
-	private long age;
-  
-	protected DeserializedPosition(DataInputStream dis) throws IOException {
-		coords = new Coordinate(VivaldiV2PositionProvider.NUM_DIMS, dis);
-		error = dis.readFloat();
-		age = dis.readLong();
-  }
-
-	public Coordinate getCoords() {
-		return coords;
-	}
-
-	public Coordinate getStableCoords() {
-		return coords;
-	}
-
-  public float getError() {
-    return error;
-  }
-
-  public long getAge() {
-    return age;
-  }
-  
-	public float estimateRTT(DHTNetworkPosition other) {
-		SyrahPosition sp = (SyrahPosition) other;
-    if (Float.isNaN(getError()) || Float.isNaN(sp.getError())) return Float.NaN;
-		return (float) coords.distanceToNonOriginCoord(sp.getCoords());
-	}
-
-	public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
-		SyrahPosition sp = (SyrahPosition) other;
-		coords = sp.getCoords();
-		error = sp.getError();
-    age = sp.getAge();
-	}
-
-	public void serialise(DataOutputStream dos) throws IOException {
-		coords.toSerialized(dos);
-		dos.writeFloat(error);
-		dos.writeLong(age);
-  }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/IDWrapper.java b/com/aelitis/azureus/vivaldi/ver2/IDWrapper.java
deleted file mode 100644
index 56faef6..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/IDWrapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.util.Arrays;
-
-/*
- * Wrapper for node identifiers so they implement equals, hashCode, and compareTo.
- */
-public class IDWrapper implements Comparable<IDWrapper> {
-	/**
-	 * Translation from a number in the interval [0, 16) to its hexadecimal
-	 * representation.
-	 */
-	public static final char[] hex_char = { '0', '1', '2', '3', '4', '5', '6',
-			'7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
-	private final byte[] raw_id;
-	
-	public IDWrapper(byte[] _raw_id) {
-		raw_id = _raw_id;
-	}
-	
-  public byte[] getRawId () {
-    return raw_id;
-  }
-  
-	public boolean equals(Object obj) {
-		if (obj instanceof IDWrapper) {
-			IDWrapper other = (IDWrapper) obj;
-			return Arrays.equals(raw_id, other.raw_id);
-		}
-		return false;
-	}
-	
-	public int hashCode() {
-		return Arrays.hashCode(raw_id);
-	}
-
-	public int compareTo(IDWrapper other) {
-		if (this == other) {
-			return 0;
-		}
-
-		// assume all identifiers are of the same length
-		for (int i = 0; i < raw_id.length; ++i) {
-			if (raw_id[i] != other.raw_id[i]) {
-				return ((raw_id[i] & 0xFF) < (other.raw_id[i] & 0xFF)) ? -1 : 1;
-			}
-		}
-		return 0;
-	}
-	
-	public String toString() {
-		StringBuffer sbuf = new StringBuffer(64);
-		
-		sbuf.append("0x");
-		for (int i = 0; i < raw_id.length; ++i) {
-			sbuf.append(hex_char[(raw_id[i] >> 4) & 0xF]);
-			sbuf.append(hex_char[raw_id[i] & 0xF]);
-		}
-		return sbuf.toString();
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/InitialPosition.java b/com/aelitis/azureus/vivaldi/ver2/InitialPosition.java
deleted file mode 100644
index 467a299..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/InitialPosition.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The initial Vivaldi position of a remote peer.
- */
-class InitialPosition extends SyrahPosition {
-	final static Coordinate zero_coords = new Coordinate(VivaldiV2PositionProvider.NUM_DIMS);
-	final static float error = 1.0f; 
-	
-	public InitialPosition() {
-	}
-
-	public Coordinate getCoords() {
-		return zero_coords;
-	}
-
-	public Coordinate getStableCoords() {
-		return zero_coords;
-	}
-
-	public float getError() {
-		return 1.0f;
-	}
-
-  public long getAge () {
-    return 0L;
-  }
-  
-	public float estimateRTT(DHTNetworkPosition other) {
-		// log error
-		VivaldiV2PositionProvider.doLog("method estimateRTT invoked on initial position");
-		
-		SyrahPosition sp = (SyrahPosition) other;
-		return (float) zero_coords.distanceTo(sp.getCoords());
-	}
-
-	public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
-		// log error
-		VivaldiV2PositionProvider.doLog("method update invoked on initial position");
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/LocalPosition.java b/com/aelitis/azureus/vivaldi/ver2/LocalPosition.java
deleted file mode 100644
index caf11d2..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/LocalPosition.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The DHTNetworkPosition implementation for the local node.
- */
-class LocalPosition extends SyrahPosition {
-	private final VivaldiV2PositionProvider v2_provider;
-	
-	protected LocalPosition(VivaldiV2PositionProvider _v2_provider) {
-		v2_provider = _v2_provider;
-	}
-
-	public Coordinate getCoords() {
-		return v2_provider.getCoords();
-	}
-
-	public Coordinate getStableCoords() {
-		return v2_provider.getStableCoords();
-	}
-
-	public float getError() {
-		return (float) v2_provider.getError();
-	}
-
-	public long getAge () {
-		return v2_provider.getAge();
-	}
-  
-	public float estimateRTT(DHTNetworkPosition other) {
-		SyrahPosition sp = (SyrahPosition) other;
-    if (Float.isNaN(getError()) || Float.isNaN(sp.getError())) return Float.NaN;
-		return (float)getCoords().distanceToNonOriginCoord(sp.getCoords());
-	}
-
-	public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
-		v2_provider.update(this, new IDWrapper(other_id), (SyrahPosition) other, rtt);
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/RemotePosition.java b/com/aelitis/azureus/vivaldi/ver2/RemotePosition.java
deleted file mode 100644
index a9a41bb..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/RemotePosition.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The DHTNetworkPosition implementation for a remote node.
- */
-class RemotePosition extends SyrahPosition {
-	private Coordinate coords;
-	private float error;
-	private long age;
-  
-	protected RemotePosition(DataInputStream dis) throws IOException {
-		coords = new Coordinate(VivaldiV2PositionProvider.NUM_DIMS, dis);
-		error = dis.readFloat();
-		age = dis.readLong();
-	}
-
-	public Coordinate getCoords() {
-		return coords;
-	}
-
-       // Because we are currently sending only one coordinate over the wire,
-       // only got one to reply with.
-       // In future might want to send both and use stable coord for routing table
-	public Coordinate getStableCoords() {
-		return coords;
-	}
-
-
-	public float getError() {
-		return error;
-	}
-
-  public long getAge () {
-    return age;
-  }
-  
-	public float estimateRTT(DHTNetworkPosition other) {
-		SyrahPosition sp = (SyrahPosition) other;
-    if (Float.isNaN(error) || Float.isNaN(sp.getError())) return Float.NaN;
-    return (float) coords.distanceToNonOriginCoord(sp.getCoords());
-	}
-
-	public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
-		// log error
-		VivaldiV2PositionProvider.doLog("method update invoked on a remote position");
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/StableLocalPosition.java b/com/aelitis/azureus/vivaldi/ver2/StableLocalPosition.java
deleted file mode 100644
index 3355b7d..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/StableLocalPosition.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-
-import edu.harvard.syrah.nc.Coordinate;
-
-class StableLocalPosition extends LocalPosition {
-	
-	protected StableLocalPosition(VivaldiV2PositionProvider _v2_provider) {
-		super( _v2_provider );
-	}
-
-	public Coordinate getCoords() {
-		return( getStableCoords());
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/SyrahPosition.java b/com/aelitis/azureus/vivaldi/ver2/SyrahPosition.java
deleted file mode 100644
index 7559c5d..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/SyrahPosition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * Abstract DHTNetworkPosition implementation for local and remote nodes.
- */
-abstract class SyrahPosition implements DHTNetworkPosition {
-	protected SyrahPosition() {
-	}
-
-	public abstract Coordinate getStableCoords();	
-
-	public abstract Coordinate getCoords();
-	
-  public abstract float getError();
-  
-  public abstract long getAge();
-	
-	public byte getPositionType() {
-		return DHTNetworkPosition.POSITION_TYPE_VIVALDI_V2;
-	}
-
-	public int getSerialisedSize() {
-		// 1 byte version + count dimensions and error, each as a float + age (which is a long)
-		return 1 + ( 4 * (VivaldiV2PositionProvider.NUM_DIMS + 1)) + (1 * 8);
-	}
-	
-	public void serialise(DataOutputStream dos) throws IOException {
-		getCoords().toSerialized(dos);
-		dos.writeFloat(getError());
-    dos.writeLong(getAge());
-	}
-  
-	public boolean
-	isValid()
-	{
-		return( (!Float.isNaN( getError())) && getCoords().isValid());
-	}
-	
-	public double[] getLocation() {
-		Coordinate coords = getStableCoords();
-		
-		return( coords.getCoordinates());
-	}
-	
-  public String toString () {
-    return new String (getCoords()+",er="+getError()+",age="+getAge());
-  }
-  
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/TransientTuple.java b/com/aelitis/azureus/vivaldi/ver2/TransientTuple.java
deleted file mode 100644
index 889c91d..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/TransientTuple.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-class TransientTuple {
-	protected long remove_time;
-	protected final IDWrapper id;
-	protected SyrahPosition last_pos;
-	protected float last_rtt;
-	protected long create_time;
-  
-	public TransientTuple(long _remove_time, IDWrapper _id, SyrahPosition _last_pos, 
-    float _last_rtt, long _create_time) {
-		remove_time = _remove_time;
-		id = _id;
-		last_pos = _last_pos;
-		last_rtt = _last_rtt;
-    create_time = _create_time;
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/VivaldiV2PositionProvider.java b/com/aelitis/azureus/vivaldi/ver2/VivaldiV2PositionProvider.java
deleted file mode 100644
index c7eb331..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/VivaldiV2PositionProvider.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Created on 24-Apr-2006 Created by Paul Gardner Copyright (C) 2006 Aelitis,
- * All Rights Reserved.
- * 
- * 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.
- * 
- * AELITIS, SAS au capital de 46,603.30 euros 8 Allee Lenotre, La Grille Royale,
- * 78600 Le Mesnil le Roi, France.
- * 
- */
-
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import org.gudy.azureus2.core3.util.Timer;
-import org.gudy.azureus2.core3.util.TimerEvent;
-import org.gudy.azureus2.core3.util.TimerEventPerformer;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPositionManager;
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPositionProvider;
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPositionProviderInstance;
-import com.aelitis.azureus.core.dht.router.DHTRouter;
-import com.aelitis.azureus.core.dht.router.DHTRouterContact;
-import com.aelitis.azureus.core.dht.router.DHTRouterFactory;
-import com.aelitis.azureus.core.dht.router.DHTRouterFactoryObserver;
-import com.aelitis.azureus.core.dht.router.DHTRouterObserver;
-import com.aelitis.azureus.vivaldi.ver2.stats.SerializationController;
-import com.aelitis.azureus.vivaldi.ver2.stats.V1Serializer;
-
-import edu.harvard.syrah.nc.Coordinate;
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class VivaldiV2PositionProvider implements DHTNetworkPositionProvider,
-		DHTRouterFactoryObserver, DHTRouterObserver {
-	public static final int NUM_DIMS = 5;
-	public static final int TRANSIENT_TIME = 45 * 1000;		// in milliseconds
-  public static final long MIN_NC_UPDATE_INTERVAL = 10*1000;
-  
-	private static final boolean LOGGING_ENABLED = false;
-
-	private static boolean initialised = false;
-	private static volatile DHTNetworkPositionProviderInstance provider = null;
-
-	private final VivaldiClient<IDWrapper> vc;
-	private final InitialPosition ip;
-	
-	protected final SortedSet<IDWrapper> transient_ids;
-	protected final LinkedList<TransientTuple> transient_list;
-	
-	protected final SerializationController serializer;
-	protected final SortedSet<IDWrapper> router_entries;
-  protected DHTRouter router = null;
-  protected long last_nc_update = 0;
-  
-  private boolean	started_up = false;
-  
-	public static synchronized void initialise() {
-		if (!initialised) {
-
-			initialised = true;
-
-			provider = DHTNetworkPositionManager
-					.registerProvider(new VivaldiV2PositionProvider());
-
-			doLog("Vivaldi V2 position provider created");
-		}
-	}
-
-	protected VivaldiV2PositionProvider() {
-		DHTRouterFactory.addObserver(this);
-
-		vc = new VivaldiClient<IDWrapper>(NUM_DIMS);
-		ip = new InitialPosition();
-		
-		transient_ids = new TreeSet<IDWrapper>();
-		transient_list = new LinkedList<TransientTuple>();
-		
-		serializer = new SerializationController();
-		router_entries = new TreeSet<IDWrapper>();
-    
-
-    Timer timer = new Timer("VivaldiV2PositionProvider:ping");
-    
-    timer.addPeriodicEvent(
-      MIN_NC_UPDATE_INTERVAL,
-      new TimerEventPerformer()
-      {
-        public void
-        perform(
-          TimerEvent  event )
-        {
-          ping();
-        
-        }
-      });
-
-	}
-
-  protected void resetPingClock (long curr_time) {
-    last_nc_update = curr_time;
-  }
-  
-  protected void ping () {
-    long curr_time = System.currentTimeMillis();
-    if (curr_time > last_nc_update + MIN_NC_UPDATE_INTERVAL) {
-	//System.out.println ("starting v2position ping");
-      if (router != null) {
-        IDWrapper id = vc.getNeighborToPing(curr_time);
-        if (id != null) {
-          byte[] raw_id = id.getRawId();
-          router.requestPing(raw_id);
-          //System.out.println ("pinging "+id);
-        } else {
-	    //System.out.println ("vc neighbor to ping is null");
-        }
-      } else {
-	  //System.out.println ("router is null");  
-      }
-    } else {
-	//System.out.println ("supressing v2position ping");
-    }
-  }
-    
-	public byte getPositionType() {
-		return (DHTNetworkPosition.POSITION_TYPE_VIVALDI_V2 );
-	}
-
-	public DHTNetworkPosition create(byte[] ID, boolean is_local) {
-		if (is_local) {
-			doLog("Returning position for local peer");
-			
-			return new LocalPosition(this);
-		}
-
-		purgeTransient(System.currentTimeMillis());
-
-		// return the shared initial position of a remote peer
-		return ip;
-	}
-
-	public DHTNetworkPosition deserialisePosition(DataInputStream is)
-			throws IOException {
-		return new RemotePosition(is);
-	}
-
-	public void
-	serialiseStats(
-		DataOutputStream	os )
-	
-		throws IOException
-	{
-		if (!serializer.contains(V1Serializer.VER_01)) {
-			serializer.addSerializer(V1Serializer.getInstance());
-		}
-		serializer.toSerialized(V1Serializer.VER_01, os, vc);
-	}
-	
-	public void routerCreated(DHTRouter _router) {
-		doLog("Vivaldi notified of created router");
-		
-		_router.addObserver(this);
-    router = _router;
-	}
-
-	public synchronized void added(DHTRouterContact contact) {
-		purgeTransient(System.currentTimeMillis());
-    
-		// add to set of router entries
-		IDWrapper id = new IDWrapper(contact.getID());
-		if (!router_entries.contains(id)) {
-			router_entries.add(id);
-			if ( LOGGING_ENABLED ){
-				doLog("added router entry " + id + " " + getStats());
-			}
-		}
-		
-		if (transient_ids.remove(id)) {
-			// was a transient entry, get its latest position and sample
-			TransientTuple tt = null;
-			for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
-				tt = i.next();
-				if (tt.id.equals(id)) {
-					i.remove();
-					break;
-				}
-			}
-			
-			// add state to the vivaldi client
-			long curr_time = System.currentTimeMillis();
-			// add the time this guy has been sitting as a TransientTuple to its age
-			long tt_age = curr_time - tt.create_time + tt.last_pos.getAge();
-			if (vc.processSample(id, tt.last_pos.getCoords(), tt.last_pos.getError(), tt.last_rtt, tt_age,
-					curr_time, true)) {
-			  resetPingClock(curr_time);
-      }
-
-			if ( LOGGING_ENABLED ){
-				doLog(id + "added to router, promoting transient to host " + getStats());
-			}
-		}
-		else if (vc.getHosts().contains(id)) {
-			if ( LOGGING_ENABLED ){
-				doLog(id + " added to router, but was already found as a host");
-			}
-		}
-		else {
-			if ( LOGGING_ENABLED ){
-				doLog(id + " added to router, but was not found as a host or transient");
-			}
-		}
-	}
-
-	public synchronized void removed(DHTRouterContact contact) {
-		purgeTransient(System.currentTimeMillis());
-
-		// remove from router entries
-		IDWrapper id = new IDWrapper(contact.getID());
-		if (router_entries.remove(id)) {
-			if ( LOGGING_ENABLED ){
-				doLog("removed router entry " + id + " " + getStats());
-			}
-		}
-		
-		if (vc.removeHost(id)) {
-			if ( LOGGING_ENABLED ){
-				doLog(id + " removed from router, removed as host " + getStats());
-			}
-		}
-		else if (transient_ids.remove(id)) {
-			// contact identifier is present in list, so find and remove it
-			for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
-				TransientTuple tt = i.next();
-				if (tt.id.equals(id)) {
-					i.remove();
-					break;
-				}
-			}
-	
-			if ( LOGGING_ENABLED ){
-				doLog(id + " removed from router, removed as transient " + getStats());
-			}
-		}
-		else {
-			if ( LOGGING_ENABLED ){
-				doLog(id + " removed from router, but was not found as a host or transient");
-			}
-		}
-	}
-
-	public void locationChanged(DHTRouterContact contact) {
-		purgeTransient(System.currentTimeMillis());
-		
-		// only remove from VivaldiClient when removed from routing table
-	}
-
-	public void nowAlive(DHTRouterContact contact) {
-		purgeTransient(System.currentTimeMillis());
-		
-		// only add to VivaldiClient when coordinates are updated
-	}
-
-	public void nowFailing(DHTRouterContact contact) {
-		purgeTransient(System.currentTimeMillis());
-		
-		// only remove from VivaldiClient when removed from routing table
-	}
-
-	public void destroyed(DHTRouter router) {
-		doLog("Vivaldi notified of destroyed router");
-		
-		router.removeObserver(this);
-		
-		vc.reset();
-		router_entries.clear();
-
-		transient_ids.clear();
-		transient_list.clear();
-	}
-	
-	public DHTNetworkPosition
-	getLocalPosition()
-	{
-		if ( started_up ){
-			
-			return( new StableLocalPosition( this ));
-		}
-		
-			// we only have a stable local position if we've been started up - i.e things are running
-		
-		return( null );
-	}
-	
-	/*
-	 * Pass-thru methods.
-	 */
-	
-	protected Coordinate getCoords() {
-		return vc.getSystemCoords();
-	}
-
-	protected Coordinate getStableCoords() {
-		return vc.getApplicationCoords();
-	}
-	
-  protected float getError() {
-    return (float) vc.getSystemError();
-  }
-
-  protected long getAge() {
-    long age = vc.getAge(System.currentTimeMillis());
-    //System.out.println("age "+age);
-    return age;
-  }
-  
-	protected InitialPosition getInitialPosition() {
-		return ip;
-	}
-	
-	protected VivaldiClient<IDWrapper> getVivaldiClient() {
-		return vc;
-	}
-	
-	/*
-	 * Methods for maintaining the potential adds to the VivaldiClient.
-	 */
-	
-	protected synchronized void update(LocalPosition local_pos, IDWrapper id, SyrahPosition sp, float sample_rtt) {
-		if (sp == local_pos) {
-			doLog("update invoked on LocalPosition with itself, ID = " + id);
-			return;
-		}
-		else if (sp == ip) {
-			doLog("update invoked with the InitialPosition singleton, ID = " + id);
-			return;
-		}
-		
-		long curr_time = System.currentTimeMillis();
-		if (vc.getHosts().contains(id)) {
-			// already maintain state for this peer, so process sample now
-			if (vc.processSample(id, sp.getCoords(), sp.getError(), sample_rtt, sp.getAge(), curr_time, false)) {
-        resetPingClock(curr_time);
-      }
-			
-			doLog("update called on host, ID = " + id);
-			return;
-		}
-		else if (router_entries.contains(id)) {
-			if (transient_ids.remove(id)) {
-				// contact identifier is present in list, so find and remove it
-				for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
-					TransientTuple tt = i.next();
-					if (tt.id.equals(id)) {
-						i.remove();
-						break;
-					}
-				}
-			}
-			
-			// peer is already in the router, so add and process sample now
-			if (vc.processSample(id, sp.getCoords(), sp.getError(), sample_rtt, sp.getAge(), curr_time, true)) {
-			  resetPingClock (curr_time);
-      }
-			
-			doLog("update called on host already in router, ID = " + id);
-			return;
-		}
-		
-		final long new_remove_time = curr_time + TRANSIENT_TIME;
-		if (!transient_ids.contains(id)) {
-			// identifier is not in list yet, so add it and return
-			transient_ids.add(id);
-			transient_list.addLast(new TransientTuple(new_remove_time, id, sp, sample_rtt, curr_time));
-			doLog("added transient " + id + " " + getStats());
-			return;
-		}
-		
-		doLog("updating transient " + id + " " + getStats());
-		
-		// find the entry belonging to the identifier in the list
-		TransientTuple tt = null;
-		for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
-			tt = i.next();
-			if (tt.id.equals(id)) {
-				// once found, remove it
-				i.remove();
-				break;
-			}
-		}
-		
-		// update the entry and add it to the end
-		tt.remove_time = new_remove_time;
-		tt.last_pos = sp;
-		tt.last_rtt = sample_rtt;
-		transient_list.addLast(tt);
-	}
-
-	protected synchronized void purgeTransient(long curr_time) {
-		for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
-			TransientTuple tt = i.next();
-			if (tt.remove_time > curr_time) {
-				// entry expires in the future, so end now
-				return;
-			}
-			
-			i.remove();
-			transient_ids.remove(tt.id);
-			doLog("removed transient " + tt.id + " " + getStats());
-		}
-	}
-	
-	protected String getStats() {
-		return "[h:" + vc.getHosts().size() + ", t:" + transient_list.size() + " re:" + router_entries.size() + "]";
-	}
-	
-	protected static void doLog(String str) {
-    //System.out.println (str);
-		if (LOGGING_ENABLED && (provider != null)) {
-			provider.log(str);
-		}
-	}
-	
-	public void
-	startUp(
-		DataInputStream		is ) //throws IOException
-	{
-		started_up	= true;
-		
-		try{
-			vc.startUp (is);
-			
-		}catch( IOException e ){
-			
-			doLog("startUp failed:" + e.toString());
-		}
-	}
-	
-	public void
-	shutDown(
-		DataOutputStream	os )// throws IOException
-	{	
-		try{
-			vc.shutDown (os);
-			
-		}catch( IOException e ){
-			
-			doLog("shutDown failed:" + e.toString());
-		}
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/SerializationController.java b/com/aelitis/azureus/vivaldi/ver2/stats/SerializationController.java
deleted file mode 100644
index e968fe4..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/SerializationController.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Set;
-import java.util.TreeMap;
-
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class SerializationController {
-	protected final TreeMap<Byte, StatsSerializer> serializers;
-	protected final Set<Byte> versions_ro;
-
-	public SerializationController() {
-		serializers = new TreeMap<Byte, StatsSerializer>();
-		versions_ro = Collections.unmodifiableSet(serializers.keySet());
-		
-		// add version 1
-		StatsSerializer v1_serializer = V1Serializer.getInstance();
-		serializers.put(v1_serializer.getSerializedVersion(), v1_serializer);
-	}
-
-	public boolean addSerializer(StatsSerializer new_serializer) {
-		final byte new_version = new_serializer.getSerializedVersion();
-		if (serializers.containsKey(new_version)) {
-			return false;
-		}
-
-		serializers.put(new_version, new_serializer);
-		return true;
-	}
-
-	public StatsSerializer removeSerializer(byte version) {
-		return serializers.remove(version);
-	}
-	
-	public boolean contains(byte version) {
-		return serializers.containsKey(version);
-	}
-
-	public Set<Byte> getVersions() {
-		return versions_ro;
-	}
-
-	/**
-	 * Instructs the controller to serialize the given statistics to the output
-	 * stream using the provided versioning.
-	 * 
-	 * @param version
-	 * the version of serialization to use
-	 * @param os
-	 * the stream to write the serialized form to
-	 * @param vc
-	 * the client containing the statistics to serialize
-	 * @return <code>true</code> if the statistics were serialized, or
-	 * <code>false</code> if a serializer for the version could not be found
-	 * @throws IOException
-	 * if a serializer was found but an error occured during serialization
-	 */
-	public boolean toSerialized(byte version, DataOutputStream os,
-			VivaldiClient vc) throws IOException {
-		StatsSerializer serializer = serializers.get(version);
-		if (serializer == null) {
-			return false;
-		}
-
-		// write version
-		os.writeByte(version);
-		// then write stats
-		serializer.toSerialized(os, vc);
-		return true;
-	}
-
-	/**
-	 * Instructs the controller to deserialize from the input stream.
-	 * 
-	 * @param is
-	 * the stream to read the serialized form from
-	 * @return the deserialized statistics, or <code>null</code> if no
-	 * deserializer for the read version could not be found
-	 * @throws IOException
-	 * if a deserializer was found but an error occured during deserialization
-	 */
-	public VivaldiStatistics fromSerialized(DataInputStream is)
-			throws IOException {
-		// read version
-		byte version = is.readByte();
-		StatsSerializer serializer = serializers.get(version);
-		if (serializer == null) {
-			return null;
-		}
-
-		// then read stats
-		return serializer.fromSerialized(is);
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/StatsSerializer.java b/com/aelitis/azureus/vivaldi/ver2/stats/StatsSerializer.java
deleted file mode 100644
index 423d8d8..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/StatsSerializer.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public interface StatsSerializer {
-	public static final byte VER_01 = 0x01;
-
-	/*
-	 * Returns the version that the underlying implemnetation serializes and
-	 * deserializes.
-	 */
-	public byte getSerializedVersion();
-
-	/*
-	 * Writes the statistics to the given stream. Returns true if written
-	 * successfully.
-	 */
-	public void toSerialized(DataOutputStream os, VivaldiClient vc) throws IOException;
-
-	/*
-	 * Reads the statistics from the given stream.
-	 */
-	public VivaldiStatistics fromSerialized(DataInputStream is) throws IOException;
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/V1Serializer.java b/com/aelitis/azureus/vivaldi/ver2/stats/V1Serializer.java
deleted file mode 100644
index 1bcac04..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/V1Serializer.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class V1Serializer implements StatsSerializer {
-	private static V1Serializer instance;
-
-	public static synchronized V1Serializer getInstance() {
-		if (instance == null) {
-			instance = new V1Serializer();
-		}
-		return instance;
-	}
-
-	private V1Serializer() {
-	}
-
-	public byte getSerializedVersion() {
-		return StatsSerializer.VER_01;
-	}
-
-	public void toSerialized(DataOutputStream os, VivaldiClient vc) throws IOException {
-		V1Statistics.toSerialized(os, vc);
-	}
-
-	public VivaldiStatistics fromSerialized(DataInputStream is) throws IOException {
-		return new V1Statistics(is);
-	}
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/V1Statistics.java b/com/aelitis/azureus/vivaldi/ver2/stats/V1Statistics.java
deleted file mode 100644
index 3beef68..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/V1Statistics.java
+++ /dev/null
@@ -1,296 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.text.NumberFormat;
-
-import edu.harvard.syrah.nc.Coordinate;
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class V1Statistics implements VivaldiStatistics {
-	public Coordinate sys_coord;
-	public Coordinate app_coord;
-  public float error, dist_to_nearest_neighbor, age_difference,
-  valid_link_count, gravity;
-	public float relative_rank_loss, norm_app_latency_penalty,
-			relative_app_latency_penalty;
-	public float sys_re50, sys_re95, app_re50, app_re95, sys_dd, app_dd;
-	public float neighbors_used_per_update, running_relative_diff,
-			running_sys_update_frequency, running_app_update_frequency;
-	public boolean keepStatistics;
-
-	final static protected NumberFormat nf = NumberFormat.getInstance();
-	final static protected int NFDigits = 3;
-	static boolean haveSetFormat = false;
-  
-  // semantic and other validity checks
-  public boolean isValid () {
-    if ((sys_coord == null) ||
-        (app_coord == null) ||
-        (error < 0) ||
-        (dist_to_nearest_neighbor < 0))
-      return false;
-  
-    if (keepStatistics &&
-        ((sys_re50 > sys_re95) ||
-          (app_re50 > app_re95) ||
-          (running_sys_update_frequency > running_app_update_frequency) ||
-          (age_difference < 0) ||
-          (valid_link_count < 0)))
-      return false;
-    return true;
-  }
-  
-	void checkFormat () {
-	  if (!haveSetFormat) {
-	    if (nf.getMaximumFractionDigits() > NFDigits) {
-	      nf.setMaximumFractionDigits(NFDigits);
-	    }
-	    if (nf.getMinimumFractionDigits() > NFDigits) {
-	      nf.setMinimumFractionDigits(NFDigits);
-	    }
-      nf.setGroupingUsed(false);
-	  }
-	  haveSetFormat = true;
-	}
-
-  public String toString () {
-      checkFormat();
-      String basic = new String 
-	  ("sc "+sys_coord+
-	   " ac "+app_coord+
-	   " er "+nf.format(error)+
-	   " nn "+nf.format(dist_to_nearest_neighbor));
-
-      if (keepStatistics) {
-	  String complete = new String
-	      (" rrl "+nf.format(relative_rank_loss)+
-	       " narl "+nf.format(norm_app_latency_penalty)+
-	       " ralp "+nf.format(relative_app_latency_penalty)+
-	       " age "+nf.format(age_difference)+
-	       " gr "+nf.format(gravity)+
-	       " vl "+nf.format(valid_link_count)+
-	       " sys_re50 "+nf.format(sys_re50)+
-	       " sys_re95 "+nf.format(sys_re95)+
-	       " app_re50 "+nf.format(app_re50)+
-	       " app_re95 "+nf.format(app_re95)+
-	       " sys_dd "+nf.format(sys_dd)+
-	       " app_dd "+nf.format(app_dd)+
-	       " ne "+nf.format(neighbors_used_per_update)+
-	       " rd "+nf.format(running_relative_diff)+
-	       " sf "+nf.format(running_sys_update_frequency)+
-	       " af "+nf.format(running_app_update_frequency));
-
-	  return new String (basic+complete);
-      }
-      return basic;
-  }
-  
-    //public V1Statistics(DataInputStream is) throws IOException {
-	public V1Statistics(DataInputStream is) {
-	    try {
-		if (StatsSerializer.VER_01 == is.readByte()) {
-		int num_dimensions = is.readInt();
-		sys_coord = new Coordinate(num_dimensions, is);
-		app_coord = new Coordinate(num_dimensions, is);
-		error = is.readFloat();
-		dist_to_nearest_neighbor = is.readFloat();
-
-		keepStatistics = is.readBoolean();
-
-		if (keepStatistics) {
-			relative_rank_loss = is.readFloat();
-			norm_app_latency_penalty = is.readFloat();
-			relative_app_latency_penalty = is.readFloat();
-
-			age_difference = is.readFloat();
-			valid_link_count = is.readFloat();
-			gravity = is.readFloat();
-			sys_re50 = is.readFloat();
-			sys_re95 = is.readFloat();
-			app_re50 = is.readFloat();
-			app_re95 = is.readFloat();
-			sys_dd = is.readFloat();
-			app_dd = is.readFloat();
-
-			neighbors_used_per_update = is.readFloat();
-			running_relative_diff = is.readFloat();
-			running_sys_update_frequency = is.readFloat();
-			running_app_update_frequency = is.readFloat();
-
-		}
-		}
-	    } catch (IOException ex) {
-		// flag that stats did not deserialize and should be ignored
-		error = (float)-1.;
-	    }
-	}
-
-	public static void toSerialized(DataOutputStream os, VivaldiClient<?> vc)
-			throws IOException {
-	        os.writeByte (StatsSerializer.VER_01);
-	        os.writeInt (vc.getSystemCoords().getNumDimensions());
-		vc.getSystemCoords().toSerialized (os);
-		vc.getApplicationCoords().toSerialized (os);
-		Hashtable<String, Double> stats = vc.getStatistics();
-		os.writeFloat(new Float(stats.get("er")));
-		os.writeFloat(new Float(stats.get("nn")));
-
-		if (VivaldiClient.keepStatistics) {
-			os.writeBoolean(true);
-			os.writeFloat(new Float(stats.get("rrl")));
-			os.writeFloat(new Float(stats.get("narl")));
-			os.writeFloat(new Float(stats.get("ralp")));
-			os.writeFloat(new Float(stats.get("age")));
-      os.writeFloat(new Float(stats.get("vl")));
-      os.writeFloat(new Float(stats.get("gr")));
-
-			os.writeFloat(new Float(stats.get("sys_re50")));
-			os.writeFloat(new Float(stats.get("sys_re95")));
-			os.writeFloat(new Float(stats.get("app_re50")));
-			os.writeFloat(new Float(stats.get("app_re95")));
-
-			os.writeFloat(new Float(stats.get("sys_dd")));
-			os.writeFloat(new Float(stats.get("app_dd")));
-
-			os.writeFloat(new Float(stats.get("ne")));
-			os.writeFloat(new Float(stats.get("rd")));
-			os.writeFloat(new Float(stats.get("sf")));
-			os.writeFloat(new Float(stats.get("af")));
-		}
-		else {
-			os.writeBoolean(false);
-		}
-	}
-
-	public byte getSerializedVersion() {
-		return StatsSerializer.VER_01;
-	}
-  
-  public long
-  getDBValuesStored() {
-    return 0;
-  }
-  
-  public long
-  getDBKeysBlocked() {
-    return 0;
-  }
-  
-    // Router
-  
-  public long
-  getRouterNodes() {
-    return 0;
-  }
-  
-  public long
-  getRouterLeaves() {
-    return 0;
-  }
-  
-  public long
-  getRouterContacts() {
-    return 0;
-  }
-  
-  public long
-  getRouterUptime() {
-    return 0;
-  }
-  
-  public int
-  getRouterCount() {
-    return 0;
-  }
-  
-    // Transport
-  
-    // totals
-  
-  public long
-  getTotalBytesReceived() {
-    return 0;
-  }
-  
-  public long
-  getTotalBytesSent() {
-    return 0;
-  }
-  
-  public long
-  getTotalPacketsReceived() {
-    return 0;
-  }
-  
-  public long
-  getTotalPacketsSent() {
-    return 0;
-  }
-  
-  public long
-  getTotalPingsReceived() {
-    return 0;
-  }
-  
-  public long
-  getTotalFindNodesReceived() {
-    return 0;
-  }
-  
-  public long
-  getTotalFindValuesReceived() {
-    return 0;
-  }
-  
-  public long
-  getTotalStoresReceived() {
-    return 0;
-  }
-  
-  public long
-  getTotalKeyBlocksReceived() {
-    return 0;
-  }
-  
-  public long
-  getIncomingRequests() {
-    return 0;
-  }
-  
-    // averages
-  
-  public long
-  getAverageBytesReceived() {
-    return 0;
-  }
-  
-  public long
-  getAverageBytesSent() {
-    return 0;
-  }
-  
-  public long
-  getAveragePacketsReceived() {
-    return 0;
-  }
-  
-  public long
-  getAveragePacketsSent() {
-    return 0;
-  }
-  
-  public String
-  getVersion() {
-    return new String("");
-  }
-  
-  public String
-  getString() {
-    return new String ("foo");
-  }
-  
-  
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/VivaldiStatistics.java b/com/aelitis/azureus/vivaldi/ver2/stats/VivaldiStatistics.java
deleted file mode 100644
index 9a9afff..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/VivaldiStatistics.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import com.aelitis.azureus.core.dht.transport.DHTTransportFullStats;
-
-/*
- * A marker interface for any Vivaldi statistics.
- */
-public interface VivaldiStatistics {
-	/*
-	 * Returns the version that the underlying implemnetation serializes and deserializes.
-	 */
-	public byte getSerializedVersion();
-  
-  public boolean isValid();
-  
-}
diff --git a/com/aelitis/net/magneturi/MagnetURIHandler.java b/com/aelitis/net/magneturi/MagnetURIHandler.java
index c17e0bb..2dbed77 100644
--- a/com/aelitis/net/magneturi/MagnetURIHandler.java
+++ b/com/aelitis/net/magneturi/MagnetURIHandler.java
@@ -22,6 +22,9 @@
 
 package com.aelitis.net.magneturi;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.URL;
 
 import com.aelitis.net.magneturi.impl.MagnetURIHandlerImpl;
@@ -44,6 +47,14 @@ MagnetURIHandler
 	getPort();
 	
 	public abstract void
+	process(
+		String			get,
+		InputStream		is,
+		OutputStream	os )
+	
+		throws IOException;
+	
+	public abstract void
 	addListener(
 		MagnetURIHandlerListener l );
 	
diff --git a/com/aelitis/net/magneturi/MagnetURIHandlerListener.java b/com/aelitis/net/magneturi/MagnetURIHandlerListener.java
index 054d15d..9e96aec 100644
--- a/com/aelitis/net/magneturi/MagnetURIHandlerListener.java
+++ b/com/aelitis/net/magneturi/MagnetURIHandlerListener.java
@@ -41,6 +41,7 @@ MagnetURIHandlerListener
 	download(
 		MagnetURIHandlerProgressListener	progress,
 		byte[]								hash,
+		String								args,
 		InetSocketAddress[]					sources,
 		long								timeout )
 	
diff --git a/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java b/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java
index 688f7a9..d99985f 100644
--- a/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java
+++ b/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java
@@ -41,4 +41,7 @@ MagnetURIHandlerProgressListener
 	public void
 	reportCompleteness(
 		int		percent );
+	
+	public boolean 
+	verbose();
 }
diff --git a/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java b/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java
index dfd0bdd..cc86818 100644
--- a/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java
+++ b/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java
@@ -258,6 +258,64 @@ MagnetURIHandlerImpl
 		}
 	}
 	
+	public void
+	process(
+		final String			get,
+		final InputStream		is,
+		final OutputStream		os )
+	
+		throws IOException
+	{
+		new AEThread2( "MagnetProcessor", true )
+		{
+			public void
+			run()
+			{
+				boolean	close = false;
+				
+				try{
+					close = process( get, new BufferedReader( new InputStreamReader( is )), os );
+					
+				}catch( Throwable e ){
+					
+					Debug.out( "Magnet processing failed", e );
+					
+				}finally{
+					
+					if ( close ){
+						
+						try{
+							is.close();
+							
+						}catch( Throwable e ){
+							
+							Debug.out( e );
+						}
+					}
+					
+					try{
+						os.flush();
+												
+					}catch( Throwable e ){
+						
+						Debug.out( e );
+					}
+					
+					if ( close ){
+						
+						try{
+							os.close();
+							
+						}catch( Throwable e ){
+							
+							Debug.out( e );
+						}
+					}
+				}
+			}
+		}.start();
+	}
+	
 	protected boolean
 	process(
 		String			get,
@@ -277,9 +335,17 @@ MagnetURIHandlerImpl
 		
 		int	pos	= get.indexOf( '?' );
 		
-		if ( pos != -1 ){
-					
-			StringTokenizer	tok = new StringTokenizer( get.substring( pos+1 ), "&" );
+		String	arg_str;
+		
+		if ( pos == -1 ){
+			
+			arg_str = "";
+			
+		}else{
+			
+			arg_str = get.substring( pos+1 );
+			
+			StringTokenizer	tok = new StringTokenizer( arg_str, "&" );
 			if (DEBUG) {
 				System.out.println("params:" + get.substring( pos+1 ));
 			}
@@ -496,9 +562,9 @@ MagnetURIHandlerImpl
 
 				pw.flush();
 								
-				String	base_32 = urn.substring(9);
+				String	encoded = urn.substring(9);
 				
-				List	sources = new ArrayList();
+				List<InetSocketAddress>	sources = new ArrayList<InetSocketAddress>();
 				
 				for (int i=0;i<source_params.size();i++){
 					
@@ -520,18 +586,24 @@ MagnetURIHandlerImpl
 					}
 				}
 					
-				InetSocketAddress[]	s = new InetSocketAddress[ sources.size()];
-				
-				sources.toArray( s );
+				InetSocketAddress[]	s = sources.toArray( new InetSocketAddress[ sources.size()] );
 				
 				if (Logger.isEnabled())
 					Logger.log(new LogEvent(LOGID, "MagnetURIHandler: download of '"
-							+ base_32 + "' starts (initial sources=" + s.length + ")"));
+							+ encoded + "' starts (initial sources=" + s.length + ")"));
 
-				byte[] sha1 = Base32.decode( base_32 );
+				byte[] sha1 = UrlUtils.decodeSHA1Hash( encoded );
+					
+				if ( sha1 == null ){
+					
+					throw( new Exception( "Invalid info hash '" + encoded + "'" ));
+				}
+				
+				byte[] data = null;
 				
-				byte[]	data = null;
+				String verbose_str = lc_params.get( "verbose" );
 				
+				final boolean verbose = verbose_str != null && verbose_str.equalsIgnoreCase( "true" );
 				
 				for (int i=0;i<listeners.size();i++){
 				
@@ -564,8 +636,15 @@ MagnetURIHandlerImpl
 									
 									pw.flush();
 								}
+								
+								public boolean 
+								verbose()
+								{
+									return( verbose );
+								}
 							},
 							sha1, 
+							arg_str,
 							s,
 							DOWNLOAD_TIMEOUT );
 					
@@ -577,7 +656,7 @@ MagnetURIHandlerImpl
 				
 				if (Logger.isEnabled())
 					Logger.log(new LogEvent(LOGID, "MagnetURIHandler: download of '"
-							+ base_32
+							+ encoded
 							+ "' completes, data "
 							+ (data == null ? "not found"
 									: ("found, length = " + data.length))));
diff --git a/edu/harvard/syrah/nc/ApplicationObserver.java b/edu/harvard/syrah/nc/ApplicationObserver.java
deleted file mode 100644
index 8316c0c..0000000
--- a/edu/harvard/syrah/nc/ApplicationObserver.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library 
- *
- * 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.
- *
- * 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 ( see the LICENSE file ).
- *
- * 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
- */
-
-/**
- * An observer to be notified when the application coordinates change.
- *
- * @author Michael Parker, Jonathan Ledlie
- */
-public interface ApplicationObserver {
-	/**
-	 * This method is invoked when the application-level coordinates are
-	 * updated.
-	 *
-	 * @param new_coords the new application-level coordinates
-	 */
-	public void coordinatesUpdated(Coordinate new_coords);
-}
diff --git a/edu/harvard/syrah/nc/Coordinate.java b/edu/harvard/syrah/nc/Coordinate.java
deleted file mode 100644
index 68f386b..0000000
--- a/edu/harvard/syrah/nc/Coordinate.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package edu.harvard.syrah.nc;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import java.util.Vector;
-
-/*
- * NCLib - a network coordinate library
- * 
- * 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.
- * 
- * 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 (
- * see the LICENSE file ).
- * 
- * 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
- */
-
-/**
- * A coordinate in the Euclidian space.
- * 
- * @author Michael Parker, Jonathan Ledlie
- */
-public class Coordinate {
-
-	final static protected int CLASS_HASH = Coordinate.class.hashCode();
-
-	final protected double[] coords;
-  final protected byte version;
-  final protected int num_dims;
-
-  public static double MIN_COORD = 0.1;
-  
-    public byte getVersion () {
-	return version;
-    }
-  
-	/**
-	 * Creates a copy of this <code>Coordinate</code> object, such that
-	 * updates in this coordinate are not reflected in the returned object.
-	 * 
-	 * @return a copy of these coordinates
-	 */
-	public Coordinate makeCopy() {
-		return new Coordinate(coords, true);
-	}
-	
-	/**
-	 * Creates a new coordinate having a position at the origin.
-	 * 
-	 * @param num_dimensions
-	 * the number of coordinate dimensions
-	 */
-	public Coordinate(int num_dimensions) {
-		coords = new double[num_dimensions];
-    version = VivaldiClient.CURRENT_VERSION;
-    if (VivaldiClient.USE_HEIGHT) num_dimensions--;
-    num_dims = num_dimensions;
-	}
-
-	/**
-	 * 
-	 * @param num_dimensions
-	 * @param dis
-	 * @throws IOException
-	 */
-
-
-	public Coordinate(int num_dimensions, DataInputStream dis) throws IOException {  
-	  coords = new double[num_dimensions];
-	  version = dis.readByte();
-	  for (int i = 0; i < num_dimensions; i++) {
-	    coords[i] = ((double) dis.readFloat());
-	  }
-    if (VivaldiClient.USE_HEIGHT) num_dimensions--;
-    num_dims = num_dimensions;
-    
-	}
-
-  public void toSerialized(DataOutputStream dos) throws IOException {
-    final int num_dims = coords.length;
-    dos.writeByte (version);
-    for (int i = 0; i < num_dims; ++i) {
-      // when writing, cast to float
-      dos.writeFloat((float) coords[i]);
-    }
-    //if (VivaldiClient.USE_HEIGHT) dos.writeFloat((float) coords[num_dims]);
-  }
-  
-	protected Coordinate(Coordinate c) {
-		this(c.coords, true);
-	}
-
-	/**
-	 * Creates a new coordinate having a position specified by the array
-	 * <code>init_coords</code>. The number of dimensions is this equal to
-	 * the array length.
-	 * 
-	 * @param init_pos
-	 * the position for this coordinate
-	 * @param make_copy
-	 * whether a copy of the array should be made
-	 */
-	protected Coordinate(double[] init_pos, boolean make_copy) {
-    int _num_dims = init_pos.length;
-    if (make_copy) {
-			coords = new double[_num_dims];
-			System.arraycopy(init_pos, 0, coords, 0, _num_dims);
-		}
-		else {
-			coords = init_pos;
-		}
-    version = VivaldiClient.CURRENT_VERSION;
-    if (VivaldiClient.USE_HEIGHT) _num_dims--;
-    num_dims = _num_dims;
-	}
-
-	/**
-	 * Creates a new coordinate having a position specified by the array
-	 * <code>init_coords</code>. The number of dimensions is this equal to
-	 * the array length.
-	 * 
-	 * @param init_pos
-	 * the position for this coordinate
-	 */
-	public Coordinate(float[] init_pos) {
-		int _num_dims = init_pos.length;
-		coords = new double[_num_dims];
-		for (int i = 0; i < _num_dims; ++i) {
-			coords[i] = init_pos[i];
-		}
-    version = VivaldiClient.CURRENT_VERSION;
-    if (VivaldiClient.USE_HEIGHT) _num_dims--;
-    num_dims = _num_dims;
-	}
-
-  public boolean isCompatible (Coordinate _other) {
-    return _other != null && version == _other.version && num_dims == _other.num_dims;
-  }
-  
-	public void bump () {
-	  for (int i = 0; i < coords.length; ++i) {
-	    if (Math.abs(coords[i]) < MIN_COORD) {
-        double length = VivaldiClient.random.nextDouble()+MIN_COORD;
-	      // don't set height to be negative, if we are using it
-        if ( (!VivaldiClient.USE_HEIGHT || i < coords.length-1) &&
-          (VivaldiClient.random.nextBoolean())) {
-          length *= -1.;
-	      }
-	      coords[i] += length;
-	    }
-	  }
-	}
-
-
-
-
-	/**
-	 * Returns the number of dimensions this coordinate has.
-	 * 
-	 * @return the number of coordinate dimensions.
-	 */
-	public int getNumDimensions() {
-		return coords.length;
-	}
-
-	/**
-	 * Returns the Euclidian distance to the given coordinate parameter.
-	 * 
-	 * @param c
-	 * the coordinate to find the Euclidian distance to
-	 * @return the distance to parameter <code>c</code>
-	 */
-  public double distanceToNonOriginCoord(Coordinate c) {
-    if (atOrigin() || c.atOrigin()) return Double.NaN;
-    return distanceTo(c);
-  }
-  
-	double uncheckedDistanceTo(Coordinate c) {
-		if (!isCompatible(c))
-			return Double.NaN;
-		// used for debugging so we can call distanceTo on something null
-		assert ((VivaldiClient.USE_HEIGHT && num_dims == coords.length - 1) || (!VivaldiClient.USE_HEIGHT && num_dims == coords.length));
-		if (c == null)
-		{
-			assert (!VivaldiClient.SIMULATION);
-			return -1.;
-		}
-		double sum = 0.0;
-		for (int i = 0; i < num_dims; ++i)
-		{
-			final double abs_dist = coords[i] - c.coords[i];
-			sum += (abs_dist * abs_dist);
-		}
-		sum = Math.sqrt(sum);
-		if (VivaldiClient.USE_HEIGHT && sum > 0)
-		{
-			sum = sum + coords[coords.length - 1] + c.coords[coords.length - 1];
-		}
-		return sum;
-	}
-  
-	public double distanceTo(Coordinate c) {
-		//System.err.println("us="+this.toString()+" them="+c.toString());
-		if (c == null || !isValid() || !c.isValid())
-			return Double.NaN;
-		return uncheckedDistanceTo(c);
-	}
-
-	// Same regardless of using height
-	public void add(Vec v) {
-		final int num_dims = coords.length;
-		for (int i = 0; i < num_dims; ++i) {
-			coords[i] += v.direction[i];
-		}
-	}
-	
-	public double[]
-	getCoordinates()
-	{
-		if ( num_dims < coords.length ){
-			
-			double[] res = new double[ num_dims ];
-			
-			System.arraycopy( coords, 0, res, 0, num_dims );
-			
-			return( res );
-		}
-		
-		return( coords );
-	}
-
-	/*
-	 * protected method, do not expose to client
-	 */
-  protected Vec getDirection(Coordinate c) {
-    double length = uncheckedDistanceTo(c);
-    if (length == 0) return null;
-    final Vec new_vec = new Vec(coords.length);
-    for (int i = 0; i < num_dims; ++i) {
-      new_vec.direction[i] = (c.coords[i] - coords[i])/length;
-    }
-    if (VivaldiClient.USE_HEIGHT) {
-      new_vec.direction[coords.length-1] = 
-        (c.coords[coords.length-1] + coords[coords.length-1])/length;
-    }
-    return new_vec;
-  }
-
-  protected boolean assign (Coordinate c) {
-    if (coords.length != c.coords.length) return false;
-    for (int i = 0; i < coords.length; ++i) {
-      coords[i] = c.coords[i];
-    }
-    return true;
-  }
-  
-  public void checkHeight () {
-    if (!VivaldiClient.USE_HEIGHT) return;
-    if (coords[coords.length-1] <= MIN_COORD) {
-      coords[coords.length-1] = VivaldiClient.random.nextDouble()+MIN_COORD;
-    }
-  }
-  
-  public boolean atOrigin () {
-    for (int i = 0; i < coords.length; i++) {
-      if (coords[i] != 0)
-        return false;
-    }
-    return true;
-  }
-  
-	public Vec asVectorFromZero(boolean make_copy) {
-		return new Vec(coords, make_copy);
-	}
-
-	public boolean isValid() {
-		for (int i = 0; i < coords.length; ++i)
-		{
-			if (Double.isNaN(coords[i]))
-			{
-				if (VivaldiClient.SIMULATION)
-					System.err.println("coord isNaN i=" + i);
-				return false;
-			}
-			if (coords[i] > VivaldiClient.MAX_DIST_FROM_ORIGIN || coords[i] < VivaldiClient.NEG_MAX_DIST_FROM_ORIGIN)
-			{
-				if (VivaldiClient.SIMULATION)
-					System.err.println("coord too far from origin i=" + i + " coord=" + coords[i]);
-				return false;
-			}
-		}
-		if (VivaldiClient.USE_HEIGHT && coords[coords.length - 1] < 0)
-			return false;
-		return true;
-	}
-
-	protected void reset() {
-		for (int i = 0; i < coords.length; ++i) {
-			coords[i] = 0.;
-		}
-	}
-
-	public boolean equals(Object obj) {
-		if (obj instanceof Coordinate) {
-			Coordinate c = (Coordinate) obj;
-			final int num_dims = coords.length;
-			for (int i = 0; i < num_dims; ++i) {
-				if (coords[i] != c.coords[i]) {
-					return false;
-				}
-			}
-			return true;
-		}
-		return false;
-	}
-
-	public int hashCode() {
-		final int num_dims = coords.length;
-		int hc = CLASS_HASH;
-		for (int i = 0; i < num_dims; ++i) {
-			hc ^= new Double(coords[i]).hashCode();
-		}
-		return hc;
-	}
-
-	public String toString() {
-		final StringBuffer sbuf = new StringBuffer(1024);
-		sbuf.append("[");
-
-		final int num_dims = coords.length;
-		for (int i = 0; true;) {
-      if (i == num_dims-1 && VivaldiClient.USE_HEIGHT) {
-        sbuf.append('h');  
-      }
-      sbuf.append(VivaldiClient.nf.format(coords[i]));
-      if (++i < num_dims) {
-				sbuf.append(",");
-			}
-			else {
-				break;
-			}
-		}
-		sbuf.append("]");
-		return sbuf.toString();
-	}
-
-	public String toStringAsVector() {
-		final StringBuffer sbuf = new StringBuffer(1024);
-
-		for (int i = 0; i < coords.length; i++) {
-      if (i == coords.length - 1 && VivaldiClient.USE_HEIGHT)
-        sbuf.append('h');
-      sbuf.append(VivaldiClient.nf.format(coords[i]));
-      if (i != coords.length - 1)
-				sbuf.append(" ");
-		}
-		return sbuf.toString();
-	}
-
-}
diff --git a/edu/harvard/syrah/nc/EWMAStatistic.java b/edu/harvard/syrah/nc/EWMAStatistic.java
deleted file mode 100644
index 64c7361..0000000
--- a/edu/harvard/syrah/nc/EWMAStatistic.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * @author Last modified by $Author: ledlie $
- * @version $Revision: 1.3 $ on $Date: 2006/05/19 20:02:33 $
- * @since Mar 7, 2006
- */
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library 
- *
- * 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.
- *
- * 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 ( see the LICENSE file ).
- *
- * 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
- */
-
-public class EWMAStatistic {
-
-    public static final double GAIN = 0.01;
-    protected final double gain;
-    protected double value;
-    
-    public EWMAStatistic (double g) {
-      gain = g;
-      value = 0;
-    }
-
-    public EWMAStatistic () {
-      gain = GAIN;
-      value = 0;
-    }
-    
-    synchronized public void add (double item) {
-       value = (GAIN*item)+((1.-GAIN)*value);
-     }
-     
-    synchronized public double get () {
-       return value;
-     }
-       
-}
diff --git a/edu/harvard/syrah/nc/License.txt b/edu/harvard/syrah/nc/License.txt
deleted file mode 100644
index 66f35b9..0000000
--- a/edu/harvard/syrah/nc/License.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-The GNU General Public License (GPL)
-Version 2, June 1991
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
-
-When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and modification follow.
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
-
-1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
-
-a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
-
-b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
-
-c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
-
-3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
-
-a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
-
-If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
-
-4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
-
-5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
-
-6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
-
-7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
-
-This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
-
-9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
-
-10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
-
-To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
-
-one line to give the program's name and a brief idea of what it does.
-Copyright (C) 
-
-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
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
-
-Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
-
-Yoyodyne, Inc., hereby disclaims all copyright interest 
-in the program `Gnomovision' (which makes passes at compilers)
-written by James Hacker.
-
-signature of Ty Coon, 1 April 1989
-Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
diff --git a/edu/harvard/syrah/nc/ObserverList.java b/edu/harvard/syrah/nc/ObserverList.java
deleted file mode 100644
index cc00547..0000000
--- a/edu/harvard/syrah/nc/ObserverList.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library 
- *
- * 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.
- *
- * 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 ( see the LICENSE file ).
- *
- * 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
- */
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * A list of observers for the application-level coordinate.
- *
- * @author Michael Parker, Jonathan Ledlie
- */
-public class ObserverList {
-	final protected List<ApplicationObserver> obs_list;
-
-	protected ObserverList() {
-		obs_list = new LinkedList<ApplicationObserver>();
-	}
-
-	/**
-	 * Returns the number of observers in the list.
-	 *
-	 * @return the size of the observer list
-	 */
-	public int size() {
-		return obs_list.size();
-	}
-
-	/**
-	 * Returns whether the observer list is empty, meaning its size equals
-	 * <code>0</code>.
-	 *
-	 * @return <code>true</code> if the observer list is empty,
-	 * <code>false</code> otherwise
-	 */
-	public boolean isEmpty() {
-		return obs_list.isEmpty();
-	}
-
-	/**
-	 * Returns whether the list contains the given observer. If the parameter
-	 * <code>obj</code> is <code>null</code>, this method returns
-	 * <code>false</code>.
-	 *
-	 * @param obj
-	 * the observer to query for membership in the list
-	 * @return <code>true</code> if the list contains the observer,
-	 * <code>false</code> otherwise
-	 */
-	public boolean contains(ApplicationObserver obj) {
-		return (obj != null) ? obs_list.contains(obj) : false;
-	}
-
-	/**
-	 * Returns an iterator over the list of observers.
-	 *
-	 * @return an iterator over the observer list
-	 */
-	public Iterator<ApplicationObserver> iterator() {
-		return obs_list.iterator();
-	}
-
-	/**
-	 * Adds the given observer to the list of observers. If the parameter
-	 * <code>obj</code> is <code>null</code>, this method returns
-	 * <code>false</code> and the underlying list remains unchanged.
-	 *
-	 * @param obj
-	 * the observer to add to the list
-	 * @return <code>true</code> if the observer is added to the list,
-	 * <code>false</code> otherwise
-	 */
-	public boolean add(ApplicationObserver obj) {
-		return (obj != null) ? obs_list.add(obj) : false;
-	}
-
-	/**
-	 * Removes the given observer from the list of observers. If the parameter
-	 * <code>obj</code> is <code>null</code> or the list does not contain
-	 * the observer, this method returns <code>false</code> and the underlying
-	 * list remains unchanged.
-	 *
-	 * @param obj
-	 * the observer to remove from the list
-	 * @return <code>true</code> if the observer is removed from the list,
-	 * <code>false</code> otherwise
-	 */
-	public boolean remove(ApplicationObserver obj) {
-		return (obj != null) ? obs_list.remove(obj) : true;
-	}
-
-	/**
-	 * Removes all the observers from the list.
-	 */
-	public void clear() {
-		obs_list.clear();
-	}
-}
diff --git a/edu/harvard/syrah/nc/RemoteState.java b/edu/harvard/syrah/nc/RemoteState.java
deleted file mode 100644
index 4258cc9..0000000
--- a/edu/harvard/syrah/nc/RemoteState.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package edu.harvard.syrah.nc;
-
-import java.io.BufferedReader;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.StringTokenizer;
-
-import com.aelitis.azureus.vivaldi.ver2.IDWrapper;
-
-/*
- * NCLib - a network coordinate library
- * 
- * 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.
- * 
- * 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 (
- * see the LICENSE file ).
- * 
- * 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
- */
-
-/**
- * The state kept of a remote node between samples.
- * 
- * @author Michael Parker, Jonathan Ledlie
- * 
- * @param <T>
- * the type of the unique identifier of a host
- */
-public class RemoteState<T> {
-  // made not final so they can be changed by simulator
-	protected static double SAMPLE_PERCENTILE = 0.5;
-  // Don't keep more than this many samples
-  public static int MAX_SAMPLE_SIZE = 16;
-  // Don't use a guy unless we have this many samples
-  public static int MIN_SAMPLE_SIZE = 4;
-  
-	protected final T addr;
-	protected final WindowStatistic ping_samples;
-
-	protected Coordinate last_coords;
-	protected double last_error;
-	protected long last_update_time;
-
-	public RemoteState(T _addr) {
-		addr = _addr;
-    ping_samples = new WindowStatistic(MAX_SAMPLE_SIZE);
-
-		last_coords = null;
-		last_error = 0.0;
-		last_update_time = -1L;
-	}
-
-  public void toSerialized(DataOutputStream dos) throws IOException {
-    // casting addr even though its generic :(
-    dos.write(((IDWrapper)addr).getRawId());
-    last_coords.toSerialized(dos);
-    dos.writeFloat((float) last_error);
-    dos.writeFloat((float) getSample());
-  }
-
-  public RemoteState(int num_dims, int id_length, long curr_time, DataInputStream is) throws IOException {
-    byte[] remote_id = new byte[id_length];
-    is.read(remote_id);
-    addr = (T) (new IDWrapper(remote_id));
-    
-    last_coords = new Coordinate (num_dims, is);
-    last_error = ((double) is.readFloat());
-    double rtt = ((double) is.readFloat());
-    ping_samples = new WindowStatistic(MAX_SAMPLE_SIZE);
-
-    last_update_time = curr_time;
-    if (!last_coords.isValid() || 
-      Double.isNaN(last_error) || last_error <= 0 || last_error > VivaldiClient.MAX_ERROR ||
-      Double.isNaN(rtt) || rtt <= 0 || rtt >= VivaldiClient.OUTRAGEOUSLY_LARGE_RTT) {
-      ping_samples.clear();
-      last_error = VivaldiClient.MAX_ERROR;
-      last_coords = new Coordinate (num_dims);
-      return;
-    }
-    
-    for (int i = 0; i < MIN_SAMPLE_SIZE; i++) {
-      ping_samples.add(rtt);
-    }
-    
-  }
-  
-  public T getAddress () {
-    return addr;
-  }
-  
-	public void assign(Coordinate _last_coords, double _last_error,
-	    long _curr_time) {
-	  last_coords = _last_coords;
-		last_error = _last_error;
-		last_update_time = _curr_time;
-	}
-
-  public void addSample(double sample_rtt, long sample_age, Coordinate r_coord,
-    double r_error, long curr_time) {
-		ping_samples.add(sample_rtt);
-		last_coords = r_coord;
-		last_error = r_error;
-    if (sample_age > 0)
-      last_update_time = curr_time-sample_age;
-    else
-      last_update_time = curr_time;
-	}
-  
-  public boolean isValid (long curr_time) {
-    if (getLastError() <= 0. || last_update_time <= 0 ||
-        last_coords.atOrigin()) {
-      return false;
-    }
-      
-    if (getSampleSize() >= MIN_SAMPLE_SIZE && getSample() > 0) {
-      return true;
-    }
-
-    if (getSampleSize() >= 2 && ping_samples.withinVariance(.1)) {
-      return true;
-    }
-    
-    return false;
-  }
-  
-	public double getSample() {
-		return ping_samples.getPercentile(SAMPLE_PERCENTILE);
-	}
-
-  public int getSampleSize() {
-    return ping_samples.getSize();
-  }
-  /*
-  public boolean isLowVariance () {
-    return ping_samples.isLowVariance();
-  }
-  */
-  
-	public Coordinate getLastCoordinate() {
-		return last_coords;
-	}
-
-	public double getLastError() {
-		return last_error;
-	}
-/*
-	public boolean beenSampled() {
-		return (last_update_time >= 0L);
-	}
-*/
-	public long getLastUpdateTime() {
-		return last_update_time;
-	}
-  
-	public static void main (String args[]) {
-	  System.out.println("Testing Remote State Object");
-	  String sampleFile = args[0];
-	  RemoteState<String> rs = new RemoteState<String>(sampleFile);
-	  BufferedReader sampleReader = null;
-	  try {
-	    sampleReader = new BufferedReader (new FileReader (new File (sampleFile)));
-	  }catch (FileNotFoundException ex) {
-	    System.err.println("Cannot open file "+sampleFile+": "+ex);
-	    System.exit(-1);
-	  } 
-	  
-	  long sample_age = 0;
-	  Coordinate r_coord = null;
-	  double r_error = 0;
-	  
-	  try {
-	    String sampleLine = sampleReader.readLine();
-	    while (sampleLine != null) {
-	      // reads in timestamp in ms and raw rtt
-	      StringTokenizer sampleTokenizer = new StringTokenizer (sampleLine);
-	      long curr_time = Long.parseLong((String)(sampleTokenizer.nextElement()));
-	      int rawRTT = Integer.parseInt((String)(sampleTokenizer.nextElement()));
-	      sampleLine = sampleReader.readLine();
-	      rs.addSample (rawRTT, sample_age, r_coord, r_error, curr_time);
-        double smoothedRTT = rs.getSample();
-        System.out.println(curr_time+" raw "+rawRTT+" smooth "+smoothedRTT);
-	    }
-	  } catch (Exception ex) {
-	    System.err.println("Problem parsing "+sampleFile+": "+ex);
-	    System.exit(-1);     
-	  }
-	}
-  
-}
diff --git a/edu/harvard/syrah/nc/Vec.java b/edu/harvard/syrah/nc/Vec.java
deleted file mode 100644
index d24d5dd..0000000
--- a/edu/harvard/syrah/nc/Vec.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library 
- *
- * 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.
- *
- * 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 ( see the LICENSE file ).
- *
- * 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
- */
-
-/*
- * A vector in the Euclidian space.
- */
-public class Vec {
-  
-	final protected static int CLASS_HASH = Vec.class.hashCode();
-	
-	final protected double[] direction;
-	final protected int num_dims;
-  
-  /*
-	public static Vec add(Vec lhs, Vec rhs) {
-		Vec sum = new Vec(lhs);
-		sum.add(rhs);
-		return sum;
-	}
-	
-	public static Vec subtract(Vec lhs, Vec rhs) {
-		Vec diff = new Vec(lhs);
-		diff.subtract(rhs);
-		return diff;
-	}
-	*/
-  
-	public static Vec scale(Vec lhs, double k) {
-		Vec scaled = new Vec(lhs);
-		scaled.scale(k);
-		return scaled;
-	}
-	
-  /*
-	public static Vec makeUnit(Vec v) {
-		Vec unit = new Vec(v);
-		unit.makeUnit();
-		return unit;
-	}
-	*/
-  
-  /*
-  public static Vec makeRandomUnit(int num_dims) {
-    final Vec v = makeRandom (num_dims, 1.); 
-    v.makeUnit();
-    return v;
-  }
-  */
-
-  public static Vec makeRandom(int num_dims, double axisLength) {
-    final Vec v = new Vec(num_dims);
-    for (int i = 0; i < num_dims; ++i) {
-      double length = VivaldiClient.random.nextDouble() * axisLength;
-      if ( (!VivaldiClient.USE_HEIGHT || i < num_dims-1) &&
-        (VivaldiClient.random.nextBoolean())) {
-        length *= -1.;
-      }
-      v.direction[i] = length;
-    }
-    return v;
-  }
-  
-  
-	public Vec(int _num_dims) {
-		direction = new double[_num_dims];
-		if (VivaldiClient.USE_HEIGHT) _num_dims--;
-    num_dims = _num_dims;
-  }
-	
-	public Vec(Vec v) {
-		this(v.direction, true);
-	}
-
-	// TODO isn't this missing the height coordinate?
-	public Vec(double[] init_dir, boolean make_copy) {
-		if (make_copy) {
-			final int num_dims = init_dir.length;
-			direction = new double[num_dims];
-			System.arraycopy(init_dir, 0, direction, 0, num_dims);
-		}
-		else {
-			direction = init_dir;
-		}
-    int _num_dims = init_dir.length;
-    if (VivaldiClient.USE_HEIGHT) _num_dims--;
-    num_dims = _num_dims;
-	}
-	
-	public int getNumDimensions() {
-	  // keep num_dimensions internal
-    return direction.length;
-	}
-	
-	public double[] getComponents() {
-		final double[] dir_copy = new double[direction.length];
-		System.arraycopy(direction, 0, dir_copy, 0, direction.length);
-		return dir_copy;
-	}
-	
-	//Same regardless of using height
-	public void add(Vec v) {
-		for (int i = 0; i < direction.length; ++i) {
-			direction[i] += v.direction[i];
-		}
-	}
-	  
-	// only done with gravity, ignores height
-  public void subtract(Vec v) {
-    for (int i = 0; i < direction.length; ++i) {
-      direction[i] -= v.direction[i];
-    }
-  }
-
-  /*
-  public void subtract(Vec v) {
-    for (int i = 0; i < num_dims; ++i) {
-      direction[i] -= v.direction[i];
-    }
-    if (VivaldiClient.USE_HEIGHT) {
-      direction[direction.length-1] += v.direction[direction.length-1];
-    }
-  }
-  */
-  
-	public void scale(double k) {
-		for (int i = 0; i < direction.length; ++i) {
-			direction[i] *= k;
-		}
-	}
-	
-	public boolean isUnit() {
-		return (getLength() == 1.0);
-	}
-	
-  public double getLength() {
-    double sum = getPlanarLength();
-    if (VivaldiClient.USE_HEIGHT)
-      sum += direction[direction.length-1];
-    return sum;
-  }
-
-  double getPlanarLength() {
-    double sum = 0;
-    for (int i = 0; i < num_dims; ++i) {
-      sum += (direction[i] * direction[i]);
-    }
-    return Math.sqrt(sum);
-  }
-  
-	public void makeUnit() {
-		final double length = getLength();
-		if (length != 1.0) {
-      scale (1./length);
-    }
-	}
-  
-	public Coordinate asCoordinateFromZero(boolean make_copy) {
-		return new Coordinate(direction, make_copy);
-	}
-	
-	public boolean equals(Object obj) {
-		if (obj instanceof Vec) {
-			Vec v = (Vec) obj;
-			final int num_dims = direction.length;
-			for (int i = 0; i < num_dims; ++i) {
-				if (direction[i] != v.direction[i]) {
-					return false;
-				}
-			}
-			return true;
-		}
-		return false;
-	}
-	
-	public int hashCode() {
-		final int num_dims = direction.length;
-		int hc = CLASS_HASH;
-		for (int i = 0; i < num_dims; ++i) {
-			hc ^= new Double(direction[i]).hashCode();
-		}
-		return hc;
-	}
-	
-	public String toString() {
-		final StringBuffer sbuf = new StringBuffer(1024);
-		sbuf.append("[");
-		final int num_dims = direction.length;
-		for (int i = 0; true; ) {
-      if (i == num_dims-1 && VivaldiClient.USE_HEIGHT) {
-        sbuf.append('h');  
-      }
-			sbuf.append(VivaldiClient.nf.format(direction[i]));
-			if (++i < num_dims) {
-				sbuf.append(",");
-			}
-			else {
-				break;
-			}
-		}
-		sbuf.append("]");
-		return sbuf.toString();
-	}
-}
diff --git a/edu/harvard/syrah/nc/VivaldiClient.java b/edu/harvard/syrah/nc/VivaldiClient.java
deleted file mode 100644
index 0bd0cb3..0000000
--- a/edu/harvard/syrah/nc/VivaldiClient.java
+++ /dev/null
@@ -1,1387 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library
- * 
- * 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.
- * 
- * 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 (
- * see the LICENSE file ).
- * 
- * 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
- */
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.logging.Logger;
-
-import org.gudy.azureus2.core3.util.AEMonitor2;
-
-import com.aelitis.azureus.vivaldi.ver2.IDWrapper;
-
-/**
- * A class that is responsible for updating the local Vivaldi coordinates, both
- * at the system and application level, and also maintaining the state of remote
- * hosts that support Vivaldi.
- * 
- * @author Michael Parker, Jonathan Ledlie
- * 
- * @param <T>
- * the type of the unique identifier of a host
- */
-public final class VivaldiClient<T> {
-
-    //protected static edu.harvard.syrah.prp.Log slog = new edu.harvard.syrah.prp.Log(VivaldiClient.class);
-  protected static Logger slog = Logger.getLogger(VivaldiClient.class.getName()); 
-  
-  public static final boolean SIMULATION = false;
-  public static boolean debug = false;
-  public static boolean debugCrawler = false;
-  // include even good events in output, not just problems
-  public static boolean debugGood = false;
-
-  // Old version
-  public static final byte VERSION_02 = 0x02;
-  // Height added
-  public static final byte VERSION_03 = 0x03;
-  // Changed filter percentile from 0.125 to 0.5
-  // and added ping timer at 10sec
-  // c_error = 0.10, c_control = 0.25
-  public static final byte VERSION_04 = 0x04;
-  public static final byte CURRENT_VERSION = VERSION_04;
-
-  
-	public static double COORD_ERROR = 0.10; // c_e parameter
-	public static double COORD_CONTROL = 0.25; // c_c parameter
-
-  // The last element of the coordinate is a "height" away from the Euclidean space
-  public static boolean USE_HEIGHT = true;
-  
-  // Try to minimize our error between up to MAX_NEIGHBORS guys at once
-  
-    final public static int MAX_NEIGHBORS = 512;
-    final protected static int WINDOW_SIZE = 64;
-
-  // Toss remote state of nodes if we haven't heard from them for three days
-  // This allows us to keep around a list of RTTs for the node even if
-  // we currently aren't using its coordinate for update
-    public static long RS_EXPIRATION = 1 * 24 * 60 * 60 * 1000;
-    final public static long MAINTENANCE_PERIOD = 10 * 60 * 1000; // ten minutes
-    // target max number of remote states kept
-    // set to be larger than MAX_NEIGHBORS
-    public final static int MAX_RS_MAP_SIZE = 2 * 1024;
-    // do not update our coordinate faster than this
-    // hopefully this will reduce cpu load
-    public final static int MIN_SYS_UPDATE_PERIOD = 30*1000;
-    private long lastMaintenanceStamp = 0;
-
-  
-	public static Random random = new Random();
-
-	// Do an update if we've moved a third of the way to our nearest known
-	// neighbor
-	// Lowering this value leads to more frequent updates
-	// Should be less than 0.5
-	public static final double APP_UPDATE_THRESHOLD = 0.1;
-
-	// completely ignore any RTT larger than twenty seconds
-	public static final double OUTRAGEOUSLY_LARGE_RTT = 20000.0;
-
-	// range from origin where pull of gravity is 1
-	public static double GRAVITY_DIAMETER = 512.;
-	
-	// We reject remote coords with any component larger than this value
-	// This is to prevent serialization problems from leaking into coords
-	// we're actually going to use
-	// Gravity should keep everybody within this ball
-	public final static double MAX_DIST_FROM_ORIGIN = 60000.;
-	public final static double NEG_MAX_DIST_FROM_ORIGIN = -1 * MAX_DIST_FROM_ORIGIN;
-	
-
-	final static protected NumberFormat nf = NumberFormat.getInstance();
-	final static protected int NFDigits = 3;
-	static boolean haveSetFormat = false;
-  
-	protected final int num_dims;
-
-	protected Coordinate app_coord;
-
-  protected Coordinate sys_coord;
-  
-  // error should always be less than or equal to MAX_ERROR
-  // and greater than 0
-  protected double error;
-  public static final double MAX_ERROR = 1.;
-  
-	public static boolean keepStatistics = false;
-	// keeping an EWMA of some of these things gives skewed results
-	// so we use a filter
-	final public static int RUNNING_STAT_HISTORY = 1024;
-	// 30 minutes
-	//final public static long STAT_EXPIRE_TIME = 30 * 60 * 1000;
-	protected WindowStatistic running_sys_error;
-	protected WindowStatistic running_app_error;
-	protected EWMAStatistic running_sys_dd;
-	protected EWMAStatistic running_app_dd;
-  protected EWMAStatistic running_neighbors_used;
-  protected EWMAStatistic running_neighbor_error;
-	protected EWMAStatistic running_relative_diff;
-	protected EWMAStatistic running_sys_update_frequency;
-	protected EWMAStatistic running_app_update_frequency;
-  protected EWMAStatistic running_age;
-  protected EWMAStatistic running_gravity;
-  protected EWMAStatistic running_remote_error;
-  protected EWMAStatistic running_neighbor_latency;
-  
-	protected long time_of_last_app_update = -1;
-	protected long update_counter = 0;
-	protected long bump_error_counter = 0;
-	protected boolean bump_error_flag = false;
-  
-  // keep the list of neighbors around for computing statistics
-	protected final List<RemoteState<T>> neighbors;
-  
-  // note: not just part of statistics
-  // this is returned to querier of our coords so he knows how stale they are
-  protected long time_of_last_sys_update = -1;
-
-	protected final ObserverList obs_list;
-
-	protected final HashMap<T, RemoteState<T>> rs_map;
-
-	protected final Set<T> hosts;
-
-	protected Coordinate start_centroid;
-
-	protected boolean updated_app_coord_at_least_once = false;
-
-	protected final List<Coordinate> start_coords;
-
-	protected final List<Coordinate> current_coords;
-
-	protected Coordinate nearest_neighbor;
-	protected T local_addr;
-  
-	private AEMonitor2	lock = new AEMonitor2( "VivaldiClient" );
-  
-	/**
-	 * Creates a new instance. Typically an application should only have one
-	 * instance of this class, as it only needs one set of Vivaldi coordinates.
-	 * 
-	 * @param _num_dims
-	 * the number of Euclidian dimensions coordinates should have
-	 */
-	public VivaldiClient(int _num_dims) {
-		num_dims = _num_dims;
-
-		app_coord = new Coordinate(num_dims);
-    sys_coord = new Coordinate(num_dims);
-
-		error = MAX_ERROR;
-    neighbors = new ArrayList<RemoteState<T>>();
-    
-		obs_list = new ObserverList();
-		rs_map = new HashMap<T, RemoteState<T>>();
-		hosts = Collections.unmodifiableSet(rs_map.keySet());
-		start_coords = new LinkedList<Coordinate>();
-		current_coords = new LinkedList<Coordinate>();
-    nearest_neighbor = null;
-    
-    //bootstrapCoordinates ();
-    
-    running_neighbors_used = new EWMAStatistic();
-    running_neighbor_error = new EWMAStatistic();
-    running_remote_error = new EWMAStatistic();
-    running_neighbor_latency = new EWMAStatistic();
-    
-    if (keepStatistics) {
-			running_sys_update_frequency = new EWMAStatistic();
-			running_app_update_frequency = new EWMAStatistic();
-			running_sys_error = new WindowStatistic(RUNNING_STAT_HISTORY);
-			running_app_error = new WindowStatistic(RUNNING_STAT_HISTORY);
-			running_sys_dd = new EWMAStatistic();
-			running_app_dd = new EWMAStatistic();
-			running_relative_diff = new EWMAStatistic();
-      running_age = new EWMAStatistic();
-      running_gravity = new EWMAStatistic();
-		}
-		
-		if (!haveSetFormat) {
-		  if (nf.getMaximumFractionDigits() > NFDigits) {
-		    nf.setMaximumFractionDigits(NFDigits);
-		  }
-		  if (nf.getMinimumFractionDigits() > NFDigits) {
-		    nf.setMinimumFractionDigits(NFDigits);
-		  }
-		  nf.setGroupingUsed(false);
-		  haveSetFormat = true;
-		}
-	}
-
-  // for debugging simulations
-  public void setLocalID (T _local_addr) {
-    local_addr = _local_addr;
-  }
-  
-	// See Lua IMC 2005, Pietzuch WORLDS 2005, Ledlie ICDCS 2006
-	// for description of these statistics
-	protected ApplicationStatistics computeApplicationStatistics() {
-
-		ApplicationStatistics appStats = new ApplicationStatistics();
-
-		if (sys_coord.atOrigin() || neighbors == null ||
-      neighbors.size() == 0) return appStats;    
-
-		int rrl_wrong = 0;
-		int rrl_count = 0;
-		double narl_loss = 0;
-		double narl_sum = 0;
-		double ralp_loss = 0;
-		double ralp_sum = 0;
-
-    // TODO might want to use the app coord here so as to get the average location
-    
-		for (Iterator<RemoteState<T>> i = neighbors.iterator(); i.hasNext();) {
-			RemoteState<T> A_rs = i.next();
-
-			double A_rtt = A_rs.getSample();
-			double A_metric = sys_coord.distanceTo(A_rs.getLastCoordinate());
-			if (A_rtt > 0 && A_metric > 0) {
-
-				for (Iterator<RemoteState<T>> j = neighbors.iterator(); j
-						.hasNext();) {
-					RemoteState<T> B_rs = j.next();
-
-					if (!A_rs.addr.equals(B_rs.addr)) {
-
-						double B_rtt = B_rs.getSample();
-						double B_metric = sys_coord.distanceTo(B_rs
-								.getLastCoordinate());
-						if (B_rtt > 0 && B_metric > 0) {
-
-							double rtt_diff = Math.abs(A_rtt - B_rtt);
-							rrl_count++;
-							narl_sum += rtt_diff;
-
-							if ((A_rtt > B_rtt && A_metric < B_metric)
-									|| (B_rtt > A_rtt && B_metric < A_metric)) {
-								// oops coordinates have incorrectly ranked
-								// these two guys
-								rrl_wrong++;
-								narl_loss += rtt_diff;
-							}
-
-							// relative latency penalty for using A,
-							// which the metric says is closer,
-							// when A is actually further away
-							if (A_rtt > B_rtt && A_metric < B_metric) {
-								ralp_loss += rtt_diff;
-								ralp_sum += A_rtt;
-							}
-							if (B_rtt > A_rtt && B_metric < A_metric) {
-								ralp_loss += rtt_diff;
-								ralp_sum += B_rtt;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		appStats.validLinkCount = rrl_count;
-		if (rrl_count > 0)
-			appStats.rrl = rrl_wrong / (double) rrl_count;
-		if (narl_sum > 0)
-			appStats.narl = narl_loss / narl_sum;
-		if (ralp_sum > 0)
-			appStats.ralp = ralp_loss / ralp_sum;
-		return appStats;
-	}
-
-	// poor man's public struct
-	class ApplicationStatistics {
-		double rrl = 0;
-		double narl = 0;
-		double ralp = 0;
-		int validLinkCount = 0;
-
-		public ApplicationStatistics() {
-		};
-	}
-
-	public String toString() {
-		try{
-			lock.enter();
-
-		  long update_counter_output = update_counter;
-	    update_counter = 0;
-	    if (keepStatistics) {
-				ApplicationStatistics appStats = computeApplicationStatistics();
-	
-				return new String("[sc=" + sys_coord + ",ac=" + app_coord + ",er="
-						+ nf.format(error) + ",sys_re50="
-						+ nf.format(running_sys_error.getPercentile(.5))
-						+ ",sys_re95="
-						+ nf.format(running_sys_error.getPercentile(.95))
-						+ ",app_re50="
-						+ nf.format(running_app_error.getPercentile(.5))
-						+ ",app_re95="
-						+ nf.format(running_app_error.getPercentile(.95))
-						+ ",sys_dd=" + nf.format(running_sys_dd.get()) + ",app_dd="
-						+ nf.format(running_app_dd.get()) + ",ns="
-	          + nf.format(running_neighbors_used.get()) + ",rd="
-						+ nf.format(running_relative_diff.get()) + ",sf="
-						+ nf.format(running_sys_update_frequency.get()) + ",af="
-						+ nf.format(running_app_update_frequency.get()) + ",rrl="
-						+ nf.format(appStats.rrl) + ",narl="
-						+ nf.format(appStats.narl) + ",ralp="
-						+ nf.format(appStats.ralp) + ",age="
-						+ getAge(System.currentTimeMillis()) + ",vl="
-						+ nf.format(appStats.validLinkCount) +",gr=" 
-	          + nf.format(running_gravity.get())+",nn="
-						+ nf.format(sys_coord.distanceTo(nearest_neighbor)) 
-	          + ",uc="+update_counter_output+"]");
-			}
-			else {
-				return new String("[sc=" + sys_coord + ",ac=" + app_coord + ",er="
-						+ nf.format(error) + ",nn="
-						+ nf.format(sys_coord.distanceTo(nearest_neighbor)) 
-	          + ",uc="+update_counter_output
-	          + ",ns="+ nf.format(running_neighbors_used.get())
-	          + ",ne="+ nf.format(running_neighbor_error.get())
-	          + ",rEr="+nf.format(running_remote_error.get())
-	          + ",rLat="+nf.format(running_neighbor_latency.get())
-	          +"]");
-			}
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	public Hashtable<String, Double> getStatistics() {
-		try{
-			lock.enter();
-		
-			Hashtable<String, Double> stats = new Hashtable<String, Double>();
-			for (int i = 0; i < num_dims; i++) {
-				stats.put("sys_coord_" + i, sys_coord.coords[i]);
-				stats.put("app_coord_" + i, sys_coord.coords[i]);
-			}
-			stats.put("er", error);
-			stats.put("nn", sys_coord.distanceTo(nearest_neighbor));
-	
-			if (keepStatistics) {
-				ApplicationStatistics appStats = computeApplicationStatistics();
-	
-				stats.put("rrl", appStats.rrl);
-				stats.put("narl", appStats.narl);
-				stats.put("ralp", appStats.ralp);
-				stats.put("age", new Double (getAge(System.currentTimeMillis())));
-				stats.put("vl", new Double(appStats.validLinkCount));
-				stats.put("gr", running_gravity.get());
-	      
-				stats.put("sys_re50", running_sys_error.getPercentile(.5));
-				stats.put("sys_re95", running_sys_error.getPercentile(.95));
-				stats.put("app_re50", running_app_error.getPercentile(.5));
-				stats.put("app_re95", running_app_error.getPercentile(.95));
-	
-				stats.put("sys_dd", running_sys_dd.get());
-				stats.put("app_dd", running_app_dd.get());
-	
-				stats.put("ne", running_neighbors_used.get());
-				stats.put("rd", running_relative_diff.get());
-				stats.put("sf", running_sys_update_frequency.get());
-				stats.put("af", running_app_update_frequency.get());
-			}
-			return stats;
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	public void reset() {
-		try{
-			lock.enter();
-		
-			sys_coord.reset();
-			app_coord.reset();
-			error = MAX_ERROR;
-			rs_map.clear();
-			start_coords.clear();
-			current_coords.clear();
-			nearest_neighbor = null;	
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Returns whether the application level coordinates have been updated at
-	 * least once.
-	 * 
-	 * @return <code>true</code> if updated, <code>false</code> otherwise
-	 */
-   public boolean updatedYet() {
-		try{
-			lock.enter();
-
-			return updated_app_coord_at_least_once;
-			
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Returns the dimension of the Euclidian space coordinates are embedded in.
-	 * 
-	 * @return the coordinate space dimension
-	 */
-  public int getNumDimensions() {
-		try{
-			lock.enter();
-
-			return num_dims;
-			
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Returns the application-level Vivaldi coordinates.
-	 * 
-	 * @return the application-level coordinates
-	 */
-  public Coordinate getApplicationCoords() {
-		try{
-			lock.enter();
-
-			return new Coordinate(app_coord);
-			
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Returns the system-level Vivaldi coordinates. These coordinates change
-	 * more frequently than the application-level coordinates.
-	 * 
-	 * @return the system-level coordinates
-	 */
-  public Coordinate getSystemCoords() {
-		try{
-			lock.enter();
-
-			return new Coordinate(sys_coord);
-			
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-  /**
-   * Returns the system-level error, which denotes the accuracy of the
-   * system-level coordinates.
-   * 
-   * @return the system-level error
-   */
-  public double getSystemError() {
-		try{
-			lock.enter();
-
-			return error;
-			
-		}finally{
-			
-			lock.exit();
-		}
-  }
-
-  /**
-   * Returns the age of our coordinate
-   * Note that this does not require clock-synchronization
-   * because it is relative to our coordinate
-   * 
-   * @return relative age of our coordinate since we last updated it
-   */
-  public long getAge(long curr_time) {
-		try{
-			lock.enter();
-
-			if (curr_time < time_of_last_sys_update) return 0;
-			return curr_time - time_of_last_sys_update;
-			
-		}finally{
-			
-			lock.exit();
-		}
-  }
-
-  
-	/**
-	 * Returns the list of observers, to which observers for the
-	 * application-level coordinate can be added, removed, and so forth.
-	 * 
-	 * @return the list of observers for the application-level coordinate
-	 */
-  public ObserverList getObserverList() {
-		try{
-			lock.enter();
-
-			return obs_list;
-			
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Notifies this <code>VivaldiClient</code> object that a host that
-	 * supports Vivaldi has joined the system. State associated with the new
-	 * host is created. This method succeeds and returns <code>true</code>
-	 * only if the host is not already registered with this
-	 * <code>VivaldiClient</code> object.
-	 * 
-	 * @param addr
-	 * the address of the joining host
-	 * @return <code>true</code> if <code>addr</code> is registered and its
-	 * associated state created, <code>false</code> otherwise
-	 */
-  public boolean addHost(T addr) {
-		try{
-			lock.enter();
-
-			if (rs_map.containsKey(addr)) {
-				return false;
-			}
-	
-			RemoteState<T> rs = new RemoteState<T>(addr);
-			rs_map.put(addr, rs);
-			return true;
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Notifies this <code>VivaldiClient</code> object that a host that
-	 * supports Vivaldi and has the provided coordinates and error has joined
-	 * the system. State associated with the new host is created. This method
-	 * succeeds and returns <code>true</code> only if the host is not already
-	 * registered with this <code>VivaldiClient</code> object.
-	 * 
-	 * @param addr
-	 * the address of the joining host
-	 * @param _r_coord
-	 * the app-level coordinates of the remote host
-	 * @param r_error
-	 * the system-level error of the remote host
-	 * @param sample_rtt
-	 * the RTT sample to the remote host
-	 * @param curr_time
-	 * the current time, in milliseconds
-	 * @param can_update
-	 * <code>true</code> if this method can update a host already present
-	 * @return <code>true</code> if <code>addr</code> is registered and its
-	 * associated state created, <code>false</code> otherwise
-	 */
-
-  public boolean addHost(T addr, Coordinate _r_coord, double r_error,
-			long curr_time, boolean can_update) {
-		try{
-			lock.enter();
-
-			RemoteState<T> rs = null;
-			if (rs_map.containsKey(addr)) {
-				if (!can_update) {
-					return false;
-				}
-				rs = rs_map.get(addr);
-			}
-			else {
-				rs = new RemoteState<T>(addr);
-	      rs_map.put(addr, rs);
-			}
-	
-			Coordinate r_coord = _r_coord.makeCopy();
-			rs.assign(r_coord, r_error, curr_time);
-			return true;
-			
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Notifies this <code>VivaldiClient</code> object that a host that
-	 * supports Vivaldi has left the system. 
-   * However, the state (i.e. short list of RTT values) is kept because
-   * it will be useful if and when the node returns into the system
-	 * @param addr
-	 * the address of the departing host
-	 * @return <code>true</code> if <code>addr</code> was a known node
-	 */
-
-  public boolean removeHost(T addr) {
-		try{
-			lock.enter();
-
-		    if (rs_map.containsKey(addr)) {
-		      return true;
-		    }
-		    return false;
-	    
-		}finally{
-			
-			lock.exit();
-		}
-  }
-
-	/**
-	 * Returns whether the given host has been registered with this
-	 * <code>VivaldiClient</code> object.
-	 * 
-	 * @param addr
-	 * the address to query as registered
-	 * @return <code>true</code> if registered, <code>false</code> otherwise
-	 */
-  public boolean containsHost(T addr) {
-		try{
-			lock.enter();
-
-			return rs_map.containsKey(addr);
-			
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * Returns all hosts that support Vivaldi and have been registered with this
-	 * <code>VivaldiClient</code> object. The returned set is backed by the
-	 * true set of registered hosts, but cannot be modified.
-	 * 
-	 * @return the set of registered Vivaldi-supporting hosts
-	 */
-   public Set<T> getHosts() {
-		try{
-			lock.enter();
-
-			return hosts;
-		}finally{
-			
-			lock.exit();
-		}
-	}
-
-	/**
-	 * This method is invoked when a new RTT sample is made to a host that
-	 * supports Vivaldi. This method succeeds and returns <code>true</code>
-	 * only if the host is already registered with this
-	 * <code>VivaldiClient</code> object, and the RTT sample is valid.
-	 * 
-	 * @param addr
-	 * the address of the host
-	 * @param _r_coord
-	 * the system-level coordinates of the remote host
-	 * @param r_error
-	 * the system-level error of the remote host
-	 * @param sample_rtt
-	 * the RTT sample to the remote host
-	 * @param curr_time
-	 * the current time, in milliseconds
-	 * @param can_add
-	 * <code>true</code> if this method can add a host not already present
-	 * @return <code>true</code> if <code>addr</code> is registered and the
-	 * sample is processed, <code>false</code> otherwise
-	 */
-
-  public boolean processSample(T addr, Coordinate _r_coord, double r_error,
-			double sample_rtt, long sample_age, long curr_time, boolean can_add) {
-		try{
-			lock.enter();
-
-
-	    //if (debugCrawler) slog.info("sample addr="+addr+" rtt="+sample_rtt);
-	    int id = getIdFromAddr (addr);
-	    if (debugCrawler && debugGood) slog.info(id+" START");
-	    
-	    assert (_r_coord != sys_coord);
-			assert (_r_coord != null);
-			assert (sys_coord != null);
-	   
-	    if (!sys_coord.isCompatible(_r_coord)) {
-	      if (debugCrawler && debug) slog.info("INVALID "+id+" s "+sample_rtt+" NOT_COMPAT "+_r_coord.getVersion());
-	      return false;
-	    }
-	    
-			// There is a major problem with the coord.
-			// However, if this is happening, it will probably
-			// happen again and again.
-			// Note that error is checked and fixed in updateError()
-			if (!sys_coord.isValid() || Double.isNaN(error)) {
-				//System.err.println("Warning: resetting Vivaldi coordinate");
-	      if (debugCrawler || SIMULATION) slog.info(id + " RESET, USE_HEIGHT="+USE_HEIGHT);
-				reset();
-			}
-	   
-	    if (r_error <= 0. || r_error > MAX_ERROR || Double.isNaN(r_error) || !_r_coord.isValid()) {
-	      if (debugCrawler) slog.info(id+" BUSTED his coord is busted: r_error "+r_error+" r_coord "+_r_coord);  
-	      return false;
-	    }
-	
-			if (sample_rtt > OUTRAGEOUSLY_LARGE_RTT) {
-				if (debug)
-				  System.err.println("Warning: skipping huge RTT of "
-							+ nf.format(sample_rtt) + " from " + addr);
-	      if (debugCrawler) slog.info(id+ " HUGE "+sample_rtt);
-				return false;
-			}
-	
-			RemoteState<T> addr_rs = rs_map.get(addr);
-			if (addr_rs == null) {
-				if (!can_add) {
-	        if (debugCrawler) slog.info(id+ " NO_ADD");  
-					return false;
-				}
-				addHost(addr);
-				addr_rs = rs_map.get(addr);
-			}
-			Coordinate r_coord = _r_coord.makeCopy();
-	    
-			// add sample to history, then get smoothed rtt based on percentile
-			addr_rs.addSample(sample_rtt, sample_age, r_coord, r_error, curr_time);
-	
-	    // even if we aren't going to use him this time around, we remember this RTT
-	    
-	    if (sys_coord.atOrigin()) {
-		sys_coord.bump();
-	    }
-	    
-	    boolean didUpdate = false;
-	    int sample_size = addr_rs.getSampleSize();
-	    double smoothed_rtt = addr_rs.getSample();
-	    
-	    if (addr_rs.isValid(curr_time)) {
-	      addNeighbor(addr_rs);
-	      // first update our error
-	      updateError(addr, r_coord, r_error, smoothed_rtt, sample_rtt, sample_age, sample_size, curr_time);
-	      // next, update our system-level coordinate
-	      
-	      long time_since_last_sys_update = curr_time-time_of_last_sys_update;
-	      if (time_since_last_sys_update > MIN_SYS_UPDATE_PERIOD) {
-		  if (debugCrawler) slog.info ("time_since_last_sys_update="+time_since_last_sys_update);
-	
-		  updateSystemCoordinate(curr_time);  
-	
-		  // last, try to update our application-level coordinate
-		  tryUpdateAppCoordinate(curr_time);
-	      }
-	
-	      // return that we did do the update regardless of 
-	
-	      didUpdate = true;
-	      update_counter++;
-	
-	      
-	    } else {
-	      if (debugCrawler) {
-	        String reason;
-	        if (addr_rs.getSampleSize() < RemoteState.MIN_SAMPLE_SIZE) {
-	          reason = "TOO_FEW";
-	        } else if (addr_rs.getSample() <= 0) {
-	          reason = "sample is "+addr_rs.getSample();
-	        } else if (addr_rs.getLastError() <= 0.) {
-	          reason = "error is "+addr_rs.getLastError();
-	        } else if (addr_rs.getLastUpdateTime() <= 0) {
-	          reason = "last update "+addr_rs.getLastUpdateTime();
-	        } else if (addr_rs.getLastCoordinate().atOrigin()) {
-	          reason = "AT_ORIGIN";
-	        } else {
-	          reason = "UNKNOWN";
-	        }
-	        slog.info("INVALID "+id+" s "+sample_rtt+" ss "+smoothed_rtt+" c "+sample_size+
-	          " "+reason);
-	
-	      } 
-	    }
-	
-	    //System.out.println ("maint?");
-	    if (lastMaintenanceStamp < curr_time - MAINTENANCE_PERIOD) {
-		performMaintenance (curr_time);
-		lastMaintenanceStamp = curr_time;
-	    }
-	    
-			return didUpdate;
-		}finally{
-			
-			lock.exit();
-		}
-	}
-  
-  private Map<T,Integer> addr2id = new HashMap<T,Integer>();
-  private int idCounter = 0;
-
-  // If remote nodes are already represented by ints, just use them
-  // otherwise, translate into more easily read-able ID
-  private int getIdFromAddr (T addr) {
-	if ( debugCrawler || SIMULATION ){
-		
-	    if (addr instanceof Integer) {
-	      return ((Integer)addr).intValue();
-	    }
-	      
-	    if (!addr2id.containsKey(addr)) {
-	      addr2id.put(addr,idCounter);  
-	      idCounter++;
-	    }
-	    return addr2id.get(addr);
-	}
-	
-	return(0);
-  }
-  
-  protected void updateError(T addr, Coordinate r_coord, double r_error,
-    double smoothed_rtt, double sample_rtt, long sample_age, int sample_size, long curr_time) {
-		// get the coordinate distance
-    double sys_distance = sys_coord.distanceTo(r_coord);
-    double app_distance = 0;
-
-    if (app_coord != null)
-      app_distance = app_coord.distanceTo(r_coord);
-    if (app_distance == 0. || sys_distance == 0.) {
-      if (debugCrawler) slog.info("bad distance sys "+sys_distance+" app "+app_distance);      
-      return;
-    }
-
-    
-    // get sample error in terms of coordinate distance and sample rtt
-    // Note that smoothed_rtt must be greater than zero
-    // or we wouldn't have entered this function
-
-    // Note that app_sample_error is only giving us a limited amount of info
-    // because his app coord is not going over the wire
-    
-    assert (smoothed_rtt > 0.); 
-    double sys_sample_error = Math.abs(sys_distance - smoothed_rtt) / smoothed_rtt;
-    double app_sample_error = Math.abs(app_distance - smoothed_rtt) / smoothed_rtt;
-    running_remote_error.add(r_error);
-    running_neighbor_latency.add(smoothed_rtt);
-
-    if (debugCrawler) {
-        int remote_id = getIdFromAddr (addr);
-        String info = 
-        //"lID "+local_addr+" rID "+
-        "UPDATE "+remote_id+
-        " re "+nf.format(sys_sample_error)+
-        " rtt "+nf.format(smoothed_rtt)+
-        " raw "+nf.format(sample_rtt)+
-        " age "+sample_age+
-        " dist "+nf.format(sys_distance)+
-        " ssize "+sample_size+
-        " lE "+nf.format(error)+
-        " rE "+nf.format(r_error)+
-        " rV "+r_coord.getVersion()+
-        " lc "+sys_coord+
-        " rc "+r_coord;
-        
-      slog.info(info);
-    }
-    
-    if (sys_sample_error < 0) {
-      sys_sample_error = 0;
-    }
-    if (sys_sample_error > MAX_ERROR) {
-      sys_sample_error = MAX_ERROR;
-    }
-
-    // EWMA on error
-    double alpha = error / (error + r_error) * COORD_ERROR;
-    error = (sys_sample_error*alpha)+((1-alpha)*error);
-
-    
-		if (keepStatistics) {
-			running_sys_error.add(sys_sample_error);
-			running_app_error.add(app_sample_error);
-		}
-	}
-
-  
-
-  protected boolean addNeighbor (RemoteState<T> guy) {
-    boolean added = false;
-    if (!neighbors.contains(guy)) {
-      neighbors.add(guy);
-      //slog.info("addNeighbor: "+guy.addr)
-      added = true;
-    }
-    if (neighbors.size() > MAX_NEIGHBORS) {
-      neighbors.remove(0);
-    }
-    return added;
-  }
-
-    protected boolean removeNeighbor (RemoteState<T> guy) {
-	if (neighbors.contains(guy)) {
-	    neighbors.remove(guy);
-	    return true;
-	}
-	return false;
-    }
-
-  public T getNeighborToPing (long curr_time) {
-		try{
-			lock.enter();
-
-		    // pick a relatively recent, relatively low error, relatively high latency node
-		    // make the set big enough that we will tend not to pick the same node frequently
-		    final long NEIGHBOR_PING_EXPIRE_TIME = 10 * 60 * 1000; // 10 minutes
-		    final double max_neighbor_error = running_remote_error.get();
-		    final double min_neighbor_latency = running_neighbor_latency.get();
-		    long expire_time = curr_time - NEIGHBOR_PING_EXPIRE_TIME;
-		    List<RemoteState<T>> recentNeighbors = new ArrayList<RemoteState<T>>();
-		    for (RemoteState<T> neighbor : neighbors) {
-		      if (neighbor.getLastUpdateTime() > expire_time &&
-		          neighbor.getSample() > min_neighbor_latency &&
-		          neighbor.getLastError() < max_neighbor_error) {
-		        
-		        recentNeighbors.add(neighbor);
-		        //if (debugCrawler) {
-		          //int id = getIdFromAddr (neighbor.getAddress());
-		          //slog.info ("considering "+id);
-		        //}
-		      }
-		    }
-		    if (recentNeighbors.size() > 0) {
-		    
-		      RemoteState<T> random_neighbor = recentNeighbors.get(random.nextInt( recentNeighbors.size()));
-		      if (debugCrawler && debugGood) {
-		        slog.info("pinging neighbor: error="+random_neighbor.getLastError()+
-		          " rtt="+random_neighbor.getSample()+
-		          " coord="+random_neighbor.getLastCoordinate()+
-		          " addr="+random_neighbor.getAddress());
-		      }
-		      return random_neighbor.getAddress();
-		    }
-		    return null;
-		    
-		}finally{
-			
-			lock.exit();
-		}
-  }
-
-  
-  protected void updateSystemCoordinate(long curr_time) {
-    
-    // figure out the oldest sample we are going to use
-    // and recalculate the nearest neighbor
-    // as a side effect
-    long oldestSample = curr_time;
-    double nearest_neighbor_distance = Double.MAX_VALUE;
-
-    Collections.shuffle(neighbors);
-
-    if (debugCrawler) {
-	slog.info (curr_time+" updateSysCoord, nSize="+neighbors.size()+
-		   " bump_error_counter="+bump_error_counter);
-    }
-    
-    for (RemoteState<T> neighbor : neighbors) {
-    // we can used unchecked here since RemoteState already checks for isValid when the coordinate is inserted
-      double distance = sys_coord.uncheckedDistanceTo(neighbor.getLastCoordinate());
-      if (distance < nearest_neighbor_distance && distance > 0) { 
-        nearest_neighbor_distance = distance;
-        nearest_neighbor = neighbor.getLastCoordinate();
-      }
-      if (oldestSample > neighbor.getLastUpdateTime()) {
-        oldestSample = neighbor.getLastUpdateTime();
-      }
-    } 
-    
-    double sampleWeightSum = 0.;
-    for (RemoteState<T> neighbor : neighbors) {
-      //double distance = sys_coord.distanceTo(neighbor.getLastCoordinate());
-      sampleWeightSum += neighbor.getLastUpdateTime()-oldestSample;
-    } 
-    assert (sampleWeightSum >= 0.);
-    
-    Vec force = new Vec (sys_coord.getNumDimensions());
-
-    for (RemoteState<T> neighbor : neighbors) {
-   	// we can used unchecked here since RemoteState already checks for isValid when the coordinate is inserted
-      double distance = sys_coord.uncheckedDistanceTo(neighbor.getLastCoordinate());      
-
-      // make certain we cannot get stuck in this loop
-      for (int bLimit = 0; distance == 0. && bLimit < 3; bLimit++) {
-        sys_coord.bump();
-        distance = sys_coord.distanceTo(neighbor.getLastCoordinate());
-      }
-
-      if (distance == 0.) {
-	  bump_error_counter++;
-		bump_error_flag = true;
-      } else {
-
-      // cannot return null b/c distance is not 0
-      Vec unitVector = sys_coord.getDirection(neighbor.getLastCoordinate());
-      double latency = neighbor.getSample();
-      double weight = error / (neighbor.getLastError()+error);
-      if (weight == 0.) continue;
-      
-      // error of sample
-      double sampleError = distance - latency;
-      
-      double relativeError = Math.abs(sampleError) / latency; 
-      running_neighbor_error.add(relativeError);
-      
-      double sampleWeight = 1.;
-      if (sampleWeightSum > 0) {
-        sampleWeight = (neighbor.getLastUpdateTime()-oldestSample)/sampleWeightSum;
-      }
-      
-      if (debugCrawler && debugGood) {
-        int id = getIdFromAddr (neighbor.getAddress());
-        slog.info ("f "+id+ " age "+Math.round((curr_time-neighbor.getLastUpdateTime())/1000.)+
-            " er "+sampleError+" sw "+sampleWeight+" comb " +
-            (sampleError*sampleWeight));
-      }
-      
-      unitVector.scale(sampleError*sampleWeight);
-      force.add(unitVector);
-      }
-    }
-    
-    if (USE_HEIGHT) {
-      force.direction[force.direction.length-1] = -1.*force.direction[force.direction.length-1];
-    }
-    force.scale(COORD_CONTROL);
-
-    if (debugCrawler && debugGood) {
-      slog.info ("t "+force.getLength()+" "+force);
-    }
-    
-
-
-    if (GRAVITY_DIAMETER > 0) {
-      // include "gravity" to keep coordinates centered on the origin
-      Vec gravity = sys_coord.asVectorFromZero(true);
-      if (gravity.getLength() > 0) {
-        
-        // scale gravity s.t. it increases polynomially with distance
-        double force_of_gravity = Math.pow(gravity.getLength()
-          / GRAVITY_DIAMETER, 2.);
-        gravity.makeUnit();
-        gravity.scale(force_of_gravity);
-        
-        // add to total force
-        force.subtract(gravity);
-        
-        if (keepStatistics) {
-          running_gravity.add(force_of_gravity);
-        }
-      }
-    }
-    
-    sys_coord.add(force);
-    sys_coord.checkHeight ();
-    double distance_delta = force.getLength();
-
-    if (keepStatistics) {
-      running_sys_dd.add(distance_delta);
-
-      if (time_of_last_sys_update > 0) {
-        long since_last_sys_update = curr_time - time_of_last_sys_update;
-        running_sys_update_frequency.add(since_last_sys_update);
-      }
-    }
-    
-    if (neighbors != null) {
-      running_neighbors_used.add(neighbors.size());
-    }
-    
-    time_of_last_sys_update = curr_time;
-    
-  }
-
-    /*
-     * Periodically walk the entire rs_map and toss anybody who has expired.
-     * If the map has grown beyond the preferred size (MAX_RS_MAP_SIZE),
-     * shrink the max age that a guy can be before he gets kicked out.
-    */
-
-    protected void performMaintenance (long curr_time) {
-	if (debugCrawler && debugGood) slog.info ("performing maintenance");
-
-	if (rs_map.size() > MAX_RS_MAP_SIZE) {
-	    RS_EXPIRATION = (long)(.9 * RS_EXPIRATION);
-	    if (debugCrawler && debugGood) slog.info ("lowered RS_EXPIRATION to "+RS_EXPIRATION+ " size "+rs_map.size());
-	}
-
-	final long expirationStamp = curr_time - RS_EXPIRATION;
-	Set<Map.Entry<T,RemoteState<T>>> states = rs_map.entrySet();
-
-	for (Iterator<Map.Entry<T,RemoteState<T>>> stateIter = states.iterator(); stateIter.hasNext(); ) {
-	    Map.Entry<T,RemoteState<T>> entry = stateIter.next();
-	    if (entry.getValue().getLastUpdateTime() < expirationStamp) {
-		if (debugCrawler && debugGood) slog.info ("tossing "+entry.getValue().getAddress());
-		removeNeighbor(entry.getValue());
-		stateIter.remove();
-	    }
-	}
-    }
-
-	protected void tryUpdateAppCoordinate(long curr_time) {
-		final double scale_factor = 1.0 / ((double) WINDOW_SIZE);
-
-		// Make sure app coord always has a value.
-
-		// calculate centroid of starting coordinates by averaging vectors
-
-		if (start_coords.size() < WINDOW_SIZE) {
-			Vec start_vec = new Vec(num_dims);
-			start_coords.add(sys_coord);
-			for (Iterator<Coordinate> i = start_coords.iterator(); i.hasNext();) {
-				Coordinate next_coord = i.next();
-				start_vec.add(next_coord.asVectorFromZero(false));
-			}
-			start_vec.scale(scale_factor);
-			start_centroid = start_vec.asCoordinateFromZero(false);
-		}
-
-		current_coords.add(sys_coord);
-		if (current_coords.size() > WINDOW_SIZE) {
-			current_coords.remove(0);
-		}
-
-		// calculate centroid of current coordinates by averaging vectors
-		Vec curr_vec = new Vec(num_dims);
-		for (Iterator<Coordinate> i = current_coords.iterator(); i.hasNext();) {
-			Coordinate next_coord = i.next();
-			curr_vec.add(next_coord.asVectorFromZero(false));
-		}
-		curr_vec.scale(scale_factor);
-
-		// create centroids
-		Coordinate curr_centroid = curr_vec.asCoordinateFromZero(false);
-
-		// get distances of centroids from nearest neighbor
-		double start_dist = start_centroid.distanceTo(nearest_neighbor);
-		double curr_dist = curr_centroid.distanceTo(nearest_neighbor);
-
-		// fraction of space moved through, relative to distance to our NN
-		double relative_diff = Math.abs((start_dist - curr_dist) / start_dist);
-
-		if (keepStatistics) {
-			running_relative_diff.add(relative_diff);
-		}
-
-		if (relative_diff > APP_UPDATE_THRESHOLD) {
-			// exceed threshold, update application-level coordinate
-			updated_app_coord_at_least_once = true;
-			// clear coordinate windows
-			start_coords.clear();
-			current_coords.clear();
-		}
-
-		// This will keep updating the observers as we get rolling
-		// until we've had one time when the coord windows differ
-
-		boolean did_update = false;
-		if (relative_diff > APP_UPDATE_THRESHOLD
-				|| !updated_app_coord_at_least_once) {
-			if (keepStatistics) {
-				double app_dd = app_coord.distanceTo(curr_centroid);
-				running_app_dd.add(app_dd);
-			}
-			app_coord = curr_centroid;
-			did_update = true;
-
-			// If we've gotten ourselves into a situation where the coord
-			// very accurate, stop always updating the app.
-			// Currently can only use this if keep track of statistics
-
-			if (keepStatistics) {
-				final double MIN_SYS_ERROR_SIZE = (RUNNING_STAT_HISTORY / 8.);
-				if (!updated_app_coord_at_least_once
-						&& running_sys_error.getSize() > MIN_SYS_ERROR_SIZE
-						&& running_sys_error.getPercentile(.5) < 0.20) {
-					updated_app_coord_at_least_once = true;
-				}
-			}
-
-			// notify observers of new application-level coordinate
-			for (Iterator<ApplicationObserver> i = obs_list.iterator(); i
-					.hasNext();) {
-				ApplicationObserver obs = i.next();
-				obs.coordinatesUpdated(app_coord);
-			}
-
-			if (keepStatistics) {
-				if (time_of_last_app_update > 0) {
-					long since_last_app_update = curr_time
-							- time_of_last_app_update;
-					running_app_update_frequency.add(since_last_app_update);
-				}
-				time_of_last_app_update = curr_time;
-			}
-		}
-
-		if (debug && debugCrawler) {
-			slog.info("app_coord update: done " + did_update
-					+ " rolling " + updated_app_coord_at_least_once + " start "
-					+ start_coords.size() + " current " + current_coords.size()
-					+ " diff " + nf.format(relative_diff));
-		}
-	}
-
-  public static void setRandomSeed (long seed) {
-    random = new Random (seed);
-  }
-
-  public void startUp(DataInputStream is) throws IOException {
-    
-    if (debugCrawler) slog.info("startUp");
-        
-    boolean valid = false;
-
-    	// when starting up with no previously stored coord we get zero length input stream
-    
-    if ( is.available() > 0 ){    	
-    
-	    int	version = 1;
-	    
-	    	// migration 2501 when version added...
-	
-	    if ( is.available() != 25 ){
-	    
-	    	version = is.readInt();
-        if (debugCrawler) slog.info("Read version= "+version);
-	     }
-	    
-	    try {
-	      sys_coord = new Coordinate (num_dims, is);
-        app_coord.assign(sys_coord);
-	      error = ((double) is.readFloat());
-        // better to not be overconfident and mess up other nodes if our coord sucks on restart
-        // if our coord is still good, this will quickly drop
-        error = MAX_ERROR;
-	      if (sys_coord.isValid() && !(Double.isNaN(error))) {
-	          valid = true;
-	      }else{
-          if (debugCrawler) slog.info("Invalid coordinate or error");
-	      }
-	    } catch (IOException ex) {
-	    }
-      
-      if (version >= 2) {
-        // seed neighbors
-        int neighbor_count = is.readInt();
-        int id_length = is.readInt();
-        long curr_time = System.currentTimeMillis();
-        
-        for (int i = 0; i < neighbor_count; i++) {
-          RemoteState<T> rs = new RemoteState(num_dims, id_length, curr_time, is);
-          neighbors.add(rs);
-          rs_map.put(rs.getAddress(), rs);    
-        }
-        
-      }
-      
-    }
-    
-    if (!valid) {
-      if (debugCrawler) slog.info("Error deserializing coordinate during startup.  Starting afresh.");
-      sys_coord = new Coordinate (num_dims);
-      app_coord = new Coordinate (num_dims);   
-      error = MAX_ERROR;
-    } else {
-      updated_app_coord_at_least_once = true;
-      if (debugCrawler) slog.info("Deserialized coordinate OK during startup "+sys_coord+ " er "+error+
-       " rs_map "+rs_map.size());
-    }
-    
-  }
-  
-  public void shutDown(DataOutputStream os) throws IOException {
-		try{
-			lock.enter();
-
-		    if (debugCrawler) slog.info("shutDown");
-		    
-		    os.writeInt( 2 );	// version
-		    
-		    // could also save a number of neighbors
-		    // but then when we come back into the system, 
-		    // it would be tricky to know how to treat them (they'd be old
-		    // so they would get much weight either).
-		    
-		    if (debugCrawler) slog.info("Saving coordinates during shutdown "+sys_coord+" er="+error+
-																		" bump_error_flag="+bump_error_flag+" neighbors_size="+neighbors.size());
-		    
-		    sys_coord.toSerialized(os);
-		    os.writeFloat((float) error);
-		
-		    // save neighbors
-				int neighbors_size = neighbors.size();
-		
-				// if we have noticed a corruption with a neighbor, clear our neighbor state for next time around
-				if (bump_error_flag) {
-					neighbors_size = 0;
-				}
-		
-		    os.writeInt(neighbors_size);
-		    
-		    if (neighbors_size > 0) {
-		      
-		      int id_length = ((IDWrapper)(neighbors.get(0).getAddress())).getRawId().length;
-		      os.writeInt(id_length);
-		
-		
-		      for (RemoteState<T> neighbor : neighbors) {
-		        neighbor.toSerialized(os);
-		      }
-		    } else {
-		      // for id_length
-		      os.writeInt(0);  
-		      
-		    }
-		    
-	  }finally{
-		  
-		  lock.exit();
-	  }
-  }
-}
diff --git a/edu/harvard/syrah/nc/WindowStatistic.java b/edu/harvard/syrah/nc/WindowStatistic.java
deleted file mode 100644
index b827b33..0000000
--- a/edu/harvard/syrah/nc/WindowStatistic.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library 
- *
- * 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.
- *
- * 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 ( see the LICENSE file ).
- *
- * 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
- */
-
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-/*
- * @version $Revision: 1.9 $ on $Date: 2007/01/30 19:47:39 $
- * @since Mar 7, 2006
- */
-
-/**
- * 
- */
-public class WindowStatistic {
-
-  // Could be re-written as a circular buffer to avoid
-  // memory (re-)alloc
-
-  public static boolean debug = false; 
-  
-  protected final int max_history;
-  //protected final long expiration;
-  protected final List<Statistic> samples;
-  protected boolean dirty = true;
-  
-  // short-cut code (getPercentile was taking a significant percentage of time in simulation)
-  protected double previousPercentile = -1;
-  protected double previousValue = -1;
-  
-  class Statistic {
-    public final double sample;
-    public Statistic (double _sample) {
-      sample = _sample;
-    }
-    /*
-    public int compareTo (Object _s) {
-      Statistic s = (Statistic)_s;
-      if (stamp < s.stamp)
-        return -1;
-      else if (stamp > s.stamp)
-        return 1;
-      else
-        return 0;
-    }
-    */
-    public String toString () {
-      //return new String ("[i="+sample+",s="+stamp+"]");
-      return new String ("v="+sample);
-    }
-  }
-  
-  public WindowStatistic (int _max_history) {
-    assert (_max_history >= 0);
-    max_history = _max_history;
-    samples = new LinkedList<Statistic>();
-  }
-  
-  synchronized public void clear () {
-    samples.clear();
-    dirty = true;
-  }
-  
-   synchronized public void add (double sample) {
-     samples.add(new Statistic(sample));
-     dirty = true;
-     while (samples.size() > max_history) {
-       samples.remove(0);
-       if (debug) {
-         System.out.println ("tossing sample "+samples.get(0)+", size="+samples.size());
-       }
-     }
-   }
- 
-   synchronized public int getSize () {
-     return samples.size();
-   }
- 
-   synchronized public boolean withinVariance (double pct) {
-     if (samples.size() < 2) return true;
-     double mean = getMean();
-     for (int i = 0; i < samples.size(); i++) {
-       double pctDiff = Math.abs(samples.get(i).sample-mean)/mean;
-       if (pctDiff > pct) {
-         return false;
-       }
-     }
-     return true;
-   }
-   
-   synchronized public double getPercentile (double p) {
-     if (!dirty && p == previousPercentile)
-       return previousValue; 
-     double val = calcPercentile (p);
-     previousPercentile = p;
-     previousValue = val;
-     dirty = false;
-     return val;    
-   }  
-   
-   protected double calcPercentile (double p) {     
-     if (samples.size() == 0) return 0;
-     Double[] samples_copy = new Double[samples.size()];
-     for (int i = 0; i < samples.size(); i++) {
-       samples_copy[i] = samples.get(i).sample;
-       if (debug)
-         System.out.println (i+" "+samples_copy[i]);
-     }
-     Arrays.sort(samples_copy);
-     int percentile = (int)(samples_copy.length*p);
-     if (percentile < 0) percentile = 0;
-     double val = samples_copy[percentile].doubleValue();
-     if (debug)
-       System.out.println ("p= "+p+" per="+percentile+" val="+val);
-     return val;
-   }
-
-   protected double getSum () {
-     double sampleSum = 0.;
-     if (samples.size() > 0) {
-       for (int i = 0; i < samples.size(); i++) {
-         sampleSum += samples.get(i).sample;
-       }
-     }
-     return sampleSum;
-   }
-
-   // can be undefined
-   public double getMean () {
-     return getSum()/getSize();
-   }
-     
-}
diff --git a/org/gudy/azureus2/core3/config/COConfigurationManager.java b/org/gudy/azureus2/core3/config/COConfigurationManager.java
index 229b59b..2d06ce0 100644
--- a/org/gudy/azureus2/core3/config/COConfigurationManager.java
+++ b/org/gudy/azureus2/core3/config/COConfigurationManager.java
@@ -105,10 +105,10 @@ COConfigurationManager
 			    	
 			    		// things seem good in 10.6
 			    	
-			    	if ( !Constants.isOSX_10_6_OrHigher ){
+			    	//if ( !Constants.isOSX_10_6_OrHigher ){
 			        
 			    		System.setProperty( "java.nio.preferSelect", "true" );
-			    	}
+			    	//}
 			    }
 			    
 			    SystemProperties.determineApplicationName();
diff --git a/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java b/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java
index abff61f..952071f 100644
--- a/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java
+++ b/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java
@@ -141,6 +141,7 @@ public class ConfigurationDefaults {
     def.put("HTTP.Data.Listen.Port.Override", ZERO);
     def.put("HTTP.Data.Listen.Port.Enable", FALSE );
     
+    def.put("IPV6 Enable Support", Constants.isOSX?FALSE:TRUE );
     def.put("IPV6 Prefer Addresses",FALSE);
     	
     def.put("max active torrents", new Long(4));
@@ -248,6 +249,7 @@ public class ConfigurationDefaults {
       for (int j = 0; j <= 3; j++)
         def.put("bLog" + logComponents[i] + "-" + j, TRUE);
     def.put("Logger.DebugFiles.Enabled", TRUE);
+    def.put("Logger.DebugFiles.Enabled.Force", FALSE );
     def.put("Logging Enable UDP Transport", FALSE); 
 
     
@@ -375,6 +377,8 @@ public class ConfigurationDefaults {
     def.put( "Tracker TCP NonBlocking", FALSE);
     def.put( "Tracker TCP NonBlocking Restrict Request Types", TRUE);
     def.put( "Tracker TCP NonBlocking Conc Max", new Long(2048));
+    def.put( "Tracker TCP NonBlocking Immediate Close", FALSE );
+    
     def.put( "Tracker Client Scrape Enable", TRUE);
     def.put( "Tracker Client Scrape Total Disable", FALSE );
     def.put( "Tracker Client Scrape Stopped Enable", TRUE);
diff --git a/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java b/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java
index 121ad01..aed7ce2 100644
--- a/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java
+++ b/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java
@@ -57,19 +57,34 @@ public final class TransferSpeedValidator
     private final String configKey;
     private final Number configValue;
 
+    private static boolean auto_upload_enabled;
+		private static boolean auto_upload_seeding_enabled;
+
     private static boolean seeding_upload_enabled;
     
     static{
     	    		
-    	COConfigurationManager.addAndFireParameterListener(
-    			UPLOAD_SEEDING_ENABLED_CONFIGKEY,
+    	COConfigurationManager.addAndFireParameterListeners(
+    			new String[] {
+    				UPLOAD_SEEDING_ENABLED_CONFIGKEY,
+    				AUTO_UPLOAD_ENABLED_CONFIGKEY,
+    				AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY
+    			},
     			new ParameterListener()
         		{
         			public void 
         			parameterChanged(
         				String parameterName)
         			{
-        				seeding_upload_enabled = COConfigurationManager.getBooleanParameter( parameterName );
+        				if (parameterName == null || parameterName.equals(UPLOAD_SEEDING_ENABLED_CONFIGKEY)) {
+        					seeding_upload_enabled = COConfigurationManager.getBooleanParameter( parameterName );
+        				}
+        				if (parameterName == null || parameterName.equals(AUTO_UPLOAD_ENABLED_CONFIGKEY)) {
+        					auto_upload_enabled = COConfigurationManager.getBooleanParameter(parameterName);
+        				}
+        				if (parameterName == null || parameterName.equals(AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY)) {
+        					auto_upload_seeding_enabled = COConfigurationManager.getBooleanParameter(parameterName);
+        				}
         			}
         		});	
     }
@@ -196,32 +211,35 @@ public final class TransferSpeedValidator
     	return speedManager == null ? false : speedManager.isAvailable();
     }
     
-    public static String
-    getActiveAutoUploadParameter(
-    	GlobalManager	gm )
+    public static boolean
+    isAutoSpeedActive(
+    		GlobalManager gm )
     {
-    		// if downloading+seeding is set then we always use this regardless of
-    		// only seeding status
-    	
-    	if ( COConfigurationManager.getBooleanParameter(TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY)){
-    		
-    		return( TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY );
+  		// if downloading+seeding is set then we always use this regardless of
+  		// only seeding status
+
+    	if (auto_upload_enabled) {
+    		return auto_upload_enabled;
     	}
-    	
+
     	if ( gm.isSeedingOnly()){
-        	
-        	return( TransferSpeedValidator.AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY );
-        	
-      	}else{
-      		
-      		return( TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY );
-      	}
+      	
+    		return auto_upload_seeding_enabled;
+      	
+    	}else{
+    		
+    		return auto_upload_enabled;
+    	}
     }
+
+		public static String 
+		getActiveAutoUploadParameter(
+				GlobalManager gm) 
+		{
+			if (!auto_upload_enabled && gm.isSeedingOnly()) {
+				return AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY;
+			}
+			return AUTO_UPLOAD_ENABLED_CONFIGKEY;
+		}
     
-    public static boolean
-    isAutoSpeedActive(
-    	GlobalManager	gm )
-    {
-    	return( COConfigurationManager.getBooleanParameter( getActiveAutoUploadParameter( gm )));
-    }
 }
diff --git a/org/gudy/azureus2/core3/disk/DiskManagerFactory.java b/org/gudy/azureus2/core3/disk/DiskManagerFactory.java
index 1b93680..beb02a3 100644
--- a/org/gudy/azureus2/core3/disk/DiskManagerFactory.java
+++ b/org/gudy/azureus2/core3/disk/DiskManagerFactory.java
@@ -103,9 +103,10 @@ DiskManagerFactory
 	deleteDataFiles(
 		TOTorrent 	torrent, 
 		String		torrent_save_dir,
-		String		torrent_save_file ) 
+		String		torrent_save_file,
+		boolean		force_no_recycle )
 	{
-	  DiskManagerImpl.deleteDataFiles(torrent, torrent_save_dir, torrent_save_file );
+	  DiskManagerImpl.deleteDataFiles(torrent, torrent_save_dir, torrent_save_file, force_no_recycle );
 	}
 	
 	public static DiskManagerFileInfoSet
diff --git a/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java b/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java
index f3171eb..a2c46ae 100644
--- a/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java
+++ b/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java
@@ -2287,7 +2287,8 @@ DiskManagerImpl
     deleteDataFiles(
         TOTorrent   torrent,
         String      torrent_save_dir,       // enclosing dir, not for deletion
-        String      torrent_save_file )     // file or dir for torrent
+        String      torrent_save_file, 		// file or dir for torrent
+        boolean		force_no_recycle )    
     {
         if (torrent == null || torrent_save_file == null ){
 
@@ -2301,15 +2302,17 @@ DiskManagerImpl
 
                 target = FMFileManagerFactory.getSingleton().getFileLink( torrent, target.getCanonicalFile());
 
-                FileUtil.deleteWithRecycle( target );
+                FileUtil.deleteWithRecycle( target, force_no_recycle );
 
             }else{
 
                 PlatformManager mgr = PlatformManagerFactory.getPlatformManager();
-                if( Constants.isOSX &&
-                      torrent_save_file.length() > 0 &&
-                      COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" ) &&
-                      mgr.hasCapability(PlatformManagerCapabilities.RecoverableFileDelete) ) {
+                
+                if( 	Constants.isOSX &&
+                		torrent_save_file.length() > 0 &&
+                		COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" ) &&
+                		(! force_no_recycle ) &&
+                		mgr.hasCapability(PlatformManagerCapabilities.RecoverableFileDelete) ) {
 
                     try
                     {
@@ -2323,16 +2326,16 @@ DiskManagerImpl
 
                         }else{
 
-                            deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file );
+                            deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file, force_no_recycle );
                     }
                     }
                     catch(PlatformManagerException ex)
                     {
-                        deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file );
+                        deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file, force_no_recycle );
                     }
                 }
                 else{
-                    deleteDataFileContents(torrent, torrent_save_dir, torrent_save_file);
+                    deleteDataFileContents(torrent, torrent_save_dir, torrent_save_file, force_no_recycle);
                 }
 
             }
@@ -2427,9 +2430,10 @@ DiskManagerImpl
 
     private static void
     deleteDataFileContents(
-        TOTorrent torrent,
-        String torrent_save_dir,
-        String torrent_save_file )
+        TOTorrent 	torrent,
+        String 		torrent_save_dir,
+        String 		torrent_save_file,
+        boolean		force_no_recycle )
 
             throws TOTorrentException, UnsupportedEncodingException, LocaleUtilEncodingException
     {
@@ -2503,7 +2507,7 @@ DiskManagerImpl
             if ( delete && file.exists() && !file.isDirectory()){
 
                 try{
-                    FileUtil.deleteWithRecycle( file );
+                    FileUtil.deleteWithRecycle( file, force_no_recycle );
 
                 }catch (Exception e){
 
@@ -2784,7 +2788,9 @@ DiskManagerImpl
 
             }else{
 
-                if ( FileUtil.deleteWithRecycle( existing_file )){
+                if ( FileUtil.deleteWithRecycle( 
+                		existing_file,
+                		download_manager.getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE ))){
 
                         // new file, recheck
 
diff --git a/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java b/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java
index bc125f8..74316ca 100644
--- a/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java
+++ b/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java
@@ -339,7 +339,7 @@ DMReaderImpl
 			List	chunks = new ArrayList();
 			
 			int	buffer_position = 0;
-			
+						
 			while ( buffer_position < length && currentFile < pieceList.size()) {
 	     
 				DMPieceMapEntry map_entry = pieceList.get( currentFile );
@@ -493,6 +493,7 @@ DMReaderImpl
 		private int	buffer_length;
 		
 		private int	chunk_index;
+		private int	chunk_limit;
 		
 		protected
 		requestDispatcher(
@@ -624,10 +625,16 @@ DMReaderImpl
 		doRequest(
 			DiskAccessRequestListener	l )
 		{
-			
 			Object[]	stuff = (Object[])chunks.get( chunk_index++ );
 			
-			buffer.limit( DirectByteBuffer.SS_DR, ((Integer)stuff[2]).intValue());
+			if ( chunk_index > 0 ){
+				
+				buffer.position( DirectByteBuffer.SS_DR, chunk_limit );
+			}
+			
+			chunk_limit = ((Integer)stuff[2]).intValue();
+			
+			buffer.limit( DirectByteBuffer.SS_DR, chunk_limit );
 			
 			short	cache_policy = dm_request.getUseCache()?CacheFile.CP_READ_CACHE:CacheFile.CP_NONE;
 			
diff --git a/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java b/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java
index b8e58cb..1010d0b 100644
--- a/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java
+++ b/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java
@@ -414,7 +414,7 @@ DownloadManagerImpl
 										
 										an.cloneFrom( announcer );
 										
-										an.setTrackerUrl( old_url );
+										an.setTrackerURL( old_url );
 										
 										an.stop( false );
 										
@@ -782,7 +782,23 @@ DownloadManagerImpl
 						download_manager_state.setFlag( DownloadManagerState.FLAG_LOW_NOISE, true );
 					}
 							
-				 	download_manager_state.setTrackerResponseCache( new HashMap());
+					Map peer_cache = TorrentUtils.getPeerCache( torrent );
+					
+					if ( peer_cache != null ){
+						
+						try{
+							download_manager_state.setTrackerResponseCache( peer_cache );
+							
+						}catch( Throwable e ){
+						
+							Debug.out( e );
+							
+							download_manager_state.setTrackerResponseCache( new HashMap());
+						}
+					}else{
+					
+						download_manager_state.setTrackerResponseCache( new HashMap());
+					}
 				 	
 				 		// also remove resume data incase someone's published a torrent with resume
 				 		// data in it
@@ -2982,11 +2998,16 @@ DownloadManagerImpl
 	protected void 
 	deleteDataFiles() 
 	{
-		DiskManagerFactory.deleteDataFiles(torrent, torrent_save_location.getParent(), torrent_save_location.getName());
+		DiskManagerFactory.deleteDataFiles(
+			torrent, 
+			torrent_save_location.getParent(), 
+			torrent_save_location.getName(),
+			getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE ));
 		
 		// Attempted fix for bug 1572356 - apparently sometimes when we perform removal of a download's data files,
 		// it still somehow gets processed by the move-on-removal rules. I'm making the assumption that this method
 		// is only called when a download is about to be removed.
+		
 		this.getDownloadState().setFlag(DownloadManagerState.FLAG_DISABLE_AUTO_FILE_MOVE, true);
 	}
   
@@ -2995,7 +3016,7 @@ DownloadManagerImpl
 	{
 		if ( torrentFileName != null ){
   		
-			TorrentUtils.delete( new File(torrentFileName));
+			TorrentUtils.delete( new File(torrentFileName),getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE ));
 		}
 	}
   
diff --git a/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java b/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java
index 13974b1..e8693a4 100644
--- a/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java
+++ b/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java
@@ -27,8 +27,6 @@ package org.gudy.azureus2.core3.torrentdownloader.impl;
 import java.io.*;
 
 import java.net.HttpURLConnection;
-import java.net.Inet4Address;
-import java.net.InetAddress;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.util.Iterator;
@@ -44,6 +42,7 @@ import org.gudy.azureus2.core3.torrentdownloader.TorrentDownloaderCallBackInterf
 import org.gudy.azureus2.core3.torrentdownloader.TorrentDownloader;
 import org.gudy.azureus2.core3.util.*;
 import org.gudy.azureus2.core3.util.protocol.magnet.MagnetConnection;
+import org.gudy.azureus2.core3.util.protocol.magnet.MagnetConnection2;
 import org.gudy.azureus2.core3.torrent.*;
 
 
@@ -132,6 +131,8 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
   	}finally{
   		
   		this_mon.exit();
+  		
+  		closeConnection();
   	}
   }
 
@@ -142,14 +143,14 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
   		new URL( url_str );  //determine if this is already a proper URL
   	}
   	catch( Throwable t ) {  //it's not
-  		//check if the string is just a hex-encoded torrent infohash
-  		if( url_str.length() == 40 ) {
-  			try{
-  				//if so, convert to magnet:?xt=urn:btih:ZFQ7PUPQ2QMPFSD6AP4JASDDACA5MZU7 format		
-  				byte[] infohash = ByteFormatter.decodeString( url_str.toUpperCase() );  //convert from HEX to raw bytes
-  				url_str = "magnet:?xt=urn:btih:" +Base32.encode( infohash );  //convert to BASE32
-  			}
-  			catch( Throwable e ) {  /*e.printStackTrace();*/		}
+  		
+  			//check if the string is just a base32/hex-encoded torrent infohash
+  		
+  		String magnet_uri = UrlUtils.normaliseMagnetURI( url_str );
+  		
+  		if ( magnet_uri != null ){
+  			
+  			url_str = magnet_uri;
   		}
   	}
  
@@ -325,18 +326,32 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
     		filename += ".tmp";
     		
         }else{
-	        if (tmp.lastIndexOf('/') != -1)
-	          tmp = tmp.substring(tmp.lastIndexOf('/') + 1);
+        		// might be /sdsdssd/ffgfgffgfg/ so remove trailing /
+        	
+        	while( tmp.endsWith( "/" )){
+        		
+        		tmp = tmp.substring(0,tmp.length()-1);
+        	}
+        	
+	        if (tmp.lastIndexOf('/') != -1){
+	         
+	        	tmp = tmp.substring(tmp.lastIndexOf('/') + 1);
+	        }
 	        
-	        // remove any params in the url
+	        	// remove any params in the url
 	        
 	        int	param_pos = tmp.indexOf('?');
 	        
 	        if ( param_pos != -1 ){
-	          tmp = tmp.substring(0,param_pos);
+	        	tmp = tmp.substring(0,param_pos);
 	        }
 	        
 	        filename = URLDecoder.decode(tmp, Constants.DEFAULT_ENCODING );
+	        
+	        if ( filename.length() == 0 ){
+	        	
+	        	filename = "Torrent" + (long)(Math.random()*Long.MAX_VALUE);
+	        }
         }
       } else {
         filename = filename.substring(filename.indexOf('=') + 1);
@@ -417,11 +432,19 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
 				runSupport()
         		{
         			boolean changed_status	= false;
+        			String	last_status		= "";
+        			
+        			boolean	sleep = false;
         			
         			while( true ){
         				
         				try{
-        					Thread.sleep(100);
+        					if ( sleep ){
+        					
+        						Thread.sleep(50);
+        						
+        						sleep = false;
+        					}
         					
         					try{
         						this_mon.enter();
@@ -437,7 +460,13 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
         					
         					String	s = con.getResponseMessage();
         					  
-        					if ( !s.equals( getStatus())){
+        					if ( s.equals( last_status )){
+        						
+        						sleep = true;
+        						
+        					}else{
+        						
+        						last_status = s;
         						
         						if ( !s.toLowerCase().startsWith("error:")){
         							
@@ -483,10 +512,7 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
         						}
         						
         						changed_status	= true;
-        					}
-   
-        					
- 
+        					} 
         				}catch( Throwable e ){
         					
         					break;
@@ -583,7 +609,7 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
 	            
 	            this.readTotal += bufBytes;
 	            
-	            if (size != 0){
+	            if (size > 0){
 	              this.percentDone = (100 * this.readTotal) / size;
 	            }
 	            
@@ -749,11 +775,17 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
 
   public void cancel() {
     this.cancel = true;
-    if ( con instanceof MagnetConnection ){
-    	con.disconnect();
-    }
+    closeConnection();
   }
 
+  protected void
+  closeConnection()
+  {
+	if ( con instanceof MagnetConnection || con instanceof MagnetConnection2 ){
+	  	con.disconnect();
+	}
+  }
+  
   public void setDownloadPath(String path, String file) {
     if (!this.isAlive()) {
       if (path != null)
diff --git a/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java b/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java
index fdbd29f..94b7699 100644
--- a/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java
+++ b/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java
@@ -57,13 +57,17 @@ TRTrackerAnnouncer
 	getTorrent();
 	
 	public URL
-	getTrackerUrl();
+	getTrackerURL();
 	
 	public void
-	setTrackerUrl(
+	setTrackerURL(
 		URL		url );
 		
 	public void
+	setTrackerURLs(
+		TOTorrentAnnounceURLSet[]		sets );
+	
+	public void
 	resetTrackerUrl(
 		boolean	shuffle );
 	
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java
index dbe1b82..dfd9a3a 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java
@@ -31,15 +31,13 @@ import java.util.*;
 
 import org.gudy.azureus2.core3.torrent.*;
 import org.gudy.azureus2.core3.tracker.client.*;
-import org.gudy.azureus2.core3.tracker.client.impl.bt.TRTrackerBTAnnouncerImpl;
-import org.gudy.azureus2.core3.tracker.client.impl.dht.TRTrackerDHTAnnouncerImpl;
 import org.gudy.azureus2.core3.util.*;
 
 public class 
 TRTrackerAnnouncerFactoryImpl 
 {
-	protected static List	listeners 	= new ArrayList();
-	protected static List	clients		= new ArrayList();
+	protected static List<TRTrackerAnnouncerFactoryListener>	listeners 	= new ArrayList<TRTrackerAnnouncerFactoryListener>();
+	protected static List<TRTrackerAnnouncerImpl>				clients		= new ArrayList<TRTrackerAnnouncerImpl>();
 	
 	protected static AEMonitor 		class_mon 	= new AEMonitor( "TRTrackerClientFactory" );
 
@@ -51,16 +49,7 @@ TRTrackerAnnouncerFactoryImpl
 		
 		throws TRTrackerAnnouncerException
 	{
-		TRTrackerAnnouncer	client;
-		
-		if ( TorrentUtils.isDecentralised( torrent )){
-			
-			client	= new TRTrackerDHTAnnouncerImpl( torrent, networks, manual );
-			
-		}else{
-			
-			client = new TRTrackerBTAnnouncerImpl( torrent, networks, manual );
-		}
+		TRTrackerAnnouncerImpl	client = new TRTrackerAnnouncerMuxer( torrent, networks, manual );
 		
 		if ( !manual ){
 			
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java
index c0a57f3..2035f32 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java
@@ -65,18 +65,16 @@ TRTrackerAnnouncerImpl
 	protected static final int LDT_URL_CHANGED			= 2;
 	protected static final int LDT_URL_REFRESH			= 3;
 	
-	protected ListenerManager	listeners 	= ListenerManager.createManager(
+	protected ListenerManager<TRTrackerAnnouncerListener>	listeners 	= ListenerManager.createManager(
 			"TrackerClient:ListenDispatcher",
-			new ListenerManagerDispatcher()
+			new ListenerManagerDispatcher<TRTrackerAnnouncerListener>()
 			{
 				public void
 				dispatch(
-					Object		_listener,
-					int			type,
-					Object		value )
+					TRTrackerAnnouncerListener		listener,
+					int								type,
+					Object							value )
 				{
-					TRTrackerAnnouncerListener	listener = (TRTrackerAnnouncerListener)_listener;
-					
 					if ( type == LDT_TRACKER_RESPONSE ){
 						
 						listener.receivedTrackerResponse((TRTrackerAnnouncerResponse)value);
@@ -109,10 +107,128 @@ TRTrackerAnnouncerImpl
 	{
 		torrent	= _torrent;
 	}
- 	
+
+	public Helper
+	getHelper()
+	{
+		return(
+			new Helper()
+			{
+				public void
+				addToTrackerCache(
+					TRTrackerAnnouncerResponsePeerImpl[]		peers )
+				{
+					TRTrackerAnnouncerImpl.this.addToTrackerCache( peers );
+				}
+
+				public TRTrackerAnnouncerResponsePeer[]
+		      	getPeersFromCache(
+		      		int			num_want )
+				{
+					return( TRTrackerAnnouncerImpl.this.getPeersFromCache(num_want));
+				}
+				
+				public void
+				setTrackerResponseCache(
+					Map 		map	)
+				{
+					TRTrackerAnnouncerImpl.this.setTrackerResponseCache( map );
+				}
+					
+				public void 
+				removeFromTrackerResponseCache(
+					String ip, int tcpPort )
+				{
+					TRTrackerAnnouncerImpl.this.removeFromTrackerResponseCache( ip,tcpPort );
+				}
+					
+				public Map 
+				getTrackerResponseCache()
+				{
+					return( TRTrackerAnnouncerImpl.this.getTrackerResponseCache());
+				}
+					
+				public void
+				informResponse(
+					TRTrackerAnnouncerResponse		response )
+				{
+					listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+				}
+				
+				public void
+				informURLChange(
+					URL		old_url,
+					URL		new_url,
+					boolean	explicit )
+				{
+					listeners.dispatch(	LDT_URL_CHANGED,
+							new Object[]{old_url, new_url, new Boolean(explicit)});
+				}
+				
+				public void
+				informURLRefresh()
+				{
+					listeners.dispatch( LDT_URL_REFRESH, null );
+				}
+				
+			 	public void
+				addListener(
+					TRTrackerAnnouncerListener	l )
+			 	{
+			 		TRTrackerAnnouncerImpl.this.addListener( l );
+			 	}
+					
+				public void
+				removeListener(
+					TRTrackerAnnouncerListener	l )
+				{
+					TRTrackerAnnouncerImpl.this.removeListener( l );
+				}
+			});
+	}
+	
+ 	public static byte[]
+	getAnonymousPeerId(
+		String	my_ip,
+		int		my_port )
+	{
+  		byte[] anon_peer_id = new byte[20];
+	
+  		// unique initial two bytes to identify this as fake
+
+  		anon_peer_id[0] = (byte)'[';
+  		anon_peer_id[1] = (byte)']';
+
+  		try{
+	  		byte[]	ip_bytes 	= my_ip.getBytes( Constants.DEFAULT_ENCODING );
+	  		int		ip_len		= ip_bytes.length;
+	
+	  		if ( ip_len > 18 ){
+		
+	  			ip_len = 18;
+	  		}
+	
+	  		System.arraycopy( ip_bytes, 0, anon_peer_id, 2, ip_len );
+									
+	  		int	port_copy = my_port;
+		
+	  		for (int j=2+ip_len;j<20;j++){
+			
+	  			anon_peer_id[j] = (byte)(port_copy&0xff);
+			
+	  			port_copy >>= 8;
+	  		}
+  		}catch( UnsupportedEncodingException e ){
+  			
+  			Debug.printStackTrace( e );
+  		}
+  		
+  		return( anon_peer_id );
+   }
+					
 		// NOTE: tracker_cache is cleared out in DownloadManager when opening a torrent for the
 		// first time as a DOS prevention measure
-
+	
 	public Map
 	getTrackerResponseCache()
 	{				
@@ -130,7 +246,7 @@ TRTrackerAnnouncerImpl
 			Logger.log(new LogEvent(getTorrent(), LOGID, "TRTrackerClient: imported "
 					+ num + " cached peers"));
 	}
-
+	
 	protected Map
 	exportTrackerCache()
 	{
@@ -188,46 +304,7 @@ TRTrackerAnnouncerImpl
 		
 		return( res );
 	}
-
- 	protected byte[]
-	getAnonymousPeerId(
-		String	my_ip,
-		int		my_port )
-	{
-  		byte[] anon_peer_id = new byte[20];
-	
-  		// unique initial two bytes to identify this as fake
-
-  		anon_peer_id[0] = (byte)'[';
-  		anon_peer_id[1] = (byte)']';
-
-  		try{
-	  		byte[]	ip_bytes 	= my_ip.getBytes( Constants.DEFAULT_ENCODING );
-	  		int		ip_len		= ip_bytes.length;
-	
-	  		if ( ip_len > 18 ){
-		
-	  			ip_len = 18;
-	  		}
 	
-	  		System.arraycopy( ip_bytes, 0, anon_peer_id, 2, ip_len );
-									
-	  		int	port_copy = my_port;
-		
-	  		for (int j=2+ip_len;j<20;j++){
-			
-	  			anon_peer_id[j] = (byte)(port_copy&0xff);
-			
-	  			port_copy >>= 8;
-	  		}
-  		}catch( UnsupportedEncodingException e ){
-  			
-  			Debug.printStackTrace( e );
-  		}
-  		
-  		return( anon_peer_id );
-   }
-					
 	protected int
 	importTrackerCache(
 		Map		map )
@@ -272,7 +349,7 @@ TRTrackerAnnouncerImpl
 					byte	az_ver			= l_az_ver==null?TRTrackerAnnouncer.AZ_TRACKER_VERSION_1:l_az_ver.byteValue();
 				
 					//System.out.println( "recovered " + ip_address + ":" + port );
-
+	
 					TRTrackerAnnouncerResponsePeerImpl	entry =
 						new TRTrackerAnnouncerResponsePeerImpl(
 							peer_source, 
@@ -301,7 +378,7 @@ TRTrackerAnnouncerImpl
 			return( tracker_peer_cache.size());
 		}
 	}
-
+	
 	protected void
 	addToTrackerCache(
 		TRTrackerAnnouncerResponsePeerImpl[]		peers )
@@ -345,7 +422,7 @@ TRTrackerAnnouncerImpl
 			tracker_peer_cache_mon.exit();
 		}
 	}
-
+	
 	public void
 	removeFromTrackerResponseCache(
 		String		ip,
@@ -452,16 +529,16 @@ TRTrackerAnnouncerImpl
 				}
 			}
 			
-    		if (Logger.isEnabled()){
-    			
-    			for (int i=0;i<res.length;i++){
+			if (Logger.isEnabled()){
+				
+				for (int i=0;i<res.length;i++){
 						
 					Logger.log(new LogEvent(getTorrent(), LOGID, "CACHED PEER: " + res[i].getString()));
-    			}
+				}
 			
 				Logger.log(new LogEvent(getTorrent(), LOGID,
 						"TRTrackerClient: returned " + res.length + " cached peers"));
-    		}
+			}
 		    
 			return( res );
 			
@@ -470,7 +547,7 @@ TRTrackerAnnouncerImpl
 			tracker_peer_cache_mon.exit();
 		}
 	} 
-
+	
  	public void
 	addListener(
 		TRTrackerAnnouncerListener	l )
@@ -485,4 +562,47 @@ TRTrackerAnnouncerImpl
 		listeners.removeListener(l);
 	}
 
+	public interface
+	Helper
+	{
+		public void
+		addToTrackerCache(
+			TRTrackerAnnouncerResponsePeerImpl[]		peers );
+
+		public TRTrackerAnnouncerResponsePeer[]
+      	getPeersFromCache(
+      		int			num_want );
+		
+		public void 
+		setTrackerResponseCache(
+			Map map	);
+		
+		public void 
+		removeFromTrackerResponseCache(
+			String ip, int tcpPort );
+		
+		public Map 
+		getTrackerResponseCache();
+		
+		public void
+		informResponse(
+			TRTrackerAnnouncerResponse		response );
+		
+		public void
+		informURLChange(
+			URL			old_url,
+			URL			new_url,
+			boolean		explicit );
+		
+		public void
+		informURLRefresh();
+		
+	 	public void
+		addListener(
+			TRTrackerAnnouncerListener	l );
+			
+		public void
+		removeListener(
+			TRTrackerAnnouncerListener	l );
+	}
 }
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerMuxer.java b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerMuxer.java
new file mode 100644
index 0000000..c00e506
--- /dev/null
+++ b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerMuxer.java
@@ -0,0 +1,238 @@
+/*
+ * Created on Dec 4, 2009
+ * Created by Paul Gardner
+ * 
+ * Copyright 2009 Vuze, Inc.  All rights reserved.
+ * 
+ * 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; version 2 of the License only.
+ * 
+ * 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.
+ */
+
+
+package org.gudy.azureus2.core3.tracker.client.impl;
+
+import java.net.URL;
+
+import org.gudy.azureus2.core3.torrent.TOTorrent;
+import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLSet;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerDataProvider;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerException;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponse;
+import org.gudy.azureus2.core3.tracker.client.impl.bt.TRTrackerBTAnnouncerImpl;
+import org.gudy.azureus2.core3.tracker.client.impl.dht.TRTrackerDHTAnnouncerImpl;
+import org.gudy.azureus2.core3.util.Debug;
+import org.gudy.azureus2.core3.util.IndentWriter;
+import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.plugins.download.DownloadAnnounceResult;
+
+public class 
+TRTrackerAnnouncerMuxer
+	extends TRTrackerAnnouncerImpl
+{
+	private TRTrackerAnnouncer	main_announcer;
+	
+	protected
+	TRTrackerAnnouncerMuxer(
+		TOTorrent		torrent,
+		String[]		networks,
+		boolean			manual )
+	
+		throws TRTrackerAnnouncerException
+	{
+		super( torrent );
+		
+		TOTorrentAnnounceURLSet[]	sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
+		
+		if ( TorrentUtils.isDecentralised( torrent )){
+			
+			main_announcer	= new TRTrackerDHTAnnouncerImpl( torrent, networks, manual, getHelper());
+			
+		}else{
+			
+
+			main_announcer = new TRTrackerBTAnnouncerImpl( torrent, sets, networks, manual, getHelper());
+		}
+	}
+	
+	public void
+	setAnnounceDataProvider(
+		TRTrackerAnnouncerDataProvider		provider )
+	{
+		main_announcer.setAnnounceDataProvider( provider );
+		
+		//System.out.println( "announcer set" );
+	}
+	
+	public TOTorrent
+	getTorrent()
+	{
+		return( main_announcer.getTorrent());
+	}
+	
+	public URL
+	getTrackerURL()
+	{
+		return( main_announcer.getTrackerURL());
+	}
+	
+	public void
+	setTrackerURL(
+		URL		url )
+	{
+		main_announcer.setTrackerURL( url );
+	}
+		
+	public void 
+	setTrackerURLs(
+		TOTorrentAnnounceURLSet[] 	sets ) 
+	{
+		Debug.out( "Not implemented" );
+	}
+	
+	public void
+	resetTrackerUrl(
+		boolean	shuffle )
+	{
+		main_announcer.setTrackerURLs( getTorrent().getAnnounceURLGroup().getAnnounceURLSets());
+		
+		main_announcer.resetTrackerUrl( shuffle );
+	}
+	
+	public void
+	setIPOverride(
+		String		override )
+	{
+		main_announcer.setIPOverride( override );
+	}
+	
+	public void
+	cloneFrom(
+		TRTrackerAnnouncer	other )
+	{
+		main_announcer.cloneFrom( other );
+	}
+	
+	public void
+	clearIPOverride()
+	{
+		main_announcer.clearIPOverride();
+	}
+	
+	public byte[]
+	getPeerId()
+	{
+		return( main_announcer.getPeerId());
+	}
+	
+	public void
+	setRefreshDelayOverrides(
+		int		percentage )
+	{
+		main_announcer.setRefreshDelayOverrides( percentage );
+	}
+	
+	public int
+	getTimeUntilNextUpdate()
+	{
+		return( main_announcer.getTimeUntilNextUpdate());
+	}
+	
+	public int
+	getLastUpdateTime()
+	{
+		return( main_announcer.getLastUpdateTime());
+	}
+			
+	public void
+	update(
+		boolean	force )
+	{
+		main_announcer.update(force);
+		
+		//System.out.println( "update" );
+	}
+	
+	public void
+	complete(
+		boolean	already_reported )
+	{
+		main_announcer.complete(already_reported);
+		
+		//System.out.println( "complete" );
+	}
+	
+	public void
+	stop(
+		boolean	for_queue )
+	{
+		main_announcer.stop( for_queue );
+		
+		//System.out.println( "stop" );
+	}
+	
+	public void
+	destroy()
+	{
+		TRTrackerAnnouncerFactoryImpl.destroy( this );
+
+		main_announcer.destroy();
+		
+		//System.out.println( "destroy" );
+	}
+	
+	public int
+	getStatus()
+	{
+		return( main_announcer.getStatus());
+	}
+	
+	public boolean
+	isManual()
+	{
+		return( main_announcer.isManual());
+	}
+	
+	public String
+	getStatusString()
+	{
+		return( main_announcer.getStatusString());
+	}
+	
+	public TRTrackerAnnouncerResponse
+	getLastResponse()
+	{
+		return( main_announcer.getLastResponse());
+	}
+	
+	
+	public void
+	refreshListeners()
+	{
+		main_announcer.refreshListeners();	
+	}
+	
+	public void
+	setAnnounceResult(
+		DownloadAnnounceResult	result )
+	{
+		main_announcer.setAnnounceResult(result);
+	}
+		
+	public void 
+	generateEvidence(
+		IndentWriter writer )
+	{
+		main_announcer.generateEvidence(writer);
+	}
+}
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java
index 25326ba..f69a504 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java
@@ -39,6 +39,7 @@ import org.gudy.azureus2.core3.config.ParameterListener;
 import org.gudy.azureus2.core3.internat.MessageText;
 import org.gudy.azureus2.core3.logging.LogAlert;
 import org.gudy.azureus2.core3.logging.LogEvent;
+import org.gudy.azureus2.core3.logging.LogIDs;
 import org.gudy.azureus2.core3.logging.Logger;
 import org.gudy.azureus2.core3.peer.PEPeerSource;
 import org.gudy.azureus2.core3.security.SESecurityManager;
@@ -76,9 +77,9 @@ import com.aelitis.net.udp.uc.*;
  */
 public class 
 TRTrackerBTAnnouncerImpl
-	extends TRTrackerAnnouncerImpl
+	implements TRTrackerAnnouncer
 {
-	
+	public final static LogIDs LOGID = LogIDs.TRACKER;
 		
 	private static final int OVERRIDE_PERIOD			= 10*1000;
 	 
@@ -113,12 +114,15 @@ TRTrackerBTAnnouncerImpl
 	private static Map			tracker_report_map	= new HashMap();
 	
     
-	private TOTorrent				torrent;
+	private TOTorrent					torrent;
+	private TOTorrentAnnounceURLSet[]	announce_urls;
+	
+	private TRTrackerAnnouncerImpl.Helper	helper;
 	
 	private TimerEvent				current_timer_event;
 	private TimerEventPerformer		timer_event_action;
 	
-	protected int				tracker_state 			= TS_INITIALISED;
+	protected int				tracker_state 			= TRTrackerAnnouncer.TS_INITIALISED;
 	private String				tracker_status_str		= "";
 	private TRTrackerAnnouncerResponseImpl	last_response			= null;
 	private long				last_update_time_secs;
@@ -202,17 +206,19 @@ TRTrackerBTAnnouncerImpl
 	
   public 
   TRTrackerBTAnnouncerImpl(
-   	TOTorrent		_torrent,
-	String[]		_peer_networks,
-	boolean			_manual ) 
+   	TOTorrent						_torrent,
+   	TOTorrentAnnounceURLSet[]		_announce_urls,
+	String[]						_peer_networks,
+	boolean							_manual,
+	TRTrackerAnnouncerImpl.Helper	_helper )
   	
   	throws TRTrackerAnnouncerException
   {
-	super( _torrent );
-	 
 	torrent			= _torrent;
+	announce_urls	= _announce_urls;
   	peer_networks	= _peer_networks;
   	manual_control	= _manual;
+  	helper			= _helper;
   	
 		//Get the Tracker url
 		
@@ -290,7 +296,7 @@ TRTrackerBTAnnouncerImpl
 						
 					current_time_to_wait_secs	= secs_to_wait;
 							
-					if ( tracker_state == TS_STOPPED ){
+					if ( tracker_state == TRTrackerAnnouncer.TS_STOPPED ){
 						
 						// System.out.println( "\tperform: stopped so no more events");
 						
@@ -415,7 +421,7 @@ TRTrackerBTAnnouncerImpl
 				if (Logger.isEnabled())
 					Logger.log(new LogEvent(torrent, LOGID,
 							"MIN INTERVAL CALC: override, perc = 0"));
-      	return REFRESH_MINIMUM_SECS;
+      	return TRTrackerAnnouncer.REFRESH_MINIMUM_SECS;
       }
 
       if (rd_override_percentage != 100) {
@@ -426,9 +432,9 @@ TRTrackerBTAnnouncerImpl
     		}
       }
 									
-      if ( secs_to_wait < REFRESH_MINIMUM_SECS ){
+      if ( secs_to_wait < TRTrackerAnnouncer.REFRESH_MINIMUM_SECS ){
 	  			
-        secs_to_wait = REFRESH_MINIMUM_SECS;
+        secs_to_wait = TRTrackerAnnouncer.REFRESH_MINIMUM_SECS;
       }
       
       //use 'min interval' for calculation
@@ -564,7 +570,7 @@ TRTrackerBTAnnouncerImpl
         
         if ( now < last_update_time_secs )  force = true;  //time went backwards
 
-        long	effective_min = min_interval_override>0?min_interval_override:REFRESH_MINIMUM_SECS;
+        long	effective_min = min_interval_override>0?min_interval_override:TRTrackerAnnouncer.REFRESH_MINIMUM_SECS;
         
 		if ( manual_control || force || ( now - last_update_time_secs >= effective_min )){
 			
@@ -662,29 +668,29 @@ TRTrackerBTAnnouncerImpl
 					// if manual control then we assume that a stop request is required, even if we
 					// are in an init state. needed for explicit stop based on URL
 				
-				if ( tracker_state == TS_INITIALISED && !manual_control ){
+				if ( tracker_state == TRTrackerAnnouncer.TS_INITIALISED && !manual_control ){
 					
 						// never started
 					
-					tracker_state = TS_STOPPED;
+					tracker_state = TRTrackerAnnouncer.TS_STOPPED;
 					
-				}else if ( tracker_state != TS_STOPPED ){
+				}else if ( tracker_state != TRTrackerAnnouncer.TS_STOPPED ){
 			
 					response = stopSupport();
 					
 					if ( response.getStatus() == TRTrackerAnnouncerResponse.ST_ONLINE ){
 												
-						tracker_state = TS_STOPPED;
+						tracker_state = TRTrackerAnnouncer.TS_STOPPED;
 						
 					}else{
 						
 							// just have one go at sending a stop event as we don't want to sit here
 							// forever trying to send stop to a stuffed tracker
 							
-						tracker_state = TS_STOPPED;
+						tracker_state = TRTrackerAnnouncer.TS_STOPPED;
 					}
 				}	
-			}else if ( tracker_state == TS_INITIALISED ){
+			}else if ( tracker_state == TRTrackerAnnouncer.TS_INITIALISED ){
 							
 					// always go through the "start" phase, even if we're already complete
 					// as some trackers insist on the initial "start"
@@ -693,7 +699,7 @@ TRTrackerBTAnnouncerImpl
 					
 				if ( response.getStatus() == TRTrackerAnnouncerResponse.ST_ONLINE ){
 						
-					tracker_state = TS_DOWNLOADING;
+					tracker_state = TRTrackerAnnouncer.TS_DOWNLOADING;
 				}
 			}else if ( completed ){
 				
@@ -710,10 +716,10 @@ TRTrackerBTAnnouncerImpl
 						
 						complete_reported	= true;
 				
-						tracker_state = TS_COMPLETED;
+						tracker_state = TRTrackerAnnouncer.TS_COMPLETED;
 					}
 				}else{
-					tracker_state = TS_COMPLETED;
+					tracker_state = TRTrackerAnnouncer.TS_COMPLETED;
 					
 					response = updateSupport();
 				}
@@ -740,7 +746,7 @@ TRTrackerBTAnnouncerImpl
 						// will fail peers that don't start with a "started" event after a 
 						// tracker restart
 					
-					tracker_state	= TS_INITIALISED;
+					tracker_state	= TRTrackerAnnouncer.TS_INITIALISED;
 					
 				}else{
 	    	       	    
@@ -764,7 +770,7 @@ TRTrackerBTAnnouncerImpl
 				
 				last_response = response;
 				
-				listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+				helper.informResponse( response );
 				
 				return( response.getTimeToWait());
 			}
@@ -1052,7 +1058,7 @@ TRTrackerBTAnnouncerImpl
 	  int	num_want = calculateNumWant() * 4;
 
 
-      TRTrackerAnnouncerResponsePeer[]	cached_peers = getPeersFromCache(num_want);      
+      TRTrackerAnnouncerResponsePeer[]	cached_peers = helper.getPeersFromCache(num_want);      
       
       if ( cached_peers.length > 0 ){
 
@@ -2087,13 +2093,13 @@ TRTrackerBTAnnouncerImpl
 	}
 	
 	public URL 
-	getTrackerUrl() 
+	getTrackerURL() 
 	{
 		return( lastUsedUrl );
 	} 
   
 	public void 
-	setTrackerUrl(
+	setTrackerURL(
 		URL new_url ) 
 	{
 		try{
@@ -2116,6 +2122,13 @@ TRTrackerBTAnnouncerImpl
 	}
   
 	public void
+	setTrackerURLs(
+		TOTorrentAnnounceURLSet[]		_set )
+	{
+		announce_urls = _set;
+	}
+	
+	public void
 	resetTrackerUrl(
 		boolean		shuffle )
 	{
@@ -2163,10 +2176,8 @@ TRTrackerBTAnnouncerImpl
 			trackerUrlLists = new ArrayList(1);
 	  
 				//This entry is present on multi-tracker torrents
-	  
-			TOTorrentAnnounceURLSet[]	announce_sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
-	       
-			if ( announce_sets.length == 0 ){
+	  	       
+			if ( announce_urls.length == 0 ){
 	  	
 					//If not present, we use the default specification
 					
@@ -2184,11 +2195,11 @@ TRTrackerBTAnnouncerImpl
 	  			
 					//Ok we have a multi-tracker torrent
 				
-				for(int i = 0 ; i < announce_sets.length ; i++){
+				for(int i = 0 ; i < announce_urls.length ; i++){
 					
 				  	//Each list contains a list of urls
 				  
-					URL[]	urls = announce_sets[i].getAnnounceURLs();
+					URL[]	urls = announce_urls[i].getAnnounceURLs();
 					
 				 	List random_urls = new ArrayList();
 				 	
@@ -2685,7 +2696,7 @@ TRTrackerBTAnnouncerImpl
 					    		
 					    		int		tcp_port 	= ((tcp_bytes[0]&0xff) << 8 ) + (tcp_bytes[1]&0xff );
 	                
-					    		byte[]	peer_peer_id = getAnonymousPeerId( ip, tcp_port );
+					    		byte[]	peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, tcp_port );
 	
 					    		int		udp_port 	= 0;
 					    		
@@ -2845,7 +2856,7 @@ TRTrackerBTAnnouncerImpl
 	                
 									// Debug.out(ip + ": tracker did not give peerID in reply");
 
-									peer_peer_id = getAnonymousPeerId( ip, peer_port );
+									peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, peer_port );
 									
 									// System.out.println("generated peer id" + new String(peerId) + "/" + ByteFormatter.nicePrint( peerId, true ));
 								}else{
@@ -2936,7 +2947,7 @@ TRTrackerBTAnnouncerImpl
 				    			continue;
 				    		}
                 
-				    		byte[]	peer_peer_id = getAnonymousPeerId( ip, tcp_port );
+				    		byte[]	peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, tcp_port );
 							
 				    		short 	protocol;
 				    		int		udp_port;
@@ -3033,7 +3044,7 @@ TRTrackerBTAnnouncerImpl
 								continue;
 							}
 							
-							byte[] peer_peer_id = getAnonymousPeerId( ip, tcp_port );
+							byte[] peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, tcp_port );
 							
 							short protocol = DownloadAnnounceResultPeer.PROTOCOL_NORMAL;
 							
@@ -3053,7 +3064,7 @@ TRTrackerBTAnnouncerImpl
 					
 					valid_meta_peers.toArray(peers);
 					
-					addToTrackerCache( peers);
+					helper.addToTrackerCache( peers);
 					
 					TRTrackerAnnouncerResponseImpl resp = new TRTrackerAnnouncerResponseImpl( url, torrent_hash, TRTrackerAnnouncerResponse.ST_ONLINE, time_to_wait, peers );
           
@@ -3113,7 +3124,7 @@ TRTrackerBTAnnouncerImpl
 							TRTrackerScraper scraper = TRTrackerScraperFactory.getSingleton();
 
 							if (scraper != null) {
-								TRTrackerScraperResponse scrapeResponse = scraper.scrape(this);
+								TRTrackerScraperResponse scrapeResponse = scraper.scrape( torrent, getTrackerURL());
 								if (scrapeResponse != null) {
 									long lNextScrapeTime = scrapeResponse.getNextScrapeStartTime();
 									long lNewNextScrapeTime = TRTrackerScraperResponseImpl.calcScrapeIntervalSecs(
@@ -3175,14 +3186,13 @@ TRTrackerBTAnnouncerImpl
 		URL		new_url,
 		boolean	explicit  )
 	{
-		listeners.dispatch(	LDT_URL_CHANGED,
-							new Object[]{old_url, new_url, new Boolean(explicit)});
+		helper.informURLChange( old_url, new_url, explicit );
 	}
 	
 	protected void
 	informURLRefresh()
 	{
-		listeners.dispatch( LDT_URL_REFRESH, null );		
+		helper.informURLRefresh();	
 	}
 	
 	public TRTrackerAnnouncerResponse
@@ -3206,9 +3216,7 @@ TRTrackerBTAnnouncerImpl
 	destroy()
 	{       
 		destroyed	= true;
-		
-		TRTrackerAnnouncerFactoryImpl.destroy( this );
-		
+				
 		try{
 			this_mon.enter();
 			
@@ -3367,7 +3375,7 @@ TRTrackerBTAnnouncerImpl
 
 			l_peers.toArray( peers );
 			
-			addToTrackerCache( peers);
+			helper.addToTrackerCache( peers);
 		
 			if ( ps_enabled || peers.length > 0 || ext_peers.length == 0 ){
 				
@@ -3398,7 +3406,41 @@ TRTrackerBTAnnouncerImpl
 			tracker_status_str	= status + " (" + result.getURL() + ")";
 		}
 		
-		listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+		helper.informResponse( response );
+	}
+	
+	public void 
+	addListener(
+		TRTrackerAnnouncerListener l )
+	{
+		helper.addListener( l );
+	}
+	
+	public void 
+	removeListener(
+		TRTrackerAnnouncerListener l )
+	{
+		helper.removeListener( l );
+	}
+	
+	public void 
+	setTrackerResponseCache(
+		Map map	)
+	{
+		helper.setTrackerResponseCache( map );
+	}
+	
+	public void 
+	removeFromTrackerResponseCache(
+		String ip, int tcpPort) 
+	{
+		helper.removeFromTrackerResponseCache( ip, tcpPort );
+	}
+	
+	public Map 
+	getTrackerResponseCache() 
+	{
+		return( helper.getTrackerResponseCache());
 	}
 	
 	public void 
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java b/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java
index 367ab96..4d5589c 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java
@@ -93,7 +93,7 @@ public class TrackerChecker implements AEDiagnosticsEvidenceGenerator, SystemTim
   	TRTrackerAnnouncer tracker_client) 
   {
     try {
-      return getHashData(tracker_client.getTrackerUrl(), 
+      return getHashData(tracker_client.getTrackerURL(), 
                          tracker_client.getTorrent().getHashWrapper());
 
     } catch (TOTorrentException e) {
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java
index 45033de..7ddba49 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java
@@ -23,15 +23,18 @@
 package org.gudy.azureus2.core3.tracker.client.impl.dht;
 
 import java.net.URL;
+import java.util.Map;
 
 
 import org.gudy.azureus2.core3.internat.MessageText;
 import org.gudy.azureus2.core3.logging.*;
 import org.gudy.azureus2.core3.torrent.TOTorrent;
+import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLSet;
 import org.gudy.azureus2.core3.torrent.TOTorrentException;
 import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
 import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerDataProvider;
 import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerException;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerListener;
 import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponse;
 import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponsePeer;
 import org.gudy.azureus2.core3.tracker.client.impl.TRTrackerAnnouncerImpl;
@@ -53,10 +56,15 @@ import org.gudy.azureus2.pluginsimpl.local.clientid.ClientIDManagerImpl;
 
 public class 
 TRTrackerDHTAnnouncerImpl
-	extends TRTrackerAnnouncerImpl
+	implements TRTrackerAnnouncer
 {
+	public final static LogIDs LOGID = LogIDs.TRACKER;
+
 	private TOTorrent		torrent;
 	private HashWrapper		torrent_hash;
+	
+	private TRTrackerAnnouncerImpl.Helper		helper;
+	
 	private byte[]			data_peer_id;
 	
 	private String						tracker_status_str;
@@ -70,16 +78,16 @@ TRTrackerDHTAnnouncerImpl
 	
 	public
 	TRTrackerDHTAnnouncerImpl(
-		TOTorrent		_torrent,
-		String[]		_networks,
-		boolean			_manual )
+		TOTorrent						_torrent,
+		String[]						_networks,
+		boolean							_manual,
+		TRTrackerAnnouncerImpl.Helper	_helper )
 	
 		throws TRTrackerAnnouncerException
-	{
-		super( _torrent );
-		
+	{		
 		torrent		= _torrent;
 		manual		= _manual;
+		helper		= _helper;
 		
 		try{
 			torrent_hash	= torrent.getHashWrapper();
@@ -125,18 +133,25 @@ TRTrackerDHTAnnouncerImpl
 	}
 	
 	public URL
-	getTrackerUrl()
+	getTrackerURL()
 	{
 		return( torrent.getAnnounceURL());
 	}
 	
 	public void
-	setTrackerUrl(
+	setTrackerURL(
 		URL		url )
 	{
-		Debug.out( "setTrackerURL not supported for DHT" );
+		Debug.out( "Not implemented" );
 	}
 		
+	public void 
+	setTrackerURLs(
+		TOTorrentAnnounceURLSet[] 	sets ) 
+	{
+		Debug.out( "Not implemented" );
+	}
+	
 	public void
 	resetTrackerUrl(
 		boolean	shuffle )
@@ -297,7 +312,7 @@ TRTrackerDHTAnnouncerImpl
 									(short)0 );
 			}
 			
-			addToTrackerCache( peers);
+			helper.addToTrackerCache( peers);
 		
 			tracker_status_str = MessageText.getString("PeerManager.status.ok");
 
@@ -306,7 +321,7 @@ TRTrackerDHTAnnouncerImpl
 		
 		last_response = response;
 				
-		listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+		helper.informResponse( response );
 	}
 	
 	protected void
@@ -314,18 +329,52 @@ TRTrackerDHTAnnouncerImpl
 	{
 		if ( last_response.getStatus() != TRTrackerAnnouncerResponse.ST_ONLINE ){
 			
-		     TRTrackerAnnouncerResponsePeer[]	cached_peers = getPeersFromCache(100);
+		     TRTrackerAnnouncerResponsePeer[]	cached_peers = helper.getPeersFromCache(100);
 
 		     if ( cached_peers.length > 0 ){
 		     	
 		     	last_response.setPeers( cached_peers );
 		     	
-				listeners.dispatch( LDT_TRACKER_RESPONSE, last_response );
+				helper.informResponse( last_response );
 		     }
 		}
 	}
 	
 	public void 
+	addListener(
+		TRTrackerAnnouncerListener l )
+	{
+		helper.addListener( l );
+	}
+	
+	public void 
+	removeListener(
+		TRTrackerAnnouncerListener l )
+	{
+		helper.removeListener( l );
+	}
+	
+	public void 
+	setTrackerResponseCache(
+		Map map	)
+	{
+		helper.setTrackerResponseCache( map );
+	}
+	
+	public void 
+	removeFromTrackerResponseCache(
+		String ip, int tcpPort) 
+	{
+		helper.removeFromTrackerResponseCache( ip, tcpPort );
+	}
+	
+	public Map 
+	getTrackerResponseCache() 
+	{
+		return( helper.getTrackerResponseCache());
+	}
+	
+	public void 
 	generateEvidence(
 		IndentWriter writer )
 	{
diff --git a/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java b/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java
index 0782442..0141b2b 100644
--- a/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java
+++ b/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java
@@ -82,7 +82,7 @@ TRNonBlockingServer
 
 	private VirtualServerChannelSelector accept_server;
 	
-	private boolean immediate_close;
+	private boolean immediate_close = COConfigurationManager.getBooleanParameter( "Tracker TCP NonBlocking Immediate Close" );
 	
 	private volatile boolean	closed;
 	
diff --git a/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java b/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java
index e95dd2b..98a4485 100644
--- a/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java
+++ b/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java
@@ -31,6 +31,7 @@ import java.net.*;
 import java.io.*;
 
 import org.gudy.azureus2.core3.config.*;
+import org.gudy.azureus2.core3.tracker.client.impl.TRTrackerAnnouncerImpl;
 import org.gudy.azureus2.core3.tracker.client.impl.bt.TRTrackerBTAnnouncerImpl;
 import org.gudy.azureus2.core3.tracker.host.TRHost;
 import org.gudy.azureus2.core3.util.AENetworkClassifier;
@@ -631,7 +632,7 @@ TRTrackerUtils
 		Map		map1,
 		Map		map2 )
 	{
-		return( TRTrackerBTAnnouncerImpl.mergeResponseCache( map1, map2 ));
+		return( TRTrackerAnnouncerImpl.mergeResponseCache( map1, map2 ));
 	}
 		
  	public static String
diff --git a/org/gudy/azureus2/core3/util/AEDiagnostics.java b/org/gudy/azureus2/core3/util/AEDiagnostics.java
index b398dd0..770cafc 100644
--- a/org/gudy/azureus2/core3/util/AEDiagnostics.java
+++ b/org/gudy/azureus2/core3/util/AEDiagnostics.java
@@ -30,8 +30,10 @@ import org.gudy.azureus2.platform.PlatformManager;
 import org.gudy.azureus2.platform.PlatformManagerCapabilities;
 import org.gudy.azureus2.platform.PlatformManagerFactory;
 
+import com.aelitis.azureus.core.util.AEThreadMonitor;
 import com.aelitis.azureus.core.util.Java15Utils;
 
+
 /**
  * @author parg
  *
@@ -121,9 +123,7 @@ AEDiagnostics
 	protected static boolean	loggers_enabled;
 	
 	private static List		evidence_generators	= new ArrayList();
-	
-	private static boolean load_15_tried;
-	
+		
 	public static synchronized void
 	startup(
 		boolean	_enable_pending )
@@ -138,14 +138,18 @@ AEDiagnostics
 		enable_pending_writes = _enable_pending;
 		
 		try{
-			// Minimize risk of loading to much when in transitory startup mode
+				// Minimize risk of loading to much when in transitory startup mode
+			
 			boolean transitoryStartup = System.getProperty("transitory.startup", "0").equals("1");
-			if (transitoryStartup) {
-				// no vivaldi and Thread monitor for you!
-				load_15_tried = true;
-				// no xxx_?.log logging for you!
+			
+			if ( transitoryStartup ){
+				
+					// no xxx_?.log logging for you!
+				
 				loggers_enabled = false;
-				// skip tidy check and more!
+				
+					// skip tidy check and more!
+				
 				return;
 			}
 
@@ -167,6 +171,11 @@ AEDiagnostics
 						logging_enabled = COConfigurationManager.getBooleanParameter( "Logger.Enabled" );
 						
 						loggers_enabled = logging_enabled && COConfigurationManager.getBooleanParameter( "Logger.DebugFiles.Enabled");
+						
+						if ( !loggers_enabled ){
+							
+							loggers_enabled = Constants.IS_CVS_VERSION || COConfigurationManager.getBooleanParameter( "Logger.DebugFiles.Enabled.Force" );
+						}
 					}
 				});
 			
@@ -229,6 +238,9 @@ AEDiagnostics
 				
 				debug_dir.mkdir();
 			}
+			
+			AEThreadMonitor.initialise();
+			
 		}catch( Throwable e ){
 			
 				// with webui we don't have the file stuff so this fails with class not found
@@ -240,43 +252,9 @@ AEDiagnostics
 		}finally{
 			
 			startup_complete	= true;
-			
-			load15Stuff();
 		}
 	}
-	
-	protected static void
-	load15Stuff()
-	{
-		if ( load_15_tried ){
-			
-			return;
-		}
 		
-		load_15_tried = true;
-		
-		// pull in the JDK1.5 monitoring stuff if present
-			
-		try{
-			Class c = Class.forName( "com.aelitis.azureus.jdk15.Java15Initialiser" );
-					
-			if ( c != null ){
-				
-				Method m = c.getDeclaredMethod( "getUtilsProvider", new Class[0] );
-				
-				Java15Utils.Java15UtilsProvider provider = (Java15Utils.Java15UtilsProvider)m.invoke( null, new Object[0] );
-				
-				if ( provider != null ){
-					
-					 Java15Utils.setProvider( provider );
-				}
-			}
-			// System.out.println( "**** AEThread debug on ****" );
-
-		}catch( Throwable e ){
-		}
-	}
-	
 	public static void
 	dumpThreads()
 	{
diff --git a/org/gudy/azureus2/core3/util/Constants.java b/org/gudy/azureus2/core3/util/Constants.java
index 4ba8552..55c5267 100644
--- a/org/gudy/azureus2/core3/util/Constants.java
+++ b/org/gudy/azureus2/core3/util/Constants.java
@@ -85,8 +85,8 @@ Constants
   
   public static String APP_NAME = "Vuze";
   public static final String AZUREUS_NAME	  = "Azureus";
-  public static final String AZUREUS_VERSION  = "4.3.0.0";  //4.3.0.1_CVS
-  public static final byte[] VERSION_ID       = ("-" + "AZ" + "4300" + "-").getBytes();  //MUST be 8 chars long!
+  public static final String AZUREUS_VERSION  = "4.3.0.6";  //4.3.0.7_CVS
+  public static final byte[] VERSION_ID       = ("-" + "AZ" + "4306" + "-").getBytes();  //MUST be 8 chars long!
 
   private static final boolean FORCE_NON_CVS = System.getProperty( "az.force.noncvs", "0" ).equals( "1" );
   
diff --git a/org/gudy/azureus2/core3/util/FileUtil.java b/org/gudy/azureus2/core3/util/FileUtil.java
index 902701f..bdbe10d 100644
--- a/org/gudy/azureus2/core3/util/FileUtil.java
+++ b/org/gudy/azureus2/core3/util/FileUtil.java
@@ -32,7 +32,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.gudy.azureus2.core3.config.COConfigurationManager;
-import org.gudy.azureus2.core3.logging.LogAlert;
 import org.gudy.azureus2.core3.logging.LogEvent;
 import org.gudy.azureus2.core3.logging.LogIDs;
 import org.gudy.azureus2.core3.logging.Logger;
@@ -508,12 +507,7 @@ public class FileUtil {
 						  
 						  if ( !file.delete()){
 							  
-							  Logger.log(
-								 new LogAlert(
-										 LogAlert.UNREPEATABLE, 
-										 LogAlert.AT_ERROR,
-										 "Save of '" + file_name + "' fails - couldn't delete " + file.getAbsolutePath()));
- 
+							  Debug.out( "Save of '" + file_name + "' fails - couldn't delete " + file.getAbsolutePath());
 						  }
 					  }
 					  
@@ -523,11 +517,7 @@ public class FileUtil {
 						  
 					  }else{
 						  
-						  Logger.log(
-							 new LogAlert(
-									 LogAlert.UNREPEATABLE, 
-									 LogAlert.AT_ERROR,
-									 "Save of '" + file_name + "' fails - couldn't rename " + temp.getAbsolutePath() + " to " + file.getAbsolutePath()));
+						 Debug.out( "Save of '" + file_name + "' fails - couldn't rename " + temp.getAbsolutePath() + " to " + file.getAbsolutePath());
 
 					  }
 				  }
@@ -536,8 +526,7 @@ public class FileUtil {
 
 			  }catch( Throwable e ){
 				  
-				  Logger.log(new LogAlert(LogAlert.UNREPEATABLE, "Save of '"
-						  + file_name + "' fails", e));
+				  Debug.out( "Save of '" + file_name + "' fails", e );
 
 				  return( false );
 				  
@@ -549,8 +538,8 @@ public class FileUtil {
 						  baos.close();
 					  }
 				  }catch( Exception e){
-					  Logger.log(new LogAlert(LogAlert.UNREPEATABLE, "Save of '"
-							  + file_name + "' fails", e)); 
+					  
+					  Debug.out( "Save of '" + file_name + "' fails", e ); 
 					  
 					  return( false );
 				  }
@@ -653,9 +642,7 @@ public class FileUtil {
  		 		
 	 		if ( res != null ){
 	 			
-	 			Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_WARNING,
-						"Backup file '" + backup_file
-								+ "' has been used for recovery purposes"));
+	 			Debug.out( "Backup file '" + backup_file + "' has been used for recovery purposes" );
 				
 					// rewrite the good data, don't use backups here as we want to
 					// leave the original backup in place for the moment
@@ -708,9 +695,8 @@ public class FileUtil {
 	  				res = readResilientFile( file_name, parent_dir, file_name, 0, true, intern_keys );
 	  				
 	  				if ( res != null ){
-	  					Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_WARNING,
-								"File '" + file_name + "' has been partially recovered, "
-										+ "information may have been lost!"));
+	  					
+	  					Debug.out( "File '" + file_name + "' has been partially recovered, information may have been lost!" );
 	  				}
 	  			}
 	  			
@@ -759,10 +745,8 @@ public class FileUtil {
   					
 	  				if ( fail_count == 1 ){
 	  					
-	  					// we only alert the user if at least one file was found and failed
-	  					// otherwise it could be start of day when neither file exists yet
-	  					Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_ERROR,
-								"Load of '" + original_file_name + "' fails, no usable file or backup"));
+	  					Debug.out( "Load of '" + original_file_name + "' fails, no usable file or backup" );
+	  					
 	  				}else{
 	  					// drop this log, it doesn't really help to inform about the failure to 
 	  					// find a .saving file
@@ -826,9 +810,7 @@ public class FileUtil {
 	    	
 	    	if ( using_backup && !recovery_mode ){
   		
-	    		Logger.log(
-	    				new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_WARNING,
-						"Load of '" + original_file_name + "' had to revert to backup file")); 
+	    		Debug.out( "Load of '" + original_file_name + "' had to revert to backup file" ); 
 	    	}
 	    	
 	    	return( res );
@@ -887,8 +869,8 @@ public class FileUtil {
 	    	if ( using_backup ){
 		
 	    		if ( !recovery_mode ){
-	    			Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_ERROR,
-							"Load of '" + original_file_name + "' fails, no usable file or backup")); 
+	    			
+	    			Debug.out( "Load of '" + original_file_name + "' fails, no usable file or backup" ); 
 	    		}
 	    			
 	    		return( null );
@@ -1396,10 +1378,8 @@ public class FileUtil {
     ) {
     
     	if ( !from_file.exists()){
-    		Logger
-					.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
-							"renameFile: source file '" + from_file
-									+ "' doesn't exist, failing"));
+    		
+    		Debug.out( "renameFile: source file '" + from_file + "' doesn't exist, failing" );
     		
     		return( false );
     	}
@@ -1408,8 +1388,8 @@ public class FileUtil {
          * If the destination exists, we only fail if requested.
          */
         if (to_file.exists() && (fail_on_existing_directory || from_file.isFile() || to_file.isFile())) {
-            Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
-                    "renameFile: target file '" + to_file + "' already exists, failing"));
+            
+        	Debug.out( "renameFile: target file '" + to_file + "' already exists, failing" );
 
             return( false );
         }
@@ -1449,9 +1429,8 @@ public class FileUtil {
     				}
     			}catch( Throwable e ){
     				
-    				Logger.log(new LogAlert(LogAlert.REPEATABLE,
-							"renameFile: failed to rename file '" + ff.toString() + "' to '"
-									+ tf.toString() + "'", e));
+    				Debug.out( "renameFile: failed to rename file '" + ff.toString() + "' to '"
+									+ tf.toString() + "'", e );
 
     				break;
     			}
@@ -1465,9 +1444,8 @@ public class FileUtil {
     				// This might be important or not. We'll make it a debug message if we had a filter,
     				// or log it normally otherwise.
     				if (file_filter == null) {
-    					Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
-							"renameFile: files remain in '" + from_file.toString()
-									+ "', not deleting"));
+    					Debug.out( "renameFile: files remain in '" + from_file.toString()
+									+ "', not deleting");
     				}
     				else {
     					/* Should we log this? How should we log this? */
@@ -1477,8 +1455,7 @@ public class FileUtil {
     			}else{
     				
     				if ( !from_file.delete()){
-    					Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
-								"renameFile: failed to delete '" + from_file.toString() + "'"));
+    					Debug.out( "renameFile: failed to delete '" + from_file.toString() + "'" );
     				}
     			}
     			
@@ -1495,14 +1472,12 @@ public class FileUtil {
     			try{
     				// null - We don't want to use the file filter, it only refers to source paths.
                     if ( !renameFile( tf, ff, false, null )){
-    					Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
-								"renameFile: recovery - failed to move file '" + tf.toString()
-										+ "' to '" + ff.toString() + "'"));
+    					Debug.out( "renameFile: recovery - failed to move file '" + tf.toString()
+										+ "' to '" + ff.toString() + "'" );
     				}
     			}catch( Throwable e ){
-    				Logger.log(new LogAlert(LogAlert.REPEATABLE,
-							"renameFile: recovery - failed to move file '" + tf.toString()
-									+ "' to '" + ff.toString() + "'", e));
+    				Debug.out("renameFile: recovery - failed to move file '" + tf.toString()
+									+ "' to '" + ff.toString() + "'", e);
    	   			    				
     			}
       		}
@@ -1552,9 +1527,8 @@ public class FileUtil {
 					fis = null;
 					
 					if ( !from_file.delete()){
-						Logger.log(new LogAlert(LogAlert.REPEATABLE,
-								LogAlert.AT_ERROR, "renameFile: failed to delete '"
-										+ from_file.toString() + "'"));
+						Debug.out( "renameFile: failed to delete '"
+										+ from_file.toString() + "'" );
 						
 						throw( new Exception( "Failed to delete '" + from_file.toString() + "'"));
 					}
@@ -1565,9 +1539,8 @@ public class FileUtil {
 					
 				}catch( Throwable e ){		
 	
-					Logger.log(new LogAlert(LogAlert.REPEATABLE,
-							"renameFile: failed to rename '" + from_file.toString()
-									+ "' to '" + to_file.toString() + "'", e));
+					Debug.out( "renameFile: failed to rename '" + from_file.toString()
+									+ "' to '" + to_file.toString() + "'", e );
 					
 					return( false );
 					
@@ -1648,9 +1621,10 @@ public class FileUtil {
     
 	public static boolean
 	deleteWithRecycle(
-		File		file )
+		File		file,
+		boolean		force_no_recycle )
 	{
-		if ( COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" )){
+		if ( COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" ) && !force_no_recycle ){
 			
 			try{
 			    final PlatformManager	platform  = PlatformManagerFactory.getPlatformManager();
diff --git a/org/gudy/azureus2/core3/util/TorrentUtils.java b/org/gudy/azureus2/core3/util/TorrentUtils.java
index 7847d6f..4168087 100644
--- a/org/gudy/azureus2/core3/util/TorrentUtils.java
+++ b/org/gudy/azureus2/core3/util/TorrentUtils.java
@@ -53,9 +53,12 @@ TorrentUtils
 	private static final String		TORRENT_AZ_PROP_PLUGINS					= "plugins";
 	
 	public static final String		TORRENT_AZ_PROP_OBTAINED_FROM			= "obtained_from";
+	public static final String		TORRENT_AZ_PROP_PEER_CACHE				= "peer_cache";
+	public static final String		TORRENT_AZ_PROP_PEER_CACHE_VALID		= "peer_cache_valid";
 	
 	private static final String		MEM_ONLY_TORRENT_PATH		= "?/\\!:mem_only:!\\/?";
 	
+	private static final long		PC_MARKER = RandomUtils.nextLong();
 	
 	private static final List	created_torrents;
 	private static final Set	created_torrents_set;
@@ -399,9 +402,10 @@ TorrentUtils
 	
 	public static void
 	delete(
-		File 		torrent_file )
+		File 		torrent_file,
+		boolean		force_no_recycle )
 	{
-		if ( !FileUtil.deleteWithRecycle( torrent_file )){
+		if ( !FileUtil.deleteWithRecycle( torrent_file, force_no_recycle )){
 			
     		Debug.out( "TorrentUtils::delete: failed to delete '" + torrent_file + "'" );
     	}
@@ -1106,6 +1110,61 @@ TorrentUtils
 	}
 	
 	public static void
+	setPeerCache(
+		TOTorrent		torrent,
+		Map				pc )
+	{
+		Map	m = getAzureusPrivateProperties( torrent );
+			
+		try{
+			m.put( TORRENT_AZ_PROP_PEER_CACHE, pc );
+						
+		}catch( Throwable e ){
+			
+			Debug.printStackTrace(e);
+		}
+	}
+	
+	public static void
+	setPeerCacheValid(
+		TOTorrent		torrent )
+	{
+		Map	m = getAzureusPrivateProperties( torrent );
+			
+		try{
+			m.put( TORRENT_AZ_PROP_PEER_CACHE_VALID, new Long( PC_MARKER ));
+						
+		}catch( Throwable e ){
+			
+			Debug.printStackTrace(e);
+		}
+	}
+	
+	public static Map
+	getPeerCache(
+		TOTorrent		torrent )
+	{
+		try{
+			Map	m = getAzureusPrivateProperties( torrent );
+	
+			Long value = (Long)m.get( TORRENT_AZ_PROP_PEER_CACHE_VALID );
+			
+			if ( value != null && value == PC_MARKER ){
+			
+				Map	pc = (Map)m.get( TORRENT_AZ_PROP_PEER_CACHE );
+	
+				return( pc );
+			}
+			
+		}catch( Throwable e ){
+			
+			Debug.out( e );
+		}
+		
+		return( null );
+	}
+	
+	public static void
 	setFlag(
 		TOTorrent		torrent,
 		int				flag,
@@ -2472,14 +2531,7 @@ TorrentUtils
 			}
 		}
 	}
-	
-	public static String
-	getMagnetURI(
-		byte[]		hash )
-	{
-		return( "magnet:?xt=urn:btih:" + Base32.encode( hash ));
-	}
-	
+		
 	private static void
 	fireAttributeListener(
 		TOTorrent		torrent,	
diff --git a/org/gudy/azureus2/core3/util/UrlUtils.java b/org/gudy/azureus2/core3/util/UrlUtils.java
index 3482848..1ae646e 100644
--- a/org/gudy/azureus2/core3/util/UrlUtils.java
+++ b/org/gudy/azureus2/core3/util/UrlUtils.java
@@ -68,6 +68,69 @@ public class UrlUtils
 		new String[] { "'", "&apos;" },
 	};
 
+	public static String
+	getMagnetURI(
+		byte[]		hash )
+	{
+		return( "magnet:?xt=urn:btih:" + Base32.encode( hash ));
+	}
+
+		/**
+		 * returns magnet uri if input is base 32 or base 16 encoded sha1 hash, null otherwise
+		 * @param base_hash
+		 * @return
+		 */
+	
+	public static String
+	normaliseMagnetURI(
+		String		base_hash )
+	{
+		byte[]	hash = decodeSHA1Hash( base_hash );
+		
+		if ( hash != null ){
+			
+			return( getMagnetURI( hash ));
+		}
+		
+		return( null );
+	}
+	
+	public static byte[]
+	decodeSHA1Hash(
+		String	str )
+	{
+		if ( str == null ){
+			
+			return( null );
+		}
+		
+		str = str.trim();
+		
+		byte[] hash = null;
+		
+		try{
+			if ( str.length() == 40 ){
+				
+				hash = ByteFormatter.decodeString( str );
+				
+			}else if ( str.length() == 32 ){
+				
+				hash = Base32.decode( str );
+			}
+		}catch( Throwable e ){
+		}
+		
+		if ( hash != null ){
+			
+			if ( hash.length != 20 ){
+								
+				hash = null;
+			}
+		}
+		
+		return( hash );
+	}
+	
 	/**
 	 * test string for possibility that it's an URL.  Considers 40 byte hex 
 	 * strings as URLs
@@ -335,81 +398,17 @@ public class UrlUtils
 	
 		throws IOException
 	{
-		if ( Java15Utils.isAvailable()){
-			
-			if ( connect_timeout != -1 ){
-				
-				Java15Utils.setConnectTimeout( connection, (int)connect_timeout );	
-			}
-			
-			if ( read_timeout != -1 ){
-				
-				Java15Utils.setReadTimeout( connection, (int)read_timeout );	
-			}
-			
-			connection.connect();
-			
-		}else{
-			
-				// TODO: No read timeout support here yet...
-			
-			final AESemaphore sem = new AESemaphore( "URLUtils:cwt" );
-			
-			final Throwable[] res = { null };
-			
-			//long	start = SystemTime.getMonotonousTime();
-			
-			if ( connect_pool.isFull()){
-				
-				Debug.out( "Connect pool is full, forcing timeout" );
+		if ( connect_timeout != -1 ){
 				
-				throw( new IOException( "Timeout" ));
-			}
-			
-			connect_pool.run(
-				new AERunnable()
-				{
-					public void
-					runSupport()
-					{
-						try{
-							connection.connect();
-							
-						}catch( Throwable e ){
-							
-							res[0] = e;
-							
-						}finally{
-							
-							sem.release();
-						}
-					}
-				});
-			
-			boolean ok = sem.reserve( connect_timeout );
-			
-			//long	duration = SystemTime.getMonotonousTime() - start;
-			
-			//System.out.println( connection.getURL() + ": time=" + duration + ", ok=" + ok );
+			Java15Utils.setConnectTimeout( connection, (int)connect_timeout );	
+		}
 			
-			if ( ok ){
-	
-				Throwable error = res[0];
+		if ( read_timeout != -1 ){
 				
-				if ( error != null ){
-					
-					if ( error instanceof IOException ){
-						
-						throw((IOException)error);
-					}
-					
-					throw( new IOException( Debug.getNestedExceptionMessage( error )));
-				}
-			}else{
-				
-				throw( new IOException( "Timeout" ));
-			}
+			Java15Utils.setReadTimeout( connection, (int)read_timeout );	
 		}
+			
+		connection.connect();
 	}
 	
 	private static String	last_headers = COConfigurationManager.getStringParameter( "metasearch.web.last.headers", null );
diff --git a/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java b/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java
index b9d61a4..0945d0f 100644
--- a/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java
+++ b/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java
@@ -35,7 +35,11 @@ Handler
 {
 	public URLConnection 
 	openConnection(URL u)
-	{			
-		return( new MagnetConnection( u ));
+	{		
+			// some anti-virus apps blocking loopback connection we initially used
+			// in MagnetConnection so created variant based on direct communication to
+			// the magnet handler
+		
+		return( new MagnetConnection2( u ));
 	}
 }
diff --git a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
index f4f64dd..7dfec27 100644
--- a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
+++ b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
@@ -42,11 +42,11 @@ public class
 MagnetConnection
 	extends HttpURLConnection
 {
-	protected Socket	socket;
+	private Socket	socket;
 	
-	protected static final String	NL			= "\015\012";
+	private static final String	NL			= "\r\n";
 
-	protected String	status = "";
+	private String	status = "";
 	
 	protected
 	MagnetConnection(
@@ -62,7 +62,7 @@ MagnetConnection
 	{
 		socket = new Socket( "127.0.0.1", MagnetURIHandler.getSingleton().getPort());
 						
-		String	get = "GET " + "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0\r\n";
+		String	get = "GET " + "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0" + NL + NL;
 		
 		socket.getOutputStream().write( get.getBytes());
 		
diff --git a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection2.java
similarity index 61%
copy from org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
copy to org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection2.java
index f4f64dd..c7287ba 100644
--- a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
+++ b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection2.java
@@ -22,11 +22,15 @@
 
 package org.gudy.azureus2.core3.util.protocol.magnet;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
 import java.net.HttpURLConnection;
-import java.net.Socket;
 import java.net.URL;
+import java.util.*;
 
 
 import org.gudy.azureus2.core3.util.Debug;
@@ -39,17 +43,18 @@ import com.aelitis.net.magneturi.MagnetURIHandler;
  */
 
 public class 
-MagnetConnection
+MagnetConnection2
 	extends HttpURLConnection
 {
-	protected Socket	socket;
+	private static final String	NL			= "\r\n";
 	
-	protected static final String	NL			= "\015\012";
-
-	protected String	status = "";
+	private OutputStream 	output_stream;
+	private InputStream 	input_stream;
+	
+	private LinkedList<String>	status_list = new LinkedList<String>();
 	
 	protected
-	MagnetConnection(
+	MagnetConnection2(
 		URL		_url )
 	{
 		super( _url );
@@ -59,23 +64,25 @@ MagnetConnection
 	connect()
 		throws IOException
 		
-	{
-		socket = new Socket( "127.0.0.1", MagnetURIHandler.getSingleton().getPort());
-						
-		String	get = "GET " + "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0\r\n";
+	{				
+		String	get = "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0" + NL + NL;
 		
-		socket.getOutputStream().write( get.getBytes());
+		PipedOutputStream 	pos = new PipedOutputStream();
+		PipedInputStream 	pis = new PipedInputStream();
 		
-		socket.getOutputStream().flush();
+		pis.connect( pos );
+		
+		input_stream	= pis;
+		output_stream 	= pos;
+		
+		MagnetURIHandler.getSingleton().process( get, new ByteArrayInputStream(new byte[0]), pos );
 	}
 	
 	public InputStream
 	getInputStream()
 	
 		throws IOException
-	{
-		InputStream	is = socket.getInputStream();
-		
+	{		
 		String	line = "";
 		
 		byte[]	buffer = new byte[1];
@@ -85,7 +92,7 @@ MagnetConnection
 		
 		while(true){
 		
-			int	len = is.read( buffer );
+			int	len = input_stream.read( buffer );
 			
 			if ( len == -1 ){
 				
@@ -112,8 +119,20 @@ MagnetConnection
 					line = line.substring( 9 );
 										
 					line = line.trim();
-					
-					status = Character.toUpperCase( line.charAt(0)) + line.substring(1);
+										
+					synchronized( status_list ){
+		
+						String str = Character.toUpperCase( line.charAt(0)) + line.substring(1);
+						
+						if ( status_list.size() == 0 ){
+							
+							status_list.addLast( str );
+							
+						}else if ( !status_list.getLast().equals( str )){
+							
+							status_list.addLast( str );
+						}
+					}
 				}
 				
 				line			= "";
@@ -121,7 +140,7 @@ MagnetConnection
 			}
 		}
 		
-		return( is );
+		return( input_stream );
 	}
 	
 	public int
@@ -133,7 +152,21 @@ MagnetConnection
 	public String
 	getResponseMessage()
 	{
-		return( status );
+		synchronized( status_list ){
+
+			if ( status_list.size() == 0 ){
+				
+				return( "" );
+				
+			}else if ( status_list.size() == 1 ){
+				
+				return( status_list.get( 0 ));
+				
+			}else{
+				
+				return( status_list.removeFirst());
+			}
+		}
 	}
 	
 	public boolean
@@ -146,7 +179,15 @@ MagnetConnection
 	disconnect()
 	{
 		try{
-			socket.close();
+			output_stream.close();
+			
+		}catch( Throwable e ){
+			
+			Debug.printStackTrace(e);
+		}
+		
+		try{
+			input_stream.close();
 			
 		}catch( Throwable e ){
 			
diff --git a/org/gudy/azureus2/internat/MessagesBundle.properties b/org/gudy/azureus2/internat/MessagesBundle.properties
index 84327e7..28c236d 100644
--- a/org/gudy/azureus2/internat/MessagesBundle.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle.properties
@@ -122,6 +122,7 @@ PeersView.pieces=Pieces
 PeersView.%=%
 PeersView.downloadspeed=Down Speed
 PeersView.download=Down
+PeersView.download.info=Your overall download from the peer.
 PeersView.I2=I (Interesting for the peer)
 PeersView.I2.info=Is the peer interested in what you have?
 PeersView.C2=C (Choking the peer)
@@ -760,7 +761,7 @@ health.explain.blue=when seeding, it means that you're not yet connected to any
 health.explain.yellow=means that the tracker is ok, you're connected to peers, but you don't have any remote connection.\nYou may have a NAT problem if your torrents stay on yellow status all the time
 health.explain.green=means that everything is going fine.
 ConfigView.section.style.alwaysRefreshMyTorrents=Always refresh My Torrents
-ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=This option will refresh the My Torrents view even if not displayed (usefull for some mirc plugins)
+ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=This option will refresh the My Torrents view even if not displayed (useful for some mirc plugins)
 #
 #2.0.7.0
 #
@@ -835,7 +836,7 @@ ConfigView.label.disconnetseed.tooltip=When seeding a torrent, disconnect any cl
 ConfigView.label.ignoreCase=Ignore Case
 ConfigView.label.ignoreSeeds=Ignore torrents with at least
 ConfigView.label.importdirectory=Import Directory
-ConfigView.label.minPeersToBoostNoSeeds.tooltip=Any torrents with no seeds and having less peers than you specify\nwill be towards the bottom of the queue.
+ConfigView.label.minPeersToBoostNoSeeds.tooltip=Any torrents with no seeds and having less peers than you specify\nwill be moved towards the bottom of the queue.
 ConfigView.label.minPeersToBoostNoSeeds=Lower Seeding Rank for torrents with no seeds and less than
 ConfigView.label.minSeedingTime.tooltip=Seeding Ranks can fluctuate often in a short period time, sometimes causing the torrent to automatically start, only to be stopped & queued immediately afterwards.\nThis alleviates the problem by forcing the torrent to stay seeding for a given period of time.  You can still stop it manually if you want.
 ConfigView.label.minSeedingTime=Minimum seeding time in seconds
@@ -868,13 +869,13 @@ ConfigView.label.seeding.firstPriority.seedingMinutes=An elapsed time since chan
 ConfigView.label.seeding.firstPriority.DLMinutes=An elapsed time since the start of downloading
 ConfigView.label.seeding.numPeersAsFullCopy.tooltip=By pretending there is 1 full copy per X peers, you reduce the rank of torrents with high peer counts.\nMost likely, torrents with high peer counts also have high traffic.\nThis does not change any '# of seeds' displays.
 ConfigView.label.seeding.numPeersAsFullCopy=Pretend there's 1 full copy for every\n(0 : No Pretending)
-ConfigView.label.seeding.preferLargerSwarms.tooltip=If you are mainly seeding torrents with peers that are "stuck", prefering larger swarms makes sense\nWhen you are mainly seeding torrents with high availability, prefering smaller swarms makes sense.
+ConfigView.label.seeding.preferLargerSwarms.tooltip=If you are mainly seeding torrents with peers that are "stuck", preferring larger swarms makes sense\nWhen you are mainly seeding torrents with high availability, preferring smaller swarms makes sense.
 ConfigView.label.seeding.preferLargerSwarms=When torrents have the same rank, prefer larger swarms
 ConfigView.label.seeding.rankType.none.tooltip=Order based on # column
 ConfigView.label.seeding.rankType.none=None
 ConfigView.label.seeding.rankType.peer.tooltip=more peers and fewer seeds = higher rank\nThis ranking minimizes the number of torrents that need to be kept active to maximize the upload
 ConfigView.label.seeding.rankType.peer=Weighted Peer Count
-ConfigView.label.seeding.rankType.peerSeed.options=Seeds:Peers Ratio Options
+ConfigView.label.seeding.rankType.peerSeed.options=Peers:Seeds Ratio Options
 ConfigView.label.seeding.rankType.peerSeed.tooltip=Higher Ratio = Higher Rank
 ConfigView.label.seeding.rankType.peerSeed=Peers:Seed Ratio
 ConfigView.label.seeding.rankType.seed.fallback=Fallback to Peers:Seed Ratio after\n(0 : Never Fallback)
@@ -963,7 +964,7 @@ GeneralView.label.in_swarm=in swarm
 ManagerItem.initializing=Initializing
 AlertMessageBox.error=Error
 AlertMessageBox.warning=Warning
-AlertMessageBox.comment=Information
+AlertMessageBox.comment=Comment
 AlertMessageBox.information=Information
 AlertMessageBox.unread=You have unread alert messages - click here to display them.
 SharedPortServer.alert.selectorfailed=Failed to establish listener for incoming data.\nCheck firewall settings are permitting java(w).exe to act as a 'server'
@@ -1234,8 +1235,6 @@ MyTrackerView.badnat.info=Seeds/Peers that have failed a NAT check, if enabled
 ConfigView.section.tracker.natchecktimeout=Check timeout (secs)
 ConfigView.section.file.perf.cache.enable=Enable disk cache
 ConfigView.section.file.perf.cache.size=Size of cache in %1
-#Removed
-#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=T&ransfers
 MainWindow.menu.transfers.startalltransfers=St&art All
 MainWindow.menu.transfers.stopalltransfers=St&op All
@@ -1841,9 +1840,9 @@ azinstancehandler.alert.portclash=Port clash detected on LAN: %1 already in use
 ConfigView.section.transfer.lan=LAN
 ConfigView.section.transfer.lan.tooltip=LAN-specific Settings
 ConfigView.section.transfer.lan.uploadrate=KB/s LAN max upload speed [0: unlimited]
-ConfigView.section.transfer.lan.uploadrate.tooltip=Peers connections within the same internal LAN have a separete upload rate limit.
+ConfigView.section.transfer.lan.uploadrate.tooltip=Peers connections within the same internal LAN have a separate upload rate limit.
 ConfigView.section.transfer.lan.downloadrate=KB/s LAN max download speed [0: unlimited]
-ConfigView.section.transfer.lan.downloadrate.tooltip=Peers connections within the same internal LAN have a separete download rate limit.
+ConfigView.section.transfer.lan.downloadrate.tooltip=Peers connections within the same internal LAN have a separate download rate limit.
 
 TorrentOptionsView.title.short=Options
 TorrentOptionsView.title.full=Options
@@ -1991,7 +1990,7 @@ TableColumn.header.date_added.info=Date the torrent was added
 
 ConfigView.section.file.hashchecking.smallestfirst=Recheck smallest downloads first
 
-platform.win32.baddll.info=Vuze has detected the presence of '%1'. This is part of '%2' and has been known to cause severe problems such as application crashes and high CPU usage. If you encounter these then please uninstall the software or configure it to not affect Azureus.
+platform.win32.baddll.info=Vuze has detected the presence of '%1'. This is part of '%2' and has been known to cause severe problems such as application crashes and high CPU usage. If you encounter these then please uninstall the software or configure it to not affect Vuze.
 platform.win32.baddll.niphk=Norman Anti-Virus
 platform.win32.baddll.nvappfilter=NVidia Firewall 
 platform.win32.baddll.netdog=Armor2net Personal Firewall 
@@ -2159,13 +2158,13 @@ ConfigView.label.openmytorrents=Open 'My Torrents' on startup
 ConfigView.label.open_transfer_bar_on_start=Open Transfer Bar on startup
 ConfigView.section.style.DNDalwaysInIncomplete=Always show torrents with 'Do Not Download' files in Incomplete section of My Torrents  
 
-OpenTorrentWindow.mb.noGlobalDestDir.title=Destination Directory
+OpenTorrentWindow.mb.noGlobalDestDir.title=Destination Directory not found
 OpenTorrentWindow.mb.noGlobalDestDir.text=The destination directory '%1' is invalid.
 OpenTorrentWindow.mb.noDestDir.title=Destination Directory not found
 OpenTorrentWindow.mb.noDestDir.text=The destination directory '%1' for torrent '%2' does not exist or is invalid.
-OpenTorrentWindow.mb.notValid.title=Open Torrent
+OpenTorrentWindow.mb.notValid.title=Open Torrent Failed
 OpenTorrentWindow.mb.notValid.text=Could not open torrent '%1'.  If you are opening in seeding mode, please make sure the torrent data files exist.
-OpenTorrentWindow.mb.notTorrent.title=Open Torrent
+OpenTorrentWindow.mb.notTorrent.title=Open Torrent Failed
 OpenTorrentWindow.mb.notTorrent.text=Could not open '%1'.  It doesn't appear to be a .torrent file.\n\nSome of the data received:\n%2
 
 ConfigView.label.pause.downloads.on.exit=Pause downloads on exit
@@ -2296,7 +2295,7 @@ SpeedTestWizard.finish.panel.max.download=Max download :
 SpeedTestWizard.finish.panel.enabled=enabled
 SpeedTestWizard.finish.panel.disabled=disabled
 
-SpeedTestWizard.abort.message.scheduled.in=test scheduled in ... %1 seconds"
+SpeedTestWizard.abort.message.scheduled.in=test scheduled in ... %1 seconds
 SpeedTestWizard.abort.message.unsupported.type=Unsupported test type!!!!
 SpeedTestWizard.abort.message.manual.abort=Manually aborted
 SpeedTestWizard.abort.message.scheduling.failed=Scheduling of the test failed
@@ -2357,12 +2356,7 @@ TableColumn.header.AzProduct=From
 TableColumn.header.MediaThumb=Media
 TableColumn.header.ProgressETA=Progress
 
-#TableColumn.header.size={MyTorrentsView.size}
-#TableColumn.header.up={MyTorrentsView.up}
-#TableColumn.header.date_added={MyTorrentsView.date_added}
-#TableColumn.header.name={MyTorrentsView.name}
 TableColumn.header.name.ext=File Type: %1
-#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
 TableColumn.header.DateCompleted={TableColumn.header.date_completed}
 
 v3.MainWindow.tab.home=Dashboard
@@ -2453,7 +2447,6 @@ splash.initializeUIElements=Initializing UI Elements
 
 ConfigView.section.transfer.autospeedbeta=Auto-Speed-Beta
 
-#
 ConfigView.section.ipfilter.peerblocking.group=Peer Blocking
 ConfigView.section.ipfilter.autoload.group=Auto Loading
 ConfigView.section.ipfilter.autoload.file=IP filter file to autoload
@@ -2687,20 +2680,12 @@ button.columnsetup.tooltip=Column Setup
 v3.activity.remove.title=Delete Notification
 v3.activity.remove.text=Are you sure you want to delete this Notification?\n%1
  
-#v3.MainWindow.menu.view.configuration=Preferences
-#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
-
 v3.MainWindow.menu.file.closewindow=Close
 v3.MainWindow.menu.file.closewindow.keybinding=Meta+W
 
 Menu.show.torrent.menu=Show the Torrents menu
 Menu.show.torrent.menu.tooltip=Shows the Torrents menu on the top application menu bar
 
-#v3.TorrentOptionsView.title.short=Preferences
-#v3.TorrentOptionsView.title.full=Preferences
-#v3.ConfigView.title.short=Preferences
-#v3.ConfigView.title.full=Preferences
- 
 Views.plugins.aznetstatus.title=Network Status
 
 plugin.aznetstatus.pingtarget=Ping/trace route target
@@ -3032,7 +3017,6 @@ Search.menu.engines=Templates
 
 Wizard.Subscription.title=Subscribe
 Wizard.Subscription.optin.title=Enable Subscriptions
-#what you've watched? Discover more with a single click...
 Wizard.Subscription.subscribe.title=Available Subscriptions
 Wizard.Subscription.create.title=Create New Subscription
 Button.search=Search
@@ -3146,7 +3130,7 @@ v3.MainWindow.menu.view.statusbar=Status Bar
 
 Subscription.menu.dirtyall=Mark All Results As Unread
 
-configureWizard.file.message3=Vuze will downloaded files in a specific folder, you can choose this folder here:
+configureWizard.file.message3=Vuze will download files in a specific folder, you can choose this folder here:
 
 v3.deleteContent.applyToAll=Apply action to all %1 selected entries
 
@@ -3217,7 +3201,7 @@ Pieces.column.#.info=Piece Number
 Peers.column.%=%
 Peers.column.%.info=Percentage of the torrent the peer has downloaded so far
 TableColumn.header.download.info=Amount of data received from the peer
-TableColumn.header.upload.info=Amount of data we have sent to the epeer
+TableColumn.header.upload.info=Amount of data we have sent to the peer
 TableColumn.header.downloadspeed.info=Rate at which we are are getting from the peer
 TableColumn.header.uploadspeed.info=Rate at which we are sending data to the peer
 TableColumn.header.lan.info=Flag indicating if the peer is on your LAN
@@ -3546,5 +3530,11 @@ ClientStats.column.name={TableColumn.header.name}
 MainWindow.menu.view.clientstats={ClientStats.title.full}
 
 Scrape.status.cached=Cached scrape
+network.ipv6.enable.support=Enable IPv6 support
+ConfigView.section.plugins.magnetplugin=Magnet URI Handler
+MagnetPlugin.use.lookup.service=Use the Vuze secondary lookup service if magnet lookup via DHT fails
+MagnetPlugin.report.secondarylookup=Trying secondary lookup service
+MagnetPlugin.report.secondarylookup.ok=Secondary lookup succeeded
+MagnetPlugin.report.secondarylookup.fail=Secondary lookup failed: no sources found
 
 #PLEASE LEAVE ME AT VERY BOTTOM!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties b/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties
index 8c006a4..c8dcbb3 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=\u0645\u0644\u0641 .torrent 
 Main.parameter.usage=Usage : java org.gudy.azureus2.cl.Main [parameters] "file.torrent" "save path" 
 Main.parameter.maxUploads=\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0645\u062a\u0648\u0627\u0641\u0642
@@ -325,7 +326,6 @@ MyTorrentsView.menu.removeand.deletedata=Delete Data
 MyTorrentsView.menu.removeand.deleteboth=Delete Both 
 deletedata.title=!!! Warning !!! 
 deletedata.message1=You are about to delete the DATA from :\n 
-deletedata.message2=\nAre you sure you want to proceed? 
 MainWindow.menu.file.configure=Configuration Wizard 
 configureWizard.title=Configuration Wizard 
 configureWizard.welcome.title=Welcome to the Vuze Configuration Wizard 
@@ -446,7 +446,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Tracker client poll interval (secs) 
 ConfigView.section.tracker.publishenable=Publish torrent details to "" 
 ConfigView.section.tracker.ip=External tracker IP address 
-MainWindow.menu.help.faq=FAQ 
 ConfigView.section.style.enableXPStyle=Enable XP style (needs restart) 
 IPChecker.external.service.dyndns.name=DynDNS 
 IPChecker.external.service.dyndns.url=http://www.dyndns.org/ 
@@ -482,11 +481,16 @@ splash.loadingImages=Loading Images
 splash.initializeGui=Initializing Main Window 
 splash.openViews=Opening Views 
 configureWizard.nat.tooManyPorts=Too many ports to test (9 max) 
-PeerSocket.unknown=Unknown 
 MyTorrentsView.menu.publish=Publish... 
 MyTrackerView.status.published=Published 
 MainWindow.menu.file.open.torrentnodefault=.torrent File (No default Save)
 ConfigView.section.file.decoder.label=Default torrent encoding when\nselection required
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
 ConfigView.section.style.reOrderDelay=Re Order tables every N GUI update(s)
 GeneralView.label.updatein.querying=querying...
 MyTorrentsView.menu.editTableColumns=Choose the columns to display
@@ -504,22 +508,18 @@ MyTorrentsView.menu.moveEnd=Bottom
 ConfigView.label.moveonlyusingdefaultsave=if in default data dir
 ConfigView.label.moveonlyusingdefaultsave.tooltip=Move only if the .torrent is in the default data dir
 MainWindow.menu.view.stats=Statistics
+#
+#2.0.7.0
+#
+#
+# 2.0.7.x
+#
 TableColumn.header.availability=\u0627\u0644\u062a\u0648\u0641\u0651\u0631
+#
+# > 2.0.8.0
+#
 ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details
 ConfigView.label.overrideip=\u062a\u062c\u0627\u0648\u0632 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0622\u064a \u0628\u064a \u0644\u0644\u0645\u062a\u0642\u0641\u0651\u064a\n - NAT \u0642\u062f \u062a\u062d\u062a\u0627\u062c\u0647 \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0633\u062a\u062e\u062f\u0645 
-# The remaining keys were not in MessagesBundle.properties
-configureWizard.nat.serverhigh=High Port 
-configureWizard.nat.serverlow=Low Port 
-SystemTray.menu.stopalldownloads=Stop All Downloads
-ConfigView.label.defaultTorrentPath=Torrent files directory 
-MyTorrentsView.menu.lockstartstop=Disable Seeding Start / Stop Rules 
-ConfigView.label.moveCompletedPath=Completed files directory 
-ConfigView.label.serverportshared=Use a single shared incoming port for all torrents
-ConfigView.label.stopRatio=Stop seeding when share ratio reaches 
-ConfigView.label.serverportrange=Incoming port range
-MainWindow.about.internet.featurerequests=\u0637\u0644\u0628 \u0645\u0645\u064a\u0632\u0627\u062a
-ConfigView.label.serverportlow=\u0627\u0644\u0645\u0646\u0641\u0630 \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062e\u0627\u062f\u0645
-MyTorrentsView.menu.lockpriority=Disable Auto-Priority 
-ConfigView.label.maxclients=\u0627\u0644\u0631\u0642\u0645 \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0644\u0643\u0644 torrent (0 : \u063a\u064a\u0631 \u0645\u062c\u062f\u0648\u062f) 
-ConfigView.label.serverporthigh=\u0627\u0644\u0645\u0646\u0641\u0630 \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u062e\u0627\u062f\u0645
-ConfigView.label.slowconnect=\u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0628\u0637\u0621 \u0644\u0644\u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0628\u0627\u0644\u0646\u0638\u064a\u0631\n - \u0644\u0644\u0630\u064a\u0646 \u064a\u0639\u0627\u0646\u0648\u0646 \u0645\u0646 \u0645\u0634\u0627\u0643\u0644 \u0641\u064a \u0641\u0635\u0644 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 
+# Used for peers which we can't determine.
+PeerSocket.unknown=Unknown 
+MainWindow.menu.help.faq=FAQ 
diff --git a/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties b/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties
index ac87d3c..a921c9e 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties
@@ -736,7 +736,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0422\u043e\u0432\u043
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Graphics Vertical Offset (GTK \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0430)
 security.certtruster.title=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430 \u0437\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442
 security.certtruster.intro=\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044a\u0442 \u0435 \u0438\u0437\u0434\u0430\u0434\u0435\u043d \u043e\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u0430 \u043a\u043e\u044f\u0442\u043e \u0441\u0435 \u043d\u044f\u043c\u0430 \u0434\u043e\u0432\u0435\u0440\u0438\u0435
 security.certtruster.resource=\u0420\u0435\u0441\u0443\u0440\u0441:
@@ -1962,13 +1961,8 @@ MainWindow.menu.view.iconbar=\u041b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\
 MyTorrentsView.menu.rename=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435
 MyTorrentsView.menu.rename.displayed=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e\u0442\u043e \u0438\u043c\u0435
 MyTorrentsView.menu.rename.save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u044a\u0442\u044f \u0437\u0430 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435
-MyTorrentsView.menu.rename.displayed_and_save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0432\u0435\u0442\u0435
 MyTorrentsView.menu.rename.displayed.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e\u0442\u043e \u0438\u043c\u0435
 MyTorrentsView.menu.rename.displayed.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.\n\u041f\u0440\u0438 \u043d\u0435\u0432\u044a\u0432\u0435\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u043e\u0442\u043e \u0438\u043c\u0435.
-MyTorrentsView.menu.rename.save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u044a\u0442\u044f \u0437\u0430 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435
-MyTorrentsView.menu.rename.save_path.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u043d\u0430 \u043f\u044a\u0442\u044f \u0437\u0430 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.\n\u041f\u0440\u0438 \u043d\u0435\u0432\u044a\u0432\u0435\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e\u0442\u043e \u0438\u043c\u0435 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.\n\u041f\u0440\u0438 \u043d\u0435\u0432\u044a\u0432\u0435\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u0438\u0442\u0435 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438.
 MyTorrentsView.menu.edit_comment=\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 MyTorrentsView.menu.edit_comment.enter.title=\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 MyTorrentsView.menu.edit_comment.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.
@@ -2173,9 +2167,6 @@ v3.MainWindow.menu.advanced=\u0420&\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0
 v3.MainWindow.menu.view.searchbar=\u041b\u0435\u043d\u0442\u0430 \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435
 v3.MainWindow.menu.view.tabbar=\u041b\u0435\u043d\u0442\u0430 \u0437\u0430 \u0440\u0430\u0437\u0434\u0435\u0300\u043b\u0438
 v3.MainWindow.currentDL=\u0422\u0435\u043a\u0443\u0449\u043e \u0441\u0432\u0430\u043b\u044f\u043d\u0435
-v3.MainWindow.recentDL=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438 %1 \u0441\u0432\u0430\u043b\u044f\u043d\u0438\u044f
-v3.MainWindow.recentDL.library=\u041c\u0435\u0441\u0442\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 >>
-v3.MainWindow.myMedia.noneSelected=\u041c\u0435\u0441\u0442\u043d\u043e \u0438\u043c\u0430 %1 \u043f\u0430\u0440\u0447\u0435\u0442\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435.\n%2 \u043e\u0442 \u0442\u044f\u0445 \u0441\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0435\u043d\u0438.\n\n\u0417\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 \u0440\u0435\u0434
 v3.MainWindow.button.stream=\u041f\u043e\u0442\u043e\u043a
 v3.MainWindow.button.stop=\u0421\u043f\u0438\u0440\u0430\u043d\u0435
 v3.MainWindow.button.start=\u0417\u0430\u043f\u043e\u0447\u0432\u0430\u043d\u0435
@@ -2186,7 +2177,6 @@ v3.MainWindow.button.comment=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 v3.MainWindow.button.viewdetails=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
 v3.MainWindow.button.play=\u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435
 v3.MainWindow.button.cancel=\u041e\u0442\u043a\u0430\u0437
-v3.MainWindow.button.sendtofriend=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
 v3.MainWindow.button.preview=\u041e\u043d\u0430\u0433\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435
 v3.MainWindow.view.wait=\u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u0437\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434.
 v3.MainWindow.xofx=%1 \u043e\u0442 %2
@@ -2492,53 +2482,17 @@ Button.bar.share=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
 Button.bar.add=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435
 Button.bar.edit=\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u044f
 Button.bar.edit.cancel=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u043e
-v3.Share.menu=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.Share.header=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
-v3.Share.header.message=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441 \u0434\u0440\u0443\u0436\u043a\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0438 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.Share.add.buddy=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.Share.add.edit.buddy=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.Share.add.buddy.all=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441 \u0432\u0441\u0438\u0447\u043a\u0438
-v3.Share.add.buddy.existing=\u0414\u0440\u0443\u0436\u043a\u0438, \u0441 \u043a\u043e\u0438\u0442\u043e \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u0438:
-v3.Share.add.buddy.new=\u041d\u043e\u0432\u0438 \u0434\u0440\u0443\u0436\u043a\u0438, \u043a\u043e\u0438\u0442\u043e \u0434\u0430 \u0441\u0435 \u043f\u043e\u043a\u0430\u043d\u044f\u0442 \u0438 \u0434\u0430 \u0438\u043c \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u0438:
-v3.Share.buddies=\u0414\u0440\u0443\u0436\u043a\u0438
-v3.Share.invitees=\u041f\u043e\u043a\u0430\u043d\u0435\u043d\u0438
-v3.Share.invite.buddies.prompt=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043e\u0449\u0435 \u0434\u0440\u0443\u0436\u043a\u0438, \u0441 \u043a\u043e\u0438\u0442\u043e \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u0438
-v3.Share.send.now=\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435
-v3.Share.optional.message=\u041d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0437\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0435\u043c\u0438\u0441\u0438\u044f\u0442\u0430 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 (\u043c\u0430\u043a\u0441. 140 \u0441\u0438\u043c\u0432\u043e\u043b\u0430):
-v3.Share.disclaimer=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0418 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e, \u043a\u043e\u0435\u0442\u043e \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f, \u0438 \u0442\u043e\u0432\u0430 \u043d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0449\u0435 \u0441\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438.
-v3.Share.disclaimer.link=\u041f\u043e-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u2026
-ConfigView.section.security.vuze.login=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0432\u044a\u0432 Vuze \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430
-v3.buddy.menu.viewprofile=\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b
-v3.buddy.menu.remove=\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
 v3.MainWindow.menu.view.pluginbar=\u041b\u0435\u043d\u0442\u0430 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438
-v3.MainWindow.menu.view.buddies-viewer=\u041b\u0435\u043d\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435
-v3.activity.buddy-request=\u0418\u043c\u0430 \u0438\u0441\u043a\u0430\u043d\u0435 \u043e\u0442 \u0434\u0440\u0443\u0436\u043a\u0430 %1\n\n<A HREF="%2">\u041f\u0420\u0418\u0415\u041c\u0410\u041d\u0415</A>
-v3.activity.buddy-request.accept=\u041f\u0440\u0438\u0435\u043c\u0430\u043d\u0435
-v3.activity.buddy-request.multi=\u0418\u043c\u0430 \u0438\u0441\u043a\u0430\u043d\u0435 \u043e\u0442 \u0434\u0440\u0443\u0436\u043a\u0430 \u0437\u0430 [#%3] \u043e\u0442 %1\n\n<A HREF="%2">\u041f\u0420\u0418\u0415\u041c\u0410\u041d\u0415</A>
-v3.activity.buddy-linkup=%1 \u0435 \u0432\u0435\u0447\u0435 \u0434\u0440\u0443\u0436\u043a\u0430
-v3.activity.share-content=%1 \u0438\u0441\u043a\u0430 \u0434\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u0438 %2\n\n\u0421\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 %3:\n%4
-v3.activity.share-content.no-msg=%1 \u0438\u0441\u043a\u0430 \u0434\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u0438 %2
-v3.buddies.friends=\u0414\u0440\u0443\u0436\u043a\u0438
-v3.buddies.online=\u041d\u0430 \u043b\u0438\u043d\u0438\u044f (%1)
-v3.buddies.remove=\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
-v3.buddies.add.to.share=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u0430\u043d\u0435
 MainWindow.dialog.select.vuze.file=\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 Vuze \u0444\u0430\u0439\u043b
 MainWindow.menu.file.open.vuze=Vuze \u0444\u0430\u0439\u043b\u2026
-azbuddy.ui.dialog.disable.title=\u0411\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-azbuddy.ui.dialog.disable.text=\u0411\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u044f\u043c\u0430 \u0434\u0430 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0447\u0440\u0435\u0437 \u043b\u0435\u043d\u0442\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u0432 \u0434\u043e\u043b\u043d\u0430\u0442\u0430 \u0447\u0430\u0441\u0442 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0438 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430 \u0441\u043f\u0438\u0441\u044a\u043a\u044a\u0442 \u0441 \u0434\u0440\u0443\u0436\u043a\u0438\n\n\u0414\u0430 \u0441\u0435 \u0441\u043f\u0440\u0435 \u043b\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438?
 metasearch.addtemplate.title=\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435?
 metasearch.addtemplate.desc=\u041d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 \u043b\u0438 \u0434\u0430 \u0441\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430 \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435 \u0441 \u0438\u043c\u0435 '%1'?
 v3.share.private.title=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
 v3.share.private.text=\u0418\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0442\u043e\u0440\u0435\u043d\u0442 \u0435 \u043c\u0430\u0440\u043a\u0438\u0440\u0430\u043d \u043a\u0430\u0442\u043e \u0447\u0430\u0441\u0442\u0435\u043d \u0442\u043e\u0440\u0435\u043d\u0442.\n\n\u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0447\u0430\u0441\u0442\u043d\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438.
-v3.buddies.disabled.title=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u0435 \u0435 \u043f\u0443\u0441\u043d\u0430\u0442\u0430
-v3.buddies.disabled.text._windows=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u0435 \u0435 \u043f\u0443\u0441\u043d\u0430\u0442\u0430, \u0437\u0430\u0442\u043e\u0432\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0438\u043b\u0438 \u043f\u0440\u0438\u0435\u043c\u0430\u0442 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0438\u043b\u0438 \u0438\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438. \u0414\u0430 \u0441\u0435 \u0441\u043c\u0435\u043d\u044f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b '\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f'.
-v3.buddies.disabled.text._mac=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u0435 \u0435 \u043f\u0443\u0441\u043d\u0430\u0442\u0430, \u0437\u0430\u0442\u043e\u0432\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0438\u043b\u0438 \u043f\u0440\u0438\u0435\u043c\u0430\u0442 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0438\u043b\u0438 \u0438\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438. \u0414\u0430 \u0441\u0435 \u0441\u043c\u0435\u043d\u044f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b '\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f'.
 metasearch.addtemplate.dup.title=\u0414\u0443\u0431\u043b\u0438\u0440\u0430\u043d \u0448\u0430\u0431\u043b\u043e\u043d
 metasearch.addtemplate.dup.desc=\u0428\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435 %1 \u0432\u0435\u0447\u0435 \u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d
 metasearch.export.select.template.file=\u0417\u0430\u043f\u0438\u0441 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d
 metasearch.import.select.template.file=\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d
-v3.MainWindow.button.newtag.share=\u041d\u043e\u0432\u043e! \u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
-v3.buddies.faq=\u041f\u043e-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u2026
 dialog.uiswitch.title=\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c Vuze \u0413\u041f\u0418
 dialog.uiswitch.text=\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0430\u043a\u0442\u0438\u0432\u0435\u043d Vuze \u0413\u041f\u0418 \u0437\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u0430\u0437\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f.\n\nVuze \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430.
 dialog.uiswitch.button=\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c Vuze \u0413\u041f\u0418
@@ -2546,25 +2500,10 @@ azbuddy.tracker.enabled=\u0421 '\u041b\u0430\u043d\u0441\u0438\u0440\u0430\u043d
 azbuddy.protocolspeed=KB/s \u043c\u0430\u043a\u0441. \u0431\u0430\u043b\u0430\u0441\u0442 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
 v3.MainWindow.button.download=\u0421\u0432\u0430\u043b\u044f\u043d\u0435
 v3.MainWindow.button.run=\u0421\u0442\u0430\u0440\u0442 \u043d\u0430 \u0441\u0432\u0430\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b
-v3.activity.header.friend.requests.foryou=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u0437\u0430 \u0442\u0443\u043a
-v3.activity.header.friend.requests.fromyou=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u043e\u0442\u0442\u0443\u043a
-v3.activity.header.friend.requests.accepted=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u043f\u0440\u0438\u0435\u0442\u0438
-v3.activity.header.share.requests=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
 v3.activity.header.downloads=\u0421\u0432\u0430\u043b\u044f\u043d\u0438\u044f
-v3.activity.header.rating.reminders=\u0411\u0435\u043b\u0435\u0436\u043a\u0438 \u0437\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f
 v3.activity.header.vuze.news=Vuze \u043d\u043e\u0432\u0438\u043d\u0438
-login.optional.message=\u0418\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0437\u0430 \u0442\u0430\u0437\u0438 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442
-message.confirm.share.singular=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e.
-message.confirm.share.plural=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441\u0430 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438.
-message.confirm.share.invite.singular=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e.
-message.confirm.share.invite.plural=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441\u0430 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438.
-message.confirm.invite.singular=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 \u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e.
-message.confirm.invite.plural=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u044f\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 \u0441\u0430 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438.
-message.confirm.invite.error=\u041a\u043e\u0444\u0442\u0438! \u0417\u0430\u043f\u043b\u0435\u0442\u043e\u0445\u0430 \u0441\u0435 \u0436\u0438\u0446\u0438\u0442\u0435 \u043f\u043e \u0442\u043e\u0432\u0430 \u0438\u0441\u043a\u0430\u043d\u0435. \u041d\u044f\u043a\u043e\u0439 \u0438\u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u043e\u0442 \u043f\u043e\u043a\u0430\u043d\u0435\u043d\u0438\u0442\u0435 \u0438\u043c\u0430\u0442 \u0433\u0440\u0435\u0448\u043a\u0438.
-message.prompt.add.friends=\u041f\u043e\u0441\u043e\u0447\u0432\u0430\u043d\u0435 \u043f\u043e \u0438\u043a\u043e\u043d\u0438\u0442\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443 \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430
 message.taking.too.long=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0435 \u0431\u0430\u0432\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u043e\u0442 \u043e\u0447\u0430\u043a\u0432\u0430\u043d\u043e\u0442\u043e\n\u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u0436\u0438\u0435 \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 'ESC' \u0437\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u044f\u0432\u0430\u043d\u0435
 message.status.success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e
-message.intro.friends=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 - \u043f\u043e-\u0431\u044a\u0440\u0437\u043e \u0441\u0432\u0430\u043b\u044f\u043d\u0435.
 azbuddy.tracker.bbb.status.title=\u041b\u0430\u043d\u0441\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
 azbuddy.tracker.bbb.status.title.tooltip=\u0418\u0437\u0431\u043e\u0440 \u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
 azbuddy.tracker.bbb.status.idle=\u0411\u0435\u0437 \u043b\u0430\u043d\u0441\u0438\u0440\u0430\u043d\u0435
@@ -2573,13 +2512,8 @@ azbuddy.tracker.bbb.status.in=\u041c\u0435\u0441\u0442\u043d\u043e \u043b\u0430\
 azbuddy.tracker.bbb.status.out=\u041b\u0430\u043d\u0441\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
 v3.MainWindow.search.go.tooltip=\u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435\u0442\u043e
 v3.MainWindow.search.last.tooltip=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435
-v3.activity.buddy-invited=\u0418\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e \u0435 \u0438\u0441\u043a\u0430\u043d\u0435 \u043a\u044a\u043c \u0434\u0440\u0443\u0436\u043a\u0430 \u0437\u0430 %1.
-v3.activity.buddy-invited.multi=\u0418\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e \u0435 \u0438\u0441\u043a\u0430\u043d\u0435 \u043a\u044a\u043c \u0434\u0440\u0443\u0436\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u0445\u043e\u0440\u0430:\n%1
 metasearch.addtemplate.done.title=\u0414\u043e\u0431\u0430\u0432\u0435\u043d \u0448\u0430\u0431\u043b\u043e\u043d
 metasearch.addtemplate.done.desc=\u0428\u0430\u0431\u043b\u043e\u043d '%1' \u0435 \u0434\u043e\u0431\u0430\u0432\u0435\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e.\n\u0429\u0435 \u0431\u044a\u0434\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435.
-v3.MainWindow.button.share=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.buddies.remove.buddy.dialog.title=\u041f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0435\u043d\u0435\u0442\u043e \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
-v3.buddies.remove.buddy.dialog.text=\u041d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 \u043b\u0438 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0442\u0440\u0438\u0435 %1 \u043a\u0430\u0442\u043e \u0434\u0440\u0443\u0436\u043a\u0430?
 ConfigView.section.security.nopw=\u041d\u0435 \u0435 \u043f\u043e\u0434\u0430\u0434\u0435\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430
 ConfigView.section.security.nopw_v=\u041d\u044f\u043c\u0430 \u043f\u0430\u0440\u043e\u043b\u0430, \u0442\u0440\u044f\u0431\u0432\u0430 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0432\u044a\u0432 Vuze
 fileplugininstall.install.title=\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430?
@@ -2593,14 +2527,7 @@ azbuddy.os_not_avail=\u041d\u0435\u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043
 azbuddy.os_busy=\u0417\u0430\u0435\u0442
 azbuddy.os_offline=\u041d\u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f
 azbuddy.ui.menu.disconnect=\u041f\u0440\u0435\u043a\u044a\u0441\u0432\u0430\u043d\u0435
-v3.buddy.menu.chat=\u041b\u0430\u0444\u0447\u0435
-v3.chat.offline=%1 \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f \u0438 \u0449\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e, \u043a\u043e\u0433\u0430\u0442\u043e \u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
-v3.chat.wrongversion=%1 \u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 Vuze, \u043a\u043e\u044f\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u043b\u0430\u0444\u0447\u0435.
 azbuddy.enable_chat_notif=\u0421 \u0438\u0437\u0432\u0435\u0441\u0442\u044f\u0432\u0430\u043d\u0438\u044f \u0432 \u043b\u0430\u0444\u0447\u0435\u0442\u043e
-v3.buddies.dnd.info.dialog.title=\u0426\u0435\u043b\u0435\u0432\u043e \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
-v3.buddies.dnd.info.dialog.text=\u0417\u0430\u043f\u043e\u0447\u0432\u0430 \u0446\u0435\u043b\u0435\u0432\u043e \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435. \u041c\u0435\u0441\u0442\u043d\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0435 \u043f\u0440\u0438\u0433\u043e\u0442\u0432\u044f \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435. \u0429\u0435 \u0441\u0435 \u043e\u0442\u0432\u043e\u0440\u0438 \u0435\u043a\u0440\u0430\u043d\u044a\u0442 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441\u043b\u0435\u0434 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u0442\u0430.\n\nVuze \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0438, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">\u0414\u0430 \u0441\u0435 \u043f\u043e\u0441\u043e\u0447\u0438 \u0442\u0443\u043a</A> \u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438.
-v3.buddies.dnd.info.dialog.ok=\u0414\u0430
-v3.buddies.dnd.info.dialog.remember=\u0411\u0435\u0437 \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e \u043e\u0442\u043d\u043e\u0432\u043e
 progress.window.msg.progress=\u0414\u0430 \u0441\u0435 \u0438\u0437\u0447\u0430\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430
 ConfigView.section.connection.advanced.read_select=\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0437\u0430\u043a\u044a\u0441\u043d\u0435\u043d\u0438\u0435 \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435 (m, \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435 %1)
 ConfigView.section.connection.advanced.read_select_min=\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u043c\u0438\u043d. \u0447\u0430\u043a\u0430\u043d\u0435 \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435 (m, \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435 %1)
@@ -2655,25 +2582,18 @@ PluginDeprecation.view=\u041d\u0435\u0438\u0437\u043f\u0440\u0430\u0432\u043d\u0
 PluginDeprecation.alert=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0435 \u0435 \u043e\u043f\u0438\u0442\u0430\u043b\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442, \u043a\u043e\u044f\u0442\u043e \u0449\u0435 \u043e\u0442\u043f\u0430\u0434\u043d\u0435 \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438 \u0432\u0435\u0440\u0441\u0438\u0438. \u0414\u0430 \u0441\u0435 \u043e\u0442\u0432\u043e\u0440\u0438 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u0441 \u0434\u043d\u0435\u0432\u043d\u0438\u043a\u0430 \u043d\u0430 \u043d\u0435\u0438\u0437\u043f\u0440\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 \u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.
 TableColumn.header.Thumbnail=\u0418\u043a\u043e\u043d\u0430
 TableColumn.header.Thumbnail.info=\u041d\u0430\u043c\u0430\u043b\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434 \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435. \u0417\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0434\u0440\u0443\u0433\u0438 \u043d\u0430\u043c\u0430\u043b\u0435\u043d\u0438\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0438 \u0441\u0435 \u0434\u0430\u0432\u0430\u0442 \u043e\u0442 \u041e\u0421-\u0430.
-TableColumn.header.Rating_global=\u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442
-TableColumn.header.Rating_global.info=\u0413\u043b\u043e\u0431\u0430\u043b\u043d\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0437\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e
 v3.MainWindow.menu.getting_started=&\u0417\u0430\u043f\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430
 MainWindow.menu.community=&\u0414\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u043e
 MainWindow.menu.help.faq=&\u0427\u0417\u0412
 MainWindow.menu.community.wiki=\u0414\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d &\u0423\u0438\u043a\u0438
 MainWindow.menu.community.forums=\u0414\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d &\u0444\u043e\u0440\u0443\u043c
 MainWindow.menu.community.blog=Vuze &\u0415\u043c\u0438\u0441\u0438\u044f
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
 MainWindow.menu.help.support=&\u041f\u043e\u043c\u043e\u0449 \u0438 \u043f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430
 externalLogin.title=\u0418\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435
 externalLogin.explanation=\u0428\u0430\u0431\u043b\u043e\u043d "%1" \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435. \u0421\u043b\u0435\u0434 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u044a\u0442 \u0449\u0435 \u0441\u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0438. \u0410\u043a\u043e \u043d\u0435 \u0441\u0435 \u0437\u0430\u0442\u0432\u043e\u0442, \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 "\u0413\u043e\u0442\u043e\u0432\u043e".
 externalLogin.explanation.capture=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0437\u0430 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u043e\u0437\u0438 \u0448\u0430\u0431\u043b\u043e\u043d. \u0421\u043b\u0435\u0434 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 "\u0413\u043e\u0442\u043e\u0432\u043e".
 Button.done=\u0413\u043e\u0442\u043e\u0432\u043e
 GeneralView.torrent_created_on_and_by=%1 \u043e\u0442 %2
-v3.Share.wizard.title=\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
-v3.AddFriends.header.message=\u041c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f\u0442 \u0434\u0440\u0443\u0436\u043a\u0438 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441 \u0442\u044f\u0445 \u043d\u0430 \u043b\u044e\u0431\u0438\u043c\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
-v3.AddFriends.header=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.AddFriends.wizard.title=\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u0437\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
 Button.continue=\u041d\u0430\u043f\u0440\u0435\u0434
 Button.preview=\u041f\u0440\u0435\u0433\u043b\u0435\u0434
 Subscription.menu.forcecheck=\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f
@@ -2684,9 +2604,6 @@ sidebar.LibraryDL=\u0421\u0432\u0430\u043b\u044f\u0449\u0438 \u0441\u0435
 sidebar.LibraryCD=\u0417\u0430\u0432\u044a\u0440\u0448\u0435\u043d\u0438
 authenticator.location=\u041c\u044f\u0441\u0442\u043e
 authenticator.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-v3.MainWindow.menu.publish.new=\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.MainWindow.menu.publish.mine=\u041c\u0435\u0441\u0442\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.MainWindow.menu.publish.about=\u0417\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u0435\u0442\u043e\u2026
 v3.MainWindow.menu.showActionBarText=\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442
 subscript.import.fail.title=\u041f\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442
 subscript.import.fail.desc=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438: %1
@@ -2703,13 +2620,11 @@ Subscription.menu.reset=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u
 ConfigView.section.Subscriptions=\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438
 subscriptions.config.maxresults=\u041c\u0430\u043a\u0441. \u0431\u0440\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438 \u0437\u0430 \u0437\u0430\u0434\u044a\u0440\u0436\u0430\u043d\u0435 \u0437\u0430 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442 [0: \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e]
 v3.activity.button.readall=\u041c\u0430\u0440\u043a\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u043e \u043a\u0430\u0442\u043e \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u043d\u043e
-ConfigView.interface.start.library=\u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0442\u0430
 TableColumn.header.activityNew=\u041d\u043e\u0432\u043e
 TableColumn.header.activityType=\u0422\u0438\u043f
 TableColumn.header.activityText=\u0421\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435
 TableColumn.header.activityDate=\u0414\u0430\u0442\u0430 \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435
 TableColumn.header.activityActions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-TableColumn.header.activityAvatar=\u0410\u0432\u0430\u0442\u0430\u0440
 Subscription.menu.resetauth=\u041d\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435
 Search.menu.engines=\u0428\u0430\u0431\u043b\u043e\u043d\u0438
 Wizard.Subscription.title=\u0410\u0431\u043e\u043d\u0438\u0440\u0430\u043d\u0435
@@ -2736,8 +2651,6 @@ Wizard.Subscription.rss.subtitle3=\u0421\u043b\u0435\u0434 \u0437\u0430\u043f\u0
 Wizard.Subscription.subscribe.library=\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u0432 \u043c\u0435\u0441\u0442\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430
 Wizard.Subscription.subscribe.subscriptions=\u0421\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438
 Wizard.Subscription.subscribe.library.empty=\u041d\u044f\u043c\u0430 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438?\n \n\u0414\u0430 \u0441\u0435 \u0441\u043b\u0435\u0434\u0438 \u044f\u0440\u043a\u043e \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0438\u044f \u0431\u0443\u0442\u043e\u043d \u0437\u0430 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0432\u044a\u0432 Vuze HD \u043c\u0440\u0435\u0436\u0430\u0442\u0430.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\u041f\u043e-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u2026</A>
-TableColumn.header.Info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
-TableColumn.header.videoLength=\u0414\u044a\u043b\u0436\u0438\u043d\u0430 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e
 message.confirm.delete.title=\u041f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435
 message.confirm.delete.text=\u0414\u0430 \u0441\u0435 \u0438\u0437\u0442\u0440\u0438\u0435 \u043b\u0438 \u043d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 '%1'?
 Subscription.menu.properties=\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438
@@ -2790,8 +2703,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u0410\u0441\u043e\u0446\u043
 Button.deleteContent.fromLibrary=\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0442\u0430
 Button.deleteContent.fromComputer=\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043e\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u0430
 v3.deleteContent.message=\n\u0414\u0430 \u0441\u0435 \u0438\u0437\u0442\u0440\u0438\u0435 \u043b\u0438 '%1' \u043e\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u0430 \u0438\u043b\u0438 \u0441\u0430\u043c\u043e \u0434\u0430 \u0441\u0435 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0435 \u043e\u0442 \u043c\u0435\u0441\u0442\u043d\u0430\u0442\u0430 Vuze \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430?
-v3.library.infobar.text1=\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434?
-v3.library.infobar.text2=\u0414\u0430 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434 \u043e\u0442 \u0433\u043e\u0440\u043d\u0430\u0442\u0430 \u043b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438.
 v3.MainWindow.menu.view.toolbartext=\u0422\u0435\u043a\u0441\u0442 \u043d\u0430 \u043b\u0435\u043d\u0442\u0438\u0442\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438
 v3.MainWindow.menu.view.asSimpleList=\u041e\u043f\u0440\u043e\u0441\u0442\u0435\u043d \u0441\u043f\u0438\u0441\u044a\u043a
 v3.MainWindow.menu.view.asAdvancedList=\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d \u0441\u043f\u0438\u0441\u044a\u043a
@@ -2818,16 +2729,6 @@ azbuddy.ui.menu.cat.share=\u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435
 azbuddy.ui.menu.cat.set=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438
 azbuddy.ui.menu.cat.set_msg=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438 \u0441\u044a\u0441 \u0437\u0430\u043f\u0435\u0442\u0430\u0438, \u0438\u043b\u0438 '\u0432\u0441\u0438\u0447\u043a\u0438'
 azbuddy.ui.menu.cat_subs=\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442
-v3.buddy.prop.dn=\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u043e \u0438\u043c\u0435
-v3.buddy.prop.un=\u0418\u043c\u0435 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b
-v3.buddy.prop.on=\u041d\u0430 \u043b\u0438\u043d\u0438\u044f
-v3.buddy.prop.lupd=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f
-v3.buddy.prop.pks=\u0411\u0440\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0438 \u043a\u043b\u044e\u0447\u043e\u0432\u0435
-v3.buddy.prop.pc=\u0427\u0430\u043a\u0430\u0449\u0438 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043b\u0430\u0444\u0447\u0435\u0442\u043e
-v3.buddy.prop.catout=\u041c\u0435\u0441\u0442\u043d\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u0437\u0430 \u043a\u043e\u0438\u0442\u043e \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0430\u0431\u043e\u043d\u0438\u0440\u0430\u0442
-v3.buddy.prop.catin=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043a\u043e\u0438\u0442\u043e \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442
-v3.buddy.set.catout=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430 \u0434\u0430 \u0441\u0435 \u0430\u0431\u043e\u043d\u0438\u0440\u0430 \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u0442\u0430
-v3.buddy.set.catin=\u0410\u0431\u043e\u043d\u0438\u0440\u0430\u043d\u0435 \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
 subs.prop.update_period=\u041f\u0435\u0440\u0438\u043e\u0434 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f
 azbuddy.enable_cat_pub=\u041e\u0431\u0449\u043e\u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0437\u0430 \u043a\u043e\u0438\u0442\u043e \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u0430\u0431\u043e\u043d\u0438\u0440\u0430\u0442 \u0432\u0441\u0438\u0447\u043a\u0438 \u0434\u0440\u0443\u0436\u043a\u0438 (',' \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438) 
 v3.dialog.cnclose.title=%1 \u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430
@@ -2844,12 +2745,9 @@ TableColumn.header.category.info=\u0418\u043c\u0430 \u043d\u0430 \u043a\u0430\u0
 TableColumn.header.DateCompleted.info=\u0414\u0430\u0442\u0430 \u043d\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
 TableColumn.header.AzProduct.info=\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u0442\u0435\u043b\u043d\u0430 \u043c\u0440\u0435\u0436\u0430, \u043e\u0442 \u043a\u043e\u044f\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0445\u043e\u0436\u0434\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u044a\u0442
 TableColumn.header.health.info=\u041a\u043e\u043b\u043a\u043e \u0437\u0434\u0440\u0430\u0432\u0430 \u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0434\u043e \u0440\u043e\u044f\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0430
-TableColumn.header.Info.info=\u0411\u0443\u0442\u043e\u043d, \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0449 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430 \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e
 TableColumn.header.maxuploads.info=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u0435\u043d \u0431\u0440\u043e\u0439 \u0440\u0430\u0432\u043d\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438, \u043a\u044a\u043c \u043a\u043e\u0438\u0442\u043e \u0435\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0435 \u043a\u0430\u0447\u0432\u0430
 TableColumn.header.name.info=\u0418\u043c\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
 TableColumn.header.unopened.info=\u0424\u043b\u0430\u0433 \u0437\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043b\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u044a\u0442 \u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u043d (\u043e\u0442\u0432\u0430\u0440\u044f\u043d)
-TableColumn.header.Quality.info=\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u043a\u0430\u0442\u043e HD, SD
-TableColumn.header.RateIt.info=\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0433\u043b\u0430\u0441\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
 TableColumn.header.savepath.info=\u0426\u0435\u043b\u0435\u0432\u0430\u0442\u0430 \u043f\u0430\u043f\u043a\u0430 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b \u0437\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0430
 TableColumn.header.SeedingRank.info=\u0420\u0430\u043d\u0433, \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u0449 \u043a\u043e\u043b\u043a\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u0440\u0435\u043d\u0442\u044a\u0442 \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435\u0435\u043d\u0435. \u041f\u043e-\u0432\u0438\u0441\u043e\u043a\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442 \u0437\u043d\u0430\u0447\u0438 \u043f\u043e-\u0433\u043e\u043b\u044f\u043c\u0430 \u043d\u0443\u0436\u0434\u0430.
 TableColumn.header.shareRatio.info=\u041a\u043e\u043b\u043a\u043e \u0435 \u043a\u0430\u0447\u0435\u043d\u043e (\u0441\u043f\u043e\u0434\u0435\u043b\u0435\u043d\u043e) \u0441\u043f\u0440\u044f\u043c\u043e \u0441\u0432\u0430\u043b\u0435\u043d\u043e\u0442\u043e.
@@ -2859,7 +2757,6 @@ TableColumn.header.upspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u043
 TableColumn.header.downspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435
 TableColumn.header.up.info=\u0422\u0435\u043a\u0443\u0449\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u0438 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438
 TableColumn.header.down.info=\u0422\u0435\u043a\u0443\u0449\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438
-TableColumn.header.videoLength.info=\u0412\u0440\u0435\u043c\u0435 \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 Vuze \u0432\u0438\u0434\u0435\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
 TableColumn.header.ProgressETA.info=\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0430 \u043a\u043e\u043b\u043e\u043d\u0438 \u0437\u0430 \u0441\u044a\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0437\u0430\u0432\u044a\u0440\u0448\u0435\u043d\u043e\u0441\u0442, \u041e\u0412\u0417 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435 \u0432 \u0435\u0434\u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u0440\u0435\u0434\u043e\u0432\u0430 \u043a\u043e\u043b\u043e\u043d\u0430.
 TableColumn.header.eta.info=\u041e\u0447\u0430\u043a\u0432\u0430\u043d\u043e \u0432\u0440\u0435\u043c\u0435 \u043f\u0440\u0435\u0434\u0438 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
 Pieces.column.#=\u2116
@@ -2919,5 +2816,4 @@ General.percent=%
 devices.installed=\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u043e
 devices.comp.missing=\u041d\u0435 \u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0430 Vuze \u043f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430
 devices.state=\u041a\u0430\u043a \u0435
-# The remaining keys were not in MessagesBundle.properties
 i18n.bg_BG.Contact=Andrey Marinov andreshko at hotmail.bg
diff --git a/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties b/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties
index 136073e..c85f421 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Fajl .torrent
 Main.parameter.usage=Upotreba : java org.gudy.azureus2.cl.Main [parametri] "file.torrent" "put snimanja"
 Main.parameter.maxUploads=Max broj slanja
@@ -351,7 +352,6 @@ MyTorrentsView.menu.removeand.deletedata=Izbrisi podatke
 MyTorrentsView.menu.removeand.deleteboth=Sve izbrisi
 deletedata.title=!!! Paznja !!!
 deletedata.message1=Brisete PODATKE od :\n
-deletedata.message2=\nJeste sigurni da zelite nastavi?
 MainWindow.menu.file.configure=Pomocnik konfiguracije
 configureWizard.title=Pomocnik Konfiguracije
 configureWizard.welcome.title=Dobrodosli na Pomocnicku Konfiguraciju Azureus-a
@@ -477,7 +477,6 @@ MyTorrentsView.menu.host.error.message=Sljedeca grijeska se desila prije Hosta o
 ConfigView.section.tracker.pollinterval=Interval veze trackera (sek)
 ConfigView.section.tracker.publishenable=Posalji detalje o torrent-u na "<tracker_url>"
 ConfigView.section.tracker.ip=Eksterna IP trackera
-MainWindow.menu.help.faq=FAQ
 ConfigView.section.style.enableXPStyle=Aktiviraj XP stil (potrebno restart)
 ConfigView.section.tracker.checkip=Provera adrese...
 ipCheckerWizard.title=Pomocnik provere IP
@@ -508,7 +507,6 @@ splash.openViews=Otvaranje Izgleda
 splash.plugin=Otvaranje dodatka :
 configureWizard.nat.tooManyPorts=Previse portova za probu (max 9)
 ConfigView.section.color=Boja Tema
-PeerSocket.unknown=Nepoznat
 MyTorrentsView.menu.publish=&Publish...
 MyTrackerView.status.published=Postavljeno
 MyTrackerView.completed=Zavrseno
@@ -519,9 +517,15 @@ ConfigView.section.file.decoder.label=Standardno kodiranje kada treba odabranje
 ConfigView.section.file.decoder.nodecoder=Nijedan
 IPChecker.external.service.no-ip.description=Provajder DNS dinamicnih i staticnih\n(ni jedan besplatan servise provere IP)
 ConfigView.section.tracker.publicenable=Omoguci eksterni Torrent
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Pokazuje broj dostupnih kopija.\nAko je desni broj manji od 1, ne vidite celu kopiju.
 GeneralView.label.trackerurl.tooltip=Kliknuti za kopiju url u clipboard
 GeneralView.label.trackerurlopen.tooltip=Kliknuti za otvaranje glavnog lista trackera
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Obnovi GUI svakih
 ConfigView.section.style.graphicsUpdate=Obnovi graficke trake svaki N GUI obnove
 ConfigView.section.style.reOrderDelay=Uredi kolone svake N GUI obnove [0: nikada]
@@ -653,6 +657,9 @@ health.explain.yellow=Tracker ok, klijenti su prikljuceni, ali ni jedna ulazna v
 health.explain.green=Sve funkcionise kako treba.
 ConfigView.section.style.alwaysRefreshMyTorrents=Uvijek obnovi 'Moji .torrent'
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Opcija obnavlja 'Moji .torrent' i ako prozor nije pokaza (korisno za neki mirc dodatci)
+#
+#2.0.7.0
+#
 security.certtruster.title=Upozorenje certifikata sigurnosti
 security.certtruster.intro=Certifikat je od firme kojoj ne vijerujete
 security.certtruster.resource=Resurs:
@@ -705,6 +712,9 @@ ConfigView.section.style.dropdiraction=Klizaj-pomeri za direktorijume
 ConfigView.section.style.dropdiraction.opentorrents=Otvori Torrent
 ConfigView.section.style.dropdiraction.sharefolder=Folder dijeljenja
 ConfigView.section.style.dropdiraction.sharefoldercontents=Dijeljen sadrzaj
+#
+# 2.0.7.x
+#
 Categories.all=Sve
 Categories.uncategorized=Bez kategorije
 CategoryAddWindow.message=Unesi ime nove kategorije
@@ -783,7 +793,6 @@ ConfigView.text.minutes=minuta
 ConfigView.text.neverIgnore=Nikada Ignorisati
 ConfigView.text.any=nijedan
 DownloadManager.error.datamissing=Fali podatke
-iconBar.queue.tooltip=Red
 MainWindow.menu.file.open.torrentforseeding=Fajl .torrent (za izvor)
 MainWindow.menu.language.refresh=Obnovi
 ManagerItem.forced=Natijerano
@@ -850,6 +859,9 @@ SpeedView.stats.downloaded=Skinuto
 SpeedView.stats.uploaded=Poslano
 SpeedView.stats.uptime=Radi vec (sati)
 AutoMigration.useralert=Rezultat automatske promijene fajlova i foldera od Vuze \n\n%1\n%2POGRIJESNE PROMIJENE TREBAJU DA SE URADE RUCNO U KONFIGURACIJI.
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Otvori .torrent
 OpenTorrentWindow.message=Eksperimentalno
 OpenTorrentWindow.addFiles=Dodaj fajl
@@ -920,7 +932,6 @@ Scrape.status.error=Scrape Greska:
 Scrape.status.error.nohash=Nedostaje Hash odgovora.
 Scrape.status.error.invalid=Pogresan Odgovor.
 Scrape.status.nextScrapeAt=Sledeci scrape u %1
-Scrape.status.scraping=Scraping...
 Scrape.status.initializing=Cekanje 'Scrape'
 ConfigView.label.minSpeedForActiveSeeding=Ne broj zavrseni .torrent kao da koristi slot ako je brzina ispod
 MainWindow.menu.view.irc.moved=Irc nije dodatak, videti http://azureus.sourceforge.net/plugin_list.php
@@ -1081,6 +1092,8 @@ MyTrackerView.badnat.info=Deljenja/Izvora pogresno proverili NAT, ako omoguceno
 ConfigView.section.tracker.natchecktimeout=Provijeri Tajmout (sek)
 ConfigView.section.file.perf.cache.enable=Omoguci Kes Diska
 ConfigView.section.file.perf.cache.size=Velicina Kesa u %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 ConfigView.label.experimental.osx.kernel.panic.fix=Probni lepak za paniku procesora na 2 cpu OSX [potrebno pokretanje]
 ConfigView.section.file.truncate.too.large=Iseci postojeci fajlovi koji su preveliki
 ConfigView.section.file.perf.cache.trace=Prati operacije kesa za dijagnostik
@@ -1127,7 +1140,6 @@ ConfigView.section.connection.network.max.simultaneous.connect.attempts=Max simu
 ConfigView.section.connection.network.max.simultaneous.connect.attempts.tooltip=Max number of new outbound connection establishments Vuze should attempt any given time.\nNOTE: WindowsXP Service Pack 2 (SP2) imposes a system-wide limit of 10 simultaneous connect attempts.\nDefault value is 8. Value of 0 disables outbound connects entirely.
 ConfigView.section.file.perf.cache.size.explain=The cache is used to reduce reads from/writes to disk. Unless you are using the java option '-XX:MaxDirectMemorySize' to explicitly set the memory available for cache and network IO use, you should keep this value at least %1 below your maximum VM size. The current maximum VM size is %2. For instructions on how to change this, see MemoryUsage in the wiki on %3. Failure to use sensible settings will result on 'out of memory' errors. More than 32MB of cache is probably overkill.
 ConfigView.section.tracker.client=Klijent
-ConfigView.label.announceport=Prebrisati tracker obznaniti port
 ConfigView.group.override=Prebrisati Opcije
 ConfigView.section.connection.advanced=Napredno Postavljanje Mreze
 ConfigView.label.openstatsonstart=Otvori Statistiku pri startu
@@ -1153,7 +1165,6 @@ Button.apply=Primeniti
 Button.close=zatvori
 window.welcome.title=Dobrodosao kod Vuze %1
 #file can be a URL or a path in the jar
-window.welcome.file=/changelog.txt
 dht.reseed.label=Normally reseeding of the Distributed Database is not necessary. However, if the number of contacts is low this can be used for re-integratation.\nLeave blank to bootrap off connected peers or enter IP and port to explicitly bootstrap from a known peer.
 MainWindow.dht.status.disabled=Disabled
 MainWindow.dht.status.failed=Failed
@@ -1175,13 +1186,14 @@ diagnostics.log_found=Vuze se nije zatvorio kako treba. Proveri %1 zurnal fajl i
 ConfigView.section.connection.serverport.wiki=Dobro odabrane ports
 Views.plugins.UPnP.title=UPnP 
 ConfigView.section.logging.log0type=Informacije
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=Torrent fajl:
 Button.moveUp=Premijesti gore
 Button.moveDown=Premijesti dole
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=Ako je vas racun spor i provera hash-a je sporija nego snimanje dela na disku (vise zavrsene dela u pregled delova), moze se smanjiti dela istovremenih preuzimanja delova da se smanji upotreba memorije
-ConfigView.section.file.write_block_limit.explain=Ako imate slabu performansu pisanja na disku (pisanje je sporije nego brzina preuzimanja),\nograniciti velicinu pisanja moze spustiti upotrebu memorije
-MainWindow.dht.status.running=Running
-ConfigView.section.file.check_piece_limit=Maks provera delova\n[0: neograniceno]. Velicina delova zavisi od Torrent
-ConfigView.section.file.write_block_limit=Maks blok pisanja\n[0: neograniceno]. Velicina bloka %1
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Nepoznat
+ConfigView.label.announceport=Prebrisati tracker obznaniti port
+iconBar.queue.tooltip=Red
+MainWindow.menu.help.faq=FAQ
 MainWindow.menu.help.donate=Dati donaciju ($2,$5,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties b/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties
index 6a64d11..5773cee 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties
@@ -698,7 +698,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Aquesta opci\u00f3 refr
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Desplacament Vertical dels Gr\u00e0fics (GTK fix)
 security.certtruster.title=Av\u00e9s del Certificat de Seguretat
 security.certtruster.intro=Una empresa de qui no us refieu ha em\u00e8s el certificat de seguretat
 security.certtruster.resource=Recurs:
@@ -1597,7 +1596,6 @@ OpenTorrentWindow.mb.badSize.text='%1' no \u00e9s '%2' i no es pot fer servir pe
 OpenTorrentWindow.mb.alreadyExists.title=Ja existeix
 OpenTorrentWindow.mb.openError.title=Error en obrir
 OpenTorrentWindow.mb.openError.text='%1' no es pot obrir:
-\n%2
 OpenTorrentWindow.torrent.remove=Elimina el torrent de la llista
 OpenTorrentWindow.torrent.options=Les caracter\u00edsitques seg\u00fcents s'aplicaran als torrents que seleccioneu a continuaci\u00f3:
 OpenTorrentWindow.xOfTotal=(%1 de %2)
@@ -1663,7 +1661,6 @@ PeerColumn.activationCount=Iguals intentant connectar: %1
 MainWindow.menu.view.iconbar=Barra d'eines
 MyTorrentsView.menu.rename=Reanomena
 MyTorrentsView.menu.rename.displayed=Canvia el nom que es mostra
-MyTorrentsView.menu.rename.displayed_and_save_path=Reanomena'ls tots dos
 MyTorrentsView.menu.rename.displayed.enter.title=Canvia el nom que es mostra
 MyTorrentsView.menu.rename.displayed.enter.message=Introdu\u00efu un nom nou per mostrar per aquesta desc\u00e0rrega.
 MyTorrentsView.menu.edit_comment=Edita el comentari
@@ -1827,46 +1824,20 @@ Button.bar.share=Comparteix
 Button.bar.add=Afegeix
 Button.bar.edit=Edita
 Button.bar.edit.cancel=Edici\u00f3 feta
-v3.Share.optional.message=Missatge opcional lliurat per notificacions (m\u00e0xim 140 car\u00e0cters):
-v3.activity.buddy-request=Teniu una sol\u00b7licitud d'amistat de %1
-v3.activity.buddy-request.accept=Accepta
-v3.activity.buddy-request.multi=Teniu una sol\u00b7licitud d'amistat [#%3] de %1
-v3.activity.buddy-linkup=Ara, tu i %1 sou amics
-v3.activity.share-content=%1 ha compartit %2 amb vosaltres. %3 <A HREF="%4" TITLE="%5">diu...</A>
-v3.activity.share-content.no-msg=%1 ha compartit %2 amb vosaltres
-v3.buddies.add.to.share=Afegiu amics per compartir
 MainWindow.dialog.select.vuze.file=Selecciona un fitxer del Vuze
 MainWindow.menu.file.open.vuze=Fitxer del Vuze...
 metasearch.addtemplate.title=Voleu instal\u00b7lar la plantilla de cerca?
 metasearch.addtemplate.desc=Segur que voleu instal\u00b7lar una plantilla de cerca anomenada '%1'?
-v3.buddies.disabled.title=Complement d'amics deshabilitat
-v3.buddies.disabled.text._windows=Heu deshabilitat el complement d'amics, fet que impedeix que compartiu o accepteu torrents o sol\u00b7licitud d'amistat. Ho podeu habilitar des de la pestanya d'opcions.
-v3.buddies.disabled.text._mac=Heu deshabilitat el complement d'amics, fet que impedeix que compartiu o accepteu torrents o sol\u00b7licitud d'amistat. Ho podeu habilitar des de la pestanya d'opcions.
 metasearch.addtemplate.dup.title=Duplica la plantilla
 metasearch.addtemplate.dup.desc=La plantilla de cerca %1 ja est\u00e0 instal\u00b7lada
 metasearch.export.select.template.file=Desa la plantilla
 metasearch.import.select.template.file=Obre la plantilla
 azbuddy.protocolspeed=KB/s m\u00e0x friend protocol overhead
-v3.activity.header.friend.requests.foryou=Sol\u00b7licituds d'amistat - Per a vosaltres
-v3.activity.header.friend.requests.fromyou=Sol\u00b7licituds d'amistats - Vostres
-v3.activity.header.friend.requests.accepted=Sol\u00b7licituds d'amistat - Acceptades
-v3.activity.header.share.requests=Compartiu sol\u00b7licituds de torrent
 v3.activity.header.downloads=Desc\u00e0rregues
 v3.activity.header.vuze.news=Not\u00edcies del Vuze
-login.optional.message=Heu d'entrar per fer servir aquesta caracter\u00edsitca
-message.confirm.share.singular=Perfecte! La vostra sol\u00b7licitud per compartir un torrent s'ha enviat.
-message.confirm.share.plural=Perfecte! Les vostres sol\u00b7licituds per compartir un torrent s'han enviat.
-message.confirm.share.invite.singular=Perfecte! La vostra sol\u00b7licitud de connectar i compratir s'ha enviat. Feel free to gently coax your friend to accept.
-message.confirm.share.invite.plural=Perfecte! La vostra sol\u00b7licitud de connectar i compartir s'ha enviat. Feel free to gently coax your friend to accept.
-message.confirm.invite.singular=Perfecte! La vostra sol\u00b7licitud s'ha enviat. Feel free to gently coax your friend to accept.
-message.confirm.invite.plural=Perfecte! La vostres sol\u00b7licituds d'amistat s'han enviat. Feel free to gently coax your friends to accept.
-message.prompt.add.friends=Seleccioneu amics de la barra lateral (extrem inferior esquerre)
 message.taking.too.long=Sembla que tarda m\u00e9s del que caldria\nPremeu 'ESC' si voleu cancel\u00b7lar l'operaci\u00f3
 message.status.success=\u00c8xit
-message.intro.friends=Afegiu amics.\nCompartiu torrents.\nDescarregueu m\u00e9s r\u00e0pid.
 azbuddy.tracker.bbb.status.nli=Cal que us registreu
-v3.activity.buddy-invited=Heu enviat una sol\u00b7licitud d'amistat a %1.
-v3.activity.buddy-invited.multi=Heu enviat una sol\u00b7litud d'amistat a les persones seg\u00fcents:\n%1
 metasearch.addtemplate.done.title=Pantilla afegida
 metasearch.addtemplate.done.desc=La plantilla '%1' s'ha afegit correctament.\nEs far\u00e0 servir en la propera cerca!
 ConfigView.section.security.nopw=No heu indicat cap contrasenya
@@ -1881,10 +1852,7 @@ azbuddy.os_away=No hi s\u00f3c
 azbuddy.os_not_avail=No disponible
 azbuddy.os_busy=Ocupat
 azbuddy.os_offline=Desconnectat
-v3.chat.offline=%1 ara est\u00e0 desconnectat. Rebr\u00e0 el misstage quan es torni a connectar.
 azbuddy.enable_chat_notif=Habilita les nostificacions de xat
-v3.buddies.dnd.info.dialog.ok=Fet
-v3.buddies.dnd.info.dialog.remember=No tornis a mostrar aquest missatge
 DetailedListView.title=Llista detallada
 azsubs.contextmenu.addassoc=Afegeix una associaci\u00f3 de subscripci\u00f3
 azsubs.contextmenu.lookupassoc=Cerca associacions de subscripci\u00f3
@@ -1899,16 +1867,12 @@ MainWindow.menu.help.faq=&FAQ
 MainWindow.menu.community.wiki=&Wiki de la comunitat
 MainWindow.menu.community.forums=F\u00f2&rums de la comunitat
 MainWindow.menu.community.blog=&Blog del Vuze
-MainWindow.menu.community.add_friends=&Afegeix amics
 MainWindow.menu.help.support=&Ajuda i suport
 externalLogin.title=Cal que us registreu
 externalLogin.explanation=La caracter\u00edsitca "%1" requereix que us registreu. Un cop registrats aquesta finestra es tancar\u00e0 autom\u00e0ticament. Si no ho fa, cliqueu a "Fet".
 externalLogin.explanation.capture=Cal que us registreu per crear aquest plantilla. Quan ho hagueu fet, feu clic a "Fet".
 Button.done=Fet
 GeneralView.torrent_created_on_and_by=%1 per %2
-v3.AddFriends.header.message=Afegiu amics per comen\u00e7ar a compartir  els vostres torrents preferits
-v3.AddFriends.header=Afegiu amics
-v3.AddFriends.wizard.title=Afegiu amics -- Auxiliar
 Button.continue=Continua
 Button.preview=Previsualitzaci\u00f3
 Subscription.menu.forcecheck=Actualitza-ho ara
@@ -1919,9 +1883,6 @@ sidebar.LibraryDL=Descarregant
 sidebar.LibraryCD=Complet
 authenticator.location=Localitzaci\u00f3
 authenticator.details=Detalls
-v3.MainWindow.menu.publish.new=Publica contingut nou
-v3.MainWindow.menu.publish.mine=El contingut publicat
-v3.MainWindow.menu.publish.about=Sobre puublicar...
 Subscription.menu.export=Exporta
 Button.remove=Esborra
 Button.send=Envia
@@ -1933,7 +1894,6 @@ Subscription.menu.reset=Recupera l'estat incial
 ConfigView.section.Subscriptions=Subscripcions
 subscriptions.config.maxresults=Nombre m\u00e0xim de resultats per subscripci\u00f3 [0: il\u00b7limitat]
 v3.activity.button.readall=Marca'ls tots com a llegits
-ConfigView.interface.start.library=Comen\u00e7a a la biblioteca
 Subscription.menu.resetauth=Esborraels detalls d'identificaci\u00f3
 #what you've watched? Discover more with a single click...
 Wizard.Subscription.create.title=Crea una subscrpci\u00f3 nova
@@ -2049,30 +2009,3 @@ devices.copy_url=Copia el flux URL al porta-retalls
 devices.converting=Convertint
 Button.reload=Torna a carregar
 devices.auto.start=Obertura autom\u00e0tica
-# The remaining keys were not in MessagesBundle.properties
-Main.download.state.downloading=Descarregant
-ConfigView.section.logging.log1component=Enregistrar el protocol de transport d'iguals
-Main.download.state.waiting=Esperant
-ConfigView.section.file.check_piece_limit.explain=Si teniu una CPU lenta de manera que els c\u00e0lculs de hash alenteixen l'escriptura al disc (a la vista de peces hi ha numeroses peces completes), limitant la longitut de la cua de comprovaci\u00f3 pot disminuir el consum de mem\u00f2ria
-MainWindow.dht.status.running=Execuci\u00f3
-Main.download.state.allocating=Establint
-ConfigView.section.file.write_block_limit.explain=Si teniu poc rendiment de disc tal que l'escriptura a disc \u00e9s m\u00e9s lenta que la velocitat de desc\u00e0rrega (a la vista de peces hi han numbrosos blocs vermells), limitant la longitud de la cua d'escriptura pot disminuir el consum de mem\u00f2ria
-Main.download.state.ready=Preparat
-Cal=Llegiu la descripci\u00f3 del m\u00f2duls abans de decidir si s'instal\u00b7len.\nuualment el m\u00f2duls s\u00f3n segurs i es poden provar, per\u00f2 tingueu cura a no sobrecarregar el Vuze amb m\u00f2duls que no us fan cap servei.
-ConfigView.section.logging.log4component=Desa el registre d'iguals
-ConfigView.connection.group.proxy=Opcions de l'intermediari
-LocaleUtil.column.filename=Fitxer
-Main.download.state.error=Error
-ConfigView.section.connection.advanced.IPTOS=Tipus-de-servei (TOS) per paquet sortint [ex. 0x02, 0x10]
-ConfigView.section.logging.log3type=Error
-ConfigView.connection.group.advanced=Configuraci\u00f3 avan\u00e7ada de la xarxa
-Main.download.state.checking=Comprovant
-Main.download.state.seeding=Compartint
-ConfigView.section.file.write_block_limit=M\u00e0xim pendent d'escriptures de blocs a disc\n[0: il\u00b7limitat]. Mida de bloc %1
-ConfigView.label.announceport.tooltip=Informa el rastrejador d'un port diferent d'aquell en qu\u00e8 esteu escoltant. Deixeu-ho en blanc per no fer servir aquesta opci\u00f3.
-ConfigView.connection.group.advanced.tooltip=http://www.azureuswiki.com/index.php/AdvancedNetworkSettings
-ConfigView.section.logging.log0component=Anotaci\u00f3 general
-ConfigView.section.file.check_piece_limit=Peces pendents m\u00e0xim per comprovar\n[0: il\u00b7limitat]. La mida de la pe\u00e7a dep\u00e8n del torrent
-ConfigView.section.logging.log2component=Log rastrejador client
-deletedata.message2=\nSegur que voleu continuar?
-Main.download.state.stopped=Desocupat
diff --git a/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties b/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties
index 159d1d0..1e39170 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=.torrent soubor
 Main.parameter.usage=Pou\u017eit\u00ed : java org.gudy.azureus2.cl.Main [parametry] "soubor.torrent" "c\u00edlov\u00e1 slo\u017eka"
 Main.parameter.maxUploads=Maxim\u00e1ln\u00ed po\u010det simult\u00e1ln\u00edch upload\u016f
@@ -370,7 +371,6 @@ MyTorrentsView.menu.removeand.deletedata=Smazat &data
 MyTorrentsView.menu.removeand.deleteboth=Smazat .torrent &i data
 deletedata.title=!!! Upozorn\u011bn\u00ed !!! 
 deletedata.message1=Chyst\u00e1te se smazat data z :\n 
-deletedata.message2=\nOpravdu si p\u0159ejete pokra\u010dovat? 
 MainWindow.menu.file.configure=Spustit Pr\u016fvodce nastaven\u00ed 
 configureWizard.title=Pr\u016fvodce nastaven\u00ed
 configureWizard.welcome.title=V\u00edtejte v Pr\u016fvodci nastaven\u00ed 
@@ -502,7 +502,6 @@ ConfigView.section.tracker=Server
 ConfigView.section.tracker.pollinterval=Interval mezi dotazy klienta trackeru (sec)
 ConfigView.section.tracker.publishenable=Publikovat detaily o Torrentech do "<tracker_url>"
 ConfigView.section.tracker.ip=Ve\u0159ejn\u00e1 IP adresa trackeru
-MainWindow.menu.help.faq=&Wiki \u010cast\u00e9 dotazy
 ConfigView.section.style.enableXPStyle=Povolit XP styl (vy\u017eaduje restart programu)
 IPChecker.external.service.dyndns.description=Dynamick\u00fd DNS S\u00ed\u0165 srvis, LLC
 ConfigView.section.tracker.checkip=Zjistit ve\u0159ejnou IP adresu...
@@ -536,7 +535,6 @@ splash.openViews=Otev\u00edr\u00e1n\u00ed z\u00e1lo\u017eek
 splash.plugin=Na\u010d\u00edt\u00e1n\u00ed dopl\u0148ku : 
 configureWizard.nat.tooManyPorts=P\u0159\u00edli\u0161 mnoho port\u016f na testov\u00e1n\u00ed (maxim\u00e1ln\u011b 9) 
 ConfigView.section.color=Barevn\u00e9 sch\u00e9ma
-PeerSocket.unknown=Nezn\u00e1m\u00fd 
 MyTorrentsView.menu.publish=Publikovat... 
 MyTrackerView.status.published=Publikov\u00e1n
 MyTrackerView.completed=Dokon\u010den\u00ed 
@@ -552,9 +550,15 @@ IPChecker.external.service.no-ip.description=Poskytovatel dynamick\u00e9ho a sta
 ConfigView.section.tracker.publicenable=Povolit ve\u0159ejn\u00e9 torrenty
 ConfigView.label.playdownloadspeech=Ozn\u00e1mit, kdy je download (stahov\u00e1n\u00ed) ukon\u010den
 ConfigView.label.playdownloadspeech.info=Hovorov\u00e9 slu\u017eby pracuji jen v anglick\u00e9m jazyce
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Zobrazuje po\u010det dostupn\u00fdch kopi\u00ed ka\u017ed\u00e9ho d\u00edlu.\nPokud je \u010d\u00edslo vpravo men\u0161\u00ed ne\u017e 1, nejsou dostupn\u00e9 v\u0161echny d\u00edly souboru (a m\u016f\u017eete m\u00edt probl\u00e9m dokon\u010dit stahov\u00e1n\u00ed)
 GeneralView.label.trackerurl.tooltip=Kliknut\u00edm zkop\u00edrujete Oznamovac\u00ed URL do schr\u00e1nky
 GeneralView.label.trackerurlopen.tooltip=Kliknut\u00edm otev\u0159ete hlavn\u00ed str\u00e1nku serveru
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Aktualizovat UI (u\u017eivatelsk\u00e9 rozhran\u00ed) ka\u017ed\u00fdch
 ConfigView.section.style.graphicsUpdate=Aktualizovat grafy ka\u017ed\u00fdch N aktualizac\u00ed UI
 ConfigView.section.style.reOrderDelay=Se\u0159azovat tabulky ka\u017ed\u00fdch N aktualizac\u00ed UI [0: zak\u00e1zano]
@@ -691,7 +695,9 @@ health.explain.yellow=znamen\u00e1, \u017ee Tracker je v po\u0159\u00e1dku, jste
 health.explain.green=znamen\u00e1, \u017ee v\u0161e je v po\u0159\u00e1dku
 ConfigView.section.style.alwaysRefreshMyTorrents=Neust\u00e1le obnovovat Moje Torrenty
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Obnovovat okno Moje Torrenty, i kdy\u017e nen\u00ed zobrazeno (pro n\u011bkter\u00e9 dopl\u0148ky mIrc)
-ConfigView.section.style.verticaloffset=Vyrovn\u00e1n\u00ed vertik\u00e1ln\u00ed grafiky (oprava GTK)
+#
+#2.0.7.0
+#
 security.certtruster.title=Varov\u00e1n\u00ed bezpe\u010dnostn\u00edho certifik\u00e1tu
 security.certtruster.intro=Certifik\u00e1t byl vyd\u00e1n spole\u010dnost\u00ed, kter\u00e9 jste se rozhodli ned\u016fv\u011b\u0159ovat
 security.certtruster.resource=Zdroj:
@@ -747,6 +753,9 @@ ConfigView.section.style.dropdiraction=P\u0159eta\u017een\u00ed (T\u00e1hni a sp
 ConfigView.section.style.dropdiraction.opentorrents=Otev\u0159e torrenty
 ConfigView.section.style.dropdiraction.sharefolder=Nasd\u00edl\u00ed slo\u017eku
 ConfigView.section.style.dropdiraction.sharefoldercontents=Nasd\u00edl\u00ed obsah slo\u017eky
+#
+# 2.0.7.x
+#
 Categories.all=V\u0161e
 Categories.uncategorized=Neza\u0159azen\u00e9
 CategoryAddWindow.message=Jm\u00e9no nov\u00e9 kategorie
@@ -825,7 +834,6 @@ ConfigView.text.minutes=minut
 ConfigView.text.neverIgnore=Nikdy neignorovat
 ConfigView.text.any=jak\u00fdmkoliv
 DownloadManager.error.datamissing=Chyb\u011bj\u00edc\u00ed data
-iconBar.queue.tooltip=Fronta
 MainWindow.menu.file.open.torrentforseeding=.torrent soubor (pro distribuci)
 MainWindow.menu.language.refresh=&Obnovit
 ManagerItem.forced=Vynucen\u00e9
@@ -901,6 +909,9 @@ SpeedView.stats.uptime=Spu\u0161t\u011bno (hod)
 SpeedView.stats.now=Nyn\u00ed
 SpeedView.stats.now.tooltip=Celkov\u00fd (protokol)
 AutoMigration.useralert=V\u00fdsledky automatick\u00e9 migrace konfigura\u010dn\u00edch soubor\u016f:\n\n%1\n%2NEP\u0158ESUNUT\u00c9 SOUBORY MUS\u00cd P\u0158ESUNUTY RU\u010cN\u011a.
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Otev\u0159\u00edt Torrent(y)
 OpenTorrentWindow.message=Experiment\u00e1ln\u00ed
 OpenTorrentWindow.addFiles=&P\u0159idat soubory
@@ -1134,6 +1145,8 @@ MyTrackerView.badnat.info=Distrubuj\u00edc\u00ed/klienti, kter\u00fdm selhala ko
 ConfigView.section.tracker.natchecktimeout=Kontrola p\u0159ekro\u010den\u00ed \u010das. limitu (sec)
 ConfigView.section.file.perf.cache.enable=Spustit diskovou pam\u011b\u0165
 ConfigView.section.file.perf.cache.size=Velikost vyrovn\u00e1vac\u00ed pam\u011bti v %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=P&\u0159enos
 MainWindow.menu.transfers.startalltransfers=Sp&ustit v\u0161e
 MainWindow.menu.transfers.stopalltransfers=St&op v\u0161e
@@ -1217,8 +1230,6 @@ FilesView.fullpath=Zobrazit celou cestu
 FilesView.remaining=Zb\u00fdvaj\u00edc\u00ed d\u00edly
 TableColumn.header.trackername=N\u00e1zev trackeru
 TableColumn.header.trackername.info=N\u00e1zev serveru zalo\u017een\u00fd na ozn\u00e1men\u00ed URL
-ConfigView.label.announceport=P\u0159epsat oznamovac\u00ed port trackeru
-ConfigView.label.announceport.tooltip=Informuje tracker o tom, \u017ee naslouch\u00e1te na jin\u00e9m portu.\nVolba je ignorov\u00e1na pokud je pol\u00ed\u010dko pr\u00e1zdn\u00e9.
 ConfigView.group.override=P\u0159epsat mo\u017enosti
 ConfigView.section.file.perf.cache.notsmallerthan=Do vyrovn\u00e1vac\u00ed pam\u011bti nejdou men\u0161\u00ed soubory ne\u017e (v %1)
 PeersView.menu.blockupload=Blokov\u00e1n\u00ed odes\u00edl\u00e1n\u00ed
@@ -1249,8 +1260,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Velikost socketu SO_RCVBUF [0:
 ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Nastav\u00ed standartn\u00ed hodnotu socketu SO_RCVBUF (v bytech), co\u017e znamen\u00e1, \u017ee TCP p\u0159ijme velikost a pom\u011br okna.\nVuze toto nech\u00e1v\u00e1 na v\u00fdchoz\u00edch hodnot\u00e1ch (pro z\u00e1kladn\u00ed opera\u010dn\u00ed syst\u00e9m).\nPozn\u00e1mka : V Linuxu jsou hodnoty dvakr\u00e1t vy\u0161\u0161\u00ed.
 ConfigView.section.connection.advanced.SO_SNDBUF=Socket SO_SNDBUF velikost [0: pou\u017e\u00edt OS standart]
 ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Nastav\u00ed standartn\u00ed hodnotu socketu SO_SNDBUF (v bytech), co\u017e znamen\u00e1, \u017ee TCP po\u0161le velikost okna.\nVuze toto nastaven\u00ed nech\u00e1v\u00e1 na v\u00fdchoz\u00edch hodnot\u00e1ch (pro z\u00e1kladn\u00ed opera\u010dn\u00ed syst\u00e9m).\nPozn\u00e1mka : Pozn\u00e1mka : V Linuxu jsou hodnoty dvakr\u00e1t vy\u0161\u0161\u00ed.
-ConfigView.section.connection.advanced.IPTOS=Odchoz\u00ed packet typ slu\u017eby (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Nastavit provozn\u00ed t\u0159\u00eddu /typ slu\u017eby (TOS) pole v IP hlavi\u010dce pro odchoz\u00ed packety.\nVuze nech\u00e1v\u00e1 odchoz\u00ed nastaven\u00ed na v\u00fdchoz\u00edm nastaven\u00ed pro OS.\nP\u0159\u00edkladov\u00e9 hodnoty jsou:\n0x02 pro IPTOS_LOWCOST\n0x04 pro IPTOS_RELIABILITY\n0x08 pro IPTOS_THROUGHPUT\n0x10 pro IPTOS_LOWDELAY\nPozn\u00e1mka: Z\u00e1kladn\u00ed s\u00ed\u0165 ignoruje hodnoty, tato volba je z\u00e1visl\u00e1 na verzi OS a JRE.
 ConfigView.section.interface.confirm_torrent_removal=Zobrazit potvrzovac\u00ed dialog odstran\u011bn\u00ed  torrentu
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Potvr\u010fte p\u0159i odstran\u011bn\u00ed torrentu z Moje Torrenty.
 MyTorrentsView.confirm_torrent_removal=Jste si jist\u00ed, \u017ee to chceta odstranit?\n
@@ -1397,7 +1406,6 @@ Button.apply=Pou\u017e\u00edt
 Button.close=Zav\u0159\u00edt
 window.welcome.title=V\u00edtejte v Azureu %1
 #file can be a URL or a path in the jar
-window.welcome.file=/changelog.txt
 MainWindow.menu.help.releasenotes=Pozn\u00e1mky o vyd\u00e1n\u00ed
 dht.reseed.label=Norm\u00e1ln\u00ed znovudistribuce datab\u00e1ze nen\u00ed nutn\u00e9. Nicm\u00e9n\u011b je-li po\u010det p\u0159ipojen\u00ed n\u00edzk\u00fd, m\u016f\u017eete pou\u017e\u00edt znovuintegraci.\nPonechte pole pr\u00e1zdn\u00e9 pro samozaveden\u00ed p\u0159ipojen\u00fdch klient\u016f nebo vpi\u0161te IP adresu a port pro vylou\u010den\u00ed samozaveden\u00ed od zn\u00e1m\u00e9ho klienta.
 dht.reseed.group=Znovudistribuovat
@@ -1496,8 +1504,8 @@ Views.plugins.IRC.title=IRC - Online Technick\u00e1 popora
 Formats.units.persec=za s
 Formats.units.alot=Hodn\u011b !!!
 ConfigView.section.ipfilter.persistblocking=Ulo\u017eit blokovan\u00e9 detaily IP adres po restartu
-FilesView.rename.choose.path=Vyberte nov\u00fd nebo existuj\u00edc\u00ed soubor
 FilesView.menu.rename=P\u0159ejmenovat nebo zm\u011bnit c\u00edl
+FilesView.rename.choose.path=Vyberte nov\u00fd nebo existuj\u00edc\u00ed soubor
 FilesView.rename.confirm.delete.title=Potvr\u010fte  smaz\u00e1n\u00ed
 FilesView.rename.confirm.delete.text=Potvr\u010fte smaz\u00e1n\u00ed origin\u00e1ln\u00edho souboru '%1'
 ConfigView.section.mode=M\u00f3d
@@ -1575,6 +1583,7 @@ MyTorrentsView.dialog.NumberError.title=\u0160patn\u00e9 nebo nezn\u00e1m\u00e9
 MyTorrentsView.dialog.NumberError.text=\u010c\u00edslo, kter\u00e9 jste vlo\u017eili je \u0161patn\u00e9 nebo nezn\u00e1m\u00e9.
 MyTorrentsView.menu.manual=&Manu\u00e1l
 MyTorrentsView.dialog.setSpeed.title=Set %1 rychlost
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 MyTorrentsView.dialog.setNumber.text=Pro vstup zadejte \u010d\u00edslo %1 ke zm\u011bn\u011b %2 to:
 MyTorrentsView.dialog.setNumber.upload=odes\u00edl\u00e1n\u00ed
 MyTorrentsView.dialog.setNumber.download=stahov\u00e1n\u00ed
@@ -1694,6 +1703,7 @@ MyTorrentsView.menu.filter=Filtr list...
 ConfigureWizard.language.choose=Choose a language from the list below (Vyberte si jazyk z n\u00e1sleduj\u00edc\u00edch):
 popup.closing.in=Okno se samo zav\u0159e za %1 sekund.
 popup.more.waiting=%1 zb\u00fdvaj\u00edc\u00ed zpr\u00e1vy.
+# > 2402
 popup.download.finished="%1" dokon\u010dil stahov\u00e1n\u00ed.
 popup.file.finished="%1" dokon\u010dil stahov\u00e1n\u00ed.
 Plugin.localtracker.autoadd.info=Automaticky p\u0159id\u00e1vat tyto klienty (adresy odd\u011blte st\u0159edn\u00edkem ";"):
@@ -1796,13 +1806,8 @@ ConfigView.section.style.showiconbar=Zobrazit n\u00e1strojovou li\u0161tu
 MyTorrentsView.menu.rename=P\u0159ejmenovat
 MyTorrentsView.menu.rename.displayed=P\u0159ejmenovat zobrazen\u00e9 jm\u00e9no
 MyTorrentsView.menu.rename.save_path=P\u0159ejmenovat slo\u017eku, do kter\u00e9 se stahovan\u00e9 soubory ukl\u00e1daj\u00ed
-MyTorrentsView.menu.rename.displayed_and_save_path=P\u0159ejmenovat oboje
 MyTorrentsView.menu.rename.displayed.enter.title=P\u0159ejmenovat zobrazen\u00e9 jm\u00e9no
 MyTorrentsView.menu.rename.displayed.enter.message=Vpi\u0161te nov\u00e9 jm\u00e9no, kter\u00e9 se bude zobrazovat p\u0159i tomto stahov\u00e1n\u00ed.\nPokud nebude veps\u00e1t \u017e\u00e1dn\u00fd text, Vuze pou\u017eije p\u016fvodn\u00ed jm\u00e9no.
-MyTorrentsView.menu.rename.save_path.enter.title=P\u0159ejmenovat slo\u017eku, do kter\u00e9 se stahovan\u00e9 soubory ukl\u00e1daj\u00ed
-MyTorrentsView.menu.rename.save_path.enter.message=Vpi\u0161te nov\u00e9 jm\u00e9no pro toto stahov\u00e1n\u00ed\nPokud nebude veps\u00e1t \u017e\u00e1dn\u00fd text, Vuze pou\u017eije p\u016fvodn\u00ed jm\u00e9no.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=P\u0159ejmenovat stahov\u00e1n\u00ed
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Vpi\u0161te nov\u00e9 jm\u00e9no pro toto stahov\u00e1n\u00ed.\nPokud nebude veps\u00e1t \u017e\u00e1dn\u00fd text, Vuze pou\u017eije p\u016fvodn\u00ed hodnoty.
 UIDebugGenerator.messageask.text=Pros\u00edm zadejte popis chyby, kterou nahla\u0161ujete
 UIDebugGenerator.complete.title=Generace odstran\u011bn\u00ed chyb hotova
 UIDebugGenerator.complete.text=Pros\u00edm po\u0161lete soubor '%1'.\n\nKlikn\u011bte na OK pro otev\u0159en\u00ed okna k tomuto souboru.
@@ -1825,6 +1830,22 @@ progress.window.msg.filemove=Pros\u00edm \u010dekejte, dokud se soubor nep\u0159
 ConfigView.label.popup.timestamp=P\u0159idat \u010dasom\u00edru k vyskakovac\u00edm varov\u00e1n\u00edm
 ConfigView.label.popup.autohide=Automaticky skr\u00fdvat vyskakuj\u00edc\u00ed (nechybov\u00e9) hl\u00e1\u0161en\u00ed po x sekund\u00e1ch (vpi\u0161te 0 pro zak\u00e1z\u00e1n\u00ed automatick\u00e9ho skr\u00fdv\u00e1n\u00ed)
 ConfigView.label.please.visit.here=Pros\u00edm pod\u00edvejte se sem na detaily
-# The remaining keys were not in MessagesBundle.properties
-TorrentOptionsView.param.max.uploads.when.seeding.enable=N\u00e1hradn\u00ed upload slot pro seeding
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
+#
+# Used for peers which we can't determine.
+PeerSocket.unknown=Nezn\u00e1m\u00fd 
+ConfigView.label.announceport=P\u0159epsat oznamovac\u00ed port trackeru
+#v3.MainWindow.menu.view.configuration=Preferences
+#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
+#v3.TorrentOptionsView.title.short=Preferences
+#v3.TorrentOptionsView.title.full=Preferences
+#v3.ConfigView.title.short=Preferences
+#v3.ConfigView.title.full=Preferences
+iconBar.queue.tooltip=Fronta
+MainWindow.menu.help.faq=&Wiki \u010cast\u00e9 dotazy
+#what you've watched? Discover more with a single click...
 MainWindow.menu.help.donate=&Podpo\u0159it dotac\u00ed !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties b/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties
index a56d626..767ce6b 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Torrent Fil...
 MainWindow.menu.file.open.torrent.keybinding=Meta+o
 Main.parameter.usage=Brug : java org.gudy.azureus2.cl.Main (parametre) "fil.torrent" "lagringssti"
@@ -394,7 +395,6 @@ MyTorrentsView.menu.removeand.deletedata=Slet &Dataen
 MyTorrentsView.menu.removeand.deleteboth=Slet &Begge Dele
 deletedata.title=!!! Advarsel !!!
 deletedata.message1=Du er ved at slette data fra :\n
-deletedata.message2=\nEr du sikker p\u00e5 at du vil forts\u00e6tte?
 MainWindow.menu.file.configure=Guiden &Konfiguration
 configureWizard.title=Guiden til konfiguration
 configureWizard.welcome.title=Velkommen til Guiden Vuze Konfiguration
@@ -534,8 +534,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Klient opdateringsinterval (sekunder)
 ConfigView.section.tracker.publishenable=Udgiv Torrent detaljer p\u00e5 "<tracker_url>"
 ConfigView.section.tracker.ip=Trackerens eksterne IP adresse :
-MainWindow.menu.help.faq=&Ofte stillede sp\u00f8rgsm\u00e5l (FAQ)
-MainWindow.menu.help.faq.keybinding.mac=Meta+? 
 ConfigView.section.style.enableXPStyle=Aktiver Windows XP udseende (kr\u00e6ver genstart)
 IPChecker.external.service.dyndns.name=Dyn-DNS
 IPChecker.external.service.dyndns.url=http://www.dyndns.org
@@ -574,7 +572,6 @@ splash.openViews=\u00c5bner faneblade
 splash.plugin=Indl\u00e6ser tilf\u00f8jelse :
 configureWizard.nat.tooManyPorts=For mange porte at teste (9 max)
 ConfigView.section.color=Farvevalg
-PeerSocket.unknown=Ukendt
 MyTorrentsView.menu.publish=&Udgiv...
 MyTrackerView.status.published=Udgivet
 MyTrackerView.completed=Fuldf\u00f8rte
@@ -592,9 +589,15 @@ IPChecker.external.service.no-ip.description=Dynamisk og statisk DNS service udb
 ConfigView.section.tracker.publicenable=Tillad eksterne Torrents
 ConfigView.label.playdownloadspeech="Tal" n\u00e5r en dowmload er f\u00e6rdig
 ConfigView.label.playdownloadspeech.info=Tale servisen virker i \u00f8jeblikket bedst med engelsk
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Viser antal tilg\u00e6ngelige kopier af hvert stykke.\nHvis antallet til h\u00f8jre er lavere end 1, er der ikke en komplet kopi af filen tilg\u00e6ngelig\n(og der vil muligvis v\u00e6re problemer med at f\u00e6rdigg\u00f8re downloaden).
 GeneralView.label.trackerurl.tooltip=Klik for at kopiere annoncerings URL'en til udklipsholderen
 GeneralView.label.trackerurlopen.tooltip=Klik for at \u00e5bne trackerens hovedside
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Opdater brugergr\u00e6nsefladen (GUI) hver
 ConfigView.section.style.graphicsUpdate=Opdater de grafiske bj\u00e6lker for hver N GUI opdatering(er)
 ConfigView.section.style.reOrderDelay=Opdater tabeller for hver N GUI opdatering(er) (0 = aldrig)
@@ -732,7 +735,9 @@ health.explain.yellow=Betyder at trackeren er OK, du er forbundet til peers, men
 health.explain.green=Betyder at alt fungerer fint.
 ConfigView.section.style.alwaysRefreshMyTorrents=Opdater altid Mine Torrents
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Denne indstilling vil opdatere Mine Torrents fanebladet, selv n\u00e5r det ikke er synligt (kan v\u00e6re n\u00f8dvendigt ved brug af visse mirc tilf\u00f8jelser)
-ConfigView.section.style.verticaloffset=Lodret forskydning af grafik (GTK fix)
+#
+#2.0.7.0
+#
 security.certtruster.title=Certifikat Sikkerheds advarsel
 security.certtruster.intro=Sikkerhedscertifikatet er udstedt af et firma, som du ikke har tillid til
 security.certtruster.resource=Ressource :
@@ -790,6 +795,9 @@ ConfigView.section.style.dropdiraction=Tr\u00e6k og slip handling for mapper
 ConfigView.section.style.dropdiraction.opentorrents=\u00c5ben Torrents
 ConfigView.section.style.dropdiraction.sharefolder=Dele mappe
 ConfigView.section.style.dropdiraction.sharefoldercontents=Del indholdet
+#
+# 2.0.7.x
+#
 Categories.all=Alle
 Categories.uncategorized=Ingen kategori
 CategoryAddWindow.message=Navnet p\u00e5 den nye kategori :
@@ -868,7 +876,6 @@ ConfigView.text.minutes=minutter
 ConfigView.text.neverIgnore=Ignorer aldrig
 ConfigView.text.any=hvilken som helst
 DownloadManager.error.datamissing=Data mangler
-iconBar.queue.tooltip=S\u00e6t i k\u00f8
 MainWindow.menu.file.open.torrentforseeding=Torrent Fil... (Til seeding)
 MainWindow.menu.language.refresh=&Opdater
 ManagerItem.forced=Tvunget
@@ -947,6 +954,9 @@ SpeedView.stats.uptime=Uploadet i :
 SpeedView.stats.now=Nu :
 SpeedView.stats.now.tooltip=Total (Protokol)
 AutoMigration.useralert=Resultatet efter Automatisk migrering af Vuze brugers config filer/mapper :\n\n%1\nAlle auto-migreringer som mislykkedes SKAL migreres manuelt.\nHUSK AT OPDATERE LAGRINGS MAPPER OG STIER I KONFIGURATIONEN HVIS DE ER MIGRERET!
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=\u00c5ben Torrent(s)
 OpenTorrentWindow.message=Eksperimentel
 OpenTorrentWindow.addFiles=&Tilf\u00f8j filer
@@ -1190,6 +1200,8 @@ MyTrackerView.badnat.info=Seedere/Peers som ikke bestod en NAT kontrol
 ConfigView.section.tracker.natchecktimeout=Tjek "timeout" (sekunder)
 ConfigView.section.file.perf.cache.enable=Aktiver disk cache
 ConfigView.section.file.perf.cache.size=St\u00f8rrelse af cache i %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=O&verf\u00f8rsler
 MainWindow.menu.transfers.startalltransfers=St&art Alle
 MainWindow.menu.transfers.stopalltransfers=St&op Alle
@@ -1275,8 +1287,6 @@ FilesView.fullpath=Vis den fuldst\u00e6ndige sti
 FilesView.remaining=Resterende stykker :
 TableColumn.header.trackername=Tracker Navn 
 TableColumn.header.trackername.info=Trackerens navn baseret p\u00e5 annoncerings URL'en
-ConfigView.label.announceport=Underkend tracker annoncerings port
-ConfigView.label.announceport.tooltip=Informer trackeren hvis det er en anden port end den du "lytter" p\u00e5. Lad feltet st\u00e5 blankt hvis du ikke vil bruge denne valgmulighed.
 ConfigView.group.override=Underkende indstillinger
 ConfigView.section.file.perf.cache.notsmallerthan=Filer mindre end (i %1) skal ikke cashes
 PeersView.menu.blockupload=Bloker Upload
@@ -1306,8 +1316,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Socket SO_RCVBUF st\u00f8rrelse
 ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=S\u00e6tter standart socket SO_RCVBUF v\u00e6rdien (i bytes), i.e. TCP modtager vindus st\u00f8rrelse og skala.\nSom Vuze standart er feltet tomt, hvilket betyder at det er standarten for det underliggende operativsystem (OS) som bruges.\nOBS Linux fordobler den angivne v\u00e6rdi.
 ConfigView.section.connection.advanced.SO_SNDBUF=Socket SO_SNDBUF st\u00f8rrelse (0 = brug operativsystemets (OS) standart)
 ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=S\u00e6tter standart socket SO_SNDBUF v\u00e6rdien (i bytes), i.e. TCP sendte vindues st\u00f8rrelse.\nSom Vuze standart er feltet tomt, hvilket betyder at det er standarten for det underliggende operativsystem (OS) som bruges.\nOBS Linux fordobler den angivne v\u00e6rdi.
-ConfigView.section.connection.advanced.IPTOS=Udg\u00e5ende pakkers service type (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Bestemmer trafik klassen / "type-of-service" (TOS) omr\u00e5det i IP headeren for udg\u00e5ende pakker.\nVuze standart er blankt, hvilket betyder at standarten i det underliggende styresystem (OS) bliver brugt.\nV\u00e6rdi eksempler er :\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\nOBS : Underliggende netv\u00e6rksbestemmelser vil muligvis ignorere denne v\u00e6rdi, s\u00e5 valget er yderst afh\u00e6ngig af styresystem (OS) og Java (JRE) versionerne.
 ConfigView.section.interface.confirm_torrent_removal=Vis bekr\u00e6ftigelses dialogen inden en Torrent fjernes
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Bekr\u00e6ft handlingen n\u00e5r der fjernes en Torrent fra Mine Torrents.
 MyTorrentsView.confirm_torrent_removal=Er du sikker p\u00e5 du vil fjerne?\n
@@ -1456,7 +1464,6 @@ Button.apply=Tilf\u00f8j
 Button.close=Luk
 window.welcome.title=Velkommen til Vuze %1
 #file can be a URL or a path in the jar
-window.welcome.file=/changelog.txt
 MainWindow.menu.help.releasenotes=Udgivelsesnotater
 dht.reseed.group=Seed igen
 dht.reseed.ip=IP adrasse
@@ -1672,6 +1679,7 @@ MyTorrentsView.dialog.NumberError.title=Ugyldigt eller ikke genkendt nummer
 MyTorrentsView.dialog.NumberError.text=Nummeret du intastede er ugyldigt eller ikke genkendt
 MyTorrentsView.menu.manual=&Brugerdefineret...
 MyTorrentsView.dialog.setSpeed.title=V\u00e6lg %1 hastighed
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 MyTorrentsView.dialog.setNumber.text=Skriv et nummer %1 for at \u00e6ndre %2 til :
 MyTorrentsView.dialog.setNumber.upload=Upload
 MyTorrentsView.dialog.setNumber.download=Download
@@ -1779,7 +1787,6 @@ ConfigView.section.proxy.group.peer=Peer kommunikation
 Pieces.column.Requested=Anmodet :
 Pieces.column.Requested.info=Hvis der kan eller ikke kan foretages flere foresp\u00f8rgelser p\u00e5 stykket s\u00e5 vis det (*)
 ConfigView.label.maxuploadsseeding=Alternativ standart n\u00e5r der seedes
-MyTorrentsView.filter=Filter
 popup.error.hideall=Skjul Alle
 ConfigView.section.style.dataStatsOnly=Vis kun data statistikker (skjul protokol statistikker)
 ConfigView.section.style.separateProtDataStats=Vis adskilte data og protokol statistikker som "data (protokol)"
@@ -1792,6 +1799,7 @@ ConfigView.section.file.resume.recheck.all=Ved crash-genstart tjekkes hele filen
 ConfigureWizard.language.choose=V\u00e6lg sprog fra nedenst\u00e5ende liste :
 popup.closing.in=Vinduet lukkes automatisk om %1 sekunder
 popup.more.waiting=%1 flere besked(er)...
+# > 2402
 popup.next=> 
 popup.previous=< (%1) 
 popup.download.finished="%1" er f\u00e6rdig Downloadet.
@@ -1929,13 +1937,8 @@ MainWindow.menu.view.iconbar=V\u00e6rkt\u00f8jslinjen
 MyTorrentsView.menu.rename=Omd\u00f8b
 MyTorrentsView.menu.rename.displayed=Omd\u00f8b viste Torrent navn
 MyTorrentsView.menu.rename.save_path=Omd\u00f8b stien der gemmes til
-MyTorrentsView.menu.rename.displayed_and_save_path=Omd\u00f8b begge
 MyTorrentsView.menu.rename.displayed.enter.title=Omd\u00f8b viste Torrent navn
 MyTorrentsView.menu.rename.displayed.enter.message=Skriv et nyt navn som skal vises for denne download.\nHvis der ikke skrives en ny tekst, anvendes det originale navn.
-MyTorrentsView.menu.rename.save_path.enter.title=Omd\u00f8b stien der gemmes til
-MyTorrentsView.menu.rename.save_path.enter.message=Skriv et nyt navn p\u00e5 stien denne download gemmes til.\nHvis der ikke skrives en tekst, anvendes downloadens viste navn.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Omd\u00f8b Download 
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Skriv et nyt navn til denne download\nHvis der ikke skrives en ny tekst, anvendes de originale v\u00e6rdier.
 MyTorrentsView.menu.edit_comment=Rediger/Tilf\u00f8j en kommentar
 MyTorrentsView.menu.edit_comment.enter.title=Rediger/Tilf\u00f8j en kommentar
 MyTorrentsView.menu.edit_comment.enter.message=Skriv en kommentar til denne download.
@@ -1988,7 +1991,6 @@ ConfigView.section.connection.http.port=Indg\u00e5ende port nummer
 ConfigView.section.connection.http.portoverride=Underkendelse af tracker HTTP Port (0 = ingen)
 window.update.noupdates.title=kontroller opdaterings resultaterne
 window.update.noupdates.text=Tillykke din Vuze er optimal!\n\nDer er ingen nye opdateringer tilg\u00e6ngelige.
-ConfigView.label.bindip.info=F.eks, "192.168.1.2" eller "eth0" (aktuelle : %1)
 ConfigView.label.mindownloads=Minimum antal samtidige downloads
 UI.cannot_submit_blank_text=Du skal skrive en v\u00e6rdi.
 crypto.alert.as.warning=Netv\u00e6rket "%1" er kendt for at p\u00e5tvinge trafikregulering for at reducere download hastigheden. Kryptering af overf\u00f8rslen er automatisk blevet sl\u00e5et til - dette kan sl\u00e5s fra eller modificeres via konfigurations instillingerne.
@@ -1998,7 +2000,6 @@ popup.download.added="%1" er blevet tilf\u00f8jet til din Download liste.
 MessageBoxWindow.nomoreprompting=Sp\u00f8rg mig ikke igen
 TorrentOptionsView.param.max.seeds=Det maximale antal seed forbindelser (0 = forbindelses begr\u00e6nsning)
 TorrentOptionsView.param.alternative.value.enable=Alternativ v\u00e6rdi n\u00e5r der seedes
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Vis seperate menuer til "Omd\u00f8b" og "V\u00e6lg ny mappe" i fanen Filer
 ConfigView.section.proxy.check.on.start=Tjek proxy status ved start
 TransferStatsView.legend.pingaverage=Gennemsnit
 TransferStatsView.legend.ping1=Ping m\u00e5l 1
@@ -2034,34 +2035,10 @@ Peers.column.peer_byte_id=Peers ID
 Peers.column.peer_byte_id.info=Peers ID in byte form
 ConfigView.label.openbar.incomplete=Download bj\u00e6lke: auto \u00e5ben downloads
 ConfigView.label.openbar.complete=auto \u00e5ben seeds
-# The remaining keys were not in MessagesBundle.properties
-RatingPlugin.tooltip.avgRating=%1 (baseret p\u00e5 %2 Vurderinger)
-RatingPlugin.tooltip.yourRating=Din Vurdering er %1
-MySeeders.column.RatingColumn=Vurdering
-RatingPlugin.RatingWindow.personalRating=Persolig Vurdering :
-RatingPlugin.RatingWindow.rateBeforeComment=Du skal f\u00f8rst afgive din vurdering f\u00f8r du kan skrive en kommentar.
-RatingPlugin.RatingWindow.comments=Kommentar :
-RatingPlugin.RatingWindow.Button.clear=Ryd
-i2pnet.upnp_group=UPnP 
-i2pnet.i2p_options.info=Hvis du \u00e6ndrer Konfigurations instillingerne til router forbindelsen, skal du v\u00e6re forsigtig
-RatingPlugin.tooltip.noRating=%1 (Kigger efter Vurderinger)
-rating.config.nick=Bruger eller kaldenavn
-i2pnet.enable=Aktiver
-i2pnet.i2p_router_options=Router valgmuligheder
-MyTorrents.column.RatingColumn.info=En grafisk pr\u00e6sentation af den globale vurdering for torrenten som vises her.
-rating.config.title=Vurdering & Kommentar(er)
-i2pnet.upnp_port=I2P data port 
-RatingPlugin.RatingWindow.Button.ok=&OK 
-plugin.name=Grafisk 3D Visning
-i2pnet.name=I2P Netv\u00e6rk tilf\u00f8jelse
-i2pnet.i2p_router_group=I2P Router 
-RatingPlugin.RatingWindow.yourComment=Din Kommentar (H\u00f8jst 150 tegn) : 
-RatingPlugin.tooltip.numComments=%1 Kommentar(er)
-RatingPlugin.RatingWindow.title=Vurdering & Kommentar(er) for %1
-MyTorrents.column.RatingColumn=Vurdering
-MySeeders.column.RatingColumn.info=En grafisk pr\u00e6sentation af den globale vurdering for torrenten som vises her.
-i2pnet.i2p_router_port=Router port 
-RatingPlugin.contextmenu.manageRating=Vurdering && Kommentar(er)
-RatingPlugin.RatingWindow.globalRating=Global Vurdering : 
-i2pnet.i2p_router_host=Router v\u00e6rt
+# Used for peers which we can't determine.
+PeerSocket.unknown=Ukendt
+ConfigView.label.announceport=Underkend tracker annoncerings port
+iconBar.queue.tooltip=S\u00e6t i k\u00f8
+MainWindow.menu.help.faq=&Ofte stillede sp\u00f8rgsm\u00e5l (FAQ)
+MainWindow.menu.help.faq.keybinding.mac=Meta+? 
 MainWindow.menu.help.donate=&Giv et bidrag!!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties b/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties
index 0eac092..dd577a0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties
@@ -2482,7 +2482,6 @@ Subscription.menu.reset=Zur\u00fccksetzen in Ausgangszustand
 ConfigView.section.Subscriptions=Abonnements
 subscriptions.config.maxresults=Maximale Anzahl gespeicherter Ergebnissen pro Abonnement [0: unbegrenzt]
 v3.activity.button.readall=Alle als gelesen markieren
-ConfigView.interface.start.library=Starte in Bibliothek
 TableColumn.header.activityNew=Neu
 TableColumn.header.activityType=Typ
 TableColumn.header.activityText=Nachricht
@@ -2562,8 +2561,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Verbindung mit Abonnements
 Button.deleteContent.fromLibrary=Entferne aus Bibliothek
 Button.deleteContent.fromComputer=L\u00f6sche von Computer
 v3.deleteContent.message=\nSoll '%1' vom Computer gel\u00f6scht, oder nur aus der Vuze-Bibliothek entfernt werden?
-v3.library.infobar.text1=Auf der Suche nach der Erweiterten Ansicht?
-v3.library.infobar.text2=Nutze den Schalter oben in der Werkzeugleiste.
 v3.MainWindow.menu.view.toolbartext=Werkzeugleistentext
 v3.MainWindow.menu.view.asSimpleList=Einfache Liste
 v3.MainWindow.menu.view.asAdvancedList=Erweiterte Liste
diff --git a/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties b/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties
index 02782e3..06ae13f 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=\u0391\u03c1\u03c7\u03b5\u03af\u03bf .torrent 
 Main.parameter.usage=\u03a7\u03c1\u03ae\u03c3\u03b7 : java org.gudy.azureus2.cl.Main [\u03bf\u03c1\u03af\u03c3\u03bc\u03b1\u03c4\u03b1] "\u03b1\u03c1\u03c7\u03b5\u03af\u03bf.torrent" "\u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2" 
 Main.parameter.maxUploads=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf\u03c2 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c7\u03c1\u03bf\u03bd\u03c9\u03bd \u03b1\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd 
@@ -342,7 +343,6 @@ MyTorrentsView.menu.removeand.deletedata=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u0
 MyTorrentsView.menu.removeand.deleteboth=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae &\u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd \u03b4\u03cd\u03bf 
 deletedata.title=!!! \u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae !!! 
 deletedata.message1=\u03a0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03c4\u03b1 \u0394\u0395\u0394\u039f\u039c\u0395\u039d\u0391 \u03b1\u03c0\u03cc \u03c4\u03bf :\n 
-deletedata.message2=\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5; 
 MainWindow.menu.file.configure=&\u039f\u03b4\u03b7\u03b3\u03cc\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd 
 configureWizard.title=\u039f\u03b4\u03b7\u03b3\u03cc\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd 
 configureWizard.welcome.title=\u039a\u03b1\u03bb\u03c9\u03c3\u03ae\u03c1\u03b8\u03b1\u03c4\u03b5 \u03c3\u03c4\u03bf\u03bd \u039f\u03b4\u03b7\u03b3\u03cc \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03c4\u03bf\u03c5 Vuze
@@ -472,7 +472,6 @@ ConfigView.section.tracker=\u03a0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03c
 ConfigView.section.tracker.pollinterval=\u03a7\u03c1\u03cc\u03bd\u03bf\u03c2 \u03b1\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7\u03c2 \u03c0\u03b5\u03bb\u03ac\u03c4\u03b7 \u03c0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd (\u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1) 
 ConfigView.section.tracker.publishenable=\u0394\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b9\u03ce\u03bd torrent \u03c3\u03c4\u03bf "" 
 ConfigView.section.tracker.ip=\u03a0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7 \u0391\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd: \u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 IP 
-MainWindow.menu.help.faq=&\u03a3\u03c5\u03c7\u03bd\u03ad\u03c2 \u0395\u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2 
 ConfigView.section.style.enableXPStyle=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c3\u03c4\u03c5\u03bb XP (\u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7) 
 IPChecker.external.service.dyndns.name=DynDNS 
 IPChecker.external.service.dyndns.url=http://www.dyndns.org/ 
@@ -510,7 +509,6 @@ splash.initializeGui=\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b
 splash.openViews=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ce\u03bd 
 splash.plugin=\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 : 
 configureWizard.nat.tooManyPorts=\u03a5\u03c0\u03b5\u03c1\u03b2\u03bf\u03bb\u03b9\u03ba\u03ad\u03c2 \u03b8\u03cd\u03c1\u03b5\u03c2 \u03c0\u03c1\u03bf\u03c2 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae (\u03bc\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf 9) 
-PeerSocket.unknown=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf 
 MyTorrentsView.menu.publish=&\u0394\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7... 
 MyTrackerView.status.published=\u0394\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5 
 MyTrackerView.completed=\u039f\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5 
@@ -523,9 +521,15 @@ IPChecker.external.service.no-ip.name=No-IP
 IPChecker.external.service.no-ip.url=http://www.no-ip.com/ 
 IPChecker.external.service.no-ip.description=\u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u0394\u03c5\u03bd\u03b1\u03bc\u03b9\u03ba\u03bf\u03cd \u03ba\u03b1\u03b9 \u03a3\u03c4\u03b1\u03c4\u03b9\u03ba\u03bf\u03cd DNS\n(\u03b4\u03b5\u03bd \u03c0\u03c1\u03bf\u03c3\u03c6\u03ad\u03c1\u03b5\u03c4\u03b1\u03b9 \u03b4\u03c9\u03c1\u03b5\u03ac\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 '\u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03b4\u03b9\u03ad\u03c5\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2') 
 ConfigView.section.tracker.publicenable=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03ce\u03bd torrents 
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=\u0395\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03c4\u03bf\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03c9\u03bd \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03c9\u03bd \u03ba\u03ac\u03b8\u03b5 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd.\n\u0391\u03bd \u03c4\u03c5\u03c7\u03cc\u03bd \u03bf \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b9\u03ba\u03c1\u03cc\u03c4\u03b5\u03c1\u03bf\u03c2 \u03c4\u03bf\u03c5 1, \u03b4\u03b5\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03ad\u03bd\u03b1 \u03bf\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03c9\u03bc\u03ad\u03bd\u03bf \u03b1\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03bf \u03c4\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 (\u03ba\u03b1\u03b9 \u03af\u03c3\u03c9\u03c2 \u03ad\u03c7\u03b5\u03c4\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03b1 \u03bd\u03b1 \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03c3\u03b5\u03c4\u03b1\u03b9 \u03c4\u03b7 \u03bb\u03ae\u03c8\u03b7). 
 GeneralView.label.trackerurl.tooltip=\u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03c4\u03bf URL \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03ce\u03c3\u03b5\u03c9\u03bd \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf 
 GeneralView.label.trackerurlopen.tooltip=\u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03ba\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03a0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7\u03c2 \u0391\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd 
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 GUI \u03ba\u03b1\u03b8\u03b5 
 ConfigView.section.style.graphicsUpdate=\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7 \u0393\u03c1\u03b1\u03c6\u03b9\u03ba\u03ce\u03bd \u03c1\u03ac\u03b2\u03b4\u03c9\u03bd \u03ba\u03ac\u03b8\u03b5 N \u03b1\u03bd\u03b1\u03bd\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2 GUI 
 ConfigView.section.style.reOrderDelay=\u0391\u03bd\u03b1\u03ba\u03b1\u03c4\u03ac\u03c4\u03b1\u03be\u03b7 \u03c0\u03b9\u03bd\u03ac\u03ba\u03c9\u03bd \u03ba\u03ac\u03b8\u03b5 N \u03b1\u03bd\u03b1\u03bd\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2 GUI 
@@ -659,7 +663,9 @@ health.explain.yellow=\u03a3\u03b7\u03bc\u03b1\u03af\u03bd\u03b5\u03b9 \u03c0\u0
 health.explain.green=\u03a3\u03b7\u03bc\u03b1\u03af\u03bd\u03b5\u03b9 \u03c0\u03c9\u03c2 \u03cc\u03bb\u03b1 \u03c0\u03ac\u03bd\u03b5 \u03ba\u03b1\u03bb\u03ac. 
 ConfigView.section.style.alwaysRefreshMyTorrents=\u03a0\u03ac\u03bd\u03c4\u03b1 \u03bd\u03b1 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03a4\u03b1 Torrent \u03bc\u03bf\u03c5 
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0391\u03c5\u03c4\u03ae \u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03bd\u03b5\u03b9 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03c4\u03c9\u03bd Torrent \u03bc\u03bf\u03c5 \u03b1\u03ba\u03cc\u03bc\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd \u03b4\u03b5\u03bd \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 (\u03c7\u03c1\u03ae\u03c3\u03b9\u03bc\u03bf \u03b3\u03b9\u03b1 \u03ba\u03ac\u03c0\u03bf\u03b9\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 mIRC) 
-ConfigView.section.style.verticaloffset=\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c3\u03b7 \u0391\u03c0\u03cc\u03ba\u03bb\u03b9\u03c3\u03b7 \u0393\u03c1\u03b1\u03c6\u03b9\u03ba\u03ce\u03bd (\u0394\u03b9\u03cc\u03c1\u03b8\u03c9\u03c3\u03b7 GTK) 
+#
+#2.0.7.0
+#
 security.certtruster.title=\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd \u0391\u03c3\u03c6\u03b1\u03bb\u03b5\u03af\u03b1\u03c2 
 security.certtruster.intro=\u03a4\u03bf \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc \u03b1\u03c3\u03c6\u03b1\u03bb\u03b5\u03af\u03b1\u03c2 \u03ad\u03c7\u03b5\u03b9 \u03b5\u03ba\u03b4\u03bf\u03b8\u03b5\u03af \u03b1\u03c0\u03cc \u03bc\u03af\u03b1 \u03b5\u03c4\u03b1\u03b9\u03c1\u03af\u03b1 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03b5\u03bc\u03c0\u03b9\u03c3\u03c4\u03b5\u03cd\u03b5\u03c3\u03c4\u03b5 
 security.certtruster.resource=\u03a0\u03cc\u03c1\u03bf\u03c2: 
@@ -715,6 +721,9 @@ ConfigView.section.style.dropdiraction=\u0394\u03c5\u03bd\u03b1\u03c4\u03cc\u03c
 ConfigView.section.style.dropdiraction.opentorrents=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 Torrents 
 ConfigView.section.style.dropdiraction.sharefolder=\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03a6\u03b1\u03ba\u03ad\u03bb\u03bf\u03c5 
 ConfigView.section.style.dropdiraction.sharefoldercontents=\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd 
+#
+# 2.0.7.x
+#
 Categories.all=\u038c\u03bb\u03b5\u03c2
 Categories.uncategorized=\u03a7\u03c9\u03c1\u03af\u03c2 \u039a\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1
 CategoryAddWindow.message=\u0394\u03c9\u03c3\u03c4\u03b5 \u03b5\u03bd\u03b1 \u03bd\u03b5\u03bf \u03bf\u03bd\u03bf\u03bc\u03b1 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03b9\u03b1\u03c2
@@ -746,7 +755,6 @@ ConfigView.text.ignoreRule=\u039a\u03b1\u03bd\u03cc\u03bd\u03b1\u03c2 \u0391\u03
 ConfigView.text.minutes=\u03bb\u03b5\u03c0\u03c4\u03ac 
 ConfigView.text.neverIgnore=\u039d\u03b1 \u03bc\u03b7 \u03b3\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03c0\u03bf\u03c4\u03ad \u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7 
 DownloadManager.error.datamissing=\u0391\u03bd\u03cd\u03c0\u03b1\u03c1\u03ba\u03c4\u03b1 \u0394\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 
-iconBar.queue.tooltip=\u039b\u03af\u03c3\u03c4\u03b1 
 MainWindow.menu.file.open.torrentforseeding=\u0391\u03c1\u03c7\u03b5\u03af\u03bf .torrent (\u0393\u03b9\u03b1 \u03b4\u03b9\u03b1\u03bc\u03bf\u03b9\u03c1\u03b1\u03c3\u03bc\u03bf)
 MainWindow.menu.language.refresh=&\u0391\u03bd\u03b1\u03bd\u03b5\u03c9\u03c3\u03b7
 ManagerItem.forced=\u0395\u03be\u03b1\u03bd\u03b1\u03b3\u03ba\u03b1\u03c3\u03bc\u03cc\u03c2
@@ -795,6 +803,9 @@ SpeedView.stats.session=\u03a4\u03c9\u03c1\u03b9\u03bd\u03b7 \u03a3\u03c5\u03bd\
 SpeedView.stats.downloaded=\u0395\u03c7\u03bf\u03c5\u03bd \u03c0\u03b1\u03c1\u03b1\u03bb\u03b7\u03c6\u03b8\u03b5\u03b9
 SpeedView.stats.uploaded=\u0395\u03c7\u03bf\u03c5\u03bd \u03b1\u03c0\u03bf\u03c3\u03c4\u03b1\u03bb\u03b5\u03b9
 SpeedView.stats.uptime=\u03a7\u03c1\u03bf\u03bd\u03bf\u03c2 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b9\u03b1\u03c2
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=\u0395\u03bd\u03b5\u03c1\u03b3\u03b1 Torrent(s)
 OpenTorrentWindow.message=\u03a0\u03b5\u03b9\u03c1\u03b1\u03bc\u03b1\u03c4\u03b9\u03ba\u03bf
 OpenTorrentWindow.addFiles=&\u03a0\u03c1\u03bf\u03c3\u03b8\u03b7\u03ba\u03b7 \u03b1\u03c1\u03c7\u03b5\u03b9\u03c9\u03bd
@@ -910,6 +921,8 @@ upnp.mapping.dataportudp=UDP \u0398\u03c5\u03c1\u03b1 \u03a0\u03b5\u03bb\u03b1\u
 MainWindow.status.updowndetails.tooltip=\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b5\u03b9\u03b5\u03c2 \u03c4\u03b1\u03c7\u03c5\u03c4\u03b7\u03c4\u03b1\u03c2 \u039b\u03b7\u03c8\u03b7\u03c2/\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03b7\u03c2 - \u0391\u03bb\u03bb\u03b1\u03be\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03bc\u03b5 \u03b4\u03b5\u03be\u03b9 \u03ba\u03bb\u03b9\u03ba
 TrackerClient.announce.warningmessage=\u039f \u0399\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7\u03c2 \u03c4\u03bf\u03c5 '%1' \u03b5\u03c0\u03b5\u03c3\u03c4\u03c1\u03b5\u03c8\u03b5 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c3\u03b7 '%2'
 ConfigView.section.tracker.publishenabledetails=\u0394\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 torrent \u03ba\u03b1\u03b9 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b9\u03ce\u03bd \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03c9\u03bd 
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=&\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2
 MainWindow.menu.transfers.startalltransfers=&\u0395\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03b9\u03bd\u03b7\u03c3\u03b7 \u03bf\u03bb\u03c9\u03bd
 MainWindow.menu.transfers.stopalltransfers=&\u0394\u03b9\u03b1\u03ba\u03bf\u03c0\u03b7 \u03bf\u03bb\u03c9\u03bd
@@ -962,21 +975,32 @@ FilesView.fullpath=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c0\u03bb
 FilesView.remaining=\u0391\u03c0\u03bf\u03bc\u03ad\u03bd\u03bf\u03bd\u03c4\u03b1 \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9\u03b1
 TableColumn.header.trackername=\u038c\u03bd\u03bf\u03bc\u03b1 \u03b9\u03c7\u03bd\u03b7\u03bb\u03ac\u03c4\u03b7
 TableColumn.header.trackername.info=\u039f\u03bd\u03bf\u03bc\u03b1 \u0399\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7 \u03bc\u03b5 \u03b2\u03b1\u03c3\u03b7 \u03c4\u03b7 \u03b4\u03b9\u03b5\u03c5\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03c9\u03c3\u03b7\u03c2
-ConfigView.label.announceport=\u0391\u03bb\u03bb\u03b1\u03b3\u03b7 \u03b8\u03c5\u03c1\u03b1\u03c2 \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03c9\u03c3\u03b5\u03c9\u03bd \u03b9\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7
 ConfigView.group.override=\u0391\u03b3\u03bd\u03bf\u03b7\u03c3\u03b7 \u03c1\u03c5\u03b8\u03bc\u03b9\u03c3\u03b5\u03c9\u03bd
 ConfigView.label.overrideip=\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2 IP \u03c0\u03bf\u03c5 \u03b1\u03c0\u03bf\u03c3\u03c4\u03ac\u03bb\u03b8\u03b7\u03ba\u03b5 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd\n - \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03bc\u03cc\u03bd\u03bf \u03b1\u03bd \u03c0\u03c1\u03b1\u03b3\u03bc\u03b1\u03c4\u03b9\u03ba\u03ac \u03be\u03ad\u03c1\u03b5\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c0\u03b9\u03bf \u03bb\u03cc\u03b3\u03bf \u03c4\u03bf \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c3\u03c4\u03b5! 
 ConfigView.label.overrideip.tooltip=Inform the tracker of a different IP address than the one outgoing packets come from. Leave blank not to use the option.
+#file can be a URL or a path in the jar
 diagnostics.log_found=Vuze did not shutdown tidily. Please check %1 for diagnostic log files and consider reporting them to the Vuze team if this is the result of an application error.
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=\u0391\u03c1\u03c7\u03b5\u03b9\u03b1 Torrent:
 Button.moveUp=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03a0\u03ac\u03bd\u03c9 
 Button.moveDown=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u039a\u03ac\u03c4\u03c9 
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-configureWizard.nat.already_listening=\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae \u03b5\u03c0\u03b5\u03b9\u03b4\u03ae \u03b7 \u03b8\u03cd\u03c1\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \n\u03c3\u03b5 \u03c7\u03c1\u03ae\u03c3\u03b7. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b4\u03b9\u03b1\u03ba\u03cc\u03c8\u03c4\u03b5 \u03cc\u03bb\u03b1 \u03c4\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ac torrents \u03ba\u03b1\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03b9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf Azureus.\n\u0388\u03c0\u03b5\u03b9\u03c4\u03b1 \u03c4\u03c1\u03ad\u03be\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc \u03be\u03b1\u03bd\u03ac. 
-SelectorGuard.repairmessage=\u0395\u03b1\u03bd \u03bb\u03b1\u03bc\u03b2\u03b1\u03bd\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03bf \u03c4\u03bf \u03bc\u03b7\u03bd\u03c5\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03c9\u03c2 \u03ba\u03b1\u03b9 \u03b5\u03b9\u03c3\u03c4\u03b5 \u03c3\u03b9\u03b3\u03bf\u03c5\u03c1\u03bf\u03b9 \u03bf\u03c4\u03b9 \u03c4\u03bf \u03b4\u03b9\u03ba\u03c4\u03c5\u03bf \u03c3\u03b1\u03c2 \u03b5\u03b9\u03bd\u03b1\u03b9 \u03b5\u03bd\u03c4\u03b1\u03be\u03b5\u03b9, \u03ba\u03b1\u03b9 \u03b5\u03c7\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03ba\u03b4\u03bf\u03c3\u03b7 1.4 \u03c4\u03b7\u03c2 Java, \u03c4\u03bf\u03c4\u03b5 \u03bc\u03b1\u03bb\u03bb\u03bf\u03bd \u03b2\u03c1\u03b7\u03ba\u03b1\u03c4\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03b7\u03bc\u03b1 \u03c3\u03c4\u03bf JRE (\u03a3.\u03c4.\u03bc.: \u03a4\u03b9 \u03bb\u03b5\u03c2 \u03c4\u03c9\u03c1\u03b1!!) \u03ba\u03b1\u03b9 \u03b8\u03b1 \u03c0\u03c1\u03b5\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c4\u03bf \u03b1\u03bd\u03b1\u03b2\u03b1\u03b8\u03bc\u03b9\u03c3\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03bd\u03b5\u03c9\u03c4\u03b5\u03c1\u03b7 \u03b5\u03ba\u03b4\u03bf\u03c3\u03b7 1.5 (5.0) \u03b1\u03c0\u03bf \u03c4\u03bf http://java.sun.com
-MyTorrentsView.menu.setSpeed=\u039f\u03c1\u03b9\u03c3\u03bc\u03bf\u03c2 \u03a4\u03b1\u03c7\u03c5\u03c4\u03b7\u03c4\u03b1\u03c2
-ConfigView.label.oldpollingstyle=Use alternative socket polling - Increases CPU usage, but may help with network disconnects
+# > 2402
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
+#
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf 
+ConfigView.label.announceport=\u0391\u03bb\u03bb\u03b1\u03b3\u03b7 \u03b8\u03c5\u03c1\u03b1\u03c2 \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03c9\u03c3\u03b5\u03c9\u03bd \u03b9\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7
+#v3.MainWindow.menu.view.configuration=Preferences
+#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
+#v3.TorrentOptionsView.title.short=Preferences
+#v3.TorrentOptionsView.title.full=Preferences
+#v3.ConfigView.title.short=Preferences
+#v3.ConfigView.title.full=Preferences
+iconBar.queue.tooltip=\u039b\u03af\u03c3\u03c4\u03b1 
+MainWindow.menu.help.faq=&\u03a3\u03c5\u03c7\u03bd\u03ad\u03c2 \u0395\u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2 
+#what you've watched? Discover more with a single click...
 MainWindow.menu.help.donate=&\u039a\u03ac\u03bd\u03c4\u03b5 \u03bc\u03af\u03b1 \u0394\u03c9\u03c1\u03b5\u03b1(2\u20ac,5\u20ac,...) 
diff --git a/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties b/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties
index a6a3232..0b85ec0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties
@@ -1,27 +1,49 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
+MainWindow.menu.window.minimize=Minimise
+ConfigView.label.priorityExtensions=Auto-prioritise files with \n - eg: .txt;.nfo;.jpg
+ConfigView.label.closetotray=Close minimises to System Tray
+ConfigView.label.minimizetotray=Minimise minimises to System Tray
+ConfigView.label.startminimized=Start minimised
+ConfigView.label.zeronewfiles.tooltip=Minimises fragmentation
+splash.initializeGui=Initialising Main Window
+ConfigView.section.color=Colour Scheme
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
+#
+#2.0.7.0
+#
+ConfigView.label.prioritizefirstpiece=Prioritise first and last piece of file(s)
+#
+# 2.0.7.x
+#
+Categories.uncategorized=Uncategorised
+ConfigView.label.seeding.rankType.peer.tooltip=more peers and fewer seeds = higher rank\nThis ranking minimises the number of torrents that need to be kept active to maximise the upload
+#
+# > 2.0.8.0
+#
 ConfigView.section.style.colorOverrides=Colour Overrides
 ConfigView.section.style.colorOverrides.reset=Reset Colour
+splash.initializeGM=Initialising Global Torrent Manager
 download.removerules.unauthorised.info=Unauthorised torrents are those where the announce response contains either "not authoris(z)ed" or "unauthoris(z)ed" in the "failure response"
 download.removerules.unauthorised=Automatically remove unauthorised torrents
-ConfigView.section.color=Colour Scheme
-Categories.uncategorized=Uncategorised
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
+splash.plugin.init=Initialising Plugin:
+splash.plugin.UIinit=Initialising Plugin GUI: %1  
 ConfigView.section.connection.peersource.DHT=Decentralised tracking
 wizard.tracker.dht=Decentralised (Vuze clients only)
 ConfigView.section.sharing.permitdht=Allow decentralised tracking when tracker is unavailable
 dht.info=This plugin supports decentralised tracking, amongst other things, - disabling it will reduce your ability to download
+#file can be a URL or a path in the jar
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
+# > 2402
 UIDebugGenerator.message.cancel.title=Generate Debug Info Cancelled
+# Used for peers which we can't determine.
 FileDownload.canceled=A torrent file download has been successfully cancelled by a user action: %1
 Progress.reporting.status.canceled=Cancelled
 Progress.reporting.window.remove.auto.tooltip=Automatically remove all completed, failed, or cancelled processes from the view
 Progress.reporting.window.remove.now.tooltip=Remove all completed, failed, or cancelled processes from the view
-splash.plugin.init=Initialising Plugin:
-splash.plugin.UIinit=Initialising Plugin GUI: %1  
-splash.initializeGui=Initialising Main Window
-MainWindow.menu.window.minimize=Minimise
-ConfigView.label.priorityExtensions=Auto-prioritise files with \n - eg: .txt;.nfo;.jpg
-ConfigView.label.closetotray=Close minimises to System Tray
-ConfigView.label.minimizetotray=Minimise minimises to System Tray
-ConfigView.label.startminimized=Start minimised
-ConfigView.label.zeronewfiles.tooltip=Minimises fragmentation
-ConfigView.label.prioritizefirstpiece=Prioritise first and last piece of file(s)
-ConfigView.label.seeding.rankType.peer.tooltip=more peers and fewer seeds = higher rank\nThis ranking minimises the number of torrents that need to be kept active to maximise the upload
-splash.initializeGM=Initialising Global Torrent Manager
\ No newline at end of file
diff --git a/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties b/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties
index 644512d..c3b981c 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties
@@ -708,7 +708,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Esta opci\u00f3n refres
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Desplazamiento vertical de los gr\u00e1ficos (parche GTK)
 security.certtruster.title=Advertencia sobre el Certificado de Seguridad
 security.certtruster.intro=El certificado de seguridad fue emitido por una compa\u00f1\u00eda en la que no conf\u00edas
 security.certtruster.resource=Recurso:
@@ -1885,13 +1884,8 @@ MainWindow.menu.view.iconbar=Barra de Herramientas
 MyTorrentsView.menu.rename=Renombrar
 MyTorrentsView.menu.rename.displayed=Renombrar el Nombre mostrado
 MyTorrentsView.menu.rename.save_path=Renombrar la Ruta donde Guardar
-MyTorrentsView.menu.rename.displayed_and_save_path=Renombrar Ambos
 MyTorrentsView.menu.rename.displayed.enter.title=Renombrar el Nombre mostrado
 MyTorrentsView.menu.rename.displayed.enter.message=Escriba el nuevo nombre a mostrar para esta descarga.\nSi no escribe nada, se usar\u00e1 el nombre original.
-MyTorrentsView.menu.rename.save_path.enter.title=Renombrar la Ruta donde Guardar
-MyTorrentsView.menu.rename.save_path.enter.message=Escriba un nombre nuevo a la ruta donde guardar esta descarga.\nSi no se escribiera nada, se usar\u00e1 el nombre mostrado en la descarga.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Renombrar la Descarga
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Escriba el nuevo nombre de esta descarga.\nSi no se escribe nada, se usar\u00e1n los valores originales.
 MyTorrentsView.menu.edit_comment=Editar Comentario
 MyTorrentsView.menu.edit_comment.enter.title=Editar Comentario
 MyTorrentsView.menu.edit_comment.enter.message=Introduzca un comentario para esta descarga
@@ -2101,7 +2095,6 @@ v3.MainWindow.button.comment=Comentario
 v3.MainWindow.button.viewdetails=Ver Detalles
 v3.MainWindow.button.play=Reproducir
 v3.MainWindow.button.cancel=Cancelar
-v3.MainWindow.button.sendtofriend=Compartir Torrent
 v3.MainWindow.button.preview=Vista previa
 v3.MainWindow.view.wait=Inicializando la vista, espere por favor.
 v3.MainWindow.xofx=%1 de %2
@@ -2400,49 +2393,17 @@ Button.bar.share=Compartir
 Button.bar.add=Invitar a Amigos
 Button.bar.edit=Editar
 Button.bar.edit.cancel=Terminado de Editar
-v3.Share.menu=Compartir contenido
-v3.Share.header=Compartir
-v3.Share.header.message=Compartir con los amigos actuales o a\u00f1adir otros amigos nuevos.
-v3.Share.add.buddy=A\u00f1adir Amigos
-v3.Share.add.edit.buddy=A\u00f1adir/Editar Amigos
-v3.Share.add.buddy.all=Compartir con todos
-v3.Share.add.buddy.existing=Amigos existentes:
-v3.Share.add.buddy.new=Nuevos Amigos:
-v3.Share.buddies=Amigos
-v3.Share.invitees=Invitados
-v3.Share.invite.buddies.prompt=Invitar m\u00e1s amigos con los que compartir
-v3.Share.send.now=Enviar
-v3.Share.optional.message=Mensaje opcional entregado mediante la Lista de Actividad (m\u00e1ximo 140 caracteres):
-v3.Share.disclaimer=Nota: Se encriptar\u00e1 el contenido que compartes as\u00ed como este mensaje opcional.
-v3.Share.disclaimer.link=Saber m\u00e1s
-ConfigView.section.security.vuze.login=Debes estar registrado en Vuze para poder realizar esta operaci\u00f3n
-v3.buddy.menu.viewprofile=Ver Perfil
-v3.buddy.menu.remove=Quitar Amigo
 v3.MainWindow.menu.view.pluginbar=Barra de Complementos
-v3.activity.buddy-request=Tienes una solicitud de amigo procedente de %1
-v3.activity.buddy-request.accept=Aceptar
-v3.activity.buddy-request.multi=Tienes una solicitud del amigo [#%3] procedente de %1
-v3.activity.buddy-linkup=Desde ahora %1 y usted son amigos
-v3.activity.share-content.no-msg=%1 ha compartido %2 contigo
-v3.buddies.remove=Quitar amigo
-v3.buddies.add.to.share=A\u00f1adir amigo para Compartir
 MainWindow.dialog.select.vuze.file=Seleccione archivo Vuze
 MainWindow.menu.file.open.vuze=Archivo Vuze ...
-azbuddy.ui.dialog.disable.title=Desactivar el complemento Amigos
-azbuddy.ui.dialog.disable.text=Con el complemento amigos desactivado, no podr\u00e1 ni compartir torrents mediante la Barra de Amigos de la parte inferior de la aplicaci\u00f3n, ni modificar su lista de amigos\n\n\u00bfSeguro que quiere desactivarlo?
 metasearch.addtemplate.title=\u00bfInstalar la Plantilla de B\u00fasqueda?
 metasearch.addtemplate.desc=\u00bfEst\u00e1 seguro de querer instalar una plantilla de b\u00fasqueda de nombre '%1'?
 v3.share.private.title=Compartiendo Torrent
 v3.share.private.text=El torrent elegido viene marcado como Torrent Privado.\n\nNo puedes compartir torrents privados.
-v3.buddies.disabled.title=Complemento Amigos Desactivado
-v3.buddies.disabled.text._windows=Has desactivado el complemento amigos, lo que te impedir\u00e1 compartir con los amigos, aceptar sus torrents o sus solicitudes. Puedes cambiar tus preferencias en la pesta\u00f1a Opciones.
-v3.buddies.disabled.text._mac=Has desactivado el complemento amigos, lo que te impedir\u00e1 compartir con los amigos, aceptar sus torrents o sus solicitudes. Puedes cambiar tus preferencias en la pesta\u00f1a Opciones.
 metasearch.addtemplate.dup.title=Duplicar Plantilla
 metasearch.addtemplate.dup.desc=La plantilla de b\u00fasqueda %1 ya estaba instalada
 metasearch.export.select.template.file=Guardar Plantilla
 metasearch.import.select.template.file=Abrir Plantilla
-v3.MainWindow.button.newtag.share=Nuevo! Compartir Torrent
-v3.buddies.faq=Saber m\u00e1s
 dialog.uiswitch.title=Pasar al GUI de Vuze
 dialog.uiswitch.text=Para poder usar esto, necesitas estar usando el GUI de Vuze.\n\nVuze necesitar\u00e1 reiniciarse.
 dialog.uiswitch.button=Pasar al GUI de Vuze
@@ -2450,24 +2411,10 @@ azbuddy.tracker.enabled=Active 'Impulsar Amigos' para priorizar la descarga con
 azbuddy.protocolspeed=Carga m\u00e1x del protocolo de amigo en KB/s
 v3.MainWindow.button.download=Descarga
 v3.MainWindow.button.run=Ejecutar el archivo descargado
-v3.activity.header.friend.requests.foryou=Petici\u00f3n de Amigo - Para T\u00ed
-v3.activity.header.friend.requests.fromyou=Petici\u00f3n de Amigo - Desde T\u00ed
-v3.activity.header.friend.requests.accepted=Petici\u00f3n de Amigo - Aceptada
-v3.activity.header.share.requests=Compartir Peticiones de Torrent
 v3.activity.header.downloads=Descargas
 v3.activity.header.vuze.news=Noticias sobre Vuze
-login.optional.message=Debes estar identificado para poder usar esta caracter\u00edstica
-message.confirm.share.singular=\u00a1Excelente!  Se ha enviado su petici\u00f3n para compartir un torrent.
-message.confirm.share.plural=\u00a1Excelente!  Se han enviado sus peticiones para compartir un torrent.
-message.confirm.share.invite.singular=\u00a1Excelente!  Se ha enviado su petici\u00f3n para conectarse y compartir. Tambi\u00e9n puede intentar convencer amablemente a su amigo para que acepte.
-message.confirm.share.invite.plural=\u00a1Excelente!  Se han enviado sus peticiones para conectarse y compartir. Tambi\u00e9n puede intentar convencerlos amablemente para que acepten.
-message.confirm.invite.singular=\u00a1Excelente!  Se ha enviado su petici\u00f3n de amistad. Tambi\u00e9n puede intentar convencer amablemente a su amigo para que acepte.
-message.confirm.invite.plural=\u00a1Excelente!  Se han enviado sus peticiones de amistad. Tambi\u00e9n puede intentar convencerlos amablemente para que acepten.
-message.confirm.invite.error=\u00a1Mosquis! A esta petici\u00f3n se le ha cruzado alg\u00fan cable. Una o varias de tus invitaciones ten\u00eda errores.
-message.prompt.add.friends=Para compartir haga clic en los iconos de cada amigo situados en la parte inferior de la p\u00e1gina
 message.taking.too.long=Parece que esto se est\u00e1 tomando m\u00e1s tiempo del esperado\nPulse 'ESC' si quiere cancelar esta operaci\u00f3n
 message.status.success=Con \u00e9xito
-message.intro.friends=A\u00f1ada Amigos. Comparta Torrents. Descargue m\u00e1s r\u00e1pido
 azbuddy.tracker.bbb.status.title=Impulsar Amigos
 azbuddy.tracker.bbb.status.title.tooltip=Doble clic para ampliar detalles
 azbuddy.tracker.bbb.status.idle=Sin Impulsar
@@ -2476,13 +2423,8 @@ azbuddy.tracker.bbb.status.in=Estoy siendo Impulsado
 azbuddy.tracker.bbb.status.out=Impulsando a Amigos en este momento
 v3.MainWindow.search.go.tooltip=Ejecutar B\u00fasqueda
 v3.MainWindow.search.last.tooltip=Volver a los resultados de la b\u00fasqueda
-v3.activity.buddy-invited=Has enviado una petici\u00f3n de Amigo a %1.
-v3.activity.buddy-invited.multi=Has enviado una petici\u00f3n de Amigo a las siguientes personas:\n%1
 metasearch.addtemplate.done.title=Plantilla A\u00f1adida
 metasearch.addtemplate.done.desc=La plantilla '%1' se a\u00f1adi\u00f3 con \u00e9xito.\n\u00a1Se utilizar\u00e1 a partir de la pr\u00f3xima b\u00fasqueda!
-v3.MainWindow.button.share=Compartir contenido
-v3.buddies.remove.buddy.dialog.title=Confirmaci\u00f3n para Quitar amigo
-v3.buddies.remove.buddy.dialog.text=\u00bfSeguro que quieres borrar a %1 como amigo?
 ConfigView.section.security.nopw=Falta la contrase\u00f1a
 ConfigView.section.security.nopw_v=No se dispone de contrase\u00f1a, por favor ap\u00fantese en Vuze
 fileplugininstall.install.title=\u00bfInstalar el Complemento?
@@ -2496,12 +2438,7 @@ azbuddy.os_not_avail=No Disponible
 azbuddy.os_busy=Ocupado
 azbuddy.os_offline=Desconectado
 azbuddy.ui.menu.disconnect=Desconectar
-v3.chat.offline=%1 ahora est\u00e1 desconectado y recibir\u00e1 tu mensaje cuando vuelva a conectarse.
-v3.chat.wrongversion=%1 est\u00e1 utilizando una versi\u00f3n de Vuze que no tiene soporte de Chat.
 azbuddy.enable_chat_notif=Permitir las notificaciones de chat
-v3.buddies.dnd.info.dialog.title=Soltar Compartici\u00f3n
-v3.buddies.dnd.info.dialog.text=Has iniciado "Soltar Compartici\u00f3n". Tu contenido se est\u00e1 preparando para poder compartirlo; la pantalla de compartici\u00f3n se mostrar\u00e1 en cuanto est\u00e9 listo.\n\nTienes que mantener Vuze en funcionamiento para que tu Amigo reciba el contenido.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Clic aqu\u00ed</A> para obtener m\u00e1s informaci\u00f3n sobre esta caracter\u00edstica.
-v3.buddies.dnd.info.dialog.remember=No volver a mostrar este mensaje
 DetailedListView.title=Lista Detallada
 ConfigView.section.connection.network.max.outstanding.connect.attempts=N\u00ba m\u00e1x de conexiones salientes pendientes
 plugins.init.force_enabled=Vuze ha detectado que el complemento "%1" estaba desactivado - Ha sido reactivado para permitir a Vuze funcionar correctamente.
@@ -2552,14 +2489,11 @@ PluginDeprecation.view=Depuraci\u00f3n de Complementos
 PluginDeprecation.alert=Un complemento ha intentado usar una funcionalidad que ser\u00e1 eliminada en el futuro -para ampliar informaci\u00f3n abra por favor la vista del registro de Depuraci\u00f3n de Complementos.
 TableColumn.header.Thumbnail=Icono
 TableColumn.header.Thumbnail.info=El tama\u00f1o de la miniatura del contenido Vuze; para todos los dem\u00e1s contenidos, el sistema operativo proporcionar\u00e1 esos iconos.
-TableColumn.header.Rating_global=Valoraci\u00f3n
-TableColumn.header.Rating_global.info=La valoraci\u00f3n global de este contenido
 v3.MainWindow.menu.getting_started=&Primeros pasos
 MainWindow.menu.community=&Comunidad
 MainWindow.menu.help.faq=&Preguntas Frecuentes
 MainWindow.menu.community.forums=&Foros Comunitarios
 MainWindow.menu.community.blog=Blog de &Vuze
-MainWindow.menu.community.add_friends=&A\u00f1adir Amigos
 MainWindow.menu.help.support=&Ayuda and Soporte
 Button.done=Hecho
 GeneralView.torrent_created_on_and_by=%1 por %2
@@ -2571,7 +2505,6 @@ Button.remove=Eliminar
 Button.send=Enviar
 Button.back=Atr\u00e1s
 ConfigView.section.Subscriptions=Suscripciones
-ConfigView.interface.start.library=Iniciar en Biblioteca
 Wizard.Subscription.title=Subscribirse
 Wizard.Subscription.optin.title=Activar Suscripciones
 #what you've watched? Discover more with a single click...
@@ -2646,15 +2579,3 @@ xcode.deletedata.message.2=\n(todav\u00eda debe existir una copia en '%1')
 devices.converting=Convirtiendo
 Button.reload=Recargar
 devices.auto.start=Auto-iniciar
-# The remaining keys were not in MessagesBundle.properties
-v3.activity.header.xdaysago=Hace %1 D\u00edas
-%2=
-v3.Share.add.or.remove.buddy=Editar invitaciones
-v3.activity.header.today=Hoy
-v3.buddies.count=%1 Amigos
-v3.MainWindow.menu.view.buttonbar=Barra de Botones
-v3.activity.header.yesterday=Ayer
-v3.activity.header.xweeksago=Hace %1 Semanas
-v3.Share.selected.buddies=Amigos seleccionados
-v3.activity.header.1weekago=Hace 1 Semana
-deletedata.message2=\n\u00bfSeguro que quiere continuar?
diff --git a/org/gudy/azureus2/internat/MessagesBundle_eu.properties b/org/gudy/azureus2/internat/MessagesBundle_eu.properties
index 7d4f77c..6859e5d 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_eu.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_eu.properties
@@ -1,41 +1,28 @@
 #There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Torrent fitxategia...
-MainWindow.menu.file.open.torrent.keybinding=Meta+O
 Main.parameter.usage=Erabilera: java org.gudy.azureus2.cl.Main [parameters] "file.torrent" "save path"
 Main.parameter.maxUploads=Aldibereko karga-kopuru maximoa
 Main.parameter.maxSpeed=Karga-abiadura maximoa byte/seg-tan
 MainWindow.menu.file=&Fitxategia
 MainWindow.menu.file.open=&Ireki
 MainWindow.menu.file.create=&Torrent berria...
-MainWindow.menu.file.create.keybinding=Meta+N
 MainWindow.menu.file.create.fromfile=&Fitxategi batetik
 MainWindow.menu.file.create.fromdir=&Direktorio batetik
 MainWindow.menu.file.export=&Esportatu XML torrent-a...
-MainWindow.menu.file.export.keybinding=Meta+E
 MainWindow.menu.file.export.keybinding.mac=Meta+Shit+E
 MainWindow.menu.file.import=&Inportatu XML torrent-a...
-MainWindow.menu.file.import.keybinding=Meta+I
-MainWindow.menu.file.import.keybinding.mac=Meta+Shift+I
 MainWindow.menu.file.closetab=Itxi &fitxa
-MainWindow.menu.file.closetab.keybinding=Meta+W
 MainWindow.menu.file.closewindow=Itxi &leihoa
-MainWindow.menu.file.closewindow.keybinding=Meta+Shift+W
 MainWindow.menu.file.exit=I&rten
-MainWindow.menu.file.exit.keybinding=Alt+F4
 MainWindow.dialog.choose.file=Hautatu torrent fitxategia
 MainWindow.menu.file.folder=&Karpeta...
-MainWindow.menu.file.folder.keybinding=Meta+Shift+O
 MainWindow.dialog.choose.folder=Hautatu torrent fitxategien direktorioa
 MainWindow.menu.view=&Ikusi
 MainWindow.menu.view.show=Erakutsi
 MainWindow.menu.view.mytorrents=&Nire torrent-ak
-MainWindow.menu.view.mytorrents.keybinding=Meta+1
 MainWindow.menu.view.open_global_transfer_bar=Transferentzien barra
 MainWindow.menu.view.configuration=&Aukerak...
-MainWindow.menu.view.configuration.keybinding=Meta+,
 MainWindow.menu.view.console=K&ontsola
-MainWindow.menu.view.console.keybinding=Meta+4
-MainWindow.menu.view.irc=&IRC
 MainWindow.menu.view.allpeers=Pare guztiak
 MainWindow.menu.view.detailedlist=Zerrenda &xehea
 MainWindow.menu.closealldetails=Itxi xehetasun &guztiak
@@ -44,8 +31,6 @@ MainWindow.menu.language=&Hizkuntza
 ConfigView.section.language=Hizkuntza
 MainWindow.menu.window=&Leihoa
 MainWindow.menu.window.minimize=&Ikonotu
-MainWindow.menu.window.minimize.keybinding=Meta+M
-MainWindow.menu.window.zoom=&Zoom
 MainWindow.menu.window.alltofront=Mugitu denak &aurrera
 MainWindow.menu.help=La&guntza
 MainWindow.menu.help.about=Vuze-ri buruz
@@ -54,7 +39,6 @@ MainWindow.about.title=Honi buruz
 MainWindow.about.section.developers=Garatzaileak
 MainWindow.about.section.translators=Itzultzaileak
 MainWindow.about.section.system=Sistema
-MainWindow.about.section.internet=Internet
 MainWindow.about.internet.homepage=Vuze-ren webgunea
 MainWindow.about.internet.sourceforge=Proiektuaren webgunea Sourceforge-n
 MainWindow.about.internet.sourceforgedownloads=Sourceforge-ko deskargak
@@ -89,7 +73,7 @@ TableColumn.header.trackernextaccess=Hurrengo aztarnariaren atzipena
 TableColumn.header.trackernextaccess.info=Hurrengo aztarnariaren atzipena noiz gertatuko den
 TableColumn.header.priority=Lehentasuna
 TableColumn.header.priority.info=Torrent-ari ematen zaion banda-zabalera finkatzen du
-TableColumn.header.seeds.fullcopycalc=\ %1 parek onartutako %2 kopia oso
+TableColumn.header.seeds.fullcopycalc= %1 parek onartutako %2 kopia oso
 MyTorrentsView.menu.showdetails=Erakutsi &xehetasunak
 MyTorrentsView.menu.showdownloadbar=Erakutsi deskarga-&barra
 MyTorrentsView.menu.open=&Ireki fitxategia
@@ -110,7 +94,6 @@ PeersView.ip=IPa
 PeersView.ip.info=Parearen IPa
 PeersView.port=Ataka
 PeersView.port.info=Erabiltzen ari den ataka
-PeersView.T=T
 PeersView.T.info=L (lokala): zuk ezarri duzu konexioa, R (urrunekoa): pareak ezarri du konexioa.
 PeersView.T.L.tooltip=Zuk ezarri duzu konexioa
 PeersView.T.R.tooltip=Pareak ezarri du konexioa
@@ -119,7 +102,6 @@ PeersView.I1.info=Beste pareak duena interesatzen zaizu?
 PeersView.C1=C (Pareak buxatua)
 PeersView.C1.info=Pareak deskarga galarazten badizu
 PeersView.pieces=Atalak
-PeersView.%=%
 PeersView.downloadspeed=Deskarga-abiadura
 PeersView.download=Deskarga
 PeersView.I2=I (parearentzat interesgarria)
@@ -132,7 +114,6 @@ PeersView.upload=Kargatu
 PeersView.upload.info=Zure karga-abiadura osoa parearekiko
 PeersView.statup=Batez besteko karga
 PeersView.statup.info=Parearen karga-abiaduraren balio estimatua
-PeersView.S=S
 PeersView.S.info=Errefusatua: Pare bat eskuz "errefusa" daiteke, edo automatikoki (datuak abiadura motelegian bidaltzeagatik)
 PeersView.downloadspeedoverall=Deskarga-abiadura guztira
 PeersView.optunchoke=Auk. Ezabatu buxadura
@@ -174,7 +155,6 @@ ConfigView.label.autoupdate=Ireki berritze-leihoa bertsio berri bat eskuragarri
 ConfigView.label.openconsole=Ireki kontsola abioan
 ConfigView.label.openconfig=Ireki aukeren leihoa abioan
 ConfigView.label.startminimized=Abiatu ikonotuta
-ConfigView.section.irc=IRC
 ConfigView.label.ircwiki=Irakurri http://azureuswiki.com/index.php/Rules_for_IRC
 ConfigView.label.ircserver=Zerbitzaria
 ConfigView.label.ircchannel=Kanala
@@ -205,7 +185,6 @@ FilesView.name=Izena
 FilesView.name.fastRename=Berrizendatze azkarra
 FilesView.size=Tamaina
 FilesView.done=Egina
-FilesView.%=%
 FilesView.firstpiece=Lehen atala #
 FilesView.numberofpieces=# atal
 FilesView.pieces=Atalak
@@ -248,9 +227,9 @@ GeneralView.label.hash=Hash-a:
 GeneralView.label.numberofpieces=# atal 
 GeneralView.label.size=Tamaina: 
 GeneralView.label.tracker=Aztarnariaren egoera: 
-GeneralView.label.updatein=   Eguneratu hemen: 
+GeneralView.label.updatein=Eguneratu hemen: 
 GeneralView.label.trackerurl=Aztarnariaren URLa:
-GeneralView.label.trackerurlupdate= Eguneratu aztarnaria
+GeneralView.label.trackerurlupdate=Eguneratu aztarnaria
 GeneralView.label.comment=Torrent-aren iruzkina:
 GeneralView.label.user_comment=Erabiltzailearen iruzkina: 
 GeneralView.label.status=Egoera:
@@ -266,7 +245,6 @@ ManagerItem.high=altua
 ManagerItem.low=baxua
 MinimizedWindow.name=Izena:
 MinimizedWindow.all_transfers=Vuze-ren transferentziak
-PiecesView.#=#
 PiecesView.size=Tamaina
 PiecesView.numberofblocks=Blokeen #
 PiecesView.blocks=Blokeak
@@ -286,7 +264,6 @@ DownloadManager.error.unsupportedencoding=Onartzen ez den kodeketa
 DownloadManager.error.ioerror=IO errorea
 DownloadManager.error.sha1=(SHA1) errorea, ez dago algoritmo hori
 PeerManager.status.offline=Konexio-errorea
-PeerManager.status.ok=OK
 PeerManager.status.checking=Egiaztatzen
 PeerManager.status.finished=Amaitua
 PeerManager.status.finishedin=Amaitze-denbora
@@ -336,13 +313,11 @@ IrcView.errormsg=Sintaxi akastuna /msg : /msg erabiltzaile-testuan
 IrcView.help=Baliozko aginduak hauek dira:\n . /help: mezu hau erakusten du\n . /nick | /name: zure izena aldatzen du \n . /me action: ekintza bat bidaltzen du \n . /msg nick message: mezu pribatua bidaltzen dio <nick>-(e)ri\n . /r message: azken mezu pribatuari erantzuten dio\n . /join #channelB (ez egin klik hemen, adibide bat da): uneko kanaletik channelB-ra aldatzen du
 PasswordWindow.title=Vuze blokeatuta dago
 PasswordWindow.passwordprotected=Vuze pasahitzez babestuta dago.\nVuze-ren leihoa erakusteko, mesedez sartu zure pasahitza hemen:
-Button.ok=&OK
 TrackerChangerWindow.title=Gehitu aztarnaria
 TrackerChangerWindow.newtracker=Sartu aztarnari berriaren URLa
 PeersView.discarded=Baztertua
 PeersView.discarded.info=Nola edo hala jaso duzun datua, nahiz eta beharrezkoa ez izan, eta baztertu duzuna.
 discarded=baztertua
-MyTorrentsView.#=#
 MyTorrentsView.menu.move=&Mugitu
 MyTorrentsView.menu.moveUp=&Gora
 MyTorrentsView.menu.moveDown=&Behera
@@ -436,7 +411,6 @@ configureWizard.nat.title=NAT / Zerbitzari-ataka
 configureWizard.nat.message=Vuze-k eman dezakeen onena eskuratzeko, biziki aholkatzen da Internetetik erabat atzigarria izatea. Tresna honek sarrerako pare-konexioak onartzeko erabilitako ataka probatzen eta/edo aldatzen laguntzen du.\n\nOHARRA: Tresna honek TCP konexioak probatzen ditu soilik. DB banatuak sarrerako UDP konexioak ere behar ditu, baina automatikoki jakinaraziko dizu suebaki blokeatzailea aurkitzen badu.\n\nOHARRA: 6880 TCP ataka barne-funtzioetarako erreserbatuta dago eta, beraz, ezin da erabili.
 configureWizard.nat.test=Probatu
 configureWizard.nat.testing=Ataka probatzen:
-configureWizard.nat.ok=OK !
 configureWizard.nat.ko=NAT errorea
 configureWizard.nat.unable=Ezin izan da proba egin: Okerreko ataka eman da, edo probarako zerbitzuak huts egin du.\nAgian beste aplikazio bat ataka hau erabiltzen ari da.
 configureWizard.file.title=Torrent-ak / Fitxategiak
@@ -501,9 +475,9 @@ ConfigView.section.stats.enable=Gaitu
 ConfigView.section.stats.defaultsavepath=Estatistikak gordetzeko direktorioa
 ConfigView.section.stats.choosedefaultsavepath=Hautatu estatistikak gordetzeko direktorioa 
 ConfigView.section.stats.savefreq=Gordetze-maiztasuna
-ConfigView.section.stats.minutes=\ minutu
-ConfigView.section.stats.hours=\ ordu
-ConfigView.section.stats.seconds=\ segundo
+ConfigView.section.stats.minutes= minutu
+ConfigView.section.stats.hours= ordu
+ConfigView.section.stats.seconds= segundo
 ConfigView.section.stats.savefile=Estatistiken fitxategi-izena
 ConfigView.section.stats.graph_update_dividers=Erakutsi linea bertikala 60 eguneraketen multzoetarako
 MyTorrentsView.menu.export=&XML torrent-a...
@@ -515,7 +489,6 @@ ConfigView.label.movecompleted=Mugitu osatutako fitxategiak (deskargatu ondoren)
 ConfigView.label.moveremoved=Mugitu osatutako fitxategiak (ezabatzerakoan)
 ConfigView.label.savetorrents=Gorde .torrent fitxategiak
 MainWindow.menu.view.mytracker=Nire a&ztarnaria
-MainWindow.menu.view.mytracker.keybinding=Meta+2
 MyTrackerView.title.full=Nire aztarnaria
 MyTrackerView.name=Izena
 MyTrackerView.tracker=Aztarnaria
@@ -543,7 +516,6 @@ fileDownloadWindow.state_initializing=Hasieratzen
 fileDownloadWindow.state_downloading=Deskargatzen
 fileDownloadWindow.state_error=Errorea: 
 MainWindow.menu.file.open.url=&Kokalekua...
-MainWindow.menu.file.open.url.keybinding=Meta+L
 openUrl.title=Ireki kokalekua
 openUrl.url=URLa:
 MyTorrentsView.menu.host.error.title=Torrent-aren ostatatzeak huts egin du
@@ -552,10 +524,7 @@ ConfigView.section.tracker=Aztarnaria
 ConfigView.section.tracker.pollinterval=Aztarnariaren bezeroa zenbatero zundatuko den (segundoak)
 ConfigView.section.tracker.publishenable=Argitaratu torrent-aren xehetasunak "<tracker_url>"-era
 ConfigView.section.tracker.ip=Aztarnariaren kanpoko IP helbidea
-
 ConfigView.section.style.enableXPStyle=Gaitu XP estiloa (beharrezkoa da berrabiaraztea)
-IPChecker.external.service.dyndns.name=DynDNS
-IPChecker.external.service.dyndns.url=http://www.dyndns.org/
 IPChecker.external.service.dyndns.description=DNS Dinamikoko Sare Zerbitzuak, LLC
 ConfigView.section.tracker.checkip=Automatikoki aurkitu kanpoko IP helbidea...
 ipCheckerWizard.title=IPa egiaztatzeko morroia
@@ -569,13 +538,11 @@ ipCheckerWizard.checkComplete=IP osatua:
 ipCheckerWizard.checkFailed=Huts egin du, arrazoia:
 wizard.tracker.local=Erabili Vuze-k kapsulatuta daraman aztarnaria
 wizard.tracker.external=Erabili kanpoko aztarnaria
-wizard.tracker.howToLocal=	Joan 'Tresnak->Aukerak->Aztarnaria' aukerara aztarnaria gaitzeko
+wizard.tracker.howToLocal=Joan 'Tresnak->Aukerak->Aztarnaria' aukerara aztarnaria gaitzeko
 wizard.announceUrl=Iragarpen URLa:
-IPChecker.external.service.discoveryvip.name=Discoveryvip
-IPChecker.external.service.discoveryvip.url=http://ip.discoveryvip.com/
 IPChecker.external.service.discoveryvip.description=Discoveryvip - IP helbidearen egiaztatzea soilik
 IPChecker.external.httpinvalidresponse=HTTP erantzun baliogabea
-IPChecker.external.loadingwebpage= Web orria kargatzen
+IPChecker.external.loadingwebpage=Web orria kargatzen
 IPChecker.external.analysingresponse=Erantzuna aztertzen
 IPChecker.external.addressextracted=Erauzitako IP helbidea
 IPChecker.external.httploadfail=Orria kargatzeak huts egin du
@@ -595,15 +562,12 @@ MyTorrentsView.menu.publish=Ar&gitaratu...
 MyTrackerView.status.published=Argitaratua
 MyTrackerView.completed=Osatua
 MainWindow.menu.file.open.torrentnodefault=Torrent fitxategia... (ez gorde lehenetsi gisa)
-MainWindow.menu.file.open.torrentnodefault.keybinding.mac=Meta+Opt+O
 wizard.comment=Iruzkina
 ConfigView.label.movetorrent=Mugitu .torrent-a
 ConfigView.label.movepartialdownloads=Mugitu fitxategi batzuk "Ez deskargatu" bandera eduki arren
 ConfigView.label.subdir_is_in_default=Deskargak direktorio lehenetsi batean existitzen ote diren aztertzean, aztertu azpidirektorioak ere. 
 ConfigView.section.file.decoder.label=Torrent kodifikazio lehenetsia hautaketak hala eskatzen duenean
 ConfigView.section.file.decoder.nodecoder=Bat ere ez
-IPChecker.external.service.no-ip.name=No-IP
-IPChecker.external.service.no-ip.url=http://www.no-ip.com/
 IPChecker.external.service.no-ip.description=DNS zerbitzu dinamiko eta estatikoen hornitzailea (ez dauka 'egiaztatu helbidea' zerbitzu librerik)
 ConfigView.section.tracker.publicenable=Gaitu kanpoko torrent-ak
 ConfigView.label.playdownloadspeech=Hitz egin deskarga amaitutakoan
@@ -614,7 +578,6 @@ ConfigView.label.playdownloadspeech.info=Hizketa-zerbitzuak hobeto dabiltza inge
 GeneralView.label.status.pieces_available.tooltip=Bistaratu atal bakoitzaren kopia eskuragarrien kopurua.\nEskuineko zenbakia 1 baino txikiagoa bada, ez zaude ikusten fitxategiaren kopia oso bat (eta arazoak egon daitezke deskarga burutzeko).
 GeneralView.label.trackerurl.tooltip=Egin klik iragarpen URLa arbelera kopiatzeko
 GeneralView.label.trackerurlopen.tooltip=Egin klik aztarnariaren orri nagusia irekitzeko
-
 #
 # 2.0.4.4
 #
@@ -740,9 +703,7 @@ ConfigView.section.plugins=Plugin-ak
 wizard.maketorrent.filesize=Fitxategien tamaina
 wizard.maketorrent.piececount=Atal-kopurua
 wizard.maketorrent.piecesize=Atalen tamaina
-wizard.maketorrent.auto=Auto
 MainWindow.menu.view.stats=&Estatistikak
-MainWindow.menu.view.stats.keybinding=Meta+5
 SpeedView.title.full=Jarduera
 SpeedView.downloadSpeed.title=Deskarga-abiadura
 SpeedView.uploadSpeed.title=Karga-abiadura
@@ -761,10 +722,9 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Aukera honek 'Nire torr
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Grafikoen desplazamendu bertikala (GTK konponketa)
 security.certtruster.title=Segurtasun-ziurtagirien abisua
 security.certtruster.intro=Segurtasun-ziurtagiria fidagarritasunik onartu ez diozun konpainia batek jaulki du
 security.certtruster.resource=Baliabidea:
 security.certtruster.issuedto=Nori jaulkia:
 security.certtruster.issuedby=Nork jaulkia:
-security.certtruster.prompt=Fidagarritasuna onartu nah
\ No newline at end of file
+security.certtruster.prompt=Fidagarritasuna onartu nah
diff --git a/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties b/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties
index ad3034b..af75d57 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties
@@ -46,7 +46,7 @@ MainWindow.about.internet.sourceforge=SourceForge.netin projektisivu
 MainWindow.about.internet.sourceforgedownloads=SourceForge.netin lataussivu 
 MainWindow.about.internet.bugreports=Ohjelmavirheilmoitukset
 MainWindow.about.internet.forumdiscussion=Keskustelualueet
-MainWindow.about.internet.wiki=Wiki (UKK)
+MainWindow.about.internet.wiki=Vuze Wiki (UKK)
 MainWindow.dialog.choose.savepath=Valitse tallennushakemisto 
 MainWindow.dialog.choose.savepath_forallfiles=Valitse tallennushakemisto kaikille tiedostoille 
 MainWindow.status.latestversion=Uusin virallinen versio:
@@ -649,7 +649,7 @@ wizard.multitracker=M\u00e4\u00e4rit\u00e4 useita seurantapalvelimia
 wizard.multitracker.title=Seurantapalvelimien valitseminen
 wizard.multitracker.configuration=Valmiit p\u00e4\u00e4ryhm\u00e4t:
 wizard.multitracker.new=Uusi...
-wizard.multitracker.edit=Muokkaa..
+wizard.multitracker.edit=Muokkaa...
 wizard.multitracker.delete=Poista
 wizard.multitracker.group=Seurantapalvelinryhm\u00e4
 wizard.multitracker.edit.title=Seurantapalvelimien muokkaus
@@ -995,7 +995,7 @@ GenericText.column=-sarake
 MyTorrentsView.menu.thisColumn.remove=Poista sarake n\u00e4kyvist\u00e4
 MyTorrentsView.menu.thisColumn.toClipboard=Kopioi teksti leikep\u00f6yd\u00e4lle
 MyTorrentsView.menu.thisColumn.autoTooltip=N\u00e4yt\u00e4 aina ty\u00f6kaluvihje
-MyTorrentsView.menu.tracker=Seurantapalvelin
+MyTorrentsView.menu.tracker=Seurantapalvelin/Torrent
 ConfigView.download.abbreviated=Lad:
 ConfigView.upload.abbreviated=L\u00e4h:
 ConfigView.complete.abbreviated=Valm:
@@ -2233,8 +2233,8 @@ PeerSocket.unknown=Tuntematon
 PeerSocket.fake_client=V\u00e4\u00e4renne
 PeerSocket.bad_peer_id=Kelpaamaton tunniste
 PeerSocket.mismatch_id=Poikkeama
-PeerSocket.unknown_az_style=Tuntematon %1/%2
-PeerSocket.unknown_shadow_style=Tuntematon %1/%2
+PeerSocket.unknown_az_style=Tuntematon %1 %2
+PeerSocket.unknown_shadow_style=Tuntematon %1 %2
 OpenTorrentWindow.mb.askCreateDir.title=Tallennushakemistoa ei ole olemassa
 OpenTorrentWindow.mb.askCreateDir.text=Tallennushakemistoa '%1' ei ole olemassa.\n\nLuodaanko se nyt?
 SpeedView.stats.estimatechoke=arvio, esto
@@ -2427,8 +2427,8 @@ Button.bar.show=N\u00e4yt\u00e4
 Button.bar.hide=Piilota
 Button.bar.share=Jaa
 Button.bar.add=Lis\u00e4\u00e4
-Button.bar.edit=Editoi
-Button.bar.edit.cancel=Editointi valmis
+Button.bar.edit=Muokkaa
+Button.bar.edit.cancel=Muokkaus valmis
 v3.MainWindow.menu.view.pluginbar=Lis\u00e4osat-palkki
 MainWindow.dialog.select.vuze.file=Valitse Vuze-tiedosto
 MainWindow.menu.file.open.vuze=Vuze-tiedosto...
@@ -2513,7 +2513,6 @@ TableColumn.header.unopened=Uusi
 Unopened.bigView.header=Uusi
 ConfigView.section.Subscriptions=Tilaukset
 v3.activity.button.readall=Merkitse kaikki luetuiksi
-ConfigView.interface.start.library=K\u00e4ynnist\u00e4 Kirjastossa
 TableColumn.header.activityNew=Uusi
 TableColumn.header.activityType=Tyyppi
 TableColumn.header.activityText=Viesti
@@ -2545,8 +2544,6 @@ v3.iconBar.down.tooltip=Siirr\u00e4 alas\nPid\u00e4 hiirt\u00e4 painettuna siirt
 Button.deleteContent.fromLibrary=Poista Vuzen kirjastosta
 Button.deleteContent.fromComputer=Poista tietokoneelta
 v3.deleteContent.message=\nHaluatko poistaa '%1' my\u00f6s tietokoneeltasi, vai poistaa sen vain Vuzen kirjastosta?
-v3.library.infobar.text1=Etsitk\u00f6 yksityiskohtaista luetteloa?
-v3.library.infobar.text2=K\u00e4yt\u00e4 yll\u00e4olevaa N\u00e4kym\u00e4-valintaa.
 v3.MainWindow.menu.view.toolbartext=Ty\u00f6kalupalkin tekstit
 v3.MainWindow.menu.view.asSimpleList=Yksinkertainen luettelo
 v3.MainWindow.menu.view.asAdvancedList=Kehittynyt luettelo
@@ -2688,3 +2685,21 @@ webui.pairing.info.y=Paritus on mahdollista. Katso lis\u00e4tietoja Yhteys->Pari
 webui.enable=Toiminto k\u00e4yt\u00f6ss\u00e4 (*)
 ConfigView.section.rss=Paikallinen RSS jne.
 Button.removeAll=Poista kaikki
+label.rename=Uudelleennime\u00e4 %1
+RCM.column.rc_rank=Sija
+RCM.column.rc_created=Luotu
+RCM.column.rc_hash=Tiiviste
+RCM.column.rc_lastseen=Viimeksi n\u00e4hty
+RCM.column.rc_level=Taso
+RCM.column.rc_tracker=Seurantapalvelin
+rcm.view.heading=Naapuritorrentit
+rcm.config.enabled=K\u00e4yt\u00f6ss\u00e4
+rcm.config.max_results=Tuloksia enint\u00e4\u00e4n
+rcm.config.max_level=Maksimitaso
+rcm.search.provider=Parvi
+wizard.webseedseditor.edit.title=HTTP-l\u00e4hteiden muokkaus
+wizard.webseedseditor.edit.newseed=Uusi l\u00e4hde
+MyTorrentsView.menu.editWebSeeds=Muokkaa HTTP-l\u00e4hteit\u00e4
+ClientStats.title.full=Asiakasohjelma-tilastot
+ClientStats.column.count=M\u00e4\u00e4r\u00e4
+Scrape.status.cached=Pikap\u00e4ivitys v\u00e4limuistista
diff --git a/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties b/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties
index c8d6423..c49efbd 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties
@@ -679,7 +679,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Cette option force la m
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=D\u00e9calage graphique vertical (corrige le bogue avec GTK)
 security.certtruster.title=Avertissement du certificat de s\u00e9curit\u00e9
 security.certtruster.intro=Le certificat de s\u00e9curit\u00e9 provient d'une compagnie \u00e0 laquelle vous ne faites pas confiance
 security.certtruster.resource=Ressource:
@@ -1481,7 +1480,6 @@ FilesView.rename.choose.path=Choisir un fichier nouveau ou existant
 FilesView.rename.confirm.delete.title=Confirmer la suppression
 FilesView.rename.confirm.delete.text=Confirmer la suppression du fichier original %1
 ConfigView.higher.mode.available=\t
-\nD'autres options sont disponibles dans le mode utilisateur avanc\u00e9
 ConfigView.section.mode.title=Niveau utilisateur
 ConfigView.section.mode.beginner=D\u00e9butant
 ConfigView.section.mode.beginner.wiki.definitions=Vocabulaire BitTorrent
@@ -1659,7 +1657,6 @@ DownloadManager.error.badsize=Taille incorrecte
 authenticator.savepassword=Retenir mon mot de passe
 Content.alert.notuploaded.text=Le partage  de "% 1" n'est pas termin\u00e9. Si vous avez 2% aujourd'hui, les gens ne seront pas en mesure de t\u00e9l\u00e9charger compl\u00e8tement vos fichiers publi\u00e9s. \n\nVoulez-vous vraiment 2%? 
 Content.alert.notuploaded.multi.text=\t
-\n1% de votre contenu publi\u00e9 n'est pas compl\u00e8tement partag\u00e9. Si vous avez 2% aujourd'hui, les gens ne seront pas en mesure de t\u00e9l\u00e9charger compl\u00e8tement vos fichiers publi\u00e9s. \u00cates-vous s\u00fbr de ne pas vouloir% 2?\n\nContinuer \u00e0 partager?\n%3 
 Content.alert.notuploaded.stop=arr\u00eater
 Content.alert.notuploaded.quit=Quitter Vuze
 ConfigView.label.popup.show=Voir tous les popups d'alerte enregistr\u00e9s \u00e0 ce jour (le cas \u00e9ch\u00e9ant)
@@ -1716,7 +1713,6 @@ v3.MainWindow.button.comment=Commenter
 v3.MainWindow.button.viewdetails=D\u00e9tails
 v3.MainWindow.button.play=Ouvrir
 v3.MainWindow.button.cancel=Annuler
-v3.MainWindow.button.sendtofriend=Partager
 v3.MainWindow.button.preview=Pr\u00e9visualiser
 v3.MainWindow.view.wait=En cours d'initialisation. Veuillez patienter
 v3.MainWindow.xofx=%1 sur %2
@@ -1786,51 +1782,14 @@ azbuddy.chat.says=%1 dit:
 Button.bar.add=Ajouter des Amis
 Button.bar.edit=Modifier
 Button.bar.edit.cancel=Fini de Modifier
-v3.Share.menu=Partager un fichier
-v3.Share.header=Partager
-v3.Share.header.message=Partager avec vos Amis actuels, ou ajoutez des Amis
-v3.Share.add.buddy=Ajouter des Amis
-v3.Share.add.edit.buddy=Ajouter/Modifier mes Amis
-v3.Share.add.buddy.all=Partager avec tous mes amis
-v3.Share.add.buddy.existing=Mes Amis actuels:
-v3.Share.add.buddy.new=Nouveaux Amis :
-v3.Share.buddies=Amis
-v3.Share.invitees=Invit\u00e9es
-v3.Share.invite.buddies.prompt=Inivitez plus d'amis pour partager
-v3.Share.send.now=Envoyer
-v3.Share.optional.message=Message optionnel envoy\u00e9 dans la liste d'Activit\u00e9 de vos amis (maximum 140 charact\u00e8res) :
-v3.Share.disclaimer=Note: Le contenu que vous partagez ainsi que ce message optionel seront crypt\u00e9s
-v3.Share.disclaimer.link=Plus d'Infos
-v3.buddy.menu.viewprofile=Voir le Profil
-v3.buddy.menu.remove=Supprimer de mes amis
 v3.MainWindow.menu.view.pluginbar=Barre de Plugin
-v3.activity.buddy-request=Vous avec une demande d'ajout d'amis de %1
-v3.activity.buddy-request.accept=Accepter
-v3.activity.buddy-request.multi=Vous avez re\u00e7u [#%3] demandes d'ajout de %1
-v3.activity.buddy-linkup=Vous \u00eates maintenant amis avec %1
-v3.activity.share-content.no-msg=%1 d\u00e9sire partager %2 avec vous
-v3.buddies.remove=Supprimer de mes amis
-v3.buddies.add.to.share=Partager avec cet ami
-azbuddy.ui.dialog.disable.title=D\u00e9sactiver le plugin Amis
-azbuddy.ui.dialog.disable.text=La d\u00e9sactivation du plugin Amis pourrait vous emp\u00eacher de partager des torrents via la Barre Amis au bas du programme, et vous emp\u00eacher de modifier votre liste d'amis \u005c n \u005c n\u00cates-vous s\u00fbr de vouloir d\u00e9sactiver Amis?
 v3.share.private.title=Partage de Torrents
 v3.share.private.text=Le torrent s\u00e9lectionn\u00e9 est marqu\u00e9 comme "priv\u00e9".\n\nVous ne pouvez pas partager des torrents priv\u00e9s
-v3.buddies.disabled.title=Plugin d'Amis d\u00e9sactiv\u00e9
-v3.buddies.disabled.text._windows=Vous avez d\u00e9sactiv\u00e9 le plugin d'Amis, ce qui vous emp\u00eache de partager et de recevoir des fichiers torrentsou des invitations. Vous pouvez changer vos r\u00e9glages dans l'onglet Options.
-v3.buddies.disabled.text._mac=Vous avez d\u00e9sactiv\u00e9 le plugin d'Amis, ce qui vous emp\u00eache de partager et de recevoir des fichiers torrentsou des invitations. Vous pouvez changer vos r\u00e9glages dans l'onglet Options.
-v3.MainWindow.button.newtag.share=Nouveau! Partager un Torrent
-v3.buddies.faq=Plus d'Infos
 azbuddy.tracker.enabled=Activer le 'Boost d'Amis' pour t\u00e9l\u00e9charger plus vite avec vos Amis
 v3.MainWindow.button.download=T\u00e9l\u00e9charger
 v3.MainWindow.button.run=Ouvrir le fichier t\u00e9l\u00e9charg\u00e9
-v3.activity.header.friend.requests.foryou=Requ\u00eates d'Amis - Pour Vous
-v3.activity.header.friend.requests.fromyou=Requ\u00eates d'Amis - De Vous
-v3.activity.header.friend.requests.accepted=Requ\u00eates d'Amis - Accept\u00e9es
-v3.activity.header.share.requests=Partages de Fichiers
 v3.activity.header.downloads=T\u00e9l\u00e9chargements
-v3.activity.header.rating.reminders=Rappels de Critique
 v3.activity.header.vuze.news=Nouvelles de Vuze
-message.prompt.add.friends=Ajoutez des amis depuis la barre d'Amis
 message.status.success=Succ\u00e8s
 azbuddy.tracker.bbb.status.title=Boost d'Amis
 azbuddy.tracker.bbb.status.title.tooltip=Double cliquez pour obtenir des d\u00e9tails
@@ -1840,8 +1799,6 @@ azbuddy.tracker.bbb.status.in=Je suis Boost\u00e9
 azbuddy.tracker.bbb.status.out=En train de Booster des Amis
 v3.MainWindow.search.go.tooltip=Lancer la Recherche
 v3.MainWindow.search.last.tooltip=Afficher la derni\u00e8re Recherche
-v3.activity.buddy-invited=Vous avez envoy\u00e9 une invitation \u00e0 %1.
-v3.activity.buddy-invited.multi=Vous avez envoy\u00e9 une invitation \u00e0 :\n%1
 azbuddy.online_status=Statut de connection
 azbuddy.os_online=Connect\u00e9
 azbuddy.os_away=Absent
@@ -1884,15 +1841,3 @@ device.itunes.start=Vous devez d\u00e9marrer iTunes ou activer le d\u00e9marrage
 device.itunes.install_problem=Il semble y avoir un probl\u00e8me avec l'int\u00e9gration d'iTunes 
 option.askeverytime=Demander \u00e0 chaque fois
 option.rememberthis=Se souvenir de ce r\u00e9glage
-# The remaining keys were not in MessagesBundle.properties
-v3.activity.header.xdaysago=il y a %1 Jours
-ConfigView.section.connection.advanced.IPTOS.tooltip=D\u00e9finit le champ classe de trafic/type de service (TOS) dans l'en-t\u00eate IP pour les paquets sortants.\nVuze laisse ce champ vide par d\u00e9faut, donc les r\u00e9glages du syst\u00e8me d'exploitation sont utilis\u00e9s.\nExemples de valeurs:\n0x02 pour IPTOS_LOWCOST\n0x04 pour IPTOS_RELIABILITY\n0x08 pour IPTOS_THROUGHPUT\n0x10 pour IPTOS_LOWDELAY\nNOTE: Les impl\u00e9mentations r\u00e9seaux sous-jacentes peuvent ignorer ces valeurs, cette option est donc d\u00e9pendante du syst\u00e8me d'exploitation et du JRE.
-TorrentOptionsView.param.max.uploads.when.seeding.enable=quand en source uniquement
-v3.activity.header.today=Aujourd'hui
-ConfigView.section.connection.advanced.IPTOS=Type de service (TOS) des paquets sortants
-v3.buddies.count=%1 Amis
-v3.activity.header.yesterday=Hier
-v3.activity.header.xweeksago=il y a %1 Semaines
-v3.activity.header.1weekago=il y a une semaine
-ConfigView.label.announceport.tooltip=Informe le tracker d'un port different de celui sur lequel vous \u00e9coutez. Laisser vide pour ne pas utiliser cette option.
-deletedata.message2=\n\u00cates-vous certain de vouloir continuer\u00a0?
diff --git a/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties b/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties
index 59b8137..8812f75 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=.torrent-triem
 Main.parameter.usage=Gebruik : java org.gudy.azureus2.cl.Main [parameters] "bestand.torrent" "Bewaar pad"
 Main.parameter.maxUploads=Max aantal gelijktijdige uploads
@@ -356,7 +357,6 @@ MyTorrentsView.menu.removeand.deletedata=Verwijder &gegevens
 MyTorrentsView.menu.removeand.deleteboth=Verwijder &beide
 deletedata.title=Warsk\u00f4ging!
 deletedata.message1=Je staat op het punt de GEGEVENS te verwijderen van:\n
-deletedata.message2=\nWeet je zeker dat je wilt doorgaan?
 MainWindow.menu.file.configure=Konfiguraasjewizard...
 configureWizard.title=Configuratiewizard 
 configureWizard.welcome.title=Wolkom by de konfiguraasjewizard fan Vuze
@@ -481,7 +481,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Tracker cli\u00ebn afstemmings tussen pauze (sec)
 ConfigView.section.tracker.publishenable=Publiseer torrent details naar "<tracker_url>"
 ConfigView.section.tracker.ip=IP-adres van externe tracker
-MainWindow.menu.help.faq=Veelgestelde vragen
 ConfigView.section.style.enableXPStyle=Activeer XP stijl (herstart nodig)
 ConfigView.section.tracker.checkip=Automatisch extern IP adress opzoeken...
 ipCheckerWizard.title=Wizard IP-controle 
@@ -514,7 +513,6 @@ splash.openViews=Openen van Schermen
 splash.plugin=Plugin wordt geladen : 
 configureWizard.nat.tooManyPorts=Te veel poorten om te testen (9 max) 
 ConfigView.section.color=Kleurschema
-PeerSocket.unknown=\u00dbnbekend 
 MyTorrentsView.menu.publish=&Publiceren... 
 MyTrackerView.status.published=Gepubliceerd 
 MyTrackerView.completed=Dien
@@ -526,9 +524,15 @@ ConfigView.section.file.decoder.nodecoder=Gjin
 ConfigView.section.tracker.publicenable=Externe torrents toestaan 
 ConfigView.label.playdownloadspeech=Geef met spraak aan wanneer een download voltooid is
 ConfigView.label.playdownloadspeech.info=De spraakservice werkt momenteel het beste met Engels
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Laat het aantal beschikbare kopie\u00ebn zien van ieder deel.\nAls het nummer rechts kleiner dan 1 is, dan zie je geen volledige kopie van het bestand (en kan je problemen hebben bij het voltooien van de download).
 GeneralView.label.trackerurl.tooltip=Klik om de URL naar het klembord te kopieren
 GeneralView.label.trackerurlopen.tooltip=Klik om de hoofdpagina van de tracker te openen
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Update GUI iedere
 ConfigView.section.style.graphicsUpdate=Update Grafische balken iedere N GUI update(s) 
 ConfigView.section.style.reOrderDelay=Deel tabellen iedere N GUI update(s) opnieuw in [0: nooit]
@@ -659,7 +663,9 @@ health.explain.yellow=betekent dat de tracker goed is, je met peers verbonden be
 health.explain.green=betekent dat alles goed is.
 ConfigView.section.style.alwaysRefreshMyTorrents=Mijn Torrents altijd opnieuw laden 
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Deze optie ververst Mijn Torrent scherm, ook als het venster niet weergegeven wordt (handig voor enkele mIRC-plugins)
-ConfigView.section.style.verticaloffset=Grafisch Verticaal Beginpunt (GTK fix)
+#
+#2.0.7.0
+#
 security.certtruster.title=Beveiligings Certificaat Waarschuwing
 security.certtruster.intro=Het beveiligings certificaat is vrijgegeven door een bedrijf dat je niet vertrouwd
 security.certtruster.resource=Bron: 
@@ -715,6 +721,9 @@ ConfigView.section.style.dropdiraction='Sleep-en-plaats' actie voor mappen
 ConfigView.section.style.dropdiraction.opentorrents=Open Torrents 
 ConfigView.section.style.dropdiraction.sharefolder=Deel map 
 ConfigView.section.style.dropdiraction.sharefoldercontents=Deel inhoud 
+#
+# 2.0.7.x
+#
 Categories.all=Alle
 Categories.uncategorized=Ongecategoriseerd
 CategoryAddWindow.message=Nije kategorynamme
@@ -791,7 +800,6 @@ ConfigView.text.minutes=minuten op
 ConfigView.text.neverIgnore=Nea negearje
 ConfigView.text.any=ien
 DownloadManager.error.datamissing=\u00dbntbrekkende data
-iconBar.queue.tooltip=Wachtrige
 MainWindow.menu.file.open.torrentforseeding=.torrent-triem (Foar seeding)
 MainWindow.menu.language.refresh=F&ernije
 ManagerItem.forced=Geforceerd
@@ -862,6 +870,9 @@ SpeedView.stats.downloaded=Gedownload
 SpeedView.stats.uploaded=Ge\u00fcpload
 SpeedView.stats.uptime=Online Tijd (uren)
 AutoMigration.useralert=Vuze configuratiebestanden en -mappen auto-migratieresultaat:\n\n%1\nAlle gefaalde bestanden moeten handmatig worden gemigreerd.\nVERGEET NIET JE OPSLAGPAD BIJ TE WERKEN IN JE CONFIGURATIE NA DE MIGRATIE!
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Torrent(s) iepene
 OpenTorrentWindow.message=Experimenteel
 OpenTorrentWindow.addFiles=Voeg Best&anden toe:
@@ -1083,6 +1094,8 @@ MyTrackerView.badnat.info=Uploaders/Ontvangers die de NAT controlle hebben gefaa
 ConfigView.section.tracker.natchecktimeout=Controle timeout (secs)
 ConfigView.section.file.perf.cache.enable=Schakel schijfcaching in
 ConfigView.section.file.perf.cache.size=Grutte fan cache yn %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=Oerdrachten
 MainWindow.menu.transfers.startalltransfers=St&art Alle
 MainWindow.menu.transfers.stopalltransfers=St&op Alle
@@ -1162,8 +1175,6 @@ FilesView.fullpath=Hiel paad sjin litte
 FilesView.remaining=Stukjes te gaan
 TableColumn.header.trackername=Trackernaam
 TableColumn.header.trackername.info=Naam van de tracker gebaseerd op de meegedeelde URL
-ConfigView.label.announceport=Negeer door tracker meegedeelde poort
-ConfigView.label.announceport.tooltip=Informeer de tracker van een andere poort dan de poort waarnaar je luisterd. Laat de optie leeg als je deze niet wil gebruiken.
 ConfigView.group.override=Overbrugopties
 ConfigView.section.file.perf.cache.notsmallerthan=Triemen lytser as dit (yn %1) net yn cache bewarje
 PeersView.menu.blockupload=Blokupload
@@ -1186,8 +1197,6 @@ wizard.maketorrents.autoopen=De torrent voor uploaden gebruiken indien voltooid
 ConfigView.section.connection.advanced.mtu=Maximale overdrachtseenheid van de lijn (MTU)
 ConfigView.section.connection.advanced.SO_RCVBUF=Grootte van Socket SO_RCVBUF[0: gebruik standaard besturingssysteem]
 ConfigView.section.connection.advanced.SO_SNDBUF=Grotte Socket SO_SNDBUF [0: gebruik standaard besturingssysteem]
-ConfigView.section.connection.advanced.IPTOS=Uitgaand type type-of-service (TOS) [ga naar http://www.azureuswiki.com/index.php/AdvancedNetworkSettings voor informatie]
-ConfigView.section.connection.advanced.IPTOS.tooltip=Stelt het veld overdrachtklasse/type-of-service (TOS) in op de IP-header voor uitgaande pakketten.\nVuze laat deze optie standaard uit waardoor de standaarden van het besturingssysteem gebruikt worden.\nVoorbeeldwaarden zijn:\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\nOnderliggende netwerkimplementaties kunnen deze waarde negeren, deze optie is zeer afhankelijk van het besturingssysteem en de versie van JRE (Java).
 ConfigView.section.interface.confirm_torrent_removal=Om befestiching freegje as in torrent fuortsmite wurdt
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Om befestiching freegje as in torrent fuortsmite wurdt \u00fat it skerm MyTorrents
 MyTorrentsView.confirm_torrent_removal=Weet je zeker dat je deze torrent wilt verplaatsen?\n
@@ -1282,6 +1291,7 @@ ConfigView.section.logging.generatediagnostics=Genereren
 ConfigView.section.logging.generatediagnostics.info=Diagnostische informatie aanmaken en naar het klembord en logbestand kopi\u00ebren (indien ingesteld)
 MainWindow.menu.tools.nattest=&NAT/Firewalltest
 window.welcome.title=Wolkom by Vuze %1
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=\u00datjefte-opmerkingen
 dht.reseed.label=Het opnieuw uploaden van de verspreide database is normaal gesproken niet nodig. Indien het aantal contacten laag is, kan dit voor herintegratie handig zijn.\nLaat leeg om de database van verbonden peers te gebruiken of geef een IP-adres en poort op om de database van een bekende peer te gebruiken
 dht.reseed.group=Opnieuw uploaden
@@ -1336,13 +1346,27 @@ MyTorrentsView.menu.setUpSpeed=Uploadsnelheid instellen
 MyTorrentsView.menu.setDownSpeed=Downloadsnelheid instellen
 diagnostics.log_found=Vuze is niet correct afgesloten. Controleer %1 voor diagnostische logbestanden en overweeg deze aan het Vuze team te rapporteren als dit het resultaat van een applicatiefout is.
 ConfigView.section.logging.log0type=Ynformaasje
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=Torrentbestanden:
 Button.moveUp=Omheech
 Button.moveDown=Omleach
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=Als je en langzame processor hebt waardoor hashberekeningen achter het wegschrijven naar de harde schijf liggen (aantal complete delen in deeltjesscherm), kan er minder geheugen worden gebruikt door de wachtrijlengte te limiteren
-ConfigView.section.file.write_block_limit.explain=Als je langzame schijfprestaties hebt waardoor schrijfbewerkingen langzamer zijn dan de downloadsnelheid (rode blokken in deeltjesscherm), zal het limiteren van de wachtrijlengte tot minder geheugengebruik leiden
-MainWindow.dht.status.running=Wurd \u00fatfierd
-ConfigView.section.file.check_piece_limit=Maximum uitstaande controle deeltjes\n[0: ongelimiteerd]. Deeltjes grootte hangt af van de torrent
-ConfigView.section.file.write_block_limit=Maximaal aantal uitstaande schrijfbewerkingsblokken\n[0: ongelimiteerd]. Blokgrootte %1
+# > 2402
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
+#
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u00dbnbekend 
+ConfigView.label.announceport=Negeer door tracker meegedeelde poort
+#v3.MainWindow.menu.view.configuration=Preferences
+#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
+#v3.TorrentOptionsView.title.short=Preferences
+#v3.TorrentOptionsView.title.full=Preferences
+#v3.ConfigView.title.short=Preferences
+#v3.ConfigView.title.full=Preferences
+iconBar.queue.tooltip=Wachtrige
+MainWindow.menu.help.faq=Veelgestelde vragen
+#what you've watched? Discover more with a single click...
 MainWindow.menu.help.donate=Geef een donatie !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties b/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties
index 7075f49..32ba8b9 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Arquivo .torrent 
 Main.parameter.usage=Uso : java org.gudy.azureus2.cl.Main [par\u00e1metros] "arquivo.torrent" "ruta descarga" 
 Main.parameter.maxUploads=N\u00famero m\u00e1ximo de env\u00edos simult\u00e1neos 
@@ -334,7 +335,6 @@ MyTorrentsView.menu.removeand.deletedata=Borrar datos
 MyTorrentsView.menu.removeand.deleteboth=Borrar ambos 
 deletedata.title=Precauci\u00f3n!!! 
 deletedata.message1=Vostede est\u00e1 a piques de borra-los datos contidos en :\n 
-deletedata.message2=\nDesexa proceder? 
 MainWindow.menu.file.configure=Asistente de configuraci\u00f3n 
 configureWizard.title=Asistente de configuraci\u00f3n 
 configureWizard.welcome.title=Benvido ao asistente de configuraci\u00f3n do Vuze
@@ -459,7 +459,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Tracker client poll interval (secs) 
 ConfigView.section.tracker.publishenable=Publica-los detalles do torrent en "/" 
 ConfigView.section.tracker.ip=Direcci\u00f3n IP do tracker externo 
-MainWindow.menu.help.faq=FAQ 
 IPChecker.external.service.dyndns.name=DynDNS 
 IPChecker.external.service.dyndns.url=http://www.dyndns.org/ 
 IPChecker.external.service.dyndns.description=Dynamic DNS Network Services, LLC 
@@ -496,7 +495,6 @@ splash.initializeGui=Iniciando fiestra principal
 splash.openViews=Abrindo vistas 
 splash.plugin=Cargando plugin : 
 configureWizard.nat.tooManyPorts=Demasiados portos para probar (9 m\u00e1x) 
-PeerSocket.unknown=Desco\u00f1ecido 
 MyTorrentsView.menu.publish=Publicar... 
 MyTrackerView.status.published=Publicado 
 MyTrackerView.completed=Completado 
@@ -509,6 +507,12 @@ IPChecker.external.service.no-ip.name=No-IP
 IPChecker.external.service.no-ip.url=http://www.no-ip.com/ 
 IPChecker.external.service.no-ip.description=Dynamic and Static DNS service provider\n(no freely available 'check address' service) 
 ConfigView.section.tracker.publicenable=Activar .torrents externos 
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Update GUI every 
 ConfigView.section.style.graphicsUpdate=Update Graphical bars every N GUI update(s) 
 ConfigView.section.style.reOrderDelay=Re Order tables every N GUI update(s) 
@@ -636,26 +640,24 @@ health.explain.blue=when seeding, it means that you're not yet connected to any
 health.explain.yellow=means that the tracker is ok, you're connected to peers, but you don't have any remote connection.\nYou may have a NAT problem if your torrents stay on yellow status all the time 
 health.explain.green=means that everything is going fine. 
 ConfigView.section.style.alwaysRefreshMyTorrents=Always refresh My Torrents 
+#
+#2.0.7.0
+#
+#
+# 2.0.7.x
+#
 TableColumn.header.availability=Dispo\u00f1ibilidade 
+#
+# > 2.0.8.0
+#
 ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details 
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 ConfigView.label.overrideip=Establecer IP enviada ao rastreador (NAT) 
-# The remaining keys were not in MessagesBundle.properties
-configureWizard.nat.serverhigh=Portos altos 
-configureWizard.nat.serverlow=Portos baixos 
-SystemTray.menu.stopalldownloads=Stop All Downloads 
-ConfigView.label.defaultTorrentPath=Carpeta dos arquivos .torrent 
-MyTorrentsView.menu.lockstartstop=Desactivar regras de inicio de sementes 
-ConfigView.label.moveCompletedPath=Carpeta dos arquivos completados 
-ConfigView.label.serverportshared=Use a single shared incoming port for all torrents 
-ConfigView.label.stopRatio=Deixar de compartir cando o promedio compartido alcance 
-ConfigView.label.serverportrange=Incoming port range 
-MainWindow.about.internet.featurerequests=Petici\u00f3n de novas caracter\u00edsticas 
-ConfigView.label.serverportlow=Porto de entrada baixo 
-MyTorrentsView.menu.lockpriority=Desactivar prioridade autom\u00e1tica 
-ConfigView.label.maxclients=N\u00famero m\u00e1ximo de conexi\u00f3ns por torrent (0 : sen l\u00edmite) 
-ConfigView.label.override=(Sobreescribe t\u00f3dalas outras regras) 
-ConfigView.label.allocatenewfiles=Establecer novos arquivos 
-ConfigView.label.serverporthigh=Porto de entrada alto 
-ConfigView.label.slowconnect=Conectar lentamente cos novos pares\nPara persoas con problemas de desconexi\u00f3n de Internet 
-ConfigView.label.onlyafter50=(S\u00f3 se aplica se o promedio compartido \u00e9 maior de 0.5) 
+#file can be a URL or a path in the jar
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Desco\u00f1ecido 
+MainWindow.menu.help.faq=FAQ 
 MainWindow.menu.help.donate=Fai unha doaz\u00f3n ($2,$5,...) 
diff --git a/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties b/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties
index 5497f08..8424e66 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties
@@ -379,7 +379,6 @@ MyTorrentsView.menu.removeand.deletedata=A&dat t\u00f6rl\u00e9se
 MyTorrentsView.menu.removeand.deleteboth=Mind t\u00f6rl\u00e9se
 deletedata.title=Figyelem
 deletedata.message1=Az al\u00e1bbi helyen l\u00e9v\u0151 ADATOT t\u00f6rl\u00e9se :\n
-deletedata.message2=\nBiztosan t\u00f6rl\u00f6d?
 MainWindow.menu.file.configure=Be\u00e1ll\u00edt\u00e1s &Var\u00e1zsl\u00f3...
 configureWizard.title=Be\u00e1ll\u00edt\u00e1s Var\u00e1zsl\u00f3
 configureWizard.welcome.title=\u00dcdv\u00f6zli az Vuze Be\u00e1ll\u00edt\u00e1s Var\u00e1zsl\u00f3ja
@@ -706,7 +705,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Ha enged\u00e9lyezed a
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Megjelen\u00edt\u00e9s f\u00fcgg\u0151leges eltol\u00e1sa (GTK jav\u00edt\u00e1s)
 security.certtruster.title=Biztons\u00e1gi figyelmeztet\u00e9s
 security.certtruster.intro=A biztons\u00e1gi tan\u00fas\u00edtv\u00e1nyt olyan t\u00e1rsas\u00e1g \u00e1ll\u00edtotta ki, mely nem kapott bizalmat
 security.certtruster.resource=Forr\u00e1s:
@@ -846,7 +844,6 @@ ConfigView.text.minutes=percenk\u00e9nt
 ConfigView.text.neverIgnore=Nincs Kihagy\u00e1s
 ConfigView.text.any=b\u00e1rmely
 DownloadManager.error.datamissing=Hi\u00e1nyz\u00f3 adat
-iconBar.queue.tooltip=V\u00e1r\u00f3list\u00e1ra v\u00e9tel
 MainWindow.menu.file.open.torrentforseeding=Torrent F\u00e1jl... (Seedel\u00e9shez)
 MainWindow.menu.language.refresh=F&riss\u00edt
 ManagerItem.forced=Fel\u00fclb\u00edr\u00e1lt
@@ -1890,13 +1887,8 @@ MainWindow.menu.view.iconbar=Eszk\u00f6zt\u00e1r
 MyTorrentsView.menu.rename=\u00c1tnevez
 MyTorrentsView.menu.rename.displayed=Megjelen\u0151 N\u00e9v \u00c1tnevez\u00e9se
 MyTorrentsView.menu.rename.save_path=Ment\u00e9si \u00dat \u00c1tnevez\u00e9se
-MyTorrentsView.menu.rename.displayed_and_save_path=Mind \u00c1tnevez\u00e9se
 MyTorrentsView.menu.rename.displayed.enter.title=Megjelen\u0151 N\u00e9v \u00c1tnevez\u00e9se
 MyTorrentsView.menu.rename.displayed.enter.message=Add meg a let\u00f6lt\u00e9s \u00faj nev\u00e9t\nHa nem adsz be semmit, akkor az eredeti fog megjelenni.
-MyTorrentsView.menu.rename.save_path.enter.title=Ment\u00e9si \u00dat M\u00f3dos\u00edt\u00e1sa
-MyTorrentsView.menu.rename.save_path.enter.message=Add meg a let\u00f6lt\u00e9s \u00faj hely\u00e9t\nHa nem adsz be semmit, akkor a let\u00f6lt\u00e9s megjelen\u0151 neve lesz haszn\u00e1lva.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Let\u00f6lt\u00e9s \u00c1tnevez\u00e9se
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Add meg a let\u00f6lt\u00e9s \u00faj nev\u00e9t\nHa nem adsz be semmit, akkor az eredeti fog megjelenni.
 MyTorrentsView.menu.edit_comment=Megjegyz\u00e9s szerkeszt\u00e9se
 MyTorrentsView.menu.edit_comment.enter.title=Megjegyz\u00e9s szerkezt\u00e9se
 MyTorrentsView.menu.edit_comment.enter.message=\u00cdrj be egy megjegyz\u00e9st a let\u00f6lt\u00e9shez
@@ -2104,7 +2096,6 @@ v3.MainWindow.button.comment=Megjegyz\u00e9s
 v3.MainWindow.button.viewdetails=R\u00e9szletek
 v3.MainWindow.button.play=Lej\u00e1tsz\u00e1s
 v3.MainWindow.button.cancel=M\u00e9gsem
-v3.MainWindow.button.sendtofriend=Megoszt
 v3.MainWindow.button.preview=El\u0151n\u00e9zet
 v3.MainWindow.view.wait=Bet\u00f6lt\u00e9s, k\u00e9rem v\u00e1rjon.
 v3.MainWindow.xofx=%1 a %2-b\u00f3l
@@ -2352,11 +2343,6 @@ ConfigView.section.security.unlockkey.error=Kulcsok kinyit\u00e1sa sikertelen -
 ConfigView.copy.to.clipboard.tooltip=M\u00e1sol\u00e1s a v\u00e1g\u00f3lapra
 Views.plugins.azbuddy.title=Bar\u00e1tok
 Browser.popup.error.no.access=Hiba l\u00e9pet fel a t\u00e1voli er\u0151forr\u00e1s el\u00e9r\u00e9se k\u00f6zbene.\nK\u00e9rlek pr\u00f3b\u00e1ld meg k\u00e9s\u0151bb.\n
-v3.activity.header.today=Ma
-v3.activity.header.yesterday=Tegnap
-v3.activity.header.xdaysago=%1 Nappal ezel\u0151tt
-v3.activity.header.1weekago=1 hete
-v3.activity.header.xweeksago=%1 H\u00e9ttel ezel\u0151tt
 ConfigView.label.queue.stoponcebandwidthmet=Ne ind\u00edtson \u00faj torrentet, ha a fel-/let\u00f6lt\u00e9si sebess\u00e9g el\u00e9rte a limitet
 ConfigView.section.style.forceMozilla=Vuze k\u00e9nyszer\u00edt\u00e9se a Mozilla haszn\u00e1lat\u00e1ras [xulrunner vagy firefox 3 sz\u00fcks\u00e9ges; \u00fajraind\u00edt\u00e1s sz\u00fcks\u00e9ges]
 ConfigView.section.style.xulRunnerPath=Add meg a XulRunner / Firefox el\u00e9r\u00e9i \u00fatj\u00e1t [min FF3; \u00fajraind\u00edt\u00e1s sz\u00fcks\u00e9ges]
@@ -2407,50 +2393,17 @@ Button.bar.share=Megoszt
 Button.bar.add=Bar\u00e1t hozz\u00e1ad\u00e1sa
 Button.bar.edit=Szerkeszt
 Button.bar.edit.cancel=Szerkeszt\u00e9s k\u00e9sz
-v3.Share.menu=Tartalom megoszt\u00e1sa
-v3.Share.header=Megoszt
-v3.Share.header.message=Megoszt\u00e1s az aktu\u00e1lis Bar\u00e1tokkal, vagy \u00faj bar\u00e1t hozz\u00e1ad\u00e1sa.
-v3.Share.add.buddy=Bar\u00e1t hozz\u00e1ad\u00e1sa
-v3.Share.add.edit.buddy=Bar\u00e1t hozz\u00e1ad\u00e1sa/szerkeszt\u00e9se
-v3.Share.add.buddy.all=Minden megoszt\u00e1sa
-v3.Share.add.buddy.existing=L\u00e9tez\u0151 bar\u00e1t:
-v3.Share.add.buddy.new=\u00daj bar\u00e1t:
-v3.Share.buddies=Bar\u00e1tok
-v3.Share.invitees=Megh\u00edv\u00f3k
-v3.Share.invite.buddies.prompt=\u00daj bar\u00e1t megh\u00edv\u00e1sa megoszt\u00e1sra
-v3.Share.send.now=K\u00fcld\u00e9s
-v3.Share.optional.message=\u00dczenet Activity Feeden kereszt\u00fcl (maximum 140 karakter):
-v3.Share.disclaimer=Megj.: A megosztott tartalom \u00e9s az \u00fczenet is titkos\u00edtva lesz.
-v3.Share.disclaimer.link=B\u0151vebben
-ConfigView.section.security.vuze.login=Jeletkezz be a Vuze-ra a m\u0171velet v\u00e9grehajt\u00e1s\u00e1hoz
-v3.buddy.menu.viewprofile=Profil megtekint\u00e9se
-v3.buddy.menu.remove=Bar\u00e1t T\u00f6rl\u00e9se
 v3.MainWindow.menu.view.pluginbar=B\u0151v\u00edtm\u00e9nyek eszk\u00f6zt\u00e1r
-v3.MainWindow.menu.view.buddies-viewer=Bar\u00e1t S\u00e1v
-v3.activity.buddy-request=Bar\u00e1ti k\u00e9r\u00e9s \u00e9rkezett %1
-v3.activity.buddy-request.multi=Bar\u00e1ti k\u00e9r\u00e9sed van [#%3] felad\u00f3ja %1
-v3.activity.buddy-linkup=%1 mostant\u00f3l a bar\u00e1tod
-v3.activity.share-content.no-msg=%1 megosztotta a %2 veled
-v3.buddies.count=%1 Bar\u00e1t
-v3.buddies.remove=Bar\u00e1t t\u00f6rl\u00e9se
-v3.buddies.add.to.share=Bar\u00e1t hozz\u00e1ad\u00e1sa Megoszt\u00e1shoz
 MainWindow.dialog.select.vuze.file=Vuze f\u00e1jl kiv\u00e1laszt\u00e1sa
 MainWindow.menu.file.open.vuze=Vuze \u00e1jl...
-azbuddy.ui.dialog.disable.title=Bar\u00e1tok b\u0151v\u00edtm\u00e9ny letilt\u00e1sa
-azbuddy.ui.dialog.disable.text=Ha letiltod a Bar\u00e1t b\u0151v\u00edtm\u00e9nyt, akkor nem oszthatsz meg torrentet a Bar\u00e1t Eszk\u00f6zt\u00e1r seg\u00edts\u00e9g\u00e9vel, \u00e9s nem m\u00f3dos\u00edthatod a bar\u00e1tok list\u00e1j\u00e1t sem\n\nBiztosan le akarod tiltani a Bar\u00e1tokat?
 metasearch.addtemplate.title=Telep\u00edted a Keres\u00e9si Sablont?
 metasearch.addtemplate.desc=Biztosan telep\u00edteni szeretn\u00e9d a '%1' keres\u00e9si sablont?
 v3.share.private.title=Torrent megoszt\u00e1sa
 v3.share.private.text=A kiv\u00e1lasztott torrent priv\u00e1t torrent.\n\nNem oszthatsz meg priv\u00e1t torrentet.
-v3.buddies.disabled.title=Bar\u00e1t B\u0151v\u00edtm\u00e9ny Letiltva
-v3.buddies.disabled.text._windows=Letiltottad a bar\u00e1t b\u0151v\u00edtm\u00e9nyt, \u00edgy nem oszthatsz meg vagy fogadhatsz torrentet bar\u00e1tt\u00f3l. A be\u00e1ll\u00edt\u00e1s b\u00e1rmikor m\u00f3dos\u00edthat\u00f3.
-v3.buddies.disabled.text._mac=Letiltottad a bar\u00e1t b\u0151v\u00edtm\u00e9nyt, \u00edgy nem oszthatsz meg vagy fogadhatsz torrentet bar\u00e1tt\u00f3l. A be\u00e1ll\u00edt\u00e1s b\u00e1rmikor m\u00f3dos\u00edthat\u00f3.
 metasearch.addtemplate.dup.title=Sablon m\u00e1sol\u00e1sa
 metasearch.addtemplate.dup.desc=A %1 keres\u00e9si sablon m\u00e1r telep\u00edtve van
 metasearch.export.select.template.file=Sablon Ment\u00e9se
 metasearch.import.select.template.file=Sablon Megnyit\u00e1sa
-v3.MainWindow.button.newtag.share=\u00daj! Torrent Megoszt\u00e1sa
-v3.buddies.faq=B\u0151vebb
 dialog.uiswitch.title=V\u00e1lt\u00e1s Vuze UI-ra
 dialog.uiswitch.text=A funkci\u00f3hoz Vuze fel\u00fclet sz\u00fcks\u00e9ge.\n\n\u00dajraind\u00edt\u00e1s sz\u00fcks\u00e9ges.
 dialog.uiswitch.button=V\u00e1lt\u00e1s Vuze UI-ra
@@ -2458,25 +2411,10 @@ azbuddy.tracker.enabled='Bar\u00e1t gyors\u00edt\u00e1sa' nagyobb priorit\u00e1s
 azbuddy.protocolspeed=KB/s a bar\u00e1tod max protokoll fejr\u00e9sz
 v3.MainWindow.button.download=Let\u00f6lt\u00e9s
 v3.MainWindow.button.run=Let\u00f6lt\u00e9si F\u00e1jl Ind\u00edt\u00e1sa
-v3.activity.header.friend.requests.foryou=Bar\u00e1ti k\u00e9r\u00e9s - Neked
-v3.activity.header.friend.requests.fromyou=Bar\u00e1ti k\u00e9r\u00e9s - T\u0151led
-v3.activity.header.friend.requests.accepted=Bar\u00e1ti k\u00e9r\u00e9s - Elfogadva
-v3.activity.header.share.requests=Torrent megoszt\u00e1sa k\u00e9r\u00e9s
 v3.activity.header.downloads=Let\u00f6lt\u00e9s
-v3.activity.header.rating.reminders=Min\u0151s\u00e9g Figyelmeztet\u0151
 v3.activity.header.vuze.news=Vuze H\u00edrek
-login.optional.message=Be kell jeletkezned a funkci\u00f3 haszn\u00e1lat\u00e1hoz
-message.confirm.share.singular=Kiv\u00e1l\u00f3!  K\u00e9r\u00e9s egy torrent megoszt\u00e1s\u00e1ra elk\u00fcldve.
-message.confirm.share.plural=Kiv\u00e1l\u00f3!  K\u00e9r\u00e9s a torrentek megoszt\u00e1s\u00e1ra elk\u00fcldve.
-message.confirm.share.invite.singular=Kiv\u00e1l\u00f3!  K\u00e9r\u00e9s kapcsol\u00f3d\u00e1sra \u00e9s megoszt\u00e1sra elk\u00fcldve. Sz\u00f3lj a bar\u00e1todnak, hogy fogadja el.
-message.confirm.share.invite.plural=Kiv\u00e1l\u00f3!  K\u00e9r\u00e9s kapcsol\u00f3d\u00e1sra \u00e9s megoszt\u00e1sra elk\u00fcldve. Sz\u00f3lj a bar\u00e1todnak, hogy fogadja el.
-message.confirm.invite.singular=Kiv\u00e1l\u00f3!  K\u00e9r\u00e9s a Bar\u00e1tod fel\u00e9 elk\u00fcldve. Sz\u00f3lj neki, hogy fogadja el.
-message.confirm.invite.plural=Kiv\u00e1l\u00f3! Felk\u00e9r\u00e9s a Bar\u00e1taidnak elk\u00fcldve.  Noszogasd a bar\u00e1taidah, hogy fogadj\u00e1k el.
-message.confirm.invite.error=Hopp\u00e1!  Van egy kis gubanc.  Egy vagy t\u00f6vv megh\u00edv\u00f3d hib\u00e1s.
-message.prompt.add.friends=Megoszt\u00e1shoz kattints a bar\u00e1t ikonra alul
 message.taking.too.long=Ez el fog tartani egy ideig\nNyomd meg az 'ESC' gombot, ha meg akarod szak\u00edtani a m\u0171veletet
 message.status.success=Sikeres
-message.intro.friends=Bar\u00e1t hozz\u00e1ad\u00e1sa. Torrent Megoszt\u00e1sa. T\u00f6lt\u00e9s Gyorsabban.
 azbuddy.tracker.bbb.status.title=Bar\u00e1t gyors\u00edt\u00e1sa
 azbuddy.tracker.bbb.status.title.tooltip=Dupla katt a r\u00e9szletek\u00e9rt
 azbuddy.tracker.bbb.status.idle=Nincs gyors\u00edt\u00e1s
@@ -2485,13 +2423,8 @@ azbuddy.tracker.bbb.status.in=Gyors\u00edtva
 azbuddy.tracker.bbb.status.out=Gyors\u00edtott Bar\u00e1tok
 v3.MainWindow.search.go.tooltip=Elv\u00e9gzett Keres\u00e9s
 v3.MainWindow.search.last.tooltip=Vissza az eredm\u00e9nyekhez
-v3.activity.buddy-invited=K\u00e9r\u00e9s elk\u00fcldve a k\u00f6vetkez\u0151r\u0151l %1.
-v3.activity.buddy-invited.multi=Bar\u00e1ti k\u00e9r\u00e9s elk\u00fcldve a k\u00f6vetkez\u0151 embereknek:\n%1
 metasearch.addtemplate.done.title=Sablon Hozz\u00e1adva
 metasearch.addtemplate.done.desc='%1' sablon sikeresen hozz\u00e1adva.\nA k\u00f6vetkez\u0151 keres\u00e9sn\u00e9l haszn\u00e1lhat\u00f3!
-v3.MainWindow.button.share=Tartalom megoszt\u00e1sa
-v3.buddies.remove.buddy.dialog.title=Bar\u00e1t T\u00f6rl\u00e9se Meger\u0151s\u00edt\u00e9s
-v3.buddies.remove.buddy.dialog.text=Val\u00f3ban t\u00f6rl\u00f6d %1 a Bar\u00e1taid k\u00f6z\u00fcl?
 ConfigView.section.security.nopw=Nincs jelsz\u00f3 be\u00e1ll\u00edtva
 ConfigView.section.security.nopw_v=A jelsz\u00f3 nem el\u00e9rhet\u0151, l\u00e9pj be a Vuze-ba
 fileplugininstall.install.title=B\u0151v\u00edtm\u00e9ny telep\u00edt\u00e9se?
@@ -2503,12 +2436,7 @@ azbuddy.os_away=Nincs a g\u00e9pn\u00e9l
 azbuddy.os_not_avail=Nem el\u00e9rhet\u0151
 azbuddy.os_busy=Elfoglalt
 azbuddy.ui.menu.disconnect=Sz\u00e9tkapcsol
-v3.chat.offline=%1 most offline,de amint bejelentkezik megkapja az \u00fczenetet.
-v3.chat.wrongversion=%1 olyan Vuze verzi\u00f3t hazsn\u00e1l, mely nem t\u00e1mogatja a Chat-t.
 azbuddy.enable_chat_notif=Chat figyelmeztet\u00e9sek enged\u00e9lyez\u00e9se
-v3.buddies.dnd.info.dialog.title=Dobd Megoszt\u00e1s
-v3.buddies.dnd.info.dialog.text=Megoszt\u00e1st k\u00e9rt\u00e9l. A f\u00e9jlok megoszt\u00e1sa elkezd\u0151d\u00f6tt, a megoszt\u00e1s ablak megjelenik, ha minden befejez\u0151d\u00f6tt.\n\nNe kapcsold ki Vuze-t, hogy a bar\u00e1taid el\u00e9rhess\u00e9k amegoszt\u00e1sod.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Katt ide</A> b\u0151vebb inform\u00e1ci\u00f3k\u00e9rt.
-v3.buddies.dnd.info.dialog.remember=Nem mutassa \u00fajb\u00f3l ezt az \u00fczenetet
 progress.window.msg.progress=V\u00e1rj am\u00edg a m\u0171velet be nem fejez\u0151dik
 DetailedListView.title=R\u00e9szletes Lista
 ConfigView.section.connection.network.max.outstanding.connect.attempts=Max sorban\u00e1ll\u00f3 kimen\u0151 kapcsolat
@@ -2534,6 +2462,7 @@ iconBar.share=megoszt
 iconBar.details=R\u00e9szletek
 iconBar.comment=Megjegyz\u00e9s
 iconBar.play=Lej\u00e1tsz\u00e1s
+iconBar.queue.tooltip=V\u00e1r\u00f3list\u00e1ra v\u00e9tel
 v3.MainWindow.menu.view.sidebar=Oldals\u00e1v
 v3.MainWindow.menu.view.actionbar=Tev\u00e9kenys\u00e9g s\u00e1v
 v3.MainWindow.menu.view.toolbars=Eszk\u00f6zt\u00e1r
@@ -2554,8 +2483,6 @@ PluginDeprecation.view=Plugin Hbakeres\u00e9s
 PluginDeprecation.alert=A plugin egy megsz\u00fcn\u0151 funkci\u00f3t akar haszn\u00e1lni -n\u00e9zd meg a Plugin Debug napl\u00f3t a r\u00e9szletek\u00e9rt.
 TableColumn.header.Thumbnail=Ikon
 TableColumn.header.Thumbnail.info=Mozaik k\u00e9p Vuze tartalomn\u00e1l; minden egy\u00e9bhez az oper\u00e1ci\u00f3s rendszerben be\u00e1ll\u00edtott ikonok jelennek meg. 
-TableColumn.header.Rating_global=Min\u0151s\u00edt\u00e9s
-TableColumn.header.Rating_global.info=A tartalom min\u0151s\u00edt\u00e9se
 v3.MainWindow.menu.getting_started=&Bemutat\u00f3
 MainWindow.menu.help.faq=&Gyakran Ism\u00e9telt K\u00e9rd\u00e9sek
 MainWindow.menu.help.support=&Seg\u00edts\u00e9g \u00e9s T\u00e1mogat\u00e1s
@@ -2564,10 +2491,6 @@ externalLogin.explanation="%1" sablonhoz be kell jeletkeznek. Ha bejelentkezt\u0
 externalLogin.explanation.capture=Be kell jeletkezned a sablon elk\u00e9sz\u00edt\u00e9s\u00e9hez. Ha k\u00e9szen vagy, kattints a "K\u00e9sz" gombra.
 Button.done=K\u00e9sz
 GeneralView.torrent_created_on_and_by=%1 %2-b\u00f3l/b\u0151l
-v3.Share.wizard.title=Megoszt\u00e1s -- Var\u00e1zsl\u00f3
-v3.AddFriends.header.message=Bar\u00e1t hozz\u00e1ad\u00e1sa a kedvenc torrentek megoszt\u00e1s\u00e1hoz
-v3.AddFriends.header=Bar\u00e1t Hozz\u00e1ad\u00e1sa
-v3.AddFriends.wizard.title=Bar\u00e1t Hozz\u00e1ad\u00e1sa -- Var\u00e1zsl\u00f3
 Button.continue=Folytat
 Button.preview=El\u0151n\u00e9zet
 Subscription.menu.forcecheck=Friss\u00edt "%1"
@@ -2578,9 +2501,6 @@ sidebar.LibraryDL=Let\u00f6tl\u00e9s
 sidebar.LibraryCD=Befejezve
 authenticator.location=Hely
 authenticator.details=R\u00e9szletek
-v3.MainWindow.menu.publish.new=\u00daj tartalom megoszt\u00e1sa
-v3.MainWindow.menu.publish.mine=K\u00f6zz\u00e9tett Tartalmaid
-v3.MainWindow.menu.publish.about=Kiad\u00e1sr\u00f3l..
 subscript.import.fail.title=Import\u00e1l\u00e1s Sikertelen
 subscript.import.fail.desc=R\u00e9szletek: %1
 Subscription.menu.export=Export\u00e1l
diff --git a/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties b/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties
index 2550b73..c2ee8ab 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file=&\u0556\u0561\u0575\u056c
 MainWindow.menu.file.open=&\u0532\u0561\u0581\u0565\u056c
 MainWindow.menu.file.create.fromfile=&\u0556\u0561\u0575\u056c\u056b\u0581
@@ -108,6 +109,12 @@ fileDownloadWindow.status=\u054e\u056b\u0573\u0561\u056f :
 fileDownloadWindow.state_error=\u054d\u056d\u0561\u056c : 
 wizard.comment=\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576
 ConfigView.section.file.decoder.nodecoder=\u0548\u0579 \u0574\u0565\u056f\u0568
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
 ConfigView.section.tracker.passwordenabletorrent=\u0531\u056f\u057f\u056b\u057e\u0561\u0581\u0576\u0565\u056c \u0563\u0561\u0572\u057f\u0576\u0561\u0562\u0561\u057c\u0568 \u057f\u0578\u0580\u0580\u0565\u0576\u057f\u0576\u0565\u0580\u056b \u057e\u0580\u0561
 ConfigView.section.tracker.username=\u0533\u0578\u0580\u056e\u0561\u056e\u0578\u0572\u056b \u0561\u0576\u0578\u0582\u0576\u0568
 ConfigView.section.tracker.password=\u0533\u0561\u0572\u057f\u0576\u0561\u0562\u0561\u057c
@@ -136,10 +143,16 @@ wizard.maketorrent.piecesize=\u053f\u057f\u0578\u0580\u056b \u0579\u0561\u0583
 wizard.maketorrent.auto=\u0531\u057e\u057f\u0578\u0574\u0561\u057f
 TableColumn.header.health=\u054e\u056b\u0573\u0561\u056f\u0568
 MyTorrentsView.menu.health=\u054e\u056b\u0573\u0561\u056f\u056b \u0576\u0577\u0561\u0576\u0576\u0565\u0580\u056b \u0574\u0561\u057d\u056b\u0576
+#
+#2.0.7.0
+#
 security.certtruster.yes=\u0531\u0575\u0578
 MySharesView.name=\u0531\u0576\u0578\u0582\u0576
 MySharesView.type=\u054f\u0565\u057d\u0561\u056f
 MySharesView.type.file=\u0556\u0561\u0575\u056c
+#
+# 2.0.7.x
+#
 Categories.all=\u0532\u0578\u056c\u0578\u0580\u0568
 ConfigView.label.seeding.rankType.none=\u0548\u0579 \u0574\u0565\u056f\u0568
 ConfigView.section.pluginslist=\u0551\u0578\u0582\u0581\u0561\u056f
@@ -152,6 +165,9 @@ AlertMessageBox.comment=\u053b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u
 AlertMessageBox.information=\u053b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u0561
 SpeedView.stats.total=\u0538\u0576\u0564\u0570\u0561\u0576\u0578\u0582\u0580
 SpeedView.stats.now=\u0540\u056b\u0574\u0561
+#
+# > 2.0.8.0
+#
 ConfigView.section.style.colorOverride.error=\u054d\u056d\u0561\u056c
 Button.revert=\u0565\u057f
 ConfigView.complete.abbreviated=\u054a\u0538\u0550\u053e:
@@ -175,6 +191,8 @@ GeneralView.label.maxdownloadspeed=\u0531\u057c\u0561\u057e\u0565\u056c\u0561\u0
 blank.resource=\u054c\u0565\u057d\u0578\u0582\u0580\u057d
 Button.clear=\u0544\u0561\u0584\u0580\u0565\u056c
 Button.reset=\u054e\u0565\u0580\u0561\u056f\u0561\u0576\u0563\u0576\u0565\u056c
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 CacheView.title.full=\u053f\u0565\u0577
 CacheView.general.size=\u053c\u0580\u056b\u057e \u0579\u0561\u0583\u0568
 CacheView.general.inUse=\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u057e\u0578\u0582\u0574 \u0567
@@ -214,6 +232,7 @@ window.networkselection.description=\u054f\u0578\u0580\u0580\u0565\u0576\u057f :
 MyTorrentsView.menu.networks=\u0551\u0561\u0576\u0581\u0565\u0580
 Button.apply=\u053f\u056b\u0580\u0561\u057c\u0565\u056c 
 Button.close=\u0553\u0561\u056f\u0565\u056c
+#file can be a URL or a path in the jar
 DHTView.operations.ok=\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c
 DHTView.activity.type=\u054f\u0565\u057d\u0561\u056f
 MyTorrentsView.menu.setDownSpeed=\u054d\u0561\u0570\u0574\u0561\u0576\u0565\u056c \u0562\u0565\u057c\u0576\u0574\u0561\u0576 \u0561\u0580\u0561\u0563\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568
@@ -227,6 +246,7 @@ ConfigView.section.logging.log1type=\u0536\u0563\u0578\u0582\u0577\u0561\u0581\u
 ConfigView.section.logging.log2type=\u054d\u056d\u0561\u056c
 ConfigView.pluginlist.column.type=\u054f\u0565\u057d\u0561\u056f
 ConfigView.pluginlist.column.name=\u0531\u0576\u0578\u0582\u0576
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.addFiles.Folder=\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c &\u0539\u0572\u0569\u0561\u057a\u0561\u0576\u0561\u056f
 OpenTorrentWindow.torrentTable.name=\u0531\u0576\u0578\u0582\u0576
 OpenTorrentWindow.fileTable.fileName=\u0556\u0561\u0575\u056c\u056b \u0561\u0576\u0578\u0582\u0576\u0568
diff --git a/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties b/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties
index dbd7297..82f70a0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties
@@ -873,13 +873,8 @@ ConfigView.section.style.showiconbar=Tampilkan Toolbar
 MyTorrentsView.menu.rename=Ubah Nama
 MyTorrentsView.menu.rename.displayed=Ubah nama yang ditampilkan
 MyTorrentsView.menu.rename.save_path=Ubah Nama Tempat Penyimpanan
-MyTorrentsView.menu.rename.displayed_and_save_path=Ubah Keduanya
 MyTorrentsView.menu.rename.displayed.enter.title=Ubah nama yang ditampilkan
 MyTorrentsView.menu.rename.displayed.enter.message=Masukkan nama baru untuk ditampilkan.\nJika dikosongkan, akan digunakan nama yang asli.
-MyTorrentsView.menu.rename.save_path.enter.title=Ubah Nama Tempat Penyimpanan
-MyTorrentsView.menu.rename.save_path.enter.message=Masukkan nama baru untuk tempat penyimpanan.\nJika dikosongkan, akan tampilan nama akan digunakan sebagai nama penyimpanan.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Ubah Nama
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Masukkan nama baru\nJika dikosongkan, akan digunakan nilai yang asli.
 MyTorrentsView.menu.edit_comment=Ubah Komentar
 MyTorrentsView.menu.edit_comment.enter.title=Mengubah Komentar
 MyTorrentsView.menu.edit_comment.enter.message=Masukkan komentar
@@ -1076,14 +1071,11 @@ Button.bar.share=Berbagi
 Button.bar.add=Tambah
 Button.bar.edit=Ubah
 Button.bar.edit.cancel=Selesai Mengubah
-v3.Share.buddies=Teman
-v3.buddies.friends=Teman
 MainWindow.dialog.select.vuze.file=Pilih Berkas Vuze
 v3.share.private.title=Berbagi Torrent
 v3.share.private.text=Torrent yang dipilih merupakan Torrent Privat.\n\nAnda tidak bisa berbagi torrent privat.
 v3.MainWindow.button.download=Unduh
 v3.activity.header.vuze.news=Berita Vuze
-message.intro.friends=Tambah Teman.\nBerbagi Torrent.\nUnduh Lebih Cepat.
 azbuddy.online_status=Status koneksi
 azbuddy.os_online=Terkoneksi
 azbuddy.os_away=Tidak ditempat
@@ -1110,11 +1102,8 @@ TableColumn.header.azsubs.ui.column.subs=Langganan
 MainWindow.menu.community=&Komunitas
 MainWindow.menu.community.wiki=&Wiki Komunitas
 MainWindow.menu.community.forums=Forums Komunitas
-MainWindow.menu.community.add_friends=Tambah Teman
 Button.done=Selesai
 GeneralView.torrent_created_on_and_by=%1 oleh %2
-v3.AddFriends.header.message=Tambah teman untuk berbagi torrent favorit Anda
-v3.AddFriends.header=Tambah Teman
 Button.continue=Lanjutkan
 Button.preview=Pratayang
 Subscription.menu.forcecheck=Perbarui
@@ -1133,7 +1122,6 @@ TableColumn.header.unopened=Baru
 Unopened.bigView.header=Baru
 Subscription.menu.deleteall=Hapus Semua
 Subscription.menu.reset=Kembali Ke Kondisi Awal
-ConfigView.interface.start.library=Mulai di Pustaka
 TableColumn.header.activityNew=Baru
 TableColumn.header.activityType=Jenis
 TableColumn.header.activityText=Pesan
@@ -1143,7 +1131,6 @@ TableColumn.header.activityActions=Aksi
 Button.search=Cari
 Button.save=Simpan
 Button.add=Tambah
-TableColumn.header.videoLength=Panjang Video
 Subscription.menu.properties=Properti
 props.window.title=Properti untuk '%1'
 sidebar.VuzeHDNetwork=Jaringan Vuze HD
@@ -1158,8 +1145,6 @@ sidebar.expand.tooltip=Tampilkan Sidebar
 sidebar.dropdown.tooltip=Tampilkan sidebar dalam bentuk menu
 Button.deleteContent.fromLibrary=Hilangkan dari pustaka
 Button.deleteContent.fromComputer=Hapus dari komputer
-v3.library.infobar.text1=Mencari tampilan yang lebih lanjut?
-v3.library.infobar.text2=Gunakan tombol Tampilan pada toolbar diatas.
 Subscription.menu.dirtyall=Tandai Semua Sebagai Belum Dibaca
 configureWizard.file.message3=Vuze akan menyimpan berkas data dalam folder tertentu, Anda bisa menentukan folder tersebut disini:
 v3.deleteContent.applyToAll=Terapkan pada %1 entri yang dipilih
@@ -1175,10 +1160,8 @@ v3.dialog.cnclose.subtitle=Pemberitahuan
 TableColumn.header.#.info=Posisi/Nomor Urut
 TableColumn.header.category.info=Nama kategori dari torrent
 TableColumn.header.health.info=Seberapa sehat koneksi Anda ke swarm
-TableColumn.header.Info.info=Tombol untuk melihat halaman detil pada Vuze Content
 TableColumn.header.maxuploads.info=Jumlah maksimum peer yang diunjuk dalam satu waktu
 TableColumn.header.name.info=Nama dari torrent
-TableColumn.header.Quality.info=Kualitas dari vuze content, seperti HD, SD
 TableColumn.header.SeedingRank.info=Tingkat nilai yang menunjukkan seberapa kebutuhan seed sebuah torrent. Lebih tinggi berarti lebih dibutuhkan.
 TableColumn.header.shareRatio.info=Berapa banyak yang diunjuk dibandingkan dengan yang diunduh.
 TableColumn.header.size.info=Ukuran data torrent dalam cakram
@@ -1186,7 +1169,6 @@ TableColumn.header.azsubs.ui.column.subs.info=Tombol yang memungkinkan Anda untu
 TableColumn.header.upspeed.info=Kecepatan unjuk saat ini
 TableColumn.header.downspeed.info=Kecepatan unduh saat ini
 TableColumn.header.up.info=Jumlah data yang terkirim ke pengguna lain
-TableColumn.header.videoLength.info=Panjang waktu tayang vuze video content
 TableColumn.header.eta.info=Perkiraan waktu yang dibutuhkan sampai torrent terunduh
 Pieces.column.#.info=Nomor Potongan
 Peers.column.%.info=Persentasi yang sudah diunduh oleh peer
diff --git a/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties b/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties
index 55bb969..d6f85f4 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties
@@ -1158,8 +1158,6 @@ MyTrackerView.badnat.info=Seed/Peer che hanno fallito un controllo sul NAT, se a
 ConfigView.section.tracker.natchecktimeout=Timeout del controllo (sec)
 ConfigView.section.file.perf.cache.enable=Abilita cache del disco
 ConfigView.section.file.perf.cache.size=Dimensione della cache (%1)
-#Removed
-#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=T&rasferimenti
 MainWindow.menu.transfers.startalltransfers=Av&via tutti
 MainWindow.menu.transfers.stopalltransfers=Fer&ma tutti
@@ -1426,8 +1424,10 @@ window.welcome.title=Benvenuto in Vuze %1
 #file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=Note di rilascio
 dht.reseed.label=Normalmente, il reseed del database distribuito non \u00e8 necessario. Tuttavia, se il numero di contatti \u00e8 basso, puo essere usato per una reintegrazione.\nLasciare vuoto per ricevere automaticamente la lista dei peer connessi, oppure inserire un indirizzo IP ed una porta per ricevere la lista da un peer conosciuto.
+dht.reseed.group=Ripetizione del seed
 dht.reseed.ip=Indirizzo IP
 dht.reseed.port=Porta
+dht.reseed=Ripeti il seed
 dht.reseed.info=Esegue il reseed del database
 dht.diagnostics.group=Diagnostica
 DHTView.title.full=Database distribuito
@@ -1880,6 +1880,8 @@ MyTorrentsView.menu.rename.save_path=Cambia il percorso di salvataggio
 AdvRenameWindow.title=Rinominazione del torrent
 AdvRenameWindow.message=Inserire un nuovo nome per questo download.
 AdvRenameWindow.rename.torrent=Rinomina torrent
+MyTorrentsView.menu.rename.displayed.enter.title=Rinomina nome visualizzato
+MyTorrentsView.menu.rename.displayed.enter.message=Inserisci un nuovo nome da visualizzare per questo download.
 MyTorrentsView.menu.edit_comment=Modifica commento
 MyTorrentsView.menu.edit_comment.enter.title=Modifica del commento
 MyTorrentsView.menu.edit_comment.enter.message=Inserire un commento per questo download.
@@ -2007,7 +2009,9 @@ SpeedTestWizard.set.upload.bytes.per.sec=KB/s
 SpeedTestWizard.set.upload.bits.per.sec=bit/s
 SpeedTestWizard.finish.panel.title=Test della velocit\u00e0 terminato!
 SpeedTestWizard.finish.panel.click.close=Test della velocit\u00e0 completato. Fare clic su Chiudi per uscire.
+SpeedTestWizard.finish.panel.max.upload=Upload max :
 SpeedTestWizard.finish.panel.max.seeding.upload=Max upload durante il seed :
+SpeedTestWizard.finish.panel.max.download=Download max :
 SpeedTestWizard.finish.panel.enabled=abilitato
 SpeedTestWizard.finish.panel.disabled=disabilitato
 SpeedTestWizard.abort.message.scheduled.in=test pianificato fra... %1 secondi
@@ -2058,12 +2062,7 @@ TableColumn.header.SpeedGraphic=Velocit\u00e0
 TableColumn.header.AzProduct=Da
 TableColumn.header.MediaThumb=Materiale
 TableColumn.header.ProgressETA=Progresso
-#TableColumn.header.size={MyTorrentsView.size}
-#TableColumn.header.up={MyTorrentsView.up}
-#TableColumn.header.date_added={MyTorrentsView.date_added}
-#TableColumn.header.name={MyTorrentsView.name}
 TableColumn.header.name.ext=Tipo di file: %1
-#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
 v3.MainWindow.tab.browse=Su Vuze
 v3.MainWindow.tab.library=Libreria
 v3.MainWindow.tab.publish=Pubblica
@@ -2116,7 +2115,6 @@ v3.topbar.menu.show.search=Cerca
 splash.initializeCore=Inizializzazione del core
 splash.initializeUIElements=Inizializzazione degli elementi dell'interfaccia
 ConfigView.section.transfer.autospeedbeta=Auto-speed - beta
-#
 ConfigView.section.ipfilter.peerblocking.group=Blocco dei peer
 ConfigView.section.ipfilter.autoload.group=Caricamento automatico
 ConfigView.section.ipfilter.autoload.file=Filtro IP da caricare automaticamente
@@ -2154,6 +2152,7 @@ dialog.uiswitcher.restart.text=Per cambiare l'interfaccia utente \u00e8 nesessar
 TrayWindow.menu.close=Chiudi il cesto dei download
 # Used for peers which we can't determine.
 PeerSocket.unknown=Sconosciuto
+PeerSocket.fake_client=FALSO
 PeerSocket.bad_peer_id=peer ID non valido
 PeerSocket.mismatch_id=non corrispondente
 PeerSocket.unknown_az_style=Sconosciuto %1/%2
@@ -2275,15 +2274,9 @@ v3.MainWindow.tab.events=Attivit\u00e0
 button.columnsetup.tooltip=Configuazione delle colonne
 v3.activity.remove.title=Rimozione dell'avviso
 v3.activity.remove.text=Cancellare questo avviso?
-#v3.MainWindow.menu.view.configuration=Preferences
-#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
 v3.MainWindow.menu.file.closewindow=Chiudi
 Menu.show.torrent.menu=Mostra il menu Torrent
 Menu.show.torrent.menu.tooltip=Mostra il menu Torrent sulla barra superiore dell'applicazione
-#v3.TorrentOptionsView.title.short=Preferences
-#v3.TorrentOptionsView.title.full=Preferences
-#v3.ConfigView.title.short=Preferences
-#v3.ConfigView.title.full=Preferences
 Views.plugins.aznetstatus.title=Stato della rete
 plugin.aznetstatus.pingtarget=Obbiettivo di ping/traceroute
 ConfigView.section.style.usePathFinder=Usa \u00abCerca percorso\u00bb invece di \u00abCerca\u00bb
@@ -2517,7 +2510,6 @@ Subscription.menu.reset=Ripristina lo stato iniziale
 ConfigView.section.Subscriptions=Iscrizioni
 subscriptions.config.maxresults=Numero massimo di risultati mantenuti per ogni iscrizione [0: illimitati]
 v3.activity.button.readall=Segna tutti come letti
-ConfigView.interface.start.library=Avvia nella Libreria
 TableColumn.header.activityNew=Nuovo
 TableColumn.header.activityType=Tipo
 TableColumn.header.activityText=Messaggio
@@ -2527,7 +2519,6 @@ Subscription.menu.resetauth=Ripristina i dettagli di autenticazione
 Search.menu.engines=Template
 Wizard.Subscription.title=Iscriviti
 Wizard.Subscription.optin.title=Abilita le iscrizioni
-#what you've watched? Discover more with a single click...
 Wizard.Subscription.subscribe.title=Iscrizioni disponibili
 Wizard.Subscription.create.title=Crea una nuova iscrizione
 Button.search=Cerca
@@ -2598,8 +2589,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Associato alle iscrizioni
 Button.deleteContent.fromLibrary=Rimuovi dalla libreria
 Button.deleteContent.fromComputer=Elimina dal computer
 v3.deleteContent.message=\nSi vuole eliminare \u00ab%1\u00bb dal computer o solo rimuoverlo dalla libreria di Vuze?
-v3.library.infobar.text1=Si sta cercando l'interfaccia avanzata?
-v3.library.infobar.text2=Usare il pulsante per il cambio dell'interfaccia nella barra degli strumenti in alto.
 v3.MainWindow.menu.view.toolbartext=Descrizioni nella barra degli strumenti
 v3.MainWindow.menu.view.asSimpleList=Lista semplice
 v3.MainWindow.menu.view.asAdvancedList=Lista avanzata
@@ -2628,6 +2617,7 @@ azbuddy.ui.menu.cat.set=Inserisci le categorie
 azbuddy.ui.menu.cat.set_msg=Lista di categorie separata da spazio, o \u00abAll\u00bb
 azbuddy.ui.menu.cat_subs=Iscriviti
 subs.prop.update_period=Periodo di aggiornamento
+azbuddy.enable_cat_pub=Categorie pubbliche a cui TUTTI gli amici possono iscriversi (separate da \u00ab,\u00bb)
 v3.dialog.cnclose.title=%1 chiuso
 v3.dialog.cnclose.subtitle=Notifica
 v3.dialog.cnclose.info1=\u00c8 stata chiusa una rete in HD.
@@ -2878,6 +2868,7 @@ devices.od.turnon.learn=Maggiori informazioni >
 devices.od=Programma per il download non in linea
 webui.pairingenable=Abilita l'associazione
 webui.group.access=Controllo dell'accesso
+ConfigView.section.Pairing=Accoppiamento
 pairing.accesscode=Codice di accesso
 pairing.ac.getnew=Assegna un nuovo codice di accesso
 pairing.ac.getnew.create=Crea
@@ -2898,94 +2889,30 @@ pairing.status.disabled=Disabilitato
 pairing.view.registered=Fare clic per vedere i dettagli della registrazione attuale
 webui.pairing.info.n=L'associazione \u00e8 disabilitata, vedere le opzioni in Connessione->Associazione per maggiori informazioni su questa funzione.
 webui.pairing.info.y=L'associazione \u00e8 abilitata, vedere le opzioni in Connessione->Associazione per maggiori informazioni.
+webui.enable=Abilita (*)
+ConfigView.section.rss=RSS locali, ecc.
 subscriptions.rss.enable=Crea feed RSS dalle sottoscrizioni
-# The remaining keys were not in MessagesBundle.properties
-v3.activity.share-content.no-msg=%1 ha condiviso %2 con te
-v3.Share.add.buddy.existing=Amici esistenti:
-v3.buddy.prop.pks=Conteggio della chiave pubblica
-v3.activity.buddy-request.accept=Accetta
-v3.buddies.faq=Maggiori informazioni
-v3.MainWindow.button.sendtofriend=Condividi torrent
-login.optional.message=\u00c8 necessario aver eseguito l'accesso per usare questa funzione
-TableColumn.header.videoLength=Lunghezza del video
-v3.Share.wizard.title=Assistente alla condivisione
-v3.MainWindow.button.newtag.share=Nuovo! Condividi il torrent
-azbuddy.ui.dialog.disable.title=Disabilitazione del plugin Amici
-TableColumn.header.Info.info=Pulsante che visualizza la pagina dei dettagli del contenuto multimediale di Vuze
-v3.activity.share-content=%1 ha condiviso %2 con te. %3 <A HREF="%4" TITLE="%5">dice...</A>
-v3.Share.header.message=Condividi con gli amici attuali, o aggiungi nuovi amici.
-MainWindow.menu.community.add_friends=&Aggiungi amici
-v3.Share.header=Condividi
-message.confirm.invite.error=Ahi! C'\u00e8 stato un errore in questa richiesta. Sono presenti errori in uno o pi\u00f9 inviti.
-v3.activity.header.friend.requests.fromyou=Richieste di amicizia - inviate
-v3.MainWindow.menu.view.buddies-viewer=Barra degli amici
-v3.activity.header.rating.reminders=Promemoria per le votazioni
-message.intro.friends=Aggiungi amici.\nCondividi torrent.\nScarica pi\u00f9 velocemente.
-v3.AddFriends.header.message=Aggiungere amici per condividere i torrent preferiti
-v3.Share.add.edit.buddy=Aggiungi/Modifica gli amici
-v3.buddies.disabled.title=Plugin degli amici disabilitato
-ConfigView.section.security.vuze.login=\u00c8 necessario effettuare l'accesso a Vuze per usare questa funzione
-v3.chat.wrongversion=%1 usa una versione di Vuze che non supporta la chat.
-v3.AddFriends.header=Aggiungi amici
-message.prompt.add.friends=Selezionare degli amici dalla barra laterale (in basso a sinistra)
-v3.Share.send.now=Invia
-v3.Share.add.buddy.all=Condividi con tutti
-v3.Share.buddies=Amici
-v3.AddFriends.wizard.title=Assistente all'aggiunta di amici
-message.confirm.share.singular=Ottimo! La tua richiesta di condivisione di un torrent \u00e8 stata inviata.
-v3.activity.buddy-request=\u00c8 presente una richiesta di amicizia da %1.
-v3.Share.invite.buddies.prompt=Invita altri amici con cui condividere
-TableColumn.header.RateIt.info=Per votare il contenuto multimediale di Vuze
-v3.buddies.remove.buddy.dialog.title=Rimuovi
-v3.buddy.prop.catin=Categorie dell'amico disponibili
-v3.buddies.online=In linea (%1)
-message.confirm.share.invite.singular=Ottimo! La richiesta di connessione e condivisione \u00e8 stata inviata. Puoi dire all'amico di accettarla.
-TableColumn.header.Quality.info=Qualit\u00e0 del contenuto multimediale di Vuze, ad esempio HD o SD
-v3.MainWindow.menu.publish.about=Informazioni sulla pubblicazione...
-v3.Share.add.buddy.new=Nuovi amici:
-v3.buddies.remove=Rimuovi amico
-v3.MainWindow.menu.publish.mine=Contenuti multimediali pubblicati
-v3.Share.add.buddy=Aggiungi amici
-azbuddy.enable_cat_pub=Categorie pubbliche a cui TUTTI gli amici possono iscriversi (separate da \u00ab,\u00bb)
-v3.buddies.dnd.info.dialog.title=Condivisione attraverso il trascinamento
-v3.buddies.dnd.info.dialog.remember=Non visualizzare ancora questo messaggio
-v3.Share.disclaimer.link=Maggiori informazioni
-message.confirm.invite.singular=Ottimo! La richiesta di amicizia \u00e8 stata inviata. Puoi dire all'amico di accettarla.
-v3.buddy.prop.catout=Le tue categorie disponibili per i tuoi amici
-v3.activity.buddy-linkup=Si \u00e8 ora amici di %1.
-v3.activity.header.friend.requests.accepted=Richieste di amicizia - accettate
-v3.buddy.menu.viewprofile=Visualizza profilo
-TableColumn.header.Info=Informazioni
-v3.activity.buddy-invited.multi=La richiesta di amicizia \u00e8 stata inviata a:\n%1
-TableColumn.header.Rating_global.info=La valutazione globale per questo contenuto multimediale
-v3.buddy.prop.un=Nome utente
-v3.buddy.prop.dn=Nome visualizzato
-v3.buddies.dnd.info.dialog.text=\u00c8 stata inziata una condivisione attraverso il trascinamento. Si stanno preparando i contenuti multimediali per la condivisione, e la schermata di condivisione verr\u00e0 aperta quando saranno pronti.\n\n\u00c8 necessario tenere aperto Vuze affinch\u00e9 l'amico riceva i contenuti.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Ulteriori informazioni</A> (in inglese).
-v3.Share.optional.message=Messaggio opzionale inviato come notifica (massimo 140 caratteri):
-message.confirm.share.invite.plural=Ottimo! Le richieste di connessione e condivisione sono state inviate. Puoi dire ai tuoi amici di accettarle.
-v3.activity.buddy-invited=La richiesta di amicizia \u00e8 stata inviata a %1.
-v3.buddies.disabled.text._mac=Il plugin degli amici \u00e8 stato disabilitato, impedendo di poter condividere o accettare torrent o richieste di amicizia. Si possono cambiare le impostazoni nella finestra Configurazione.
-v3.buddy.set.catin=Iscriviti alla categoria dell'amico
-message.confirm.invite.plural=Ottimo! Le richieste di amicizia sono state inviate. Puoi dire ai tuoi amici di accettarle.
-azbuddy.ui.dialog.disable.text=La disabilitazione del plugin Amici impedir\u00e0 di condividere torrent usando la barra degli amici nella parte bassa della finestra e di modificare la lista degli amici.\n\nDisabilitare gli amici?
-v3.buddy.prop.on=In linea
-v3.buddy.prop.pc=Messaggi della chat in attesa
-v3.Share.invitees=Invitati
-v3.buddies.remove.buddy.dialog.text=Rimuovere l'amico %1?
-v3.activity.header.share.requests=Richieste di condivisione di torrent
-TableColumn.header.videoLength.info=Durata del contenuto video di Vuze
-v3.Share.menu=Condividi contenuti multimediali
-v3.buddies.disabled.text._windows=Il plugin degli amici \u00e8 stato disabilitato, impedendo di poter condividere o accettare torrent o richieste di amicizia. Si possono cambiare le impostazoni nella finestra Opzioni.
-v3.buddy.set.catout=Permetti all'amico di iscriversi alla categoria
-v3.MainWindow.menu.publish.new=Pubblica contenuti multimediali
-v3.activity.header.friend.requests.foryou=Richieste di amicizia - ricevute
-v3.buddy.prop.lupd=Ultimo aggiornamento
-v3.buddy.menu.remove=Rimuovi amico
-v3.chat.offline=%1 non \u00e8 in linea, ricever\u00e0 il messaggio quando torner\u00e0 disponibile.
-message.confirm.share.plural=Ottimo! Le tue richieste di condivisione di un torrent sono state inviate.
-v3.buddies.add.to.share=Aggiungi amico alla condivisione
-TableColumn.header.Rating_global=Valutazione
-v3.activity.buddy-request.multi=\u00c8 presente una richiesta di amicizia (n\u00b0%3) da %1.
-v3.MainWindow.button.share=Condividi contenuti multimediali
-v3.buddies.friends=Amici
-v3.Share.disclaimer=Nota: sia il contenuto multimediale condiviso sia questo messaggio opzionale saranno criptati.
+device.tivo.enable=Abilita il supporto a TiVo
+Button.removeAll=Rimuovi tutto
+label.rename=Rinomina %1
+RCM.column.rc_rank=Punteggio
+RCM.column.rc_created=Creato
+RCM.column.rc_lastseen=Visto per l'ultima volta
+RCM.column.rc_level=Livello
+rcm.view.heading=Discovery nello swarm
+rcm.config.enabled=Abilita
+rcm.config.max_results=Risultati massimi
+rcm.config.max_level=Livello massimo
+pairing.server.warning.title=Messaggio del server sull'accoppiamento
+wizard.webseedseditor.edit.title=Editor dei seed HTTP
+wizard.webseedseditor.edit.newseed=Nuovo seed
+MyTorrentsView.menu.editWebSeeds=Modifica seed HTTP
+ClientStats.title.full=Statistiche del client
+ClientStats.column.count=Numero
+Scrape.status.cached=Scrape in cache
+network.ipv6.enable.support=Abilita supporto IPv6
+ConfigView.section.plugins.magnetplugin=Gestore delle Magnet URI
+MagnetPlugin.use.lookup.service=Usa il servizio di lookup secondario di Vuze se il lookup dei magnet attraverso il DHT non ha successo
+MagnetPlugin.report.secondarylookup=Provo il servizio di lookup secondario
+MagnetPlugin.report.secondarylookup.ok=Lookup secondario riuscito
+MagnetPlugin.report.secondarylookup.fail=Lookup secondario non riuscito: nessuna sorgente trovata
diff --git a/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties b/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties
index f006d23..06eb5eb 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=\u05e7\u05d5\u05d1\u05e5 \u05d8\u05d5\u05e8\u05e0\u05d8
 Main.parameter.maxUploads=\u05de\u05e1\u05e4\u05e8 \u05d4\u05e2\u05dc\u05d0\u05d5\u05ea \u05de\u05d9\u05e8\u05d1\u05d9
 Main.parameter.maxSpeed=\u05de\u05d4\u05d9\u05e8\u05d5\u05ea \u05d4\u05d5\u05e8\u05d3\u05d4 \u05de\u05d9\u05e8\u05d1\u05d9\u05ea - \u05d1\u05d9\u05d9\u05d8\u05d9\u05dd \u05dc\u05e9\u05e0\u05d9\u05d4
@@ -354,7 +355,6 @@ MyTorrentsView.menu.removeand.deletedata=\u05de\u05d7\u05e7 \u05de\u05d9\u05d3\u
 MyTorrentsView.menu.removeand.deleteboth=\u05de\u05d7\u05e7 \u05d4\u05db\u05dc
 deletedata.title=!!! \u05d6\u05d4\u05d9\u05e8\u05d5\u05ea !!!
 deletedata.message1=:\u05d0\u05ea\u05d4 \u05e2\u05d5\u05de\u05d3 \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05d4\u05de\u05d9\u05d3\u05e2 \u05de
-deletedata.message2=\n?\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05de\u05e9\u05d9\u05da
 MainWindow.menu.file.configure=\u05d0\u05e9\u05e3 \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea
 configureWizard.title=\u05d0\u05e9\u05e3 \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea
 configureWizard.welcome.title=\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd \u05dc\u05d0\u05e9\u05e3 \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e9\u05dc \u05d0\u05d6\u05d5\u05e8\u05d0\u05d5\u05e1
@@ -481,7 +481,6 @@ MyTorrentsView.menu.host.error.title=\u05d0\u05d9\u05e8\u05d5\u05d7 \u05d8\u05d5
 MyTorrentsView.menu.host.error.message=\u05d4\u05d8\u05e2\u05d5\u05ea \u05d4\u05d1\u05d0\u05d4 \u05d4\u05ea\u05e8\u05d7\u05e9\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d0\u05d9\u05e8\u05d5\u05d7 \u05d4\u05d8\u05d5\u05e8\u05d8\u05e0
 ConfigView.section.tracker=\u05d8\u05e8\u05e7\u05e8
 ConfigView.section.tracker.ip=\u05db\u05ea\u05d5\u05d1\u05ea \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05ea \u05e9\u05dc \u05d8\u05e8\u05e7\u05e8
-MainWindow.menu.help.faq=\u05e9\u05d0\u05dc\u05d5\u05ea \u05d5\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea
 ConfigView.section.style.enableXPStyle=(\u05e0\u05d3\u05e8\u05e9 \u05d0\u05d9\u05ea\u05d7\u05d5\u05dc) XP \u05d0\u05e4\u05e9\u05e8 \u05de\u05e8\u05d0\u05d4
 ConfigView.section.tracker.checkip=\u05d1\u05d3\u05d5\u05e7 \u05db\u05ea\u05d5\u05d1\u05ea..
 ipCheckerWizard.title=\u05d0\u05e9\u05e3 \u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d9.\u05e4\u05d9.
@@ -512,7 +511,6 @@ splash.initializeGui=\u05de\u05d0\u05ea\u05d7\u05dc \u05d7\u05dc\u05d5\u05df \u0
 splash.openViews=\u05d8\u05d5\u05e2\u05df \u05ea\u05e6\u05d5\u05d2\u05d5\u05ea
 splash.plugin=\u05d8\u05d5\u05e2\u05df \u05ea\u05d5\u05e1\u05e4\u05ea :
 configureWizard.nat.tooManyPorts=(\u05e4\u05d5\u05e8\u05d8\u05d9\u05dd \u05e8\u05d1\u05d9\u05dd \u05de\u05d3\u05d9 \u05dc\u05d1\u05d7\u05d9\u05e0\u05d4 (\u05de\u05e7\u05e1\u05d9\u05de\u05d5\u05dd 9
-PeerSocket.unknown=\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2
 MyTorrentsView.menu.publish=\u05e4\u05e8\u05e1\u05dd..
 MyTrackerView.status.published=\u05e4\u05d5\u05e8\u05e1\u05dd
 MyTrackerView.completed=\u05d4\u05e1\u05ea\u05d9\u05d9\u05dd
@@ -522,9 +520,15 @@ ConfigView.label.movetorrent=\u05d4\u05e2\u05d1\u05e8 \u05e7\u05d1\u05e6\u05d9 \
 ConfigView.section.file.decoder.label=\u05e7\u05d9\u05d3\u05d5\u05d3 \u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc \u05e2\u05d1\u05d5\u05e8 \u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05db\u05d0\u05e9\u05e8 \u05e0\u05d3\u05e8\u05e9\u05ea \u05d1\u05d7\u05d9\u05e8\u05d4
 ConfigView.section.file.decoder.nodecoder=\u05db\u05dc\u05d5\u05dd
 ConfigView.section.tracker.publicenable=\u05d0\u05e4\u05e9\u05e8 \u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05d9\u05dd
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=\u05de\u05e6\u05d9\u05d2 \u05d0\u05ea \u05de\u05e1\u05e4\u05e8 \u05d4\u05d7\u05dc\u05e7\u05d9\u05dd \u05d4\u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05e9\u05dc \u05db\u05dc \u05d7\u05dc\u05e7\n\u05d0\u05dd \u05d4\u05de\u05e1\u05e4\u05e8 \u05de\u05d9\u05de\u05d9\u05df \u05e7\u05d8\u05df \u05de-1, \u05d0\u05d6\u05d5\u05e8\u05d0\u05d5\u05e1 \u05dc\u05d0 (\u05de\u05e6\u05d0\u05d4 \u05e2\u05d5\u05ea\u05e7 \u05e9\u05dc\u05dd \u05e9\u05dc \u05d4\u05e7\u05d5\u05d1\u05e5 (\u05d5\u05d9\u05d9\u05ea\u05db\u05df \u05e9\u05d4\u05d4\u05d5\u05e8\u05d3\u05d4 \u05dc\u05d0 \u05ea\u05d5\u05db\u05dc \u05dc\u05d4\u05e1\u05ea\u05d9\u05d9\u05dd
 GeneralView.label.trackerurl.tooltip=\u05dc\u05d7\u05e5 \u05db\u05d3\u05d9 \u05dc\u05d4\u05e2\u05ea\u05d9\u05e7 \u05d0\u05ea \u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05e9\u05dc \u05d4\u05d4\u05db\u05e8\u05d6\u05d4 \u05dc\u05dc\u05d5\u05d7
 GeneralView.label.trackerurlopen.tooltip=\u05dc\u05d7\u05e5 \u05dc\u05de\u05e2\u05d1\u05e8 \u05dc\u05d3\u05e3 \u05d4\u05d1\u05d9\u05ea \u05e9\u05dc \u05d4\u05d8\u05e8\u05e7\u05e8
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05d4\u05de\u05de\u05e9\u05e7 \u05d4\u05d2\u05e8\u05e4\u05d9 \u05db\u05dc
 ConfigView.section.style.graphicsUpdate=?\u05e2\u05d3\u05db\u05df \u05ea\u05e6\u05d5\u05d2\u05d4 \u05d2\u05e8\u05e4\u05d9\u05ea \u05db\u05dc \u05db\u05de\u05d4 \u05e2\u05d3\u05db\u05d5\u05e0\u05d9\u05dd
 ConfigView.section.style.reOrderDelay=\u05e1\u05d3\u05e8 \u05de\u05d7\u05d3\u05e9 \u05d8\u05d1\u05dc\u05d0\u05d5\u05ea \u05db\u05dc \u05db\u05de\u05d4 \u05e2\u05d3\u05db\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc \u05de\u05de\u05e9\u05e7 \u05d2\u05e8\u05e4\u05d9?
@@ -658,6 +662,9 @@ health.explain.yellow=\u05d4\u05d8\u05e8\u05e7\u05e8 \u05e4\u05d5\u05e2\u05dc, \
 health.explain.green=\u05d4\u05db\u05dc \u05e4\u05d5\u05e2\u05dc \u05d1\u05e1\u05d3\u05e8
 ConfigView.section.style.alwaysRefreshMyTorrents=\u05ea\u05de\u05d9\u05d3 \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05e9\u05dc\u05d9
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=(\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05d6\u05d5 \u05ea\u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05ea\u05e6\u05d5\u05d2\u05ea \u05d4\u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05d0\u05e4\u05d9\u05dc\u05d5 \u05db\u05d0\u05e9\u05e8 \u05dc\u05d0 \u05de\u05d5\u05e6\u05d2\u05ea (\u05e9\u05d9\u05de\u05d5\u05e9\u05d9 \u05dc\u05ea\u05d5\u05e4\u05e1\u05d5\u05ea \u05de\u05e1\u05d5\u05d9\u05de\u05d5\u05ea \u05e9\u05dc mirc
+#
+#2.0.7.0
+#
 security.certtruster.title=\u05d0\u05d6\u05d4\u05e8\u05ea \u05d0\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d1\u05d8\u05d7\u05d4
 security.certtruster.intro=\u05d0\u05d9\u05e9\u05d5\u05e8 \u05d4\u05d1\u05d8\u05d9\u05d7\u05d5\u05ea \u05d4\u05d5\u05e0\u05e4\u05e7 \u05e2"\u05d9 \u05d7\u05d1\u05e8\u05d4 \u05e9\u05e2\u05dc\u05d9\u05d4 \u05d0\u05ea\u05d4 \u05dc\u05d0 \u05e1\u05d5\u05de\u05da
 security.certtruster.resource=\u05de\u05e9\u05d0\u05d1 :
@@ -710,6 +717,9 @@ ConfigView.section.style.dropdiraction=\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05
 ConfigView.section.style.dropdiraction.opentorrents=\u05e4\u05ea\u05d7 \u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd
 ConfigView.section.style.dropdiraction.sharefolder=\u05e9\u05ea\u05e3 \u05ea\u05d9\u05e7\u05d9\u05d9\u05d4
 ConfigView.section.style.dropdiraction.sharefoldercontents=\u05e9\u05ea\u05e3 \u05ea\u05d5\u05db\u05df
+#
+# 2.0.7.x
+#
 Categories.all=\u05d4\u05db\u05dc
 Categories.uncategorized=\u05dc\u05d0 \u05de\u05e7\u05d5\u05d8\u05dc\u05d2
 CategoryAddWindow.message=\u05d4\u05db\u05e0\u05e1 \u05e9\u05dd \u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d4 \u05d7\u05d3\u05e9\u05d4
@@ -780,7 +790,6 @@ ConfigView.text.minutes=\u05d3\u05e7\u05d5\u05ea
 ConfigView.text.neverIgnore=\u05d0\u05e3 \u05e4\u05e2\u05dd \u05d0\u05dc \u05ea\u05ea\u05e2\u05dc\u05dd
 ConfigView.text.any=\u05db\u05dc\u05e9\u05d4\u05d5
 DownloadManager.error.datamissing=\u05de\u05d9\u05d3\u05e2 \u05d7\u05e1\u05e8
-iconBar.queue.tooltip=\u05ea\u05d5\u05e8
 MainWindow.menu.file.open.torrentforseeding=(\u05e7\u05d5\u05d1\u05e5 \u05d8\u05d5\u05e8\u05e0\u05d8 (\u05dc\u05d4\u05e4\u05e6\u05d4
 MainWindow.menu.language.refresh=\u05e8\u05e2\u05e0\u05df
 ManagerItem.forced=\u05de\u05d0\u05d5\u05dc\u05e5
@@ -847,6 +856,9 @@ SpeedView.stats.downloaded=\u05d9\u05e8\u05d3
 SpeedView.stats.uploaded=\u05e2\u05dc\u05d4
 SpeedView.stats.uptime=(\u05d6\u05de\u05df \u05e4\u05e2\u05d5\u05dc\u05d4 (\u05e9\u05e2\u05d5\u05ea
 AutoMigration.useralert=\u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05e2\u05d1\u05e8\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05e9\u05dc \u05e7\u05d1\u05e6\u05d9\u05dd/\u05ea\u05d9\u05e7\u05d9\u05d5\u05ea :\n\n%1\n%2 \u05db\u05dc \u05ea\u05e7\u05dc\u05d4 \u05d9\u05e9 \u05dc\u05d4\u05e2\u05d1\u05d9\u05e8 \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=(\u05e4\u05ea\u05d7 \u05d8\u05d5\u05e8\u05e0\u05d8(\u05d9\u05dd
 OpenTorrentWindow.message=\u05e0\u05d9\u05e1\u05d9\u05d5\u05e0\u05d9
 OpenTorrentWindow.addFiles=\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05e6\u05d9\u05dd
@@ -927,6 +939,8 @@ download.removerules.unauthorised=Automatically remove unauthorised torrents
 ConfigView.section.server.enableudp=Enable UDP tracker client protocol.
 ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details
 MyTrackerView.badnat=\u05d1\u05e2\u05d9\u05d9\u05ea \u05ea\u05e7\u05e9\u05d5\u05e8\u05ea
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=\u05d4\u05e2\u05d1\u05e8\u05d5\u05ea
 MainWindow.menu.transfers.startalltransfers=\u05d4\u05ea\u05d7\u05dc \u05d4\u05db\u05dc
 MainWindow.menu.transfers.stopalltransfers=\u05e2\u05e6\u05d5\u05e8 \u05d4\u05db\u05dc
@@ -981,18 +995,16 @@ updater.progress.window.title=\u05d1\u05d8\u05dc \u05e4\u05e2\u05d5\u05dc\u05d5\
 Button.abort=\u05d1\u05d8\u05dc
 ConfigView.label.overrideip=\u05e2\u05e7\u05d5\u05e3 \u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05d9\u05d9.\u05e4\u05d9. \u05e9\u05e0\u05e9\u05dc\u05d7\u05ea \u05dc\u05d8\u05e8\u05e7\u05e8\n - \u05ea\u05e9\u05ea\u05de\u05e9 \u05e8\u05e7 \u05d0\u05dd \u05d0\u05ea\u05d4 \u05d9\u05d5\u05d3\u05e2 \u05dc\u05de\u05d4 \u05d1\u05d0\u05de\u05ea \u05d0\u05ea\u05d4 \u05e6\u05e8\u05d9\u05da \u05d6\u05d0\u05ea
 ConfigView.label.overrideip.tooltip=Inform the tracker of a different IP address than the one outgoing packets come from. Leave blank not to use the option.
+#file can be a URL or a path in the jar
 diagnostics.log_found=Vuze did not shutdown tidily. Please check %1 for diagnostic log files and consider reporting them to the Vuze team if this is the result of an application error.
 ConfigView.section.logging.log0type=\u05de\u05d9\u05d3\u05e2
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=Torrent Files:
 Button.moveUp=\u05d4\u05d6\u05d6 \u05de\u05e2\u05dc\u05d4
 Button.moveDown=\u05d4\u05d6\u05d6 \u05dc\u05de\u05d8\u05d4
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-configureWizard.nat.already_listening=\u05dc\u05d0 \u05de\u05e1\u05d5\u05d2\u05dc \u05dc\u05d1\u05d7\u05d5\u05df \u05d0\u05ea \u05d4\u05e4\u05d5\u05e8\u05d8 \u05de\u05e9\u05d5\u05dd \u05e9\u05d4\u05d5\u05d0\n\u05e0\u05de\u05e6\u05d0 \u05d1\u05e9\u05d9\u05de\u05d5\u05e9. \u05d0\u05e0\u05d0 \u05e2\u05e6\u05d5\u05e8 \u05d0\u05ea \u05db\u05dc \u05d4\u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05d4\u05e4\u05e2\u05d9\u05dc\u05d9\u05dd \u05d5\u05d4\u05e4\u05e2\u05dc \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d0\u05d6\u05d5\u05e8\u05d0\u05d5\u05e1.\n\u05d5\u05d0\u05d6 \u05d4\u05e4\u05e2\u05dc \u05d1\u05d3\u05d9\u05e7\u05d4 \u05d6\u05d5 \u05e9\u05d5\u05d1.
-SelectorGuard.repairmessage=If you get this message repeatedly, and you are sure there is nothing wrong with your\nnetwork setup, and you are running java 1.4 series, then you have likely encountered\na JRE bug, and should upgrade to the newer java 1.5 (5.0) series.
-MyTorrentsView.menu.setSpeed=\u05e7\u05d1\u05e2 \u05de\u05d4\u05d9\u05e8\u05d5\u05ea
-ConfigView.label.oldpollingstyle=Use alternative socket polling - Increases CPU usage, but may help with network disconnects
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2
+iconBar.queue.tooltip=\u05ea\u05d5\u05e8
+MainWindow.menu.help.faq=\u05e9\u05d0\u05dc\u05d5\u05ea \u05d5\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea
 MainWindow.menu.help.donate=\u05ea\u05e8\u05d5\u05dd
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties b/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties
index c8cb0df..a8ce490 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties
@@ -50,7 +50,6 @@ MainWindow.status.latestversion=\u6700\u65b0
 MainWindow.status.latestversion.clickupdate=\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
 MainWindow.status.unknown=\u4e0d\u660e
 MainWindow.status.checking=\u78ba\u8a8d\u4e2d
-TableColumn.header.mytorrents=Torrent
 TableColumn.header.name=\u540d\u524d
 TableColumn.header.size=\u30b5\u30a4\u30ba
 TableColumn.header.done=\u72b6\u6cc1 (%)
@@ -304,7 +303,6 @@ IrcView.actionnotsupported=\u30a2\u30af\u30b7\u30e7\u30f3\u306f\u30b5\u30dd\u30f
 IrcView.clientsconnected=\u30e6\u30fc\u30b6
 IrcView.noticefrom=\u6ce8\u610f:
 IrcView.errormsg=Wrong Syntax on /msg\uff1a/msg user text
-IrcView.help=Valid commands are :\n . /help : displays this message\n . /nick | /name : changes your name \n . /me action : sends an action \n . /msg nick message : sends a private message to <nick>\n . /r message : reply to last private message\n . /join #channelB (do not click here, it's an example) : changes current channel to channelB
 PasswordWindow.title=Vuze \u306f\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059
 PasswordWindow.passwordprotected=Vuze \u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u3088\u3063\u3066\u4fdd\u8b77\u3055\u308c\u3066\u3044\u307e\u3059\u3002\nVuze \u306e\u30a6\u30a4\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff1a
 Button.ok=OK
@@ -313,7 +311,6 @@ TrackerChangerWindow.newtracker=\u65b0\u3057\u3044\u30c8\u30e9\u30c3\u30ab\u30fc
 PeersView.discarded=\u7834\u68c4
 PeersView.discarded.info=\uff08\u4f55\u3089\u304b\u306e\u7406\u7531\u3067\uff09\u5fc5\u8981\u3068\u3057\u306a\u3044\u306e\u306b\u53d7\u4fe1\u3057\u3001\u7834\u68c4\u3055\u308c\u305f\u30c7\u30fc\u30bf
 discarded=\u3092\u7834\u68c4
-TableColumn.header.#=No.
 MyTorrentsView.menu.move=\u79fb\u52d5
 MyTorrentsView.menu.moveUp=\u4e0a\u3078
 MyTorrentsView.menu.moveDown=\u4e0b\u3078
@@ -382,7 +379,6 @@ MyTorrentsView.menu.removeand.deletedata=\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u3
 MyTorrentsView.menu.removeand.deleteboth=\u4e21\u65b9\u3068\u3082
 deletedata.title=\u8b66\u544a
 deletedata.message1=\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059:\n
-deletedata.message2=\n\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f
 MainWindow.menu.file.configure=\u8a2d\u5b9a\u30a6\u30a3\u30b6\u30fc\u30c9...
 configureWizard.title=\u8a2d\u5b9a\u30a6\u30a3\u30b6\u30fc\u30c9
 configureWizard.welcome.title=Vuze \u8a2d\u5b9a\u30a6\u30a3\u30b6\u30fc\u30c9\u3078\u3088\u3046\u3053\u305d
@@ -521,7 +517,6 @@ ConfigView.section.tracker=\u30c8\u30e9\u30c3\u30ab\u30fc
 ConfigView.section.tracker.pollinterval=\u30c8\u30e9\u30c3\u30ab\u30fc\u3078\u306e\u554f\u3044\u5408\u308f\u305b\u9593\u9694\uff08\u79d2\uff09
 ConfigView.section.tracker.publishenable=\u30c8\u30e9\u30c3\u30ab\u30fc\u306e\u8a73\u7d30\u3092 "<tracker_url>" \u306b\u516c\u958b
 ConfigView.section.tracker.ip=\u30c8\u30e9\u30c3\u30ab\u30fc\u306e\u30b0\u30ed\u30fc\u30d0\u30eb IP \u30a2\u30c9\u30ec\u30b9
-MainWindow.menu.help.faq=FAQ
 ConfigView.section.style.enableXPStyle=XP \u30b9\u30bf\u30a4\u30eb\u3092\u4f7f\u7528\uff08\u518d\u8d77\u52d5\u304c\u5fc5\u8981\uff09
 ConfigView.section.tracker.checkip=\u81ea\u52d5\u691c\u51fa...
 ipCheckerWizard.title=IP \u30c1\u30a7\u30c3\u30ab\u30fc\u30a6\u30a3\u30b6\u30fc\u30c9
@@ -856,7 +851,6 @@ ConfigView.text.minutes=\u5206
 ConfigView.text.neverIgnore=\u7121\u8996\u3057\u306a\u3044
 ConfigView.text.any=\u3044\u305a\u308c\u304b
 DownloadManager.error.datamissing=\u30c7\u30fc\u30bf\u7121\u3057
-iconBar.queue.tooltip=\u30ad\u30e5\u30fc
 MainWindow.menu.file.open.torrentforseeding=Torrent \u30d5\u30a1\u30a4\u30eb\uff08\u30b7\u30fc\u30c9\u7528\uff09...
 MainWindow.menu.language.refresh=\u518d\u8aad\u307f\u8fbc\u307f
 ManagerItem.forced=\u5f37\u5236
@@ -1124,10 +1118,6 @@ upnp.trace_to_log=\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u30ed\u30b0\u306b\u
 ConfigView.pluginlist.coreplugins=\u6b21\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\uff1a
 Peers.column.DLedFromOthers=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9(\u4ed6)
 Peers.column.DLedFromOthers.info=\u3053\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u63a5\u7d9a\u3057\u305f\u6642\u70b9\u304b\u3089\u306e\u3001\u307b\u304b\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u7dcf\u91cf
-Peers.column.UpDownRatio=Up:Down
-Peers.column.UpDownRatio.info=Peer's "Uploaded : Downloaded" Ratio
-Peers.column.UpRatio=Up Ratio
-Peers.column.UpRatio.info=Peer's "Upload from you : Uploaded from other" ratio
 upnp.releasemappings=\u5272\u308a\u5f53\u3066\u305f\u30dd\u30fc\u30c8\u3092\u7d42\u4e86\u6642\u306b\u89e3\u653e
 webui.upnpenable=\u3053\u306e\u30dd\u30fc\u30c8\u306b\u5bfe\u3057\u3066 UPnP \u3092\u4f7f\u7528 (*)
 ConfigView.section.file.friendly.hashchecking=\u30d4\u30fc\u30b9\u30c1\u30a7\u30c3\u30af\u306e\u983b\u5ea6\u3092\u4e0b\u3052\u308b
@@ -1278,15 +1268,11 @@ ConfigView.section.sharing.rescanperiod=\u518d\u30b9\u30ad\u30e3\u30f3\u9593\u96
 ConfigView.section.connection.advanced=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8a73\u7d30
 ConfigView.section.connection.advanced.url=http://wiki.vuze.com/index.php/AdvancedNetworkSettings
 ConfigView.section.connection.advanced.mtu=MTU
-ConfigView.section.connection.advanced.mtu.tooltip=Maximum size of a packet that can be transferred in one frame over a network.\nVuze uses MTU-40 (MSS) for upload packet-payload optimizations.\nRecommended values:\n  576 - Dial-up connections\n1492 - PPPoE broadband connections\n1500 - Ethernet, DSL and Cable broadband connections 
 ConfigView.section.connection.advanced.SO_RCVBUF=SO_RCVBUF \u30b5\u30a4\u30ba [0: OS \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024]
 ConfigView.section.connection.advanced.SO_SNDBUF=SO_SNDBUF \u30b5\u30a4\u30ba [0: OS \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024]
 ConfigView.section.connection.advanced.IPDiffServ=\u9001\u4fe1\u30d1\u30b1\u30c3\u30c8 DiffServ\uff08TOS \u30d5\u30a3\u30fc\u30eb\u30c9\uff09
-ConfigView.section.connection.advanced.IPDiffServ.tooltip=Sets the DiffServ part of the type-of-service (TOS) field in the IP header for outgoing packets.\nHexadecimal values can be specified by prefixing them with '0x', e.g. 0x10.\nVuze leaves this unset by default, meaning the defaults for the underlying OS are used.\nNOTE: Underlying network implementations may ignore this value, so this option is highly dependent on OS and JRE versions.
 ConfigView.section.interface.confirm_torrent_removal=Torrent \u3092\u524a\u9664\u3059\u308b\u3068\u304d\u3001\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Torrent \u30ea\u30b9\u30c8\u304b\u3089 Torrent \u3092\u524a\u9664\u3059\u308b\u969b\u306b\u78ba\u8a8d\u3057\u307e\u3059
-TableColumn.header.confirm_torrent_removal=\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f\n
-TableColumn.header.seed_to_peer_ratio=Seed2PeerRatio
 TableColumn.header.seed_to_peer_ratio.info=\u30b7\u30fc\u30c0\u30fc\u306b\u5bfe\u3059\u308b\u30d4\u30a2\u306e\u6bd4\u7387
 PeersView.connected_time=\u63a5\u7d9a\u6642\u9593
 PeersView.connected_time.info=\u30d4\u30a2\u3068\u306e\u5408\u8a08\u63a5\u7d9a\u6642\u9593
@@ -1436,7 +1422,6 @@ Button.close=\u9589\u3058\u308b
 window.welcome.title=Vuze %1 \u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8
 #file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8
-dht.reseed.label=Normally reseeding of the Distributed Database is not necessary. However, if the number of contacts is low this can be used for re-integration.\nLeave blank to bootstrap off connected peers or enter IP and port to explicitly bootstrap from a known peer.
 dht.reseed.group=\u518d\u30b7\u30fc\u30c9
 dht.reseed.ip=IP \u30a2\u30c9\u30ec\u30b9
 dht.reseed.port=\u30dd\u30fc\u30c8
@@ -1466,7 +1451,6 @@ DHTView.operations.sent=\u9001\u4fe1\u6e08
 DHTView.operations.ok=OK
 DHTView.operations.failed=\u5931\u6557
 DHTView.operations.received=\u53d7\u4fe1\u6e08
-DHTView.operations.ping=Ping
 DHTView.operations.findNode=\u30ce\u30fc\u30c9\u3092\u691c\u7d22
 DHTView.operations.findValue=\u5024\u3092\u691c\u7d22
 DHTView.operations.store=\u30b9\u30c8\u30a2
@@ -1520,7 +1504,6 @@ ConfigView.label.playfilefinished=\u30d5\u30a1\u30a4\u30eb\u5b8c\u6210\u6642\u30
 ConfigView.label.backupconfigfiles=\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
 ConfigView.section.tracker.client.scrapesingleonly=\u30c8\u30e9\u30c3\u30ab\u30fc\u3054\u3068\u306e\u30b9\u30af\u30ec\u30a4\u30d7\u3092\u7121\u52b9\u306b\u3059\u308b\uff08'URL too long' (414) \u30a8\u30e9\u30fc\u3092\u8fd4\u3059\u5834\u5408\u306b\u6709\u52b9\u3067\u3059\uff09
 dht.ipfilter.log=IP \u30d5\u30a3\u30eb\u30bf\u306b\u5408\u81f4\u3057\u305f\u5834\u5408\u306b\u30ed\u30b0\u306b\u8a18\u9332
-ConfigView.label.seeding.addForSeedingDLCopyCount=Consider 'add for seeding' downloads to have downloaded this number of copies
 MyTorrentsView.menu.movemenu=\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5
 MyTorrentsView.menu.movedata=\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5...
 MyTorrentsView.menu.movetorrent=Torrent \u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5...
@@ -1620,17 +1603,10 @@ PeersView.BlockView.Transfer=\u8ee2\u9001\u4e2d
 PeersView.BlockView.NextRequest=\u6b21\u306e\u8981\u6c42
 PeersView.BlockView.title=\u30d4\u30fc\u30b9\u30de\u30c3\u30d7
 PeersView.BlockView.AvailCount=\u6709\u52b9\u6570
-TableColumn.header.dialog.NumberError.title=\u7121\u52b9\u307e\u305f\u306f\u8a8d\u8b58\u3067\u304d\u306a\u3044\u6570\u5024
-TableColumn.header.dialog.NumberError.text=\u5165\u529b\u3055\u308c\u305f\u6570\u5024\u306f\u7121\u52b9\u304b\u8a8d\u8b58\u3067\u304d\u307e\u305b\u3093\u3002
 MyTorrentsView.menu.manual=\u624b\u52d5...
 MyTorrentsView.menu.manual.per_torrent=\u624b\u52d5\uff08Torrent \u3054\u3068\uff09
 MyTorrentsView.menu.manual.shared_torrents=\u624b\u52d5\uff08Torrent \u5171\u6709\uff09
-TableColumn.header.dialog.setSpeed.title=%1 \u306e\u901f\u5ea6\u3092\u8a2d\u5b9a
 # %1 = "in kbps" or ""; %2 = "upload" or "download"
-TableColumn.header.dialog.setNumber.text=%1 \u3092 %2 \u306b\u5909\u66f4\uff1a
-TableColumn.header.dialog.setNumber.upload=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9
-TableColumn.header.dialog.setNumber.download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-TableColumn.header.dialog.setNumber.inKbps=in kb/s
 OpenTorrentWindow.torrentLocation=Torrent \u30d5\u30a1\u30a4\u30eb\uff1a
 OpenTorrentWindow.addFiles.URL=URL \u3092\u8ffd\u52a0
 OpenTorrentWindow.addFiles.Folder=\u30d5\u30a9\u30eb\u30c0\u3092\u8ffd\u52a0
@@ -1725,8 +1701,6 @@ Button.markSelected=\u9078\u629e\u3055\u308c\u305f\u3082\u306e\u3092\u30de\u30fc
 Button.unmarkSelected=\u30de\u30fc\u30af\u3092\u5916\u3059
 plugins.basicview.config=\u8a2d\u5b9a
 TorrentOptionsView.param.max.uploads=\u6700\u5927\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6570 [\u6700\u5c0f: 2]
-TableColumn.header.dialog.setPosition.title=\u4f4d\u7f6e\u8a2d\u5b9a
-TableColumn.header.dialog.setPosition.text=\u9078\u629e\u3055\u308c\u305f Torrent \u3092\u914d\u7f6e\u3059\u308b\u4f4d\u7f6e\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff1a
 MyTorrentsView.menu.reposition.manual=\u518d\u914d\u7f6e...
 ConfigView.section.connection.advanced.info.link=\u8a73\u3057\u304f\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044
 ConfigView.section.connection.advanced.socket.group=Socket
@@ -1736,14 +1710,9 @@ ConfigView.section.proxy.group.tracker=\u30c8\u30e9\u30c3\u30ab\u30fc\u3068\u306
 ConfigView.section.proxy.group.peer=\u30d4\u30a2\u3068\u306e\u901a\u4fe1
 Pieces.column.Requested=\u8981\u6c42\u3055\u308c\u305f
 ConfigView.label.maxuploadsseeding=\u30b7\u30fc\u30c9\u6642\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6570\u306e\u30c7\u30d5\u30a9\u30eb\u30c8
-TableColumn.header.filter=\u30d5\u30a3\u30eb\u30bf\uff1a
 popup.error.hideall=\u3059\u3079\u3066\u3092\u96a0\u3059
 ConfigView.section.style.dataStatsOnly=\u30c7\u30fc\u30bf\u7d71\u8a08\u60c5\u5831\u306e\u307f\u8868\u793a
 ConfigView.section.style.separateProtDataStats=\u30c7\u30fc\u30bf\u3068\u30d7\u30ed\u30c8\u30b3\u30eb\u7d71\u8a08\u3092\u5225\u3005\u306b\u8868\u793a
-TableColumn.header.dialog.setFilter.title=\u30d5\u30a3\u30eb\u30bf\u3092\u5909\u66f4
-TableColumn.header.dialog.setFilter.text=\u30bb\u30af\u30b7\u30e7\u30f3 %1 \u306f\u4e0b\u306b\u5165\u529b\u3057\u305f\u6587\u5b57\u5217\u306b\u3088\u308a\u30d5\u30a3\u30eb\u30bf\u30fc\u3055\u308c\u307e\u3059\u3002\u8907\u6570\u306e\u30d5\u30ec\u30fc\u30ba\u3092\u5217\u6319\u3059\u308b\u306b\u306f |\uff08\u30d1\u30a4\u30d7\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-TableColumn.header.filter.tooltip=Ctrl+X \u3067\u6b63\u898f\u8868\u73fe\u30e2\u30fc\u30c9\u3068\u901a\u5e38\u30e2\u30fc\u30c9\u3092\u5207\u308a\u66ff\u3048\u307e\u3059\u3002\n\u8907\u6570\u306e\u30d5\u30ec\u30fc\u30ba\u3092\u6307\u5b9a\u3059\u308b\u306b\u306f |\uff08\u30d1\u30a4\u30d7\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-TableColumn.header.clearFilter.tooltip=\u30d5\u30a3\u30eb\u30bf\u3092\u6d88\u53bb\u3057\u307e\u3059
 MyTorrentsView.menu.filter=\u30d5\u30a3\u30eb\u30bf\u4e00\u89a7...
 ConfigView.section.file.resume.recheck.all=\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u305f\u5f8c\u306e\u8d77\u52d5\u6642\u306b\u5b8c\u6210\u3057\u305f\u30d4\u30fc\u30b9\u3092\u3059\u3079\u3066\u30c1\u30a7\u30c3\u30af\uff08\u30aa\u30d5\u306e\u5834\u5408\u306f\u6700\u5f8c\u306b\u4fdd\u5b58\u3057\u305f\u30d4\u30fc\u30b9\u306e\u307f\u3092\u30c1\u30a7\u30c3\u30af\uff09
 ConfigureWizard.language.choose=\u8a00\u8a9e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\uff1a
@@ -1756,7 +1725,7 @@ popup.download.finished=%1 \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u5b8
 popup.file.finished=%1 \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5b8c\u4e86
 ConfigView.auto=\u81ea\u52d5
 Plugin.localtracker.autoadd.info=\u81ea\u52d5\u7684\u306b\u30ed\u30fc\u30ab\u30eb\u306e\u30d4\u30a2\u306b\u8ffd\u52a0 [';' \u533a\u5207\u308a\u3067 IP \u30a2\u30c9\u30ec\u30b9\u3092\u5217\u6319 \uff08\u4f8b\uff09 1.2.3.4]
-Plugin.localtracker.autoadd=    \u30d4\u30a2\u3092\u660e\u793a
+Plugin.localtracker.autoadd=\u30d4\u30a2\u3092\u660e\u793a
 Plugin.localtracker.networks.info=\u30ed\u30fc\u30ab\u30eb\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3068\u307f\u306a\u3059 [';' \u533a\u5207\u308a\u3067\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u5217\u6319 \uff08\u4f8b\uff09 145.227.*.*]
 Plugin.localtracker.networks=\u30ed\u30fc\u30ab\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af
 MainWindow.menu.view.plugins.logViews=\u30ed\u30b0
@@ -1878,13 +1847,8 @@ MainWindow.menu.view.iconbar=\u30c4\u30fc\u30eb\u30d0\u30fc
 MyTorrentsView.menu.rename=\u540d\u524d\u3092\u5909\u66f4
 MyTorrentsView.menu.rename.displayed=\u8868\u793a\u540d\u3092\u5909\u66f4
 MyTorrentsView.menu.rename.save_path=\u4fdd\u5b58\u5148\u3092\u5909\u66f4
-MyTorrentsView.menu.rename.displayed_and_save_path=\u4e21\u65b9\u3068\u3082\u5909\u66f4
 MyTorrentsView.menu.rename.displayed.enter.title=\u8868\u793a\u540d\u3092\u5909\u66f4
 MyTorrentsView.menu.rename.displayed.enter.message=\u8868\u793a\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u4f55\u3082\u5165\u529b\u3057\u306a\u3044\u5834\u5408\u306f\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u540d\u524d\u304c\u4f7f\u308f\u308c\u307e\u3059\u3002
-MyTorrentsView.menu.rename.save_path.enter.title=\u4fdd\u5b58\u5148\u3092\u5909\u66f4
-MyTorrentsView.menu.rename.save_path.enter.message=\u4fdd\u5b58\u5148\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u4f55\u3082\u5165\u529b\u3057\u306a\u3044\u5834\u5408\u306f\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u540d\u524d\u304c\u4f7f\u308f\u308c\u307e\u3059\u3002
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u540d\u524d\u3092\u5909\u66f4
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u4f55\u3082\u5165\u529b\u3057\u306a\u3044\u5834\u5408\u306f\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u540d\u524d\u304c\u4f7f\u308f\u308c\u307e\u3059\u3002
 MyTorrentsView.menu.edit_comment=\u30b3\u30e1\u30f3\u30c8\u3092\u7de8\u96c6
 MyTorrentsView.menu.edit_comment.enter.title=\u30b3\u30e1\u30f3\u30c8\u3092\u7de8\u96c6
 MyTorrentsView.menu.edit_comment.enter.message=\u30b3\u30e1\u30f3\u30c8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
@@ -1980,16 +1944,8 @@ ConfigView.label.openbar.complete=\u81ea\u52d5\u3067\u30b7\u30fc\u30c9\u3092\u95
 ConfigView.label.transferbar.remember_location=\u8ee2\u9001\u30d0\u30fc\u306e\u6700\u5f8c\u306b\u958b\u3044\u305f\u4f4d\u7f6e\u3092\u8a18\u61b6
 ConfigView.section.transfer.autospeed.forcemin=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u901f\u5ea6\u3092\u5f37\u5236\u7684\u306b\u5909\u66f4 (%1)
 MainWindow.menu.tools.speedtest=\u30b9\u30d4\u30fc\u30c9\u30c6\u30b9\u30c8...
-speedtest.wizard.title=Speed Test
-speedtest.wizard.run=Run a speed test
-speedtest.wizard.test.mode.updown=upload and download
-speedtest.wizard.test.mode.up=upload
-speedtest.wizard.test.mode.down=download
-SpeedTestWizard.abort.message.download.added=Download %1 added during test
 window.uiswitcher.text=\u6b21\u304b\u3089\u304a\u597d\u307f\u306e\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 window.uiswitcher.NewUI.text=* \u521d\u5fc3\u8005\u3084\u65b0\u898f\u30e6\u30fc\u30b6\u306b\u304a\u52e7\u3081\n\n* \u4f7f\u3044\u3084\u3059\u3044\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\n\n* Vuze \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u516c\u958b\u3059\u308b\u306b\u306f\u5fc5\u9808
-window.uiswitcher.AdvancedUI.title=\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8 Vuze 
-window.uiswitcher.AdvancedUI.text=* \u65e7\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u305f\u3044\u304c\u3001Vuze \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0a\u3067\u691c\u7d22\u30fb\u30d6\u30e9\u30a6\u30ba\u30fb\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u516c\u958b\u3092\u884c\u3044\u305f\u3044\u30e6\u30fc\u30b6\u306b\u304a\u52e7\u3081\u3002\n\n* \u7c21\u5358\u3067\u4f7f\u3044\u3084\u3059\u3044\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3068\u3088\u308a\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u3092\u4e21\u7acb\u3002
 window.uiswitcher.ClassicUI.title=\u30af\u30e9\u30b7\u30c3\u30af\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9
 window.uiswitcher.ClassicUI.text=* 2.x \u306e\u6a5f\u80fd\u3092\u4fdd\u6301\u3002\n\n* Vuze \u30b3\u30f3\u30c6\u30f3\u30c4\u30ec\u30a4\u30e4\u30fc\u306f\u30ed\u30fc\u30c9\u3055\u308c\u307e\u305b\u3093
 window.uiswitcher.bottom.text=Vuze UI Chooser \u3067\u3044\u3064\u3067\u3082\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
@@ -2018,7 +1974,12 @@ TableColumn.header.SpeedGraphic=\u901f\u5ea6
 TableColumn.header.AzProduct=\u63d0\u4f9b\u5143
 TableColumn.header.MediaThumb=\u30e1\u30c7\u30a3\u30a2
 TableColumn.header.ProgressETA=\u72b6\u6cc1
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
 TableColumn.header.name.ext=\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f: %1
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
 v3.MainWindow.tab.home=\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9
 v3.MainWindow.tab.browse=Vuze
 v3.MainWindow.tab.library=\u30e9\u30a4\u30d6\u30e9\u30ea
@@ -2042,7 +2003,6 @@ v3.MainWindow.button.comment=\u30b3\u30e1\u30f3\u30c8
 v3.MainWindow.button.viewdetails=\u8a73\u7d30\u3092\u8868\u793a
 v3.MainWindow.button.play=\u518d\u751f
 v3.MainWindow.button.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
-v3.MainWindow.button.sendtofriend=Torrent \u3092\u5171\u6709
 v3.MainWindow.button.preview=\u30d7\u30ec\u30d3\u30e5\u30fc
 v3.MainWindow.view.wait=\u521d\u671f\u5316\u4e2d\u3067\u3059\u3002\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
 v3.MainWindow.xofx=%1 / %2
@@ -2090,7 +2050,6 @@ dialog.uiswitcher.restart.title=UI Switcher: Vuze \u306e\u518d\u8d77\u52d5\u304c
 dialog.uiswitcher.restart.text=\u65b0\u3057\u3044 UI \u30e2\u30fc\u30c9\u306b\u5207\u308a\u66ff\u3048\u308b\u305f\u3081 Vuze \u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 TrayWindow.menu.close=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30d0\u30b9\u30b1\u30c3\u30c8\u3092\u9589\u3058\u308b
 # Used for peers which we can't determine.
-PeerSocket.unknown=Unknown
 OpenTorrentWindow.mb.askCreateDir.title=\u4fdd\u5b58\u5148\u306e\u30d5\u30a9\u30eb\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
 OpenTorrentWindow.mb.askCreateDir.text=\u4fdd\u5b58\u5148\u306e\u30d5\u30a9\u30eb\u30c0 '%1' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\n\n\u4f5c\u6210\u3057\u307e\u3059\u304b\uff1f
 ConfigTransferAutoSpeed.upload.capacity.usage=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5bb9\u91cf\u306e\u4f7f\u7528\u7387
@@ -2167,7 +2126,6 @@ Progress.reporting.window.remove.auto=\u975e\u30a2\u30af\u30c6\u30a3\u30d6\u306a
 Progress.reporting.window.remove.auto.tooltip=\u5b8c\u4e86\u30fb\u5931\u6557\u30fb\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u9805\u76ee\u3092\u81ea\u52d5\u7684\u306b\u524a\u9664\u3057\u307e\u3059
 Progress.reporting.window.remove.now=\u975e\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u9805\u76ee\u3092\u524a\u9664
 Progress.reporting.window.remove.now.tooltip=\u5b8c\u4e86\u30fb\u5931\u6557\u30fb\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u9805\u76ee\u3092\u524a\u9664\u3057\u307e\u3059
-xmlhttp.legacy.error=\u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e XML/HTTP \u30d7\u30e9\u30b0\u30a4\u30f3\u306f Vuze \u3067\u306f\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
 TorrentOptionsView.multi.title.short=\u74b0\u5883\u8a2d\u5b9a
 TorrentOptionsView.multi.title.full=\u74b0\u5883\u8a2d\u5b9a
 MyTorrentsView.menu.open_parent_folder=\u5305\u6709\u3059\u308b\u30d5\u30a9\u30eb\u30c0\u3092\u958b\u304f
@@ -2237,11 +2195,6 @@ ConfigView.section.security.unlockkey.error=\u9375\u306e\u89e3\u9664\u306b\u5931
 ConfigView.copy.to.clipboard.tooltip=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc
 Views.plugins.azbuddy.title=Friend
 Browser.popup.error.no.access=\u30ea\u30e2\u30fc\u30c8\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u7f6e\u304d\u307e\u3057\u305f\u3002\n\u3057\u3070\u3089\u304f\u3057\u305f\u5f8c\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\n
-v3.activity.header.today=\u4eca\u65e5
-v3.activity.header.yesterday=\u6628\u65e5
-v3.activity.header.xdaysago=%1 \u65e5\u524d
-v3.activity.header.1weekago=1 \u9031\u9593\u524d
-v3.activity.header.xweeksago=%1 \u9031\u9593\u524d
 ConfigView.label.queue.stoponcebandwidthmet=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9/\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u901f\u5ea6\u304c\u4e0a\u9650\u306b\u9054\u3057\u305f\u5834\u5408\u3001\u307b\u304b\u306e Torrent \u3092\u958b\u59cb\u3057\u306a\u3044
 ConfigView.section.style.forceMozilla=Vuze \u306e\u30d6\u30e9\u30a6\u30b6\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306b Mozilla \u3092\u4f7f\u7528 [XulRunner \u307e\u305f\u306f Firefox 3 \u304c\u5fc5\u8981; \u8981\u518d\u8d77\u52d5]
 ConfigView.section.style.xulRunnerPath=XulRunner/Firefox \u306e\u30d1\u30b9\u3092\u6307\u5b9a [FF3 \u306e\u5834\u5408\u306b\u5fc5\u8981; \u8981\u518d\u8d77\u52d5]
@@ -2285,86 +2238,32 @@ Button.bar.share=\u5171\u6709
 Button.bar.add=Friends \u3092\u8ffd\u52a0
 Button.bar.edit=\u7de8\u96c6
 Button.bar.edit.cancel=\u7d42\u4e86
-v3.Share.menu=\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709
-v3.Share.header=\u5171\u6709
-v3.Share.header.message=Friend \u3068\u5171\u6709\u3057\u307e\u3059\u3002
-v3.Share.add.buddy=Friend \u3092\u8ffd\u52a0
-v3.Share.add.edit.buddy=Friend \u3092\u8ffd\u52a0\uff0f\u7de8\u96c6
-v3.Share.add.buddy.all=\u3059\u3079\u3066\u306e Friend \u3068\u5171\u6709
-v3.Share.add.buddy.existing=\u73fe\u5728\u306e Friend:
-v3.Share.add.buddy.new=\u65b0\u3057\u3044 Friend:
-v3.Share.buddies=Friend
-v3.Share.invitees=\u62db\u5f85\u8005
-v3.Share.invite.buddies.prompt=\u5171\u6709\u3059\u308b Friend \u3092\u62db\u5f85
-v3.Share.send.now=\u9001\u4fe1
-v3.Share.optional.message=\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30d5\u30a3\u30fc\u30c9\u3092\u901a\u3058\u3066\u9001\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u30e1\u30c3\u30bb\u30fc\u30b8\uff08\u6700\u5927 140 \u6587\u5b57\uff09\uff1a
-v3.Share.disclaimer=\u6ce8\u610f\uff1a\u5171\u6709\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u4e21\u65b9\u3068\u3082\u6697\u53f7\u5316\u3055\u308c\u307e\u3059\u3002
-v3.Share.disclaimer.link=\u3082\u3063\u3068\u8aad\u3080
-ConfigView.section.security.vuze.login=\u64cd\u4f5c\u306e\u524d\u306b Vuze \u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044
-v3.buddy.menu.viewprofile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
-v3.buddy.menu.remove=Friend \u3092\u524a\u9664
 v3.MainWindow.menu.view.pluginbar=\u30d7\u30e9\u30b0\u30a4\u30f3\u30d0\u30fc
-v3.MainWindow.menu.view.buttonbar=\u30dc\u30bf\u30f3\u30d0\u30fc
-v3.activity.buddy-request=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u304c %1 \u304b\u3089\u5c4a\u3044\u3066\u3044\u307e\u3059\u3002
-v3.activity.buddy-request.accept=\u53d7\u3051\u5165\u308c\u308b
-v3.activity.buddy-request.multi=Friend \u30ea\u30af\u30a8\u30b9\u30c8 [#%3] \u304c %1 \u304b\u3089\u5c4a\u3044\u3066\u3044\u307e\u3059\u3002
-v3.activity.buddy-linkup=\u3042\u306a\u305f\u3068 %1 \u306f Friend \u3067\u3059\u3002
-v3.activity.share-content.no-msg=%1 \u306f\u3042\u306a\u305f\u3068 %2 \u3092\u5171\u6709\u3057\u307e\u3057\u305f
-v3.buddies.count=%1 \u4eba
-v3.buddies.remove=Friend \u3092\u524a\u9664
-v3.buddies.add.to.share=\u5171\u6709\u3059\u308b Friend \u3092\u8ffd\u52a0
 MainWindow.dialog.select.vuze.file=Vuze \u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
 MainWindow.menu.file.open.vuze=Vuze \u30d5\u30a1\u30a4\u30eb...
-azbuddy.ui.dialog.disable.title=Friends \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3059\u308b
-azbuddy.ui.dialog.disable.text=Friends \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3059\u308b\u3068\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u4e0b\u90e8\u306e Friends \u30d0\u30fc\u3092\u901a\u3058\u305f Torrent \u306e\u5171\u6709\u304c\u3067\u304d\u306a\u304f\u306a\u308a\u3001Friends \u306e\u5909\u66f4\u3082\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\n\nFriends \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3059\u304b\uff1f
 metasearch.addtemplate.title=\u691c\u7d22\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
 metasearch.addtemplate.desc=\u691c\u7d22\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 '%1' \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u304b\uff1f
 v3.share.private.title=Torrent \u3092\u5171\u6709
 v3.share.private.text=\u9078\u629e\u3055\u308c\u305f Torrent \u306f Private Torrent \u3067\u3059\u3002\n\nPrivate Torrent \u306f\u5171\u6709\u3067\u304d\u307e\u305b\u3093\u3002
-v3.buddies.disabled.title=Friend \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f
-v3.buddies.disabled.text._windows=Friend \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f\u3002Friend \u3068\u306e Torrent \u5171\u6709\u304c\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u74b0\u5883\u8a2d\u5b9a\u304b\u3089\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
-v3.buddies.disabled.text._mac=Friend \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f\u3002Friend \u3068\u306e Torrent \u5171\u6709\u304c\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u74b0\u5883\u8a2d\u5b9a\u304b\u3089\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
 metasearch.addtemplate.dup.title=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u91cd\u8907
 metasearch.addtemplate.dup.desc=\u691c\u7d22\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 %1 \u306f\u65e2\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059\u3002
 metasearch.export.select.template.file=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4fdd\u5b58
 metasearch.import.select.template.file=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u958b\u304f
-v3.MainWindow.button.newtag.share=\u65b0\u7740
-v3.buddies.faq=\u3082\u3063\u3068\u8aad\u3080
 dialog.uiswitch.title=Vuze UI \u306e\u5207\u308a\u66ff\u3048
 dialog.uiswitch.text=\u3053\u306e\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u306b\u306f Vuze UI \u306b\u5207\u308a\u66ff\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\nVuze \u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 dialog.uiswitch.button=Vuze UI \u306b\u5207\u308a\u66ff\u3048\u308b
 azbuddy.tracker.enabled=Friend \u3068\u306e\u30d5\u30a1\u30a4\u30eb\u8ee2\u9001\u3092\u9ad8\u901f\u306b\u3059\u308b 'Friends Boost' \u3092\u4f7f\u7528
 v3.MainWindow.button.download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
 v3.MainWindow.button.run=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
-v3.activity.header.friend.requests.foryou=Friend \u30ea\u30af\u30a8\u30b9\u30c8 - \u3042\u306a\u305f\u5b9b\u3066
-v3.activity.header.friend.requests.fromyou=Friend \u30ea\u30af\u30a8\u30b9\u30c8 - \u3042\u306a\u305f\u304b\u3089
-v3.activity.header.friend.requests.accepted=Friend \u30ea\u30af\u30a8\u30b9\u30c8 - \u53d7\u7406\u6e08\u307f
-v3.activity.header.share.requests=Torrent \u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8
 v3.activity.header.downloads=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-v3.activity.header.rating.reminders=\u30ec\u30a4\u30c6\u30a3\u30f3\u30b0\u306e\u304a\u77e5\u3089\u305b
 v3.activity.header.vuze.news=Vuze \u30cb\u30e5\u30fc\u30b9
-login.optional.message=\u3053\u306e\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u306b\u306f\u30b5\u30a4\u30f3\u30a4\u30f3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-message.confirm.share.singular=Torrent \u306e\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.share.plural=Torrent \u306e\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.share.invite.singular=\u63a5\u7d9a\u3068\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.share.invite.plural=\u63a5\u7d9a\u3068\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.invite.singular=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.invite.plural=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.invite.error=\u6b8b\u5ff5\u306a\u304c\u3089\u3042\u306a\u305f\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u53d7\u7406\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-message.prompt.add.friends=\u5171\u6709\u3059\u308b\u306b\u306f\u30da\u30fc\u30b8\u4e0b\u90e8\u306e Friend \u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
 message.taking.too.long=\u9577\u3044\u6642\u9593\u304b\u304b\u3063\u3066\u3044\u308b\u5834\u5408\u306f\u3001\n'ESC' \u3092\u62bc\u3059\u3068\u64cd\u4f5c\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
 message.status.success=\u6210\u529f
-message.intro.friends=Frend \u3092\u8ffd\u52a0\u3059\u308b\u3002Torrent \u3092\u5171\u6709\u3059\u308b\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u3088\u308a\u901f\u304f\u3002
 azbuddy.tracker.bbb.status.title.tooltip=\u8a73\u7d30\u3092\u898b\u308b\u306b\u306f\u30c0\u30d6\u30eb\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 v3.MainWindow.search.go.tooltip=\u691c\u7d22\u3092\u5b9f\u884c\u3057\u307e\u3059
 v3.MainWindow.search.last.tooltip=\u691c\u7d22\u7d50\u679c\u306b\u623b\u308a\u307e\u3059
-v3.activity.buddy-invited=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u3092 %1 \u306b\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002
-v3.activity.buddy-invited.multi=\u6b21\u306e\u65b9\u306b Friend \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\uff1a\n%1
 metasearch.addtemplate.done.title=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f
 metasearch.addtemplate.done.desc=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 '%1' \u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002\n\u6b21\u56de\u306e\u691c\u7d22\u304b\u3089\u3054\u5229\u7528\u306b\u306a\u308c\u307e\u3059\u3002
-v3.MainWindow.button.share=\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709
-v3.buddies.remove.buddy.dialog.title=Friend \u306e\u524a\u9664
-v3.buddies.remove.buddy.dialog.text=Friend %1 \u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
 ConfigView.section.security.nopw=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
 ConfigView.section.security.nopw_v=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002Vuze \u306b\u7f72\u540d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 fileplugininstall.install.title=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
@@ -2372,13 +2271,9 @@ fileplugininstall.install.desc=\u30d7\u30e9\u30b0\u30a4\u30f3 '%1' %2 \u3092\u30
 fileplugininstall.duplicate.title=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u91cd\u8907
 fileplugininstall.duplicate.desc=\u30d7\u30e9\u30b0\u30a4\u30f3 '%1' %2 \u306f\u65e2\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059\u3002
 azbuddy.online_status=\u30b9\u30c6\u30fc\u30bf\u30b9\uff1a
-azbuddy.os_away=Away
 azbuddy.ui.menu.disconnect=\u5207\u65ad
-v3.buddy.menu.chat=\u30c1\u30e3\u30c3\u30c8
-v3.chat.offline=%1 \u306f\u73fe\u5728\u30aa\u30d5\u30e9\u30a4\u30f3\u3067\u3059\u3002\u3042\u306a\u305f\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u30aa\u30f3\u30e9\u30a4\u30f3\u306b\u306a\u3063\u305f\u5f8c\u306b\u5c4a\u304d\u307e\u3059\u3002
-v3.chat.wrongversion=%1 \u30c1\u30e3\u30c3\u30c8\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044 Vuze \u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002
 azbuddy.enable_chat_notif=\u30c1\u30e3\u30c3\u30c8\u306e\u7740\u4fe1\u3092\u901a\u77e5
-v3.buddies.dnd.info.dialog.text=Drop Share \u3092\u521d\u671f\u5316\u3057\u307e\u3057\u305f\u3002\u3042\u306a\u305f\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u5171\u6709\u306e\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u6e96\u5099\u304c\u6574\u3046\u3068\u5171\u6709\u306e\u753b\u9762\u304c\u958b\u304d\u307e\u3059\u3002\n\n\u3042\u306a\u305f\u306f Friend \u304c\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u53d7\u4fe1\u3059\u308b\u307e\u3067 Vuze \u3092\u8d77\u52d5\u3057\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\u3053\u306e\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u306f <A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Click here</A> \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=\u4eca\u5f8c\u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3057\u306a\u3044
+iconBar.queue.tooltip=\u30ad\u30e5\u30fc
+MainWindow.menu.help.faq=FAQ
+TableColumn.header.#=No.
 MainWindow.menu.help.donate=\u5bc4\u4ed8\u3092\u9001\u4ed8
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties b/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties
index f99166b..602009c 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=.torrent \u10e4\u10d0\u10d8\u10da\u10d8
 Main.parameter.maxUploads=\u10d4\u10e0\u10d7\u10d3\u10e0\u10dd\u10e3\u10da\u10d8 \u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d4\u10d1\u10e1\u10d8 \u10db\u10d0\u10e5\u10e1. \u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0
 Main.parameter.maxSpeed=\u10db\u10d0\u10e5\u10e1. \u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d8\u10e1 \u10e1\u10d8\u10e9\u10e5\u10d0\u10e0\u10d4 \u10d1\u10d0\u10d8\u10e2\u10d8/\u10ec\u10db
@@ -462,7 +463,6 @@ openUrl.url=\u10d1\u10db\u10e3\u10da\u10d8 :
 MyTorrentsView.menu.host.error.title=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8\u10e1  \u10f0\u10dd\u10e1\u10e2\u10d8\u10dc\u10d2\u10d8 \u10e9\u10d0\u10d8\u10e8\u10d0\u10da\u10d0
 MyTorrentsView.menu.host.error.message=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8\u10e1 \u10f0\u10dd\u10e1\u10e2\u10d8\u10dc\u10d2\u10d8\u10e1\u10d0\u10e1 \u10e8\u10d4\u10d8\u10e5\u10db\u10dc\u10d0 \u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8 \u10de\u10e0\u10dd\u10d1\u10da\u10d4\u10db\u10d0
 ConfigView.section.tracker=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d4
-MainWindow.menu.help.faq=\u10d5\u10d8\u10d9\u10d8 \u10ee.\u10d3.\u10d9.
 ConfigView.section.style.enableXPStyle=XP \u10e1\u10e2\u10d8\u10da\u10d8\u10e1 \u10e9\u10d0\u10e0\u10d7\u10d5\u10d0 (\u10e1\u10d0\u10ed\u10d8\u10e0\u10dd\u10d0 \u10d2\u10d0\u10d3\u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0)
 ipCheckerWizard.explanations=\u10e8\u10d4\u10d2\u10d8\u10eb\u10da\u10d8\u10d0\u10d7 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d7\u10dd\u10d7 \u10d4\u10e1 \u10dd\u10e1\u10e2\u10d0\u10e2\u10d8 \u10e0\u10d0\u10d7\u10d0 \u10d3\u10d0\u10d0\u10d3\u10d2\u10d8\u10dc\u10dd\u10d7 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d2\u10d0\u10e0\u10d4 IP \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8. \u10d7\u10e3 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 IP \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10d8\u10d0 \u10d2\u10d8\u10e0\u10e9\u10d4\u10d5\u10d7 \u10d3\u10d0\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8\u10e0\u10d3\u10d4\u10d7 Dynamic DNS \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d6\u10d4. \u10e5\u10d5\u10d4\u10d5\u10d8\u10d7 \u10db\u10dd\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8\u10d0 \u10e0\u10d0\u10db\u10dd\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10d0\u10e1\u10d4\u10d7\u10d8 \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8. \u10e8\u10d4\u10db\u10d3\u10d4\u10d2 \u10e8\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4\u10d7 IP \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8\u10e1 \u10dc\u10d0\u10ea\u10d5\u10da\u10d0\u10d3 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10d8 \u10f0\u10dd\u10e1\u10e2\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8 (\u10db\u10d0\u10d2. chemihostissaxeli.dyndns.org). \u10d8\u10db\u10d8\u10e1\u10d0\u10d7\u10d5\u10d8\u10e1 \u10e0\u10dd\u10db IP \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8\u10e1 \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10db\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d0\u10db \u10d0\u10e0 \u10e8\u10d4\u10e5\u10dc\u10d0\u10e1 \u10de\u10e0\u10dd\u10d1\u10da\u10d4\u10db\u10d4\u10d1\u10d8 \u10d3\u10d0\u10d2\u10ed\u10d8\u10e0\u10d3\u10d4\u10d1\u10d0\u10d7 \u10de\u10e0\u10dd\u10d2\u10e0\u10d0\u10db\u10d0 \u10e0\u10dd\u10db\u10d4\u10da\u10d8\u10ea \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d2\u10d0\u10dc\u10d0\u10d0\u10ee\u10da\u10d4\u10d1\u10e1 \u10d7\u10e5\u10d5\u10d4\u10dc\u10e1 \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0 DNS \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10e1.
 wizard.tracker.local=\u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4 \u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10e8\u10d8 \u10e9\u10d0\u10db\u10dd\u10dc\u10e2\u10d0\u10df\u10d4\u10d1\u10e3\u10da\u10d8 \u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d4
@@ -483,7 +483,6 @@ splash.openViews=\u10ee\u10d4\u10d3\u10d8\u10e1 \u10d2\u10d0\u10ee\u10e1\u10dc\u
 splash.plugin=\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d4\u10d1\u10d0 \u10e9\u10d0\u10e1\u10db\u10e3\u10da\u10d8 \u10db\u10dd\u10d3\u10e3\u10da\u10d8 : 
 configureWizard.nat.tooManyPorts=\u10e2\u10d4\u10e1\u10e2\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 \u10e8\u10d4\u10e0\u10e9\u10d4\u10e3\u10da\u10d8\u10d0 \u10eb\u10d0\u10da\u10d8\u10d0\u10dc \u10d1\u10d4\u10d5\u10e0\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8 (\u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10e3\u10db\u10d8\u10d0 9)
 ConfigView.section.color=\u10e4\u10d4\u10e0\u10d7\u10d0 \u10e1\u10e5\u10d4\u10db\u10d0
-PeerSocket.unknown=\u10e3\u10ea\u10dc\u10dd\u10d1\u10d8
 MyTorrentsView.menu.publish=\u10d2\u10d0\u10db\u10dd\u10d0\u10e5\u10d5\u10d4\u10e7\u10dc\u10d4...
 MyTrackerView.status.published=\u10d2\u10d0\u10db\u10dd\u10e5\u10d5\u10d4\u10e7\u10dc\u10d3\u10d0
 MyTrackerView.completed=\u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10e3\u10da\u10d8\u10d0
@@ -494,9 +493,15 @@ ConfigView.section.file.decoder.nodecoder=\u10d0\u10e0\u10ea\u10d4\u10e0\u10d7\u
 ConfigView.section.tracker.publicenable=\u10e9\u10d0\u10e0\u10d7\u10d4 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4 \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8
 ConfigView.label.playdownloadspeech=\u10e9\u10d0\u10db\u10dd\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d8\u10e1 \u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10d8\u10e1\u10d0\u10e1 \u10e8\u10d4\u10db\u10d0\u10e2\u10e7\u10dd\u10d1\u10d8\u10dc\u10d4 \u10e1\u10d8\u10e2\u10e7\u10d5\u10d8\u10d4\u10e0\u10d0\u10d3
 ConfigView.label.playdownloadspeech.info=\u10db\u10d4\u10e2\u10e7\u10d5\u10d4\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d4\u10d1\u10d8 \u10e1\u10d0\u10e3\u10d9\u10d4\u10d7\u10d4\u10e1\u10dd\u10d3 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10d8\u10dc\u10d2\u10da\u10d8\u10e1\u10e3\u10e0\u10d0\u10d3 \u10db\u10e3\u10e8\u10d0\u10dd\u10d1\u10e1
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10e1 \u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8 \u10dc\u10d0\u10ed\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d0\u10e1\u10da\u10d4\u10d1\u10d8\u10e1 \u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0\u10e1.\n\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d8 \u10e0\u10ea\u10ee\u10d5\u10d8 \u10d7\u10e3  1\u2013\u10d6\u10d4 \u10dc\u10d0\u10d9\u10da\u10d4\u10d1\u10d8\u10d0, \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10dd\u10d0 \u10e8\u10d4\u10d2\u10d4\u10e5\u10db\u10dc\u10d0\u10d7 \u10e4\u10d0\u10d8\u10da\u10d8\u10e1 \u10e1\u10e0\u10e3\u10da\u10d0\u10d3 \u10e9\u10d0\u10db\u10dd\u10e5\u10d0\u10e9\u10d5\u10d8\u10e1 \u10de\u10e0\u10dd\u10d1\u10da\u10d4\u10db\u10d0.
 GeneralView.label.trackerurl.tooltip=\u10d3\u10d0\u10ec\u10d9\u10d0\u10de\u10d4\u10d7 \u10d0\u10dc\u10dd\u10dc\u10e1\u10d8\u10e1 URL-\u10d8\u10e1 \u10d1\u10e3\u10e4\u10d4\u10e0\u10e8\u10d8 \u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1\u10d0\u10d7\u10d5\u10d8\u10e1
 GeneralView.label.trackerurlopen.tooltip=\u10d3\u10d0\u10ec\u10d9\u10d0\u10de\u10d4\u10d7 \u10db\u10d4\u10d7\u10d5\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10db\u10d7\u10d0\u10d5\u10d0\u10e0 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d6\u10d4 \u10d2\u10d0\u10e1\u10d0\u10e1\u10d5\u10da\u10d4\u10da\u10d0\u10d3
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=\u10d2\u10e0\u10d0\u10e4\u10d8\u10d9\u10e3\u10da\u10d8 \u10d8\u10dc\u10e2\u10d4\u10e0\u10e4\u10d4\u10d8\u10e1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0 \u10e7\u10dd\u10d5\u10d4\u10da
 ConfigView.section.style.reOrderDelay.never=\u10d0\u10e0\u10d0\u10e1\u10dd\u10d3\u10d4\u10e1
 ConfigView.section.logging=\u10df\u10e3\u10e0\u10dc\u10d0\u10da\u10d8
@@ -606,6 +611,9 @@ iconBar.top.tooltip=\u10d3\u10d0\u10d3\u10d0\u10d8\u10e2\u10d0\u10dc\u10d4 \u10d
 iconBar.bottom.tooltip=\u10d2\u10d3\u10d0\u10d8\u10e2\u10d0\u10dc\u10d4 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8
 TableColumn.header.health=\u10ef\u10d0\u10dc\u10db\u10e0\u10d7\u10d4\u10da\u10dd\u10d1\u10d0
 MyTorrentsView.menu.health=\u10da\u10d4\u10d2\u10d4\u10dc\u10d3\u10d0
+#
+#2.0.7.0
+#
 security.certtruster.title=\u10e3\u10e1\u10d0\u10e4\u10e0\u10d7\u10ee\u10dd\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d7\u10d8\u10e4\u10d8\u10d9\u10d0\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e4\u10e0\u10d7\u10ee\u10d8\u10da\u10d4\u10d1\u10d0
 security.certtruster.intro=\u10e3\u10e1\u10e4\u10e0\u10d7\u10ee\u10dd\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d7\u10d8\u10e4\u10d8\u10d9\u10d0\u10e2\u10d8 \u10d2\u10d0\u10ea\u10d4\u10db\u10e3\u10da\u10d8\u10d0 \u10d9\u10dd\u10db\u10de\u10d0\u10dc\u10d8\u10d8\u10e1 \u10db\u10d8\u10d4\u10e0, \u10e0\u10dd\u10db\u10d4\u10da\u10e1\u10d0\u10ea \u10d7\u10e5\u10d5\u10d4\u10dc \u10d0\u10e0 \u10d4\u10dc\u10d3\u10dd\u10d1\u10d8\u10d7
 security.certtruster.resource=\u10e0\u10d4\u10e1\u10e3\u10e0\u10e1\u10d8:
@@ -649,6 +657,9 @@ configureWizard.nat.server.tcp_listen_port=\u10e8\u10d4\u10db\u10dd\u10db\u10d0\
 ConfigView.section.sharing=\u10d2\u10d0\u10d6\u10d8\u10d0\u10e0\u10d4\u10d1\u10d0
 ConfigView.section.style.dropdiraction.sharefolder=\u10d9\u10d0\u10e2\u10d0\u10da\u10dd\u10d2\u10d8\u10e1 \u10d2\u10d0\u10d6\u10d8\u10d0\u10e0\u10d4\u10d1\u10d0
 ConfigView.section.style.dropdiraction.sharefoldercontents=\u10e8\u10d4\u10db\u10ea\u10d5\u10d4\u10da\u10dd\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d6\u10d8\u10d0\u10e0\u10d4\u10d1\u10d0
+#
+# 2.0.7.x
+#
 Categories.all=\u10e7\u10d5\u10d4\u10da\u10d0
 Categories.uncategorized=\u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4
 CategoryAddWindow.message=\u10e8\u10d4\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d8\u10e1 \u10d3\u10d0\u10e1\u10d0\u10ee\u10d4\u10da\u10d4\u10d1\u10d0
@@ -697,7 +708,6 @@ ConfigView.text.ignore=\u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u1
 ConfigView.text.minutes=\u10ec\u10e3\u10d7\u10d4\u10d1\u10d8
 ConfigView.text.any=\u10dc\u10d4\u10d1\u10d8\u10e1\u10db\u10d8\u10d4\u10e0\u10d8
 DownloadManager.error.datamissing=\u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10e3\u10da\u10d8\u10d0 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0
-iconBar.queue.tooltip=\u10db\u10dd\u10da\u10dd\u10d3\u10d8\u10dc\u10d8\u10e1 \u10e1\u10d8\u10d0
 MainWindow.menu.file.open.torrentforseeding=.torrent \u10e4\u10d0\u10d8\u10da\u10d8 (\u10d3\u10d0\u10e1\u10d0\u10d7\u10d4\u10e1\u10d0\u10d3)
 MainWindow.menu.language.refresh=\u10d2\u10d0\u10dc\u10ee\u10da\u10d4\u10d1\u10d0
 ManagerItem.forced=\u10e4\u10dd\u10e0\u10e1\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10d0
@@ -764,6 +774,9 @@ SpeedView.stats.uptime=\u10e1\u10d0\u10db\u10e3\u10e8\u10d0\u10dd \u10d3\u10e0\u
 SpeedView.stats.now=\u10d0\u10ee\u10da\u10d0
 SpeedView.stats.now.tooltip=\u10ef\u10d0\u10db\u10e3\u10e0\u10d8 (\u10de\u10e0\u10dd\u10e2\u10dd\u10d9\u10dd\u10da\u10d8)
 AutoMigration.useralert=\u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10d8\u10e1 \u10db\u10dd\u10db\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10da\u10d8\u10e1 \u10d9\u10dd\u10dc\u10e4\u10d8\u10d2\u10e3\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8\u10e1/\u10d9\u10d0\u10e2\u10d0\u10da\u10dd\u10d2\u10d4\u10d1\u10d8\u10e1 \u10d0\u10d5\u10e2\u10dd\u2013\u10db\u10d8\u10d2\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10e8\u10d4\u10d3\u10d4\u10d2\u10d4\u10d1\u10d8s:\n\n%1\n\u10e7\u10d5\u10d4\u10da\u10d0\u10dc\u10d0\u10d8\u10e0\u10d8 \u10e8\u10ea\u10d3\u10dd\u10db\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10db\u10d8\u10d2\u10e0\u10d8\u10e0\u10d3\u10d4\u10d1\u10d0.\n\u10dc\u10e3 \u10d3\u10d0\u10d2\u10d0\u10d5\u10d8\u10ec\u10e7\u10d3\u10d4\u10d1\u10d0\u10d7 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d8\u10e1 \u10d2\u10d6\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0 \u10d7\u10e3 \u10db\u10d0\u10d7\u10d8 \u10db\u10d8\u10d2\u10e0\u10d0\u10ea\u10d8\u10d0 \u10d2\u10e1\u10e3\u10e0\u10d7!
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=\u10d2\u10d0\u10ee\u10e1\u10d4\u10dc\u10d8 \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8(\u10d4\u10d1\u10d8)
 OpenTorrentWindow.message=\u10d4\u10e5\u10e1\u10de\u10d4\u10e0\u10d8\u10db\u10d4\u10dc\u10e2\u10d8
 OpenTorrentWindow.addFiles=\u10d3\u10d0\u10d0\u10db\u10d0\u10e2\u10d4 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8
@@ -953,6 +966,8 @@ ConfigView.section.tracker.publishenablepeerdetails=\u10de\u10d8\u10e0\u10d8\u10
 MyTrackerView.badnat=\u10ea\u10e3\u10d3\u10d8 NAT
 MyTrackerView.badnat.info=\u10db\u10d7\u10d4\u10e1\u10d5\u10d4\u10da\u10d4\u10d1\u10d8/\u10de\u10d8\u10e0\u10d4\u10d1\u10d8 \u10e0\u10dd\u10db\u10da\u10d4\u10d1\u10db\u10d0\u10ea \u10d5\u10d4\u10e0 \u10d2\u10d0\u10d8\u10d0\u10e0\u10d4\u10e1 NAT \u10e8\u10d4\u10db\u10dd\u10ec\u10db\u10d4\u10d1\u10d0, \u10d7\u10e3 \u10e9\u10d0\u10e0\u10d7\u10e3\u10da\u10d8\u10d0
 ConfigView.section.file.perf.cache.enable=\u10e9\u10d0\u10e0\u10d7\u10d4 \u10e5\u10d4\u10e8\u10d8 \u10d3\u10d8\u10e1\u10d9\u10d6\u10d4
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=\u10e2\u10e0\u10d0\u10dc\u10e1\u10e4\u10d4\u10e0\u10d4\u10d1\u10d8
 MainWindow.menu.transfers.startalltransfers=\u10e7\u10d5\u10d4\u10da\u10d0 \u10d3\u10d0\u10d8\u10ec\u10e7\u10d4
 MainWindow.menu.transfers.stopalltransfers=\u10e7\u10d5\u10d4\u10da\u10d0 \u10e8\u10d4\u10d0\u10e9\u10d4\u10e0\u10d4
@@ -1027,8 +1042,6 @@ FilesView.path=\u10d2\u10d6\u10d0
 FilesView.fullpath=\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4 \u10e1\u10e0\u10e3\u10da\u10d8 \u10d2\u10d6\u10d0
 FilesView.remaining=\u10d3\u10d0\u10e0\u10e9\u10d4\u10dc\u10d8\u10da\u10d8 \u10dc\u10d0\u10ed\u10e0\u10d4\u10d1\u10d8
 TableColumn.header.trackername=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8
-ConfigView.label.announceport=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10d0\u10dc\u10dd\u10dc\u10e1\u10d8\u10e0\u10d4\u10d1\u10d0\u10d3\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0
-ConfigView.label.announceport.tooltip=\u10e8\u10d4\u10d0\u10e2\u10e7\u10dd\u10d1\u10d8\u10dc\u10d4 \u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d4\u10e1 \u10d2\u10d0\u10dc\u10e1\u10ee\u10d5\u10d0\u10d5\u10d4\u10d1\u10e3\u10da\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10e8\u10d4\u10e1\u10d0\u10ee\u10d4\u10d1 \u10e0\u10dd\u10db\u10d4\u10da\u10e1\u10d0\u10ea \u10e3\u10e1\u10db\u10d4\u10dc. \u10d3\u10d0\u10e2\u10dd\u10d5\u10d4 \u10ea\u10d0\u10e0\u10d8\u10d4\u10da\u10d8 \u10d7\u10e3 \u10d0\u10e0 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d1 \u10d0\u10db \u10dd\u10e4\u10ea\u10d8\u10d0\u10e1.
 ConfigView.group.override=\u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0
 PeersView.menu.blockupload=\u10d1\u10da\u10dd\u10d9\u10d8\u10e1 \u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0
 PeersView.state=\u10db\u10d3\u10d2\u10dd\u10db\u10d0\u10e0\u10d4\u10dd\u10d1\u10d0
@@ -1043,8 +1056,6 @@ ConfigView.section.connection.advanced=\u10e5\u10e1\u10d4\u10da\u10d8\u10e1 \u10
 ConfigView.section.connection.advanced.mtu=\u10db\u10d0\u10e5\u10e1\u10d8\u10d0\u10db\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d0\u10ea\u10d4\u10db\u10d8 \u10d4\u10e0\u10d7\u10d4\u10e3\u10da\u10d8 (MTU)
 ConfigView.section.connection.advanced.SO_RCVBUF=\u10e1\u10dd\u10d9\u10d4\u10e2\u10d8\u10e1 SO_RCVBUF \u10d6\u10dd\u10db\u10d0 [0: use OS default]
 ConfigView.section.connection.advanced.SO_SNDBUF=\u10e1\u10dd\u10d9\u10d4\u10e2\u10d8\u10e1 SO_SNDBUF \u10d6\u10dd\u10db\u10d0 [0: use OS default]
-ConfigView.section.connection.advanced.IPTOS=\u10d2\u10d0\u10db\u10d0\u10d5\u10d0\u10da\u10d8 \u10de\u10d0\u10d9\u10d4\u10e2\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8 type-of-service (TOS) [ex. 0x02, 0x10]
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u10e9\u10d0\u10d0\u10db\u10d0\u10e2\u10d4 \u10e2\u10e0\u10d0\u10e4\u10d8\u10d9\u10d8\u10e1 \u10d9\u10da\u10d0\u10e1\u10d8 / \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8 (TOS)  IP \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10e8\u10d8 \u10d2\u10d0\u10db\u10d0\u10d5\u10d0\u10da\u10d8 \u10de\u10d0\u10d9\u10d4\u10e2\u10d4\u10d1\u10d8\u10e1\u10d0\u10d7\u10d5\u10d8\u10e1.\n\u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10d8 \u10e1\u10e2\u10d0\u10dc\u10d3\u10d0\u10e0\u10e2\u10e3\u10da\u10d0\u10d3 \u10d0\u10e0 \u10d0\u10d5\u10e1\u10d4\u10d1\u10e1 \u10db\u10d0\u10e1, \u10d8\u10d2\u10e3\u10da\u10d8\u10e1\u10ee\u10db\u10d4\u10d1\u10d0 \u10e0\u10d0 \u10dd\u10de. \u10e1\u10d8\u10e1\u10e2\u10d4\u10db\u10d0 \u10d8\u10e6\u10d4\u10d1\u10e1 \u10d0\u10db \u10e4\u10e3\u10e5\u10ea\u10d8\u10d0\u10e1 \u10d7\u10d0\u10d5\u10d8\u10e1 \u10d7\u10d0\u10d5\u10d6\u10d4.\n\u10db\u10d0\u10d2: \u10db\u10dc\u10d8\u10e8\u10d5\u10dc\u10d4\u10da\u10dd\u10d1\u10d4\u10d1\u10d8 \u10d0\u10e0\u10d8\u10e1:\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\nNOTE: Underlying network implementations may ignore this value, \u10d4\u10e1 \u10dd\u10e4\u10ea\u10d8\u10d0 \u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d8\u10d0 \u10dd\u10de. \u10e1\u10d8\u10e1\u10e2\u10d4\u10db\u10d8\u10e1 \u10d3\u10d0 JRE \u2013\u10e1 \u10d5\u10d4\u10e0\u10e1\u10d8\u10d0\u10d6\u10d4.
 ConfigView.section.interface.confirm_torrent_removal=\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4 \u10d3\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d8\u10d0\u10da\u10dd\u10d2\u10d8 torrent\u2013\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d8\u10e1\u10d0\u10e1
 ConfigView.section.interface.confirm_torrent_removal.tooltip=\u10d3\u10d0\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4 \u10e0\u10dd\u10ea\u10d0 \u10e8\u10da\u10d8  \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10e1 \u10e9\u10d4\u10db\u10d8 \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10d3\u10d0\u10dc.
 MyTorrentsView.confirm_torrent_removal=\u10d3\u10d0\u10ec\u10e0\u10db\u10e3\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10ee\u10d0\u10e0 \u10ec\u10d0\u10e8\u10d0\u10da\u10dd?\n
@@ -1162,6 +1173,7 @@ MainWindow.menu.tools.nattest=NAT / \u10e5\u10e1\u10d4\u10da\u10e3\u10e0\u10d8 \
 Button.apply=\u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0
 Button.close=\u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0
 window.welcome.title=\u10db\u10dd\u10d2\u10d4\u10e1\u10d0\u10da\u10db\u10d4\u10d1\u10d0\u10d7 \u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10d8 %1
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=\u10e0\u10d4\u10da\u10d8\u10d6\u10d8\u10e1 \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8
 DHTView.transport.title=\u10e2\u10e0\u10d0\u10dc\u10e1\u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8
 DHTView.operations.title=\u10dd\u10de\u10d4\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8
@@ -1191,8 +1203,8 @@ MyTorrentsView.menu.movetorrent=\u10d2\u10d0\u10d3\u10d0\u10d8\u10e2\u10d0\u10dc
 ConfigView.label.queue.maxactivetorrentswhenseeding=\u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10e3\u10db\u10d8 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10d7\u10d4\u10e1\u10d5\u10d8\u10e1\u10d0\u10e1 [0:\u10e8\u10d4\u10e3\u10d6\u10e6\u10e3\u10d3\u10d0\u10d5\u10d0\u10d3]
 Views.plugins.IRC.title=IRC - \u10dd\u10dc\u10da\u10d0\u10d8\u10dc \u10e2\u10d4\u10d0\u10dc\u10d8\u10d9\u10e3\u10e0\u10d8 \u10db\u10dd\u10db\u10e1\u10d0\u10ee\u10e3\u10e0\u10d4\u10dd\u10d1\u10d0
 ConfigView.section.ipfilter.persistblocking=\u10d3\u10d0\u10d1\u10da\u10dd\u10d9\u10d8\u10da\u10d8 IP \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0 \u10d2\u10d0\u10d3\u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d4\u10d1\u10d8\u10e1\u10d0\u10e1
-FilesView.rename.choose.path=\u10e8\u10d4\u10d0\u10e0\u10e9\u10d8\u10d4 \u10d0\u10ee\u10d0\u10da\u10d8 \u10d0\u10dc \u10d0\u10e0\u10e1\u10d4\u10d1\u10e3\u10da\u10d8 \u10e4\u10d0\u10d8\u10da\u10d8
 FilesView.menu.rename=\u10e1\u10d0\u10ee\u10d4\u10da\u10d8\u10e1 \u10d0\u10dc \u10db\u10d3\u10d4\u10d1\u10d0\u10e0\u10d4\u10dd\u10d1\u10d8\u10e1 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0
+FilesView.rename.choose.path=\u10e8\u10d4\u10d0\u10e0\u10e9\u10d8\u10d4 \u10d0\u10ee\u10d0\u10da\u10d8 \u10d0\u10dc \u10d0\u10e0\u10e1\u10d4\u10d1\u10e3\u10da\u10d8 \u10e4\u10d0\u10d8\u10da\u10d8
 FilesView.rename.confirm.delete.title=\u10d3\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4\u10d7 \u10ec\u10d0\u10e8\u10da\u10d0
 FilesView.rename.confirm.delete.text=\u10d3\u10d0\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4\u10d7 \u10dd\u10e0\u10d8\u10d2\u10d8\u10dc\u10d0\u10da\u10d8 \u10e4\u10d0\u10d8\u10da\u10d8\u10e1 '%1' \u10ec\u10d0\u10e8\u10da\u10d0
 ConfigView.section.mode=\u10e0\u10d4\u10df\u10d8\u10db\u10d8
@@ -1246,6 +1258,7 @@ PeersView.BlockView.Transfer=\u10e2\u10e0\u10d0\u10dc\u10e1\u10e4\u10d4\u10e0\u1
 PeersView.BlockView.NextRequest=\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8 \u10db\u10dd\u10d7\u10ee\u10dd\u10d5\u10dc\u10d0
 PeersView.BlockView.title=\u10dc\u10d0\u10ed\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e0\u10e3\u10e5\u10d0
 PeersView.BlockView.AvailCount=\u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8 \u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 MyTorrentsView.dialog.setNumber.download=\u10e9\u10d0\u10db\u10dd\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0
 OpenTorrentWindow.torrentLocation=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8:
 OpenTorrentWindow.addFiles.URL=\u10d3\u10d0\u10d0\u10db\u10d0\u10e2\u10d0 &URL
@@ -1311,6 +1324,7 @@ MyTorrentsView.dialog.setFilter.title=\u10e4\u10d8\u10da\u10e2\u10e0\u10d8\u10e1
 MyTorrentsView.clearFilter.tooltip=\u10e4\u10d8\u10da\u10e2\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e1\u10e3\u10e4\u10d7\u10d0\u10d5\u10d4\u10d1\u10d0
 ConfigureWizard.language.choose=\u10e8\u10d4\u10d0\u10e0\u10e9\u10d8\u10d4 \u10d4\u10dc\u10d0 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7 \u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e1\u10d8\u10d8\u10d3\u10d0\u10dc:
 popup.closing.in=\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d8 \u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0 %1 \u10ec\u10d0\u10db\u10e8\u10d8
+# > 2402
 ConfigView.auto=\u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d8
 Plugin.localtracker.autoadd.info=\u10d0\u10db \u10da\u10dd\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10de\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 [';' \u10d2\u10d0\u10db\u10dd\u10e7\u10dd\u10e4\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d4\u10d1\u10d8, \u10db\u10d0\u10d2. 1.2.3.4]
 Plugin.localtracker.networks=\u10da\u10dd\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10e5\u10e1\u10d4\u10da\u10d4\u10d1\u10d8
@@ -1343,5 +1357,9 @@ Content.alert.notuploaded.quit=\u10d3\u10d0\u10ee\u10e3\u10e0\u10d4 \u10d0\u10d6
 TorrentInfoView.torrent.encoding=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0
 progress.window.title=\u10db\u10d8\u10db\u10d3\u10d8\u10dc\u10d0\u10e0\u10d4\u10dd\u10d1\u10e1 \u10dd\u10de\u10d4\u10e0\u10d0\u10ea\u10d8\u10d0
 ConfigView.label.please.visit.here=\u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 \u10d8\u10ee\u10d8\u10da\u10d4\u10d7
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u10e3\u10ea\u10dc\u10dd\u10d1\u10d8
+ConfigView.label.announceport=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10d0\u10dc\u10dd\u10dc\u10e1\u10d8\u10e0\u10d4\u10d1\u10d0\u10d3\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0
+iconBar.queue.tooltip=\u10db\u10dd\u10da\u10dd\u10d3\u10d8\u10dc\u10d8\u10e1 \u10e1\u10d8\u10d0
+MainWindow.menu.help.faq=\u10d5\u10d8\u10d9\u10d8 \u10ee.\u10d3.\u10d9.
 MainWindow.menu.help.donate=\u10d2\u10d0\u10d0\u10d9\u10d4\u10d7\u10d4 \u10e4\u10e3\u10da\u10d0\u10d3\u10d8 \u10e8\u10d4\u10db\u10dd\u10ec\u10d8\u10e0\u10e3\u10da\u10dd\u10d1\u10d0 !!!
-# The remaining keys were not in MessagesBundle.properties
diff --git a/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties b/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties
index 36e4d0a..9ccecbe 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 ConfigView.section.files=\u17af\u1780\u179f\u17b6\u179a
 FileItem.write=\u179f\u179a\u179f\u17c1\u179a
 FileItem.read=\u1791\u17b6\u1794
@@ -37,6 +38,12 @@ importTorrentWizard.importfile.path=\u1795\u17d2\u179b\u17bc\u179c
 importTorrentWizard.importfile.browse=\u179a\u1780\u1798\u17be\u179b
 fileDownloadWindow.status=\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796 :
 fileDownloadWindow.state_error=\u1780\u17c6\u17a0\u17bb\u179f : 
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
 columnChooser.title=\u1787\u17d2\u179a\u17be\u179f\u1787\u17bd\u179a\u1788\u179a\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1784\u17d2\u17a0\u17b6\u1789
 columnChooser.move=\u1791\u17b6\u1789\u1787\u17bd\u179a\u178a\u17c1\u1780\u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u178f\u17cb\u179b\u17c6\u178a\u17b6\u1794\u17cb
 columnChooser.apply=\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u17b7
@@ -46,6 +53,12 @@ authenticator.title=\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1780\u17b6
 authenticator.realm=\u1796\u17d2\u179a\u17c6\u178a\u17c2\u1793
 authenticator.user=\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be
 authenticator.password=\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb
+#
+#2.0.7.0
+#
+#
+# 2.0.7.x
+#
 Categories.all=\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb
 Categories.uncategorized=\u1798\u17b7\u1793\u1794\u17c2\u1784\u1785\u17c2\u1780\u1794\u17d2\u179a\u1797\u17c1\u1791
 CategoryAddWindow.message=\u178a\u17b6\u1780\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u1797\u17c1\u1791 \u1790\u17d2\u1798\u17b8
@@ -55,6 +68,9 @@ AlertMessageBox.warning=\u1780\u17b6\u179a\u1796\u17d2\u179a\u1798\u17b6\u1793
 AlertMessageBox.comment=\u1796\u178f\u17cc\u1798\u17b6\u1793
 AlertMessageBox.information=\u1796\u178f\u17cc\u1798\u17b6\u1793
 AutoMigration.useralert=\u1796\u178f\u17cc\u1798\u17b6\u1793\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be Vuze /dirs \u1795\u179b\u179a\u1794\u179f\u17cb\u1780\u17b6\u179a\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7:\n\n%1\n\u1780\u17d2\u1793\u17bb\u1784\u1780\u17c6\u17a0\u17bb\u179f\u1793\u17b7\u1798\u17bd\u1799\u17d7 \u178f\u17d2\u179a\u17bc\u179c\u1792\u17d2\u179c\u17be\u1780\u17b6\u179a\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u178a\u17c4\u1799\u1781\u17d2\u179b\u17bd\u1793\u17af\u1784\n\u1780\u17bb\u17c6\u1797\u17d2\u179b\u17c1\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1790\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u17d2\u1791\u17bb\u1780\u1780\u17b6\u179a\u1780\u17c2\u1794\u17d2\u179a\u17c2 \u1794\u17be\u179f\u17b7\u1793\u1787\u17b6\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8
+#
+# > 2.0.8.0
+#
 Button.revert=\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u178a\u17be\u1798
 Button.yes=\u1794\u17b6\u1791
 Button.no=\u1791\u17c1
@@ -82,8 +98,9 @@ FilesView.path=\u1795\u17d2\u179b\u17bc\u179c
 Button.abort=\u1794\u17c4\u17c7\u1794\u1784\u17cb
 Button.apply=\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f
 Button.close=\u1794\u17b7\u1791
+#file can be a URL or a path in the jar
 ActivityView.legend.limit=\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u179a\u17b6
 ActivityView.legend.peeraverage=\u1798\u1792\u17d2\u1799\u1798
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 Button.moveUp=\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u17a1\u17be\u1784
 Button.moveDown=\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1785\u17bb\u17c7
-# The remaining keys were not in MessagesBundle.properties
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties b/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties
index fe544d6..4116b44 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties
@@ -717,7 +717,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\uc774 \uc120\ud0dd\uc0
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=\uadf8\ub798\ud53d \uc138\ub85c \ub2e8 (GTK \uace0\uc815)
 security.certtruster.title=\ubcf4\uc548 \uc778\uc99d\uc11c \uacbd\uace0
 security.certtruster.intro=\ubcf4\uc548 \uc778\uc99d\uc11c\uac00 \uc2e0\ub8b0\ub418\uc9c0 \uc54a\uc740 \uae30\uad00\uc5d0\uc11c \ubc1c\uae09\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
 security.certtruster.resource=\uc790\uc6d0:
@@ -1735,9 +1734,7 @@ ConfigView.section.style.showiconbar=\ub3c4\uad6c \ud45c\uc2dc\uc904 \ubcf4\uae3
 MainWindow.menu.view.iconbar=\ub3c4\uad6c \ud45c\uc2dc\uc904
 MyTorrentsView.menu.rename=\uc774\ub984\ubc14\uafb8\uae30
 MyTorrentsView.menu.rename.displayed=\ubcf4\uc774\ub294 \uc774\ub984\ubc14\uafb8\uae30
-MyTorrentsView.menu.rename.displayed_and_save_path=\ub458\ub2e4 \uc774\ub984\ubc14\uafb8\uae30
 MyTorrentsView.menu.rename.displayed.enter.title=\ubcf4\uc774\ub294 \uc774\ub984\ubc14\uafb8\uae30
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\ub0b4\ub824\ubc1b\uae30 \uc774\ub984\ubc14\uafb8\uae30
 MyTorrentsView.menu.edit_comment=\ub367\ub9d0 \uc218\uc815
 MyTorrentsView.menu.edit_comment.enter.title=\ub367\ub9d0 \uc218\uc815
 MyTorrentsView.menu.edit_comment.enter.message=\ub0b4\ub824\ubc1b\uae30 \uc790\ub8cc\uc5d0 \ub367\ub9d0\uc744 \uc785\ub825 \ud569\ub2c8\ub2e4.
@@ -1869,7 +1866,6 @@ v3.MainWindow.button.comment=\ub367\ub9d0
 v3.MainWindow.button.viewdetails=\uc18d\uc131
 v3.MainWindow.button.play=\uc7ac\uc0dd
 v3.MainWindow.button.cancel=\ucde8\uc18c
-v3.MainWindow.button.sendtofriend=\uacf5\uc720 \ud1a0\ub7f0\ud2b8
 v3.MainWindow.button.preview=\ud504\ub9ac\ubdf0
 v3.MainWindow.view.wait=\uc678\ud615\uc744 \ucd08\uae30\ud654\uc911\uc785\ub2c8\ub2e4. \uc7a0\uc2dc\ub9cc \uae30\ub2e4\ub824 \uc8fc\uc138\uc694.
 v3.MainWindow.xofx=%1 \uc758 %2
@@ -2087,48 +2083,16 @@ Button.bar.share=\uacf5\uc720
 Button.bar.add=\ucd94\uac00
 Button.bar.edit=\ud3b8\uc9d1
 Button.bar.edit.cancel=\ud3b8\uc9d1 \uc644\ub8cc
-v3.Share.menu=\uacf5\uc720 \uc790\ub8cc
-v3.Share.header=\uacf5\uc720
-v3.Share.header.message=\uce5c\uad6c\ub4e4\uacfc \uacf5\uc720\ud558\uac70\ub098, \uc0c8\ub85c\uc6b4 \uce5c\uad6c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-v3.Share.add.buddy=\uce5c\uad6c \ucd94\uac00
-v3.Share.add.edit.buddy=\uce5c\uad6c \ucd94\uac00/\ubcc0\uacbd
-v3.Share.add.buddy.all=\ubaa8\ub4e0 \uce5c\uad6c\uc640 \uacf5\uc720
-v3.Share.add.buddy.existing=\ubaa8\ub4e0 \uce5c\uad6c :
-v3.Share.add.buddy.new=\uc0c8\ub85c\uc6b4 \uce5c\uad6c :
-v3.Share.buddies=\uce5c\uad6c
-v3.Share.invitees=\ucd08\ub300\ud560 \uce5c\uad6c
-v3.Share.invite.buddies.prompt=\ub354\ub9ce\uc740 \uce5c\uad6c\uc640 \uc790\ub8cc\ub97c \uacf5\uc720\ud558\uc138\uc694.
-v3.Share.send.now=\ubcf4\ub0b4\uae30
-v3.Share.optional.message=\uc54c\ub9bc\uc744 \ud1b5\ud574 \ucd94\uac00 \ub0b4\uc6a9 \uc804\ub2ec. (\ucd5c\ub300 140 \uae00\uc790, \uc601\ubb38\uae30\uc900):
-v3.Share.disclaimer=\uadc0\ub754: \uacf5\uc720\ud55c \uc790\ub8cc \ubaa8\ub450\ub294 \uc774 \ucd94\uac00 \uba54\uc138\uc9c0\uc640 \ud568\uaed8 \uc554\ud638\ud654 \ub429\ub2c8\ub2e4.
-v3.Share.disclaimer.link=\ub354 \uc54c\uc544\ubcf4\uae30
-v3.buddy.menu.viewprofile=\ud504\ub85c\ud544 \ubcf4\uae30
-v3.buddy.menu.remove=\uce5c\uad6c \uc0ad\uc81c
 v3.MainWindow.menu.view.pluginbar=\ucd94\uac00\uae30\ub2a5 \ud45c\uc2dc\uc904
-v3.MainWindow.menu.view.buddies-viewer=\uce5c\uad6c \ud45c\uc2dc\uc904
-v3.activity.buddy-request=%1\uac00 \uce5c\uad6c\uc218\ub77d\uc744 \ud558\uc600\uc2b5\ub2c8\ub2e4
-v3.activity.buddy-request.accept=\uc218\ub77d
-v3.activity.buddy-request.multi=%1\ub85c\ubd80\ud130 \uce5c\uad6c\uc218\ub77d[#%3]\uc744 \ubc1b\uc558\uc2b5\ub2c8\ub2e4
-v3.activity.buddy-linkup=%1\uc640 \uce5c\uad6c\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4
-v3.activity.share-content=%1\uac00 %2\ub97c \uacf5\uc720\ud569\ub2c8\ub2e4. %3 <A HREF="%4" TITLE="%5">%1...</A>
-v3.buddies.friends=\uce5c\uad6c
-v3.buddies.online=\uc628\ub77c\uc778 (%1)
-v3.buddies.remove=\uce5c\uad6c \uc0ad\uc81c
-v3.buddies.add.to.share=\uce5c\uad6c \uacf5\uc720 \ucd94\uac00
 MainWindow.dialog.select.vuze.file=Vuze \ud30c\uc77c \uc120\ud0dd
 MainWindow.menu.file.open.vuze=Vuze \ud30c\uc77c...
-azbuddy.ui.dialog.disable.title=\uce5c\uad6c \ucd94\uac00\uae30\ub2a5 \uc791\ub3d9\uc911\uc9c0
-azbuddy.ui.dialog.disable.text=\uce5c\uad6c \ucd94\uac00\uae30\ub2a5\uc758 \uc791\ub3d9\uc744 \uc911\ub2e8\ud569\ub2c8\ub2e4. \uce5c\uad6c \ud45c\uc2dc\uc904\uc5d0\uc11c \uce5c\uad6c\uc640 \uacf5\uc720, \uce5c\uad6c\ubaa9\ub85d \uc815\ub9ac\ub4f1\uc758 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\n\uce5c\uad6c\uae30\ub2a5\uc758 \uc791\ub3d9\uc744 \uc911\ub2e8\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
 metasearch.addtemplate.title=\uac80\uc0c9\ud55c \uc591\uc2dd\uc744 \uc124\uce58\ud560\uae4c\uc694?
 v3.share.private.title=\ud1a0\ub7f0\ud2b8 \uacf5\uc720
 v3.share.private.text=\uc120\ud0dd\ub41c \ud1a0\ub7f0\ud2b8\ub294 \ube44\uacf5\uac1c \ud1a0\ub7f0\ud2b8 \uc785\ub2c8\ub2e4.\n\n\ube44\uacf5\uac1c \ud1a0\ub7f0\ud2b8\ub294 \uacf5\uc720\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-v3.buddies.disabled.title=\uce5c\uad6c \ucd94\uac00\uae30\ub2a5 \uc791\ub3d9\uc911\uc9c0
 metasearch.addtemplate.dup.title=\uc591\uc2dd \ubcf5\uc0ac
 metasearch.addtemplate.dup.desc=\uac80\uc0c9\ud55c \uc591\uc2dd %1\uc740 \uc774\ubbf8 \uc124\uce58\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
 metasearch.export.select.template.file=\uc591\uc2dd \uc800\uc7a5
 metasearch.import.select.template.file=\uc591\uc2dd \uc5f4\uae30
-v3.MainWindow.button.newtag.share=\uc2e0\uaddc! \uacf5\uc720 \ud1a0\ub7f0\ud2b8
-v3.buddies.faq=\ub354 \uc54c\uc544\ubcf4\uae30
 dialog.uiswitch.title=Vuze UI \ubcc0\uacbd
 dialog.uiswitch.text=\uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 Vuze UI\ub97c \uc791\ub3d9\uc2dc\ucf1c\uc57c \ud569\ub2c8\ub2e4.\n\nVuze\ub97c \ub2e4\uc2dc\uc2dc\uc791 \ud569\ub2c8\ub2e4.
 dialog.uiswitch.button=Vuze UI\ub85c \ubcc0\uacbd
@@ -2136,16 +2100,9 @@ azbuddy.tracker.enabled=\uce5c\uad6c\uc640 \ub0b4\ub824\ubc1b\uae30\uc2dc '\uce5
 azbuddy.protocolspeed=\uce5c\uad6c\ub85c\ubd80\ud130 \uc624\ubc84\ud5e4\ub4dc \ud504\ub85c\ud1a0\ucf5c \ucd5c\ub300\uac12 KB/s 
 v3.MainWindow.button.download=\ub0b4\ub824\ubc1b\uae30
 v3.MainWindow.button.run=\ub0b4\ub824\ubc1b\uc740 \ud30c\uc77c \uc2e4\ud589
-v3.activity.header.friend.requests.foryou=\uce5c\uad6c\uc694\uccad - \ub098\uc5d0\uac8c
-v3.activity.header.friend.requests.fromyou=\uce5c\uad6c\uc694\uccad - \ub098\ub85c\ubd80\ud130
-v3.activity.header.friend.requests.accepted=\uce5c\uad6c\uc694\uccad - \uc218\ub77d
-v3.activity.header.share.requests=\ud1a0\ub7f0\ud2b8 \uacf5\uc720 \uc694\uccad
 v3.activity.header.downloads=\ub0b4\ub824\ubc1b\uae30
-v3.activity.header.rating.reminders=\ube44\uc728 \ub3c5\ucd09\uc7a5
 v3.activity.header.vuze.news=Vuze \uc0c8\uc18c\uc2dd
-login.optional.message=\uc774\uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \ub85c\uadf8\uc778 \ud574\uc57c \ud569\ub2c8\ub2e4
 message.status.success=\uc131\uacf5
-message.intro.friends=\uce5c\uad6c\ub97c \ucd94\uac00\ud558\uc138\uc694.\n\ud1a0\ub80c\ud2b8\ub97c \uacf5\uc720\ud558\uc138\uc694.\n\uadf8\ub9ac\uace0 \ub354\ube68\ub9ac \ub0b4\ub824\ubc1b\uc73c\uc138\uc694.
 azbuddy.tracker.bbb.status.title=\uce5c\uad6c \uac00\uc18d
 azbuddy.tracker.bbb.status.title.tooltip=\uc138\ubd80\ub0b4\uc6a9\uc744 \ubcf4\uc2dc\ub824\uba74 \ub354\ube14\ud074\ub9ad \ud558\uc138\uc694
 azbuddy.tracker.bbb.status.idle=\uac00\uc18d \uc5c6\uc74c
@@ -2154,10 +2111,7 @@ azbuddy.tracker.bbb.status.in=\uac00\uc18d \uc2dc\uc791
 azbuddy.tracker.bbb.status.out=\uc774\ubbf8 \uac00\uc18d\ub41c \uce5c\uad6c
 v3.MainWindow.search.go.tooltip=\uac80\uc0c9 \uc2e4\ud589
 v3.MainWindow.search.last.tooltip=\uac80\uc0c9\uacb0\uacfc\ub85c \uc774\ub3d9
-v3.activity.buddy-invited=%1\uc5d0\uac8c \uce5c\uad6c \uc694\uccad\uc744 \ubcf4\ub0c8\uc2b5\ub2c8\ub2e4.
 metasearch.addtemplate.done.title=\ud15c\ud50c\ub9bf \ucd94\uac00
-v3.MainWindow.button.share=\uacf5\uc720 \uc790\ub8cc
-v3.buddies.remove.buddy.dialog.title=\uc0ad\uc81c
 fileplugininstall.install.title=\ucd94\uac00\uae30\ub2a5\uc744 \uc124\uce58 \ud560\uae4c\uc694?
 fileplugininstall.duplicate.title=\ucd94\uac00\uae30\ub2a5 \ubcf5\uc0ac
 azbuddy.online_status=\uc811\uc18d \uc0c1\ud0dc
@@ -2167,9 +2121,7 @@ azbuddy.os_not_avail=\ube44\ud65c\uc131
 azbuddy.os_busy=\ubc14\uc068
 azbuddy.os_offline=\uc624\ud504\ub77c\uc778
 azbuddy.ui.menu.disconnect=\uc5f0\uacb0\ub04a\uae30
-v3.buddy.menu.chat=\ub300\ud654
 azbuddy.enable_chat_notif=\ub300\ud654 \uc54c\ub9bc \uc791\ub3d9
-v3.buddies.dnd.info.dialog.remember=\uc774 \uc54c\ub9bc\uc744 \ub2e4\uc2dc \ubcf4\uc5ec\uc8fc\uc9c0 \uc54a\uae30
 DetailedListView.title=\uc138\ubd80 \ubaa9\ub85d
 subscript.add.title=\uad6c\ub3c5\uc744 \uc124\uce58\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
 subscript.add.desc='%1'\ub97c \uad6c\ub3c5\ud558\uc5ec \uc124\uce58\ud558\uc2dc\uae38 \uc6d0\ud558\uc2ed\ub2c8\uae4c?
@@ -2212,20 +2164,14 @@ TableColumn.header.azsubs.ui.column.subs=\uad6c\ub3c5
 subscriptions.listwindow.popularity.reading=\uc77d\ub294\uc911...
 PluginDeprecation.view=\uc624\ub958\ucd94\uc801 \ucd94\uac00\uae30\ub2a5
 TableColumn.header.Thumbnail=\uc544\uc774\ucf58
-TableColumn.header.Rating_global=\uc21c\uc704
 v3.MainWindow.menu.getting_started=&\uc2dc\uc791\ud558\uae30
 MainWindow.menu.community=&\ucee4\ubba4\ub2c8\ud2f0
 MainWindow.menu.help.faq=\uc790\uc8fc \ubb3b\ub294 \ubb3c\uc74c(&F)
 MainWindow.menu.community.wiki=\ucee4\ubba4\ub2c8\ud2f0 &\uc704\ud0a4
 MainWindow.menu.community.forums=\ucee4\ubba4\ub2c8\ud2f0 Fo&rums
 MainWindow.menu.community.blog=Vuze &\ube14\ub85c\uadf8
-MainWindow.menu.community.add_friends=&\uce5c\uad6c \ucd94\uac00
 externalLogin.title=\ub85c\uadf8\uc778 \ud544\uc694
 Button.done=\uc644\ub8cc
-v3.Share.wizard.title=\uacf5\uc720 -- \ub9c8\ubc95\uc0ac
-v3.AddFriends.header.message=\uce5c\uad6c\ub97c \ucd94\uac00\ud574\uc11c \ud1a0\ub7f0\ud2b8\ub97c \uacf5\uc720\ud558\uc138\uc694
-v3.AddFriends.header=\uce5c\uad6c\ucd94\uac00
-v3.AddFriends.wizard.title=\uce5c\uad6c\ucd94\uac00 -- \ub9c8\ubc95\uc0ac
 Button.continue=\uacc4\uc18d
 Button.preview=\ubbf8\ub9ac\ubcf4\uae30
 Subscription.menu.forcecheck=\uc9c0\uae08 \uc5c5\ub370\uc774\ud2b8
@@ -2236,9 +2182,6 @@ sidebar.LibraryDL=\ub0b4\ub824\ubc1b\ub294 \uc911
 sidebar.LibraryCD=\uc644\ub8cc
 authenticator.location=\uc704\uce58
 authenticator.details=\uc138\ubd80\uc815\ubcf4
-v3.MainWindow.menu.publish.new=\uc0c8 \uc790\ub8cc \ubc30\ud3ec
-v3.MainWindow.menu.publish.mine=\ubc30\ud3ec\ub41c \uc790\ub8cc
-v3.MainWindow.menu.publish.about=\uc790\ub8cc \ubc30\ud3ec\ud558\uae30\ub294...
 v3.MainWindow.menu.showActionBarText=\ubb38\uc790\ubcf4\uae30
 Subscription.menu.export=\ub0b4\ubcf4\ub0b4\uae30
 subscript.export.select.template.file=\uad6c\ub3c5 \uc800\uc7a5
@@ -2253,13 +2196,11 @@ Subscription.menu.reset=\ucc98\uc74c \uc0c1\ud0dc\ub85c \ucd08\uae30\ud654
 ConfigView.section.Subscriptions=\uad6c\ub3c5
 subscriptions.config.maxresults=\uad6c\ub3c5\ubcc4 \uc720\uc9c0\ud558\uace0 \uc788\ub294 \uc790\ub8cc\uc758 \ucd5c\ub300\uac12 [0: \ubb34\uc81c\ud55c]
 v3.activity.button.readall=\ubaa8\ub450 \uc77d\uc5c8\uc74c\uc73c\ub85c \ud45c\uc2dc
-ConfigView.interface.start.library=\ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uc2dc\uc791
 TableColumn.header.activityNew=\uc2e0\uaddc
 TableColumn.header.activityType=\uc885\ub958
 TableColumn.header.activityText=\ub0b4\uc6a9
 TableColumn.header.activityDate=\ucd94\uac00 \ub0a0\uc9dc
 TableColumn.header.activityActions=\ud3c9\uac00
-TableColumn.header.activityAvatar=\uc544\ubc14\ud0c0
 Subscription.menu.resetauth=\uc778\uc99d \uc815\ubcf4 \ucd08\uae30\ud654
 Search.menu.engines=\uc591\uc2dd
 Wizard.Subscription.title=\uad6c\ub3c5
@@ -2285,8 +2226,6 @@ Wizard.Subscription.rss.subtitle3=\uc790\ub8cc \ubc30\ud3ec\uc790\uac00 RSS \ud5
 Wizard.Subscription.subscribe.library=\ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc790\ub8cc
 Wizard.Subscription.subscribe.subscriptions=\uc5f0\uad00\ub41c \uad6c\ub3c5
 Wizard.Subscription.subscribe.library.empty=\uc544\uc9c1 \uad6c\ub3c5\ud558\ub294 \uc790\ub8cc\uac00 \uc5c6\uc73c\uc138\uc694?\n \nVuze HD \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ub178\ub780\uc0c9\uc73c\ub85c \ub41c RSS \uad6c\ub3c5 \ub2e8\ucd94\ub97c \ub20c\ub7ec\ubcf4\uc138\uc694.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\uad00\ub828\ub0b4\uc6a9</A>
-TableColumn.header.Info=\uc815\ubcf4
-TableColumn.header.videoLength=\uc601\uc0c1 \uae38\uc774
 message.confirm.delete.title=\uc0ad\uc81c \ud655\uc778
 message.confirm.delete.text='%1'\ub97c \uc815\ub9d0\ub85c \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
 Subscription.menu.properties=\uc6b0\uc120\uc21c\uc704
@@ -2330,8 +2269,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\uad6c\ub3c5\uacfc \ud568\uae
 Button.deleteContent.fromLibrary=\ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uc81c\uac70
 Button.deleteContent.fromComputer=\ub514\uc2a4\ud06c\uc5d0\uc11c \uc9c0\uc6b0\uae30
 v3.deleteContent.message=\n'%1'\ub97c \ub514\uc2a4\ud06c\uc5d0\uc11c \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \uc544\ub2c8\uba74 Vuze \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \ud45c\uc2dc\uac00 \uc548\ub418\uac8c \uc81c\uac70\ub9cc \ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.
-v3.library.infobar.text1=\uc790\uc138\ud55c\ub0b4\uc6a9(\uace0\uae09)\uc744 \ud45c\uc2dc\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
-v3.library.infobar.text2=\uc704\uc758 \ub3c4\uad6c \ud45c\uc2dc\uc904\uc5d0\uc11c '\ubcf4\uae30'\ub97c \uc791\ub3d9\uc2dc\ud0a4\uc138\uc694.
 v3.MainWindow.menu.view.toolbartext=\ub3c4\uad6c \ud45c\uc2dc\uc904 \ubb38\uc790
 v3.MainWindow.menu.view.asSimpleList=\uac04\ub2e8\ubaa9\ub85d
 v3.MainWindow.menu.view.asAdvancedList=\uace0\uae09\ubaa9\ub85d
@@ -2351,13 +2288,6 @@ azbuddy.ui.menu.cat.share=\uce5c\uad6c\uc640 \ud568\uaed8 \uad6c\ub3c5 \uc791\ub
 azbuddy.ui.menu.cat.set=\ubaa9\ub85d \uc785\ub825
 azbuddy.ui.menu.cat.set_msg=\uc27c\ud45c\ub85c \ubaa9\ub85d\uc744 \ub098\ub20c \uc218 \uc788\uc73c\uba70 '\uc804\ubd80' \uc0ac\uc6a9\ud560 \uc218 \ub3c4 \uc788\uc2b5\ub2c8\ub2e4
 azbuddy.ui.menu.cat_subs=\uad6c\ub3c5
-v3.buddy.prop.dn=\uc774\ub984 \ud45c\uc2dc
-v3.buddy.prop.un=\uc0ac\uc6a9\uc790 \uc774\ub984
-v3.buddy.prop.on=\uc628\ub77c\uc778
-v3.buddy.prop.lupd=\ub9c8\uc9c0\ub9c9 \uc5c5\ub370\uc774\ud2b8
-v3.buddy.prop.catout=\uc774 \ubd84\ub958\ub294 \uce5c\uad6c\uac00 \uad6c\ub3c5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
-v3.buddy.set.catout=\uce5c\uad6c\uc758 \uad6c\ub3c5\uc744 \ubd84\ub958\uc5d0 \ucd94\uac00
-v3.buddy.set.catin=\uce5c\uad6c\uc758 \ubd84\ub958\ub97c \uad6c\ub3c5
 subs.prop.update_period=\uc5c5\ub370\uc774\ud2b8 \uac04\uaca9
 azbuddy.enable_cat_pub=\ubaa8\ub4e0 \uce5c\uad6c\uac00 \uacf5\uac1c\ub41c \ubd84\ub958\ub97c \uad6c\ub3c5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 (','\ub85c \uad6c\ubd84\ud568)
 v3.dialog.cnclose.title=%1 \ub2eb\ud798
@@ -2368,7 +2298,6 @@ v3.dialog.cnclose.noshow=\ub2e4\uc2dc \ubcf4\uc5ec\uc8fc\uc9c0 \uc54a\uc74c
 v3.dialog.cnmanage.title=HD \ub124\ud2b8\uc6cc\ud06c \uad00\ub9ac \uba54\ub274
 v3.dialog.cnmanage.intro="HD \ub124\ud2b8\uc6cc\ud06c" \uba54\ub274\uc5d0\uc11c \ubcf4\uc774\uace0 \uc2f6\uc740 \uc790\ub8cc\ub97c \uc544\ub798\uc5d0\uc11c \uc120\ud0dd\ud558\uc138\uc694
 TableColumn.header.name.info=\ud1a0\ub7f0\ud2b8 \uc774\ub984
-TableColumn.header.Quality.info=HD, SD\uc640 \uac19\uc740 Vuze\uc790\ub8cc\uc758 \ud488\uc9c8
 TableColumn.header.size.info=\ub514\uc2a4\ud06c\uc5d0\uc11c \ud1a0\ub7f0\ud2b8 \uc790\ub8cc\uc758 \ud06c\uae30
 TableColumn.header.azsubs.ui.column.subs.info=\uc774 \ub2e8\ucd94\ub85c \uc5f0\uad00\ub41c \ud1a0\ub7f0\ud2b8\ub97c \uad6c\ub3c5\ubc1b\uc744 \uc218 \uc788\uc74c
 TableColumn.header.upspeed.info=\ud604\uc7ac\uae4c\uc9c0 \uc62c\ub9ac\uae30 \uc18d\ub3c4
diff --git a/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties b/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties
index 1c86bd0..8fdc769 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties
@@ -48,7 +48,6 @@ MainWindow.status.latestversion=L\u00e8ste versie
 MainWindow.status.latestversion.clickupdate=Klik \u00f3m bie te wirke
 MainWindow.status.unknown=\u00f3nbek\u00e8nd
 MainWindow.status.checking=k\u00f3nterlere
-TableColumn.header.mytorrents=Mien Torrents 
 TableColumn.header.name=Naam 
 TableColumn.header.size=Gruutde
 TableColumn.header.done=Vaerdig
@@ -310,7 +309,6 @@ TrackerChangerWindow.newtracker=V\u00f6l 'n nuuj trackeradres in
 PeersView.discarded=Verworpe
 PeersView.discarded.info=Data die se waal h\u00f6bs \u00f3ntvange, meh neet nudig hads, dus h\u00f6bs weggedaon.
 discarded=aafgedank
-TableColumn.header.#=Nr: 
 MyTorrentsView.menu.move=Verplaatse
 MyTorrentsView.menu.moveUp=\u00d3mhoeg 
 MyTorrentsView.menu.moveDown=\u00d3mlieg
@@ -377,7 +375,6 @@ MyTorrentsView.menu.removeand.deletedata=&Data weghaole
 MyTorrentsView.menu.removeand.deleteboth=Alle&bei weghaole
 deletedata.title=Waarsjuwing
 deletedata.message1=Doe sjteis op 't puntj de DATA weg te haole van :\n
-deletedata.message2=\nW\u00e8ts se zeker des se door wils gaon?
 MainWindow.menu.file.configure=K\u00f3ngfiggerasie-&wizard...
 configureWizard.title=K\u00f3ngfiggerasiewizard 
 configureWizard.welcome.title=Welk\u00f3m biej de Vuze-k\u00f3ngfiggerasiewizard
@@ -508,7 +505,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Tracker-cli\u00ebnt-aafsjt\u00f6mmingsinterval (sek\u00f3nd)
 ConfigView.section.tracker.publishenable=Publiceer torrentdetails nao "<tracker_url>"
 ConfigView.section.tracker.ip=IP-adres van externe tracker
-MainWindow.menu.help.faq=D\u00e8k gesjt\u00e8lde vraoge (FAQ)
 ConfigView.section.style.enableXPStyle=XP- of Vista-stiel activere (hersjtart vereis)
 ConfigView.section.tracker.checkip=Autematis extern IP adres opzeuke...
 ipCheckerWizard.title=Wizard IP-k\u00f3ntrol
@@ -705,7 +701,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Dees optie ververs 't M
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Grafisch verticaal beginpuntj (GTK fix)
 security.certtruster.title=Beveiligingscertificaat-waarsjuwing
 security.certtruster.intro='t Beveiligingscertificaat is vriegegaeve door 'n bedrief det-s te neet vertroets
 security.certtruster.resource=Br\u00f3n:
@@ -845,7 +840,6 @@ ConfigView.text.minutes=menuut
 ConfigView.text.neverIgnore=Noets negere
 ConfigView.text.any=ein
 DownloadManager.error.datamissing=Gegaeves \u00f3ntbraeke
-iconBar.queue.tooltip=In de wach z\u00e8tte
 MainWindow.menu.file.open.torrentforseeding=Torrent-besjtandj... (veur uploade) 
 MainWindow.menu.language.refresh=Ve&rnuje
 ManagerItem.forced=Geforceerd
@@ -1030,7 +1024,6 @@ UpdateWindow.columns.size=Gruutde
 UpdateWindow.cancel=Aafbraeke
 UpdateWindow.quit=Aafsjloete
 UpdateWindow.close=Sjloete
-UpdateWindow.ok=Update
 UpdateWindow.restart=Noe hersjtarte
 UpdateWindow.status.downloading=Downloade
 UpdateWindow.status.done=Vaerdig
@@ -1275,7 +1268,6 @@ ConfigView.section.connection.advanced.IPDiffServ=Oetg\u00e4\u00f6ndj pakket Dif
 ConfigView.section.connection.advanced.IPDiffServ.tooltip=Sjt\u00e8lt 't DiffServ-deil in van 't type-of-service(TOS)-veldj in de IP header veur oetgaonde pakkette.\nHexadecimaal waerdes kinne gespecificeerd waere door deze te veuraaf te laote gaon mit '0x', bv. 0x10.\nVuze leut dit sjtanderd ongebroek, dit beteikent det de sjtanderd van 't \u00f3ngerlikgend OS weurt gebroek.\nOpmirking: \u00d3ngerligkende netwerkimplmentaties kinne dees waerdes negere, dus dees optie is afhankelik van 't OS en JRE-versie.
 ConfigView.section.interface.confirm_torrent_removal=Bevestigingsv\u00e8nster laote zeen es torrent d'r vanaaf weurt gehaold
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Bevestig wen 'n torrent oet Mien Torrents weurt weggehaold.
-TableColumn.header.confirm_torrent_removal=Wits te zeker det-s te dit weg wils doon?\n
 TableColumn.header.seed_to_peer_ratio=Seed2Peer-verh.
 TableColumn.header.seed_to_peer_ratio.info=Totale zjwerm-seeders-nao-leechers-verhaajing
 PeersView.connected_time=Verb\u00f3nje tied
@@ -1613,14 +1605,10 @@ PeersView.BlockView.Transfer=Versjikke
 PeersView.BlockView.NextRequest=Volgend verzeuk
 PeersView.BlockView.title=Sjt\u00f6kskesmap
 PeersView.BlockView.AvailCount=Besjikbaarheidst\u00e8ller
-TableColumn.header.dialog.NumberError.title=\u00d3ngeljige of \u00f3nbek\u00e8nde n\u00f3mmer
-TableColumn.header.dialog.NumberError.text=De opgegaeve n\u00f3mmer is fout of neet herk\u00e8nbaar.
 MyTorrentsView.menu.manual=&Handjmaotig...
 MyTorrentsView.menu.manual.per_torrent=Handjmaotig (per torrent)
 MyTorrentsView.menu.manual.shared_torrents=Handjmaotig (door de torrents)
-TableColumn.header.dialog.setSpeed.title=%1 sjnelheid insjt\u00e8lle
 # %1 = "in kbps" or ""; %2 = "upload" or "download"
-TableColumn.header.dialog.setNumber.text=Gaef 'ne n\u00f3mmer %1 \u00f3m %2 te verangeren in:
 OpenTorrentWindow.torrentLocation=Te downloade torrent(s):
 OpenTorrentWindow.addFiles.URL=Nuje &URL
 OpenTorrentWindow.addFiles.Folder=Nuje map
@@ -1714,8 +1702,6 @@ Button.markSelected=Geselecteerde markere
 Button.unmarkSelected=Geselecteerde demarkere
 plugins.basicview.config=K\u00f3ngfiggerasie
 TorrentOptionsView.param.max.uploads=Maximumaantal uploadsjlots [minimum: 2]
-TableColumn.header.dialog.setPosition.title=Positie insjt\u00e8lle
-TableColumn.header.dialog.setPosition.text=Gaef de map op, \u00f3m de torrents in te z\u00e8tte:
 MyTorrentsView.menu.reposition.manual=Herpositionere..
 ConfigView.section.connection.advanced.info.link=Bezeuk estebleef deze link veur details
 ConfigView.section.connection.advanced.socket.group=Socket-opties
@@ -1726,14 +1712,9 @@ ConfigView.section.proxy.group.peer=Peer-communicaties
 Pieces.column.Requested=Gevraog
 Pieces.column.Requested.info=Geuf aan of mie verzeuke gedaon k\u00f3nne waere op 't sjt\u00f6kske of neet (*)
 ConfigView.label.maxuploadsseeding=Alternatieve sjtanderd bie seede
-TableColumn.header.filter=Filter: [%1]
 popup.error.hideall=Alles verberge
 ConfigView.section.style.dataStatsOnly=Alleen datasjtatistieke laote zeen (gein protocolsjtatistieke)
 ConfigView.section.style.separateProtDataStats=Data- en protocolsjtatistieken sjeije es 'data (protocol)'
-TableColumn.header.dialog.setFilter.title=Filter verangere
-TableColumn.header.dialog.setFilter.text=De %1 sectie z\u00f3l gefilterd waere op de teks die se hie-\u00f3nger specificeers.  Gebroek 't | (pipe)-symbool \u00f3m te filtere op v\u00e4\u00f6lvoudige oetdr\u00f6kkinge. 
-TableColumn.header.filter.tooltip=Ctrl+X \u00f3m te sjakele t\u00f6sje RegEx en normale zoekmodes.\nGebroek 't | (pipe)-symbool \u00f3m te filtere op versjillende oetdr\u00f6kkinge.
-TableColumn.header.clearFilter.tooltip=Filter laegmake
 MyTorrentsView.menu.filter=Lies filtere...
 ConfigView.section.file.resume.recheck.all=Nao crash-hersjtart k\u00f3nterleer totale besjtandj veur complete sjt\u00f6kskes (Anges allein sjt\u00f6kskes die actief wore nao l\u00e8ste gek\u00f3nterleerde opsjlaag)
 ConfigureWizard.language.choose=Kees 'n taal oet de \u00f3ngersjtaonde lies:
@@ -1871,13 +1852,8 @@ MainWindow.menu.view.iconbar=Wirkbalk
 MyTorrentsView.menu.rename=Herneume
 MyTorrentsView.menu.rename.displayed=De zichbare naam verangere
 MyTorrentsView.menu.rename.save_path=Opsjlaagpaad verangere
-MyTorrentsView.menu.rename.displayed_and_save_path=Allebei verangere
 MyTorrentsView.menu.rename.displayed.enter.title=De zichbare naam verangere
 MyTorrentsView.menu.rename.displayed.enter.message=Gaef 'ne nuje zichbare naam veur deze download.\nEs gein teks geplaats is, weurt de originele naam gebroek.
-MyTorrentsView.menu.rename.save_path.enter.title=Opsjlaagpaad herneume
-MyTorrentsView.menu.rename.save_path.enter.message=Gaef 'ne nuje opsjlaagmap veur deze download.\nEs gein tekst gegaeve weurt, weurt de zichbare naam gebroek.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Download herneume
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Gaef 'ne nuje naam veur deze download.\nEs geen teks gegaeve weurt, waere de auw waerd gebroek.
 MyTorrentsView.menu.edit_comment=K\u00f3mmentaar bewirke
 MyTorrentsView.menu.edit_comment.enter.title=Sjrief k\u00f3mmentaar
 MyTorrentsView.menu.edit_comment.enter.message=Plaats 'n k\u00f3mmentaar veur deze download
@@ -2027,8 +2003,6 @@ SpeedTestWizard.stage.message.connect.stats=Verb\u00e8njingssjtatus: peers=%1, d
 window.uiswitcher.title=Vuze-interfacekezer
 window.uiswitcher.text=Selecteer de gew\u00e8nste gebruikersinterface (UI).
 window.uiswitcher.NewUI.text=* Aanbevaole veur beginners en nuje gebroekers.\n\n* 'n Mekkelikm, intu\u00eftief grafisch oeterlik.\n\n* Vereiste oeterlik veur 't publicere op 't Vuze-platform.
-window.uiswitcher.AdvancedUI.title=Geavanceerde Vuze 
-window.uiswitcher.AdvancedUI.text=* Aanbevaole veur gebroeker die gebroek wille make van 't klassieke oeterlik mer ouch inhaud wille zeuke, blajere en plaatse op 't Vuze-platform.\n\n* 'n Mekkelik, intu\u00eftief grafisch oeterlik gepaard mit geavanceerde meugelikhede en functionaliteit.
 window.uiswitcher.ClassicUI.title=Klassiek oeterlik
 window.uiswitcher.ClassicUI.text=* Behauwt de functionaliteit van de 2.x versies.\n\n* Vuze skin weurt neet gelaje.
 window.uiswitcher.bottom.text=Dien selectie kan mekkelik waere aangepas door op de Vuze-interfacekezerkn\u00f3p te duje
@@ -2056,7 +2030,12 @@ TableColumn.header.Rating=Waardering
 TableColumn.header.SpeedGraphic=Sjnelheid
 TableColumn.header.AzProduct=Van
 TableColumn.header.ProgressETA=Veurtgank
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
 TableColumn.header.name.ext=Besjtanjstype: %1
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
 v3.MainWindow.tab.home=Sjtart-tab
 v3.MainWindow.tab.browse=Blajere
 v3.MainWindow.tab.library=Mien Bibliotheek
@@ -2080,7 +2059,6 @@ v3.MainWindow.button.comment=K\u00f3mmentaar
 v3.MainWindow.button.viewdetails=Details bekieke
 v3.MainWindow.button.play=Aafsjpele
 v3.MainWindow.button.cancel=Aafbraeke
-v3.MainWindow.button.sendtofriend=Torrent deile
 v3.MainWindow.button.preview=Veurbild
 v3.MainWindow.view.wait='n Ougeblik ged\u00f6ldj estebleef...
 v3.MainWindow.xofx=%1 van %2
@@ -2250,7 +2228,6 @@ Progress.reporting.window.remove.auto=Autematis inactieve \u00f3ngerdeile weghao
 Progress.reporting.window.remove.auto.tooltip=Autematis alle complete, misl\u00f6kde of aafgebraoke processe van de weergaaf aafhaole
 Progress.reporting.window.remove.now=Inactive \u00f3ngerdeile weghaole
 Progress.reporting.window.remove.now.tooltip=Alle complete, misl\u00f6kde of aafgebraoke processe van de weergaaf aafhaole
-xmlhttp.legacy.error=Dees versie van de XML/HTTP-plug-in z\u00f3l neet langer wirke in dees versie van Vuze - doe m\u00f3s upgrade nao 'n nujer versie van deze plug-in.
 dhttracker.tracklimitedwhenonline=Allewaal, veur lieg gebroek van br\u00f3ntracering oet, bie 'n online zjwerm kruuts-populatie.
 TorrentOptionsView.multi.title.short=Torrent-opties
 TorrentOptionsView.multi.title.full=Torrent-opties
@@ -2320,11 +2297,6 @@ ConfigView.section.security.unlockkey.error=\u00d3ntgrendele van sjleutel is mis
 ConfigView.copy.to.clipboard.tooltip=Nao klembord kopi\u00ebre
 Views.plugins.azbuddy.title=Vrunj
 Browser.popup.error.no.access=D'r is 'n fout opgetraeje tiedens 't contac make mit 'n br\u00f3n op aafsjtandj.\nPerbeer 't later nog \u00e8ns !
-v3.activity.header.today=Vandaag
-v3.activity.header.yesterday=Gister
-v3.activity.header.xdaysago=%1 daag geleje
-v3.activity.header.1weekago=1 waek geleje
-v3.activity.header.xweeksago=%1 waek geleje
 ConfigView.label.queue.stoponcebandwidthmet=Sjtart gein torrents wen de upload-/downloadsjnelheidslimiet is bereik
 ConfigView.section.style.forceMozilla=Dwing Vuze Mozilla te broeke veur browserwidgets [xulrunner of firefox 3 en Vuze hersjtarte vereis]
 ConfigView.section.style.xulRunnerPath=Specificeer de XulRunner- / Firefox-map handjmaotig [vereis veur FF3; Vuze hersjtart vereis]
@@ -2373,49 +2345,15 @@ Button.bar.share=Deil
 Button.bar.add=Vrunj toevoege
 Button.bar.edit=Bew\u00e8rke
 Button.bar.edit.cancel=Vaerdig mit bew\u00e8rke
-v3.Share.menu=Inhaud deile
-v3.Share.header=Deile
-v3.Share.header.message=Deil mit de hujige vrunj, of voeg nuuj vrunj toe.
-v3.Share.add.buddy=Vrunj toevoege
-v3.Share.add.edit.buddy=Vrunj toevoege/bewirke
-v3.Share.add.buddy.all=Mit jederein deile
-v3.Share.add.buddy.existing=Besjtaonde vrunj:
-v3.Share.add.buddy.new=Nuuj vrunj:
-v3.Share.buddies=Vrunj
-v3.Share.invitees=Oetgenudigde
-v3.Share.invite.buddies.prompt=Nudig mie vrunj \u00f3m mit te deile
-v3.Share.send.now=Sjikke
-v3.Share.optional.message=Optioneel berich:
-v3.Share.disclaimer=Opmirking: Zoewaal de inhaud dae se deils es dit optioneel berich weurt versjleuteld.
-v3.Share.disclaimer.link=Laes mie...
-ConfigView.section.security.vuze.login=G'r m\u00f3t ingelog zeen bie Vuze veur dees bewirking
-v3.buddy.menu.viewprofile=Profiel bekieke
-v3.buddy.menu.remove=Vrundj weghaole
 v3.MainWindow.menu.view.pluginbar=Plug-in-balk
-v3.MainWindow.menu.view.buttonbar=Kn\u00f3ppebalk
-v3.activity.buddy-request=Doe h\u00f6bs 'n vrundjverzeuk van %1
-v3.activity.buddy-request.accept=Acceptere
-v3.activity.buddy-request.multi=Doe h\u00f6bs 'n vrundjverzeuk [#%3] van %1
-v3.activity.buddy-linkup=Doe en %1 zeen noe vrunj
-v3.activity.share-content.no-msg=%1 haet %2 mit dich gedeild
-v3.buddies.count=%1 vrunj
-v3.buddies.remove=Vrundj weghaole
-v3.buddies.add.to.share=Vrundj toevoege veur deile
 MainWindow.dialog.select.vuze.file=Selecteer Vuze-besjtandj
-azbuddy.ui.dialog.disable.title=Vrunj-Plugin oetsjakele
-azbuddy.ui.dialog.disable.text=Oetsjakele van de vrunj-plugin veurkump det d'r torrents gedeild waere via de vrunjbalk aan de \u00f3ngerkantj van 't program, en veurkump det dien vrunjlies verangert.\n\nW\u00e8ts te zeker det-s te dit oet wils sjakele?
 metasearch.addtemplate.title=Zeuktemplate installere?
 metasearch.addtemplate.desc=Wits te zeker des se de zeuktemplate mit de naam '%1' wils insjtallere?
 v3.share.private.title=Torrent aan 't deile
 v3.share.private.text=De geselecteerde torrent is gemarkeerd es 'ne priv\u00e9torrent.\n\nDoe k\u00f3ns gein priv\u00e9torrents deile.
-v3.buddies.disabled.title=Vrunj-plug-in oetgezat
-v3.buddies.disabled.text._windows=Doe h\u00f6bs de vrunj-plug-in oetgesjakeld, waat dich weerh\u00e8lt van 't deile of acceptere van torrents of vrundjverzeuke.  Doe k\u00f3ns de insjt\u00e8llinge verangere via de K\u00f3ngfiggeratietab.
-v3.buddies.disabled.text._mac=Doe h\u00f6bs de vrunj-plug-in oetgesjakeld, waat dich weerh\u00e8lt van 't deile of acceptere van torrents of vrundjverzeuke.  Doe k\u00f3ns de insjt\u00e8llinge verangere via de K\u00f3ngfiggeratietab.
 metasearch.addtemplate.dup.desc=Zeuktemplate %1 is al ge\u00efnstalleerd
 metasearch.export.select.template.file=Template beware
 metasearch.import.select.template.file=Template \u00e4\u00f6pene
-v3.MainWindow.button.newtag.share=Nuuj! Torrent deile
-v3.buddies.faq=Laes mie...
 dialog.uiswitch.title=Nao de Vuze-interface \u00f3msjakele
 dialog.uiswitch.text=Doe m\u00f3s de Vuze-interface gebroeke \u00f3m gebroek te kinne make van dees meugelikheid.
 dialog.uiswitch.button=Nao de Vuze-interface \u00f3msjakele
@@ -2423,20 +2361,9 @@ azbuddy.tracker.enabled=Gaef prioriteit aan vrunj mit 't downloade van dezelfde
 azbuddy.protocolspeed=KB/s max vrundj protocol overhead
 v3.MainWindow.button.download=Downloade
 v3.MainWindow.button.run=Gedownload besjtandj sjtarte
-v3.activity.header.friend.requests.foryou=Vrundjverzeuke - veur dich
-v3.activity.header.friend.requests.fromyou=Vrundjverzeuke - van dich
-v3.activity.header.friend.requests.accepted=Vrundjverzeuke - geaccepteerd
-v3.activity.header.share.requests=Torrentverzeuke deile
-v3.activity.header.rating.reminders=Waarderingsherinneringe
 v3.activity.header.vuze.news=Vuze-nuuts
-login.optional.message=Doe m\u00f3s ingelog zeen \u00f3m dees functie te broeke
 v3.MainWindow.search.go.tooltip=Zeuke oetveure
 v3.MainWindow.search.last.tooltip=Tr\u00f6kgaon nao zeukresultate
-v3.activity.buddy-invited=Doe h\u00f6bs 'n vrundjverzeuk gesjik nao %1.
-v3.activity.buddy-invited.multi=Doe h\u00f6bs 'n vrundjverzeuk gesjik nao de volgende luuj:\n%1
-v3.MainWindow.button.share=Inhaud deile
-v3.buddies.remove.buddy.dialog.title=Vrundj weghaole bevestige
-v3.buddies.remove.buddy.dialog.text=Wils te %1 ech weghaole oet dien vrunjlies?
 ConfigView.section.security.nopw=Gei wachwaord opgegaeve
 ConfigView.section.security.nopw_v=Gei wachwaord besjikbaar, log dich esteblief in bie Vuze
 fileplugininstall.install.title=Plugin installere?
@@ -2448,51 +2375,7 @@ azbuddy.os_away=Eweg
 azbuddy.os_not_avail=Neet besjikbaar
 azbuddy.os_busy=Bezig
 azbuddy.ui.menu.disconnect=Verb\u00e8njing verbraeke
-v3.buddy.menu.chat=Kwake
-v3.chat.offline=%1 is op 't mem\u00e8nt offline en z\u00f3l dien berich kriege wen weer online.
-v3.chat.wrongversion=%1 gebroek 'n versie van Vuze dae gein kwaken \u00f3ngersteunt.
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=Dit berich neet mie laote zeen
-# The remaining keys were not in MessagesBundle.properties
-Progress.reporting.prompt.label.retry=Opnuuj
-Progress.reporting.prompt.label.cancel=Aafbraeke
-v3.TorrentOptionsView.title.short=Voorkeuren
-v3.mb.notTrusted.button.cancel=Annuleer
-v3.mb.UnknownContent.title=Inhoud Onbekent
-v3.mb.notTrusted.text=De inhoud '%1' is herkent als mogelijk gevaarlijk, jou systeem raporteert de inhoud het als een '%2' type.
-v3.mb.notTrusted.title=Inhoud is niet vertouwt
-xmlhttp.config.option.debug.deserialisation=Input XML handeling/behandeling
-ConfigView.section.connection.advanced.IPTOS.tooltip=Stel de traffic klasse / type-of-service (TOS) in de IP header in voor uitgaande pakketjes.\nAzureus laat dit standaard niet ingesteld, dit betekend dat de standaard OS instellingen worden gebruikt.\nVoorbeeld waardes zijn:\n0x02 voor IPTOS_LOWCOST\n0x04 voor IPTOS_REALIABILITY\n0x08 voor IPTOX_TRHOUGHPUT\n0x10 voor IPTOS_LOWDELAY\nOpmerking: Onderliggende netwerk implementaties kunnen deze waardes negeren, deze optie is dus zeer afhankelijk van de OS en JRE versies.
-v3.mb.stopSeeding.text=WAARSCHUWING: Deze actie zal niet de gepubliceerde inhoud  '%1' verwijderen van <A HREF="%2">%3</A>  \n\nKlik "Verwijderen" alleen als de gepubliceerde inhoud beschikbaar moet blijven voor downloaden, maar wel bandbreedte vrij wil maken. Zorg wel dat de uploads goed afgesloten zijn voordat je deze verwerking doorvoerd. (<A HREF="%4">how</A>?).\n\nKlik "Annuleer" als je de complete gepubliceerde inhoud wil verwijderen van www.GetAzureus, en gebruik de  (X) knop op het Gepubliceerde Inhoud Paneel in de publiceer tab.\n\n<A HREF="%4">More help</A>.\n\n
-Progress.reporting.prompt.label.cancel.tooltip=De bewirking aafbraeke
-v3.mb.stopSeeding.delete=&Verwijder
-xmlhttp.config.group.debug=Debug instellingen
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Gesjeije "Herneume"en "Nuje doelsjt\u00e8lling"-menu's laote zeen in de besjtenjstab.
-v3.mb.notTrusted.noapp.text=De inhoud '%1' is herkent als waarschijnlijk gevaarlijk, het is voor het systeem een onbekend formaat (%2).
-v3.mb.stopSeeding.title=Stop Seeding Inhoud
-v3.ConfigView.title.full=Voorkeuren
-xmlhttp.config.option.log_to_plugin=Plugin scherm (*)
-v3.mb.UnknownContent.noapp.text=De inhoud '%1' is niet herkent als een bekent formaat. Jou systeem heeft geen programma voor dit file type (%2).
-v3.mb.stopSeeding.cancel=&Annuleer
-Progress.reporting.prompt.label.remove=Weghaole
-v3.TorrentOptionsView.title.full=Voorkeuren
-Progress.reporting.prompt.label.remove.tooltip=Verwijder dit Voortgang Raport uit de historie
-v3.mb.UnknownContent.button.cancel=Annuleer
-ConfigView.label.bindip.info=Es veurbild, '192.168.1.2' of 'eth0' (huidige: %1)
-Progress.reporting.prompt.label.detail.tooltip=Toon deze voortgang Raportage in het detail scherm
-ConfigView.section.connection.advanced.IPTOS=Uitgaande packet type-of-service (TOS) [zie http://wiki.vuze.com/index.php/AdvancedNetworkSettings]
-network.ltep.enabled=Gebruik maken van het experimentelen extensie protocol handshake ondersteuning  (herstart vereist)
-xmlhttp.config.option.debug.serialisation=Output XML handeling/behandeling
-v3.mb.notTrusted.button.run=Weg gaan
-xmlhttp.config.group.logging=Logging 
-v3.mb.UnknownContent.button.run=Weg Gaan.
-xmlhttp.config.option.log_to_console=Console  (*)
-xmlhttp.config.group.logging.description=Selecteer waar je de logging output naartoe wil hebben:
-v3.MainWindow.menu.view.configuration=Veurkeure
-v3.mb.UnknownContent.text=De inhoud '%1' is niet herkent als een bekent formaat.  Jou syteem raporteert de inhoud als een type  '%2'.  De inhoud file extensie is '%3'.
-Progress.reporting.prompt.label.retry.tooltip=Opnieuw bewerking uitvoeren
-xmlhttp.config.option.debug.method_lookup=Methode resolutie/beslissing
-xmlhttp.config.option.debug.method_invocation=Methode invocatie/aanroeping
-ConfigView.label.announceport.tooltip=Informeer de tracker van 'n anger paort es de paort waohaer se loesters. Laot de optie laeg es se dees neet wils broeke.
-v3.ConfigView.title.short=Voorkeuren
-xmlhttp.config.group.debug.description=Dit onderdeel word gebruikt om meer nuttigen informatie naar de console te plaatsen.
+iconBar.queue.tooltip=In de wach z\u00e8tte
+MainWindow.menu.help.faq=D\u00e8k gesjt\u00e8lde vraoge (FAQ)
+#what you've watched? Discover more with a single click...
+TableColumn.header.#=Nr: 
diff --git a/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties b/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties
index a65d16c..36194ef 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties
@@ -382,7 +382,6 @@ MyTorrentsView.menu.removeand.deletedata=I\u0161trinti &duomenis
 MyTorrentsView.menu.removeand.deleteboth=I\u0161trinti &visk\u0105
 deletedata.title=\u012esp\u0117jimas
 deletedata.message1=J\u016bs tuoj i\u0161trinsite DUOMENIS i\u0161:\n
-deletedata.message2=\nAr tikrai norite t\u0119sti?
 MainWindow.menu.file.configure=Nustatym\u0173 &vedlys...
 configureWizard.title=Nustatym\u0173 vedlys
 configureWizard.welcome.title=Sveiki \u012fsijung\u0119 Vuze Nustatym\u0173 vedl\u012f
@@ -521,7 +520,6 @@ ConfigView.section.tracker=Trackeris
 ConfigView.section.tracker.pollinterval=Trackerio klient\u0173 apklausos intervalas (sek.)
 ConfigView.section.tracker.publishenable=Skelbti Torrento informacij\u0105 \u012f "<tracker_url>"
 ConfigView.section.tracker.ip=I\u0161orinis Trackerio IP adresas
-MainWindow.menu.help.faq=&Da\u017eniausiai u\u017eduodami klausimai
 ConfigView.section.style.enableXPStyle=\u012ejungti XP stili\u0173 [reikia perkrauti]
 ConfigView.section.tracker.checkip=Automati\u0161kai rasti i\u0161orin\u012f IP adres\u0105...
 ipCheckerWizard.title=IP tikrinimo vedlys
@@ -718,7 +716,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0160is nustatymas atn
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Grafikos vertikali atsvara (GTK pataisa)
 security.certtruster.title=Saugumo sertifikato persp\u0117jimas
 security.certtruster.intro=\u0160is saugumo sertifikatas buvo i\u0161duotas kompanijos, kuria J\u016bs nepasitikite
 security.certtruster.resource=I\u0161teklius:
@@ -856,7 +853,6 @@ ConfigView.text.minutes=min
 ConfigView.text.neverIgnore=Niekada neignoruok
 ConfigView.text.any=bet kuriuo
 DownloadManager.error.datamissing=Tr\u016bksta duomen\u0173
-iconBar.queue.tooltip=\u012e eil\u0119
 MainWindow.menu.file.open.torrentforseeding=Torrent fail\u0105... (Skleidimui)
 MainWindow.menu.language.refresh=&At\u0161vie\u017einti
 ManagerItem.forced=Priverstinai
@@ -1270,8 +1266,6 @@ FilesView.fullpath=Rodyti vis\u0105 keli\u0105
 FilesView.remaining=Liko dali\u0173
 TableColumn.header.trackername=Trackerio vardas
 TableColumn.header.trackername.info=Trackerio vardas pagal prane\u0161imo URL
-ConfigView.label.announceport=Keisti Trackerio prane\u0161im\u0173 prievad\u0105
-ConfigView.label.announceport.tooltip=Informuoti Tracker\u012f apie kit\u0105 prievad\u0105 nei tas kurio klausomasi. Nor\u0117dami nenaudoti palikite nenustatyt\u0105
 ConfigView.group.override=Rankiniai nustatymai
 ConfigView.section.file.perf.cache.notsmallerthan=Nekelti \u012f spartinan\u010di\u0105j\u0105 atmintin\u0119 fail\u0173, ma\u017eesni\u0173 nei (%1)
 PeersView.menu.blockupload=Blokuoti i\u0161siuntim\u0105
@@ -1302,8 +1296,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Jungties SO_RCVBUF dydis [0: na
 ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Nustato standartin\u0119 jungties SO_RCVBUF reik\u0161m\u0119 (baitais), tai yra TCP pri\u0117mino lango dyd\u012f ir mast\u0105.\nVuze pagal numatym\u0105 jos nenustato, tai rei\u0161kia, kad yra panaudojami OS numatymai.\nPASTABA: Linux dvigubina duot\u0105 reik\u0161m\u0119.
 ConfigView.section.connection.advanced.SO_SNDBUF=Jungties SO_SNDBUF dydis [0: naudoti OS numatyt\u0105]
 ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Nustato standartin\u0119 jungties SO_SNDBUF reik\u0161m\u0119 (baitais), tai yra TCP siuntimo lango dyd\u012f.\nVuze pagal numatym\u0105 jos nenustato, tai rei\u0161kia, kad yra panaudojami OS numatymai.\nPASTABA: Linux dvigubina duot\u0105 reik\u0161m\u0119.
-ConfigView.section.connection.advanced.IPTOS=I\u0161einan\u010di\u0173 paket\u0173 serviso tipas (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Nustatyti srauto klas\u0119 / serviso tipo (TOS) lauk\u0105 IP antra\u0161t\u0117je i\u0161einantiems paketams.\nVuze pagal numatym\u0105 jo nenustato, tai rei\u0161kia, kad yra panaudojami OS numatymai.\nPavyzdyn\u0117s reik\u0161m\u0117s yra:\n0x02 - IPTOS_LOWCOST\n0x04 - IPTOS_RELIABILITY\n0x08 - IPTOS_THROUGHPUT\n0x10 - IPTOS_LOWDELAY\nPASTABA: Esamas ry\u0161io \u012fgyvendinimas gali ignoruoti \u0161i\u0105 reik\u0161m\u0119, taigi, \u0161i reik\u0161m\u0117 smarkiai priklauso nuo OS ir JRE versij\u0173.
 ConfigView.section.interface.confirm_torrent_removal=Rodyti patvirtinimo dialog\u0105 \u0161alinant Torrent\u0105
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Patvirtinti, kai \u0161alinamas Torrentas i\u0161 Mano Torrent\u0173 lango.
 MyTorrentsView.confirm_torrent_removal=Ar tikrai norite \u0161alinti?\n
@@ -1453,6 +1445,7 @@ MainWindow.menu.tools.nattest=&NAT / ugniasien\u0117s testas
 Button.apply=Vykdyti
 Button.close=U\u017edaryti
 window.welcome.title=Sveiki \u012fsijung\u0119 Vuze %1
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=Leidimo pastabos (ang.)
 dht.reseed.label=Paprastai n\u0117ra b\u016btina i\u0161 naujo paskleisti paskirstytos duomen\u0173 baz\u0117s. Jeigu kontakt\u0173 skai\u010dius yra ma\u017eas, tai gali b\u016bti panaudota vientisumui atkurti.\nPalikite tu\u0161\u010di\u0105, nor\u0117dami atlikti \u012fk\u0117l\u0105 i\u0161 prisijungusi\u0173 Siunt\u0117j\u0173 arba \u012fveskite IP ir prievad\u0105, nor\u0117dami atlikti \u012fk\u0117l\u0105 i\u0161 \u017einomo Siunt\u0117jo.
 dht.reseed.group=I\u0161 naujo skleisti
@@ -1899,13 +1892,8 @@ MainWindow.menu.view.iconbar=\u012erankin\u0117
 MyTorrentsView.menu.rename=Pervadinti
 MyTorrentsView.menu.rename.displayed=Pakeisti rodom\u0105 vard\u0105
 MyTorrentsView.menu.rename.save_path=Pervadinti i\u0161saugojimo keli\u0105
-MyTorrentsView.menu.rename.displayed_and_save_path=Pervadinti abu
 MyTorrentsView.menu.rename.displayed.enter.title=Pakeisti rodom\u0105 vard\u0105
 MyTorrentsView.menu.rename.displayed.enter.message=\u012era\u0161ykite nauj\u0105 vard\u0105, kuris bus rodomas \u0161iam atsiuntimui.\nJei joks tekstas ne\u012fvestas, bus panaudotas originalus vardas.
-MyTorrentsView.menu.rename.save_path.enter.title=Pervadinti i\u0161saugojimo keli\u0105
-MyTorrentsView.menu.rename.save_path.enter.message=\u012era\u0161ykite nauj\u0105 i\u0161saugojimo keli\u0105 \u0161iam atsiuntimui.\nJei joks tekstas ne\u012fvestas, bus panaudotas atsiuntimo rodomas vardas.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Pervadinti atsiuntim\u0105
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u012era\u0161ykite nauj\u0105 vard\u0105 \u0161iam atsiuntimui.\nJei joks tekstas ne\u012fvestas, bus panaudotas originalus vardas.
 MyTorrentsView.menu.edit_comment=Redaguoti komentar\u0105
 MyTorrentsView.menu.edit_comment.enter.title=Redaguoti komentar\u0105
 MyTorrentsView.menu.edit_comment.enter.message=\u012eveskite komentar\u0105 \u0161iam atsiuntimui
@@ -1959,7 +1947,6 @@ ConfigView.section.connection.http.port=\u012eeinan\u010dio prievado numeris
 ConfigView.section.connection.http.portoverride=Keisti trackerio HTTP prievad\u0105 [0: nekeisti]
 window.update.noupdates.title=Atnaujinim\u0173 tikrinimo rezultatai
 window.update.noupdates.text=\u0160iuo metu n\u0117ra joki\u0173 nauj\u0173 atnaujinim\u0173.\n\nSveikiname!
-ConfigView.label.bindip.info=Pavyzd\u017eiui, '192.168.1.2' arba 'eth0' (dabar: %1)
 ConfigView.label.mindownloads=Ma\u017eiausiai vienalaiki\u0173 atsiuntim\u0173
 UI.cannot_submit_blank_text=J\u016bs turite \u012fvesti reik\u0161m\u0119.
 crypto.alert.as.warning=Yra \u017einoma, kad tinklas '%1' primeta duomen\u0173 srauto ribojimus atsiuntimo grei\u010diui suma\u017einti. Ry\u0161io \u0161ifravimas buvo automati\u0161kai \u012fjungtas - j\u012f galima i\u0161jungti/pakeisti nustatymuose.
@@ -1969,7 +1956,6 @@ popup.download.added="%1" buvo prid\u0117tas \u012f atsiuntim\u0173 s\u0105ra\u0
 MessageBoxWindow.nomoreprompting=Daugiau nebeklausti
 TorrentOptionsView.param.max.seeds=Did\u017eiausiais susijungim\u0173 skai\u010dius su Skleid\u0117jais [0: susijungim\u0173 skai\u010dius]
 TorrentOptionsView.param.alternative.value.enable=Alternatyvi reik\u0161m\u0117 skleid\u017eiant
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Rodyti atskiras "Pervadinti" ir "I\u0161 naujo nukreipti" meniu parinktis Fail\u0173 kortel\u0117je
 ConfigView.section.proxy.check.on.start=Paleid\u017eiant tikrinti tarpinio serverio b\u016bsen\u0105
 TransferStatsView.legend.pingaverage=Vidurkis
 TransferStatsView.legend.ping1=Tikslas 1
@@ -2054,8 +2040,6 @@ SpeedTestWizard.stage.message.connect.stats=Ry\u0161io statistika: siunt\u0117ja
 window.uiswitcher.title=Vuze naudotojo s\u0105sajos parinkimas
 window.uiswitcher.text=Pra\u0161ome \u017eemiau i\u0161sirinkti labiausiai tinkan\u010di\u0105 naudotojo s\u0105saj\u0105.
 window.uiswitcher.NewUI.text=Suteikia labiausiai nu\u0161lifuot\u0105 s\u0105saj\u0105.\n\nRekomenduojama naujiems ir pradedantiems naudotojams.
-window.uiswitcher.AdvancedUI.title=I\u0161pl\u0117stin\u0117 Vuze
-window.uiswitcher.AdvancedUI.text=Nauja Vuze s\u0105saja su i\u0161pl\u0117stine kortele.\n\nPuikus pasirinkimas naudotojams, kurie yra priprat\u0119 prie klasikin\u0117s s\u0105sajos, bet vistiek nori matyti kaip sekasi Vuze s\u0105sajai.
 window.uiswitcher.ClassicUI.title=Klasikin\u0117 s\u0105saja
 window.uiswitcher.ClassicUI.text=Skirta tiems, kurie nenori naujos s\u0105sajos. Vuze elgsis lygiai taip pat, kaip elg\u0117si 2.x versijose.
 VivaldiView.notAvailable=Vivaldi vaizdas neprieinamas
@@ -2070,6 +2054,11 @@ TableColumn.menu.date_added.reset=Atstatyti dat\u0105
 MyTorrents.column.ColumnProgressETA.2ndLine=NBL: %1
 TableColumn.header.Speed=Greitis
 TableColumn.header.SpeedGraphic=Greitis
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
 v3.MainWindow.tab.home=Pagrindinis
 v3.MainWindow.tab.library=Mano biblioteka
 v3.MainWindow.tab.publish=Skelbti
@@ -2087,15 +2076,12 @@ v3.MainWindow.button.comment=Komentuoti
 v3.MainWindow.button.viewdetails=Rodyti informacij\u0105
 v3.MainWindow.button.play=Paleisti
 v3.MainWindow.button.cancel=Atsisakyti
-v3.MainWindow.button.sendtofriend=Vie\u0161inti
 v3.MainWindow.xofx=%1 i\u0161 %2
 v3.MainWindow.Loading=\u012ekeliama.. Pra\u0161ome palaukti
 v3.filter-bar=Pavadinimo filtras:
 v3.mb.delPublished.title=Stabdyti turinio skleidim\u0105
 v3.mb.delPublished.delete=&Trinti
 v3.mb.delPublished.cancel=&Atsisakyti
-v3.mb.notTrusted.button.cancel=Atsisakyti
-v3.mb.UnknownContent.button.cancel=Atsisakyti
 v3.mb.PlayFileNotFound.title=Failas nerastas
 v3.mb.PlayFileNotFound.button.remove=\u0160alinti i\u0161 Vuze
 v3.mb.deletePurchased.title=\u0160alinti nupirkt\u0105 turin\u012f
@@ -2128,4 +2114,7 @@ SpeedTestWizard.set.upload.panel.explain=\u010cia nustatyti limitai yra naudojam
 SpeedTestWizard.set.limit.conf.level=Pasitik\u0117jimo lygis
 SpeedTestWizard.finish.panel.auto.speed=Automatinis greitis yra :
 SpeedTestWizard.finish.panel.auto.speed.seeding=Automatinis greitis skleid\u017eiant yra : 
+ConfigView.label.announceport=Keisti Trackerio prane\u0161im\u0173 prievad\u0105
+iconBar.queue.tooltip=\u012e eil\u0119
+MainWindow.menu.help.faq=&Da\u017eniausiai u\u017eduodami klausimai
 MainWindow.menu.help.donate=&Aukoti
diff --git a/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties b/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties
index 41aa3c3..b40cb42 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0430
 MainWindow.menu.file.open=\u041e\u0442\u0432\u043e\u0440\u0438
 MainWindow.menu.file.create=\u041d\u043e\u0432 \u0442\u043e\u0440\u0435\u043d\u0442
@@ -128,7 +129,6 @@ MyTorrentsView.menu.removeand.deletedata=\u0438\u0437\u0431\u0440\u0438\u0448\u0
 MyTorrentsView.menu.removeand.deleteboth=\u0438\u0437\u0431\u0440\u0438\u0448\u0438 \u0441\u0450
 deletedata.title=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435
 deletedata.message1=\u040c\u0435 \u0433\u0438 \u0438\u0437\u0431\u0440\u0438\u0448\u0435\u0442\u0435 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438\u0442\u0435 \u0437\u0430 :\n
-deletedata.message2=\n\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438?
 configureWizard.title=\u0412\u043e\u043b\u0448\u0435\u0431\u043d\u0438\u043a \u0437\u0430 \u043f\u043e\u0434\u0435\u0441\u0443\u0432\u0430\u045a\u0430
 configureWizard.transfer.hint=\u0421\u043e\u0432\u0435\u0442: \u041d\u0430\u043c\u0435\u0441\u0442\u0435\u0442\u0435 \u043d\u0435\u0448\u0442\u043e \u043f\u043e\u043c\u0430\u043b\u043a\u0443 \u043e\u0434 \u043d\u0430\u0458\u0433\u043e\u043b\u0435\u043c\u0430\u0442\u0430 \u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442
 configureWizard.transfer.connection=\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u0440\u0441\u043a\u0430
@@ -165,13 +165,18 @@ fileDownloadWindow.state_downloading=\u0421\u0438\u043c\u043d\u0443\u0432\u0430\
 fileDownloadWindow.state_error=\u0413\u0440\u0435\u0448\u043a\u0430 : 
 MainWindow.menu.file.open.url=\u041b\u043e\u043a\u0430\u0446\u0438\u0458\u0430
 openUrl.title=\u041e\u0442\u0432\u043e\u0440\u0438 \u043b\u043e\u043a\u0430\u0446\u0438\u0458\u0430
-MainWindow.menu.help.faq=\u0427\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0443\u0432\u0430\u043d\u0438 \u043f\u0440\u0430\u0448\u0430\u045a\u0430
 splash.loadingImages=\u0412\u0447\u0438\u0442\u0443\u0432\u0430\u043c \u0441\u043b\u0438\u043a\u0438
 splash.initializeGui=\u0413\u043e \u0438\u043d\u0446\u0438\u0458\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043c \u0433\u043b\u0430\u0432\u043d\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446
 splash.openViews=\u041e\u0442\u0432\u043e\u0440\u0430\u043c \u043f\u043e\u0433\u043b\u0435\u0434\u0438
 splash.plugin=\u0413\u043e \u0432\u0447\u0438\u0442\u0443\u0432\u0430\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0442 
 configureWizard.nat.tooManyPorts=\u041f\u0440\u0435\u043c\u043d\u043e\u0433\u0443 \u043f\u043e\u0440\u0442\u0438 \u0437\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u0430\u045a\u0435 (\u0441\u043c\u0435\u0435 \u0434\u043e 9)
 MyTorrentsView.menu.publish=\u041e\u0431\u0458\u0430\u0432\u0438
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
 configureWizard.nat.sharePort=\u0423\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0432\u0430\u0458 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u0430 \u0432\u043b\u0435\u0437\u043d\u0430 \u043f\u043e\u0440\u0442\u0430 \u0437\u0430 \u0441\u0438\u0442\u0435 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
 columnChooser.title=\u0418\u0437\u0431\u0435\u0440\u0438 \u043a\u043e\u043b\u043e\u043d\u0438 \u0437\u0430 \u043f\u0440\u0438\u043a\u0430\u0437
 columnChooser.move=\u041f\u0440\u0435\u0440\u0435\u0434\u0435\u0442\u0435 \u0433\u0438 \u0440\u0435\u0434\u043e\u0432\u0438\u0442\u0435 \u0441\u043e \u0432\u043b\u0435\u0447\u0435\u045a\u0435
@@ -201,6 +206,9 @@ MyTorrentsView.menu.moveEnd=\u041d\u0430\u0458\u0434\u043e\u043b\u0443
 MainWindow.menu.view.stats=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430
 TableColumn.header.health=\u0417\u0434\u0440\u0430\u0432\u0458\u0435
 MyTorrentsView.menu.health=\u0417\u0430 \u0437\u0434\u0440\u0430\u0432\u0458\u0435\u0442\u043e
+#
+#2.0.7.0
+#
 security.certtruster.yes=\u0414\u0430
 security.certtruster.no=\u041d\u0435
 MainWindow.menu.file.share=\u0421\u043f\u043e\u0434\u0435\u043b\u0438
@@ -214,6 +222,9 @@ MainWindow.menu.view.myshares=\u0441\u043f\u043e\u0434\u0435\u043b\u0435\u043d\u
 GeneralView.label.hash.tooltip=\u0418\u0441\u043a\u043e\u043f\u0438\u0440\u0430\u0458 \u0433\u043e \u0445\u0435\u0448\u043e\u0442 \u0441\u043e \u043a\u043b\u0438\u043a\u0430\u045a\u0435
 ConfigView.label.serverport=Incoming TCP listen port
 configureWizard.nat.server.tcp_listen_port=\u0412\u043b\u0435\u0437\u043d\u0430 \u201eTCP\u201c \u043f\u043e\u0440\u0442\u0430
+#
+# 2.0.7.x
+#
 Categories.all=\u0421\u0438\u0442\u0435
 Categories.uncategorized=\u041d\u0435\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0438
 CategoryAddWindow.message=\u0414\u043e\u0434\u0430\u0434\u0438 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0458\u0430
@@ -241,6 +252,9 @@ AlertMessageBox.error=\u0413\u0440\u0435\u0448\u043a\u0430
 AlertMessageBox.warning=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435
 AlertMessageBox.comment=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 AlertMessageBox.information=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0458\u0430
+#
+# > 2.0.8.0
+#
 TableColumn.header.remaining=\u041f\u0440\u0435\u043e\u0441\u0442\u0430\u043d\u0430\u0442\u043e
 popup.error.hide=\u0422\u0440\u0433\u043d\u0438 \u0433\u043e
 popup.error.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
@@ -268,6 +282,8 @@ GeneralView.label.maxdownloadspeed.tooltip=\u041d\u0430\u0458\u0433\u043e\u043b\
 Button.clear=\u0418\u0441\u0447\u0438\u0441\u0442\u0438
 Button.reset=\u0420\u0435\u0441\u0442\u0430\u0440\u0442
 ConfigView.section.server.enableudp=Enable UDP tracker client protocol.
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=\u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440\u0438
 MainWindow.menu.transfers.startalltransfers=\u0417\u0430\u043f\u043e\u0447\u043d\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435
 MainWindow.menu.transfers.stopalltransfers=\u0417\u0430\u043f\u0440\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435
@@ -316,6 +332,7 @@ MyTorrentsView.menu.advancedmenu=\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043
 MyTorrentsView.menu.networks=\u041c\u0440\u0435\u0436\u0438
 Button.apply=\u041f\u0440\u0438\u043c\u0435\u043d\u0438
 Button.close=\u0417\u0430\u0442\u0432\u043e\u0440\u0438
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0437\u0430 \u043d\u043e\u0432\u0430\u0442\u0430 \u0432\u0435\u0440\u0437\u0438\u0458\u0430
 dht.reseed.label=Normally reseeding of the Distributed Database is not necessary. However, if the number of contacts is low this can be used for re-integratation.\nLeave blank to bootrap off connected peers or enter IP and port to explicitly bootstrap from a known peer.
 MainWindow.dht.status.disabled=Disabled
@@ -325,11 +342,8 @@ MainWindow.dht.status.users=%1 Users
 MyTorrentsView.menu.setUpSpeed=\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0431\u0440\u0437\u0438\u043d\u0430 \u043d\u0430\u0433\u043e\u0440\u0435
 MyTorrentsView.menu.setDownSpeed=\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0431\u0440\u0437\u0438\u043d\u0430 \u043d\u0430\u0434\u043e\u043b\u0443
 diagnostics.log_found=Vuze did not shutdown tidily. Please check %1 for diagnostic log files and consider reporting them to the Vuze team if this is the result of an application error.
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0438:
+# > 2402
+MainWindow.menu.help.faq=\u0427\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0443\u0432\u0430\u043d\u0438 \u043f\u0440\u0430\u0448\u0430\u045a\u0430
 MainWindow.menu.help.donate=\u0414\u043e\u043d\u0438\u0440\u0430\u0458
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-MainWindow.dht.status.running=Running
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties b/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties
index 6e5cc84..e43243a 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Fail .torrent
 MainWindow.menu.file=&Fail
 MainWindow.menu.file.open=&Buka
@@ -284,7 +285,6 @@ MyTorrentsView.menu.removeand.deletedata=Padam &Data
 MyTorrentsView.menu.removeand.deleteboth=Padam Kedua-duanya
 deletedata.title=!!! Awas !!!
 deletedata.message1=Kamu akan memadam DATA dari :\n
-deletedata.message2=\nPastikah anda?
 MainWindow.menu.file.configure=Configuration &Wizard
 configureWizard.welcome.message=This wizard will help you configure Vuze for most common use. You can modify in depth the configuration using the View>Configuration menu.
 configureWizard.nat.message=In order to get the best out of BitTorrent, it's highly recommended to be fully accessible from the internet. Default bittorrent port is 6881. This tool lets you test and / or change the port.
@@ -362,7 +362,6 @@ MainWindow.menu.file.open.url=&URL
 openUrl.title=Vuze - Buka Url
 MyTorrentsView.menu.host.error.message=The following error occurred when 
 ConfigView.section.tracker=Pengesan
-MainWindow.menu.help.faq=&FAQ
 ConfigView.section.tracker.checkip=Check Address...
 ipCheckerWizard.explanations=You can use this wizard to find out what your external IP address is. If your IP address is dynamic, we recommend that you open an account with a Dynamic DNS Service. Some such services are listed below, use the link provided to create an account (where supported). Then fill the IP address field with your dynamic hostname (e.g. myhostname.dyndns.org). You'll need a program to automatically update your Dynamic DNS Service with your IP address. That way, you'll be able to host torrents, even if your IP changes.
 wizard.tracker.local=Gunakan Pengesan Dalam Vuze
@@ -374,9 +373,15 @@ MyTorrentsView.menu.publish=&Publish...
 MyTrackerView.completed=Selesai
 MainWindow.menu.file.open.torrentnodefault=Fail .torrent (Tiada tempat simpan ditetapkan)
 wizard.comment=Komen
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Menggambarkan jumlah setiap ketulan yang ada.\nJika nombor di sebelah kanan kurang dari 1, anda tidak melihat fail yang selesai (dan mungkin menghadapi masalah menyelesaikan memuat turun).
 GeneralView.label.trackerurl.tooltip=Klik untuk menyalin URL makluman ke klipbod
 GeneralView.label.trackerurlopen.tooltip=Klik untuk membuka lelaman pengesan utama.
+#
+# 2.0.4.4
+#
 ConfigView.section.logging=Catatan
 ConfigView.section.logging.enable=Gunakan catatan ke fail
 ConfigView.section.logging.logdir=Catatkan direktori fail
@@ -447,6 +452,9 @@ health.explain.blue=Apabila menyemai, ia bermakna bahawa anda belum lagi disambu
 health.explain.yellow=Bermakna pengesan berfungsi dan anda telah bersambung dengan rakan-rakankongsi, tetapi anda tidak mempunyai sambungan dari luar.\nAnda mungkin menghadapi masalah NAT jika Torrent kamu tetap berwarna kuning.
 health.explain.green=Semua berjalan lancar.
 ConfigView.section.style.alwaysRefreshMyTorrents=Selalu lancarsemula TorrentKu
+#
+#2.0.7.0
+#
 MainWindow.menu.file.share=&Kongsi
 MainWindow.menu.file.share.file=&Fail...
 MainWindow.menu.file.share.dir=D&irektori...
@@ -471,6 +479,9 @@ GeneralView.label.hash.tooltip=Kilk untuk menyalin hash ke klipbod
 ConfigView.label.serverport=Incoming TCP listen port
 ConfigView.section.sharing=Pengongsian
 ConfigView.section.sharing.usessl=Gunakan SSL untuk shared resources (memerlukan konfigurasi pengesan)
+#
+# 2.0.7.x
+#
 Categories.all=Semua
 Categories.uncategorized=Tidak dikategorikan
 CategoryAddWindow.message=Masukkan nama kategori baru
@@ -547,6 +558,9 @@ SpeedView.stats.session=Sesi ini
 SpeedView.stats.downloaded=Telah dimuat turun
 SpeedView.stats.uploaded=Telah dimuat naik
 SpeedView.stats.uptime=Masa berfungsi (jam)
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Buka Torrent
 OpenTorrentWindow.addFiles=&Tambah Fail
 OpenTorrentWindow.dataLocation=Tempat simpan data:
@@ -556,25 +570,15 @@ OpenTorrentWindow.addPosition.last=Terakhir
 popup.error.hide=Sembunyikan
 popup.error.details=Maklumat terperinci
 ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 ConfigView.label.overrideip=Override IP address sent to tracker\n - Only use if you really know why you'd need it!
+#file can be a URL or a path in the jar
 ConfigView.section.logging.log0type=Maklumat
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=Fail Torrent:
 Button.moveUp=Pindah ke atas
 Button.moveDown=Pindah ke bawah
+# > 2402
+MainWindow.menu.help.faq=&FAQ
 MainWindow.menu.help.donate=&Derma !!!
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-configureWizard.nat.already_listening=Unable to test because listening port is already\nin use. Please stop all active torrents and restart Azureus.\nThen run this test again.
-SystemTray.menu.stopalldownloads=Hentikan &kesemua memuat turun
-MainWindow.about.internet.featurerequests=Permintaan ciri-ciri
-ConfigView.label.maxclients=Maximum number of connections per torrent [0: unlimited]
-ConfigView.label.slowconnect=Slowly connect new peer connections\n - For people with internet disconnection issues
-didalam=fail tersebut
-incoming=port configuration / firewall permissions for application to act as server
-ConfigView.section.proxy.description=Enable proxying of tracker and peer communications.\nPeer proxying requires a SOCKS-compatible proxy.\nVuze must be restarted before changes take effect.
-hosting=the torrent
-SystemTray.menu.startalldownloads=Mulakan kesemua memuat turun
-ConfigView.label.maxuploadspeed.kbs=KB/s
diff --git a/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties b/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties
index e0efed8..e82d118 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties
@@ -376,7 +376,6 @@ MyTorrentsView.menu.removeand.deletedata=Verwijder &Data
 MyTorrentsView.menu.removeand.deleteboth=Verwijder &Beide
 deletedata.title=!!! Waarschuwing !!!
 deletedata.message1=Je staat op het punt de DATA te verwijderen van :
-deletedata.message2=\nWeet je zeker dat je wilt doorgaan?
 MainWindow.menu.file.configure=Configuratie &Wizard...
 configureWizard.title=Configuratie wizard 
 configureWizard.welcome.title=Welkom bij de Vuze Configuratie wizard
@@ -508,7 +507,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Tracker cli\u00ebnt afstemming interval (sec)
 ConfigView.section.tracker.publishenable="Publiceer torrent details naar "<tracker_url>""
 ConfigView.section.tracker.ip=IP-adres van externe tracker
-MainWindow.menu.help.faq=Vaak gestelde vragen
 ConfigView.section.style.enableXPStyle=Activeer XP stijl (herstart nodig)
 ConfigView.section.tracker.checkip=Automatisch extern IP adres opzoeken...
 ipCheckerWizard.title=Wizard IP Controle
@@ -703,7 +701,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Deze optie ververst Mij
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Grafisch Verticaal Beginpunt (GTK fix)
 security.certtruster.title=Beveiliging Certificaat Waarschuwing
 security.certtruster.intro=Het beveiliging certificaat is vrijgegeven door een bedrijf dat je niet vertrouwt
 security.certtruster.resource=Bron: 
@@ -841,7 +838,6 @@ ConfigView.text.minutes=minuten op
 ConfigView.text.neverIgnore=Nooit Negeren
 ConfigView.text.any=een
 DownloadManager.error.datamissing=Gegevens ontbreken 
-iconBar.queue.tooltip=Wachtrij
 MainWindow.menu.file.open.torrentforseeding=Torrent bestand (Voor Uploaden) 
 MainWindow.menu.language.refresh=Ve&rnieuwen
 ManagerItem.forced=Geforceerd
@@ -1869,13 +1865,8 @@ MainWindow.menu.view.iconbar=Gereedschap balk
 MyTorrentsView.menu.rename=Hernoem
 MyTorrentsView.menu.rename.displayed=Hernoem de getoonde naam
 MyTorrentsView.menu.rename.save_path=Hernoem opslag map
-MyTorrentsView.menu.rename.displayed_and_save_path=Hernoem bijde
 MyTorrentsView.menu.rename.displayed.enter.title=Hernoem de getoonde naam
 MyTorrentsView.menu.rename.displayed.enter.message=Geef een nieuwen naam om deze download te tonen.\nAls er geen tekst geplaatst is, wordt de originelen naam gebruikt.
-MyTorrentsView.menu.rename.save_path.enter.title=Hernoem opslag map
-MyTorrentsView.menu.rename.save_path.enter.message=Geef een nieuwen opslag map voor deze download.\nAls er geen tekst wordt gegeven, word de getoonde download naam gebruikt.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Hernoem de download
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Geef een nieuwen naam voor deze download.\nAls er geen tekst wordt gegeven , worden de oud waardes gebruikt.
 MyTorrentsView.menu.edit_comment=Schrijf commentaar
 MyTorrentsView.menu.edit_comment.enter.title=Schrijf commentaar
 MyTorrentsView.menu.edit_comment.enter.message=Plaats een commentaar voor deze download
@@ -2019,8 +2010,6 @@ SpeedTestWizard.stage.message.connect.stats=Connectie status: peers=%1, down_ok=
 window.uiswitcher.title=Vuze UI Kiezer
 window.uiswitcher.text=Selecteer de gewenste gebruikersinterface (UI).
 window.uiswitcher.NewUI.text=* Aanbevolen voor beginners en nieuwen gebruikers.\n\n* Een makelijk, intiutief grafisch uiterlijk.\n\n* Vereiste uiterlijk voor het publiceren op het Vuze platform.
-window.uiswitcher.AdvancedUI.title=Geavanceerde Vuze 
-window.uiswitcher.AdvancedUI.text=* Aanbevolen voor gebruikers die gebruik willen maken van het klassieke  uiterlijk maar ook willen zoeken, browsen en plaatsen op het Vuze platform.\n\n* Een makelijk, intu\u00eftief grafische uiterlijk gepaard met geavanceerde mogelijkheden en functionaliteit.
 window.uiswitcher.ClassicUI.title=Klassiek uiterlijk
 window.uiswitcher.ClassicUI.text=* Behoud de functionaliteit van de 2.x versies.\n\n* Vuze skin word niet geladen.
 window.uiswitcher.bottom.text=U kunt later opnieuw met de UI Kiezer eenvoudig uw keuze wijzigen.
@@ -2048,6 +2037,11 @@ TableColumn.header.Rating=Waarderen
 TableColumn.header.SpeedGraphic=Snelheid
 TableColumn.header.AzProduct=Van
 TableColumn.header.ProgressETA=Voortgang
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
 v3.MainWindow.tab.browse=Browse Inhoud
 v3.MainWindow.tab.library=Mijn Bibliotheek
 v3.MainWindow.tab.publish=Publiceer
@@ -2066,7 +2060,6 @@ v3.MainWindow.button.comment=Commentaar
 v3.MainWindow.button.viewdetails=Bekijk Details
 v3.MainWindow.button.play=Speel
 v3.MainWindow.button.cancel=Afbreken
-v3.MainWindow.button.sendtofriend=Deel
 v3.MainWindow.view.wait=Initialicering voor tonen, momentje.
 v3.MainWindow.xofx=%1 van %2
 v3.MainWindow.Loading=Laden. Momentje graag.
@@ -2076,16 +2069,6 @@ v3.mb.delPublished.title=Stop met uploaden van de inhoud
 v3.mb.delPublished.text=WAARSCHUWING: Deze actie zal niet de gepubliceerde inhoud  '%1' verwijderen van <A HREF="%2">%3</A>  \n\nKlik "Verwijderen" alleen als de gepubliceerde inhoud beschikbaar moet blijven voor downloaden, maar wel bandbreedte vrij wil maken. Zorg wel dat de uploads goed afgesloten zijn voordat je deze verwerking doorvoerd. (<A HREF="%4">how</A>?).\n\nKlik "Annuleer" als je de complete gepubliceerde inhoud wil verwijderen van www.GetVuze, en gebruik de  (X) knop op het Gepubliceerde Inhoud Paneel in de publiceer tab.\n\n<A HREF="%4">Meer hulp</A>.\n\n
 v3.mb.delPublished.delete=&Verwijder
 v3.mb.delPublished.cancel=&Annuleer
-v3.mb.notTrusted.title=Inhoud is niet vertouwt
-v3.mb.notTrusted.text=De inhoud '%1' is herkent als mogelijk gevaarlijk, jou systeem raporteert de inhoud het als een '%2' type.
-v3.mb.notTrusted.noapp.text=De inhoud '%1' is herkent als waarschijnlijk gevaarlijk, het is voor het systeem een onbekend formaat (%2).
-v3.mb.notTrusted.button.run=Weg gaan
-v3.mb.notTrusted.button.cancel=Annuleer
-v3.mb.UnknownContent.title=Inhoud Onbekent
-v3.mb.UnknownContent.text=De inhoud '%1' is niet herkent als een bekent formaat.  Jou syteem raporteert de inhoud als een type  '%2'.  De inhoud file extensie is '%3'.
-v3.mb.UnknownContent.noapp.text=De inhoud '%1' is niet herkent als een bekent formaat. Jou systeem heeft geen programma voor dit file type (%2).
-v3.mb.UnknownContent.button.run=Weg Gaan.
-v3.mb.UnknownContent.button.cancel=Annuleer
 v3.mb.PlayFileNotFound.title=Bestand Niet Gevonden
 v3.mb.PlayFileNotFound.text=De files voor '%1' zijn verwijder of vermist.
 v3.mb.PlayFileNotFound.button.remove=Verwijder uit Vuze
@@ -2307,11 +2290,6 @@ ConfigView.section.security.unlockkey.error=Unlock key is mislukt - wachtwoord i
 ConfigView.copy.to.clipboard.tooltip=kopi\u00ebr naar het clipboard
 Views.plugins.azbuddy.title=Vrienden
 Browser.popup.error.no.access=Er is een fout opgetreden tijden het contact maken met een anderen bron.\nProbeer het later nog eens !
-v3.activity.header.today=Vandaag
-v3.activity.header.yesterday=Gisteren
-v3.activity.header.xdaysago=%1 Dagen Geleden
-v3.activity.header.1weekago=1 Week Geleden
-v3.activity.header.xweeksago=%1 Weken Geleden
 ConfigView.label.queue.stoponcebandwidthmet=Start geen torrents wanneer de upload/download snelheids limit is berijkt
 ConfigView.section.style.forceMozilla=Dwing Vuze voor het gebruiken van Mozilla voor Browser inschakeling [xulrunner of firefox 3 nodig; Vuze herstarten vereist]
 ConfigView.section.style.xulRunnerPath=Specificeer de XulRunner / Firefox map handmatig [vereist voor FF3; Vuze herstart vereist]
@@ -2356,82 +2334,20 @@ Button.bar.share=Deel
 Button.bar.add=Plaats Vrienden
 Button.bar.edit=Bewerk
 Button.bar.edit.cancel=Klaar met bewerken
-v3.Share.menu=Deel de inhoud
-v3.Share.header=Deel
-v3.Share.header.message=Deel met de huidigen vrienden, of plaats nieuwen vrienden.
-v3.Share.add.buddy=Plaats Nieuwen Vrienden
-v3.Share.add.buddy.all=Deel met alle
-v3.Share.add.buddy.existing=Bestaande vrienden waar ik mee wil delen:
-v3.Share.add.buddy.new=Nieuwen vrienden die ik wil uitnodigen en mee wil delen:
-v3.Share.buddies=Vrienden
-v3.Share.invite.buddies.prompt=Inviteer meer vrienden om mee te delen.
-v3.Share.send.now=Zend
-v3.Share.optional.message=Optioneel bericht:
-v3.Share.disclaimer=Note: Bijde die je deelt, als ook het optionelen bericht zal gebruik maken van encryptie.
-v3.Share.disclaimer.link=Leer meer...
-ConfigView.section.security.vuze.login=U moet ingelogt zijn bij Vuze voor deze bewerking
-v3.buddy.menu.viewprofile=Bekijk profiel
-v3.buddy.menu.remove=Verwijder vriend
 v3.MainWindow.menu.view.pluginbar=Plugin balk
-v3.activity.buddy-request=Je hebt een vriend vezoek van %1
-v3.activity.buddy-request.accept=Accepteer
-v3.activity.buddy-request.multi=Je hebt een vriend verzoek [#%3] van %1
-v3.activity.buddy-linkup=Jij en %1 zijn nu vrienden
-v3.activity.share-content.no-msg=%1 wil met jou delen %2
-v3.buddies.count=%1 Vrienden
-v3.buddies.remove=Verwijder vriend
-v3.buddies.add.to.share=Plaats vriend voor delen
 MainWindow.dialog.select.vuze.file=Selecteer Vuze File
-azbuddy.ui.dialog.disable.title=Uitzetten vrienden Plugin
-azbuddy.ui.dialog.disable.text=Uitzetten van de vrienden plugin voorkomt dat er torrents gedeelt worden via de vrienden balk aan de onderzijde van de applicatie, en voorkomt dat je vriende lijst veranderd\n\nWeet je zeker dat je dit wilt uit zetten?
 metasearch.addtemplate.title=Installeer Zoek Template?
 metasearch.addtemplate.desc=Weet je zeker dat je de zoek template met de naam '%1' wil installeren?
 v3.share.private.title=Delen Torrent
 v3.share.private.text=De geselecteerde torrent is gemarkeerd als een prive torrent.\n\nJe kunt geen prive torrents delen.
-v3.buddies.disabled.title=Vrienden Plugin Uitgezet
-v3.buddies.disabled.text._windows=Je heb de vrienden plugin uitgeschakeld, wat inhoud dat je geen files deelt of kunt ontvangen, ook aan verzoeken van vrienden kan niet voldaan worden. Je kunt de instellingen veranderen via de optie tab.
-v3.buddies.disabled.text._mac=Je heb de vrienden plugin uitgeschakeld, wat inhoud dat je geen files deelt of kunt ontvangen, ook aan verzoeken van vrienden kan niet voldaan worden. Je kunt de instellingen veranderen via de optie tab.
 metasearch.addtemplate.dup.desc=Zoek template %1 is al geinstalleerd
 metasearch.export.select.template.file=Opslaan Template
-v3.MainWindow.button.newtag.share=Nieuw! Deel Torrent
-v3.buddies.faq=Leer meer...
 dialog.uiswitch.title=Schakel naar de Vuze UI
 dialog.uiswitch.text=Je moet de Vuze UI gebruiker om gebruik te kunnen maken van deze mogelijkheid.
 dialog.uiswitch.button=Schakel naar de Vuze UI
 azbuddy.tracker.enabled=Geef prioriteit aan vrienden met het downloaden van de zelfde inhoud
 azbuddy.protocolspeed=KB/s max vriend protocol overhead
 v3.MainWindow.button.run=Start gedownloaden file
+iconBar.queue.tooltip=Wachtrij
+MainWindow.menu.help.faq=Vaak gestelde vragen
 MainWindow.menu.help.donate=Geef een donatie !!!
-# The remaining keys were not in MessagesBundle.properties
-Progress.reporting.prompt.label.retry=Opnieuw
-Progress.reporting.prompt.label.cancel=Annuleer
-v3.TorrentOptionsView.title.short=Voorkeuren
-xmlhttp.config.option.debug.deserialisation=Input XML handeling/behandeling
-ConfigView.section.connection.advanced.IPTOS.tooltip=Stel de traffic klasse / type-of-service (TOS) in de IP header in voor uitgaande pakketjes.\nAzureus laat dit standaard niet ingesteld, dit betekend dat de standaard OS instellingen worden gebruikt.\nVoorbeeld waardes zijn:\n0x02 voor IPTOS_LOWCOST\n0x04 voor IPTOS_REALIABILITY\n0x08 voor IPTOX_TRHOUGHPUT\n0x10 voor IPTOS_LOWDELAY\nOpmerking: Onderliggende netwerk implementaties kunnen deze waardes negeren, deze optie is dus zeer afhankelijk van de OS en JRE versies.
-v3.mb.stopSeeding.text=WAARSCHUWING: Deze actie zal niet de gepubliceerde inhoud  '%1' verwijderen van <A HREF="%2">%3</A>  \n\nKlik "Verwijderen" alleen als de gepubliceerde inhoud beschikbaar moet blijven voor downloaden, maar wel bandbreedte vrij wil maken. Zorg wel dat de uploads goed afgesloten zijn voordat je deze verwerking doorvoerd. (<A HREF="%4">how</A>?).\n\nKlik "Annuleer" als je de complete gepubliceerde inhoud wil verwijderen van www.GetAzureus, en gebruik de  (X) knop op het Gepubliceerde Inhoud Paneel in de publiceer tab.\n\n<A HREF="%4">More help</A>.\n\n
-Progress.reporting.prompt.label.cancel.tooltip=Annuleer de bewerking
-v3.mb.stopSeeding.delete=&Verwijder
-xmlhttp.config.group.debug=Debug instellingen
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Toon gescheide "Hernoem"en "Nieuw doelstelling" menu in de files tab.
-v3.mb.stopSeeding.title=Stop Seeding Inhoud
-v3.ConfigView.title.full=Voorkeuren
-xmlhttp.config.option.log_to_plugin=Plugin scherm (*)
-v3.mb.stopSeeding.cancel=&Annuleer
-Progress.reporting.prompt.label.remove=Verwijder
-v3.TorrentOptionsView.title.full=Voorkeuren
-Progress.reporting.prompt.label.remove.tooltip=Verwijder dit Voortgang Raport uit de historie
-ConfigView.label.bindip.info=Als voorbeeld, '192.168.1.2' of 'eth0' (huidige: %1)
-Progress.reporting.prompt.label.detail.tooltip=Toon deze voortgang Raportage in het detail scherm
-ConfigView.section.connection.advanced.IPTOS=Uitgaande packet type-of-service (TOS) [zie http://www.azureuswiki.com/index.php/AdvancedNetworkSettings]
-network.ltep.enabled=Gebruik maken van het experimentelen extensie protocol handshake ondersteuning  (herstart vereist)
-xmlhttp.config.option.debug.serialisation=Output XML handeling/behandeling
-xmlhttp.config.group.logging=Logging 
-xmlhttp.config.option.log_to_console=Console  (*)
-xmlhttp.config.group.logging.description=Selecteer waar je de logging output naartoe wil hebben:
-v3.MainWindow.menu.view.configuration=Voorkeuren
-Progress.reporting.prompt.label.retry.tooltip=Opnieuw bewerking uitvoeren
-xmlhttp.config.option.debug.method_lookup=Methode resolutie/beslissing
-xmlhttp.config.option.debug.method_invocation=Methode invocatie/aanroeping
-ConfigView.label.announceport.tooltip=Informeer de tracker van een andere poort dan de poort waarnaar je luistert. Laat de optie leeg als je deze niet wil gebruiken.
-v3.ConfigView.title.short=Voorkeuren
-xmlhttp.config.group.debug.description=Dit onderdeel word gebruikt om meer nuttigen informatie naar de console te plaatsen.
diff --git a/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties b/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties
index aaa6f1a..a6a0826 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties
@@ -706,7 +706,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Opcja ta b\u0119dzie od
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Offset pionowy grafiki (poprawka do GTK)
 security.certtruster.title=Ostrze\u017cenie certyfikatu zabezpiecze\u0144
 security.certtruster.intro=Certyfikat bezpiecze\u0144stwa zosta\u0142 wyemitowany przez firm\u0119 nie nale\u017c\u0105c\u0105 do zaufanych
 security.certtruster.resource=Zas\u00f3b:
@@ -1877,13 +1876,8 @@ MainWindow.menu.view.iconbar=Pasek narz\u0119dzi
 MyTorrentsView.menu.rename=Zmiana nazwy
 MyTorrentsView.menu.rename.displayed=Zmie\u0144 wy\u015bwietlan\u0105 nazw\u0119
 MyTorrentsView.menu.rename.save_path=Zmie\u0144 \u015bcie\u017ck\u0119 zapisu
-MyTorrentsView.menu.rename.displayed_and_save_path=Zmie\u0144 obie
 MyTorrentsView.menu.rename.displayed.enter.title=Zmie\u0144 wy\u015bwietlan\u0105 nazw\u0119
 MyTorrentsView.menu.rename.displayed.enter.message=Wprowad\u017a now\u0105 nazw\u0119 do wy\u015bwietlenia dla tego pobierania.\nJe\u015bli nie wprowadzisz \u017cadnego tekstu, u\u017cyta zostanie oryginalna nazwa.
-MyTorrentsView.menu.rename.save_path.enter.title=Zmie\u0144 \u015bcie\u017ck\u0119 zapisu
-MyTorrentsView.menu.rename.save_path.enter.message=Wprowad\u017a now\u0105 \u015bcie\u017ck\u0119 zapisu dla tego pobierania.\nJe\u017celi nie wprowadzisz \u017cadnego tekstu, u\u017cyta zostanie wy\u015bwietlana nazwa pobrania.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Zmie\u0144 nazw\u0119 pobierania
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Wprowad\u017a now\u0105 nazw\u0119 dla tego pobierania.\nJe\u017celi nie wprowadzisz \u017cadnego tekstu, u\u017cyte zostan\u0105 oryginalne warto\u015bci.
 MyTorrentsView.menu.edit_comment=Edytuj komentarz
 MyTorrentsView.menu.edit_comment.enter.title=Edytuj komentarz
 MyTorrentsView.menu.edit_comment.enter.message=Wprowad\u017a komentarz dla tego pobierania.
@@ -2092,7 +2086,6 @@ v3.MainWindow.button.comment=Komentarz
 v3.MainWindow.button.viewdetails=Zobacz szczeg\u00f3\u0142y
 v3.MainWindow.button.play=Odtw\u00f3rz
 v3.MainWindow.button.cancel=Anuluj
-v3.MainWindow.button.sendtofriend=Udost\u0119pnij torrent
 v3.MainWindow.button.preview=Podgl\u0105d
 v3.MainWindow.view.wait=Uruchamianie widoku, prosz\u0119 czeka\u0107.
 v3.MainWindow.xofx=%1 z %2
@@ -2376,88 +2369,33 @@ Button.bar.hide=Ukryj
 Button.bar.share=Udost\u0119pnij
 Button.bar.add=Dodaj
 Button.bar.edit=Edytuj
-v3.Share.menu=Zawarto\u015b\u0107 udost\u0119pniana
-v3.Share.header=Udost\u0119pnij
-v3.Share.header.message=Udost\u0119pnij znajomym albo dodaj nowych znajomych.
-v3.Share.add.buddy=Dodaj znajomych
-v3.Share.add.edit.buddy=Dodaj/Edytuj znajomych
-v3.Share.add.buddy.all=Udost\u0119pnij wszystkim
-v3.Share.add.buddy.existing=Istniej\u0105cy znajomi:
-v3.Share.add.buddy.new=Nowi znajomi:
-v3.Share.buddies=Znajomi
-v3.Share.invitees=Zaproszeni
-v3.Share.invite.buddies.prompt=Zapro\u015b\u0107 wi\u0119cej znajomych do udost\u0119pniania z
-v3.Share.send.now=Wy\u015blij
-v3.Share.optional.message=Opcjonalna wiadomo\u015b\u0107 dostarczona przez powiadomienia (maksymalnie 140 znak\u00f3w):
-v3.Share.disclaimer=Uwaga: Zar\u00f3wno udost\u0119pniana zawarto\u015b\u0107 jak i opcjonalna wiadomo\u015b\u0107 b\u0119dzie szyfrowana.
-v3.Share.disclaimer.link=Wi\u0119cej
-ConfigView.section.security.vuze.login=Musisz by\u0107 zalogowany w Vuze, aby przeprowadzi\u0107 t\u0119 operacj\u0119
-v3.buddy.menu.viewprofile=Zobacz profil
-v3.buddy.menu.remove=Usu\u0144 znajomego
 v3.MainWindow.menu.view.pluginbar=Pasek wtyczki
-v3.MainWindow.menu.view.buddies-viewer=Pasek znajomych
-v3.activity.buddy-request=Dosta\u0142e\u015b \u017c\u0105danie od %1
-v3.activity.buddy-request.accept=Akceptuj
-v3.activity.buddy-request.multi=Dosta\u0142e\u015b \u017c\u0105danie [#%3] od %1
-v3.activity.buddy-linkup=Ty i %1 zostali\u015bcie znajomymi
-v3.activity.share-content=%1 udost\u0119pni\u0142 %2 Tobie. %3 <A HREF="%4" TITLE="%5">m\u00f3wi...</A>
-v3.activity.share-content.no-msg=%1 udost\u0119pni\u0142 %2 Tobie
-v3.buddies.friends=Znajomi
-v3.buddies.remove=Usu\u0144 znajomego
-v3.buddies.add.to.share=Dodaj znajomych do udost\u0119pniania
 MainWindow.dialog.select.vuze.file=Wybierz plik Vuze
 MainWindow.menu.file.open.vuze=Plik Vuze...
-azbuddy.ui.dialog.disable.title=Wy\u0142\u0105cz wtyczk\u0119 Znajomi
-azbuddy.ui.dialog.disable.text=Wy\u0142\u0105czenie wtyczki Znajomi zapobiegnie udost\u0119pnianiu torrent\u00f3w przez Pasek znajomych na dole aplikacji oraz modyfikowaniu listy Twoich znajomych\n\nCzy chcesz wy\u0142\u0105czy\u0107 Znajomych?
 metasearch.addtemplate.title=Zainstalowa\u0107 szablon wyszukiwania?
 metasearch.addtemplate.desc=Czy jeste\u015b pewien, \u017ce chcesz zainstalowa\u0107 szablon wyszukiwania nazwany '%1'?
 v3.share.private.title=Udost\u0119pnianie torrenty
 v3.share.private.text=Wybrany torrent jest zaznaczony jako prywatny torrent.\n\nNie mo\u017cesz udost\u0119pnia\u0107 prywatnych torrent\u00f3w.
-v3.buddies.disabled.title=Wy\u0142\u0105czona wtyczka znajomych
-v3.buddies.disabled.text._windows=Wy\u0142\u0105czy\u0142e\u015b wtyczk\u0119 znajomych, kt\u00f3ra zapobiega udost\u0119pnianiu lub akceptacji torrent\u00f3w albo \u017c\u0105da\u0144 znajomych. Mo\u017cesz zmieni\u0107 ustawienia w zak\u0142adce Opcje.
-v3.buddies.disabled.text._mac=Wy\u0142\u0105czy\u0142e\u015b wtyczk\u0119 znajomych, kt\u00f3ra zapobiega udost\u0119pnianiu lub akceptacji torrent\u00f3w albo \u017c\u0105da\u0144 znajomych. Mo\u017cesz zmieni\u0107 ustawienia w zak\u0142adce Opcje.
 metasearch.addtemplate.dup.title=Duplikat szablonu
 metasearch.addtemplate.dup.desc=Szablon wyszukiwania %1 jest ju\u017c zainstalowany
 metasearch.export.select.template.file=Zapisz szablon
 metasearch.import.select.template.file=Otw\u00f3rz szablon
-v3.MainWindow.button.newtag.share=Nowo\u015b\u0107! Udost\u0119pnij torrent
-v3.buddies.faq=Wi\u0119cej
 dialog.uiswitch.title=Prze\u0142\u0105cz do interfejsu u\u017cytkownika Vuze
 dialog.uiswitch.text=Musisz mie\u0107 uruchomiony interfejs u\u017cytkownika Vuze, aby u\u017cy\u0107 tej opcji.\n\nVuze musi by\u0107 ponownie uruchomiony.
 dialog.uiswitch.button=Prze\u0142\u0105cz do interfejsu u\u017cytkownika Vuze
 azbuddy.tracker.enabled=W\u0142\u0105cz 'Friends Boost', aby uszeregowa\u0107 pobieranie ze znajomymi
 v3.MainWindow.button.download=Pobierz
 v3.MainWindow.button.run=Uruchom pobrany plik
-v3.activity.header.friend.requests.foryou=\u017b\u0105danie od znajomego - Dla Ciebie
-v3.activity.header.friend.requests.fromyou=\u017b\u0105danie od znajomego - Od Ciebie
-v3.activity.header.friend.requests.accepted=\u017b\u0105danie od znajomego - Zaakceptowane
-v3.activity.header.share.requests=\u017b\u0105danie udost\u0119pnienia torrentu
 v3.activity.header.downloads=Pobierania
-v3.activity.header.rating.reminders=Przypomnienia o ocenie
 v3.activity.header.vuze.news=Wiadomo\u015bci Vuze
-login.optional.message=Musisz by\u0107 zarejestrowany, aby u\u017cy\u0107 tej funkcji
-message.confirm.share.singular=Wspaniale!  Twoja pro\u015bba o udost\u0119pnienie torrentu zosta\u0142a wys\u0142ana.
-message.confirm.share.plural=Wspaniale!  Twoje pro\u015bby o udost\u0119pnienie torrentu zosta\u0142y wys\u0142ane.
-message.confirm.share.invite.singular=Wspaniale!  Twoja pro\u015bba o po\u0142\u0105czenie i udost\u0119pnienie zosta\u0142a wys\u0142ana.  Przekonaj go do akceptacji.
-message.confirm.share.invite.plural=Wspaniale!  Twoje pro\u015bby o po\u0142\u0105czenie i udost\u0119pnienie zosta\u0142y wys\u0142ane.  Przekonaj go do akceptacji.
-message.confirm.invite.singular=Wspaniale!  Twoja pro\u015bba do znajomego zosta\u0142a wys\u0142ana. Przekonaj go do akceptacji.
-message.confirm.invite.plural=Wspaniale!  Twoja pro\u015bba do znajomego zosta\u0142a wys\u0142ana.  Przekonaj go do akceptacji.
-message.confirm.invite.error=Jedno lub wi\u0119cej zaprosze\u0144 zawiera\u0142o b\u0142\u0119dy.
-message.prompt.add.friends=Wybierz znajomych z paska bocznego (na dole po lewej).
 message.taking.too.long=Zajmuje to wi\u0119cej czasu ni\u017c zwykle\nNaci\u015bnij 'ESC' je\u015bli chcesz anulowa\u0107 operacj\u0119
 message.status.success=Sukces
-message.intro.friends=Dodaj znajomych.\nUdost\u0119pniaj torrenty.\nPobieraj szybciej.
 azbuddy.tracker.bbb.status.title.tooltip=Kliknij podw\u00f3jnie, aby uzyska\u0107 szczeg\u00f3\u0142y
 azbuddy.tracker.bbb.status.nli=Wymagany login
 v3.MainWindow.search.go.tooltip=Wykonaj wyszukiwanie
 v3.MainWindow.search.last.tooltip=Powr\u00f3\u0107 do wynik\u00f3w wyszukiwania
-v3.activity.buddy-invited=Wys\u0142a\u0142e\u015b \u017c\u0105danie do %1.
-v3.activity.buddy-invited.multi=Wys\u0142a\u0142e\u015b \u017c\u0105danie do nast\u0119puj\u0105cych ludzi:\n%1
 metasearch.addtemplate.done.title=Szablon dodany
 metasearch.addtemplate.done.desc=Szablon '%1' dodany prawid\u0142owo.\nB\u0119dzie u\u017cyty przy nast\u0119pnym wyszukiwaniu!
-v3.MainWindow.button.share=Udost\u0119pnij zawarto\u015b\u0107
-v3.buddies.remove.buddy.dialog.title=Usu\u0144
-v3.buddies.remove.buddy.dialog.text=Czy na pewno chcesz usun\u0105\u0107 %1 jako znajomego?
 ConfigView.section.security.nopw=Nie podano has\u0142a
 ConfigView.section.security.nopw_v=Has\u0142o niedost\u0119pne, prosz\u0119 si\u0119 zalogowa\u0107 do Vuze
 fileplugininstall.install.title=Zainstalowa\u0107 wtyczk\u0119?
@@ -2469,13 +2407,7 @@ azbuddy.os_away=Oddalony
 azbuddy.os_not_avail=Niedost\u0119pny
 azbuddy.os_busy=Zaj\u0119ty
 azbuddy.ui.menu.disconnect=Roz\u0142\u0105cz
-v3.buddy.menu.chat=Czat
-v3.chat.offline=%1 jest obecnie offline i dostanie wiadomo\u015b\u0107, kiedy b\u0119dzie online.
-v3.chat.wrongversion=%1 u\u017cywa wersji Vuze, kt\u00f3ra nie obs\u0142uguje czata.
 azbuddy.enable_chat_notif=W\u0142\u0105cz powiadomienia z czata
-v3.buddies.dnd.info.dialog.title=Udost\u0119pnij
-v3.buddies.dnd.info.dialog.text=Zainicjowa\u0142e\u015b udost\u0119pnianie. Twoja zawarto\u015b\u0107 zostaje przygotowana do udost\u0119pniania, a okno udost\u0119pniania zostanie otwarte, gdy zawarto\u015b\u0107 b\u0119dzie gotowa.\n\nMusisz mie\u0107 ca\u0142y czas uruchomiony Vuze, \u017ceby Tw\u00f3j znajomy m\u00f3g\u0142 odebra\u0107 zawarto\u015b\u0107.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Kliknij tutaj</A> ,aby dowiedzi\u0119c si\u0119 wi\u0119cej o tej funkcji.
-v3.buddies.dnd.info.dialog.remember=Nie pokazuj wi\u0119cej tej wiadomo\u015bci
 progress.window.msg.progress=Prosz\u0119 czeka\u0107 na uko\u0144czenie operacji
 ConfigView.section.connection.advanced.read_select=Odczyt wybranego  czasu oczekiwania (milisekundy, domy\u015blnie %1)
 ConfigView.section.connection.advanced.read_select_min=Odczyt wybraneego minimalnego oczekiwania (milisekundy, domy\u015blnie %1)
@@ -2528,24 +2460,17 @@ PluginDeprecation.view=Debugowanie wtyczki
 PluginDeprecation.alert=Wtyczka pr\u00f3buje u\u017cywa\u0107 funkcjonalno\u015bci, kt\u00f3ra b\u0119dzie usuni\u0119ta w przysz\u0142o\u015bci - otw\u00f3rz widok logu debugowania wtyczki po wi\u0119cej informacji.
 TableColumn.header.Thumbnail=Ikona
 TableColumn.header.Thumbnail.info=Obrazek dla zawarto\u015bci Vuze; dla innych system operacyjny wprowadzi te ikony.
-TableColumn.header.Rating_global=Wska\u017anik
-TableColumn.header.Rating_global.info=Ca\u0142kowity wska\u017anik dla tej zawarto\u015bci
 v3.MainWindow.menu.getting_started=&Rozpocznij
 MainWindow.menu.community=&Spo\u0142eczno\u015b\u0107
 MainWindow.menu.help.faq=FAQ
 MainWindow.menu.community.wiki=Spo\u0142eczno\u015b\u0107 &Wiki
 MainWindow.menu.community.forums=Fo&rum spo\u0142eczno\u015bciowe
-MainWindow.menu.community.add_friends=&Dodaj znajomych
 MainWindow.menu.help.support=&Pomoc i wsparcie
 externalLogin.title=Wymagany login
 externalLogin.explanation=Szablon "%1" wymaga zalogowania. Gdy si\u0119 zalogujesz, to okno automatycznie si\u0119 zamknie. Je\u015bli nie to zamknij je klikaj\u0105c w "wykonano".
 externalLogin.explanation.capture=Musisz si\u0119 zalogowa\u0107, \u017ceby utworzy\u0107 ten szablon. Je\u015bli ju\u017c b\u0119dziesz, kliknij w "Wykonano".
 Button.done=Wykonano
 GeneralView.torrent_created_on_and_by=%1 przez %2
-v3.Share.wizard.title=Udost\u0119pnij -- Kreator
-v3.AddFriends.header.message=Dodaj znajomych, \u017ceby uruchomi\u0107 udost\u0119pnianie swoich ulubionych torrent\u00f3w
-v3.AddFriends.header=Dodaj znajomych
-v3.AddFriends.wizard.title=Dodaj znajomych -- Kreator
 Button.continue=Kontynuuj
 Button.preview=Podgl\u0105d
 Subscription.menu.forcecheck=Uaktualnij teraz
@@ -2556,9 +2481,6 @@ sidebar.LibraryDL=Pobierane
 sidebar.LibraryCD=Uko\u0144czono
 authenticator.location=Lokalizacja
 authenticator.details=Szczeg\u00f3\u0142y
-v3.MainWindow.menu.publish.new=Publikuj now\u0105 zawarto\u015b\u0107
-v3.MainWindow.menu.publish.mine=Twoja opublikowana zawarto\u015b\u0107
-v3.MainWindow.menu.publish.about=O publikowaniu...
 v3.MainWindow.menu.showActionBarText=Poka\u017c Tekst
 subscript.import.fail.title=Nieudany import
 subscript.import.fail.desc=Szczeg\u00f3\u0142y: %1
@@ -2575,13 +2497,11 @@ Subscription.menu.reset=Resetuj do stanu pocz\u0105tkowego
 ConfigView.section.Subscriptions=Subskrypcje
 subscriptions.config.maxresults=Maksymalna ilo\u015b\u0107 wynik\u00f3w przypisanych do subskrypcji [0: nieograniczona]
 v3.activity.button.readall=Zaznacz wszystkie przeczytanie
-ConfigView.interface.start.library=Uruchom z biblioteki
 TableColumn.header.activityNew=Nowy
 TableColumn.header.activityType=Typ
 TableColumn.header.activityText=Wiadomo\u015b\u0107
 TableColumn.header.activityDate=Data dodania
 TableColumn.header.activityActions=Akcje
-TableColumn.header.activityAvatar=Awatar
 Subscription.menu.resetauth=Resetuj szczeg\u00f3\u0142y uwierzytelnienia
 Search.menu.engines=Szablony
 Wizard.Subscription.title=Subskrybuj
@@ -2607,8 +2527,6 @@ Wizard.Subscription.rss.subtitle3=Po zapisaniu, b\u0119dziesz otrzymywa\u0142 ak
 Wizard.Subscription.subscribe.library=Zawarto\u015b\u0107 Twojej biblioteki
 Wizard.Subscription.subscribe.subscriptions=Powi\u0105zane subskrypcje
 Wizard.Subscription.subscribe.library.empty=Brak dost\u0119pnych subskrypcji?\n \nSp\u00f3jrz na jasno pomara\u0144czony przycisk subskrypcji w Sie\u0107 Vuze HD.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Wi\u0119cej</A>
-TableColumn.header.Info=Informacja
-TableColumn.header.videoLength=D\u0142ugo\u015b\u0107 wideo
 message.confirm.delete.title=Potwierd\u017a usuni\u0119cie
 message.confirm.delete.text=Czy na pewno chcesz usun\u0105\u0107 '%1'?
 Subscription.menu.properties=W\u0142a\u015bciwo\u015bci
@@ -2659,8 +2577,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Zwi\u0105zej z subskrybcjami
 Button.deleteContent.fromLibrary=Usu\u0144 z biblioteki
 Button.deleteContent.fromComputer=Usu\u0144 z komputera
 v3.deleteContent.message=\nCzy chcia\u0142by\u015b usun\u0105\u0107 '%1' z komputera czy tylko z biblioteki Vuze?
-v3.library.infobar.text1=Szukasz widoku zaawansowanego?
-v3.library.infobar.text2=U\u017cyj prze\u0142\u0105cznika Widok w pasku narz\u0119dziowym powy\u017cej.
 v3.MainWindow.menu.view.toolbartext=Tekst pod paskiem narz\u0119dziowym
 v3.MainWindow.menu.view.asSimpleList=Prosta lista
 v3.MainWindow.menu.view.asAdvancedList=Zaawansowana lista
@@ -2683,15 +2599,6 @@ azbuddy.ui.menu.cat=Kategorie
 azbuddy.ui.menu.cat.share=W\u0142\u0105cz subskrypcje ze znajomym(i)
 azbuddy.ui.menu.cat.set_msg=Lista kategorii oddzielona przecinkami lub 'Wszyscy'
 azbuddy.ui.menu.cat_subs=Subskrybuj
-v3.buddy.prop.dn=Nazwa wy\u015bwietlana
-v3.buddy.prop.un=Nazwa u\u017cytkownika
-v3.buddy.prop.lupd=Ostanio zaktualizowane
-v3.buddy.prop.pks=Liczba publicznego klucza
-v3.buddy.prop.pc=Oczekuj\u0105ce wiadomo\u015bci z czata
-v3.buddy.prop.catout=Twoje kategorie, kt\u00f3re znajomy mo\u017ce subskrybowa\u0107
-v3.buddy.prop.catin=Kategorie znajomego zosta\u0142y Tobie przedstawione
-v3.buddy.set.catout=Pozw\u00f3l znajomemu na subskcrypcj\u0119 kategorii
-v3.buddy.set.catin=Subskrybuj kategori\u0119 znajomego
 subs.prop.update_period=Cykl aktualizacji
 azbuddy.enable_cat_pub=Publiczne kategorie, kt\u00f3re WSZYSCY Twoi znajomi mog\u0105 subskrybowa\u0107 (',' separated) 
 v3.dialog.cnclose.title=%1 zamkni\u0119tych
@@ -2706,12 +2613,9 @@ TableColumn.header.category.info=Nazwa kategorii, do kt\u00f3rej nale\u017cy tor
 TableColumn.header.DateCompleted.info=Data, kiedy pobranie torrenta zosta\u0142a uko\u0144czona
 TableColumn.header.AzProduct.info=Zawarto\u015b\u0107 sieci, z kt\u00f3rej torrent zosta\u0142 zapocz\u0105tkowany
 TableColumn.header.health.info=Kondycja Twojego po\u0142\u0105czenia swarm torrent\u00f3w jest 
-TableColumn.header.Info.info=Przycisk, kt\u00f3ry uruchamia szczeg\u00f3\u0142y strony zawarto\u015bci Vuze
 TableColumn.header.maxuploads.info=Maksimum # peer\u00f3w jednocze\u015bnie wysy\u0142aj\u0105cych do
 TableColumn.header.name.info=Nazwa torrentu
 TableColumn.header.unopened.info=Flaga dotycz\u0105ca, kiedy torrent by\u0142 odtwarzany (otworzony)
-TableColumn.header.Quality.info=Jako\u015b\u0107 zawarto\u015bci vuze, takie jak HD, SD
-TableColumn.header.RateIt.info=Zdolno\u015b\u0107 do oceny zawarto\u015bci vuze
 TableColumn.header.savepath.info=Folder docelowy lub plik dla danych torrentowych
 TableColumn.header.SeedingRank.info=Warto\u015b\u0107 rankingu, w kt\u00f3rym wida\u0107 jak bardzo torrent potrzebuje seedowania. Wy\u017csza warto\u015b\u0107 oznacza wy\u017csz\u0105 potrzeb\u0119.
 TableColumn.header.shareRatio.info=Jak du\u017co wysy\u0142a\u0142e\u015b (udost\u0119pnia\u0142es) w por\u00f3wnaniu do pobierania.
@@ -2721,7 +2625,6 @@ TableColumn.header.upspeed.info=Obecna pr\u0119dko\u015b\u0107 wysy\u0142ania
 TableColumn.header.downspeed.info=Obecna pr\u0119dko\u015b\u0107 pobierania
 TableColumn.header.up.info=Obecna ilo\u015b\u0107 danych wys\u0142anych do innych u\u017cytkownik\u00f3w
 TableColumn.header.down.info=Obecna ilo\u015b\u0107 danych otrzymanych od innych u\u017cytkownik\u00f3w
-TableColumn.header.videoLength.info=Odtw\u00f3rz czas zawarto\u015bci vuze wideo
 TableColumn.header.ProgressETA.info=Powi\u0105zany Status, uko\u0144czonych, szacunkowy czas i kolumny pr\u0119dko\u015bci pobierania w jednej kolumnie.
 TableColumn.header.eta.info=Szacowany czas w kt\u00f3rym torrent b\u0119dzie pobrany
 Pieces.column.#.info=Numer cz\u0119\u015bci
diff --git a/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties b/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties
index 9e51006..60c59a8 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties
@@ -326,7 +326,6 @@ ConfigView.section.downloadManagement=Gerenciamento de Download
 ConfigView.label.startRatioPeers=Come\u00e7ar a ficar de seed quando houver menos de 1 seed para
 ConfigView.text.neverStop=Nunca Parar
 ConfigView.text.neverStart=Nunca Iniciar 
-ConfigView.text.peers=Peers
 ConfigView.label.checkOncompletion=Verificar novamente os peda\u00e7os quando o download for conclu\u00eddo
 wizard.title=Criar um torrent 
 wizard.previous=< Voltar 
@@ -377,7 +376,6 @@ seedmore.shareratio=Sua propor\u00e7\u00e3o de compartilhamento neste torrent \u
 seedmore.uploadmore=Ter uma propor\u00e7\u00e3o de compartilhamento inferior a 100% n\u00e3o \u00e9 uma boa coisa para a rede BitTorrent.\nVoc\u00ea deveria deixar este torrente ficar de seed um pouco mais.\nVoc\u00ea tem certeza que voc\u00ea quer prosseguir?
 ConfigView.label.showpopuponclose=Mostrar janela de confirma\u00e7\u00e3o quando parar de ficar de seed com uma propor\u00e7\u00e3o de compartilhamento menor que 1
 ConfigView.label.startNumSeeds=\nCome\u00e7ar a ficar de seed se houver menos de\n - N\u00e3o leva em conta todas as outras regras
-ConfigView.label.seeds=seeds
 ConfigView.section.seeding=Ficar de seed
 MyTorrentsView.menu.removeand=Remo&ver e 
 MyTorrentsView.menu.removeand.deletetorrent=Apagar &Arquivo Torrent 
@@ -719,7 +717,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Esta op\u00e7\u00e3o at
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Deslocamento Gr\u00e1fico Vertical (reparar GTK)
 security.certtruster.title=Alerta do Certificado de Seguran\u00e7a
 security.certtruster.intro=O certificado de seguran\u00e7a foi emitido por uma empresa na qual voc\u00ea n\u00e3o confia
 security.certtruster.resource=Recurso:
@@ -850,7 +847,6 @@ ConfigView.section.queue.seeding.ignore=Ignorar Regras
 ConfigView.section.queue.seeding.firstPriority=Primeira Prioridade
 ConfigView.section.queue.main=Principal
 ConfigView.section.queue=Filas
-ConfigView.section.torrents=Torrents
 ConfigView.text.all=todos
 ConfigView.text.hours=horas
 ConfigView.text.ignoreRule=Ignorar Regra
@@ -975,7 +971,6 @@ GenericText.column=coluna
 MyTorrentsView.menu.thisColumn.remove=Remover Coluna
 MyTorrentsView.menu.thisColumn.toClipboard=Copiar o Texto para a \u00c1rea de Transfer\u00eancia
 MyTorrentsView.menu.thisColumn.autoTooltip=Sempre exibir dicas
-ConfigView.upload.abbreviated=U:
 TableColumn.header.secondsseeding=Fazendo Seed Por
 TableColumn.header.secondsseeding.info=Quantia total de tempo que voc\u00ea esteve fazendo see.
 TableColumn.header.secondsdownloading=Baixando Para
@@ -1031,7 +1026,6 @@ plugins.basicview.log=Registro:
 ConfigView.label.maxdownloadspeed=Velocidade m\u00e1xima global de download em KB/s [0: ilimitada]
 splash.loadingTorrent=Carregando Torrent
 splash.of=de
-ConfigView.section.plugins.irc=IRC
 UpdateWindow.title=Atualizador do Vuze
 UpdateWindow.header=Os seguintes componentes precisam de uma atualiza\u00e7\u00e3o :
 UpdateWindow.columns.install=Instalar
@@ -1108,7 +1102,6 @@ Security.keystore.corrupt=Keystore '%1' falhou ao carregar, por favor apague-a e
 Security.keystore.empty=O keystore est\u00e1 vazio. Por favor, crie um certificado auto-assinado (veja Ferramentas->Op\u00e7\u00f5es->Seguran\u00e7a) ou importe um certificado existente para '%1'
 webui.restart.info=Altera\u00e7\u00f5es nos par\u00e2metros marcados com um (*) requerem reiniciar para terem efeito
 GeneralView.label.maxdownloadspeed.tooltip=Velocidade M\u00e1xima de Download [0: ilimitada]
-ConfigView.section.UPnP=UPnP
 upnp.enable=Ativar UPnP
 upnp.info=Universal Plug and Play (UPnP) permite o mapeamento autom\u00e1tico de portas nos roteadores com UPnP ativado.
 upnp.mapping.dataport=Porta de Entrada dos Dados do Peer
@@ -1473,7 +1466,6 @@ DHTView.operations.findNode=Achar Node
 DHTView.operations.findValue=Achar Valor
 DHTView.operations.store=Armazenar
 DHTView.activity.title=Atividade
-DHTView.activity.status=Status
 DHTView.activity.status.true=Requisitado
 DHTView.activity.status.false=Rodando
 DHTView.activity.type=Tipo
@@ -1488,7 +1480,6 @@ DHTView.db.keys=Teclas
 DHTView.db.values=Valores
 DHTView.db.direct=Direto
 DHTView.db.indirect=Indireto
-DHTView.db.divfreq=Freq. Div.
 DHTView.db.divsize=Tamanho Div
 MainWindow.dht.status.tooltip=Quando a Base de Dados Distribu\u00edda est\u00e1 rodando isto mostra o n\u00ba estimado de usu\u00e1rios atualmente online
 MainWindow.dht.status.disabled=DHT Desativado
@@ -1692,7 +1683,6 @@ Plugin.localtracker.name=Descobridor de Peers em LAN
 Plugin.localtracker.info=O descobridor de peers na LAN permite m\u00faltiplas c\u00f3pias do Vuze atr\u00e1s de um firewall e em uma rede comum para baixar com efici\u00eancia torrents ativando a conex\u00e3o direta entre eles
 Plugin.localtracker.enable=Ativar o descobridor de peers na LAN
 azinstancehandler.alert.portclash=Conflito de portas detectado na LAN: %1 j\u00e1 em uso por outro usu\u00e1rio do Vuze, selecione nova(s) porta(s) aleat\u00f3ria(s) para a escuta TCP  / UDP de entrada [entre %2 e %3]. 
-ConfigView.section.transfer.lan=LAN
 ConfigView.section.transfer.lan.tooltip=Configura\u00e7\u00f5es espec\u00edficias-pra-LAN
 ConfigView.section.transfer.lan.uploadrate=Velocidade m\u00e1xima de upload na LAN em KB/s [0: ilimitada]
 ConfigView.section.transfer.lan.uploadrate.tooltip=Conex\u00f5es com os peers dentro da mesma LAN interna tem um limite de taxa de upload separado.
@@ -1842,7 +1832,6 @@ ConfigView.section.proxy.username.info=Se o servidor proxy exige autentica\u00e7
 ConfigView.label.maxuploadswhenbusymin=Velocidade m\u00e1xima de upload por torrent quando o timer est\u00e1 ocupado [seg]
 MainWindow.menu.help.debug=Gerar Info de Debug (Crash Log)
 DownloadManager.error.badsize=Tamanho incorreto
-ConfigView.section.NATPMP=NAT-PMP
 natpmp.info=NAT-PMP \u00e9 a alternativa da Apple para o UPnP e \u00e9 suportada por recentes esta\u00e7\u00f5es de aeroportos\n\nNote que o UPnP tem que estar ativado para ativar o NAT-PMP ja que o dispositivo NAT-PMP \u00e9 tratado como um tipo de dispositivo UPnP especial
 natpmp.enable=Ativar (note que deve tamb\u00e9m estar ativado na configura\u00e7\u00e3o do aeroporto para funcionar)
 ConfigView.section.tracker.host.addurls=Garante que as URLs do tracker est\u00e3o presentes nos torrents hospedados
@@ -1889,13 +1878,8 @@ MainWindow.menu.view.iconbar=Barra de Ferramentas
 MyTorrentsView.menu.rename=Renomear
 MyTorrentsView.menu.rename.displayed=Renomear o Nome Exibido
 MyTorrentsView.menu.rename.save_path=Renomearo Caminho para Salvar
-MyTorrentsView.menu.rename.displayed_and_save_path=Renomear Ambos
 MyTorrentsView.menu.rename.displayed.enter.title=Renomear o Nome Exibido 
 MyTorrentsView.menu.rename.displayed.enter.message=Inserir um novo nome para exibir para este download.\nSe nenhum texto \u00e9 inserido, o nome original ser\u00e1 usado.
-MyTorrentsView.menu.rename.save_path.enter.title=Renomear o Caminho para Salvar 
-MyTorrentsView.menu.rename.save_path.enter.message=Inserir um novo nome do caminho para salvar para este download.\nSe nenhum texto \u00e9 inseriod, o nome do download exibido ser\u00e1 usado.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Renomear Download 
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Insira um novo nome para este download.\nSe nenhum texto \u00e9 inserido, os valores originais ser\u00e3o usados.
 MyTorrentsView.menu.edit_comment=Editar Coment\u00e1rio
 MyTorrentsView.menu.edit_comment.enter.title=Editar Coment\u00e1rio
 MyTorrentsView.menu.edit_comment.enter.message=Inserir um coment\u00e1rio para este download.
@@ -1945,7 +1929,6 @@ ConfigView.label.pause.downloads.on.exit=Pausar downloads ao sair
 ConfigView.label.resume.downloads.on.start=Resumir downloads pausados ao iniciar ap\u00f3s a inicializa\u00e7\u00e3o completar
 UIDebugGenerator.message.cancel.title=Gerar Info de Debug Info Cancelado
 UIDebugGenerator.message.cancel.text=Voc\u00ea n\u00e3o inseriu uma descri\u00e7\u00e3o do bug que voc\u00ea est\u00e1 tentando reportar.  O seu bug pode ser \u00f3bvio pra voc\u00ea, mas sem uma descri\u00e7\u00e3o, n\u00f3s s\u00f3 estar\u00edamos tentando advinhar o seu problema.\n\nA Gera\u00e7\u00e3o de Informa\u00e7\u00e3o sobre o Debug foi cancelada.
-ConfigView.section.connection.group.http=HTTP
 ConfigView.section.connection.group.http.info=Suporte para seeding HTTP.
 ConfigView.section.connection.http.enable=Ativar
 ConfigView.section.connection.http.port=N\u00famero da porta de entrada
@@ -2084,7 +2067,6 @@ TableColumn.header.ProgressETA=Progresso
 #TableColumn.header.name={MyTorrentsView.name}
 TableColumn.header.name.ext=Tipo de Arquivo: %1
 #TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
-TableColumn.header.DateCompleted={TableColumn.header.date_completed}
 v3.MainWindow.tab.browse=No Vuze
 v3.MainWindow.tab.library=Biblioteca
 v3.MainWindow.tab.publish=Publicar
@@ -2105,7 +2087,6 @@ v3.MainWindow.button.comment=Comentar
 v3.MainWindow.button.viewdetails=Ver Detalhes
 v3.MainWindow.button.play=Tocar
 v3.MainWindow.button.cancel=Cancelar
-v3.MainWindow.button.sendtofriend=Compartilhar
 v3.MainWindow.button.preview=Pr\u00e9-visualiza\u00e7\u00e3o
 v3.MainWindow.view.wait=Inicializando a visualiza\u00e7\u00e3o, por favor espere.
 v3.MainWindow.xofx=%1 de %2
@@ -2388,7 +2369,6 @@ v3.MainWindow.menu.view.footer=Barra dos Amigos
 azbuddy.downspeed=M\u00e1x da velocidade de download em KB/s do amigo [0: ilimitada]
 security.crypto.badpw=A senha suprima estava incorreta
 ConfigView.section.security.backupkeys=Fazer backup das chave em um arquivo
-ConfigView.section.security.backupkeys.button=Backup
 ConfigView.section.security.restorekeys=Restaurar as chaves de um arquivo
 ConfigView.section.security.restorekeys.button=Restaurar
 ConfigView.section.security.op.error.title=A Opera\u00e7\u00e3o Falhou
@@ -2405,76 +2385,26 @@ Button.bar.share=Compartilhar
 Button.bar.add=Adicionar Amigos
 Button.bar.edit=Editar
 Button.bar.edit.cancel=Edi\u00e7\u00e3o Feita
-v3.Share.menu=Compartilhar o conte\u00fado
-v3.Share.header=Compartilhar
-v3.Share.header.message=Compartilhar com os Amigos atuais, ou adicionar novos Amigos.
-v3.Share.add.buddy=Adicionar Amigos
-v3.Share.add.edit.buddy=Adicionar/Editar Amigos
-v3.Share.add.buddy.all=Compartilhar com todos
-v3.Share.add.buddy.existing=Amigos Existentes
-v3.Share.add.buddy.new=Novos Amigos:
-v3.Share.buddies=Amigos
-v3.Share.invitees=Convidados
-v3.Share.invite.buddies.prompt=Convidar mais amigos para compartilhar
-v3.Share.send.now=Enviar
-v3.Share.optional.message=Mensagem opcional entregue via Feed da Atividade (m\u00e1ximo de 140 caracteres):
-v3.Share.disclaimer=Nota: Ambos o conte\u00fado que voc\u00ea compartilha assim como esta mensagem opcional ser\u00e3o encriptados.
-v3.Share.disclaimer.link=Leia mais
-ConfigView.section.security.vuze.login=Voc\u00ea deve estar logado no Vuze para realizar esta opera\u00e7\u00e3o
-v3.buddy.menu.viewprofile=Visualizar o Perfil
-v3.buddy.menu.remove=Remover o Amigo
 v3.MainWindow.menu.view.pluginbar=Barra dos Plugins
-v3.MainWindow.menu.view.buddies-viewer=Barra dos Amigos
-v3.activity.buddy-request=Voc\u00ea tem um pedido de um amigo de %1\n\n<A HREF="%2" TARGET="minibrowse">ACEITAR</A>
-v3.activity.buddy-request.accept=Aceitar
-v3.activity.buddy-request.multi=Voc\u00ea tem um pedido de um amigo [#%3] de %1\n\n<A HREF="%2" TARGET="minibrowse">ACEITAR</A>
-v3.activity.buddy-linkup=Voc\u00ea e %1 agora s\u00e3o amigos
-v3.activity.share-content=%1 compartilhou %2 com voc\u00ea\n\nMensagem de %3:\n%4
-v3.activity.share-content.no-msg=%1 compartilhou %2 com voc\u00ea
-v3.buddies.friends=Amigos
-v3.buddies.remove=Remover o amigo
-v3.buddies.add.to.share=Adicionar amigo para Compartilhar
 MainWindow.dialog.select.vuze.file=Selecionar o Arquivo do Vuze
 MainWindow.menu.file.open.vuze=Arquivo do Vuze...
-azbuddy.ui.dialog.disable.title=Desativar o Plugin dos Amigos
-azbuddy.ui.dialog.disable.text=Desativar o plugin dos Amigos impedir\u00e1 voc\u00ea de compartilhar os torrents via a Barra dos Amigos no fundo do aplicativo, e impede voc\u00ea de modificar a sua lista de amigos\n\nVoc\u00ea tem certeza que voc\u00ea quer desativar os Amigos?
 metasearch.addtemplate.title=Instalar o Modelo de Busca?
 metasearch.addtemplate.desc=Voc\u00ea tem certeza que voc\u00ea quer instalar um modelo de busca chamdo '%1'?
 v3.share.private.title=Compartilhando o Torrent
 v3.share.private.text=O torrent selecionado est\u00e1 marcado como Torrent Privado.\n\nVoc\u00ea n\u00e3o pode compartilhar torrents privados.
-v3.buddies.disabled.title=Plugin dos Amigos Desativado
-v3.buddies.disabled.text._windows=Voc\u00ea desativou o plugin dos amigos, o que impedir\u00e1 voc\u00ea de compartilhar ou aceitar torrents ou pedidos de amigos. Voc\u00ea pode mudar suas configura\u00e7\u00f5es na aba das Op\u00e7\u00f5es.
-v3.buddies.disabled.text._mac=Voc\u00ea desativou o plugin dos amigos, o que impedir\u00e1 voc\u00ea de compartilhar ou aceitar torrents ou pedidos de amigos. Voc\u00ea pode mudar suas configura\u00e7\u00f5es na aba das Op\u00e7\u00f5es.
 metasearch.addtemplate.dup.title=Modelo Duplicado
 metasearch.addtemplate.dup.desc=O modelo de busca %1 j\u00e1 est\u00e1 instalado
 metasearch.export.select.template.file=Salvar o Modelo
 metasearch.import.select.template.file=Abrir o Modelo
-v3.MainWindow.button.newtag.share=Novo! Compartilhar o Torrent
-v3.buddies.faq=Leia mais
 dialog.uiswitch.title=Trocar para a IU do Vuze
 dialog.uiswitch.text=Voc\u00ea precisa estar executando a IU do Vuze para usar esta fun\u00e7\u00e3o.\n\nO Vuze precisar\u00e1 reiniciar.
 dialog.uiswitch.button=Trocar para a IU do Vuze
 azbuddy.tracker.enabled=Ativar a 'Acelera\u00e7\u00e3o do Amigo' para priorizar o download com seus amigos
 azbuddy.protocolspeed=Eleva\u00e7\u00e3o m\u00e1xima do protocolo em KB/s do amigo
 v3.MainWindow.button.run=Executar o Arquivo Baixado
-v3.activity.header.friend.requests.foryou=Pedidos do Amigo - Para Voc\u00ea
-v3.activity.header.friend.requests.fromyou=Pedidos do Amigo - De Voc\u00ea
-v3.activity.header.friend.requests.accepted=Pedidos do Amigo - Aceito
-v3.activity.header.share.requests=Compartilhar os Pedidos dos Torrents
-v3.activity.header.rating.reminders=Classificando os Lembretes
 v3.activity.header.vuze.news=Not\u00edcias do Vuze
-login.optional.message=Voc\u00ea deve estar logado para usar esta fun\u00e7\u00e3o
-message.confirm.share.singular=Excelente!  Seu pedido para compartilhar um torrent foi enviado.
-message.confirm.share.plural=Excelente!  Seu pedidos para compartilhar um torrent foram enviados.
-message.confirm.share.invite.singular=Excelente!  Seu pedido para conectar e compartilhar foi enviado. Sinta-se livre para gentilmente conversar com seu amigo para aceitar.
-message.confirm.share.invite.plural=Excelente!  Seu pedidos para conectar e compartilhar foram enviados. Sinta-se livre para gentilmente conversar com seu amigo para aceitar.
-message.confirm.invite.singular=Excelente!  Seu pedido para seu amigo foi enviado. Sinta-se livre para gentilmente conversar com seu amigo para aceitar.
-message.confirm.invite.plural=Excelente!  Your Friend requests have been sent.  Feel free to gently coax your friends to accept.
-message.confirm.invite.error=Doh!  Alguns arames se cruzaram neste pedido.  Um ou mais dos seus convites tiveram erros.
-message.prompt.add.friends=Clique nos \u00edcones dos amigos no fundo da p\u00e1gina para compartilhar
 message.taking.too.long=Aparenta que isto est\u00e1 tomando mais tempo do que o esperado\nPressione 'ESC' se voc\u00ea deseja cancelar esta opera\u00e7\u00e3o
 message.status.success=Sucesso
-message.intro.friends=Adicionar Amigos. Compartilhar Torrents. Baixar Mais R\u00e1pido.
 azbuddy.tracker.bbb.status.title=Acelera\u00e7\u00e3o do Amigo
 azbuddy.tracker.bbb.status.title.tooltip=Clique duplo para detalhes
 azbuddy.tracker.bbb.status.idle=Sem acelera\u00e7\u00e3o
@@ -2483,13 +2413,8 @@ azbuddy.tracker.bbb.status.in=Eu Estou Sendo Acelerado
 azbuddy.tracker.bbb.status.out=Atualmente Acelerando os Amigos
 v3.MainWindow.search.go.tooltip=Executar a Busca
 v3.MainWindow.search.last.tooltip=Retornar para os resultados da busca
-v3.activity.buddy-invited=Voc\u00ea enviou um pedido de Amigo para %1.
-v3.activity.buddy-invited.multi=Voc\u00ea enviou um pedido de Amigo para as seguintes pessoas:\n%1
 metasearch.addtemplate.done.title=Modelo Adicionado
 metasearch.addtemplate.done.desc=Modelo '%1' adicionado com sucesso.\nEle ser\u00e1 usado quando voc\u00ea fizer a pr\u00f3xima busca!
-v3.MainWindow.button.share=Compartilhar o Conte\u00fado
-v3.buddies.remove.buddy.dialog.title=Apagar a Confirma\u00e7\u00e3o do Amigo
-v3.buddies.remove.buddy.dialog.text=Voc\u00ea quer realmente apagar %1 como um Amigo?
 ConfigView.section.security.nopw=Nenhuma senha foi fornecida
 ConfigView.section.security.nopw_v=Nenhuma senha dispon\u00edvel, por favor logue no Vuze
 fileplugininstall.install.title=Instalar o Plugin?
@@ -2501,12 +2426,7 @@ azbuddy.os_away=Distante
 azbuddy.os_not_avail=N\u00e3o Dispon\u00edvel
 azbuddy.os_busy=Ocupado
 azbuddy.ui.menu.disconnect=Desconectar
-v3.chat.offline=%1 est\u00e1 atualmente offline e receber\u00e1 sua mensagem uma vez de volta online.
-v3.chat.wrongversion=%1 est\u00e1 usando uma vers\u00e3o do Vuze a qual n\u00e3o suporta o Chat.
 azbuddy.enable_chat_notif=Ativar as notifica\u00e7\u00f5es do chat
-v3.buddies.dnd.info.dialog.title=Queda no Compartilhamento
-v3.buddies.dnd.info.dialog.text=Voc\u00ea iniciou um Drop Share.Seu conte\u00fado est\u00e1 sendo preparado para compartilhar, e a tela do compartilhamento abrir\u00e1 uma vez que seu conte\u00fado est\u00e1 pronto.\n\nVoc\u00ea tem que manter o Vuze rodando para seu Amigo receber o conte\u00fado.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Click here</A> para obter mais informa\u00e7\u00e3o sobre esta fun\u00e7\u00e3o.
-v3.buddies.dnd.info.dialog.remember=N\u00e3o mostrar esta mensagem de novo
 progress.window.msg.progress=Por favor espere enquanto a opera\u00e7\u00e3o completa
 ConfigView.section.connection.advanced.read_select=Ler o tempo pra encerrar selecionado (milis, padr\u00e3o %1)
 ConfigView.section.connection.advanced.read_select_min=Ler a espera m\u00ednima selecionada (milis, padr\u00e3o %1)
@@ -2562,25 +2482,18 @@ PluginDeprecation.view=Debug do Plugin
 PluginDeprecation.alert=Um plugin tentou usar uma funcionalidade a qual ser\u00e1 removida no futuro - por favor abra a visualiza\u00e7\u00e3o do Log do Debug do Plugin para mais informa\u00e7\u00e3o.
 TableColumn.header.Thumbnail=\u00cdcone
 TableColumn.header.Thumbnail.info=A imagem do thumbnail para o conte\u00fado do Vuze; para todos os outros conte\u00fados o sistema operacional est\u00e1 fornecendo estes \u00edcones.
-TableColumn.header.Rating_global=Classifica\u00e7\u00e3o
-TableColumn.header.Rating_global.info=A classifica\u00e7\u00e3o global para este conte\u00fado
 v3.MainWindow.menu.getting_started=&Sendo Iniciado
 MainWindow.menu.community=&Comunidade
 MainWindow.menu.help.faq=&Perguntas Feitas Frequentemente
 MainWindow.menu.community.wiki=Wiki da &Comunidade
 MainWindow.menu.community.forums=F\u00f3runs da Co&munidade
 MainWindow.menu.community.blog=Blog do &Vuze
-MainWindow.menu.community.add_friends=&Adicionar Amigos
 MainWindow.menu.help.support=&Ajuda e Suporte
 externalLogin.title=Login Requerido
 externalLogin.explanation=O modelo "%1" requer que voc\u00ea logue. Uma vez logado esta janela automaticamente fechar\u00e1. Se ela n\u00e3o fechar por favor clique em "feito".
 externalLogin.explanation.capture=Voc\u00ea precisa logar para criar este modelo. Uma vez que voc\u00ea est\u00e1, por favor clique em "Feito".
 Button.done=Feito
 GeneralView.torrent_created_on_and_by=%1 por %2
-v3.Share.wizard.title=Compartilhar -- Assistente
-v3.AddFriends.header.message=Adicionar amigos pra come\u00e7ar a compartilhar seus torrents favoritos
-v3.AddFriends.header=Adicionar Amigos
-v3.AddFriends.wizard.title=Adicionar Amigos -- Assistente
 Button.continue=Continuar
 Button.preview=Pr\u00e9-visualizar
 Subscription.menu.forcecheck=Atualizar Agora
@@ -2591,9 +2504,6 @@ sidebar.LibraryDL=Baixando
 sidebar.LibraryCD=Completados
 authenticator.location=Local
 authenticator.details=Detalhes
-v3.MainWindow.menu.publish.new=Publicar Novo Conte\u00fado
-v3.MainWindow.menu.publish.mine=Seu Conte\u00fado Publicado
-v3.MainWindow.menu.publish.about=Sobre a Edi\u00e7\u00e3o...
 v3.MainWindow.menu.showActionBarText=Mostrar o Texto
 subscript.import.fail.title=Falhou em Importar
 subscript.import.fail.desc=Detalhes: %1
@@ -2610,7 +2520,6 @@ Subscription.menu.reset=Resetar Ao Estado Inicial
 ConfigView.section.Subscriptions=Subscri\u00e7\u00f5es
 subscriptions.config.maxresults=N\u00famero m\u00e1ximo de resultados retidos por subscri\u00e7\u00e3o [0: ilimitados]
 v3.activity.button.readall=Marcar Todos os Lidos
-ConfigView.interface.start.library=Iniciar na Biblioteca
 TableColumn.header.activityNew=Novo
 TableColumn.header.activityType=Tipo
 TableColumn.header.activityText=Mensagem
@@ -2641,7 +2550,6 @@ Wizard.Subscription.rss.subtitle3=Uma vez salvo, voc\u00ea receber\u00e1 atualiz
 Wizard.Subscription.subscribe.library=Conte\u00fado na sua Biblioteca
 Wizard.Subscription.subscribe.subscriptions=Subscri\u00e7\u00f5es Relacionadas
 Wizard.Subscription.subscribe.library.empty=Sem subscri\u00e7\u00f5es dispon\u00edveis?\n \nProcure pelo bot\u00e3o para subscrever laranja brilhante na Rede HD do Vuze.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Leia mais</A>
-TableColumn.header.videoLength=Tamanho do V\u00eddeo
 message.confirm.delete.title=Confirmar a Exclus\u00e3o
 message.confirm.delete.text=Voc\u00ea tem certeza que voc\u00ea quer apagar o '%1'?
 Subscription.menu.properties=Propriedades
@@ -2693,8 +2601,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Associados com as subscri\u00
 Button.deleteContent.fromLibrary=Remover da Biblioteca
 Button.deleteContent.fromComputer=Apagar do Computador
 v3.deleteContent.message=\nVoc\u00ea gostaria de apagar o '%1' do seu computador ou apenas remov\u00ea-lo da sua Biblioteca do Vuze?
-v3.library.infobar.text1=Procurando pela Visualiza\u00e7\u00e3o Avan\u00e7ada?
-v3.library.infobar.text2=Use o trocar Visualiza\u00e7\u00e3o na barra de ferramentas acima.
 v3.MainWindow.menu.view.toolbartext=Texto da Barra de Ferramentas
 v3.MainWindow.menu.view.asSimpleList=Lista Simples
 v3.MainWindow.menu.view.asAdvancedList=Lista Avan\u00e7ada
@@ -2711,7 +2617,6 @@ ConfigView.label.autoopen=Auto-Abrir
 ConfigView.label.autoopen.detailstab=Auto-abrir a Aba de Detalhes quando
 ConfigView.label.systray=Tray do Sistema
 ConfigView.label.systray._mac=\u00cdcone da Barra de Status
-ConfigView.section.interface.legacy=Legacy
 v3.MainWindow.menu.contentnetworks.manage=&Gerenciar as Redes HD
 azbuddy.ui.table.rem_cat=Gatos dentro
 azbuddy.ui.menu.cat=Categorias
@@ -2719,15 +2624,6 @@ azbuddy.ui.menu.cat.share=Ativar as subscri\u00e7\u00f5es com amigo(s)
 azbuddy.ui.menu.cat.set=Inserir categorias
 azbuddy.ui.menu.cat.set_msg=Lista das categorias separadas por v\u00edrgula, ou 'Todas'
 azbuddy.ui.menu.cat_subs=Subscrever
-v3.buddy.prop.dn=Exibir o nome
-v3.buddy.prop.un=Nome de usu\u00e1rio
-v3.buddy.prop.lupd=Atualizado pela \u00faltima vez
-v3.buddy.prop.pks=Contagem das chaves p\u00fablicas
-v3.buddy.prop.pc=Mensagens de chat pendentes
-v3.buddy.prop.catout=Suas categorias as quais um amigo pode subscrever
-v3.buddy.prop.catin=Categorias de amigos oferecidas a voc\u00ea
-v3.buddy.set.catout=Permitir ao amigo subscrever na categoria
-v3.buddy.set.catin=Subscrever na categoria do amigo
 subs.prop.update_period=Per\u00eddo de atualiza\u00e7\u00f5es
 azbuddy.enable_cat_pub=Categorias p\u00fablicas nas quais todos os seus amigos podem subscrever (separadas por ',' ) 
 v3.dialog.cnclose.title=%1 Fechado
@@ -2743,12 +2639,9 @@ TableColumn.header.category.info=Nome da categoria a qual o torrent pertence
 TableColumn.header.DateCompleted.info=Data em que o download do torrent foi completado
 TableColumn.header.AzProduct.info=Rede de Conte\u00fado da qual o torrent se originou
 TableColumn.header.health.info=Qu\u00e3o saud\u00e1vel sua conex\u00e3o com a multid\u00e3o do torrent \u00e9
-TableColumn.header.Info.info=Bot\u00e3o que executa a p\u00e1gina de detalhes do Conte\u00fado do Vuze
 TableColumn.header.maxuploads.info=# m\u00e1ximo de peers aos quais faz upload simult\u00e2neamente
 TableColumn.header.name.info=Nome do torrent
 TableColumn.header.unopened.info=Bandeira para indicar se o torrent foi reproduzido (aberto)
-TableColumn.header.Quality.info=Qualidade do conte\u00fado vuze, tais como HD, SD
-TableColumn.header.RateIt.info=Habilidade de classificar o conte\u00fado do vuze
 TableColumn.header.savepath.info=A pasta ou arquivo destino para os dados do torrent
 TableColumn.header.SeedingRank.info=Valor do ranking de qu\u00e3o terrivelmente o torrent precisa de seeding. Valor mais alto quer dizer maior necessidade.
 TableColumn.header.shareRatio.info=Quanto voc\u00ea fez de upload (compartilhou) em compara\u00e7\u00e3o a quanto voc\u00ea baixou.
@@ -2758,7 +2651,6 @@ TableColumn.header.upspeed.info=Velocidade de upload atual
 TableColumn.header.downspeed.info=Velocidade de download atual
 TableColumn.header.up.info=Quantia de dados atuais enviada para outros usu\u00e1rios
 TableColumn.header.down.info=Quantia de dados atuais recebida dos outros usu\u00e1rios
-TableColumn.header.videoLength.info=Tempo de reprodu\u00e7\u00e3o do conte\u00fado de v\u00eddeo do vuze
 TableColumn.header.ProgressETA.info=Combina as colunas de Status, Completamento, TEC e Velocidade de Download em uma coluna multi-alinhada.
 TableColumn.header.eta.info=Tempo estimado antes que seja feito o download do torrent 
 Pieces.column.#.info=N\u00famero de Peda\u00e7os
diff --git a/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties b/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties
index ebde77c..d4e0938 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Ficheiro .torrent
 Main.parameter.usage=Utiliza\u00e7\u00e3o : java org.gudy.azureus2.cl.Main [par\u00e2metros] "file.torrent" "guardar pasta"
 Main.parameter.maxUploads=N\u00famero m\u00e1ximo de envios
@@ -368,7 +369,6 @@ MyTorrentsView.menu.removeand.deletedata=Apaga os &Dados
 MyTorrentsView.menu.removeand.deleteboth=Apaga &Ambos
 deletedata.title=!!! Aviso !!!
 deletedata.message1=Est\u00e1 prestes a apagar os DADOS de :\n
-deletedata.message2=\nTem a certeza que deseja continuar?
 MainWindow.menu.file.configure=A&ssistente de Configura\u00e7\u00e3o
 configureWizard.title=Assistente de Configura\u00e7\u00e3o
 configureWizard.welcome.title=Bem-vindo ao Assistente de Configura\u00e7\u00e3o
@@ -503,7 +503,6 @@ MyTorrentsView.menu.host.error.message=O seguinte erro ocurreu a servir o torren
 ConfigView.section.tracker.pollinterval=Intervalo de pedidos (seg), Servidor / Clientes
 ConfigView.section.tracker.publishenable=Publicar detalhes do torrent para "<tracker_url>"
 ConfigView.section.tracker.ip=Endere\u00e7o IP do Servidor externo
-MainWindow.menu.help.faq=&FAQ
 ConfigView.section.style.enableXPStyle=Permitir estilo XP (necess\u00e1rio reiniciar)
 ConfigView.section.tracker.checkip=Auto-descobrir o Endere\u00e7o IP externo...
 ipCheckerWizard.title=Assistente de Verifica\u00e7\u00e3o de IP
@@ -537,7 +536,6 @@ splash.openViews=A Abrir Vistas
 splash.plugin=A Carregar a Extensao :
 configureWizard.nat.tooManyPorts=Demasiados portos a testar (9 max)
 ConfigView.section.color=Esquema de Cores
-PeerSocket.unknown=Desconhecido
 MyTorrentsView.menu.publish=&Publicar...
 MyTrackerView.status.published=Publicado
 MyTrackerView.completed=Completos
@@ -552,9 +550,15 @@ IPChecker.external.service.no-ip.description=provedor de servi\u00e7os de DNS Es
 ConfigView.section.tracker.publicenable=Permitir torrents externos
 ConfigView.label.playdownloadspeech=Fala quando a transfer\u00eancia termina.
 ConfigView.label.playdownloadspeech.info=Os Servi\u00e7os de Fala actualmente funcionam melhor em Ingl\u00eas
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Mostra o n\u00famero de c\u00f3pias dispon\u00edveis de cada peda\u00e7o.\nSe o n\u00famero da direita for inferior a 1, voc\u00ea n\u00e3o est\u00e1 a ver uma c\u00f3pia inteira dos ficheiros (e pode ter problemas a completar o download).
 GeneralView.label.trackerurl.tooltip=Clique para copiar endere\u00e7o de an\u00fancio para a \u00e1rea de transfer\u00eancia
 GeneralView.label.trackerurlopen.tooltip=Clique para abrir a p\u00e1gina principal do tracker
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Actualizar GUI a cada
 ConfigView.section.style.graphicsUpdate=Actualizar barras dos Graficos a cada N actualiza\u00e7\u00f5es da GUI
 ConfigView.section.style.reOrderDelay=Re-Ordenar tabelas a cada N actualiza\u00e7\u00f5es GUI [0: nunca]
@@ -689,7 +693,9 @@ health.explain.yellow=significa que o tracker est\u00e1 bom, voc\u00ea est\u00e1
 health.explain.green=significa que est\u00e1 tudo a decorrer normalmente.
 ConfigView.section.style.alwaysRefreshMyTorrents=Actualizar sempre os Meus Torrents
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Esta op\u00e7\u00e3o actualizar sempre os Meus Torrents mesmo que n\u00e3o mostrados (\u00fatil para algumas extens\u00f5es do mirc)
-ConfigView.section.style.verticaloffset=Deslocamento Vertical de Gr\u00e1ficos (correc\u00e7\u00e3o do GTK)
+#
+#2.0.7.0
+#
 security.certtruster.title=Aviso, Certificado de Seguran\u00e7a
 security.certtruster.intro=O certificado de seguran\u00e7a foi emitido por uma companhia em que n\u00e3o confia
 security.certtruster.resource=Recurso:
@@ -746,6 +752,9 @@ ConfigView.section.style.dropdiraction=Ac\u00e7\u00f5es de Arrastar/Largar para
 ConfigView.section.style.dropdiraction.opentorrents=Abrir Torrents
 ConfigView.section.style.dropdiraction.sharefolder=Partilhar Direct\u00f3rio
 ConfigView.section.style.dropdiraction.sharefoldercontents=Partilhar Conteudo
+#
+# 2.0.7.x
+#
 Categories.all=Todas
 Categories.uncategorized=N\u00e3o Categorizado
 CategoryAddWindow.message=Indique a nova Categoria
@@ -823,7 +832,6 @@ ConfigView.text.minutes=minutos
 ConfigView.text.neverIgnore=Nunca Ignorar
 ConfigView.text.any=qualquer
 DownloadManager.error.datamissing=Dados em Falta
-iconBar.queue.tooltip=Por Em Fila
 MainWindow.menu.file.open.torrentforseeding=Ficheiro .torrent (Para Semear)
 MainWindow.menu.language.refresh=&Actualizar
 ManagerItem.forced=For\u00e7ado
@@ -899,6 +907,9 @@ SpeedView.stats.uptime=Tempo Execu\u00e7\u00e3o (horas)
 SpeedView.stats.now=Agora
 SpeedView.stats.now.tooltip=Total (Protocolo)
 AutoMigration.useralert=Resultado da migra\u00e7\u00e3o autom\u00e1tica dos ficheiros/configura\u00e7\u00f5es/directorios:\n\n%1\n%2QUAISQUER FALHAS DEVEM SER RESOLVIDAS MANUALMENTE.
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Abrir Torrent(s)
 OpenTorrentWindow.message=Em teste
 OpenTorrentWindow.addFiles=&Adicionar Ficheiros
@@ -997,28 +1008,12 @@ plugins.basicview.log=Registo:
 ConfigView.label.maxdownloadspeed=Velocidade m\u00e1xima de transfer\u00eancia - KB/s  (Global) [0: ilimitado]
 splash.loadingTorrent=Carregando Torrent 
 splash.of=de
-swt.update.window.title=Assistente de Actualiza\u00e7\u00e3o do Vuze
-swt.update.window.header=Os seguintes componentes necessitam actualiza\u00e7\u00e3o :
-swt.update.window.columns.install=Installar
-swt.update.window.columns.name=Nome
-swt.update.window.columns.version=Vers\u00e3o
-swt.update.window.columns.size=Tamanho
-swt.update.window.cancel=Cancelar
-swt.update.window.quit=Desistir
-swt.update.window.close=Fechar
-swt.update.window.ok=Actualizar
-swt.update.window.restart=Reiniciar
-swt.update.window.status.downloading=Recebendo
-swt.update.window.status.done=Feito
-swt.update.window.status.failed=Falhou
-swt.update.window.status.restartNeeded=Vai ser necess\u00e1rio reiniciar!
 ConfigView.pluginlist.broken=Partido
 ConfigView.pluginlist.whereToPut=Coloque qualquer extens\u00e3o especifica de utilizador num direct\u00f3rio individual, dentro de:
 ConfigView.pluginlist.whereToPutOr=Para extens\u00f5es partilhadas entre utilizadores, use:
 MainWindow.statusText.checking=Verificando por Actualiza\u00e7\u00f5es
 TableColumn.header.OnlyCDing4.info=Quantidade de tempo que o torrent esteve apenas a semear. Exclui o tempo que o torrent esteve a receber (e a semear)
 ConfigView.section.style.alternateTablePainting=Usar m\u00e9todo alternativo para pintar colunas das tabelas com gr\u00e1ficos (pode requerer reinicio)
-swt.update.window.status.restartMaybeNeeded=Pode ser necess\u00e1rio reiniciar
 ConfigView.pluginlist.shared=partilhado
 PeersView.host=Nome do PC
 PeersView.host.info=O nome da m\u00e1quina em que se encontra o par, quando disponivel (pode afectar a performance)
@@ -1132,6 +1127,8 @@ MyTrackerView.badnat.info=Seeds/Pares que falharam uma verifica\u00e7\u00e3o de
 ConfigView.section.tracker.natchecktimeout=Verificar quando expira (seg.)
 ConfigView.section.file.perf.cache.enable=Ligar cache de disco
 ConfigView.section.file.perf.cache.size=Tamanho da cache em %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=T&ransfer\u00eancias
 MainWindow.menu.transfers.startalltransfers=Ini&ciar Todos
 MainWindow.menu.transfers.stopalltransfers=Pa&rar Todos
@@ -1214,8 +1211,6 @@ FilesView.fullpath=Mostrar Caminho Completo
 FilesView.remaining=Peda\u00e7os restantes
 TableColumn.header.trackername=Nome do Tracker
 TableColumn.header.trackername.info=Nome do tracker baseado no URL de an\u00fancio
-ConfigView.label.announceport=Sobrepor porta de an\u00fancio do tracker
-ConfigView.label.announceport.tooltip=Informa o Tracker que usa uma porta diferente daquele que est\u00e1 \u00e0 escuta. Deixe em branco para n\u00e3o usar.
 ConfigView.group.override=Sobrepor Op\u00e7\u00f5es
 ConfigView.section.file.perf.cache.notsmallerthan=N\u00e3o fazer cache de ficheiros mais pequenos que isto  (em %1)
 PeersView.menu.blockupload=Bloquear Upload
@@ -1246,8 +1241,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Tamanho do buffer de entrada -
 ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Define o valor (em bytes) do socket SO_RCVBUF, isto \u00e9 o tamanho e escala da janela de recep\u00e7\u00e3o TCP.\nO Vuze n\u00e3o define isto por omiss\u00e3o, isto significa que as defini\u00e7\u00f5es do Sistema Operativo s\u00e3o usadas.\nNOTE: Em Linux os valores dados s\u00e3o duplicados.
 ConfigView.section.connection.advanced.SO_SNDBUF=Tamanho do buffer de sa\u00edda - SO_SNDBUF [0: definido pelo SO]
 ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Define o valor (em bytes) do socket SO_SNDBUF, isto \u00e9 o tamanho e escala da janela de envio TCP.\nO Vuze n\u00e3o define isto por omiss\u00e3o, isto significa que as defini\u00e7\u00f5es do Sistema Operativo s\u00e3o usadas.\nNOTE: Em Linux os valores dados s\u00e3o duplicados.\n
-ConfigView.section.connection.advanced.IPTOS=Tipo de Servi\u00e7o dos pacotes enviados (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Define o campo classe-de-tr\u00e1fego / tipo-de-servi\u00e7o (TOS) no cabe\u00e7alho de IP para os pacotes de sa\u00edda.\nO Vuze n\u00e3o define isto por omiss\u00e3o, isto significa que as defini\u00e7\u00f5es do Sistema Operativo s\u00e3o usadas.\nValores de exemplo s\u00e3o:\n0x02 para IPTOS_LOWCOST\n0x04 para IPTOS_RELIABILITY\n0x08 para IPTOS_THROUGHPUT\n0x10 para IPTOS_LOWDELAY\nNOTA: As implementa\u00e7\u00f5es de rede subjacentes podem ignorar este valor, por isso esta op\u00e7\u00e3o est\u00e1 altamente dependente do SO e da vers\u00e3o do JRE.
 ConfigView.section.interface.confirm_torrent_removal=Mostrar di\u00e1logo de confirma\u00e7\u00e3o ao remover torrents
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Confirmar quando Remover um Torrent da vista \u201cMeus Torrents\u201d
 MyTorrentsView.confirm_torrent_removal=Tem a certeza que deseja remover?\n
@@ -1310,7 +1303,6 @@ Button.abort=Abortar
 ConfigView.section.ipfilter.enablebanning=Bloquear pares que consistentemente enviam dados errados
 Network.alert.acceptfail=Ocorreram demasiadas falhas sucessivas na porta %1, %2 -o processamento foi abandonado. Por favor verifique as configura\u00e7\u00f5es da firewall para esta porta assegurando que esta activada para receber liga\u00e7\u00f5es.
 MyShares.column.category=Categoria
-swt.update.window.restartLater=Re-iniciar mais tarde
 MainWindow.menu.file.restart=Reiniciar Vuze
 MainWindow.dialog.restartconfirmation.title=Reiniciar Vuze
 MainWindow.dialog.restartconfirmation.text=Deseja mesmo reiniciar o Vuze
@@ -1392,6 +1384,7 @@ MainWindow.menu.tools.nattest=&NAT / Teste de Firewall
 Button.apply=Aplicar
 Button.close=Fechar
 window.welcome.title=Bem-vindo ao Vuze %1
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=Notas da Vers\u00e3o
 dht.reseed.label=Normalmente Reseedar a base de dados Distribu\u00edda n\u00e3o \u00e9 necess\u00e1rio.No entanto, se o n\u00famero de contactos for baixo isto pode ser utilizado para reintegra\u00e7\u00e3o.\nDeixar em branco para o bootstrap de pares ligados ou introduza o IP e a porta para explicitamente fazer bootstrap de um par conhecido.
 dht.reseed.group=Reseedar
@@ -1576,6 +1569,7 @@ PeersView.BlockView.AvailCount=Contador de Disponibilidade
 MyTorrentsView.dialog.NumberError.title=N\u00famero Inv\u00e1lido ou N\u00e3o reconhecido
 MyTorrentsView.dialog.NumberError.text=O n\u00famero que introduziu \u00e9 inv\u00e1lido ou n\u00e3o \u00e9 reconhecido
 MyTorrentsView.dialog.setSpeed.title=Configurar %1 velocidade
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 MyTorrentsView.dialog.setNumber.text=introduza um n\u00famero %1 para modificar %2 para:
 MyTorrentsView.dialog.setNumber.upload=Enviar
 MyTorrentsView.dialog.setNumber.download=transferir
@@ -1697,6 +1691,7 @@ ConfigView.section.file.resume.recheck.all=Num re\u00ednicio ap\u00f3s um crash
 ConfigureWizard.language.choose=Escolha um idioma da lista em baixo:
 popup.closing.in=A Fechar a janela em  %1 segundos
 popup.more.waiting=%1 maisnmensagen(s)..
+# > 2402
 popup.download.finished="%1"terminou a transfer\u00eancia.
 popup.file.finished="%1" terminou a transf\u00earencia.
 ConfigView.auto=Autom\u00e1tico
@@ -1832,13 +1827,8 @@ MainWindow.menu.view.iconbar=Barra de Ferramentas
 MyTorrentsView.menu.rename=Mudar Nome
 MyTorrentsView.menu.rename.displayed=Mudar o Nome a Mostrar
 MyTorrentsView.menu.rename.save_path=Mudar o Caminho Guardado
-MyTorrentsView.menu.rename.displayed_and_save_path=Mudar Ambos
 MyTorrentsView.menu.rename.displayed.enter.title=Mudar o Nome Mostrado
 MyTorrentsView.menu.rename.displayed.enter.message=Introduza um novo nome a mostrar para esta transfer\u00eancia\nSe nenhum texto for introduzido,o nome original ser\u00e1 usado
-MyTorrentsView.menu.rename.save_path.enter.title=Mudar o Caminho Guardado
-MyTorrentsView.menu.rename.save_path.enter.message=Introduza um novo nome do caminho para guardar esta transfer\u00eancia.\nSe nenhum texto for introduzido,o nome da transfer\u00eancia ser\u00e1 usado.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Renomear Transfer\u00eancia
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Introduza um novo nome para esta transfer\u00eancia.\nSe nenhum texto for introduzido,os valores originais ser\u00e3o usados.
 MyTorrentsView.menu.edit_comment=Editar  Coment\u00e1rio
 MyTorrentsView.menu.edit_comment.enter.title=Editar  Coment\u00e1rio
 MyTorrentsView.menu.edit_comment.enter.message=Escreva um coment\u00e1rio para esta transfer\u00eancia.
@@ -1888,7 +1878,6 @@ ConfigView.section.connection.http.port=N\u00famero da porta a chegar
 ConfigView.section.connection.http.portoverride=Porta do Tracker HTTP  [0: nenhum]
 window.update.noupdates.title=Verificar resultados da actualiza\u00e7\u00e3o
 window.update.noupdates.text=N\u00e3o existem novas actualiza\u00e7\u00f5es dispon\u00edveis para si.\n\nParab\u00e9ns!
-ConfigView.label.bindip.info=Por exampo, '192.168.1.2' or 'eth0' (actual: %1)
 ConfigView.label.mindownloads=Min de Transfer\u00eancias simult\u00e2neas
 UI.cannot_submit_blank_text=Tem de introduzir um valor
 crypto.alert.as.warning=A rede '%1' \u00e9 conhecida por impor traffic shaping para reduzir a performance de transfer\u00eancia. O Transportecifrado foi ligado autom\u00e1ticamente -pode ser desligado/modificado via par\u00e2metros de configura\u00e7\u00e3o.
@@ -1898,7 +1887,6 @@ popup.download.added="%1" foi adicionado \u00e1 sua lista de transfer\u00eancias
 MessageBoxWindow.nomoreprompting=N\u00e3o me avisar de novo
 TorrentOptionsView.param.max.seeds=N\u00famero de liga\u00e7\u00f5es m\u00e1ximas so seedar [0: limite da liga\u00e7\u00e3o]
 TorrentOptionsView.param.alternative.value.enable=Alternar valor quando est\u00e1 a seedar
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Mostrar separadamente as op\u00e7\u00f5es " Mudar Nome" e "Mudar destino"no separador Ficheiro
 ConfigView.section.proxy.check.on.start=Verificar o estado do Proxy ao in\u00edcio
 TransferStatsView.legend.pingaverage=M\u00e9dia
 TransferStatsView.legend.ping1=Destino 1
@@ -1914,4 +1902,9 @@ splash.unloadingTorrent=A descarregar Torrent
 ConfigView.section.file.defaultdir.autorename=Mudar o nome ao torrent se os dados do ficheiro parecerem diferentes
 ConfigView.section.file.defaultdir.autorename.tooltip=Isto previne que um torrent escreva por cima dos ficheiros de outro torrent quando os nomes dos ficheiros s\u00e3o iguais
 alert.raised.at.close=(Mensagem sobre o encerramento anterior do Vuze)
+# Used for peers which we can't determine.
+PeerSocket.unknown=Desconhecido
+ConfigView.label.announceport=Sobrepor porta de an\u00fancio do tracker
+iconBar.queue.tooltip=Por Em Fila
+MainWindow.menu.help.faq=&FAQ
 MainWindow.menu.help.donate=Fazer um Donativo (2\u20ac,5\u20ac,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties b/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties
index 799e7c5..ca81535 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties
@@ -674,11 +674,11 @@ ConfigView.section.ipfilter.list.notinrange=nu era \u00een nici un interval
 ConfigView.section.ipfilter.list.title=Adrese IP blocate
 ConfigView.label.allowsameip=Permite conexiuni multiple de la aceea\u0219i adres\u0103 IP
 ConfigView.label.allowsameip.tooltip=Bifa\u021bi numai dac\u0103 e NEVOIE.\nC\u00eend e dezactivat\u0103 e o protec\u021bie anti-lipitori (utilizatori care nu \u00eencarc\u0103 date).
-ManagerItem.superseeding=Super-Donare
-ConfigView.label.userSuperSeeding=Folose\u0219te Super-Donarea
-PeersView.uniquepiece=Parte (Mod Super-Donare)
+ManagerItem.superseeding=Superdonare
+ConfigView.label.userSuperSeeding=Folose\u0219te Superdonarea
+PeersView.uniquepiece=Parte (Mod de Superdonare)
 PeersView.uniquepiece.none=Nimic
-PeersView.timetosend=Timp p\u00een\u0103 la retrimiterea p\u0103r\u021bii (Mod de Super-Donare)
+PeersView.timetosend=Timp p\u00een\u0103 la retrimiterea p\u0103r\u021bii (Mod de Superdonare)
 ConfigView.section.style.addurlsilently=Adaug\u0103 adresele (URL) \u00een mod silen\u021bios
 ConfigView.section.style.addurlsilently.tooltip=Descarc\u0103 automat (f\u0103r\u0103 a deschide o caset\u0103 de dialog) torentele ale c\u0103ror adrese s\u00eent trase \u0219i depuse \u00een program
 ConfigView.section.file.decoder.prompt=Aten\u021bioneaz\u0103 mereu c\u00eend e disponibil\u0103 o alegere pt. codare
@@ -717,7 +717,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Aceast\u0103 op\u021biu
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Decalarea vertical\u0103 a graficelor (repara\u021bie GTK)
 security.certtruster.title=Avertisment privitor la certificat
 security.certtruster.intro=Certificatul de securitate a fost eliberat de o companie \u00een care nu ave\u021bi \u00eencredere
 security.certtruster.resource=Resurs\u0103:
@@ -932,7 +931,7 @@ SpeedView.stats.ratio=Raport
 SpeedView.stats.uptime=Durata \u00cenc\u0103rc\u0103rii
 SpeedView.stats.now=Acum
 SpeedView.stats.now.tooltip=Total (pe protocol)
-AutoMigration.useralert=Rezultatele auto-migr\u0103rii fi\u0219./dos. de config. ale utilizatorului:\n\n%1\nE\u0219u\u0103rile trebuie migrate manual.\nNU UITA\u021aI S\u0102 ACTUALIZA\u021aI DESTINA\u021aIILE DE SALVARE \u00ceN CONFIGURA\u021aIE DAC\u0102 AU FOST MUTATE!
+AutoMigration.useralert=Rezultatele automigr\u0103rii fi\u0219./dos. de config. ale utilizatorului:\n\n%1\nE\u0219u\u0103rile trebuie migrate manual.\nNU UITA\u021aI S\u0102 ACTUALIZA\u021aI DESTINA\u021aIILE DE SALVARE \u00ceN CONFIGURA\u021aIE DAC\u0102 AU FOST MUTATE!
 #
 # > 2.0.8.0
 #
@@ -977,6 +976,7 @@ GenericText.column=Coloan\u0103
 MyTorrentsView.menu.thisColumn.remove=\u0218terge Coloana
 MyTorrentsView.menu.thisColumn.toClipboard=Copiaz\u0103 Textul \u00een Cliplan\u0219et\u0103
 MyTorrentsView.menu.thisColumn.autoTooltip=Arat\u0103 Mereu Ponturile Flotante
+MyTorrentsView.menu.tracker=Tracker/Torent
 ConfigView.upload.abbreviated=\u00ce:
 TableColumn.header.secondsseeding=Donez de
 TableColumn.header.secondsseeding.info=Timpul total al don\u0103rii pe care a\u021bi f\u0103cut-o.
@@ -1075,10 +1075,10 @@ MainWindow.menu.help.plugins=Pagina cu Extensii
 ConfigView.section.plugins.TrackerWeb=Adresa Trackerului
 ConfigView.section.tracker.enablecategories=Separ\u0103 torentele dup\u0103 categorii
 health.explain.share=\u00eenseamn\u0103 c\u0103 torentul e g\u0103zduit sau publicat
-ConfigView.section.tracker.createcert=Creeaz\u0103 Certificat Auto-Semnat
+ConfigView.section.tracker.createcert=Creeaz\u0103 Certificat Autosemnat
 ConfigView.section.tracker.createbutton=Creeaz\u0103
-security.certcreate.title=Creeaz\u0103 Certificat Auto-Semnat
-security.certcreate.intro=Acest dialog v\u0103 permite s\u0103 crea\u021bi un certificat auto-semnat
+security.certcreate.title=Creeaz\u0103 Certificat Autosemnat
+security.certcreate.intro=Acest dialog v\u0103 permite s\u0103 crea\u021bi un certificat autosemnat
 security.certcreate.strength=Putere
 security.certcreate.firstlastname=Prenume \u0219i Nume
 security.certcreate.orgunit=Unitate de Organizare
@@ -1106,7 +1106,7 @@ webui.access=Acces (*)
 webui.access.info=Accesul poate fi \n\t"local"\t= doar calculatorul local se poate conecta \n\t"all"\t= acces nerestric\u021bionat (predefinit)\n\tIP\t= ex. 192.168.0.2\t\t\tun singur IP\n\tIP1-IP2\t= ex. 192.168.0.1-192.168.0.255\t interval de IP-uri
 GeneralView.label.maxdownloadspeed=Viteza Maxim\u0103 de Desc\u0103rcare
 Security.keystore.corrupt=E\u0219ec la \u00eenc\u0103rcarea stocului de parole '%1' , \u0219tergeti-l \u0219i recrea\u021bi sau reimporta\u021bi certificatele
-Security.keystore.empty=Stocul de parole e gol. Crea\u021bi un certificat auto-semnat (vezi Unelte>Op\u021biuni>Securitate) sau importa\u021bi unul existent in %1'
+Security.keystore.empty=Stocul de parole e gol. Crea\u021bi un certificat autosemnat (vezi Unelte>Op\u021biuni>Securitate) sau importa\u021bi unul existent in %1'
 webui.restart.info=Modific\u0103rile parametrilor marca\u021bi cu (*) au nevoie de repornirea softului pentru a fi activate 
 GeneralView.label.maxdownloadspeed.tooltip=viteza max desc\u0103rcare [0: nelimitat\u0103]
 upnp.enable=Activeaz\u0103 UPnP
@@ -1572,6 +1572,7 @@ ConfigView.section.mode.advanced.text=Set\u0103rile Re\u021belei.\nFolosi\u021bi
 Files.column.storagetype=Tip de Stocare
 Files.column.fileext=Tip
 FileItem.storage.linear=Liniar
+FileItem.storage.compact=Compacteaz\u0103
 MessageBoxWindow.rememberdecision=Memoreaz\u0103 decizia mea
 ConfigView.section.interface.cleardecisions=Cur\u0103\u021b\u0103 deciziile memorate din dialoguri
 ConfigView.section.interface.cleardecisionsbutton=Cur\u0103\u021b\u0103
@@ -1735,7 +1736,7 @@ ConfigView.section.style.defaultSortOrder=Ordinea de Sortare Implicit\u0103
 ConfigView.section.style.defaultSortOrder.desc=Descresc\u0103tor
 ConfigView.section.style.defaultSortOrder.asc=Cresc\u0103tor
 ConfigView.section.style.defaultSortOrder.flip=Inversul ordon\u0103rii precedente
-LoggerView.autoscroll=Auto-derulare
+LoggerView.autoscroll=Autoderulare
 Button.selectAll=Selecteaz\u0103 Tot
 Button.markSelected=Marcheaz\u0103 Selec\u021bia
 Button.unmarkSelected=Deselecteaz\u0103 Itemurile
@@ -1783,8 +1784,8 @@ SpeedView.stats.maxUp=Viteza Max \u00cenc:
 ConfigView.pluginlist.unloadSelected=Opre\u0219te Selectatele
 ConfigView.pluginlist.scan=Scaneaz\u0103 dup\u0103 Extensii noi
 ConfigView.section.transfer.autospeed=Vitez\u0103 Automat\u0103 (clasic)
-ConfigView.section.transfer.autospeed.tooltip=Set\u0103ri specifice pt. Auto-Vitez\u0103
-ConfigView.section.transfer.autospeed.info=Auto-viteza ajusteaz\u0103 automat limita superioar\u0103 a vitezei de \u00eenc\u0103rcare pentru a evita saturarea conexiunii la re\u021bea.\n\nAceast\u0103 limitare va fi aplicat\u0103 doar dac\u0103 este activat\u0103 op\u021biunea "vitez\u0103 de \u00eenc\u0103rcare automat\u0103" \u0219i de asemenea necesit\u0103 activarea bazei de date distribuit\u0103 [DHT].\n
+ConfigView.section.transfer.autospeed.tooltip=Set\u0103ri specifice pt. Autovitez\u0103
+ConfigView.section.transfer.autospeed.info=Autoviteza ajusteaz\u0103 automat limita superioar\u0103 a vitezei de \u00eenc\u0103rcare pentru a evita saturarea conexiunii la re\u021bea.\n\nAceast\u0103 limitare va fi aplicat\u0103 doar dac\u0103 este activat\u0103 op\u021biunea "vitez\u0103 de \u00eenc\u0103rcare automat\u0103" \u0219i de asemenea necesit\u0103 activarea bazei de date distribuit\u0103 [DHT].\n
 ConfigView.section.transfer.autospeed.minupload=%1 vitez\u0103 minim\u0103 de \u00eenc\u0103rcare
 ConfigView.section.transfer.autospeed.minupload.tooltip=Viteza de \u00eenc\u0103rcare nu va fi sc\u0103zut\u0103 automat sub aceast\u0103 limit\u0103
 ConfigView.section.transfer.autospeed.maxupload=%1 vitez\u0103 maxim\u0103 de \u00eenc\u0103rcare [0: nelimitat\u0103]
@@ -1824,7 +1825,7 @@ DHTTransport.report.sending=trimit datele
 DHTTransport.report.resending=retrimit datele
 DHTTransport.report.send_complete=trimitere complet\u0103
 DHTTransport.report.send_timeout=expirarea trimiterii
-ConfigView.section.transfer.autospeed.enabledebug=F\u0103 un log cu informa\u021biile de debugare
+ConfigView.section.transfer.autospeed.enabledebug=F\u0103 un jurnal cu informa\u021biile de debugare
 TableColumn.header.date_added=Data Ad\u0103ug\u0103rii
 TableColumn.header.date_added.info=Data la care a fost ad\u0103ugat torentul
 ConfigView.section.file.hashchecking.smallestfirst=Reverific\u0103 mai \u00eent\u00eei desc\u0103rc\u0103rile mici
@@ -1899,13 +1900,11 @@ MainWindow.menu.view.iconbar=Bara de Unelte
 MyTorrentsView.menu.rename=Redenume\u0219te
 MyTorrentsView.menu.rename.displayed=Modific\u0103 Numele Afi\u0219at
 MyTorrentsView.menu.rename.save_path=Redenume\u0219te Calea de Salvare
-MyTorrentsView.menu.rename.displayed_and_save_path=Redenume\u0219te Ambele
+AdvRenameWindow.title=Redenume\u0219te Desc\u0103rcarea
+AdvRenameWindow.message=Introduce\u021bi un nume nou pentru aceast\u0103 desc\u0103rcare.
+AdvRenameWindow.rename.torrent=Redenume\u0219te Torentul
 MyTorrentsView.menu.rename.displayed.enter.title=Modific\u0103 Numele Afi\u0219at
 MyTorrentsView.menu.rename.displayed.enter.message=Introduce\u021bi un nume nou ce va fi afi\u0219at pentru aceast\u0103 desc\u0103rcare.
-MyTorrentsView.menu.rename.save_path.enter.title=Redenume\u0219te Calea de Salvare
-MyTorrentsView.menu.rename.save_path.enter.message=Introduce\u021bi o cale nou\u0103 de salvare pentru aceast\u0103 desc\u0103rcare.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Redenume\u0219te Desc\u0103rcarea
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Introduce\u021bi un nume nou pentru aceast\u0103 desc\u0103rcare.
 MyTorrentsView.menu.edit_comment=Editeaz\u0103 Comentariul
 MyTorrentsView.menu.edit_comment.enter.title=Editeaz\u0103 Comentariul
 MyTorrentsView.menu.edit_comment.enter.message=Ad\u0103uga\u021bi un comentariu pt. aceast\u0103 desc\u0103rcare.
@@ -1929,7 +1928,7 @@ TorrentInfoView.columns=Coloane pentru vederea 'Torentele Mele'
 progress.window.title=Opera\u021biune \u00een Desf\u0103\u0219urare
 progress.window.msg.filemove=A\u0219tepta\u021bi p\u00een\u0103 se termin\u0103 mutarea/redenumirea fi\u0219ierului
 ConfigView.label.popup.timestamp=Adaug\u0103 marcaje de timp la alertele popup
-ConfigView.label.popup.autohide=Ascunde automat alertele popup dup\u0103 x secunde (seteaz\u0103 la 0 pt. a dezactiva auto-ascunderea)
+ConfigView.label.popup.autohide=Ascunde automat alertele popup dup\u0103 x secunde (seteaz\u0103 la 0 pt. a dezactiva autoascunderea)
 ConfigView.label.popup.suppress_alerts=Suprim\u0103 alertele
 ConfigView.label.popup.use_message_boxes=Folose\u0219te casete cu mesaje popup mai degrab\u0103 dec\u00eet casete de alertare obi\u0219nuite.
 ConfigView.label.popup.show=Arat\u0103 toate alertele popup \u00eenregistrate p\u00een\u0103 acum (dac\u0103 exist\u0103)
@@ -2007,8 +2006,8 @@ Peers.column.handshake_reserved.info=Indic\u0103 care bi\u021bi rezerva\u021bi a
 Peers.column.client_identification=Identificarea Clientului
 Peers.column.client_identification.info=Indic\u0103 numele brute de clien\u021bi primite de Vuze - util pentru debugare
 dht.warn.user=Aten\u021bioneaz\u0103 dac\u0103 pot apare probleme cu NAT/maparea porturilor
-ConfigView.label.openbar.incomplete=Barele de Desc\u0103rcare: auto-deschide desc\u0103rc\u0103rile
-ConfigView.label.openbar.complete=auto-deschide donatorii
+ConfigView.label.openbar.incomplete=Barele de Desc\u0103rcare: autodeschide desc\u0103rc\u0103rile
+ConfigView.label.openbar.complete=autodeschide donatorii
 ConfigView.label.transferbar.remember_location=Memoreaz\u0103 ultima pozi\u021bie a Barei de Transfer
 ConfigView.section.transfer.autospeed.forcemin=%1 vitez\u0103 de \u00eenc\u0103rcare impus\u0103 for\u021bat la evaluarea func\u021bion\u0103rii conexiunii
 MainWindow.menu.tools.speedtest=Test de Vitez\u0103...
@@ -2115,7 +2114,6 @@ v3.MainWindow.button.comment=Comenteaz\u0103
 v3.MainWindow.button.viewdetails=Vezi Detaliile
 v3.MainWindow.button.play=Red\u0103
 v3.MainWindow.button.cancel=Anuleaz\u0103
-v3.MainWindow.button.sendtofriend=Partajeaz\u0103
 v3.MainWindow.button.preview=Previzioneaz\u0103
 v3.MainWindow.view.wait=Ini\u021bializez vederea, a\u0219tepta\u021bi.
 v3.MainWindow.xofx=%1 din %2
@@ -2147,11 +2145,11 @@ v3.topbar.menu.show.search=Caut\u0103
 v3.topbar.menu.show.frog=Brotacul Albastru
 splash.initializeCore=Ini\u021bializez Nucleul
 splash.initializeUIElements=Ini\u021bializez Elementele Interfe\u021bei
-ConfigView.section.transfer.autospeedbeta=Auto-Vitez\u0103-Beta
+ConfigView.section.transfer.autospeedbeta=Autovitez\u0103-Beta
 #
 ConfigView.section.ipfilter.peerblocking.group=Blocarea Partenerilor
-ConfigView.section.ipfilter.autoload.group=Auto-\u00cenc\u0103rcare
-ConfigView.section.ipfilter.autoload.file=Fi\u0219ierul cu filtre IP de auto-\u00eenc\u0103rcat
+ConfigView.section.ipfilter.autoload.group=Auto\u00eenc\u0103rcare
+ConfigView.section.ipfilter.autoload.file=Fi\u0219ierul cu filtre IP de auto\u00eenc\u0103rcat
 ConfigView.section.ipfilter.autoload.info=Suport\u0103 formatele DAT (eMule), P2P (PeerGuardian, splist) \u0219i P2B v1,2,3 (PeerGuardian 2).  Fi\u0219ierul poate fi stocat local sau pe internet (URL), \u00een format arhivat (zip, gzip) sau \u00een format text simplu.  Adresele (URL-urile) vor fi redesc\u0103rcate automat dup\u0103 7 zile, \u00een timp ce fi\u0219ierele locale vor fi re\u00eenc\u0103rcate la trecerea a un minut de c\u00eend au fost \u00eenlocuite/modificate.
 ConfigView.section.ipfilter.autoload.loadnow=\u00cencarc\u0103 Acum
 splash.loadIpFilters=\u00cencarc Filtrele IP..
@@ -2163,8 +2161,8 @@ SpeedTestWizard.name.conf.level.high=Ridicat
 SpeedTestWizard.name.conf.level.med=Mediu
 SpeedTestWizard.name.conf.level.low=Sc\u0103zut
 SpeedTestWizard.name.conf.level.none=Nimic
-ConfigView.section.transfer.select=Auto-Vitez\u0103
-ConfigView.section.transfer.select.v2=Auto-Vitez\u0103 (beta)
+ConfigView.section.transfer.select=Autovitez\u0103
+ConfigView.section.transfer.select.v2=Autovitez\u0103 (beta)
 mb.azmustclose.title=Eroare de Pornire
 mb.azmustclose.text=Azureus trebuie s\u0103 se \u00eenchid\u0103 din cauza unei probleme de (re)pornire care a f\u0103cut ca programul s\u0103 fie rulat \u00een mod Adminstrator.\n\nDup\u0103 \u00eenchiderea programului Azureus, redeschide\u021bi-l manual.
 network.ipv6.prefer.addresses=Prefer\u0103 adresele IPv6 c\u00eend s\u00eent disponibile at\u00eet IPv6 c\u00eet \u0219i IPv4
@@ -2232,18 +2230,18 @@ ConfigView.label.checkOnSeeding=Efectueaz\u0103 \u00een fundal reverificarea p\u
 ConfigView.label.ui_switcher=Arat\u0103 Selectorul de Interfe\u021be Vuze
 ConfigView.label.ui_switcher_button=Arat\u0103
 SpeedTestWizard.test.panel.explain=M\u0103sura\u021bi viteza protocolului Vuze. Selecta\u021bi tipul testului de vitez\u0103 \u0219i modul de criptare. Vizita\u021bi pagina wiki Vuze pentru a afla detalii despre test. Testul se va opri automat dac\u0103 dureaz\u0103 mai mult de minute. De obicei durata unui test nu dep\u0103\u0219e\u0219te un minut.
-SpeedTestWizard.set.upload.hint=Seteaz\u0103 valorile limit\u0103 pentru desc\u0103rcare \u0219i \u00eenc\u0103rcare folosite la algoritmul de Auto-Vitez\u0103.
-SpeedTestWizard.set.upload.panel.explain=Limitele setate aici s\u00eent folosite de algoritmul de Auto-Vitez\u0103. Seta\u021bi limitele de transfer \u0219i cele de \u00eencredere.\n\nVitezele conexiunii s\u00eent de multe ori exprimate \u00een "bi\u021bi pe secund\u0103" - totu\u0219i valoarea de mai jos e exprimat\u0103 \u00een "kilobai\u021bi pe secund\u0103".
+SpeedTestWizard.set.upload.hint=Seteaz\u0103 valorile limit\u0103 pentru desc\u0103rcare \u0219i \u00eenc\u0103rcare folosite la algoritmul de Autovitez\u0103.
+SpeedTestWizard.set.upload.panel.explain=Limitele setate aici s\u00eent folosite de algoritmul de Autovitez\u0103. Seta\u021bi limitele de transfer \u0219i cele de \u00eencredere.\n\nVitezele conexiunii s\u00eent de multe ori exprimate \u00een "bi\u021bi pe secund\u0103" - totu\u0219i valoarea de mai jos e exprimat\u0103 \u00een "kilobai\u021bi pe secund\u0103".
 SpeedTestWizard.set.limit.conf.level=\u00cencredere
-SpeedTestWizard.finish.panel.auto.speed=AutoViteza e :
-SpeedTestWizard.finish.panel.auto.speed.seeding=AutoViteza \u00een timpul don\u0103rii e : 
+SpeedTestWizard.finish.panel.auto.speed=Autoviteza e :
+SpeedTestWizard.finish.panel.auto.speed.seeding=Autoviteza \u00een timpul don\u0103rii e : 
 ConfigTransferAutoSpeed.add.comment.to.log.group=Adaug\u0103 comentariu la jurnalul de debugare
 ConfigTransferAutoSpeed.add.comment.to.log=Adaug\u0103 comentariu:
 ConfigTransferAutoSpeed.log.button=Jurnal
-ConfigTransferAutoSpeed.algorithm.selector=Selector al Auto-Vitezei
+ConfigTransferAutoSpeed.algorithm.selector=Selector al Autovitezei
 ConfigTransferAutoSpeed.algorithm=Algoritm:
-ConfigTransferAutoSpeed.auto.speed.classic=Auto-Vitez\u0103(clasic)
-ConfigTransferAutoSpeed.auto.speed.beta=Auto-Vitez\u0103(beta)
+ConfigTransferAutoSpeed.auto.speed.classic=Autovitez\u0103(clasic)
+ConfigTransferAutoSpeed.auto.speed.beta=Autovitez\u0103(beta)
 ConfigTransferAutoSpeed.data.update.frequency=Frecven\u021ba de Actualizare
 Alert.failed.update=Instalarea a cel pu\u021bin o component\u0103 a e\u0219uat. Vezi <A HREF="{Alert.failed.update.url}">AzureusWiki: Failed Update</A>
 OpenTorrentWindow.mb.existingFiles.partialList=(List\u0103 par\u021bial\u0103.  Mai multe fi\u0219iere exist\u0103 deja)
@@ -2419,53 +2417,17 @@ Button.bar.share=Partajeaz\u0103
 Button.bar.add=Adaug\u0103 Prieteni
 Button.bar.edit=Editeaz\u0103
 Button.bar.edit.cancel=Editare Terminat\u0103
-v3.Share.menu=Partajeaz\u0103 Con\u021binutul
-v3.Share.header=Partajeaz\u0103
-v3.Share.header.message=Partajeaz\u0103 cu prietenii existen\u021bi sau adaug\u0103 prieteni noi
-v3.Share.add.buddy=Adaug\u0103 Prieteni
-v3.Share.add.edit.buddy=Adaug\u0103/Editeaz\u0103 Prieteni
-v3.Share.add.buddy.all=Partajeaz\u0103 cu to\u021bi
-v3.Share.add.buddy.existing=Prieteni Existen\u021bi:
-v3.Share.add.buddy.new=Prieteni Noi:
-v3.Share.buddies=Prieteni
-v3.Share.invitees=Invita\u021bi
-v3.Share.invite.buddies.prompt=Invit\u0103 mai mul\u021bi prieteni pentru partajare
-v3.Share.send.now=Trimite
-v3.Share.optional.message=Mesaj op\u021bional trimis prin Fluxul de Activitate (maximum 140 de caractere):
-v3.Share.disclaimer=Not\u0103: At\u00eet con\u021binutul pe care \u00eel partaja\u021bi, c\u00eet \u0219i acest mesaj op\u021bional vor fi criptate.
-v3.Share.disclaimer.link=Informa\u021bii Suplimentare
-ConfigView.section.security.vuze.login=Trebuie s\u0103 fi\u021bi autentificat la Vuze pentru a realiza aceeast\u0103 opera\u021biune
-v3.buddy.menu.viewprofile=Vezi Profilul
-v3.buddy.menu.remove=\u0218terge Prietenul
 v3.MainWindow.menu.view.pluginbar=Bara de Extensii
-v3.MainWindow.menu.view.buddies-viewer=Bara Prietenilor
-v3.activity.buddy-request=Ave\u021bi o cerere de \u00eemprietenire de la %1\n\n<A HREF="%2" TARGET="minibrowse">ACCEPT\u0102</A>
-v3.activity.buddy-request.accept=Accept\u0103
-v3.activity.buddy-request.multi=Ave\u021bi o cerere de \u00eemprietenire [#%3] de la %1\n\n<A HREF="%2" TARGET="minibrowse">ACCEPT\u0102</A>
-v3.activity.buddy-linkup=Dv. \u0219i %1 s\u00eente\u021bi acum prieteni
-v3.activity.share-content=%1 a partajat %2 cu dv.\n\nMesaj de la %3:\n%4
-v3.activity.share-content.no-msg=%1 a partajat %2 cu dv.
-v3.buddies.friends=Prieteni
-v3.buddies.online=Conecta\u021bi (%1)
-v3.buddies.remove=\u0218terge Prietenul
-v3.buddies.add.to.share=Adaug\u0103 prietenul la partaj
 MainWindow.dialog.select.vuze.file=Selecteaz\u0103 Fi\u0219ierul Vuze
 MainWindow.menu.file.open.vuze=Fi\u0219ier Vuze...
-azbuddy.ui.dialog.disable.title=Dezactiveaz\u0103 Extensia Prieteni
-azbuddy.ui.dialog.disable.text=Dezactivarea extensiei Prieteni v\u0103 va \u00eempiedica s\u0103 partaja\u021bi torente cu ajutorul Barei de Prieteni de la partea de jos a aplica\u021biei \u0219i v\u0103 va \u00eempiedica s\u0103 modifica\u021bi lista de prieteni.\n\nSigur dori\u021bi s\u0103 dezactiva\u021bi extensia Prieteni?
 metasearch.addtemplate.title=Instalez \u0218ablonul de C\u0103utare?
 metasearch.addtemplate.desc=S\u00eente\u021bi sigur c\u0103 dori\u021bi s\u0103 instala\u021bi \u0219ablonul de c\u0103utare numit '%1'?
 v3.share.private.title=Partajeaz\u0103 Torentul
 v3.share.private.text=Torentul selectat e marcat ca privat.\n\nNu pute\u021bi partaja torentele private.
-v3.buddies.disabled.title=Extensia pt. Prieteni e Dezactivat\u0103
-v3.buddies.disabled.text._windows=A\u021bi dezactivat extensia pt. prieteni, ceea ce v\u0103 va \u00eempiedica s\u0103 partaja\u021bi sau s\u0103 accepta\u021bi torente ori cereri de a deveni prieten. Pute\u021bi schimba setarea \u00een tabul op\u021biunilor.
-v3.buddies.disabled.text._mac=A\u021bi dezactivat extensia pt. prieteni, ceea ce v\u0103 va \u00eempiedica s\u0103 partaja\u021bi sau s\u0103 accepta\u021bi torente ori cereri de a deveni prieten. Pute\u021bi schimba setarea \u00een tabul op\u021biunilor.
 metasearch.addtemplate.dup.title=Duplicheaz\u0103 \u0218ablonul
 metasearch.addtemplate.dup.desc=\u0218ablonul de c\u0103utare %1 e deja instalat
 metasearch.export.select.template.file=Salveaz\u0103 \u0218ablonul
 metasearch.import.select.template.file=Deschide \u0218ablonul
-v3.MainWindow.button.newtag.share=Nou! Partajeaz\u0103 Torentul
-v3.buddies.faq=Informa\u021bii Suplimentare
 dialog.uiswitch.title=Comut\u0103 la Interfa\u021ba Vuze
 dialog.uiswitch.text=Trebuie s\u0103 rula\u021bi interfa\u021ba Vuze pentru a folosi aceast\u0103 facilitate.\n\nVuze trebuie repornit.
 dialog.uiswitch.button=Comut\u0103 la Interfa\u021ba Vuze
@@ -2473,25 +2435,10 @@ azbuddy.tracker.enabled=Activeaz\u0103 'Accelerarea Prietenilor' pentru a priori
 azbuddy.protocolspeed=KB/s max dep\u0103\u0219irea protocolului de c\u0103tre prieten
 v3.MainWindow.button.download=Descarc\u0103
 v3.MainWindow.button.run=Deschide Fi\u0219ierul Desc\u0103rcat
-v3.activity.header.friend.requests.foryou=Cereri de \u00cemprietenire - Pentru Dv.
-v3.activity.header.friend.requests.fromyou=Cereri de \u00cemprietenire - De la Dv.
-v3.activity.header.friend.requests.accepted=Cereri de \u00cemprietenire - Acceptate
-v3.activity.header.share.requests=Partajeaz\u0103 Solicit\u0103rile de Torente
 v3.activity.header.downloads=Desc\u0103rc\u0103ri
-v3.activity.header.rating.reminders=Memento al Not\u0103rii
 v3.activity.header.vuze.news=\u0218tiri Vuze
-login.optional.message=Trebuie sa fiti autentificat pentru a utiliza aceasta facilitate
-message.confirm.share.singular=Excelent!  Cererea dv. de partajare a unui torent a fost trimis\u0103.
-message.confirm.share.plural=Excelent!  Solicit\u0103rile dv. de partajare a unui torent au fost trimise.
-message.confirm.share.invite.singular=Excelent!  Cererea dv. de conectare \u0219i partajare a fost trimis\u0103.  Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi delicat prietenul s\u0103 o accepte.
-message.confirm.share.invite.plural=Excelent!  Solicit\u0103rile dv. de conectare \u0219i partajare au fost trimise.  Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi delicat prietenul s\u0103 le accepte.
-message.confirm.invite.singular=Excelent! Cererea de \u00eemprietenire a fost trimis\u0103.  Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi cu ging\u0103\u0219ie prietenul s\u0103 o accepte.
-message.confirm.invite.plural=Excelent! Solicit\u0103rile de \u00eemprietenire au fost trimise.  Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi cu ging\u0103\u0219ie prietenii s\u0103 le accepte.
-message.confirm.invite.error=Oof! Ni\u0219te s\u00eerme s-au \u00eencurcat la cererea asta. Una sau mai multe dintre invita\u021bii au erori.
-message.prompt.add.friends=Pentru a partaja clica\u021bi iconi\u021bele prietenilor de la partea de jos a paginii
 message.taking.too.long=Se pare c\u0103 opera\u021biunea dureaz\u0103 mai mult dec\u00eet era a\u0219teptat. \nAp\u0103sa\u021bi 'ESC' dac\u0103 dori\u021bi s\u0103 o anula\u021bi.
 message.status.success=Succes
-message.intro.friends=Adaug\u0103 Prieteni.\nPartajeaz\u0103 Torente.\nDescarc\u0103 mai Rapid.
 azbuddy.tracker.bbb.status.title=Accelereaz\u0103 Prietenii
 azbuddy.tracker.bbb.status.title.tooltip=Dublu-clic pentru detalii
 azbuddy.tracker.bbb.status.idle=F\u0103r\u0103 Accelerare
@@ -2500,13 +2447,8 @@ azbuddy.tracker.bbb.status.in=S\u00eent Accelerat
 azbuddy.tracker.bbb.status.out=Prieteni Accelera\u021bi Acum
 v3.MainWindow.search.go.tooltip=Execut\u0103 C\u0103utarea
 v3.MainWindow.search.last.tooltip=\u00centoarce-te la Rezultatele C\u0103ut\u0103rii
-v3.activity.buddy-invited=A\u021bi trimis o cerere de \u00eemprietenire c\u0103tre %1.
-v3.activity.buddy-invited.multi=A\u021bi trimis o cerere de \u00eemprietenire urm\u0103toarelor persoane:\n%1
 metasearch.addtemplate.done.title=\u0218ablon Ad\u0103ugat
 metasearch.addtemplate.done.desc=\u0218ablonul '%1' a fost ad\u0103ugat cu succes.\nVa fi utilizat la urm\u0103toarea c\u0103utare!
-v3.MainWindow.button.share=Partajeaz\u0103 Con\u021binutul
-v3.buddies.remove.buddy.dialog.title=\u0218terge Confirmarea Prietenului
-v3.buddies.remove.buddy.dialog.text=Sigur dori\u021bi s\u0103 \u0219terge\u021bi prietenul %1 ?
 ConfigView.section.security.nopw=Nu a fost introdus\u0103 nici o parol\u0103
 ConfigView.section.security.nopw_v=Nu este disponibil\u0103 nici o parol\u0103, autentifica\u021bi-v\u0103 la Vuze
 fileplugininstall.install.title=Instalez Extensia?
@@ -2520,14 +2462,7 @@ azbuddy.os_not_avail=Indisponibil
 azbuddy.os_busy=Ocupat
 azbuddy.os_offline=Neconectat
 azbuddy.ui.menu.disconnect=Deconecteaz\u0103
-v3.buddy.menu.chat=Discut\u0103
-v3.chat.offline=%1 e momentan neconectat \u0219i va primi mesajul dv. c\u00eend se va reconecta.
-v3.chat.wrongversion=%1 folose\u0219te o versiune de Vuze care nu suport\u0103 Taifasul [Chat].
 azbuddy.enable_chat_notif=Activeaz\u0103 notific\u0103rile \u00een taifas [chat]
-v3.buddies.dnd.info.dialog.title=Partajare Direct\u0103
-v3.buddies.dnd.info.dialog.text=A\u021bi ini\u021biat o Partajare Direct\u0103 [Drop Share]. Con\u021binutul este preparat pentru partajare, \u0219i ecranul de partajare va fi afi\u0219at \u00een momentul \u00een care con\u021binutul va fi gata.\n\nTrebuie s\u0103 men\u021bine\u021bi Vuze deschis pentru ca Prietenul s\u0103 primeasc\u0103 con\u021binutul.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Clica\u021bi aici</A> pentru informa\u021bii suplimentare despre aceast\u0103 facilitate.
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=Nu ar\u0103ta din nou acest mesaj
 progress.window.msg.progress=A\u0219tepta\u021bi ca opera\u021biunea s\u0103 se termine
 ConfigView.section.connection.advanced.read_select=Expirarea citirii select\u0103rii (msec, implicit %1)
 ConfigView.section.connection.advanced.read_select_min=A\u0219teptarea minim\u0103 a citirii select\u0103rii (msec, implicit %1)
@@ -2583,25 +2518,18 @@ PluginDeprecation.view=Debugheaz\u0103 Extensia
 PluginDeprecation.alert=O extensie a \u00eencercat s\u0103 foloseasc\u0103 o facilitate ce va fi \u00eenl\u0103turat\u0103 pe viitor - deschide\u021bi jurnalul de Debugare a Extensiilor pentru mai multe informa\u021bii.
 TableColumn.header.Thumbnail=Iconi\u021b\u0103
 TableColumn.header.Thumbnail.info=Imagine miniaturizat\u0103 pentru con\u021binut din re\u021beaua Vuze; Pentru con\u021binutul de alt\u0103 provenien\u021b\u0103 s\u00eent folosite iconi\u021bele sistemului de operare.
-TableColumn.header.Rating_global=Apreciere
-TableColumn.header.Rating_global.info=Aprecierea global\u0103 pentru acest con\u021binut
 v3.MainWindow.menu.getting_started=&Prezentare Vuze
 MainWindow.menu.community=&Comunitate
 MainWindow.menu.help.faq=\u00centreb\u0103ri Puse &Frecvent
 MainWindow.menu.community.wiki=&Wikiul Vuze
 MainWindow.menu.community.forums=Fo&rumul Vuze
 MainWindow.menu.community.blog=&Blogul Vuze
-MainWindow.menu.community.add_friends=&Adaug\u0103 Prieteni
 MainWindow.menu.help.support=A&jutor \u0219i Suport
 externalLogin.title=Logare Necesar\u0103
 externalLogin.explanation=\u0218ablonul "%1" necesit\u0103 logare. Dup\u0103 logare, aceast\u0103 fereastr\u0103 se va \u00eenchide automat. Dac\u0103 nu se \u00eent\u00eempl\u0103 asta ap\u0103sa\u021bi pe "gata".
 externalLogin.explanation.capture=Trebuie s\u0103 v\u0103 loga\u021bi pentru a crea acest \u0219ablon. Dup\u0103 logare, clica\u021bi pe "Gata".
 Button.done=Gata
 GeneralView.torrent_created_on_and_by=%1 de %2
-v3.Share.wizard.title=Partajare -- Vr\u0103jitor
-v3.AddFriends.header.message=Ad\u0103uga\u021bi prieteni pentru a \u00eencepe s\u0103 partaja\u021bi torentele favorite
-v3.AddFriends.header=Adaug\u0103 Prieteni
-v3.AddFriends.wizard.title=Adaug\u0103 Prieteni -- Vr\u0103jitor
 Button.continue=Continu\u0103
 Button.preview=Previzioneaz\u0103
 Subscription.menu.forcecheck=Actualizeaz\u0103 Acum
@@ -2612,9 +2540,6 @@ sidebar.LibraryDL=Neterminate
 sidebar.LibraryCD=Terminate
 authenticator.location=Loca\u021bie
 authenticator.details=Detalii
-v3.MainWindow.menu.publish.new=Public\u0103 Con\u021binut Nou
-v3.MainWindow.menu.publish.mine=Con\u021binutul Publicat Deja
-v3.MainWindow.menu.publish.about=Despre Publicare...
 v3.MainWindow.menu.showActionBarText=Arat\u0103 Etichetele
 subscript.import.fail.title=Importare E\u0219uat\u0103
 subscript.import.fail.desc=Detalii: %1
@@ -2631,7 +2556,6 @@ Subscription.menu.reset=Reseteaz\u0103 la Starea Ini\u021bial\u0103
 ConfigView.section.Subscriptions=Abonamente
 subscriptions.config.maxresults=Num\u0103rul maxim de rezultate p\u0103strate per abonament [0: nelimitat]
 v3.activity.button.readall=Marcheaz\u0103 Tot ca Citit
-ConfigView.interface.start.library=Porne\u0219te \u00een Arhiva Torentelor
 TableColumn.header.activityNew=Nou
 TableColumn.header.activityType=Tip
 TableColumn.header.activityText=Mesaj
@@ -2662,12 +2586,11 @@ Wizard.Subscription.rss.subtitle3=Odat\u0103 salvat, ve\u021bi primi \u00een pan
 Wizard.Subscription.subscribe.library=Con\u021binut \u00een Arhiv\u0103
 Wizard.Subscription.subscribe.subscriptions=Abonamente Similare
 Wizard.Subscription.subscribe.library.empty=Nu s\u00eent disponibile abonamente?\n \nUita\u021bi-v\u0103 \u00een Re\u021beaua Vuze HD dup\u0103 butonul portocaliu de abonare.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Read more</A>
-TableColumn.header.videoLength=Lungimea Videoului
 message.confirm.delete.title=Confirma\u021bi \u0218tergerea
 message.confirm.delete.text=Sigur dori\u021bi s\u0103 \u0219terge\u021bi '%1'?
 Subscription.menu.properties=Propriet\u0103\u021bi
 props.window.title=Propriet\u0103\u021bi pentru '%1'
-subs.prop.is_auto=Auto-descarc\u0103 rezultatele noi
+subs.prop.is_auto=Autodescarc\u0103 rezultatele noi
 subs.prop.last_scan=Ultima actualizare reu\u0219it\u0103
 subs.prop.last_result=Ultimul rezultat g\u0103sit
 subs.prop.last_error=Ultima eroare
@@ -2713,8 +2636,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Asociat cu abonamentele
 Button.deleteContent.fromLibrary=\u0218terge din Arhiva Torentelor
 Button.deleteContent.fromComputer=\u0218terge de pe Calculator
 v3.deleteContent.message=\nDori\u021bi s\u0103 \u0219terge\u021bi '%1' de pe calculator sau doar s\u0103-l \u00eenl\u0103tura\u021bi din Arhiva Vuze?
-v3.library.infobar.text1=C\u0103uta\u021bi Vederea Avansat\u0103?
-v3.library.infobar.text2=Folosi\u021bi butonul "Vezi" din bara de unelte pentru a comuta \u00eentre cele dou\u0103 tipuri de interfa\u021b\u0103.
 v3.MainWindow.menu.view.toolbartext=Text pe Bara de Unelte
 v3.MainWindow.menu.view.asSimpleList=List\u0103 Simpl\u0103
 v3.MainWindow.menu.view.asAdvancedList=List\u0103 Avansat\u0103
@@ -2727,7 +2648,7 @@ v3.MainWindow.menu.contentnetworks=&Re\u021bele HD
 v3.MainWindow.menu.contentnetworks.about=Despre Re\u021belele HD
 Peers.column.as.info=Detalii despre SA-ul partenerului (Sistemul Autonom)
 ConfigView.label.autoopen.downloadbars=Deschide automat Barele de Desc\u0103rcare c\u00eend
-ConfigView.label.autoopen=Auto-Deschide
+ConfigView.label.autoopen=Autodeschide
 ConfigView.label.autoopen.detailstab=Deschide automat tabul Detalii c\u00eend
 ConfigView.label.systray=Sistaler
 ConfigView.label.systray._mac=Iconi\u021ba din Bara de Stare
@@ -2738,16 +2659,6 @@ azbuddy.ui.menu.cat.share=Activeaz\u0103 abonamentele pentru prieteni
 azbuddy.ui.menu.cat.set=Introduce\u021bi categoriile
 azbuddy.ui.menu.cat.set_msg=List\u0103 de categorii separate prin virgul\u0103, sau 'Tot'
 azbuddy.ui.menu.cat_subs=Aboneaz\u0103
-v3.buddy.prop.dn=Nume Afi\u0219at
-v3.buddy.prop.un=Utilizator
-v3.buddy.prop.on=Conectat
-v3.buddy.prop.lupd=Ultima Actualizare
-v3.buddy.prop.pks=Num\u0103r de chei publice
-v3.buddy.prop.pc=Mesaje de taifas [chat] \u00een a\u0219teptare
-v3.buddy.prop.catout=Categoriile la care se poate abona prietenul dv.
-v3.buddy.prop.catin=Categoriile prietenului la care v\u0103 pute\u021bi abona
-v3.buddy.set.catout=Permite prietenului s\u0103 se aboneze la categorie
-v3.buddy.set.catin=Aboneaz\u0103 la categoria prietenului
 subs.prop.update_period=Perioada de actualizare
 azbuddy.enable_cat_pub=Categorii publice la care se pot abona TO\u021aI prietenii dv. (separate prin ',' ) 
 v3.dialog.cnclose.title=%1 \u00cenchis
@@ -2763,12 +2674,9 @@ TableColumn.header.category.info=Numele categoriei c\u0103reia \u00eei apar\u021
 TableColumn.header.DateCompleted.info=Data la care a fost terminat\u0103 desc\u0103rcarea torentului
 TableColumn.header.AzProduct.info=Re\u021beaua de con\u021binut de unde provine torentul
 TableColumn.header.health.info=C\u00eet de s\u0103n\u0103toas\u0103/viabil\u0103 este conexiunea dv. la roiul torentului
-TableColumn.header.Info.info=Buton care lanseaz\u0103 pagina detaliat\u0103 a Con\u021binutului Vuze
 TableColumn.header.maxuploads.info=Nr. maxim de parteneri c\u0103tre care se poate \u00eenc\u0103rca simultan
 TableColumn.header.name.info=Numele Torentului
 TableColumn.header.unopened.info=Fanion care indic\u0103 dac\u0103 torentul a fost redat (deschis)
-TableColumn.header.Quality.info=Calitatea con\u021binutului Vuze, cum ar fi HD, SD
-TableColumn.header.RateIt.info=Capacitatea de a nota con\u021binutul Vuze
 TableColumn.header.savepath.info=Dosarul sau fi\u0219ierul de destina\u021bie pentru datele din torent
 TableColumn.header.SeedingRank.info=Valoarea rangului sau c\u00eet de mult are nevoie un torent de donare.. O valoare mai mare \u00eenseamn\u0103 o necesitate mai mare.
 TableColumn.header.shareRatio.info=C\u00eet de mult a\u021bi \u00eenc\u0103rcat (partajat) comparativ cu c\u00eet de mult a\u021bi desc\u0103rcat.
@@ -2778,7 +2686,6 @@ TableColumn.header.upspeed.info=Viteza curent\u0103 de \u00eenc\u0103rcare
 TableColumn.header.downspeed.info=Viteza curent\u0103 de desc\u0103rcare
 TableColumn.header.up.info=Cantitatea curent\u0103 de date trimise altor utilizatori
 TableColumn.header.down.info=Cantitatea de date curent\u0103 primit\u0103 de la ceilal\u021bi utilizatori
-TableColumn.header.videoLength.info=Durata de redare a con\u021binutului video Vuze
 TableColumn.header.ProgressETA.info=Combin\u0103 coloanele Stare, Progres, Timp Estimat de Terminare, \u0219i Vitez\u0103 \u00eentr-o coloan\u0103 multi-r\u00eend.
 TableColumn.header.eta.info=Timpul estimat de terminare a desc\u0103rc\u0103rii torentului
 Pieces.column.#=Nr.
@@ -2795,7 +2702,7 @@ TableColumn.header.TableColumnNameInfo=Numele \u0219i Descrierea Coloanei
 TableColumn.header.TableColumnSample=E\u0219antion
 TableColumn.header.TableColumnInfo=Descrierea Coloanei
 TableColumn.header.TableColumnChosenColumn=Coloana Aleas\u0103
-subs.prop.is_auto_ok=Auto-desc\u0103rcare permis\u0103
+subs.prop.is_auto_ok=Autodesc\u0103rcare permis\u0103
 label.learnmore=Afla\u021bi mai multe
 ColumnSetup.title=Configurarea Coloanelor pt. '%1'
 ColumnSetup.explain=Explora\u021bi coloanele disponibile din st\u00eenga \u0219i ad\u0103uga\u021bi-le la lista de coloane vizibile \u00een dreapta. M\u0103ri\u021bi sau diminua\u021bi lista de coloane disponibile folosind sec\u021biunea de Filtrare din partea st\u00eeng\u0103-jos. Tragerea-\u0219i-depunerea [drag-and-drop], ca \u0219i scurt\u0103turile de tastatur\u0103 pot fi de asemenea folosite.
@@ -2957,6 +2864,7 @@ devices.xcode.setcopyto=Seteaz\u0103 Dosarul de Copiere...
 devices.xcode.setcopyto.title=Alege locul unde s\u0103 se copieze
 devices.copy.folder.auto=Copiaz\u0103 automat fi\u0219ierele \u00een dosar
 devices.copy.folder.dest=Copiaz\u0103 \u00een Dosar
+TableColumn.menu.maxuploads=Nr. Max \u00cenc\u0103rc\u0103ri
 devices.xcode.mancopy=Copiaz\u0103 Manual Fi\u0219ierele
 devices.xcode.show.cat=Separat dup\u0103 Categorie
 ConfigView.label.alwaysShowLibraryHeader=Arat\u0103 mereu antetul \u00een Arhiva Torentelor (Torentele Mele)
@@ -2973,113 +2881,78 @@ v3.deviceview.infobar.line2.tivo=Fluxa\u021bi [stream] videouri select\u00eend V
 v3.deviceview.infobar.line2.psp=Videourile vor fi copiate pe PSP c\u00eend va fi conectat.
 devices.info.copypending2=%1 File(s) fi\u0219iere a\u0219teapt\u0103 s\u0103 fie copiate, conecta\u021bi dispozitivul
 subscriptions.column.nb-subscribers=Abona\u021bi
-# The remaining keys were not in MessagesBundle.properties
-MyTorrentsView.availability.info=Nr. copii complete descoperite
-MyTorrentsView.upspeed=\u00cenc\u0103rcare
-window.uiswitcher.AdvancedUI.title=Vuze Avansat
-window.uiswitcher.AdvancedUI.text=* Recomandat pentru utilizatorii care doresc s\u0103 p\u0103streze aspectul interfe\u021bei clasice dar doresc s\u0103 caute, s\u0103 exploreze \u0219i s\u0103 publice con\u021binut pe platforma Vuze\n\n* Interfa\u021b\u0103 grafic\u0103 u\u0219oar\u0103 \u0219i intuitiv\u0103, asociat\u0103 cu facilit\u0103\u021bi \u0219i func\u021bionalitate mai avansat\u0103
-MyTorrentsView.torrentpath=Locul Torentului
-MyTorrentsView.seeds.fullcopycalc=%2 copii complete presupuse pentru %1 parteneri
-MyTorrentsView.trackername.info=Numele trackerului bazat pe adresa de anun\u021bare
-MyTorrentsView.maxuploads=Nr. Max de \u00cenc\u0103rc\u0103ri
-MyTorrentsView.peersources=Sursele Partenerilor
-MyTorrentsView.totalspeed.info=Viteza total\u0103 a tuturor partenerilor cu care s\u00eente\u021bi conectat
-MyTorrentsView.OnlyCDing4=Doar CDing4
-MyTorrentsView.done.info=Procentajul realizat din sarcina curent\u0103
-MyTorrentsView.SeedingRank=Rang de Donare
-MyTorrentsView.OnlyCDing4.info=Timpul c\u00eet torentul a fost exclusiv donat. Se exclude timpul c\u00eet torentul a fost at\u00eet desc\u0103rcat c\u00eet \u0219i donat.
-Wizard.Subscription.optin.help=Activeaz\u0103 Abonamentele :
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message.2=Dac\u0103 nu e introdus nici un text, vor fi utilizate valorile originale.
-v3.MainWindow.recentDL=Ultimele %1 Desc\u0103rc\u0103ri
-MyTorrentsView.swarm_average_speed=Viteza Medie a Roiului
-MyTorrentsView.tracker=Tracker
-v3.activity.header.xdaysago=Acum %1 Zile
-MyTorrentsView.torrentpath.info=Locul torentului pe disc
-v3.MainWindow.myMedia.noneSelected=Ave\u021bi %1 p\u0103r\u021bi din con\u021binut.\n%2 din ele s\u00eent complete.\n\nClica\u021bi pe un r\u00eend pentru a vedea informa\u021bii despre con\u021binut
-MyTorrentsView.commenticon=Comentarii
-MyTorrentsView.status.info=Ce face torentul
-MyTorrentsView.peers=Parteneri
-MyTorrentsView.maxdownspeed=Viteza Maxim\u0103 de Desc\u0103rcare
-MyTorrentsView.date_added=Dat\u0103 ad\u0103ugat\u0103
-MyTorrentsView.priority=Prioritate
-ConfigView.section.style.useNewStyleMessageBox=Folose\u0219te stilul nou de caset\u0103 cu mesaje
-MyTorrentsView.bad_avail_time.info=Ultima dat\u0103 c\u00eend a fost disponibil\u0103 o copie complet\u0103 a desc\u0103rc\u0103rii
-MyTorrentsView.completion=Progres
-MyTorrentsView.status=Stare
-MyTorrentsView.category=Categorie
-MyTorrentsView.completed.info=nr. de parteneri care au terminat de desc\u0103rcat torentul, a\u0219a cum e raportat de tracker
-MyTorrentsView.timesinceupload=\u00cenc\u0103rcare Inactiv\u0103 de
-MyTorrentsView.shareRatio=Raport de Partajare
-MyTorrentsView.menu.rename.save_path.enter.message.2=Dac\u0103 nu e introdus nici un text, va fi utilizat numele afi\u0219at al desc\u0103rc\u0103rii.
-MyTorrentsView.seed_to_peer_ratio=Raport Donatori/Parteneri
-MyTorrentsView.comment=Comentariu
-MyTorrentsView.menu.rename.displayed.enter.message.2=Dac\u0103 nu e introdus nici un text, va fi utilizat numele original.
-MyTorrentsView.trackernextaccess.info=C\u00eend are loc din nou accesarea trackerului
-MyTorrentsView.health=S\u0103n\u0103tate
-MyTorrentsView.AvgAvail.info=Suma p\u0103r\u021bilor disponibile divizat\u0103 prin nr. de p\u0103r\u021bi, divizat\u0103 prin nr. de conexiuni
-v3.HomeReminder.title=Desc\u0103rcare Ad\u0103ugat\u0103
-MyTorrentsView.maxdownspeed.info=Vit Max Desc per torent
-MyTorrentsView.filesdone=Fi\u0219iere Terminate
-MyTorrentsView.seeds.info=# donatori conecta\u021bi la (# total donatori)
-MyTorrentsView.seed_to_peer_ratio.info=Raportul donatori/parteneri pe tot roiul
-MyTorrentsView.pieces.info=Bar\u0103 grafic\u0103 reprezent\u00eend p\u0103r\u021bile pe care le-a\u021bi desc\u0103rcat
-MyTorrentsView.maxupspeed=Viteza Maxim\u0103 de \u00cenc\u0103rcare
-v3.activity.header.today=Azi
-MyTorrentsView.availability=Disponibilitate
-MyTorrentsView.pieces=P\u0103r\u021bi
-MyTorrentsView.tracker.info=Starea Trackerului
-MyTorrentsView.maxupspeed.info=Vit Max \u00cenc per torent
-MyTorrentsView.comment.info=Comentariu f\u0103cut de utilizator pt. desc\u0103rcare
-MyTorrentsView.totalspeed=Viteza Total\u0103
-v3.buddies.count=%1 Prieteni
-MyTorrentsView.bad_avail_time=Copie Complet\u0103 V\u0103zut\u0103
-MyTorrentsView.date_added.menu.reset=Reseteaz\u0103 Data
-MyTorrentsView.peersources.info=Sursele partenerilor s\u00eent permise pentru stabilirea leg\u0103turilor cu ace\u0219tia
-v3.MainWindow.menu.view.buttonbar=Bara cu Butoane
-MyTorrentsView.remaining=R\u0103mas
-Wizard.Subscription.optin.description.sidebar=Abonamente \u00een Bara Lateral\u0103.
-MyTorrentsView.completion.info=Reprezentarea grafic\u0103 a procentajului desc\u0103rcat
-MyTorrentsView.timesinceupload.info=Timpul scurs de c\u00eend au fost \u00eenc\u0103rcate date din torent
-MyTorrentsView.date_completed=Terminat \u00cen
-MyTorrentsView.size=M\u0103rime
-v3.HomeReminder.gohome=Comut\u0103 la Tabloul de Bord
-MyTorrentsView.done=Progres
-MyTorrentsView.secondsseeding=Donez de
-v3.HomeReminder.text='%1' a fost ad\u0103ugat la lista de desc\u0103rcare.\n\nDac\u0103 dori\u021bi s\u0103 vede\u021bi progresul desc\u0103rc\u0103rii, sau s\u0103 reda\u021bi fi\u0219ierul dup\u0103 terminarea ei, clica\u021bi pe tabul Tablou de Bord.
-MyTorrentsView.AvgAvail=Medie/portiune
-MyTorrentsView.networks=Re\u021bele
-MyTorrentsView.trackername=Numele Trackerului
-MyTorrentsView.timesincedownload.info=Timpul scurs de c\u00eend au fost desc\u0103rcate date din torent
-MyTorrentsView.down=Desc\u0103rcat
-v3.activity.header.yesterday=Ieri
-MyTorrentsView.swarm_average_completion=Realizarea medie a partenerilor
-TableColumn.header.date_added.menu.reset=Reseteaz\u0103 Data
-MyTorrentsView.trackernextaccess=Urm\u0103toarea Accesare a Trackerului
-Tab.closeHint=(ap\u0103sa\u021bi "Esc" pentru \u00eenchidere)
-externalLogin.alt_method=Folose\u0219te metod\u0103 alternativ\u0103 de captur\u0103 a fursecului [cookie]  => alfa! de \u00eencercat doar dac\u0103 metoda obi\u0219nuit\u0103 nu func\u021bioneaz\u0103
-MyTorrentsView.peers.info=nr. de parteneri la care s\u00eente\u021bi conectat (nr. total de parteneri)
-MyTorrentsView.secondsdownloading=Descarc de
-v3.activity.header.xweeksago=Acum %1 S\u0103pt\u0103m\u00eeni
-MyTorrentsView.name=Nume
-MyTorrentsView.eta=Timp Estimat
-MyTorrentsView.seeds=Donatori
-MyTorrentsView.swarm_average_speed.info=Viteza medie a partenerilor din roi
-MyTorrentsView.filesdone.info=Fi\u0219iere Terminate/Fi\u0219iere Totale *sau* Fi\u0219iere Nes\u0103rite Terminate (Fi\u0219iere Terminate)/Fi\u0219iere Nes\u0103rite Totale (Fi\u0219iere Totale)
-MyTorrentsView.completed=Terminat
-MyTorrentsView.up=\u00cenc\u0103rcat
-Wizard.Subscription.optin.description.library=\u00cen Arhiva Torentelor, sau
-MyTorrentsView.secondsseeding.info=Durata de timp total\u0103 de la \u00eenceperea don\u0103rii.
-v3.activity.header.1weekago=Acum 1 S\u0103pt\u0103m\u00een\u0103
-MyTorrentsView.secondsdownloading.info=Durata de timp de la \u00eenceperea desc\u0103rc\u0103rii.
-MyTorrentsView.savepath=Calea de Salvare
-xmlhttp.legacy.error=Aceast\u0103 versiune a extensiei XML/HTTP nu mai func\u021bioneaz\u0103 cu Vuze - trebuie s-o actualiza\u021bi la o versiune mai nou\u0103.
-MyTorrentsView.networks.info=Re\u021bele permise pentru comunicarea de date cu partenerii
-v3.MainWindow.recentDL.library=Arhiva Torentelor >>
-MyTorrentsView.date_added.info=Data ad\u0103ug\u0103rii torentului
-MyTorrentsView.priority.info=Determin\u0103 banda ascendent\u0103 (de \u00eenc\u0103rcare) oferit\u0103 torentului
-MyTorrentsView.downspeed=Desc\u0103rcare
-MyTorrentsView.remaining.info=R\u0103mas de desc\u0103rcat
-MyTorrentsView.commenticon.info=Arat\u0103 iconi\u021ba dac\u0103 desc\u0103rcarea are comentarii f\u0103cute de utilizatori
-MyTorrentsView.timesincedownload=Desc\u0103rcare Inactiv\u0103 de
-MyTorrentsView.swarm_average_completion.info=Media progresului la partenerii din roi
-deletedata.message2=\nSigur dori\u021bi s\u0103 continua\u021bi?
+device.offlinedownloader.view.title=Desc\u0103rc\u0103toare Neconectate
+device.od.enable=Activeaz\u0103 dispozitivele cu desc\u0103rcare neconectat\u0103 [offline]
+device.odauto.enable=Administreaz\u0103 automat desc\u0103rc\u0103rile
+device.odpt.enable=Include torentele private
+devices.contextmenu.od=Desc\u0103rcare Neconectat\u0103
+devices.contextmenu.od.auto=<Automat>
+devices.contextmenu.od.enable=Activeaz\u0103
+devices.contextmenu.od.enabled=Activat
+devices.od.view.heading=Desc\u0103rc\u0103ri programate pt. desc\u0103rcare neconectat\u0103 [offline]
+DevicesOD.column.od_completion=Progresul Transferului
+devices.od.idle=Inactiv
+device.od.turnon.title=Activeaz\u0103 Suportul pt. Desc\u0103rc\u0103toare Neconectate
+device.is.disabled=Dispozitivul este dezactivat
+device.configure=Configureaz\u0103...
+device.od.error.notfound=Dispozitivul pare a fi neconectat [offline]
+device.od.error.opfailstatus=Dispozitivul a e\u0219uat s\u0103 proceseze comanda %1: stare %2
+device.od.error.opfailexcep=Dispozitivul a e\u0219uat s\u0103 proceseze comanda %1: excep\u021bie %2
+device.od.error.nospace=Nu mai exist\u0103 spa\u021biu pe dispozitiv sau nu este conectat nici un dispozitiv extern
+device.od.space=Spa\u021biu Disponibil
+ConfigView.section.style.forceSIValues=For\u021beaz\u0103 ar\u0103tarea valorilor ca valori IEC indiferent de afi\u0219area unit\u0103\u021bilor, pentru compatibilitate m\u0103rit\u0103 (e.g. 1MB = 1MiB = 1048576B)
+ConfigView.label.enableSystrayToolTip=Arat\u0103 statisticile de desc\u0103rcare la planarea cu mausul
+devices.activation=Activarea Dispozitivului
+button.nothanks=Nu, Mul\u021bumesc
+devices.od.turnon.text1=Am observat c\u0103 s\u00eente\u021bi conectat la %1.
+devices.od.turnon.text2=Dori\u021bi ca %1 s\u0103 continue desc\u0103rcarea fi\u0219ierelor atunci c\u00eend calculatorul este neconectat [offline]?
+devices.od.turnon.text3=Conecta\u021bi un Hardisc la %1 pentru a activa aceast\u0103 facilitate.
+devices.od.turnon.learn=Afla\u021bi mai multe >
+devices.router=ruter
+devices.od=desc\u0103rc\u0103tor neconectat
+webui.pairingenable=Activeaz\u0103 cuplarea [pairing]
+webui.group.access=Controlul Accesului
+ConfigView.section.Pairing=Cuplare
+pairing.accesscode=Cod de Acces
+pairing.ac.getnew=Aloc\u0103 un cod nou de acces
+pairing.ac.getnew.create=Creeaz\u0103
+pairing.ipv4=Adres\u0103 IPv4
+pairing.ipv6=Adres\u0103 IPv6
+pairing.host=Adresa gazdei (Nume DNS)
+pairing.group.explicit=Atribute Explicite
+pairing.explicit.enable=Activeaz\u0103
+pairing.explicit.info=Atributele explicite IP nu trebuie specificate \u00een mod obi\u0219nuit, pentru c\u0103 pot fi deduse automat.\nAtributul 'host' poate fi utilizat de exemplu dac\u0103 ave\u021bi un cont DynDNS \u0219i soft client potrivit pentru a p\u0103stra adresa IP dinamic\u0103 \u00eenregistrat\u0103 corect.
+pairing.op.fail=Opera\u021bia de cuplare a e\u0219uat
+pairing.alloc.fail=Alocarea unui cod nou de acces a e\u0219uat\n%1
+pairing.enable=Activeaz\u0103 cuplarea [pairing] softului Vuze cu aplica\u021bii/interfe\u021be distante
+pairing.status.info=Stare
+pairing.status.registered=Actualizare reu\u0219it\u0103 (%1)
+pairing.status.pending=Actualizarea va fi realizat\u0103 la %1
+pairing.status.initialising=Ini\u021bializare
+pairing.status.disabled=Dezactivat\u0103
+pairing.view.registered=Clica\u021bi pentru a vedea detaliile \u00eenregistr\u0103rii curente
+webui.pairing.info.n=Cuplarea este dezactivat\u0103, vede\u021bi op\u021biunile de la Conexiune->Cuplare pentru informa\u021bii despre aceast\u0103 facilitate.
+webui.pairing.info.y=Cuplarea este activat\u0103, vede\u021bi op\u021biunile de la Conexiune->Cuplare pentru detalii suplimentare.
+webui.enable=Activeaz\u0103 (*)
+ConfigView.section.rss=RSS Local etc.
+subscriptions.rss.enable=Creeaz\u0103 Flux RSS din abonamente
+device.tivo.enable=Activeaz\u0103 suportul pentru TiVo
+Button.removeAll=\u00cenl\u0103tur\u0103 Tot
+label.rename=Redenume\u0219te %1
+RCM.column.rc_rank=Rang
+RCM.column.rc_created=Creat
+RCM.column.rc_hash=Ha\u0219
+RCM.column.rc_lastseen=Ultima Apari\u021bie
+RCM.column.rc_level=Nivel
+rcm.view.heading=Descoperiri ale Roiului
+rcm.config.enabled=Activeaz\u0103
+rcm.config.max_results=Nr. Maxim de Rezultate
+rcm.config.max_level=Nivel Maxim
+rcm.search.provider=Roi
+pairing.server.warning.title=Mesajul Serverului de Cuplare
+wizard.webseedseditor.edit.title=Editorul Donatorilor HTTP
+wizard.webseedseditor.edit.newseed=Donator Nou
+MyTorrentsView.menu.editWebSeeds=Editeaz\u0103 Donatorii HTTP
+ClientStats.title.full=Statisticile Softului
+ClientStats.column.count=Num\u0103r
+Scrape.status.cached=R\u0103zuire [scrape] ca\u0219at\u0103
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties b/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties
index 9d7550b..aeb5fd0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties
@@ -725,7 +725,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u042d\u0442\u0430 \u04
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 (\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 GTK)
 security.certtruster.title=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438
 security.certtruster.intro=\u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0438\u0440\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0435
 security.certtruster.resource=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a:
@@ -1947,13 +1946,8 @@ MainWindow.menu.view.iconbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u0441\u
 MyTorrentsView.menu.rename=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043c\u044f/\u043f\u0443\u0442\u044c
 MyTorrentsView.menu.rename.displayed=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f
 MyTorrentsView.menu.rename.save_path=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f
-MyTorrentsView.menu.rename.displayed_and_save_path=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0451
 MyTorrentsView.menu.rename.displayed.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438
 MyTorrentsView.menu.rename.displayed.enter.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\n\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u0432\u0435\u0434\u0435\u043d, \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u043e\u0435 \u0438\u043c\u044f \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b.
-MyTorrentsView.menu.rename.save_path.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f
-MyTorrentsView.menu.rename.save_path.enter.message=\u0412\u044b\u0431\u0435\u0440\u0438 \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\n\u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0438 \u0438\u043c\u0435\u043d\u0438
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\n\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u0432\u0435\u0434\u0435\u043d, \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b.
 MyTorrentsView.menu.edit_comment=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439
 MyTorrentsView.menu.edit_comment.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f
 MyTorrentsView.menu.edit_comment.enter.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435.
@@ -2154,9 +2148,6 @@ v3.MainWindow.menu.advanced=&\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0
 v3.MainWindow.menu.view.searchbar=\u041f\u0430\u043d\u0435\u043b\u044c \u043f\u043e\u0438\u0441\u043a\u0430
 v3.MainWindow.menu.view.tabbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0432\u043a\u043b\u0430\u0434\u043e\u043a
 v3.MainWindow.currentDL=\u0421\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f
-v3.MainWindow.recentDL=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 %1 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a
-v3.MainWindow.recentDL.library=\u041c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0430 >>
-v3.MainWindow.myMedia.noneSelected=\u0418\u043c\u0435\u0435\u0442\u0441\u044f %1 \u0447\u0430\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430.\n%2 \u0438\u0437 \u043d\u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b.\n\n\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0435 \u0449\u0451\u043b\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435
 v3.MainWindow.button.stream=\u041f\u043e\u0442\u043e\u043a
 v3.MainWindow.button.stop=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
 v3.MainWindow.button.start=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c
@@ -2167,7 +2158,6 @@ v3.MainWindow.button.comment=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0
 v3.MainWindow.button.viewdetails=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
 v3.MainWindow.button.play=\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438
 v3.MainWindow.button.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-v3.MainWindow.button.sendtofriend=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u043c
 v3.MainWindow.button.preview=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
 v3.MainWindow.view.wait=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435.
 v3.MainWindow.xofx=%1 \u0438\u0437 %2
@@ -2470,52 +2460,17 @@ Button.bar.share=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f
 Button.bar.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
 Button.bar.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c
 Button.bar.edit.cancel=\u0413\u043e\u0442\u043e\u0432\u043e
-v3.Share.menu=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c
-v3.Share.header.message=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441 \u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043d\u043e\u0432\u044b\u0445.
-v3.Share.add.buddy=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.Share.add.edit.buddy=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.Share.add.buddy.all=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438
-v3.Share.add.buddy.existing=\u041c\u043e\u0438 \u0434\u0440\u0443\u0437\u044c\u044f:
-v3.Share.add.buddy.new=\u041d\u043e\u0432\u044b\u0435 \u0434\u0440\u0443\u0437\u044c\u044f:
-v3.Share.buddies=\u0414\u0440\u0443\u0437\u044c\u044f
-v3.Share.invitees=\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0451\u043d\u043d\u044b\u0435
-v3.Share.invite.buddies.prompt=\u041f\u0440\u0438\u0433\u043b\u0430\u0441\u0438\u0442\u0435 \u0435\u0449\u0451 \u0434\u0440\u0443\u0437\u0435\u0439 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430
-v3.Share.send.now=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c
-v3.Share.optional.message=\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f (\u043d\u0435 \u0431\u043e\u043b\u0435\u0435 140 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432):
-v3.Share.disclaimer=\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0418 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c, \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c), \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b.
-v3.Share.disclaimer.link=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435...
-ConfigView.section.security.vuze.login=\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 Vuze
-v3.buddy.menu.viewprofile=\u041f\u0440\u043e\u0444\u0438\u043b\u044c
-v3.buddy.menu.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430
 v3.MainWindow.menu.view.pluginbar=\u041f\u0430\u043d\u0435\u043b\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439
-v3.MainWindow.menu.view.buddies-viewer=\u041f\u0430\u043d\u0435\u043b\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.activity.buddy-request=\u0421 \u0432\u0430\u043c\u0438 \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c\u0441\u044f %1
-v3.activity.buddy-request.accept=\u041f\u0440\u0438\u043d\u044f\u0442\u044c
-v3.activity.buddy-request.multi=\u0421 \u0432\u0430\u043c\u0438 \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c\u0441\u044f %1 [#%3]
-v3.activity.buddy-linkup=\u0412\u044b \u0438 %1 \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u043b\u0438\u0441\u044c
-v3.activity.share-content=%1 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 %2. %3 <A HREF="%4" TITLE="%5">\u0433\u043e\u0432\u043e\u0440\u0438\u0442...</A>
-v3.activity.share-content.no-msg=%1 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 %2
-v3.buddies.friends=\u0414\u0440\u0443\u0437\u044c\u044f
-v3.buddies.online=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e (%1)
-v3.buddies.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430
-v3.buddies.add.to.share=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430
 MainWindow.dialog.select.vuze.file=\u0412\u044b\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430 Vuze
 MainWindow.menu.file.open.vuze=\u0424\u0430\u0439\u043b Vuze...
-azbuddy.ui.dialog.disable.title=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb
-azbuddy.ui.dialog.disable.text=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043d\u0435\u043b\u044c \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439\n\n\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb?
 metasearch.addtemplate.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d?
 metasearch.addtemplate.desc=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u00ab%1\u00bb?
 v3.share.private.title=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u043c
 v3.share.private.text=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c.\n\n\u041d\u0435\u043b\u044c\u0437\u044f \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438.
-v3.buddies.disabled.title=\u041c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d
-v3.buddies.disabled.text._windows=\u0412\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439. \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.
-v3.buddies.disabled.text._mac=\u0412\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439. \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.
 metasearch.addtemplate.dup.title=\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d
 metasearch.addtemplate.dup.desc=\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u00ab%1\u00bb \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d
 metasearch.export.select.template.file=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d
 metasearch.import.select.template.file=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d
-v3.MainWindow.button.newtag.share=\u041d\u043e\u0432\u043e\u0435! \u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u043c
-v3.buddies.faq=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435...
 dialog.uiswitch.title=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze UI
 dialog.uiswitch.text=\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze UI.\n\n\u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a Vuze.
 dialog.uiswitch.button=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze UI
@@ -2523,25 +2478,10 @@ azbuddy.tracker.enabled=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \
 azbuddy.protocolspeed=\u041a\u0411/\u0441 \u043c\u0430\u043a\u0441. \u0442\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0434\u0440\u0443\u0437\u0435\u0439
 v3.MainWindow.button.download=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
 v3.MainWindow.button.run=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b
-v3.activity.header.friend.requests.foryou=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0436\u0431\u044b \u2014 \u0434\u043b\u044f \u0432\u0430\u0441
-v3.activity.header.friend.requests.fromyou=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0436\u0431\u044b \u2014 \u043e\u0442 \u0432\u0430\u0441
-v3.activity.header.friend.requests.accepted=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0436\u0431\u044b \u2014 \u043f\u0440\u0438\u043d\u044f\u0442\u043e
-v3.activity.header.share.requests=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438
 v3.activity.header.downloads=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438
-v3.activity.header.rating.reminders=
 v3.activity.header.vuze.news=\u041d\u043e\u0432\u043e\u0441\u0442\u0438 Vuze
-login.optional.message=\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434
-message.confirm.share.singular=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e!  \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0431\u043c\u0435\u043d \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d.
-message.confirm.share.plural=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e!  \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043e\u0431\u043c\u0435\u043d \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b.
-message.confirm.share.invite.singular=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e!  \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d.  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.share.invite.plural=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e!  \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d.  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u044c\u044f\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.invite.singular=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e!  \u0417\u0430\u043f\u0440\u043e\u0441 \u0434\u0440\u0443\u0436\u0431\u044b \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d.  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.invite.plural=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e!  \u0417\u0430\u043f\u0440\u043e\u0441 \u0434\u0440\u0443\u0436\u0431\u044b \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d.  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u044c\u044f\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.invite.error=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441.  \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u043e \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438.
-message.prompt.add.friends=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0440\u0443\u0437\u0435\u0439 \u0432 \u043b\u0435\u0432\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.
 message.taking.too.long=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c\n\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0451, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u00abESC\u00bb
 message.status.success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e
-message.intro.friends=\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0434\u0440\u0443\u0437\u0435\u0439.\n\u0414\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438.\n\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.
 azbuddy.tracker.bbb.status.title=\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0440\u0443\u0437\u0435\u0439
 azbuddy.tracker.bbb.status.title.tooltip=\u0414\u0432\u043e\u0439\u043d\u043e\u0439 \u0449\u0435\u043b\u0447\u043e\u043a \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435
 azbuddy.tracker.bbb.status.idle=\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430
@@ -2550,13 +2490,8 @@ azbuddy.tracker.bbb.status.in=\u041c\u0435\u043d\u044f \u043f\u043e\u0434\u0434\
 azbuddy.tracker.bbb.status.out=\u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0437\u044c\u044f
 v3.MainWindow.search.go.tooltip=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a
 v3.MainWindow.search.last.tooltip=\u041d\u0430\u0437\u0430\u0434 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043f\u043e\u0438\u0441\u043a\u0430
-v3.activity.buddy-invited=\u0412\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0434\u0440\u0443\u0436\u0431\u0443 %1.
-v3.activity.buddy-invited.multi=\u0412\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0434\u0440\u0443\u0436\u0431\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c:\n%1
 metasearch.addtemplate.done.title=\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d
 metasearch.addtemplate.done.desc=\u0428\u0430\u0431\u043b\u043e\u043d \u00ab%1\u00bb \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d.\n\u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435.
-v3.MainWindow.button.share=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c
-v3.buddies.remove.buddy.dialog.title=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-v3.buddies.remove.buddy.dialog.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c %1 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u0440\u0443\u0437\u0435\u0439?
 ConfigView.section.security.nopw=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0431\u044b\u043b \u0443\u043a\u0430\u0437\u0430\u043d
 ConfigView.section.security.nopw_v=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0432\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 Vuze
 fileplugininstall.install.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c?
@@ -2570,12 +2505,7 @@ azbuddy.os_not_avail=\u041d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043
 azbuddy.os_busy=\u0417\u0430\u043d\u044f\u0442
 azbuddy.os_offline=\u041d\u0435 \u0432 \u0441\u0435\u0442\u0438
 azbuddy.ui.menu.disconnect=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f
-v3.buddy.menu.chat=\u0411\u0435\u0441\u0435\u0434\u0430
-v3.chat.offline=%1 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0439\u0434\u0451\u0442 \u0432 \u0441\u0435\u0442\u044c.
-v3.chat.wrongversion=%1 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e Vuze, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u0431\u0435\u0441\u0435\u0434\u044b.
 azbuddy.enable_chat_notif=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0432 \u0431\u0435\u0441\u0435\u0434\u0430\u0445
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435
 progress.window.msg.progress=\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u043f\u043e\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f
 ConfigView.section.connection.advanced.read_select=\u041c\u0430\u043a\u0441. \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430 (\u043c\u0441, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e %1)
 ConfigView.section.connection.advanced.read_select_min=\u041c\u0438\u043d. \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430 (\u043c\u0441, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e %1)
@@ -2631,24 +2561,18 @@ PluginDeprecation.view=\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u043c\u043e\u
 PluginDeprecation.alert=\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0440\u0430\u043d \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u2014 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u043e\u043a\u043d\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f
 TableColumn.header.Thumbnail=\u0417\u043d\u0430\u0447\u043e\u043a
 TableColumn.header.Thumbnail.info=\u0417\u043d\u0430\u0447\u043e\u043a \u0441 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 (\u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 Vuze) \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u043e\u043a \u0444\u0430\u0439\u043b\u0430 (\u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e)
-TableColumn.header.Rating_global=\u041e\u0446\u0435\u043d\u043a\u0430
-TableColumn.header.Rating_global.info=\u041e\u0431\u0449\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430
 v3.MainWindow.menu.getting_started=&\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442
 MainWindow.menu.community=\u0421\u043e\u043e&\u0431\u0449\u0435\u0441\u0442\u0432\u043e
 MainWindow.menu.help.faq=&\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b (FAQ)
 MainWindow.menu.community.wiki=&\u0412\u0438\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430
 MainWindow.menu.community.forums=&\u0424\u043e\u0440\u0443\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430
 MainWindow.menu.community.blog=&\u0411\u043b\u043e\u0433 Vuze
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
 MainWindow.menu.help.support=&\u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430
 externalLogin.title=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f
 externalLogin.explanation=\u0428\u0430\u0431\u043b\u043e\u043d \u00ab%1\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043e\u043a\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00ab\u0413\u043e\u0442\u043e\u0432\u043e\u00bb
 externalLogin.explanation.capture=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u00ab%1\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00ab\u0413\u043e\u0442\u043e\u0432\u043e\u00bb.
 Button.done=\u0413\u043e\u0442\u043e\u0432\u043e
 GeneralView.torrent_created_on_and_by=%1 ( %2 )
-v3.AddFriends.header.message=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u0438\u043c\u044b\u043c\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438
-v3.AddFriends.header=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.AddFriends.wizard.title=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0437\u0435\u0439 \u2014 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a
 Button.continue=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c
 Button.preview=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
 Subscription.menu.forcecheck=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
@@ -2659,9 +2583,6 @@ sidebar.LibraryDL=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438
 sidebar.LibraryCD=\u0413\u043e\u0442\u043e\u0432\u043e
 authenticator.location=\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
 authenticator.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-v3.MainWindow.menu.publish.new=\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442
-v3.MainWindow.menu.publish.mine=\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442
-v3.MainWindow.menu.publish.about=\u041e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438...
 v3.MainWindow.menu.showActionBarText=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0438
 subscript.import.fail.title=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
 subscript.import.fail.desc=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438: %1
@@ -2678,13 +2599,11 @@ Subscription.menu.reset=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432
 ConfigView.section.Subscriptions=\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
 subscriptions.config.maxresults=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 [0: \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e]
 v3.activity.button.readall=\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0447\u0442\u0451\u043d\u043d\u044b\u043c
-ConfigView.interface.start.library=\u041d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438
 TableColumn.header.activityNew=\u041d\u043e\u0432\u044b\u0439
 TableColumn.header.activityType=\u0422\u0438\u043f
 TableColumn.header.activityText=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435
 TableColumn.header.activityDate=\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f
 TableColumn.header.activityActions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-TableColumn.header.activityAvatar=\u0410\u0432\u0430\u0442\u0430\u0440
 Subscription.menu.resetauth=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438
 Search.menu.engines=\u0428\u0430\u0431\u043b\u043e\u043d\u044b
 Wizard.Subscription.title=\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f
@@ -2710,8 +2629,6 @@ Wizard.Subscription.rss.subtitle3=\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0
 Wizard.Subscription.subscribe.library=\u041a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435
 Wizard.Subscription.subscribe.subscriptions=\u041f\u043e\u0445\u043e\u0436\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
 Wizard.Subscription.subscribe.library.empty=\u041d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a?\n \n\u0418\u0449\u0438\u0442\u0435 \u044f\u0440\u043a\u043e-\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u043b\u0435 Vuze HD.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435...</A>
-TableColumn.header.Info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
-TableColumn.header.videoLength=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
 message.confirm.delete.title=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435
 message.confirm.delete.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u00ab%1\u00bb?
 Subscription.menu.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430
@@ -2763,8 +2680,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u0421\u0432\u044f\u0437\u043
 Button.deleteContent.fromLibrary=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438
 Button.deleteContent.fromComputer=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430
 v3.deleteContent.message=\n\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u00ab%1\u00bb \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438 Vuze?
-v3.library.infobar.text1=\u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c?
-v3.library.infobar.text2=\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c \u00ab\u0412\u0438\u0434\u00bb \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.
 v3.MainWindow.menu.view.toolbartext=\u041f\u043e\u0434\u043f\u0438\u0441\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432
 v3.MainWindow.menu.view.asSimpleList=\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a
 v3.MainWindow.menu.view.asAdvancedList=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a
@@ -2790,16 +2705,6 @@ azbuddy.ui.menu.cat.share=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043
 azbuddy.ui.menu.cat.set=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438
 azbuddy.ui.menu.cat.set_msg=\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0438\u043b\u0438 \u00abAll\u00bb
 azbuddy.ui.menu.cat_subs=\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f
-v3.buddy.prop.dn=\u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c
-v3.buddy.prop.un=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-v3.buddy.prop.on=\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d
-v3.buddy.prop.lupd=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435
-v3.buddy.prop.pks=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439
-v3.buddy.prop.pc=\u041d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f
-v3.buddy.prop.catout=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u0448\u0438 \u0434\u0440\u0443\u0437\u044c\u044f
-v3.buddy.prop.catin=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0434\u0440\u0443\u0433\u043e\u043c
-v3.buddy.set.catout=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e
-v3.buddy.set.catin=\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0434\u0440\u0443\u0433\u0430
 subs.prop.update_period=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f
 azbuddy.enable_cat_pub=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u0412\u0421\u0415 \u0432\u0430\u0448\u0438 \u0434\u0440\u0443\u0437\u044c\u044f (\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c: \u00ab,\u00bb) 
 v3.dialog.cnclose.title=\u0417\u0430\u043a\u0440\u044b\u0442\u043e %1
@@ -2815,12 +2720,9 @@ TableColumn.header.category.info=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u043
 TableColumn.header.DateCompleted.info=\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
 TableColumn.header.AzProduct.info=\u0421\u0435\u0442\u044c-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
 TableColumn.header.health.info=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f
-TableColumn.header.Info.info=\u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 Vuze
 TableColumn.header.maxuploads.info=\u041d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0430
 TableColumn.header.name.info=\u0418\u043c\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
 TableColumn.header.unopened.info=\u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439, \u0431\u044b\u043b \u043b\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 (\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d)
-TableColumn.header.Quality.info=\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 (HD, SD)
-TableColumn.header.RateIt.info=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442
 TableColumn.header.savepath.info=\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
 TableColumn.header.SeedingRank.info=\u041e\u0446\u0435\u043d\u043e\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0440\u0430\u0437\u0434\u0430\u0447\u0438. \u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0430\u0447\u0435.
 TableColumn.header.shareRatio.info=\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0440\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c.
@@ -2830,7 +2732,6 @@ TableColumn.header.upspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u044
 TableColumn.header.downspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430
 TableColumn.header.up.info=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u043c
 TableColumn.header.down.info=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0437\u043b\u043e\u0432
-TableColumn.header.videoLength.info=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0434\u0435\u043e
 TableColumn.header.ProgressETA.info=\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435.
 TableColumn.header.eta.info=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438
 Pieces.column.#.info=\u041d\u043e\u043c\u0435\u0440 \u0447\u0430\u0441\u0442\u0438
@@ -2857,89 +2758,3 @@ ColumnSetup.filters=\u0424\u0438\u043b\u044c\u0442\u0440\u044b
 ColumnSetup.availcolumns=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b (%1)
 ColumnSetup.availcolumns.filteredby=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b (%1, \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e %2)
 ConfigView.label.maxStalledSeeding=\u041c\u0430\u043a\u0441. \u00ab\u0437\u0430\u0433\u043b\u043e\u0445\u0448\u0438\u0445\u00bb [0: \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e]
-# The remaining keys were not in MessagesBundle.properties
-=
-Main.download.state.downloading=\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430
-MyTorrentsView.sendto=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c
-ConfigView.section.logging.log1component=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0440\u0430\u0437\u0434\u0430\u044e\u0449\u0438\u043c\u0438
-ConfigView.label.onlyafter50=(\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u043c\u0435\u043d\u0435\u0435 0.5)
-swt.update.window.restartLater=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0437\u0436\u0435
-swt.update.window.title=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 Vuze
-sendTorrent.one.email.body=\u0414\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f  "%1", \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0438\u043a\u043d\u0438 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0438\u0436\u0435:\n\n%2\n\n"%1"  \u043d\u0430\u0447\u043d\u0451\u0442 \u043a\u0430\u0447\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0443 \u0442\u0435\u0431\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c Azureus. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0435\u0449\u0435, \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442 \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e.
-sendTorrent.finish.title=\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e
-Main.download.state.waiting=\u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438
-ConfigView.section.file.check_piece_limit.explain=\u0415\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b "\u043d\u0430 \u043b\u0435\u0442\u0443" \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 (\u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435 \u0447\u0430\u0441\u0442\u0435\u0439), \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u043d\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438
-MainWindow.dht.status.running=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f
-ConfigView.label.serverportrange=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432
-ConfigView.label.oldpollingstyle=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0441\u0435\u0442\u0438 - \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0426\u041f\u0423, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u043c \u0440\u0430\u0437\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438
-swt.update.window.header=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b :
-Main.download.state.allocating=\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-sendTorrent.destination.byEmail=E-mail'\u043e\u043c
-swt.update.window.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
-swt.update.window.columns.size=\u0420\u0430\u0437\u043c\u0435\u0440
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0442\u0440\u0430\u0444\u0444\u0438\u043a\u0430  / \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (TOS) \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 IP \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.\nVuze \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n0x02 \u0434\u043b\u044f IPTOS_LOWCOST\n0x04 \u0434\u043b\u044f IPTOS_RELIABILITY\n0x08 \u0434\u043b\u044f IPTOS_THROUGHPUT\n0x10 \u0434\u043b\u044f IPTOS_LOWDELAY\n\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0421\u0435\u0442\u0435\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u041e\u0421 \u0438 \u0432\u0435\u0440\u0441\u0438\u0439 JRE.
-IrcView.title.full=\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e
-ConfigView.section.file.write_block_limit.explain=\u0415\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u0434\u0438\u0441\u043a \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435), \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u043d\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438
-ConfigView.section.proxy.description=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0438 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0451\u043c\u0430.\n\u042d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 SOCKS-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \n\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Azureus.
-swt.update.window.columns.version=\u0412\u0435\u0440\u0441\u0438\u044f
-swt.update.window.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-ConfigView.section.style.SeparateFilesViewRenameRetarget=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0435\u0436\u0434\u0443  "\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c" \u0438 "\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c" \u0432 \u043c\u0435\u043d\u044e \u043e\u043f\u0446\u0438\u0439m \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438
-%2=
-MyTorrentsView.menu.sendTorrent=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0414\u0440\u0443\u0433\u0443/\u0421\u0430\u0439\u0442\u0443..
-SystemTray.menu.startalldownloads=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438
-sendTorrent.destination.title=\u041a\u0430\u043a \u0442\u044b \u0445\u043e\u0447\u0435\u0448\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c %1  \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442(\u044b)?
-sendTorrent.multi.email.body.eachTorrent=\u0414\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f "%1", \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0438\u043a\u043d\u0438 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0438\u0436\u0435:\n\n%2\n\n
-ConfigView.label.serverporthigh=\u0421\u0430\u043c\u044b\u0439 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u0442
-TorrentOptionsView.param.max.uploads.when.seeding.enable=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u0441\u043b\u043e\u0442\u043e\u0432 \u043e\u0442\u0434\u0430\u0447\u0438 \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0434\u0430\u0451\u0442\u0435
-sendTorrent.finish.button.toClipboard=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430
-swt.update.window.status.restartNeeded=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a!
-ConfigView.label.serverportlow=\u0421\u0430\u043c\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u043f\u043e\u0440\u0442
-swt.update.window.status.done=Ok
-configureWizard.nat.serverhigh=\u0412\u044b\u0441\u0448\u0438\u0439 \u043f\u043e\u0440\u0442
-sendTorrent.title=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0414\u0440\u0443\u0433\u0443/\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0435
-ConfigView.section.proxy.description2=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u044e \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u043a\u0435\u0440\u0430.\n\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Azureus.
-sendTorrent.finish.byEmail=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435 \u0432  e-mail:
-ConfigView.section.logging.log4component=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430
-ConfigView.connection.group.proxy=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u043a\u0441\u0438
-LocaleUtil.column.filename=\u0418\u043c\u044f \u0424\u0430\u0439\u043b\u0430
-ConfigView.label.allocatenewfiles=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b
-sendTorrent.multi.email.body.bottom=\u041e\u043d\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u043a\u0430\u0447\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u0443 \u0442\u0435\u0431\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c Azureus. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0435\u0449\u0435, \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442 \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e.
-configureWizard.nat.serverlow=\u041d\u0438\u0437\u0448\u0438\u0439 \u043f\u043e\u0440\u0442
-swt.update.window.quit=\u0412\u044b\u0445\u043e\u0434
-SystemTray.menu.stopalldownloads=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438
-Main.download.state.error=o\u0448\u0438\u0431\u043a\u0430
-ConfigView.label.bindip.info=\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440, '192.168.1.2' or 'eth0' (\u0442\u0435\u043a\u0443\u0449\u0435\u0435: %1)
-sendTorrent.finish.byHTML=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435 \u0432 \u0442\u0432\u043e\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443:
-ConfigView.label.maxclients=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 torrent (0 : \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e) 
-ConfigView.section.connection.advanced.IPTOS=\u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (TOS) \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 [see http://www.azureuswiki.com/index.php/AdvancedNetworkSettings]
-window.welcome.title.2304=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 Vuze 2.3.0.4
-ConfigView.section.logging.log3type=\u041e\u0448\u0438\u0431\u043a\u0438
-window.welcome.version=2.5.0.0
-ConfigView.label.stopRatio=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e\u043c \u0444\u0430\u043a\u0442\u043e\u0440\u0435 \u0440\u0430\u0437\u0434\u0430\u0447
-sendTorrent.finish.button.startEMail=\u0421\u043e\u0437\u0434\u0430\u0442\u044c E-Mail
-ConfigView.section.style.sortDefaultAscending=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e
-swt.update.window.ok=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
-swt.update.window.restart=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c
-ConfigView.connection.group.advanced=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438
-MainWindow.about.internet.featurerequests=\u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435
-sendTorrent.one.email.subject=\u042f \u0440\u0435\u043a\u043e\u043c\u043d\u0435\u0434\u0443\u044e \u0442\u0435\u0431\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c %1
-ConfigView.section.style.colorScheme=\u0421\u0445\u0435\u043c\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\n - \u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0430
-sendTorrent.multi.email.subject=\u042f \u0440\u0435\u043a\u043e\u043c\u043d\u0435\u0434\u0443\u044e \u0442\u0435\u0431\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c %1
-Main.download.state.checking=\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430
-ConfigView.label.slowconnect=
-swt.update.window.status.failed=\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f
-ConfigView.section.file.write_block_limit=\u041c\u0430\u043a\u0441. \u0434\u043b\u0438\u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438\n[0: \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0432 %1
-ConfigView.label.override=(\u041f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430)
-MyTorrentsView.sendto.info=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u0438\u043d\u0444\u043e \u043e \u0444\u0430\u0439\u043b\u0435
-ConfigView.label.announceport.tooltip=\u0418\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u043a\u0435\u0440 \u043e \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435. \u041e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c.
-swt.update.window.status.downloading=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f
-ConfigView.connection.group.advanced.tooltip=http://www.azureuswiki.com/index.php/AdvancedNetworkSettings
-ConfigView.section.logging.log0component=\u041e\u0431\u0449\u0435\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-swt.update.window.columns.install=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
-sendTorrent.destination.byHTML=blog'\u043e\u043c, \u0438\u043b\u0438 \u0432\u0435\u0431 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u043e\u0439
-iconBar.sendTorrent.tooltip=\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 E-Mail/\u0421\u0430\u0439\u0442
-ConfigView.section.logging.log2component=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0430
-swt.update.window.columns.name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
-swt.update.window.status.restartMaybeNeeded=\u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a
-deletedata.message2=\n\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b \u0432 \u0441\u0432\u043e\u0451\u043c \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0438?
-Main.download.state.stopped=\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties b/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties
index 7632a38..209a04d 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=.torrent s\u00fabor
 Main.parameter.usage=Pou\u017eitie : java org.gudy.azureus2.cl.Main [parametre] "s\u00fabor.torrent" "cie\u013eov\u00e1 zlo\u017eka"
 Main.parameter.maxUploads=Max. po\u010det simult\u00e1lnnych uploadov
@@ -360,7 +361,6 @@ MyTorrentsView.menu.removeand.deletedata=Zmaza\u0165 &d\u00e1ta
 MyTorrentsView.menu.removeand.deleteboth=Zmaza\u0165 .torrent &aj d\u00e1ta
 deletedata.title=!!! Upozornenie !!! 
 deletedata.message1=Chyst\u00e1te sa zmaza\u0165 D\u00c1TA z :\n
-deletedata.message2=\nNaozaj chcete pokra\u010dova\u0165? 
 MainWindow.menu.file.configure=Sprievodca &nastaven\u00edm
 configureWizard.title=Sprievodca nastaven\u00edm
 configureWizard.welcome.title=Vitajte v Sprievodcovi nastaven\u00edm
@@ -490,7 +490,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Interval medzi po\u017eiadavkami klienta Trackeru (sek)
 ConfigView.section.tracker.publishenable=Publikova\u0165 detaily o Torrentoch v "<tracker_url>"
 ConfigView.section.tracker.ip=Verejn\u00e1 IP adresa Trackera
-MainWindow.menu.help.faq=&Wiki FAQ
 ConfigView.section.style.enableXPStyle=Povoli\u0165 XP \u0161t\u00fdl [nutn\u00fd re\u0161tart]
 ConfigView.section.tracker.checkip=Zisti\u0165 verejn\u00fa IP adresu...
 ipCheckerWizard.title=Sprievodca kontrolou IP adresy
@@ -522,7 +521,6 @@ splash.openViews=Otv\u00e1ranie z\u00e1lo\u017eiek
 splash.plugin=Na\u010d\u00edtanie pluginu : 
 configureWizard.nat.tooManyPorts=Prive\u013ea portov na testovanie (maxim\u00e1lne 9) 
 ConfigView.section.color=Farebn\u00e1 Sch\u00e9ma
-PeerSocket.unknown=Nezn\u00e1my
 MyTorrentsView.menu.publish=Publikova\u0165... 
 MyTrackerView.status.published=Publikovan\u00fd
 MyTrackerView.completed=Dokon\u010den\u00fdch
@@ -537,9 +535,15 @@ IPChecker.external.service.no-ip.description=Poskytovate\u013e dynamick\u00e9ho
 ConfigView.section.tracker.publicenable=Povoli\u0165 extern\u00e9 Torrenty
 ConfigView.label.playdownloadspeech=Hovori\u0165 po dokon\u010den\u00ed s\u0165ahovania
 ConfigView.label.playdownloadspeech.info=Re\u010dov\u00e9 slu\u017eby moment\u00e1lne najlep\u0161ie funguj\u00fa v angli\u010dtine
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Zobrazuje po\u010det dostupn\u00fdch k\u00f3pi\u00ed ka\u017ed\u00e9ho dielu.\nAk je \u010d\u00edslo vpravo men\u0161ie ne\u017e 1, nie s\u00fa dostupn\u00e9 v\u0161etky diely s\u00faboru (a m\u00f4\u017eete ma\u0165 probl\u00e9m dokon\u010di\u0165 s\u0165ahovanie)
 GeneralView.label.trackerurl.tooltip=Kliknut\u00edm skop\u00edrujete oznamovaciu URL do schr\u00e1nky
 GeneralView.label.trackerurlopen.tooltip=Kliknut\u00edm otvor\u00edte hlavn\u00fa str\u00e1nku Trackera
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Aktualizova\u0165 UI (pou\u017e\u00edvate\u013esk\u00e9 rozhranie) ka\u017ed\u00fdch
 ConfigView.section.style.graphicsUpdate=Aktualizova\u0165 grafy ka\u017ed\u00fdch N aktualiz\u00e1ci\u00ed UI
 ConfigView.section.style.reOrderDelay=Zora\u010fova\u0165 tabu\u013eky ka\u017ed\u00fdch N aktualiz\u00e1ci\u00ed UI [0: nikdy]
@@ -672,7 +676,9 @@ health.explain.yellow=znamen\u00e1, \u017ee Tracker je v poriadku, ste pripojen\
 health.explain.green=znamen\u00e1, \u017ee v\u0161etko je v poriadku
 ConfigView.section.style.alwaysRefreshMyTorrents=Neust\u00e1le obnovova\u0165 Moje Torrenty
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Obnovova\u0165 okno Moje Torrenty, aj ke\u010f nie je zobrazen\u00e9 [pre niektor\u00e9 pluginy mIrc]
-ConfigView.section.style.verticaloffset=Graphics Vertical Offset (oprava GTK)
+#
+#2.0.7.0
+#
 security.certtruster.title=Varovanie bezpe\u010dnostn\u00e9ho certifik\u00e1tu
 security.certtruster.intro=Certifik\u00e1t bol vydan\u00fd spolo\u010dnos\u0165ou, ktorej ned\u00f4verujete
 security.certtruster.resource=Zdroj:
@@ -728,6 +734,9 @@ ConfigView.section.style.dropdiraction=Pretiahnutie (Drag && Drop) zlo\u017eky
 ConfigView.section.style.dropdiraction.opentorrents=Otv\u00e1ra Torrenty
 ConfigView.section.style.dropdiraction.sharefolder=Zdie\u013ea zlo\u017eku
 ConfigView.section.style.dropdiraction.sharefoldercontents=Zdie\u013ea obsah zlo\u017eky
+#
+# 2.0.7.x
+#
 Categories.all=V\u0161etko
 Categories.uncategorized=Nezaraden\u00e9
 CategoryAddWindow.message=Meno novej kateg\u00f3rie
@@ -806,7 +815,6 @@ ConfigView.text.minutes=min\u00fat
 ConfigView.text.neverIgnore=Nikdy neignorova\u0165
 ConfigView.text.any=ak\u00fdko\u013evek
 DownloadManager.error.datamissing=Chybaj\u00face d\u00e1ta
-iconBar.queue.tooltip=Fronta
 MainWindow.menu.file.open.torrentforseeding=.torrent s\u00fabor (pre distrib\u00faciu)
 MainWindow.menu.language.refresh=&Obnovi\u0165
 ManagerItem.forced=Vyn\u00faten\u00e9
@@ -883,6 +891,9 @@ SpeedView.stats.uptime=Spusten\u00e9 (hod)
 SpeedView.stats.now=Pr\u00e1ve teraz
 SpeedView.stats.now.tooltip=Celkovo (Protokol)
 AutoMigration.useralert=V\u00fdsledky automatickej migr\u00e1cie konfigura\u010dn\u00fdch s\u00faborov:\n\n%1\nNEPRESUNUT\u00c9 S\u00daBORY MUSIA BY\u0164 PRESUNUT\u00c9 RU\u010cNE.
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Otvori\u0165 Torrent(y)
 OpenTorrentWindow.message=Experiment\u00e1lny
 OpenTorrentWindow.addFiles=&Prida\u0165 s\u00fabory
@@ -1110,6 +1121,8 @@ MyTrackerView.badnat.info=Zdroje/Klienti, ktor\u00fdm sa nepodarilo otestova\u01
 ConfigView.section.tracker.natchecktimeout=\u010casov\u00fd limit testovania (sek)
 ConfigView.section.file.perf.cache.enable=Povoli\u0165 diskov\u00fa cache
 ConfigView.section.file.perf.cache.size=Ve\u013ekos\u0165 cache v %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=&Prenosy
 MainWindow.menu.transfers.startalltransfers=&Spusti\u0165 v\u0161etky
 MainWindow.menu.transfers.stopalltransfers=&Zastavi\u0165 v\u0161etky
@@ -1193,8 +1206,6 @@ FilesView.fullpath=Pln\u00e1 cesta
 FilesView.remaining=Zost\u00e1va dielov
 TableColumn.header.trackername=Meno Trackera
 TableColumn.header.trackername.info=Meno Trackera zalo\u017een\u00e9 na oznamovacej URL
-ConfigView.label.announceport=Nastavi\u0165 port pre Tracker
-ConfigView.label.announceport.tooltip=Informuje Tracker o rozdielnom porte namiesto toho, na ktorom po\u010d\u00fava.
 ConfigView.group.override=Nastavenia
 ConfigView.section.file.perf.cache.notsmallerthan=Necacheova\u0165 s\u00fabory men\u0161ie ako (v %1)
 PeersView.menu.blockupload=Blokova\u0165 upload
@@ -1225,8 +1236,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Ve\u013ekos\u0165 SO_RCVBUF [0:
 ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Nastav\u00ed \u0161tandardn\u00fa hodnotu SO_RCVBUF socketu (v bajtoch), tozn. ve\u013ekos\u0165 prij\u00edmacieho okna TCP.\nVuze toto \u0161tandardne nenastavuje, pou\u017e\u00edva sa teda hodnota, ktor\u00fa nastav\u00ed OS.\nPozn.: Linux zdvojn\u00e1sob\u00ed zadan\u00fa hodnotu.
 ConfigView.section.connection.advanced.SO_SNDBUF=Ve\u013ekos\u0165 SO_SNDBUF [0: pou\u017ei \u0161tandardn\u00fa hodnotu OS]
 ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Nastav\u00ed \u0161tandardn\u00fa hodnotu SO_RCVBUF socketu (v bajtoch), tozn. ve\u013ekos\u0165 vysielacieho okna TCP.\nVuze toto \u0161tandardne nenastavuje, pou\u017e\u00edva sa teda hodnota, ktor\u00fa nastav\u00ed OS.\nPozn.: Linux zdvojn\u00e1sob\u00ed zadan\u00fa hodnotu.
-ConfigView.section.connection.advanced.IPTOS=Typ slu\u017eby odch\u00e1dzaj\u00faceho paketu (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Nastav\u00ed pole TOS (type-of-service) v IP hlavi\u010dke odch\u00e1dzaj\u00facich paketov.\nVuze toto pole \u0161tandardne nenastavuje, pou\u017e\u00edva sa teda hodnota, ktor\u00fa nastav\u00ed OS.\nPr\u00edklady hodn\u00f4t s\u00fa:\n0x02 pre IPTOS_LOWCOST\n0x04 pre IPTOS_RELIABILITY\n0x08 pre IPTOS_THROUGHPUT\n0x10 pre IPTOS_LOWDELAY\nPozn.: Niektor\u00e9 sie\u0165ov\u00e9 implement\u00e1cie m\u00f4\u017eu ignorova\u0165 t\u00fato hodnotu, teda nastavenie je ve\u013emi z\u00e1visl\u00e9 od verzie OS a JRE.
 ConfigView.section.interface.confirm_torrent_removal=Zobrazi\u0165 potvrdzuj\u00faci dial\u00f3g pri odoberan\u00ed Torrentu
 ConfigView.section.interface.confirm_torrent_removal.tooltip=Potvrdenie pri odoberan\u00ed Torrentu zo zobrazenia 'Moje Torrenty'.
 MyTorrentsView.confirm_torrent_removal=Naozaj chcete odstr\u00e1ni\u0165?\n
@@ -1372,6 +1381,7 @@ ConfigView.section.sharing.privatetorrent=S\u00fakromn\u00fd torrent - akceptuje
 MainWindow.menu.tools.nattest=Test &NAT / Firewallu
 Button.apply=Pou\u017ei\u0165
 Button.close=Zavrie\u0165
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=Pozn\u00e1mky k verzii
 dht.reseed.label=Za norm\u00e1lnych okolnost\u00ed nie je nutn\u00e9 op\u00e4tovne rozdistribuova\u0165 datab\u00e1zu. Av\u0161ak ak je po\u010det kontaktov mal\u00fd, m\u00f4\u017ee to pom\u00f4c\u0165 jej re-integr\u00e1cii.\nNevyplnen\u00e9 pol\u00ed\u010dko znamen\u00e1 zavedenie datab\u00e1zy z pripojen\u00fdch klientov, vyplnen\u00edm IP adresy zavediete datab\u00e1zu zo zn\u00e1meho klienta.
 dht.reseed.group=Op\u00e4tovn\u00e1 distib\u00facia
@@ -1464,8 +1474,8 @@ DHTView.operations.data=D\u00e1ta
 DHTView.general.reachable=Dosiahnute\u013en\u00e9:
 ConfigView.label.queue.maxactivetorrentswhenseeding=Max. po\u010det ak sa iba distribuuje [0:neobmedzen\u00fd]
 ConfigView.section.ipfilter.persistblocking=Uchova\u0165 detaily blokovan\u00fdch IP medzi re\u0161tartami
-FilesView.rename.choose.path=Vybra\u0165 nov\u00fd alebo existuj\u00faci s\u00fabor
 FilesView.menu.rename=Premenova\u0165 alebo zmeni\u0165 cie\u013e
+FilesView.rename.choose.path=Vybra\u0165 nov\u00fd alebo existuj\u00faci s\u00fabor
 FilesView.rename.confirm.delete.title=Potvrdi\u0165 odobratie
 FilesView.rename.confirm.delete.text=Potvrdi\u0165 odobratie origin\u00e1lneho s\u00faboru %1
 ConfigView.section.mode=M\u00f3d
@@ -1485,26 +1495,14 @@ ConfigView.section.interface.cleardecisionsbutton=Vy\u010disti\u0165
 configureWizard.welcome.usermodes=Nastavenie \u00darovne pou\u017e\u00edvate\u013ea ovplyvn\u00ed mno\u017estvo volieb zobrazen\u00fdch v menu N\u00e1stroje -> Nastavenie. Je v tvojom najlep\u0161om z\u00e1ujme spr\u00e1vne nastavi\u0165.
 diagnostics.log_found=Vuze nebol spr\u00e1vne ukon\u010den\u00fd. Pros\u00edm pozrite sa do diagnostick\u00fdch s\u00faborov v %1 a zv\u00e1\u017ete ich poslanie t\u00edmu Vuze ak to bolo zapr\u00ed\u010dinen\u00e9 chybou aplik\u00e1cie.
 ConfigView.section.logging.log0type=Inform\u00e1cie
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=Torrent s\u00fabory:
 Button.moveUp=Posun\u00fa\u0165 nahor
 Button.moveDown=Posun\u00fa\u0165 nadol
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=Ak m\u00e1te pomal\u00fd procesor, kde v\u00fdpo\u010dty hash hodn\u00f4t zaost\u00e1vaj\u00fa za z\u00e1pismi na disk (mnoho dokon\u010den\u00fdch dielov v zozname s\u0165ahovan\u00fdch dielov), m\u00f4\u017eete t\u00fdmto obmedzi\u0165 d\u013a\u017eku fronty kontrol a zn\u00ed\u017ei\u0165 tak vyu\u017eitie pam\u00e4ti.
-ConfigView.section.file.write_block_limit.explain=Ak m\u00e1te pomal\u00e9 z\u00e1pisy na disk, kedy je r\u00fdchlos\u0165 s\u0165ahovania v\u00e4\u010d\u0161ia ne\u017e r\u00fdchlos\u0165 z\u00e1pisu (mnoho \u010derven\u00fdch blokov v zozname s\u0165ahovan\u00fdch dielov), m\u00f4\u017eete t\u00fdmto obmedzi\u0165 d\u013a\u017eku fronty z\u00e1pisu a zn\u00ed\u017ei\u0165 tak vyu\u017eitie pam\u00e4ti.
-MainWindow.dht.status.running=Be\u017e\u00ed
-ConfigView.section.file.check_piece_limit=Max. nevybaven\u00fdch kontrol dielov\n[0: neobmedzene]. Ve\u013ekos\u0165 dielu z\u00e1vis\u00ed od Torrentu
-ConfigView.section.file.write_block_limit=Max. nevybaven\u00fdch z\u00e1pisov blokov na disk\n[0: neobmedzene]. Ve\u013ekos\u0165 bloku je %1
-configureWizard.nat.already_listening=Nie je mo\u017en\u00e9 otestova\u0165, port sa u\u017e pou\u017e\u00edva.\nNajsk\u00f4r zastavte v\u0161etky akt\u00edvne Torrenty a re\u0161tartujte Azureus.\nPotom znovu spustite tento test.
-SelectorGuard.repairmessage=Ak vid\u00edte t\u00fato spr\u00e1vu opakovane, a ste si ist\u00ed, \u017ee va\u0161e sie\u0165ov\u00e9 nastavenie je v poriadku,\na pou\u017e\u00edvate javu zo s\u00e9rie 1.4, tak ste pravdepodobne narazili\nna chybu JRE, a mali by ste upgradova\u0165 na nov\u0161iu s\u00e9riu javy 1.5 (5.0).
-PeersView.state.bitfield=\u010cakanie na bitov\u00e9 pole
-MyTorrentsView.menu.setSpeed=Nastavi\u0165 r\u00fdchlos\u0165 uploadu
-ConfigView.label.oldpollingstyle=Pou\u017ei\u0165 alternat\u00edvny socket polling - Zv\u00fd\u0161i sa z\u00e1\u0165a\u017e procesora, ale m\u00f4\u017ee pom\u00f4c\u0165 s odpojovan\u00edm zo siete
-ConfigView.section.connection.faulty_selector_mode=Enable faulty network selector compatibility mode [restart required]
-window.welcome.title.2300=Vitajte v programe Vuze 2.3.0.0
-ConfigView.section.file.win32movetorecyclebin=Pres\u00fava\u0165 zmazan\u00e9 s\u00fabory do Ko\u0161a
-window.welcome.title.2302=Vitajte v programe Vuze
-IrcView.title.full=IRC - Online Technick\u00e1 Podpora
-window.welcome.title.2304=Welcome to Vuze 2.3.0.4
-window.welcome.version=2304
-ConfigView.section.connection.faulty_selector_mode.tooltip=For those experiencing 100% cpu usage when connected to >60 total peer connections.
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Nezn\u00e1my
+ConfigView.label.announceport=Nastavi\u0165 port pre Tracker
+iconBar.queue.tooltip=Fronta
+MainWindow.menu.help.faq=&Wiki FAQ
 MainWindow.menu.help.donate=&Podpori\u0165 dot\u00e1ciou !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties b/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties
index 69ac73b..3520697 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=.torrent Datoteka
 Main.parameter.usage=Uporaba : java org.gudy.azureus2.cl.Main [oparametri] "Datoteka.torrent" "ciljna pot"
 Main.parameter.maxUploads=Max \u0161tevilo isto\u010dasnih Oddajanj
@@ -355,7 +356,6 @@ MyTorrentsView.menu.removeand.deletedata=Izbri\u0161i Datoteke
 MyTorrentsView.menu.removeand.deleteboth=Izbri\u0161i Oboje
 deletedata.title=!!! Opozorilo !!!
 deletedata.message1=Izbrisali boste vse PODATKE iz :\n
-deletedata.message2=\nAli \u017eelite nadaljevati?
 MainWindow.menu.file.configure=Nastavitveni \u010carovnik
 configureWizard.title=Nastavitveni \u010carovnik
 configureWizard.welcome.title=Dobrodo\u0161li v Azureusov Nastavitveni \u010carovnik
@@ -482,7 +482,6 @@ ConfigView.section.tracker=Sledilnik
 ConfigView.section.tracker.pollinterval=Povpra\u0161evalni interval Sledilnega klienta (sek)
 ConfigView.section.tracker.publishenable=Objavi torrent podrobnosti "<tracker_url>"
 ConfigView.section.tracker.ip=Sledilnikov zunanji IP naslov
-MainWindow.menu.help.faq=Wiki FAQ
 ConfigView.section.style.enableXPStyle=Omogo\u010di XP stil (potreben ponovni zagon)
 ConfigView.section.tracker.checkip=Preveri Naslov...
 ipCheckerWizard.title=Preveri IP - \u010carovnik
@@ -515,7 +514,6 @@ splash.openViews=Odpiram Poglede
 splash.plugin=Nalagam Vklju\u010dke :
 configureWizard.nat.tooManyPorts=Preve\u010d portov za test (9 max)
 ConfigView.section.color=Barvna Shema
-PeerSocket.unknown=Neznano
 MyTorrentsView.menu.publish=&Objavi...
 MyTrackerView.status.published=Objavljeno
 MyTrackerView.completed=Kon\u010dano
@@ -527,9 +525,15 @@ ConfigView.section.file.decoder.nodecoder=Nobeden
 IPChecker.external.service.no-ip.name=Ni-IPja
 IPChecker.external.service.no-ip.description=Dinami\u010dni in stati\u010dni DNS ponudnik\n(ni zastonj dostopne 'preveri naslov' storitve)
 ConfigView.section.tracker.publicenable=Omogo\u010di zunanje torrente
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=Prika\u017ee \u0161tevilo dostopnih kopij vsakega kosa.\n\u010de je to \u0161tevilo manj kot 1, ne vidi\u0161 ene cele kopije datoteke (in bo\u0161 morda imel te\u017eave pri odjemanju)
 GeneralView.label.trackerurl.tooltip=Klikni, da kopira\u0161 objavitveni url v odlo\u017ei\u0161\u010de
 GeneralView.label.trackerurlopen.tooltip=Klikni, da odpre\u0161 glavno stran sledilnika
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Posodobi GUI vsakih
 ConfigView.section.style.graphicsUpdate=Posodobi Grafi\u010dne vrstice vsakih N GUI posodobitev
 ConfigView.section.style.reOrderDelay=Preuredi tabele vsakih N GUI posodobitev [0: nikoli]
@@ -660,6 +664,9 @@ health.explain.yellow=pomeni, da je sledilnik vredu, da si povezan s sole\u017en
 health.explain.green=pomeni, da je vse vredu.
 ConfigView.section.style.alwaysRefreshMyTorrents=Vedno osve\u017ei Moje Torrente
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Ta mo\u017enost bo osve\u017eila pogled Moji Torrenti tudi, \u010de niso prikazani (uporabno za dolo\u010dene mIRC vklju\u010dke)
+#
+#2.0.7.0
+#
 security.certtruster.title=Opozorilo varnostnega certifikata
 security.certtruster.intro=Varnostni certifikat je bil izdan v dru\u017ebi, ki ji ne zaupa\u0161
 security.certtruster.resource=Surovina:
@@ -714,6 +721,9 @@ ConfigView.section.style.dropdiraction=Povleci in Spusti akcija za mape
 ConfigView.section.style.dropdiraction.opentorrents=Odpri Torrente
 ConfigView.section.style.dropdiraction.sharefolder=Delitvena mapa
 ConfigView.section.style.dropdiraction.sharefoldercontents=Delitvena vsebina
+#
+# 2.0.7.x
+#
 Categories.all=Vse
 Categories.uncategorized=Nekategorizirano
 CategoryAddWindow.message=Napi\u0161i ime nove kategorije
@@ -790,7 +800,6 @@ ConfigView.text.minutes=minute
 ConfigView.text.neverIgnore=Nikoli ne ignoriraj
 ConfigView.text.any=katerikoli
 DownloadManager.error.datamissing=Manjkajo podatki
-iconBar.queue.tooltip=Daj na \u010dakalno vrsto
 MainWindow.menu.file.open.torrentforseeding=.torrent datoteka (za sejanje)
 MainWindow.menu.language.refresh=&Osve\u017ei
 ManagerItem.forced=Prisiljen
@@ -858,6 +867,9 @@ SpeedView.stats.downloaded=Odjeto
 SpeedView.stats.uploaded=Oddano
 SpeedView.stats.uptime=Gor \u010das (ure)
 AutoMigration.useralert=Avto-migracijski razultati Azureusovih uporabni\u0161kih konfiguracijskih datotek/map:\n\n%1\nKakr\u0161ikoli neuspehi morajo biti prestavljeni ro\u010dno.\nNE POZABI POSODOBITI SHRANITVENIH POTI V NASTAVITVAH, \u010cE SO BILE PRESTAVLJENE!
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Odpri Torrent(e)
 OpenTorrentWindow.message=Eksperimentalno
 OpenTorrentWindow.addFiles=&Dodaj datoteke
@@ -1083,21 +1095,15 @@ ConfigView.section.server.enableudp=Omogo\u010di UDP sledilni klientov protokol.
 upnp.mapping.dataportudp=UDP sledilnikov klientov port
 ConfigView.section.tracker.publishenabledetails=Objavi podrobnosti torrent datoteke in peera
 ConfigView.label.overrideip=Razveljavi IP naslov poslan sledilniku\n - V\u010dasih potrebno za NAT
+#file can be a URL or a path in the jar
 ConfigView.section.logging.log0type=Informacije
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 OpenTorrentWindow.torrentLocation=Torrent datoteke:
 Button.moveUp=Prestavi gor
 Button.moveDown=Prestavi dol
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=\u010ce ima\u0161 tako po\u010dasen procesor, da so hash kalkulacije po\u010dasnej\u0161e kot pisanje na disk (veliko kon\u010danih kosov v pogledu kosov), lahko omejevanje preverjevalne vrste zmanj\u0161a uporabo spomina.
-ConfigView.section.file.write_block_limit.explain=\u010ce ima\u0161 po\u010dasen disk, tako da je pisanje na disk po\u010dasnej\u0161e od hitrosti odjemanja (veliko rde\u010dih blokov v pogledu kosov), lahko pomaga omejevanje dol\u017eine vrste pisanja (lahko zmanj\u0161a uporabo spomina).
-ConfigView.section.file.check_piece_limit=Maksimum nedosegljivih preverjevalnih kosov\n[0: neomejeno]. Velikost kosa je odvisna od torrenta
-ConfigView.section.file.write_block_limit=Maksimum nedosegljivih disk blok zapisov\n[0: neomejeno]. Velikost bloka %1
-configureWizard.nat.already_listening=Ne morem testirati, ker je poslu\u0161alni port \u017ee\nv uporabi. Prosim ustavi vse aktivne torrente in ponovno za\u017eeni Azureus.\npotem ponovno za\u017eeni ta test.
-ConfigView.label.oldpollingstyle=Uporabi alternativni socket polling - Pove\u010da uporabo procesorja vendar lahko pomaga pri padanju omre\u017eja.
-SystemTray.menu.stopalldownloads=Ustavi vse odjemke
-ConfigView.label.slowconnect=Po\u010dasi priklju\u010duj nove sole\u017enike\n - Za uporabnike s slabo spletno povezavo
-ConfigView.section.proxy.description=omogo\u010di proxyiranje sledilnika in sole\u017enikovih komunikacij.\nProxyiranje sole\u017enikov potrebuje SOCKS-kompatitabilen proxy.\nPotreben je ponovni zagon.
-SystemTray.menu.startalldownloads=Za\u010dni vse odjemke
-ConfigView.section.proxy.description2=omogo\u010di proxyiranje sledilnikovih komunikacij.\nPotreben je ponovni zagon.
-Scrape.status.NoMultiSupport=Ve\u010d hash scrapes na zahtevo ni podprto.
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Neznano
+iconBar.queue.tooltip=Daj na \u010dakalno vrsto
+MainWindow.menu.help.faq=Wiki FAQ
 MainWindow.menu.help.donate=Prispevaj ($2,$5,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sr.properties b/org/gudy/azureus2/internat/MessagesBundle_sr.properties
index a5ce52e..9bee999 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sr.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sr.properties
@@ -489,7 +489,6 @@ ConfigView.label.moveremoved=\u041f\u043e\u043c\u0435\u0440\u0438 \u0437\u0430\u
 ConfigView.label.savetorrents=\u0421\u0430\u0447\u0443\u0432\u0430\u0458 \u0442\u043e\u0440\u0435\u043d\u0442 \u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0435
 MainWindow.menu.view.mytracker=\u041c\u043e\u0458 &\u043f\u0440\u0430\u0442\u0438\u043b\u0430\u0446
 MyTrackerView.title.full=\u041c\u043e\u0458 \u043f\u0440\u0430\u0442\u0438\u043b\u0430\u0446
-Tab.closeHint=(\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 'Esc' \u0437\u0430 \u0437\u0430\u0442\u0432\u0430\u0440\u0430\u045a\u0435)
 MyTrackerView.name=\u0418\u043c\u0435
 MyTrackerView.tracker=\u041f\u0440\u0430\u0442\u0438\u043b\u0430\u0446
 MyTrackerView.status=\u0421\u0442\u0430\u0442\u0443\u0441
@@ -720,7 +719,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u041e\u0432\u0430 \u04
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u043a\u0438 \u043f\u043e\u043c\u0430\u043a (\u0437\u0430\u043a\u0440\u043f\u0430 \u0437\u0430 \u0413\u0422\u041a)
 security.certtruster.title=\u0423\u043f\u043e\u0437\u043e\u0440\u0435\u045a\u0435 \u043e \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u043d\u043e\u043c \u0441\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0442\u0443
 security.certtruster.intro=\u0421\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u043d\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0458\u0435 \u0438\u0437\u0434\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0458\u0430 \u0443 \u043a\u043e\u0458\u0443 \u043d\u0435\u043c\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u0440\u0435\u045a\u0430
 security.certtruster.resource=\u0420\u0435\u0441\u0443\u0440\u0441:
@@ -1932,13 +1930,8 @@ MainWindow.menu.view.iconbar=\u0410\u043b\u0430\u0442\u043d\u0430 \u0442\u0440\u
 MyTorrentsView.menu.rename=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458
 MyTorrentsView.menu.rename.displayed=\u041f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u0435
 MyTorrentsView.menu.rename.save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u0441\u0442\u0430\u0437\u0443 \u0437\u0430 \u0447\u0443\u0432\u0430\u045a\u0435
-MyTorrentsView.menu.rename.displayed_and_save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u043e\u0431\u0430
 MyTorrentsView.menu.rename.displayed.enter.title=\u041f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u0435
 MyTorrentsView.menu.rename.displayed.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0440\u0438\u0458\u0435\u043c.\n\u0410\u043a\u043e \u0441\u0435 \u043d\u0435 \u0443\u043d\u0435\u0441\u0435 \u043d\u0438\u043a\u0430\u043a\u0430\u0432 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0440\u0438\u0441\u0442\u0438 \u0441\u0435 \u0438\u0437\u0432\u043e\u0440\u043d\u043e \u0438\u043c\u0435.
-MyTorrentsView.menu.rename.save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u0441\u0442\u0430\u0437\u0443 \u0437\u0430 \u0447\u0443\u0432\u0430\u045a\u0435
-MyTorrentsView.menu.rename.save_path.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0441\u0442\u0430\u0437\u0435 \u0437\u0430 \u0447\u0443\u0432\u0430\u045a\u0435 \u043e\u0432\u043e\u0433 \u043f\u0440\u0438\u0458\u0435\u043c\u0430.\n\u0410\u043a\u043e \u0441\u0435 \u043d\u0435 \u0443\u043d\u0435\u0441\u0435 \u043d\u0438\u043a\u0430\u043a\u0430\u0432 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0440\u0438\u0441\u0442\u0438 \u0441\u0435 \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u0435.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u043f\u0440\u0438\u0458\u0435\u043c
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0440\u0438\u0458\u0435\u043c.\n\u0410\u043a\u043e \u0441\u0435 \u043d\u0435 \u0443\u043d\u0435\u0441\u0435 \u043d\u0438\u043a\u0430\u043a\u0430\u0432 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0440\u0438\u0441\u0442\u0435 \u0441\u0435 \u0438\u0437\u0432\u043e\u0440\u043d\u0435 \u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0438.
 MyTorrentsView.menu.edit_comment=\u0423\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 MyTorrentsView.menu.edit_comment.enter.title=\u0423\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 MyTorrentsView.menu.edit_comment.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0440\u0438\u0458\u0435\u043c.
@@ -2155,7 +2148,6 @@ v3.MainWindow.button.comment=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 v3.MainWindow.button.viewdetails=\u0414\u0435\u0442\u0430\u0459\u0438
 v3.MainWindow.button.play=\u041f\u0443\u0441\u0442\u0438
 v3.MainWindow.button.cancel=\u041e\u0442\u043a\u0430\u0436\u0438
-v3.MainWindow.button.sendtofriend=\u0414\u0435\u043b\u0438
 v3.MainWindow.view.wait=\u041f\u043e\u0433\u043b\u0435\u0434 \u0441\u0435 \u0443\u0447\u0438\u0442\u0430\u0432\u0430, \u043c\u043e\u043b\u0438\u043c\u043e \u0434\u0430 \u0441\u0430\u0447\u0435\u043a\u0430\u0442\u0435...
 v3.MainWindow.xofx=%1 \u043e\u0434 %2
 v3.MainWindow.Loading=\u0423\u0447\u0438\u0442\u0430\u0432\u0430\u045a\u0435, \u043c\u043e\u043b\u0438\u043c\u043e \u0434\u0430 \u0441\u0430\u0447\u0435\u043a\u0430\u0442\u0435...
@@ -2165,9 +2157,6 @@ v3.mb.delPublished.title=\u041f\u0440\u0435\u043a\u0438\u043d\u0438 \u0437\u0430
 v3.mb.delPublished.text=\u0423\u041f\u041e\u0417\u041e\u0420\u0415\u040a\u0415: \u041e\u0432\u043e \u0434\u0435\u0458\u0441\u0442\u0432\u043e \u041d\u0415\u040b\u0415 \u0443\u043a\u043b\u043e\u043d\u0438\u0442\u0438 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0441\u0430\u0434\u0440\u0436\u0430\u0458 \u201e%1\u201f \u0441\u0430 <A HREF="%2">%3</A> .\n\n\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 \u201e\u0423\u043a\u043b\u043e\u043d\u0438\u201f \u0441\u0430\u043c\u043e \u0430\u043a\u043e \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u0432\u0430\u0448 \u0441\u0430\u0434\u0440\u0436\u0430\u0458 \u043e\u0441\u0442\u0430\u043d\u0435 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0438 \u0441\u043f\u0440\u0435\u043c\u0430\u043d \u0437\u0430 \u043f\u0440\u0438\u0458\u0435\u043c, \u0430\u043b\u0438 \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u043e\u0441\u043b\u043e\u0431\u043e\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0458 \u043f\u0440\u043e\u043f\u0443\u0441\u043d\u0438 \u043e\u043f\u0441\u0435\u0433.  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0434\u0430 \u0458\u0435 \u043f\u0440\u0435\u043d\u043e\u0441 \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0435 \u043d\u0435\u0433\u043e \u0448\u0442\u043e \u0442\u043e \u0443\u0440\u0430\u0434\u0438\u0442\u0435 (<A HREF="%4">\u043a\u0430\u043a\u043e</A>?).\n\n\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 \u201e\u041e\u0442\u043a\u0430\u0436\u0438\u201f \u0430\u043a\u043e \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u043f\u043e\u0442\u043f\u0443\u043d\u043e \u0443\u043a\u043b\u043e\u043d\u0438\u0442\u0435 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0441\u0430\u0434\u0440\u0436\u0430\u0458 \u0441\u0430 %3, \u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u0434\u0443\u0433\u043c\u0435 (X) \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0443 \u201e\u041e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0441\u0430\u0434\u0440\u0436\u0430\u0458\u201f \u043d\u0430 \u0458\u0435\u0437\u0438\u0447\u043a\u0443 \u0441\u0430 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d\u0438\u043c \u0441\u0430\u0434\u0440\u0436\u0430\u0458\u0438\u043c\u0430.\n\n<A HREF="%4">\u0412\u0438\u0448\u0435 \u043f\u043e\u043c\u043e\u045b\u0438</A>.\n\n
 v3.mb.delPublished.delete=&\u0423\u043a\u043b\u043e\u043d\u0438
 v3.mb.delPublished.cancel=\u041e\u0442\u043a\u0430&\u0436\u0438
-v3.HomeReminder.title=\u0414\u043e\u0434\u0430\u0442 \u043f\u0440\u0438\u0458\u0435\u043c
-v3.HomeReminder.text=\u0414\u043e\u0434\u0430\u0442\u043e \u043d\u0430 \u0441\u043f\u0438\u0441\u0430\u043a \u0437\u0430 \u043f\u0440\u0438\u0458\u0435\u043c: \u201e%1\u201f.\n\n\u005cu0410\u043a\u043e \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u043f\u0440\u0435\u0433\u043b\u0435\u0434\u0430\u0442\u0435 \u043d\u0430\u043f\u0440\u0435\u0434\u0430\u043a \u043f\u0440\u0438\u0458\u0435\u043c\u0430, \u0438\u043b\u0438 \u0434\u0430 \u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u045a\u0443, \u043f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 \u043d\u0435\u0433\u0434\u0435 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0438 \u043f\u0430\u043d\u0435\u043b.
-v3.HomeReminder.gohome=\u041f\u0440\u0435\u0431\u0430\u0446\u0438 \u0441\u0435 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0438 \u043f\u0430\u043d\u0435\u043b
 v3.mb.openFile.button.play=\u041f\u0443\u0441\u0442\u0438
 v3.mb.PlayFileNotFound.title=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0430 \u043d\u0438\u0458\u0435 \u043d\u0430\u0452\u0435\u043d\u0430
 v3.mb.PlayFileNotFound.text=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0435 \u0437\u0430 \u201e%1\u201f \u0441\u0443 \u0438\u043b\u0438 \u0443\u043a\u043b\u043e\u045a\u0435\u043d\u0435 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0458\u0443.
@@ -2325,23 +2314,10 @@ v3.MainWindow.text.get.started=\u0423\u0432\u043e\u0434
 v3.MainWindow.text.my.account=\u041c\u043e\u0458 \u043d\u0430\u043b\u043e\u0433
 v3.MainWindow.text.my.profile=\u041f\u0440\u043e\u0444\u0438\u043b
 OpenTorrentWindow.simple.open=\u041c\u0435\u0441\u0442\u043e \u0442\u043e\u0440\u0435\u043d\u0442\u0430 (\u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0430, \u0423\u0420\u041b, \u0445\u0435\u0448)
-#v3.MainWindow.menu.view.configuration=Preferences
-#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
-#v3.TorrentOptionsView.title.short=Preferences
-#v3.TorrentOptionsView.title.full=Preferences
-#v3.ConfigView.title.short=Preferences
-#v3.ConfigView.title.full=Preferences
 MainWindow.menu.window.zoom.maximize=\u0423\u0432\u0435\u045b\u0430\u0458
-v3.buddy.menu.viewprofile=\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043f\u0440\u043e\u0444\u0438\u043b\u0430
-v3.activity.buddy-request=\u0418\u043c\u0430\u0442\u0435 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0441\u043a\u0438 \u043f\u043e\u0437\u0438\u0432 \u043e\u0434 %1
-v3.activity.buddy-request.accept=\u041f\u0440\u0438\u0445\u0432\u0430\u0442\u0438
-v3.activity.buddy-request.multi=\u0418\u043c\u0430\u0442\u0435 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0441\u043a\u0438 \u043f\u043e\u0437\u0438\u0432 [#%3] \u043e\u0434 %1
-v3.activity.buddy-linkup=\u0412\u0438 \u0438 %1 \u0441\u0442\u0435 \u0441\u0430\u0434\u0430 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0438
 MainWindow.dialog.select.vuze.file=\u041e\u0434\u0430\u0431\u0435\u0440\u0438 \u0412\u0458\u0443\u0437 \u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0443
 MainWindow.menu.file.open.vuze=\u0412\u0458\u0443\u0437 \u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0430...
 v3.activity.header.downloads=\u041f\u0440\u0435\u0443\u0437\u0438\u043c\u0430\u045a\u0430
-v3.activity.buddy-invited=\u041f\u043e\u0441\u043b\u0430\u043b\u0438 \u0441\u0442\u0435 \u043f\u043e\u0437\u0438\u0432 \u043a\u0430 %1.
-v3.activity.buddy-invited.multi=\u041f\u043e\u0441\u043b\u0430\u043b\u0438 \u0441\u0442\u0435 \u043f\u043e\u0437\u0438\u0432 \u0441\u043b\u0435\u0434\u0435\u045b\u0438\u043c \u043e\u0441\u043e\u0431\u0430\u043c\u0430:\n%1
 iconBar.play=\u041f\u0443\u0441\u0442\u0438
 iconBar.queue.tooltip=\u0420\u0435\u0434
 v3.MainWindow.menu.getting_started=&\u041f\u043e\u0447\u0435\u0442\u0430\u043a
@@ -2350,12 +2326,7 @@ MainWindow.menu.help.faq=&\u0427\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u044
 MainWindow.menu.community.wiki=&\u0412\u0438\u043a\u0438
 MainWindow.menu.community.forums=&\u0424\u043e\u0440\u0443\u043c
 MainWindow.menu.community.blog=\u0412\u0458\u0443\u0437 &\u0411\u043b\u043e\u0433
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0434\u0430\u0458 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0435
 MainWindow.menu.help.support=&\u041f\u043e\u043c\u043e\u045b \u0438 \u043f\u043e\u0434\u0440\u0448\u043a\u0430
-v3.MainWindow.menu.publish.new=\u041e\u0431\u0458\u0430\u0432\u0438 \u043d\u043e\u0432\u0438 \u0441\u0430\u0434\u0440\u0436\u0430\u0458
-v3.MainWindow.menu.publish.mine=\u0412\u0430\u0448 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d\u0438 \u0441\u0430\u0434\u0440\u0436\u0430\u0458
-v3.MainWindow.menu.publish.about=\u041e \u043e\u0431\u0458\u0430\u0432\u0459\u0438\u0432\u0430\u045a\u0443...
 v3.activity.button.readall=\u0421\u0432\u0435 \u043a\u0430\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e
-#what you've watched? Discover more with a single click...
 v3.activity.button.watchall=
 MainWindow.menu.help.donate=&\u0414\u0430\u0458\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0433
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties b/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties
index 666bce3..39397c2 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties
@@ -730,7 +730,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Denna inst\u00e4llning
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=Bugfix f\u00f6r GTK
 security.certtruster.title=S\u00e4kerhetsvarning
 security.certtruster.intro=Certifikatet \u00e4r utgivet av ett f\u00f6retag som du inte litar p\u00e5
 security.certtruster.resource=Resurs:
@@ -1926,13 +1925,8 @@ MainWindow.menu.view.iconbar=Verktygsf\u00e4lt
 MyTorrentsView.menu.rename=Byt namn
 MyTorrentsView.menu.rename.displayed=Byt Visningsnamn
 MyTorrentsView.menu.rename.save_path=Byt namn p\u00e5 m\u00e5lkatalog
-MyTorrentsView.menu.rename.displayed_and_save_path=Byt namn p\u00e5 b\u00e5da
 MyTorrentsView.menu.rename.displayed.enter.title=Byt Visningsnamn
 MyTorrentsView.menu.rename.displayed.enter.message=Skriv nytt namn f\u00f6r denna nedladdning\nOm inget skrivs anv\u00e4nds det ursprungliga namnet
-MyTorrentsView.menu.rename.save_path.enter.title=Byt namn p\u00e5 m\u00e5lkatalog
-MyTorrentsView.menu.rename.save_path.enter.message=Skriv i ett nytt namn p\u00e5 katalogen d\u00e4r du vill spara.\nOm ingen text anges anv\u00e4nds nedladdningens namn.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Byt namn p\u00e5 nedladdning
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Skriv nytt namn f\u00f6r denna nedladdning\nOm inget skrivs anv\u00e4nds det ursprungliga v\u00e4rdet
 MyTorrentsView.menu.edit_comment=Ange kommentar
 MyTorrentsView.menu.edit_comment.enter.title=Ange kommentar
 MyTorrentsView.menu.edit_comment.enter.message=Skriv en kommentar f\u00f6r nedladdningen/nedladdningarna h\u00e4r.
@@ -2138,7 +2132,6 @@ v3.MainWindow.button.comment=Kommentar
 v3.MainWindow.button.viewdetails=Visa Detaljer
 v3.MainWindow.button.play=Spela Upp
 v3.MainWindow.button.cancel=Avbryt
-v3.MainWindow.button.sendtofriend=Dela ut Torrent
 v3.MainWindow.button.preview=F\u00f6rhandsvisning
 v3.MainWindow.view.wait=Initialiserar vy, v\u00e4nligen v\u00e4nta...
 v3.MainWindow.xofx=%1 av %2
@@ -2372,27 +2365,9 @@ Button.bar.share=Dela
 Button.bar.add=L\u00e4gg till
 Button.bar.edit=Redigera
 Button.bar.edit.cancel=St\u00e4ng redigering
-v3.Share.menu=Dela inneh\u00e5ll
-v3.Share.header=Dela
-v3.Share.add.buddy=L\u00e4gg till V\u00e4nner
-v3.Share.add.edit.buddy=L\u00e4gg till/Redigera V\u00e4nner
-v3.Share.add.buddy.all=Dela med alla
-v3.Share.add.buddy.existing=Nuvarande V\u00e4nner
-v3.Share.add.buddy.new=Nya V\u00e4nner:
-v3.Share.buddies=V\u00e4nner
-v3.Share.invite.buddies.prompt=Bjud in fler v\u00e4nner att dela med
-v3.Share.send.now=Skicka
-v3.Share.disclaimer.link=L\u00e4s mer
-v3.buddy.menu.viewprofile=Visa Profil
-v3.buddy.menu.remove=Ta bort V\u00e4n
 v3.MainWindow.menu.view.pluginbar=Pluginpanelen
-v3.MainWindow.menu.view.buddies-viewer=V\u00e4npanelen
-v3.activity.buddy-request.accept=Acceptera
-v3.buddies.friends=V\u00e4nner
-v3.buddies.remove=Ta bort v\u00e4n
 MainWindow.dialog.select.vuze.file=V\u00e4lj Vuze Fil
 MainWindow.menu.file.open.vuze=Vuze Fil...
-azbuddy.ui.dialog.disable.title=Inaktivera plugin f\u00f6r V\u00e4nner
 metasearch.addtemplate.title=Installera S\u00f6kmall?
 metasearch.addtemplate.desc=\u00c4r du s\u00e4ker att du vill installera s\u00f6kmallen som heter '%1'?
 v3.share.private.title=Dela Ut Torrent
@@ -2401,8 +2376,6 @@ metasearch.addtemplate.dup.title=Kopiera Mall
 metasearch.addtemplate.dup.desc=S\u00f6kmallen %1 \u00e4r redan installerad
 metasearch.export.select.template.file=Spara Mall
 metasearch.import.select.template.file=\u00d6ppna Mall
-v3.MainWindow.button.newtag.share=Ny! Dela Torrent
-v3.buddies.faq=L\u00e4s mer
 dialog.uiswitch.title=V\u00e4xla till Vuze UI
 dialog.uiswitch.text=Du m\u00e5ste k\u00f6ra Vuze gr\u00e4nssnittet f\u00f6r att anv\u00e4nda den h\u00e4r funktionen\n\nVuze m\u00e5ste startas om.
 dialog.uiswitch.button=V\u00e4xla till Vuze UI
@@ -2410,15 +2383,12 @@ v3.MainWindow.button.download=Ladda ned
 v3.MainWindow.button.run=\u00d6ppna det h\u00e4mtade objektet.
 v3.activity.header.downloads=Nedladdningar
 v3.activity.header.vuze.news=Vuze Nyheter
-message.intro.friends=L\u00e4gg till V\u00e4nner.\nDela Torrents.\nLadda ned snabbare.
 azbuddy.tracker.bbb.status.title.tooltip=Dubbelklicka f\u00f6r detaljer
 azbuddy.tracker.bbb.status.nli=Inloggning kr\u00e4vs
 v3.MainWindow.search.go.tooltip=Utf\u00f6r s\u00f6kningen
 v3.MainWindow.search.last.tooltip=G\u00e5 tillbaka till s\u00f6kresultaten
 metasearch.addtemplate.done.title=Mall Tillagd
 metasearch.addtemplate.done.desc=Mallen '%1' las till.\nDen kommer att anv\u00e4ndas n\u00e4sta g\u00e5ng du s\u00f6ker!
-v3.MainWindow.button.share=Dela ut inneh\u00e5ll
-v3.buddies.remove.buddy.dialog.title=Ta bort
 ConfigView.section.security.nopw=Inget l\u00f6senord angavs
 fileplugininstall.install.title=Installera Plugin?
 fileplugininstall.install.desc=\u00c4r du s\u00e4ker att du vill installera plugin '%1', version %2?
@@ -2426,10 +2396,7 @@ fileplugininstall.duplicate.title=Duplicera Plugin
 fileplugininstall.duplicate.desc=Plugin '%1', version %2 \u00e4r redan installerad
 azbuddy.os_not_avail=Inte Tillg\u00e4nglig
 azbuddy.os_busy=Upptagen
-v3.buddy.menu.chat=Chatt
-v3.chat.wrongversion=%1 anv\u00e4nder en version av Vuze som inte st\u00f6djer Chatt.
 azbuddy.enable_chat_notif=Aktivera Chatt notifieringar
-v3.buddies.dnd.info.dialog.remember=Visa inte det h\u00e4r meddelandet igen
 progress.window.msg.progress=Var v\u00e4nlig och v\u00e4nta medans \u00e5tg\u00e4rden utf\u00f6rs
 DetailedListView.title=Detaljerad Lista
 plugins.init.force_enabled=Vuze har uppt\u00e4ckt att plugin "%1" var inaktiverat - det har aktiverats s\u00e5 att Vuze kan fungera korrekt.
@@ -2470,15 +2437,10 @@ TableColumn.header.Thumbnail=Ikon
 v3.MainWindow.menu.getting_started=Komma ig\u00e5n&g
 MainWindow.menu.help.faq=&FAQ 
 MainWindow.menu.community.blog=Vuze &Blogg
-MainWindow.menu.community.add_friends=L\u00e4gg till V\u00e4nner
 MainWindow.menu.help.support=&Hj\u00e4lp och Support
 externalLogin.title=Inloggning kr\u00e4vs
 Button.done=F\u00e4rdig
 GeneralView.torrent_created_on_and_by=%1 av %2
-v3.Share.wizard.title=Guide -- Utdelningsguide
-v3.AddFriends.header.message=L\u00e4gg till v\u00e4nner och b\u00f6rja dela med dig av dina torrent favoriter.
-v3.AddFriends.header=L\u00e4gg till v\u00e4nner
-v3.AddFriends.wizard.title=Guide -- L\u00e4gg till V\u00e4nner
 Button.continue=Forts\u00e4tt
 Button.preview=F\u00f6rhandsgranska
 Subscription.menu.forcecheck=Uppdatera Nu
@@ -2487,9 +2449,6 @@ Subscription.menu.remove=Radera
 sidebar.Library=Mitt Bibliotek
 sidebar.LibraryDL=Laddar ner
 authenticator.details=Detaljer
-v3.MainWindow.menu.publish.new=Publicera Nytt Inneh\u00e5ll
-v3.MainWindow.menu.publish.mine=Ditt Publicerade Inneh\u00e5ll
-v3.MainWindow.menu.publish.about=Om Publicering...
 v3.MainWindow.menu.showActionBarText=Visa text i verktygsf\u00e4ltet
 subscript.import.fail.title=Import Misslyckades
 subscript.import.fail.desc=Detaljer: %1
@@ -2506,7 +2465,6 @@ Subscription.menu.reset=\u00c5terst\u00e4ll till Utg\u00e5ngsl\u00e4get
 ConfigView.section.Subscriptions=Prenumerationer
 subscriptions.config.maxresults=Max antal resultat som sparas per prenumeration [0: obegr\u00e4nsat]
 v3.activity.button.readall=Markera Alla som L\u00e4sta
-ConfigView.interface.start.library=Starta i Biblioteket
 TableColumn.header.activityNew=Ny
 TableColumn.header.activityType=Typ
 TableColumn.header.activityText=Meddelande
@@ -2534,7 +2492,6 @@ Wizard.Subscription.rss.subtitle3=N\u00e4r du har sparat f\u00e5r du uppdatering
 Wizard.Subscription.subscribe.library=Inneh\u00e5ll i ditt bibliotek
 Wizard.Subscription.subscribe.subscriptions=Tillh\u00f6rande prenumerationer
 Wizard.Subscription.subscribe.library.empty=\u00c4r inga prenumerationer tillg\u00e5ngliga?\n \nTitta efter den oranga prenumerationsknappen p\u00e5 Vuze HD N\u00e4tverket.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">L\u00e4s mer</A>
-TableColumn.header.videoLength=Videons L\u00e4ngd
 message.confirm.delete.title=Bekr\u00e4fta Radering
 message.confirm.delete.text=Vill du verkligen radera '%1'?
 Subscription.menu.properties=Egenskaper
@@ -2574,8 +2531,6 @@ v3.iconBar.down.tooltip=Flytta ned\nH\u00e5ll ned musknappen f\u00f6r att flytta
 Button.deleteContent.fromLibrary=Ta bort fr\u00e5n Biblioteket
 Button.deleteContent.fromComputer=Radera fr\u00e5n Datorn
 v3.deleteContent.message=\nVill du radera '%1' fr\u00e5n din dator eller bara ta bort den fr\u00e5n ditt Vuze Bibliotek?
-v3.library.infobar.text1=Letar du efter den Avancerade vyn?
-v3.library.infobar.text2=Anv\u00e4nd Vy knappen i verktygsf\u00e4ltet ovanf\u00f6r.
 v3.MainWindow.menu.view.toolbartext=Text i Verktygsf\u00e4ltet
 v3.MainWindow.menu.view.asSimpleList=Enkel Lista
 v3.MainWindow.menu.view.asAdvancedList=Avancerad Lista
@@ -2593,8 +2548,6 @@ v3.MainWindow.menu.contentnetworks.manage=Hantera HD N\u00e4tverk
 azbuddy.ui.menu.cat=Kategorier
 azbuddy.ui.menu.cat.set_msg=Kommaseparerad lista av kategorier eller 'Alla'
 azbuddy.ui.menu.cat_subs=Prenumerera
-v3.buddy.prop.dn=Visningsnamn
-v3.buddy.prop.un=Anv\u00e4ndarnamn
 v3.dialog.cnmanage.title=Hantera menyn f\u00f6r HD N\u00e4tverk
 TableColumn.header.TableColumnChosenColumn=Vald Kolumn
 ColumnSetup.chosencolumns=Valda Kolumner
diff --git a/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties b/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties
index f81796d..df4c18a 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 .torrent
 Main.parameter.usage=\u0e43\u0e0a\u0e49 : java org.gudy.azureus2.cl.Main [parameters] "file.torrent" "save path"
 Main.parameter.maxUploads=\u0e08\u0e33\u0e19\u0e27\u0e19\u0e2a\u0e39\u0e07\u0e2a\u0e38\u0e14\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2d\u0e31\u0e1e\u0e42\u0e2b\u0e25\u0e14
@@ -354,7 +355,6 @@ MyTorrentsView.menu.removeand.deletedata=\u0e25\u0e1a &\u0e02\u0e49\u0e2d\u0e21\
 MyTorrentsView.menu.removeand.deleteboth=\u0e25\u0e1a &\u0e17\u0e31\u0e49\u0e07\u0e04\u0e39\u0e48
 deletedata.title=!!! \u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19 !!!
 deletedata.message1=\u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e08\u0e30\u0e25\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e08\u0e32\u0e01 :\n
-deletedata.message2=\n\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e08\u0e30\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d?
 MainWindow.menu.file.configure=\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07 &\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34
 configureWizard.title=\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34
 configureWizard.welcome.title=\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07 Vuze
@@ -471,7 +471,6 @@ MyTorrentsView.menu.host.error.message=\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e1
 ConfigView.section.tracker.pollinterval=Tracker client poll interval (\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35)
 ConfigView.section.tracker.publishenable=\u0e2d\u0e2d\u0e01\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14 torrent \u0e17\u0e35\u0e48 "<tracker_url>"
 ConfigView.section.tracker.ip=Tracker \u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01
-MainWindow.menu.help.faq=&Wiki \u0e04\u0e33\u0e16\u0e32\u0e21\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e16\u0e32\u0e21\u0e1a\u0e48\u0e2d\u0e22
 ConfigView.section.style.enableXPStyle=\u0e43\u0e0a\u0e49\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a XP (\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e23\u0e34\u0e48\u0e21\u0e17\u0e33\u0e07\u0e32\u0e19\u0e43\u0e2b\u0e21\u0e48)
 ConfigView.section.tracker.checkip=\u0e04\u0e49\u0e19\u0e1e\u0e1a\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e42\u0e14\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34...
 ipCheckerWizard.title=\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a IP \u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34
@@ -504,7 +503,6 @@ splash.openViews=\u0e40\u0e1b\u0e34\u0e14\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25
 splash.plugin=\u0e42\u0e2b\u0e25\u0e14\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e2a\u0e23\u0e34\u0e21 : 
 configureWizard.nat.tooManyPorts=\u0e1b\u0e23\u0e34\u0e21\u0e32\u0e13\u0e1e\u0e2d\u0e23\u0e4c\u0e15\u0e21\u0e32\u0e01\u0e40\u0e01\u0e34\u0e19\u0e01\u0e27\u0e48\u0e32\u0e17\u0e35\u0e48\u0e08\u0e30\u0e17\u0e14\u0e2a\u0e2d\u0e1a (\u0e2a\u0e39\u0e07\u0e2a\u0e38\u0e14 9)
 ConfigView.section.color=\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e2a\u0e35
-PeerSocket.unknown=\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49
 MyTorrentsView.menu.publish=&\u0e2d\u0e2d\u0e01...
 MyTrackerView.status.published=\u0e2d\u0e2d\u0e01
 MyTrackerView.completed=\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19
@@ -518,9 +516,15 @@ IPChecker.external.service.no-ip.description=Dynamic and Static DNS service prov
 ConfigView.section.tracker.publicenable=\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 torrents \u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01
 ConfigView.label.playdownloadspeech=\u0e1e\u0e39\u0e14\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e01\u0e32\u0e23\u0e14\u0e32\u0e27\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19
 ConfigView.label.playdownloadspeech.info=\u0e01\u0e32\u0e23\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e43\u0e0a\u0e49\u0e14\u0e35\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e01\u0e31\u0e1a\u0e20\u0e32\u0e29\u0e32\u0e2d\u0e31\u0e07\u0e01\u0e24\u0e29
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=\u0e41\u0e2a\u0e14\u0e07\u0e08\u0e33\u0e19\u0e27\u0e19\u0e2a\u0e33\u0e40\u0e19\u0e32\u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\n\u0e16\u0e49\u0e32\u0e08\u0e33\u0e19\u0e27\u0e19\u0e14\u0e49\u0e32\u0e19\u0e02\u0e27\u0e32\u0e19\u0e49\u0e2d\u0e22\u0e01\u0e27\u0e48\u0e32 1, \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e47\u0e19\u0e2a\u0e33\u0e40\u0e19\u0e32\u0e2b\u0e21\u0e14\u0e43\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 (\u0e41\u0e25\u0e30\u0e2d\u0e32\u0e08\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e43\u0e19\u0e01\u0e32\u0e23\u0e14\u0e32\u0e27\u0e42\u0e2b\u0e25\u0e14\u0e43\u0e2b\u0e49\u0e2a\u0e21\u0e1a\u0e39\u0e23\u0e13\u0e4c)
 GeneralView.label.trackerurl.tooltip=\u0e04\u0e25\u0e34\u0e01\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e33\u0e40\u0e19\u0e32 url \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07\u0e44\u0e1b\u0e17\u0e35\u0e48 clipboard
 GeneralView.label.trackerurlopen.tooltip=\u0e04\u0e25\u0e34\u0e01\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01\u0e02\u0e2d\u0e07 tracker
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=\u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e17 GUI \u0e17\u0e38\u0e01\u0e46
 ConfigView.section.style.graphicsUpdate=\u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e17\u0e41\u0e16\u0e1a\u0e01\u0e23\u0e32\u0e1f\u0e1f\u0e34\u0e01\u0e17\u0e38\u0e01\u0e46 N GUI \u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e17
 ConfigView.section.style.reOrderDelay=\u0e08\u0e31\u0e14\u0e2d\u0e31\u0e19\u0e14\u0e31\u0e1a\u0e15\u0e32\u0e23\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e38\u0e01\u0e46 N GUI \u0e2d\u0e31\u0e15\u0e40\u0e14\u0e17 [0: \u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07]
@@ -651,7 +655,9 @@ health.explain.yellow=\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e
 health.explain.green=\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e17\u0e38\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22\u0e14\u0e35
 ConfigView.section.style.alwaysRefreshMyTorrents=\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e43\u0e2b\u0e21\u0e48 Torrents \u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e40\u0e2a\u0e21\u0e2d
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e19\u0e35\u0e49\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49 Torrents \u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e38\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07\u0e41\u0e21\u0e49\u0e27\u0e48\u0e32\u0e08\u0e30\u0e44\u0e21\u0e48\u0e1b\u0e23\u0e32\u0e01\u0e0e (\u0e21\u0e35\u0e1b\u0e23\u0e30\u0e42\u0e22\u0e0a\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e2a\u0e23\u0e34\u0e21 mirc)
-ConfigView.section.style.verticaloffset=\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e01\u0e23\u0e32\u0e1f\u0e1f\u0e34\u0e01\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07 (\u0e41\u0e01\u0e49 GTK)
+#
+#2.0.7.0
+#
 security.certtruster.title=\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e1a\u0e23\u0e2d\u0e07\u0e04\u0e27\u0e32\u0e21\u0e1b\u0e25\u0e2d\u0e14\u0e20\u0e31\u0e22
 security.certtruster.intro=\u0e01\u0e32\u0e23\u0e23\u0e31\u0e1a\u0e23\u0e2d\u0e07\u0e2d\u0e2d\u0e01\u0e42\u0e14\u0e22\u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e40\u0e0a\u0e37\u0e48\u0e2d
 security.certtruster.resource=\u0e17\u0e23\u0e31\u0e1e\u0e22\u0e32\u0e01\u0e23:
@@ -707,6 +713,9 @@ ConfigView.section.style.dropdiraction=\u0e01\u0e32\u0e23\u0e01\u0e23\u0e30\u0e1
 ConfigView.section.style.dropdiraction.opentorrents=\u0e40\u0e1b\u0e34\u0e14 Torrents
 ConfigView.section.style.dropdiraction.sharefolder=\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19
 ConfigView.section.style.dropdiraction.sharefoldercontents=\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19
+#
+# 2.0.7.x
+#
 Categories.all=\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14
 Categories.uncategorized=\u0e44\u0e21\u0e48\u0e41\u0e1a\u0e48\u0e07\u0e2b\u0e21\u0e27\u0e14\u0e2b\u0e21\u0e39\u0e48
 CategoryAddWindow.message=\u0e43\u0e2a\u0e48\u0e0a\u0e37\u0e48\u0e2d\u0e2b\u0e21\u0e27\u0e14\u0e2b\u0e21\u0e39\u0e48\u0e43\u0e2b\u0e21\u0e48
@@ -781,7 +790,6 @@ ConfigView.text.minutes=\u0e19\u0e32\u0e17\u0e35
 ConfigView.text.neverIgnore=\u0e44\u0e21\u0e48\u0e25\u0e30\u0e40\u0e25\u0e22
 ConfigView.text.any=\u0e2d\u0e31\u0e19\u0e44\u0e2b\u0e19\u0e01\u0e47\u0e44\u0e14\u0e49
 DownloadManager.error.datamissing=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e39\u0e0d\u0e2b\u0e32\u0e22
-iconBar.queue.tooltip=\u0e25\u0e33\u0e14\u0e31\u0e1a
 MainWindow.menu.file.open.torrentforseeding=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 .torrent(\u0e40\u0e1e\u0e37\u0e48\u0e2d Seeding)
 MainWindow.menu.language.refresh=&\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e43\u0e2b\u0e21\u0e48
 ManagerItem.forced=\u0e1a\u0e31\u0e07\u0e04\u0e31\u0e1a
@@ -854,6 +862,9 @@ SpeedView.stats.uptime=\u0e40\u0e27\u0e25\u0e32\u0e2d\u0e31\u0e1e (\u0e0a\u0e31\
 SpeedView.stats.now=\u0e17\u0e31\u0e19\u0e17\u0e35
 SpeedView.stats.now.tooltip=\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 (Protocol)
 AutoMigration.useralert=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e1c\u0e39\u0e43\u0e0a\u0e49 Vuze /dirs \u0e1c\u0e25\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34:\n\n%1\n\u0e41\u0e15\u0e48\u0e25\u0e30\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14 \u0e15\u0e49\u0e2d\u0e07\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22\u0e14\u0e49\u0e27\u0e22\u0e15\u0e19\u0e40\u0e2d\u0e07\n\u0e2d\u0e22\u0e48\u0e32\u0e25\u0e37\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e01\u0e32\u0e23\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e43\u0e19\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07 \u0e16\u0e49\u0e32\u0e21\u0e31\u0e19\u0e16\u0e39\u0e01\u0e40\u0e04\u0e25\u0e35\u0e48\u0e22\u0e19\u0e22\u0e49\u0e32\u0e22 !
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=\u0e40\u0e1b\u0e34\u0e14 Torrent(s)
 OpenTorrentWindow.message=\u0e17\u0e14\u0e25\u0e2d\u0e07
 OpenTorrentWindow.addFiles=&\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25
@@ -1086,6 +1097,8 @@ MyTrackerView.badnat.info=Seeds/Peers \u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e1c
 ConfigView.section.tracker.natchecktimeout=\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e02\u0e32\u0e14\u0e2b\u0e32\u0e22 (\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35)
 ConfigView.section.file.perf.cache.enable=\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 disk cache
 ConfigView.section.file.perf.cache.size=\u0e02\u0e19\u0e32\u0e14\u0e02\u0e2d\u0e07 cache \u0e43\u0e19 %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=\u0e2a\u0e48\u0e07&
 MainWindow.menu.transfers.startalltransfers=\u0e40\u0e23\u0e34\u0e48&\u0e21\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14
 MainWindow.menu.transfers.stopalltransfers=\u0e2b\u0e22\u0e38&\u0e14\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14
@@ -1167,8 +1180,6 @@ FilesView.fullpath=\u0e41\u0e2a\u0e14\u0e07\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\
 FilesView.remaining=\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d
 TableColumn.header.trackername=\u0e0a\u0e37\u0e48\u0e2d Tracker
 TableColumn.header.trackername.info=\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07 tracker \u0e15\u0e32\u0e21 URL \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07
-ConfigView.label.announceport=\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e31\u0e1a tracker \u0e43\u0e19 port \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07
-ConfigView.label.announceport.tooltip=\u0e1a\u0e2d\u0e01 tracker \u0e02\u0e2d\u0e07 port \u0e2d\u0e37\u0e48\u0e19\u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e2d\u0e22\u0e39\u0e48. \u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e27\u0e48\u0e32\u0e07\u0e44\u0e27\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e1b\u0e34\u0e14\u0e15\u0e31\u0e27\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e19\u0e35\u0e49.
 ConfigView.group.override=\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e31\u0e1a
 ConfigView.section.file.perf.cache.notsmallerthan=\u0e44\u0e21\u0e48 cache \u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e02\u0e19\u0e32\u0e14\u0e40\u0e25\u0e47\u0e01\u0e01\u0e27\u0e48\u0e32 (in %1)
 PeersView.menu.blockupload=\u0e01\u0e31\u0e19 Upload
@@ -1197,7 +1208,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Socket SO_RCVBUF size [0: \u0e4
 ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 standard socket SO_RCVBUF (\u0e2b\u0e19\u0e48\u0e27\u0e22 bytes), \u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07. TCP \u0e23\u0e31\u0e1a\u0e02\u0e19\u0e32\u0e14 window \u0e41\u0e25\u0e30 \u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19\nVuze \u0e40\u0e27\u0e49\u0e19\u0e0a\u0e48\u0e2d\u0e07\u0e19\u0e35\u0e49\u0e44\u0e27\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19, \u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07 underlying OS .\n\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e2b\u0e15\u0e38: Linux \u0e22\u0e01\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e2d\u0e07\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e43\u0e2b\u0e49.
 ConfigView.section.connection.advanced.SO_SNDBUF=\u0e02\u0e19\u0e32\u0e14 Socket SO_SNDBUF [0: \u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07 OS]
 ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 the standard socket SO_SNDBUF (\u0e43\u0e19 bytes), \u0e15.\u0e22.. TCP \u0e2a\u0e48\u0e07\u0e02\u0e19\u0e32\u0e14 window\nVuze \u0e40\u0e27\u0e49\u0e19\u0e04\u0e48\u0e32\u0e19\u0e35\u0e49\u0e44\u0e27\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19,\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32 underlying OS\n\u0e2b\u0e21\u0e32\u0e02\u0e40\u0e2b\u0e15\u0e38: Linux \u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e2d\u0e07\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e43\u0e2b\u0e49
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 traffic class / type-of-service (TOS) \u0e1a\u0e19 IP header\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e48\u0e07\u0e2d\u0e2d\u0e01\nVuze \u0e08\u0e30\u0e40\u0e27\u0e49\u0e19\u0e04\u0e48\u0e32\u0e19\u0e35\u0e49\u0e44\u0e27\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19,\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e04\u0e48\u0e32 underlying \u0e02\u0e2d\u0e07 OS.\n\u0e22\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e04\u0e48\u0e32 :\n0x02 \u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_LOWCOST\n0x04 \u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_RELIABILITY\n0x08 \u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_THROUGHPUT\n0x10\u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_LOWDELAY\n\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e2b\u0e15\u0e38: \u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22 Underlying\u0e40\u0e2a\u0e23\u0e34\u0e21 \u0e2d\u0e32\u0e08\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e01\u0e0f\u0e19\u0e35\u0e49, \u0e14\u0e31\u0e07\u0e19\u0e31\u0e49\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e19\u0e35\u0e49\u0e02\u0e36\u0e49\u0e19\u0e01\u0e31\u0e1a OS \u0e41\u0e25\u0e30\u0e23\u0e38\u0e48\u0e19\u0e02\u0e2d\u0e07 JRE
 ConfigView.section.interface.confirm_torrent_removal=\u0e41\u0e2a\u0e14\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e22\u0e37\u0e19\u0e22\u0e31\u0e19\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e2d\u0e32 torrent \u0e2d\u0e2d\u0e01
 ConfigView.section.interface.confirm_torrent_removal.tooltip=\u0e22\u0e37\u0e19\u0e22\u0e31\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32 torrent \u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01 Torrents \u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19
 MyTorrentsView.confirm_torrent_removal=\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e40\u0e2b\u0e23\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e2d\u0e32\u0e2d\u0e2d\u0e01?\n
@@ -1340,6 +1350,7 @@ MainWindow.menu.tools.nattest=&\u0e17\u0e14\u0e2a\u0e2d\u0e1a NAT / Firewall
 Button.apply=\u0e15\u0e01\u0e25\u0e07\u0e43\u0e0a\u0e49
 Button.close=\u0e1b\u0e34\u0e14
 window.welcome.title=\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e2a\u0e39\u0e48 Vuze %1
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e2b\u0e15\u0e38\u0e23\u0e38\u0e48\u0e19
 dht.reseed.label=\u0e42\u0e14\u0e22\u0e1b\u0e01\u0e15\u0e34 reseeding \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e01\u0e23\u0e30\u0e08\u0e32\u0e22\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e19\u0e31\u0e49\u0e19\u0e44\u0e21\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23\u0e01\u0e47\u0e15\u0e32\u0e21\u0e16\u0e49\u0e32\u0e08\u0e33\u0e19\u0e27\u0e19\u0e17\u0e35\u0e48\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e15\u0e33\u0e19\u0e35\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e44\u0e14\u0e49.\n\u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e0a\u0e48\u0e2d\u0e07\u0e19\u0e35\u0e49\u0e27\u0e48\u0e32\u0e07\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e43\u0e2b\u0e21\u0e48\u0e01\u0e31\u0e1a peers \u0e2b\u0e23\u0e37\u0e2d\u0e43\u0e2a\u0e48 IP \u0e41\u0e25\u0e30 port \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e43\u0e2b\u0e21\u0e48\u0e01\u0e31\u0e1a peer \u0e17\u0e35\u0e48\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e41\u0e25\u0e49\u0e27.
 dht.reseed.ip=\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP
@@ -1406,10 +1417,11 @@ ConfigView.section.logging.log0type=\u0e02\u0e48\u0e32\u0e27\u0e2a\u0e32\u0e23
 OpenTorrentWindow.torrentLocation=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 Torrent:
 Button.moveUp=\u0e22\u0e49\u0e32\u0e22\u0e02\u0e36\u0e49\u0e19
 Button.moveDown=\u0e22\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e25\u0e07
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=\u0e16\u0e49\u0e32\u0e04\u0e38\u0e13\u0e21\u0e35 CPU \u0e17\u0e35\u0e48\u0e0a\u0e49\u0e32 \u0e01\u0e32\u0e23\u0e04\u0e33\u0e19\u0e27\u0e13\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e01\u0e34\u0e14\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e0a\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e07\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 (\u0e0a\u0e34\u0e49\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e2a\u0e21\u0e1a\u0e39\u0e23\u0e13\u0e4c\u0e2b\u0e25\u0e32\u0e22\u0e0a\u0e34\u0e49\u0e19\u0e43\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e2a\u0e48\u0e27\u0e19), \u0e08\u0e33\u0e01\u0e31\u0e14\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e22\u0e32\u0e27\u0e43\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08 \u0e08\u0e30\u0e25\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33
-ConfigView.section.file.write_block_limit.explain=\u0e16\u0e49\u0e32\u0e04\u0e38\u0e13\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e0a\u0e49\u0e32 \u0e40\u0e0a\u0e48\u0e19 \u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e0a\u0e49\u0e32\u0e01\u0e27\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e40\u0e23\u0e47\u0e27\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e14\u0e32\u0e27\u0e42\u0e2b\u0e25\u0e14 (\u0e0a\u0e48\u0e27\u0e07\u0e2a\u0e35\u0e41\u0e14\u0e07\u0e21\u0e32\u0e01\u0e43\u0e19\u0e21\u0e38\u0e21\u0e21\u0e2d\u0e07\u0e2a\u0e48\u0e27\u0e19), \u0e01\u0e32\u0e23\u0e08\u0e33\u0e01\u0e31\u0e14\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e2d\u0e48\u0e32\u0e19\u0e0a\u0e48\u0e27\u0e22\u0e25\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33
-MainWindow.dht.status.running=\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19
-ConfigView.section.file.check_piece_limit=\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e47\u0e19\u0e44\u0e14\u0e49\u0e0a\u0e31\u0e14\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e21\u0e32\u0e01\n[0: \u0e44\u0e21\u0e48\u0e08\u0e33\u0e01\u0e31\u0e14]. \u0e02\u0e19\u0e32\u0e14\u0e02\u0e2d\u0e07\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e36\u0e49\u0e19\u0e01\u0e31\u0e1a torrent
-ConfigView.section.file.write_block_limit=\u0e0a\u0e48\u0e27\u0e07\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e47\u0e19\u0e44\u0e14\u0e49\u0e0a\u0e31\u0e14\u0e2a\u0e39\u0e07\u0e2a\u0e38\u0e14 \n[0: \u0e44\u0e21\u0e48\u0e08\u0e33\u0e01\u0e31\u0e14] \u0e02\u0e19\u0e32\u0e14\u0e0a\u0e48\u0e27\u0e07 %1
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49
+ConfigView.label.announceport=\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e31\u0e1a tracker \u0e43\u0e19 port \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07
+iconBar.queue.tooltip=\u0e25\u0e33\u0e14\u0e31\u0e1a
+MainWindow.menu.help.faq=&Wiki \u0e04\u0e33\u0e16\u0e32\u0e21\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e16\u0e32\u0e21\u0e1a\u0e48\u0e2d\u0e22
+#what you've watched? Discover more with a single click...
 MainWindow.menu.help.donate=&\u0e1a\u0e23\u0e34\u0e08\u0e32\u0e04 !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties b/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties
index cc7dbfc..b7318ed 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties
@@ -1,10 +1,4 @@
-#===========================08-08-2006==========================#
-# Revised and updated by unal ==> unal[at]users.sourceforge.net	#
-# Use the email above for suggestion or criticize.				#
-#====================oooooooooooooooooooooooo===================#
-# Ceviri, unal tarafindan guncellenmi\u015f ve gozden gecirilmistir	#
-# Elestiri ve onerileriniz icin: unal[at]users.sourceforge.net	#
-#===============================================================#
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Torrent Dosyas\u0131...
 Main.parameter.usage=Kullan\u0131m : java org.gudy.azureus2.cl.Main [de\u011fi\u015ftirgeler] "file.torrent" "kay\u0131t yolu"
 Main.parameter.maxUploads=En Fazla E\u015fanl\u0131 G\u00f6nderme say\u0131s\u0131
@@ -378,7 +372,6 @@ MyTorrentsView.menu.removeand.deletedata=Veriyi Sil
 MyTorrentsView.menu.removeand.deleteboth=Her \u0130kisini de Sil
 deletedata.title=Uyar\u0131
 deletedata.message1=Buradaki VER\u0130'yi silmek \u00fczeresiniz :\n
-deletedata.message2=\nDevam etmek istedi\u011finizden emin misiniz?
 MainWindow.menu.file.configure=Yap\u0131land\u0131rma Sihirbaz\u0131
 configureWizard.title=Yap\u0131land\u0131rma Sihirbaz\u0131
 configureWizard.welcome.title=Vuze Yap\u0131land\u0131rma Sihirbaz\u0131na Ho\u015f Geldiniz
@@ -512,7 +505,6 @@ ConfigView.section.tracker=\u0130zleyici
 ConfigView.section.tracker.pollinterval=\u0130zleyici \u0130stemcisi Yoklama Aral\u0131\u011f\u0131 (sn)
 ConfigView.section.tracker.publishenable=Torrent ayr\u0131nt\u0131lar\u0131n\u0131 "<tracker_url>" adresine yay\u0131mla
 ConfigView.section.tracker.ip=\u0130zleyicinin d\u0131\u015f IP adresi
-MainWindow.menu.help.faq=S\u0131k\u00e7a Sorulan Sorular
 ConfigView.section.style.enableXPStyle=XP bi\u00e7emini etkinle\u015ftir (Yeniden ba\u015flatma gerektirir) 
 IPChecker.external.service.dyndns.name=DynDNS 
 IPChecker.external.service.dyndns.url=http://www.dyndns.org/ 
@@ -551,7 +543,6 @@ splash.openViews=G\u00f6r\u00fcn\u00fcmler A\u00e7\u0131l\u0131yor
 splash.plugin=Eklenti y\u00fckleniyor : 
 configureWizard.nat.tooManyPorts=S\u0131nanamayacak kadar \u00e7ok say\u0131da ba\u011flant\u0131 nokas\u0131 (en fazla 9) 
 ConfigView.section.color=Renk \u015eemas\u0131
-PeerSocket.unknown=Bilinmiyor
 MyTorrentsView.menu.publish=Yay\u0131mla... 
 MyTrackerView.status.published=Yay\u0131mland\u0131
 MyTrackerView.completed=Tamamland\u0131
@@ -567,8 +558,14 @@ IPChecker.external.service.no-ip.description=Devingen ve dura\u011fan DNS hizmet
 ConfigView.section.tracker.publicenable=D\u0131\u015f torrentleri etkinle\u015ftir
 ConfigView.label.playdownloadspeech=\u0130ndirme i\u015flemi itti\u011finde konu\u015f
 ConfigView.label.playdownloadspeech.info=Konu\u015fma hizmeti \u015fu an i\u00e7in en iyi \u0130ngilizce olarak \u00e7al\u0131\u015f\u0131yor
+#
+# Tooltips
+#
 GeneralView.label.trackerurl.tooltip=Duyuru adresini panoya kopyalamak i\u00e7in t\u0131klay\u0131n 
 GeneralView.label.trackerurlopen.tooltip=\u0130zleyici anasayfas\u0131n\u0131 a\u00e7mak i\u00e7in t\u0131klay\u0131n
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=Grafik aray\u00fcz\u00fc g\u00fcncelleme s\u0131kl\u0131\u011f\u0131
 ConfigView.section.style.graphicsUpdate=Grafik aray\u00fczle birlikte grafiksel \u00e7ubuklar\u0131n g\u00fcncellenme s\u0131kl\u0131\u011f\u0131
 ConfigView.section.style.reOrderDelay=Grafik aray\u00fczle birlikte tablolar\u0131n yeniden d\u00fczenlenme s\u0131kl\u0131\u011f\u0131 [0: asla]
@@ -705,7 +702,9 @@ health.explain.yellow=\u0130zleyicinin sa\u011fl\u0131kl\u0131 oldu\u011fu ve e\
 health.explain.green=Her\u015fey yolunda yani sa\u011fl\u0131kl\u0131s\u0131n\u0131z demektir. 
 ConfigView.section.style.alwaysRefreshMyTorrents=Torrentlerimi her zaman yenile
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Bu se\u00e7enek, g\u00f6sterilmese bile Torrentlerimin g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc yeniler (baz\u0131 mirc eklentileri i\u00e7in faydal\u0131d\u0131r)
-ConfigView.section.style.verticaloffset=Grafik Yatay Ofseti (GTK onar\u0131m\u0131)
+#
+#2.0.7.0
+#
 security.certtruster.title=G\u00fcvenlik Sertifika Uyar\u0131s\u0131
 security.certtruster.intro=G\u00fcvenlik sertifikas\u0131 g\u00fcvenmedi\u011finiz bir \u015firket taraf\u0131ndan yay\u0131nlanm\u0131\u015f
 security.certtruster.resource=Kaynak:
@@ -756,6 +755,9 @@ ConfigView.section.style.dropdiraction=Dizinler i\u00e7in s\u00fcr\u00fckle ve b
 ConfigView.section.style.dropdiraction.opentorrents=A\u00e7\u0131k Torrentler
 ConfigView.section.style.dropdiraction.sharefolder=Payla\u015f\u0131m Dizini
 ConfigView.section.style.dropdiraction.sharefoldercontents=Payla\u015f\u0131m \u0130\u00e7eri\u011fi
+#
+# 2.0.7.x
+#
 Categories.all=T\u00fcm\u00fc
 Categories.uncategorized=Ulams\u0131z
 CategoryAddWindow.message=Yeni ulam i\u00e7in bir ad girin
@@ -820,7 +822,6 @@ ConfigView.text.minutes=dakika
 ConfigView.text.neverIgnore=Asla Yoksayma
 ConfigView.text.any=herhangi biri
 DownloadManager.error.datamissing=Kay\u0131p Veri
-iconBar.queue.tooltip=S\u0131ra
 MainWindow.menu.file.open.torrentforseeding=Torrent Dosyas\u0131... (Yay\u0131mlamak \u0130\u00e7in)
 MainWindow.menu.language.refresh=Yenile
 ManagerItem.forced=Zorlayarak
@@ -889,6 +890,9 @@ SpeedView.stats.ratio=Oran
 SpeedView.stats.uptime=\u00c7al\u0131\u015fma S\u00fcresi
 SpeedView.stats.now=\u015eimdi
 SpeedView.stats.now.tooltip=Toplam (\u0130leti\u015fim Kural\u0131)
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=Torrent(ler)i A\u00e7
 OpenTorrentWindow.message=Deneysel
 OpenTorrentWindow.addFiles=Dosyalar\u0131 Ekle
@@ -1093,6 +1097,8 @@ MyTrackerView.badnat=Ge\u00e7ersiz NAT
 ConfigView.section.tracker.natchecktimeout=Zaman a\u015f\u0131m\u0131n\u0131 kontrol et (sn)
 ConfigView.section.file.perf.cache.enable=Disk \u00f6nbelle\u011fini etkinle\u015ftir
 ConfigView.section.file.perf.cache.size=%1 olarak \u00f6nbellek boyutu
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=Aktar\u0131mlar
 MainWindow.menu.transfers.startalltransfers=T\u00fcm\u00fcn\u00fc Ba\u015flat
 MainWindow.menu.transfers.stopalltransfers=T\u00fcm\u00fcn\u00fc Durdur
@@ -1171,7 +1177,6 @@ FilesView.fullpath=Tam Yolu G\u00f6ster
 FilesView.remaining=Kalan Par\u00e7alar
 TableColumn.header.trackername=\u0130zleyici Ad\u0131
 TableColumn.header.trackername.info=Duyuru adresinden elde edilen izleyici ad\u0131
-ConfigView.label.announceport=\u0130zleyici duyuru ba\u011flant\u0131 noktas\u0131n\u0131 ge\u00e7ersiz k\u0131l
 ConfigView.group.override=Ge\u00e7ersiz K\u0131lma Se\u00e7enekleri
 ConfigView.section.file.perf.cache.notsmallerthan=\u00d6nbelle\u011fe al\u0131nacak en k\u00fc\u00e7\u00fck dosya b\u00fcy\u00fckl\u00fc\u011f\u00fc (%1 olarak)
 PeersView.menu.blockupload=G\u00f6ndermeyi Engelle
@@ -1199,7 +1204,6 @@ ConfigView.section.connection.advanced=Geli\u015fmi\u015f A\u011f Ayarlar\u0131
 ConfigView.section.connection.advanced.mtu=Hat en y\u00fcksek iletim birimi (MTU)
 ConfigView.section.connection.advanced.SO_RCVBUF=SO_RCVBUF yuva b\u00fcy\u00fckl\u00fc\u011f\u00fc [0: \u0130\u015f. Sis. varsay\u0131lan\u0131n\u0131 kullan]
 ConfigView.section.connection.advanced.SO_SNDBUF=SO_SNDBUF yuva b\u00fcy\u00fckl\u00fc\u011f\u00fc [0: \u0130\u015f. Sis. varsay\u0131lan\u0131n\u0131 kullan]
-ConfigView.section.connection.advanced.IPTOS=Giden paket hizmet t\u00fcr\u00fc (TOS)
 ConfigView.section.interface.confirm_torrent_removal=Torrenti kald\u0131r\u0131rken onay ileti\u015fim kutusunu g\u00f6ster
 MyTorrentsView.confirm_torrent_removal=Kald\u0131rmak istedi\u011finizden emin misiniz?\n
 TableColumn.header.seed_to_peer_ratio=OrtaktanE\u015fe Oran
@@ -1344,6 +1348,7 @@ MainWindow.menu.tools.nattest=NAT / G\u00fcvenlik Duvar\u0131 S\u0131namas\u0131
 Button.apply=Uygula
 Button.close=Kapat
 window.welcome.title=Vuze %1'e Ho\u015f Geldiniz
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=S\u00fcr\u00fcm Notlar\u0131
 dht.reseed.group=Tekrar Yay\u0131mla
 dht.reseed.ip=IP adresi
@@ -1435,8 +1440,8 @@ DHTView.general.rendezvous=Bulu\u015fma:
 ConfigView.label.queue.maxactivetorrentswhenseeding=Sadece yay\u0131mlarken en fazla [0:s\u0131n\u0131rs\u0131z]
 Views.plugins.IRC.title=IRC - \u00c7evrimi\u00e7i Teknik Destek
 ConfigView.section.ipfilter.persistblocking=Engellenen IP ayr\u0131nt\u0131lar\u0131n\u0131 yeniden ba\u015flat\u0131rken kaydet
-FilesView.rename.choose.path=Yeni veya varolan dosyay\u0131 se\u00e7in
 FilesView.menu.rename=Yeniden adland\u0131r veya hedefle
+FilesView.rename.choose.path=Yeni veya varolan dosyay\u0131 se\u00e7in
 FilesView.rename.confirm.delete.title=Silme Onay\u0131
 FilesView.rename.confirm.delete.text='%1' \u00f6zg\u00fcn dosyas\u0131n\u0131 silmeyi onaylay\u0131n
 ConfigView.section.mode=Kip
@@ -1513,6 +1518,7 @@ PeersView.BlockView.AvailCount=Kullan\u0131l\u0131rl\u0131k kapsam\u0131
 MyTorrentsView.dialog.NumberError.title=Ge\u00e7ersiz ya da bilinmeyen say\u0131
 MyTorrentsView.dialog.NumberError.text=Ge\u00e7ersiz ya da bilinmeyen bir say\u0131 girdiniz.
 MyTorrentsView.menu.manual=&El ile...
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 MyTorrentsView.dialog.setNumber.upload=g\u00f6nderme
 MyTorrentsView.dialog.setNumber.download=indirme
 MyTorrentsView.dialog.setNumber.inKbps=in kb/s
@@ -1535,7 +1541,6 @@ OpenTorrentWindow.mb.alreadyExists.text=%1' torrenti '%2' olarak zaten eklenmi\u
 OpenTorrentWindow.mb.alreadyExists.title=Torrent zaten mevcut
 OpenTorrentWindow.mb.openError.title=A\u00e7ma Hatas\u0131
 OpenTorrentWindow.mb.openError.text='%1' a\u00e7\u0131lamad\u0131:
-\n%2
 OpenTorrentWindow.torrent.remove=Torrenti listeden kald\u0131r
 OpenTorrentWindow.torrent.options=A\u015fa\u011f\u0131daki ayarlar yukar\u0131da se\u00e7ilmi\u015f olan torrentlere uygulanacak:
 OpenTorrentWindow.xOfTotal=(%2'de %1)
@@ -1598,7 +1603,6 @@ TorrentOptionsView.param.max.uploads=En fazla g\u00f6nderme yuva say\u0131s\u013
 MyTorrentsView.dialog.setPosition.title=Konumu Ayarla
 MyTorrentsView.dialog.setPosition.text=Se\u00e7ilen torrent i\u00e7in yeni bir konum girin
 MyTorrentsView.menu.reposition.manual=Tekrar Konumland\u0131r..
-TorrentOptionsView.param.max.uploads.when.seeding.enable=Yay\u0131mlama s\u0131ras\u0131ndaki g\u00f6nderme yuvas\u0131 say\u0131s\u0131
 ConfigView.section.connection.advanced.info.link=Ayr\u0131nt\u0131lar i\u00e7in l\u00fctfen buray\u0131 t\u0131klay\u0131p a\u00e7\u0131lan siteyi ziyaret edin
 ConfigView.section.connection.advanced.socket.group=Yuva Se\u00e7enekleri
 ConfigView.section.connection.advanced.bind_port=Yerel ba\u011flant\u0131 noktas\u0131na ba\u011fla [0: Etkisiz]
@@ -1617,13 +1621,14 @@ ConfigView.section.file.resume.recheck.all=\u00c7\u00f6k\u00fc\u015f sonras\u013
 ConfigureWizard.language.choose=A\u015fa\u011f\u0131daki listeden bir dil se\u00e7in:
 popup.closing.in=Pencere %1 saniye i\u00e7inde kapanacak
 popup.more.waiting=%1 ileti daha..
+# > 2402
 popup.download.finished="%1" i\u015flemi tamamland\u0131.
 popup.file.finished="%1" dosyas\u0131 indirildi.
 ConfigView.auto=Otomatik
 Plugin.localtracker.autoadd.info=Bu yerel e\u015fleri otomatik ekle [';' ile ayr\u0131lm\u0131\u015f adresler, \u00f6rne\u011fin 1.2.3.4]
-Plugin.localtracker.autoadd=    Belirgin e\u015fler
+Plugin.localtracker.autoadd=Belirgin e\u015fler
 Plugin.localtracker.networks.info=A\u015fa\u011f\u0131daki a\u011flar\u0131n yerel oldu\u011funu varsay [';' ile ayr\u0131lm\u0131\u015f a\u011flar, \u00f6rne\u011fin 145.227.*.*]
-Plugin.localtracker.networks=    Yerel a\u011flar
+Plugin.localtracker.networks=Yerel a\u011flar
 MainWindow.menu.view.plugins.logViews=G\u00fcnl\u00fcklere G\u00f6z At
 SpeedView.stats.autospeed=Otomatik G\u00f6nderme H\u0131z\u0131
 SpeedView.stats.autospeed.disabled=Bu \u00f6zellik etkin de\u011fil (DHT'ye ihtiyac\u0131n\u0131z var) veya kullan\u0131mda de\u011fil (g\u00f6nderme h\u0131z\u0131 elle ayarlanm\u0131\u015f)
@@ -1713,7 +1718,6 @@ MainWindow.menu.view.iconbar=Ara\u00e7 \u00c7ubu\u011fu
 MyTorrentsView.menu.rename=Ad De\u011fi\u015ftir
 MyTorrentsView.menu.rename.displayed=G\u00f6r\u00fcnen Ad\u0131 De\u011fi\u015ftir
 MyTorrentsView.menu.rename.save_path=Kay\u0131t Yolunu De\u011fi\u015ftir
-MyTorrentsView.menu.rename.displayed_and_save_path=Her \u0130kisini De\u011fi\u015ftir
 UIDebugGenerator.messageask.title=Hata Ay\u0131klama Bilgisi Olu\u015fturucu
 UIDebugGenerator.messageask.text=Rapor etmek istedi\u011finiz hata i\u00e7in bir tan\u0131mlama girin
 UIDebugGenerator.complete.title=Hata Ay\u0131klama Bilgisi Olu\u015fturma Tamamland\u0131
@@ -1737,24 +1741,10 @@ ConfigView.label.popup.autohide=Hata bildirmeyen uyar\u0131lar\u0131 \u015fu s\u
 ConfigView.label.please.visit.here=L\u00fctfen ayr\u0131nt\u0131lar i\u00e7in buray\u0131 ziyaret edin
 ConfigView.section.ipfilter.enable.descriptionCache=IP tan\u0131mlar\u0131n\u0131 ge\u00e7ici k\u00fct\u00fckte sakla
 ConfigView.section.ipfilter.enable.descriptionCache.tooltip=Devre d\u0131\u015f\u0131 oldu\u011funda tan\u0131mlar hat\u0131rlanmaz
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-MainWindow.dht.status.running=\u00c7al\u0131\u015f\u0131yor
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-MyTorrentsView.menu.rename.enter.message=Yeni bir ad girin.
-ConfigView.section.tracker.forceport.tooltip=Bulundurulan d\u0131\u015fsal torrentleri, varsay\u0131lan ba\u011flant\u0131 noktas\u0131n\u0131 kullanmalar\u0131 i\u00e7in zorlar
-This=tool lets you test and / or change the port used to accept incoming peer connections.\n\nNOTE: This tool only tests for TCP connections. The Distributed DB requires incoming UDP connections as well, but will automatically notify you if it discovers a blocking firewall.\n\nNOTE: TCP port 6880 is reserved internally, so it cannot be used.
-ConfigView.section.tracker.client.scrapesingleonly.tooltip=['URL too long' (414) hata raporunu g\u00f6nderen izleyiciler sorununa yard\u0131mc\u0131 olur] 
-ConfigView.section.transfer.autospeed.downadjratio.tooltip=\u00d6rne\u011fin 2.0 -> indirme h\u0131z\u0131 g\u00f6nderme h\u0131z\u0131n\u0131n iki kat\u0131 olacakt\u0131r
-ConfigView.section.tracker.tcpnonblocking.tooltip=Selecting this option requires the tracker web to be run on an alternative port. Experimental!
-MyTorrentsView.menu.rename.enter.title=\u0130ndirilenin Ad\u0131n\u0131 De\u011fi\u015ftir
-ConfigView.label.popup.autohide.tooltip=Otomatik gizlemeyi devre d\u0131\u015f\u0131 b\u0131rakmak i\u00e7in 0 olarak ayarlay\u0131n
-ConfigView.section.tracker.host.addurls.tooltip=Bu izleyicide bulundurulan torrentlerin i\u00e7erdikleri adreslerin, bu izleyicinin adresi olup olmad\u0131\u011f\u0131n\u0131n denetimini yapar
-MyTorrentsView.menu.rename.enter.message.2=E\u011fer hi\u00e7bir metin girilmezse, \u00f6zg\u00fcn ad kullan\u0131lacak.
-ConfigView.section.file.resume.recheck.all.tooltip=E\u011fer i\u015faretlenmemi\u015fse, sadece etkin olan son par\u00e7alar denetlenir. B\u00f6ylece veri do\u011frulama s\u00fcresi \u00e7ok daha k\u0131sa olur.
-ConfigView.section.transfer.autospeed.latencyfactor.tooltip=Say\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, duyarl\u0131l\u0131k azal\u0131r
-ConfigView.section.tracker.separatepeerids.tooltip=Anonim olmayan bir izleyici kullan\u0131l\u0131rken indirilen/yay\u0131mlanan torrentin anonimli\u011fini artt\u0131r\u0131r.
-ConfigView.label.lazybitfield.tooltip=\u0130kil alan temelli engelleme y\u00f6ntemi kullanan a\u011flarda yay\u0131mlamaya yard\u0131mc\u0131 olur
+# Used for peers which we can't determine.
+PeerSocket.unknown=Bilinmiyor
+ConfigView.label.announceport=\u0130zleyici duyuru ba\u011flant\u0131 noktas\u0131n\u0131 ge\u00e7ersiz k\u0131l
+iconBar.queue.tooltip=S\u0131ra
+MainWindow.menu.help.faq=S\u0131k\u00e7a Sorulan Sorular
+#what you've watched? Discover more with a single click...
 MainWindow.menu.help.donate=Ba\u011f\u0131\u015f Yap
diff --git a/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties b/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties
index 6d6612d..f47bad3 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties
@@ -730,7 +730,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0426\u044f \u0444\u04
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0438\u0439 \u0437\u0441\u0443\u0432 \u0433\u0440\u0430\u0444\u0456\u043a\u0438 (\u0432\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 GTK)
 security.certtruster.title=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442 \u0431\u0435\u0437\u043f\u0435\u043a\u0438
 security.certtruster.intro=\u0426\u0435\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442 \u0431\u0435\u0437\u043f\u0435\u043a\u0438 \u0431\u0443\u0432 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0439 \u0444\u0456\u0440\u043c\u043e\u044e, \u044f\u043a\u0456\u0439 \u0412\u0438 \u043d\u0435 \u0434\u043e\u0432\u0456\u0440\u044f\u0454\u0442\u0435
 security.certtruster.resource=\u0414\u0436\u0435\u0440\u0435\u043b\u043e:
@@ -1953,13 +1952,8 @@ MainWindow.menu.view.iconbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u
 MyTorrentsView.menu.rename=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438
 MyTorrentsView.menu.rename.displayed=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0432\u043a\u0430\u0437\u0430\u043d\u0435 \u0456\u043c'\u044f
 MyTorrentsView.menu.rename.save_path=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0448\u043b\u044f\u0445 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f
-MyTorrentsView.menu.rename.displayed_and_save_path=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u043e\u0431\u0438\u0434\u0432\u0430
 MyTorrentsView.menu.rename.displayed.enter.title=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0432\u043a\u0430\u0437\u0430\u043d\u0435 \u0456\u043c'\u044f
 MyTorrentsView.menu.rename.displayed.enter.message=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043d\u043e\u0432\u0435 \u0456\u043c'\u044f, \u044f\u043a\u0435 \u0434\u0456\u044f\u0442\u0438\u043c\u0435 \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f.
-MyTorrentsView.menu.rename.save_path.enter.title=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0448\u043b\u044f\u0445 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f
-MyTorrentsView.menu.rename.save_path.enter.message=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043d\u043e\u0432\u0435 \u0440\u043e\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f .
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043d\u043e\u0432\u0435 \u0456\u043c'\u044f \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f
 MyTorrentsView.menu.edit_comment=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 MyTorrentsView.menu.edit_comment.enter.title=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
 MyTorrentsView.menu.edit_comment.enter.message=\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f.
@@ -2172,7 +2166,6 @@ v3.MainWindow.button.comment=\u0414\u043e\u0434\u0430\u0442\u0438 \u043a\u043e\u
 v3.MainWindow.button.viewdetails=\u0414\u0438\u0432\u0438\u0442\u0438\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u0438\u0446\u0456
 v3.MainWindow.button.play=\u0412\u0456\u0434\u0442\u0432\u043e\u0440\u0438\u0442\u0438
 v3.MainWindow.button.cancel=\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438
-v3.MainWindow.button.sendtofriend=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442
 v3.MainWindow.button.preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434
 v3.MainWindow.view.wait=\u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0454\u0442\u044c\u0441\u044f \u0432\u0438\u0433\u043b\u044f\u0434, \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0437\u0430\u0447\u0435\u043a\u0430\u0439\u0442\u0435.
 v3.MainWindow.xofx=%1 \u0437 %2
@@ -2477,53 +2470,17 @@ Button.bar.share=\u0420\u043e\u0437\u0434\u0430\u0442\u0438
 Button.bar.add=\u0414\u043e\u0434\u0430\u0442\u0438
 Button.bar.edit=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438
 Button.bar.edit.cancel=\u0417\u0430\u043a\u0456\u043d\u0447\u0438\u0442\u0438 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f
-v3.Share.menu=\u0412\u043c\u0456\u0441\u0442 \u0440\u043e\u0437\u0434\u0430\u0447\u0456
-v3.Share.header=\u0420\u043e\u0437\u0434\u0430\u0447\u0430
-v3.Share.header.message=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0437 \u043f\u043e\u0442\u043e\u0447\u043d\u0438\u043c\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f\u043c\u0438, \u0430\u0431\u043e \u0434\u043e\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0445 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432.
-v3.Share.add.buddy=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.Share.add.edit.buddy=\u0414\u043e\u0434\u0430\u0442\u0438 \u0430\u0431\u043e \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.Share.add.buddy.all=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0437 \u0443\u0441\u0456\u043c\u0430
-v3.Share.add.buddy.existing=\u041d\u0430\u044f\u0432\u043d\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456:
-v3.Share.add.buddy.new=\u041d\u043e\u0432\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456:
-v3.Share.buddies=\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456
-v3.Share.invitees=\u0417\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u0456
-v3.Share.invite.buddies.prompt=\u0417\u0430\u043f\u0440\u043e\u0441\u0456\u0442\u044c \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432 \u0434\u043e \u0440\u043e\u0437\u0434\u0430\u0447\u0456
-v3.Share.send.now=\u041d\u0430\u0434\u0456\u0441\u043b\u0430\u0442\u0438
-v3.Share.optional.message=\u041d\u0435\u043e\u0431\u043e\u0432'\u044f\u0437\u043a\u043e\u0432\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0440\u043e\u0437\u0441\u0438\u043b\u043a\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0456 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 140 \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432):
-v3.Share.disclaimer=\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0430: \u0412\u043c\u0456\u0441\u0442 \u0412\u0430\u0448\u043e\u0457 \u0440\u043e\u0437\u0434\u0430\u0447\u0456, \u044f\u043a \u0456 \u0446\u0435 \u043d\u0435\u043e\u0431\u043e\u0432'\u044f\u0437\u043a\u043e\u0432\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043a\u043e\u0434\u0443\u0432\u0430\u0442\u0438\u043c\u0443\u0442\u044c\u0441\u044f.
-v3.Share.disclaimer.link=\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435
-ConfigView.section.security.vuze.login=\u0412\u0438 \u043f\u043e\u0432\u0438\u043d\u043d\u0456 \u0431\u0443\u0442\u0438 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u043e\u0432\u0430\u043d\u0456 \u0432 Vuze, \u0449\u043e\u0431 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u0434\u0456\u044e
-v3.buddy.menu.viewprofile=\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u043f\u0440\u043e\u0444\u0456\u043b\u044c
-v3.buddy.menu.remove=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
 v3.MainWindow.menu.view.pluginbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f
-v3.MainWindow.menu.view.buddies-viewer=\u041f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.activity.buddy-request=\u0412\u0430\u043c \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c \u0432\u0456\u0434 %1\n\n<A HREF="%2" TARGET="minibrowse">\u0417\u0413\u041e\u0414\u0410</A>
-v3.activity.buddy-request.accept=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438
-v3.activity.buddy-request.multi=\u0412\u0430\u0445 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c [#%3] \u0432\u0456\u0434 %1\n\n<A HREF="%2" TARGET="minibrowse">\u0417\u0413\u041e\u0414\u0410</A>
-v3.activity.buddy-linkup=\u0412\u0438 \u0437 %1 \u0432\u0456\u0434\u0442\u0435\u043f\u0435\u0440 \u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f\u043c\u0438
-v3.activity.share-content=%1 \u0440\u043e\u0437\u0434\u0430\u0432 %2 \u0437 \u0412\u0430\u043c\u0438\n\n\u041f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u0432\u0456\u0434 %3:\n%4
-v3.activity.share-content.no-msg=%1 \u0440\u043e\u0437\u0434\u0430\u0432 %2 \u0437 \u0432\u0430\u043c\u0438
-v3.buddies.friends=\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456
-v3.buddies.online=\u0412 \u043c\u0435\u0440\u0435\u0436\u0456 (%1)
-v3.buddies.remove=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
-v3.buddies.add.to.share=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f \u0434\u043e \u0440\u043e\u0437\u0434\u0430\u0447\u0456
 MainWindow.dialog.select.vuze.file=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0444\u0430\u0439\u043b Vuze
 MainWindow.menu.file.open.vuze=\u0424\u0430\u0439\u043b Vuze...
-azbuddy.ui.dialog.disable.title=\u0412\u0438\u043c\u043a\u043d\u0443\u0442\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456"
-azbuddy.ui.dialog.disable.text=\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043d\u044f \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456" \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435 \u043d\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u0412\u0430\u0445 \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u0438 \u043f\u0440\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u0456 \u0442\u043e\u0440\u0435\u043d\u0442\u0456\u0432 \u0437 \u041f\u0430\u043d\u0435\u043b\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432, \u044f\u043a\u0430 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0437\u043d\u0438\u0437\u0443 \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043a\u0443, \u0456 \u043d\u0435 \u0434\u0430\u0432\u0430\u0442\u0438\u043c\u0435 \u0412\u0430\u0445 \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0456\u0432.\n\n\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043c\u043a\u043d\u0443\u0442\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f?
 metasearch.addtemplate.title=\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d?
 metasearch.addtemplate.desc=\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d '%1'?
 v3.share.private.title=\u0420\u043e\u0437\u0434\u0430\u0447\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0443
 v3.share.private.text=\u0412\u0438\u0431\u0440\u0430\u043d\u0438\u0439 \u0442\u043e\u0440\u0435\u043d\u0442 \u043f\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044f\u043a "\u041e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u0439 \u0442\u043e\u0440\u0435\u043d\u0442".\n\n\u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u0435\u0440\u0443\u0432\u0430\u0442\u0438 \u043e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u043c\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0430\u043c\u0438.
-v3.buddies.disabled.title=\u0412\u0438\u043c\u043a\u043d\u0443\u0442\u0435 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456"
-v3.buddies.disabled.text._windows=\u0412\u0438 \u0432\u0438\u043c\u043a\u043d\u0443\u043b\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456", \u0449\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u0442\u0438\u043c\u0435 \u0412\u0430\u043c \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0430\u0431\u043e \u043f\u0440\u0438\u0439\u043c\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0447\u0438 \u0437\u0430\u043f\u0438\u0442\u0438 \u0434\u0440\u0443\u0437\u0456\u0432. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0441\u0432\u043e\u0457 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456 "\u041e\u043f\u0446\u0456\u0457".
-v3.buddies.disabled.text._mac=\u0412\u0438 \u0432\u0438\u043c\u043a\u043d\u0443\u043b\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456", \u0449\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u0442\u0438\u043c\u0435 \u0412\u0430\u043c \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0430\u0431\u043e \u043f\u0440\u0438\u0439\u043c\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0447\u0438 \u0437\u0430\u043f\u0438\u0442\u0438 \u0434\u0440\u0443\u0437\u0456\u0432. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0441\u0432\u043e\u0457 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456 "\u041e\u043f\u0446\u0456\u0457".
 metasearch.addtemplate.dup.title=\u0414\u0443\u0431\u043b\u044e\u0432\u0430\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d
 metasearch.addtemplate.dup.desc=\u041f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d %1 \u0432\u0436\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439
 metasearch.export.select.template.file=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d
 metasearch.import.select.template.file=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d
-v3.MainWindow.button.newtag.share=\u041d\u043e\u0432\u0438\u0439 \u0442\u043e\u0440\u0435\u043d\u0442!
-v3.buddies.faq=\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435
 dialog.uiswitch.title=\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u0432 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f Vuze
 dialog.uiswitch.text=\u0414\u043b\u044f \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0446\u0456\u0454\u0457 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u0456 \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze.\n\nVuze \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f.
 dialog.uiswitch.button=\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438  \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f Vuze
@@ -2531,25 +2488,10 @@ azbuddy.tracker.enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 '
 azbuddy.protocolspeed=\u0412\u0435\u0440\u0445\u043d\u044f \u043c\u0435\u0436\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f, \u041a\u0431\u0456\u0442/\u0441
 v3.MainWindow.button.download=\u0417\u0430\u0431\u0440\u0430\u0442\u0438
 v3.MainWindow.button.run=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0438\u0439 \u0444\u0430\u0439\u043b
-v3.activity.header.friend.requests.foryou=\u0417\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c - \u0414\u043b\u044f \u0412\u0430\u0441
-v3.activity.header.friend.requests.fromyou=\u0417\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c - \u0412\u0456\u0434 \u0412\u0430\u0441
-v3.activity.header.friend.requests.accepted=\u0417\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c - \u0417\u0433\u043e\u0434\u0430
-v3.activity.header.share.requests=\u0417\u0430\u043f\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0447\u0456 \u0442\u043e\u0440\u0435\u043d\u0442\u0443
 v3.activity.header.downloads=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u044c
-v3.activity.header.rating.reminders=\u041d\u0430\u0433\u0430\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443
 v3.activity.header.vuze.news=\u041d\u043e\u0432\u0438\u043d\u0438 Vuze
-login.optional.message=\u0412\u0438 \u043c\u0443\u0441\u0438\u0442\u0435 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0432\u0430\u0442\u0438\u0441\u044f, \u0449\u043e\u0431 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c
-message.confirm.share.singular=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.
-message.confirm.share.plural=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.
-message.confirm.share.invite.singular=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0449\u043e\u0434\u043e \u0437'\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u0456 \u0440\u043e\u0437\u0434\u0430\u0447\u0456 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.  \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.share.invite.plural=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0449\u043e\u0434\u043e \u0437'\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u0456 \u0440\u043e\u0437\u0434\u0430\u0447\u0456 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.  \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.invite.singular=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.  \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.invite.plural=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.  \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.invite.error=\u041e, \u043d\u0456! \u041d\u0430\u0441 \u0437\u0430\u043c\u043a\u043d\u0443\u043b\u043e.  \u041e\u0434\u043d\u0435 \u0430\u0431\u043e \u043a\u0456\u043b\u044c\u043a\u0430 \u0412\u0430\u0448\u0438\u0445 \u0437\u0430\u043f\u0438\u0442\u0456\u0432 \u043c\u0430\u044e\u0442\u044c \u043f\u043e\u043c\u0438\u043b\u043a\u0438.
-message.prompt.add.friends=\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u043f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432 \u0437\u043d\u0438\u0437\u0443 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0434\u043b\u044f \u0440\u043e\u0437\u0434\u0430\u0447\u0456
 message.taking.too.long=\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043b\u043e\u0441\u044f, \u0449\u043e \u0432\u0441\u0435 \u0432\u0456\u0434\u0431\u0443\u0434\u0435\u0442\u044c\u0441\u044f \u043d\u0430\u0431\u0430\u0433\u0430\u0442\u043e \u0448\u0432\u0438\u0434\u0448\u0435\n\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c 'ESC', \u0449\u043e\u0431 \u0441\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u0434\u0456\u044e
 message.status.success=\u0423\u0441\u043f\u0456\u0448\u043d\u043e
-message.intro.friends=\u0414\u043e\u0434\u0430\u0432\u0430\u0439 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432.\n\u0420\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u0442\u043e\u0440\u0435\u043d\u0442\u0438.\n\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0439 \u0448\u0432\u0438\u0434\u0448\u0435.
 azbuddy.tracker.bbb.status.title=\u041f\u0440\u0438\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
 azbuddy.tracker.bbb.status.title.tooltip=\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u0434\u0432\u0456\u0447\u0456 \u0434\u043b\u044f \u0434\u043e\u043a\u043b\u0430\u0434\u043d\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457
 azbuddy.tracker.bbb.status.idle=\u041d\u0435\u043c\u0430 \u043f\u0440\u0438\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044f
@@ -2558,13 +2500,8 @@ azbuddy.tracker.bbb.status.in=\u042f \u043f\u043e\u0447\u0430\u0432 \u043f\u0440
 azbuddy.tracker.bbb.status.out=\u041f\u0440\u0438\u0441\u043a\u043e\u0440\u0435\u043d\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456
 v3.MainWindow.search.go.tooltip=\u0412\u0438\u043a\u043e\u043d\u0430\u0442\u0438 \u043f\u043e\u0448\u0443\u043a
 v3.MainWindow.search.last.tooltip=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044f \u0434\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0456\u0432 \u043f\u043e\u0448\u0443\u043a\u0443
-v3.activity.buddy-invited=\u0412\u0438 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043b\u0438 \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c \u0434\u043b\u044f %1.
-v3.activity.buddy-invited.multi=\u0412\u0438 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043b\u0438 \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u043b\u044e\u0434\u044f\u043c:\n%1
 metasearch.addtemplate.done.title=\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043e\u0434\u0430\u043d\u0438\u0439
 metasearch.addtemplate.done.desc=\u0428\u0430\u0431\u043b\u043e\u043d '%1' \u0432\u0434\u0430\u043b\u043e \u0434\u043e\u0434\u0430\u043d\u0438\u0439.\n\u0412\u0456\u043d \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u043c\u0435\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u043c\u0443 \u043f\u043e\u0448\u0443\u043a\u0443!
-v3.MainWindow.button.share=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e
-v3.buddies.remove.buddy.dialog.title=\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043d\u043d\u044f \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
-v3.buddies.remove.buddy.dialog.text=\u0412\u0438 \u0434\u0456\u0439\u0441\u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043b\u0443\u0447\u0438\u0442\u0438 %1 \u0437 \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432?
 ConfigView.section.security.nopw=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u0454\u0442\u044c\u0441\u044f
 ConfigView.section.security.nopw_v=\u041f\u0430\u0440\u043e\u043b\u0456 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456, \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0439\u0442\u0435\u0441\u044f \u0432 Vuze
 fileplugininstall.install.title=\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f?
@@ -2578,13 +2515,7 @@ azbuddy.os_not_avail=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u04
 azbuddy.os_busy=\u0417\u0430\u0439\u043d\u044f\u0442\u0438\u0439
 azbuddy.os_offline=\u041f\u043e\u0437\u0430 \u043c\u0435\u0440\u0435\u0436\u0435\u044e
 azbuddy.ui.menu.disconnect=\u0412\u0456\u0434'\u0454\u0434\u043d\u0430\u0442\u0438
-v3.buddy.menu.chat=\u0427\u0430\u0442
-v3.chat.offline=%1 \u0437\u0430\u0440\u0430\u0437 \u043f\u043e\u0437\u0430 \u043c\u0435\u0440\u0435\u0436\u0435\u044e \u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u0454 \u0432\u0430\u0448\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u0456\u0441\u043b\u044f \u0437'\u0454\u0434\u043d\u0430\u043d\u043d\u044f.
-v3.chat.wrongversion=%1 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u0432\u0435\u0440\u0441\u0456\u044e Vuze, \u044f\u043a\u0430 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u0427\u0430\u0442.
 azbuddy.enable_chat_notif=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u0447\u0430\u0442\u0443
-v3.buddies.dnd.info.dialog.title=\u0417\u0430\u043b\u0438\u0448\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0447\u0443
-v3.buddies.dnd.info.dialog.text=\u0412\u0438 \u0432\u0438\u0431\u0440\u0430\u043b\u0438 "\u0417\u0430\u043b\u0438\u0448\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0447\u0443". \u0412\u0430\u0448\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u044e\u0454\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0440\u043e\u0437\u0434\u0430\u0447\u0456, \u0456 \u0435\u043a\u0440\u0430\u043d \u0432\u0456\u0434\u043a\u0440\u0438\u0454\u0442\u044c\u0441\u044f, \u043a\u043e\u043b\u0438 \u0412\u0430\u0448\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u0431\u0443\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u044e.\n\n\u041d\u0435 \u0437\u0430\u043a\u0440\u0438\u0432\u0430\u0439\u0442\u0435 Vuze, \u0449\u043e\u0431 \u0432\u0430\u0448 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044c \u043e\u0442\u0440\u0438\u043c\u0430\u0432 \u0432\u0430\u0448\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u0442\u0443\u0442</A> \u0434\u043b\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u0446\u044e \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c.
-v3.buddies.dnd.info.dialog.remember=\u0411\u0456\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0446\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f
 progress.window.msg.progress=\u0414\u043e\u0447\u0435\u043a\u0430\u0439\u0442\u0435\u0441\u044f \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f \u0434\u0456\u0457
 ConfigView.section.connection.advanced.read_select=\u0417\u0430\u0442\u0440\u0438\u043c\u043a\u0430 \u0447\u0438\u0442\u0430\u043d\u043d\u044f (\u043c\u0441, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e: %1)
 ConfigView.section.connection.advanced.read_select_min=\u041c\u0456\u043d\u0456\u043c\u0430\u043b\u044c\u043d\u0435 \u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u0447\u0438\u0442\u0430\u043d\u043d\u044f (\u043c\u0441, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e: %1)
@@ -2640,25 +2571,18 @@ PluginDeprecation.view=\u0412\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0
 PluginDeprecation.alert=\u0414\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0434\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0440\u043e\u0431\u0443\u0432\u0430\u043b\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c, \u044f\u043a\u0430 \u0431\u0443\u0434\u0435 \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u0430 \u043d\u0430\u0434\u0430\u043b\u0456, - \u0432\u0456\u0434\u043a\u0440\u0438\u0439\u0442\u0435 \u043b\u043e\u0433 \u0412\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0456\u0448\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457.
 TableColumn.header.Thumbnail=\u041f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0430
 TableColumn.header.Thumbnail.info=\u041f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0430, \u044f\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0443\u0454 \u0432\u043c\u0456\u0441\u0442 \u043d\u0430 Vuze; \u0434\u043b\u044f \u0432\u0441\u044c\u043e\u0433\u043e \u0456\u043d\u0448\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u0454 \u043f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0438 \u041e\u0421.
-TableColumn.header.Rating_global=\u0420\u0435\u0439\u0442\u0438\u043d\u0433
-TableColumn.header.Rating_global.info=\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0446\u0456\u0454\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457
 v3.MainWindow.menu.getting_started=&\u041b\u0435\u0433\u043a\u0438\u0439 \u043f\u043e\u0447\u0430\u0442\u043e\u043a
 MainWindow.menu.community=\u0421\u0443\u0441\u043f\u0456&\u043b\u044c\u0441\u0442\u0432\u043e
 MainWindow.menu.help.faq=&FAQ
 MainWindow.menu.community.wiki=\u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0430 &\u0432\u0456\u043a\u0456-\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430
 MainWindow.menu.community.forums=\u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0456 \u0444\u043e&\u0440\u0443\u043c\u0438
 MainWindow.menu.community.blog=&\u0411\u043b\u043e\u0433 Vuze 
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
 MainWindow.menu.help.support=&\u0414\u043e\u0432\u0456\u0434\u043a\u0430 \u0456 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430
 externalLogin.title=\u0417\u0430\u043f\u0438\u0442 \u043b\u043e\u0433\u0456\u043d\u0443
 externalLogin.explanation=\u0428\u0430\u0431\u043b\u043e\u043d "%1" \u0432\u0438\u043c\u0430\u0433\u0430\u0454 \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043b\u043e\u0433\u0456\u043d. \u041f\u0456\u0441\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043b\u043e\u0433\u0456\u043d\u0443 \u0432\u0456\u043a\u043d\u043e \u0437\u0430\u043a\u0440\u0438\u0454\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e.
 externalLogin.explanation.capture=\u0412\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0441\u0435\u0432\u0434\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0449\u043e\u0431 \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0446\u0435\u0439 \u0448\u0430\u0431\u043b\u043e\u043d.
 Button.done=\u0412\u0438\u043a\u043e\u043d\u0430\u043d\u043e
 GeneralView.torrent_created_on_and_by=%1 \u0437\u0430 %2
-v3.Share.wizard.title=\u0420\u043e\u0437\u0434\u0430\u0447\u0430 -- \u041c\u0430\u0433
-v3.AddFriends.header.message=\u0414\u043e\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432, \u0449\u043e\u0431 \u043f\u043e\u0447\u0430\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0412\u0430\u0448\u0456 \u0443\u043b\u044e\u0431\u043b\u0435\u043d\u0456 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
-v3.AddFriends.header=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.AddFriends.wizard.title=\u0414\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432 - \u041c\u0430\u0433
 Button.continue=\u041f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438
 Button.preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434
 Subscription.menu.forcecheck=\u041f\u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0430\u0440\u0430\u0437
@@ -2669,9 +2593,6 @@ sidebar.LibraryDL=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u
 sidebar.LibraryCD=\u0412\u0438\u043a\u043e\u043d\u0430\u043d\u0456
 authenticator.location=\u041c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f
 authenticator.details=\u0414\u043e\u043a\u043b\u0430\u0434\u043d\u043e
-v3.MainWindow.menu.publish.new=\u041f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u043d\u043e\u0432\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e
-v3.MainWindow.menu.publish.mine=\u041e\u043f\u0443\u0431\u043b\u0456\u043a\u043e\u0432\u0430\u043d\u0430 \u0412\u0430\u043c\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f
-v3.MainWindow.menu.publish.about=\u041f\u0440\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044e...
 v3.MainWindow.menu.showActionBarText=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0435\u043a\u0441\u0442
 subscript.import.fail.title=\u041d\u0435\u0432\u0434\u0430\u043b\u0438\u0439 \u0456\u043c\u043f\u043e\u0440\u0442
 subscript.import.fail.desc=\u0414\u043e\u043a\u043b\u0430\u0434\u043d\u043e: %1
@@ -2688,13 +2609,11 @@ Subscription.menu.reset=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u
 ConfigView.section.Subscriptions=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438
 subscriptions.config.maxresults=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0456\u0432, \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0445 \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0443 [0: \u043d\u0435\u043e\u0431\u043c\u0435\u0436\u0435\u043d\u043e]
 v3.activity.button.readall=\u041f\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u0438 \u0432\u0441\u0456 \u044f\u043a \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u0456
-ConfigView.interface.start.library=\u041f\u043e\u0447\u0438\u043d\u0430\u0442\u0438 \u0432 \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456
 TableColumn.header.activityNew=\u0421\u0442\u0432\u043e\u0440\u0438\u0442\u0438
 TableColumn.header.activityType=\u0422\u0438\u043f
 TableColumn.header.activityText=\u041f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f
 TableColumn.header.activityDate=\u0414\u0430\u0442\u0430 \u0434\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044f
 TableColumn.header.activityActions=\u0414\u0456\u0457
-TableColumn.header.activityAvatar=\u0410\u0432\u0430\u0442\u0430\u0440
 Subscription.menu.resetauth=\u0421\u043a\u0438\u043d\u0443\u0442\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u0438\u0446\u0456 \u0456\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u0457
 Search.menu.engines=\u0428\u0430\u0431\u043b\u043e\u043d\u0438
 Wizard.Subscription.title=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438
@@ -2721,8 +2640,6 @@ Wizard.Subscription.rss.subtitle3=\u0417\u0431\u0435\u0440\u0456\u0433\u0448\u04
 Wizard.Subscription.subscribe.library=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u0432 \u0412\u0430\u0448\u0456\u0439 \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456
 Wizard.Subscription.subscribe.subscriptions=\u041f\u043e\u0432'\u044f\u0437\u0430\u043d\u0456 \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438
 Wizard.Subscription.subscribe.library.empty=\u041d\u0435\u043c\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u043f\u0456\u0434\u043f\u0438\u0441\u043e\u043a?\n \n\u041f\u043e\u0434\u0438\u0432\u0456\u0442\u044c\u0441\u044f \u043d\u0430 \u044f\u0441\u043a\u0440\u0430\u0432\u0443 \u043f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0443 \u043a\u043e\u043d\u043f\u043a\u0443 \u043c\u0435\u0440\u0435\u0436\u0456 Vuze HD Network.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Read more</A>
-TableColumn.header.Info=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f
-TableColumn.header.videoLength=\u0414\u043e\u0432\u0436\u0438\u043d\u0430 \u0432\u0456\u0434\u0435\u043e
 message.confirm.delete.title=\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043d\u043d\u044f \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u043d\u044f
 message.confirm.delete.text=\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043b\u0443\u0447\u0438\u0442\u0438 '%1'?
 Subscription.menu.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456
@@ -2774,8 +2691,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u0410\u0441\u043e\u0446\u045
 Button.deleteContent.fromLibrary=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u0437 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438
 Button.deleteContent.fromComputer=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u0437 \u043a\u043e\u043c\u043f'\u044e\u0442\u0435\u0440\u0430
 v3.deleteContent.message=\n\u0412\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043b\u0443\u0447\u0438\u0442\u0438 '%1' \u0437 \u043a\u043e\u043c\u043f'\u044e\u0442\u0435\u0440\u0430, \u0447\u0438 \u043b\u0438\u0448\u0435 \u0437 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 Vuze?
-v3.library.infobar.text1=\u0428\u0443\u043a\u0430\u0454\u0442\u0435 \u0440\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432\u0438\u0433\u043b\u044f\u0434?
-v3.library.infobar.text2=\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u044c \u0432\u0438\u0433\u043b\u044f\u0434 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456, \u044f\u043a\u0430 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u0438\u0449\u0435.
 v3.MainWindow.menu.view.toolbartext=\u041f\u0456\u0434\u043f\u0438\u0441\u0443\u0432\u0430\u0442\u0438 \u043f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0438
 v3.MainWindow.menu.view.asSimpleList=\u041f\u0440\u043e\u0441\u0442\u0438\u0439 \u043f\u0435\u0440\u0435\u043b\u0456\u043a
 v3.MainWindow.menu.view.asAdvancedList=\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u043b\u0456\u043a
@@ -2803,16 +2718,6 @@ azbuddy.ui.menu.cat.share=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442
 azbuddy.ui.menu.cat.set=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457
 azbuddy.ui.menu.cat.set_msg=\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u0430\u043c\u0438
 azbuddy.ui.menu.cat_subs=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0430
-v3.buddy.prop.dn=\u0406\u043c'\u044f, \u044f\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u0443\u0454\u0442\u044c\u0441\u044f
-v3.buddy.prop.un=\u0406\u043c'\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430
-v3.buddy.prop.on=\u0412 \u043c\u0435\u0440\u0435\u0436\u0456
-v3.buddy.prop.lupd=\u0412\u043e\u0441\u0442\u0430\u043d\u043d\u0454 \u043f\u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043e
-v3.buddy.prop.pks=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u0443\u0431\u043b\u0456\u0447\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0456\u0432
-v3.buddy.prop.pc=\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c
-v3.buddy.prop.catout=\u0412\u0430\u0448\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457, \u044f\u043a\u0456 \u043c\u043e\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044c
-v3.buddy.prop.catin=\u0412\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u043f\u043e\u043d\u043e\u0432\u0430\u043d\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
-v3.buddy.set.catout=\u0414\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044e \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e
-v3.buddy.set.catin=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
 subs.prop.update_period=\u041f\u0435\u0440\u0456\u043e\u0434 \u043f\u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f
 azbuddy.enable_cat_pub=\u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457, \u043d\u0430 \u044f\u043a\u0456 \u0412\u0421\u0406 \u0432\u0430\u0448\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456 \u043c\u043e\u0436\u0443\u0442\u044c \u043f\u0456\u0434\u043f\u0438\u0441\u0430\u0442\u0438\u0441\u044f (\u0440\u043e\u0437\u0434\u0456\u043b\u044f\u0442\u0438 ',') 
 v3.dialog.cnclose.title=%1 \u0437\u0430\u043a\u0440\u0438\u0442\u0438\u0439
@@ -2828,12 +2733,9 @@ TableColumn.header.category.info=\u041d\u0430\u0437\u0432\u0430 \u043a\u0430\u04
 TableColumn.header.DateCompleted.info=\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0442\u043e\u0440\u0435\u043d\u0442\u0443
 TableColumn.header.AzProduct.info=\u0422\u043e\u0440\u0435\u043d\u0442 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043e \u0437 \u043c\u0435\u0440\u0435\u0436\u0456
 TableColumn.header.health.info=\u041d\u0430\u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0436\u0438\u0442\u0442\u0454\u0437\u0434\u0430\u0442\u043d\u0435 \u0432\u0430\u0448\u0435 \u043f\u0456\u0434'\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u0434\u043e \u0442\u043e\u0440\u0435\u043d\u0442\u0443
-TableColumn.header.Info.info=\u041a\u043d\u043e\u043f\u043a\u0430, \u044f\u043a\u0430 \u0432\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0454 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u0438\u0446\u044c \u0432\u043c\u0456\u0441\u0442\u0443 Vuze
 TableColumn.header.maxuploads.info=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c # \u0443\u0447\u0430\u0441\u043d\u0438\u043a\u0456\u0432 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0447\u0430\u0441\u043d\u043e\u0457 \u0440\u043e\u0437\u0434\u0430\u0447\u0456
 TableColumn.header.name.info=\u0406\u043c'\u044f \u0442\u043e\u0440\u0435\u043d\u0442\u0430
 TableColumn.header.unopened.info=\u041f\u043e\u0437\u043d\u0430\u0447\u043a\u0430, \u044f\u043a\u0430 \u0432\u043a\u0430\u0437\u0443\u0454, \u0449\u043e \u0442\u043e\u0440\u0435\u043d\u0442 \u0432\u0456\u0434\u0442\u0432\u043e\u0440\u044e\u0432\u0430\u0432\u0441\u044f (\u0432\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0432\u0441\u044f)
-TableColumn.header.Quality.info=\u042f\u043a\u0456\u0441\u0442\u044c \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434 HD, SD)
-TableColumn.header.RateIt.info=\u0417\u0434\u0430\u0442\u043d\u0456\u0441\u0442\u044c \u043e\u0446\u0456\u043d\u0438\u0442\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e
 TableColumn.header.savepath.info=\u0422\u0435\u043a\u0430 \u0430\u0431\u043e \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u043e\u0440\u0435\u043d\u0442\u0430
 TableColumn.header.SeedingRank.info=\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f, \u043d\u0430\u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0443 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0456 \u0441\u0456\u0434\u0435\u0440\u0438. \u0427\u0438\u043c \u0432\u0438\u0449\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f, \u0442\u0438\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0456\u0448\u0435.
 TableColumn.header.shareRatio.info=\u0421\u043a\u0456\u043b\u044c\u043a\u0438 \u0432\u0438 \u0440\u043e\u0437\u0434\u0430\u043b\u0438 \u0432 \u043f\u043e\u0440\u0456\u0432\u043d\u044f\u043d\u043d\u0456 \u0437 \u0442\u0438\u043c, \u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0432\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u043b\u0438.
@@ -2843,7 +2745,6 @@ TableColumn.header.upspeed.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u044
 TableColumn.header.downspeed.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u0448\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f 
 TableColumn.header.up.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0434\u0430\u043d\u0438\u0445, \u0432\u0456\u0434\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u0456\u043d\u0448\u0438\u043c \u0443\u0447\u0430\u0441\u043d\u0438\u043a\u0430\u043c
 TableColumn.header.down.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0434\u0430\u043d\u0438\u0445, \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u0438\u0445 \u0432\u0456\u0434 \u0456\u043d\u0448\u0438\u0445 \u0443\u0447\u0430\u0441\u043d\u0438\u043a\u0456\u0432
-TableColumn.header.videoLength.info=\u0422\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c \u0432\u043c\u0456\u0441\u0442\u0443
 TableColumn.header.ProgressETA.info=\u041f\u043e\u0454\u0434\u043d\u0443\u0454 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0441\u0442\u0430\u043d, \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u043d\u0438\u0439 \u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0438\u0439 \u0447\u0430\u0441 \u0456 \u0448\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0432 \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0433\u0430\u0442\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u0441\u0442\u043e\u0432\u043f\u0446\u0456.
 TableColumn.header.eta.info=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u043d\u0438\u0439 \u0447\u0430\u0441 \u0434\u043e \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f
 Pieces.column.#.info=\u041d\u043e\u043c\u0435\u0440 \u0447\u0430\u0441\u0442\u0438\u043d\u0438
@@ -3036,19 +2937,3 @@ v3.deviceview.infobar.line2.tivo=\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u043
 v3.deviceview.infobar.line2.psp=\u0412\u0456\u0434\u0435\u043e \u0441\u043a\u043e\u043f\u0456\u044e\u0454\u0442\u044c\u0441\u044f \u0434\u043e PSP, \u043a\u043e\u043b\u0438 \u043d\u043e\u0441\u0456\u0439 \u0431\u0443\u0434\u0435 \u043f\u0456\u0434'\u0454\u0434\u043d\u0430\u043d\u043e.
 devices.info.copypending2=\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u043a\u043e\u043f\u0456\u044e\u0432\u0430\u043d\u043d\u044f %1 \u0444\u0430\u0439\u043b\u0430(\u0456\u0432), \u043f\u0456\u0434'\u0454\u0434\u043d\u0430\u0439\u0442\u0435 \u0412\u0430\u0448 \u043d\u043e\u0441\u0456\u0439
 subscriptions.column.nb-subscribers=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0447\u0443\u044e\u0447\u0456
-# The remaining keys were not in MessagesBundle.properties
-=
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message.2=\u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u043c\u0435\u0442\u044c\u0441\u044f \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0456 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f.
-v3.MainWindow.recentDL=\u041e\u0441\u0442\u0430\u043d\u043d\u0456 %1 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u044c
-v3.MainWindow.myMedia.noneSelected=\u0412\u0438 \u043c\u0430\u0454\u0442\u0435 %1 \u0447\u0430\u0441\u0442\u0438\u043d \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457.\n%2 \u0437 \u043d\u0438\u0445 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0456.\n\n\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u043f\u043e \u0440\u044f\u0434\u043a\u0443 \u0434\u043b\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457
-ConfigView.section.style.useNewStyleMessageBox=\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0441\u0442\u0438\u043b\u044c \u0441\u043a\u0440\u0438\u043d\u044c\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c
-Scrape.status.error.bad??????=\u0417\u0430\u0434\u0430\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u0441\u043f\u0435\u0446\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u0457 \u0448\u043a\u0440\u044f\u0431\u0430\u043d\u044c.
-MyTorrentsView.menu.rename.save_path.enter.message.2=\u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u043c\u0435\u0442\u044c\u0441\u044f \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0435 \u0456\u043c'\u044f.
-MyTorrentsView.menu.rename.displayed.enter.message.2=\u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0434\u0456\u044f\u0442\u0438\u043c\u0435 \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0435 \u0456\u043c'\u044f.
-v3.HomeReminder.title=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u043e\u0434\u0430\u043d\u0435
-ConfigView.section.language.Update??????=\u041f\u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0443
-v3.HomeReminder.gohome=\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044e \u043f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432
-v3.HomeReminder.text='%1' \u0431\u0443\u0432 \u0434\u043e\u0434\u0430\u043d\u0438\u0439 \u0434\u043e \u0432\u0430\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u044c.\n\n\u042f\u043a\u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0441\u043f\u043e\u0441\u0442\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f, \u0430\u0431\u043e \u0432\u0456\u0434\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0444\u0430\u0439\u043b \u043f\u0456\u0441\u043b\u044f \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f, \u043a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u043f\u043e \u041f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432.
-iconBar.open??????.tooltip=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0443
-Tab.closeHint=(\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c 'Esc' \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u0438\u0442\u0442\u044f)
-v3.MainWindow.recentDL.library=\u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 >>
diff --git a/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties b/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties
index af95ffa..dea8e27 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties
@@ -157,7 +157,6 @@ ConfigView.label.autoupdate=\u5f53\u6709\u66f4\u65b0\u53ef\u7528\u7684\u65f6\u50
 ConfigView.label.openconsole=\u542f\u52a8\u65f6\u6253\u5f00\u63a7\u5236\u53f0
 ConfigView.label.openconfig=\u542f\u52a8\u65f6\u663e\u793a\u9009\u9879\u9875
 ConfigView.label.startminimized=\u542f\u52a8\u65f6\u6700\u5c0f\u5316
-ConfigView.section.irc=IRC
 ConfigView.label.ircwiki=\u8bf7\u9605\u8bfb http://www.azureuswiki.com/index.php/Rules_for_IRC
 ConfigView.label.ircserver=\u670d\u52a1\u5668
 ConfigView.label.ircchannel=\u9891\u9053
@@ -188,7 +187,6 @@ FilesView.name=\u540d\u79f0
 FilesView.name.fastRename=\u5feb\u901f\u91cd\u547d\u540d
 FilesView.size=\u5927\u5c0f
 FilesView.done=\u5b8c\u6210
-FilesView.%=%
 FilesView.firstpiece=\u9996\u533a\u5757\u53f7\u6570#
 FilesView.numberofpieces=\u533a\u5757\u603b\u6570 #
 FilesView.pieces=\u533a\u5757
@@ -525,7 +523,6 @@ openUrl.title=Vuze - \u6253\u5f00\u4e00\u4e2a Url
 openUrl.url=URL\uff1a
 MyTorrentsView.menu.host.error.title=\u5750\u5e84 Torrent \u5931\u8d25
 MyTorrentsView.menu.host.error.message=\u5750\u5e84\u65f6\u53d1\u751f\u4ee5\u4e0b\u9519\u8bef\uff1a
-ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Tracker \u5ba2\u6237\u7aef Poll \u65f6\u95f4\u95f4\u9694\uff08\u79d2\uff09
 ConfigView.section.tracker.publishenable=\u5c06 Torrent \u6587\u4ef6\u4fe1\u606f\u53d1\u5e03\u5230 "/"
 ConfigView.section.tracker.ip=Tracker \u5bf9\u5916 IP \u5730\u5740
@@ -612,7 +609,6 @@ MyTorrentsView.menu.editTableColumns=\u9009\u62e9\u663e\u793a\u7684\u5217\uff08&
 wizard.operationfailed=\u64cd\u4f5c\u5931\u8d25
 authenticator.title=\u9700\u8981\u8ba4\u8bc1
 authenticator.realm=\u9886\u57df
-authenticator.tracker=Tracker
 authenticator.user=\u7528\u6237\u540d
 authenticator.password=\u5bc6\u7801
 ConfigView.label.allowSendVersion=\u51c6\u8bb8 Vuze \u5728\u68c0\u67e5\u65b0\u7248\u672c\u65f6 \u53d1\u9001\u533f\u540d\u7684\u7248\u672c\u53f7\u548c\u968f\u673a\u7684 ID
@@ -728,7 +724,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u8fd9\u4e2a\u9009\u987
 #
 #2.0.7.0
 #
-ConfigView.section.style.verticaloffset=\u56fe\u50cf\u5782\u76f4\u7684\u504f\u79fb\u91cf\uff08GTK \u8865\u4e01\uff09
 security.certtruster.title=\u5b89\u5168\u8bc1\u4e66\u8b66\u544a
 security.certtruster.intro=\u8fd9\u4e2a\u5b89\u5168\u8bc1\u4e66\u662f\u7531\u4e00\u4e2a\u4f60\u4e0d\u4fe1\u4efb\u7684\u516c\u53f8\u9881\u53d1\u7684
 security.certtruster.resource=\u8d44\u6e90\uff1a
@@ -750,7 +745,6 @@ MainWindow.dialog.share.sharedircontents.recursive=\u9012\u5f52\u7684
 globalmanager.download.remove.veto=\u5df2\u5426\u51b3\u5220\u9664\u64cd\u4f5c
 plugin.sharing.download.remove.veto=\u6b64\u4e0b\u8f7d\u662f\u7531\u8d44\u6e90\u88ab\u5171\u4eab\u6240\u9020\u6210\u3002\n\u8981\u5220\u9664\u4e0b\u8f7d\uff0c\u8bf7\u5220\u9664\u5171\u4eab\u5173\u8054: go to Tools->My Classic-Shares.
 ConfigView.section.tracker.main=\u4e3b\u8981
-ConfigView.section.tracker.web=Web
 ConfigView.label.prioritizefirstpiece=\u4f18\u5148\u4e0b\u8f7d\u6587\u4ef6\u7684\u7b2c\u4e00\u4e2a\u533a\u5757
 ConfigView.label.prioritizefirstpiece.tooltip=\u8bd5\u56fe\u4e0b\u8f7d\u6bcf\u4e00\u4e2a\u6587\u4ef6\u7684\u6587\u4ef6\u5934\u90e8\u5206\n\u4e3a\u4e86\u652f\u6301\u65e9\u671f\u9884\u89c8\u3002
 ConfigView.section.file.confirm_data_delete=\u5220\u9664\u6570\u636e\u65f6\u663e\u793a\u786e\u8ba4\u7a97\u53e3
@@ -1054,7 +1048,6 @@ plugins.basicview.log=\u65e5\u5fd7\uff1a
 ConfigView.label.maxdownloadspeed=\u5168\u5c40\u6700\u5927\u4e0b\u8f7d\u901f\u5ea6\uff08KB/s\uff09\uff1a\uff3b0\uff1a\u65e0\u9650\u5236\uff3d
 splash.loadingTorrent=\u88c5\u8f7d Torrent
 splash.of=\u7684
-ConfigView.section.plugins.irc=IRC
 UpdateWindow.title=Vuze \u66f4\u65b0\u5668
 UpdateWindow.header=\u4ee5\u4e0b\u7ec4\u4ef6\u9700\u8981\u66f4\u65b0\uff1a
 UpdateWindow.columns.install=\u5b89\u88c5
@@ -1131,7 +1124,6 @@ Security.keystore.corrupt=Keystore "%1" \u52a0\u8f7d\u9519\u8bef\uff0c\u8bf7\u52
 Security.keystore.empty=Keystore \u4e3a\u7a7a\u3002\u8bf7\u521b\u5efa\u81ea\u6211\u7b7e\u7f72\u8bc1\u4e66\uff08\u53c2\u89c1 \u5de5\u5177->\u9009\u9879->\u5b89\u5168\uff09\u6216\u8f93\u5165\u4e00\u4e2a\u5b58\u5728\u7684\u8bc1\u4e66\u5230 "%1"
 webui.restart.info=\u5e26\uff08*\uff09\u7684\u9879\u76ee\u88ab\u6539\u53d8\u540e\u9700\u8981\u91cd\u542f\u624d\u80fd\u8d77\u4f5c\u7528
 GeneralView.label.maxdownloadspeed.tooltip=\u6700\u5927\u4e0b\u8f7d\u901f\u5ea6\uff3b0\uff1a\u65e0\u9650\u5236\uff3d
-ConfigView.section.UPnP=UPnP
 upnp.enable=\u542f\u7528 UPnP
 upnp.info=\u901a\u7528\u5373\u63d2\u5373\u7528\uff08UPnP\uff09 \u5141\u8bb8\u5728\u5df2\u542f\u7528 UPnP \u7684\u8def\u7531\u5668\u4e0a\u81ea\u52a8\u7aef\u53e3\u6620\u5c04\u3002
 upnp.mapping.dataport=\u4f20\u5165\u7528\u6237\u6570\u636e\u7aef\u53e3
@@ -1251,7 +1243,6 @@ Security.jar.signfail=JAR \u7b7e\u7f72\u5931\u8d25 - %1
 ConfigView.section.security.toolsinfo=\u6709\u7b7e\u540d\u7684 JAR \u6587\u4ef6\u7528\u4e8e\u652f\u6301\u67d0\u4e9b\u63d2\u4ef6\uff0c\u4f8b\u5982\uff1a Swing \u7f51\u7edc\u4ecb\u9762\uff08\u5f53\u5b89\u88c5\u914d\u7f6e\u540e\uff09\u3002\n\u4e3a\u4e86\u7b7e\u7f72 JAR \u6587\u4ef6\uff0c\u5fc5\u987b\u8bbf\u95ee "tools.jar" \u6587\u4ef6\u3002\u6b64\u6587\u4ef6\u968f Sun JDK\uff08\u4e0d\u662f JRE\uff09 \u4e00\u8d77\u5b89\u88c5\u3002 \n\u5982\u679c\u4f60\u4ec5\u5b89\u88c5\u4e86 JRE\uff0c\u8bf7\u518d\u5b89\u88c5 JDK\u3002\nVuze \u901a\u5e38\u80fd\u5e2e\u4f60\u627e\u5230\u8fd9\u4e2a\u6587\u4ef6\u3002\u4f46\u5982\u679c\u6ca1\u627e\u5230\uff0c\u4f60\u53ef\u4ee5\u5728\u6b64\u8bbe\u7f6e\u5b83\u6240\u5728\u7684\u76ee\u5f55\u3002
 ConfigView.section.security.toolsdir=\u5305\u542b "tools.jar" \u7684\u76ee\u5f55
 ConfigView.section.security.choosetoolssavedir=\u9009\u62e9\u5305\u542b "tools.jar" \u7684\u6587\u4ef6\u5939
-authenticator.torrent=Torrent
 ConfigView.section.proxy.peer.same=\u4e3a Tracker \u548c\u7528\u6237\u8fde\u63a5\u4f7f\u7528\u76f8\u540c\u7684\u4ee3\u7406\u670d\u52a1\u5668
 ConfigView.section.connection.network.max.simultaneous.connect.attempts=\u6700\u5927\u540c\u65f6\u5bf9\u5916\u8fde\u63a5\u5c1d\u8bd5\uff3b0\uff1a\u7981\u6b62\u5bf9\u5916\u8fde\u63a5\uff3d
 ConfigView.section.connection.network.max.simultaneous.connect.attempts.tooltip=\u6700\u5927\u7684\u65b0\u589e\u5411\u5916\u8fde\u63a5\u6570\uff0c\u6307\u5b9a Vuze \u5728\u4efb\u4f55\u65f6\u95f4\u7684\u5c1d\u8bd5\u6b21\u6570\u3002\n\u6ce8\u610f\uff1a WindowsXP Service Pack 2\uff08SP2\uff09 \u5f3a\u5236\u7cfb\u7edf\u540c\u65f6\u8fde\u63a5\u5c1d\u8bd5\u4e3a10\u6b21\u3002\n\u9ed8\u8ba4\u503c\u4e3a8\u6b21\u30020\u4e3a\u5b8c\u5168\u7981\u6b62\u5411\u5916\u8fde\u63a5\u3002
@@ -1570,26 +1561,8 @@ DHTView.general.reachable=\u53ef\u5230\u8fbe\uff1a
 DHTView.general.rendezvous=\u96c6\u5408\u70b9\uff1a
 ConfigView.label.queue.maxactivetorrentswhenseeding=\u4ec5\u505a\u79cd\u65f6\u7684\u6700\u5927\u4efb\u52a1\u6570\uff3b0\uff1a\u65e0\u9650\u5236\uff3d
 Views.plugins.IRC.title=IRC - \u5728\u7ebf\u6280\u672f\u652f\u6301
-Formats.units.persec=/s
-Formats.units.TiB=TiB
-Formats.units.Tibit=Tibit
-Formats.units.TB=TB
-Formats.units.Tbit=Tbit
-Formats.units.GiB=GiB
-Formats.units.Gibit=Gibit
-Formats.units.GB=GB
-Formats.units.Gbit=Gbit
-Formats.units.MiB=MiB
-Formats.units.Mibit=Mibit
-Formats.units.MB=MB
-Formats.units.Mbit=Mbit
-Formats.units.KiB=KiB
-Formats.units.Kibit=Kibit
 Formats.units.kB=KB
-Formats.units.KB=KB
 Formats.units.kbit=Kbit
-Formats.units.B=B
-Formats.units.bit=bit
 Formats.units.alot=\u5f88\u591a \uff01\uff01\uff01
 ConfigView.section.ipfilter.persistblocking=\u4e0b\u6b21\u542f\u52a8\u7684\u65f6\u5019\u4fdd\u7559\u4e0a\u6b21\u5c01\u7981\u7684 IP \u5730\u5740
 FilesView.menu.rename=\u4fee\u6539\u76ee\u6807
@@ -1645,7 +1618,6 @@ TableColumn.header.swarm_average_completion=\u7528\u6237\u5e73\u5747\u5b8c\u6210
 TableColumn.header.swarm_average_completion.info=\u7fa4\u4f53\u7528\u6237\u7684\u5e73\u5747\u4e0b\u8f7d\u5b8c\u6210\u7387
 GeneralView.label.swarm_average_completion=\u5e73\u5747\u5b8c\u6210\u5ea6\uff1a
 GeneralView.label.swarm_average_completion.tooltip=\u7fa4\u4f53\u7528\u6237\u7684\u5e73\u5747\u4e0b\u8f7d\u5b8c\u6210\u7387
-MainWindow.nat.status.unknown=NAT
 MainWindow.nat.status.tooltip.unknown=\u9632\u706b\u5899/NAT\uff08TCP\uff09 \u53ef\u5230\u8fbe\u6027\u72b6\u6001\u672a\u77e5
 MainWindow.nat.status.ok=NAT \u6b63\u5e38
 MainWindow.nat.status.tooltip.ok=\u53ef\u5230\u8fbe\u6027\u6b63\u5e38\uff08TCP\uff09
@@ -1904,7 +1876,6 @@ ConfigView.section.proxy.username.info=\u5982\u679c\u4ee3\u7406\u670d\u52a1\u566
 ConfigView.label.maxuploadswhenbusymin=\u4efb\u52a1\u7e41\u5fd9\u65f6\u5355\u4efb\u52a1\u5168\u901f\u4e0a\u4f20\u65f6\u95f4\uff3b\u79d2\uff3d
 MainWindow.menu.help.debug=\u751f\u6210 Debug \u4fe1\u606f
 DownloadManager.error.badsize=\u6587\u4ef6\u5927\u5c0f\u9519\u8bef
-ConfigView.section.NATPMP=NAT-PMP
 natpmp.info=NAT-PMP \u662f\u82f9\u679c\u673a\u4e0a UPnP \u7684\u66ff\u4ee3\u534f\u8bae\uff0c\u76ee\u524d Airport stations \u5df2\u7ecf\u652f\u6301\u8be5\u534f\u8bae\n\n\u6ce8\u610f UPnP \u5fc5\u987b\u542f\u7528\u540e\u624d\u80fd\u542f\u7528 NAT-PMP\uff0c\u56e0\u4e3a NAT-PMP \u8bbe\u5907\u88ab\u5f53\u4f5c\u4e00\u79cd\u7279\u522b\u7684 UPnP \u8bbe\u5907
 natpmp.enable=\u542f\u7528\uff08\u6ce8\u610f\u5fc5\u987b\u5728 Airport \u8bbe\u7f6e\u4e2d\u542f\u7528\u624d\u80fd\u6b63\u5e38\u4f7f\u7528\uff09
 ConfigView.section.tracker.host.addurls=\u4fdd\u8bc1\u8fd9\u4e2a Tracker \u7684\u8fde\u63a5\u4f4d\u4e8e\u5750\u5e84\u79cd\u5b50\u4e2d
@@ -1951,13 +1922,8 @@ MainWindow.menu.view.iconbar=\u5de5\u5177\u6761
 MyTorrentsView.menu.rename=\u91cd\u547d\u540d
 MyTorrentsView.menu.rename.displayed=\u91cd\u547d\u540d\u663e\u793a\u540d\u79f0
 MyTorrentsView.menu.rename.save_path=\u91cd\u547d\u540d\u4fdd\u5b58\u76ee\u5f55
-MyTorrentsView.menu.rename.displayed_and_save_path=\u4e24\u8005\u90fd\u91cd\u547d\u540d
 MyTorrentsView.menu.rename.displayed.enter.title=\u91cd\u547d\u540d\u663e\u793a\u540d\u79f0
 MyTorrentsView.menu.rename.displayed.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u65b0\u7684\u663e\u793a\u540d\u79f0\u3002\n\u5982\u679c\u6ca1\u6709\u8f93\u5165\u6587\u672c\uff0c\u5c06\u4f7f\u7528\u539f\u59cb\u540d\u79f0\u3002
-MyTorrentsView.menu.rename.save_path.enter.title=\u91cd\u547d\u540d\u4fdd\u5b58\u76ee\u5f55
-MyTorrentsView.menu.rename.save_path.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u65b0\u7684\u4fdd\u5b58\u76ee\u5f55\u3002\n\u5982\u679c\u6ca1\u6709\u8f93\u5165\u6587\u672c\uff0c\u4e0b\u8f7d\u4efb\u52a1\u663e\u793a\u7684\u540d\u79f0\u5c06\u88ab\u4f7f\u7528\u3002
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u91cd\u547d\u540d\u4e0b\u8f7d
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u65b0\u7684\u540d\u79f0\u3002\n\u5982\u679c\u6ca1\u6709\u8f93\u5165\u6587\u672c\uff0c\u5c06\u91c7\u7528\u9ed8\u8ba4\u503c\u3002
 MyTorrentsView.menu.edit_comment=\u7f16\u8f91\u8bc4\u8bba
 MyTorrentsView.menu.edit_comment.enter.title=\u7f16\u8f91\u8bc4\u8bba
 MyTorrentsView.menu.edit_comment.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u8bc4\u8bba\u3002
@@ -2007,7 +1973,6 @@ ConfigView.label.pause.downloads.on.exit=\u9000\u51fa\u65f6\u6682\u505c\u4e0b\u8
 ConfigView.label.resume.downloads.on.start=\u542f\u52a8\u5e76\u521d\u59cb\u5316\u5b8c\u6210\u540e\u8fdb\u884c\u6682\u505c\u7684\u4e0b\u8f7d\u4efb\u52a1
 UIDebugGenerator.message.cancel.title=\u5df2\u53d6\u6d88\u751f\u6210 Debug \u4fe1\u606f
 UIDebugGenerator.message.cancel.text=\u4f60\u6ca1\u6709\u63cf\u8ff0\u4f60\u8981\u62a5\u544a\u7684 BUG\u3002 BUG \u5bf9\u4f60\u6765\u8bf4\u5f88\u660e\u663e\uff0c\u4f46\u6ca1\u6709\u63cf\u8ff0\u6211\u4eec\u4ec5\u80fd\u731c\u6d4b\u662f\u4f60\u4e2a\u4eba\u7684\u95ee\u9898\u3002\n\n\u5df2\u53d6\u6d88\u751f\u6210 Debug \u4fe1\u606f\u3002
-ConfigView.section.connection.group.http=HTTP
 ConfigView.section.connection.group.http.info=HTTP \u505a\u79cd\u6a21\u5f0f
 ConfigView.section.connection.http.enable=\u542f\u7528
 ConfigView.section.connection.http.port=\u4f20\u5165\u7aef\u53e3\u53f7
@@ -2160,9 +2125,6 @@ v3.MainWindow.menu.advanced=\u9ad8\u7ea7\uff08&A\uff09
 v3.MainWindow.menu.view.searchbar=\u641c\u7d22\u6761
 v3.MainWindow.menu.view.tabbar=\u9875\u9762\u6761
 v3.MainWindow.currentDL=\u6b63\u5728\u4e0b\u8f7d
-v3.MainWindow.recentDL=\u6700\u8fd1 %1 \u4e0b\u8f7d
-v3.MainWindow.recentDL.library=\u6211\u7684\u6587\u4ef6\u5e93 >>
-v3.MainWindow.myMedia.noneSelected=\u4f60\u62e5\u6709 %1 \u5757\u5185\u5bb9\n%2 \u5757\u5df2\u7ecf\u5b8c\u6210\n\n\u70b9\u51fb\u4e00\u884c\u67e5\u770b\u5185\u5bb9\u4fe1\u606f
 v3.MainWindow.button.stream=\u6d41
 v3.MainWindow.button.stop=\u505c\u6b62
 v3.MainWindow.button.start=\u5f00\u59cb
@@ -2173,7 +2135,6 @@ v3.MainWindow.button.comment=\u8bc4\u8bba
 v3.MainWindow.button.viewdetails=\u67e5\u770b\u7ec6\u8282
 v3.MainWindow.button.play=\u8fd0\u884c
 v3.MainWindow.button.cancel=\u53d6\u6d88
-v3.MainWindow.button.sendtofriend=\u5171\u4eab
 v3.MainWindow.button.preview=\u9884\u89c8
 v3.MainWindow.view.wait=\u521d\u59cb\u5316\u89c6\u56fe\uff0c \u8bf7\u7a0d\u5019
 v3.MainWindow.xofx=%2 \u7684 %1
@@ -2304,7 +2265,6 @@ ConfigTransferAutoSpeed.auto.speed.classic=\u81ea\u52a8\u901f\u5ea6\u8c03\u6574\
 ConfigTransferAutoSpeed.auto.speed.beta=\u81ea\u52a8\u901f\u5ea6\u8c03\u6574\uff08beta\uff09
 ConfigTransferAutoSpeed.data.update.frequency=\u66f4\u65b0\u9891\u7387
 Alert.failed.update=\u81f3\u5c11\u6709\u4e00\u4e2a\u7ec4\u4ef6\u5b89\u88c5\u5931\u8d25\u3002\u8bf7\u67e5\u770b <A HREF="{Alert.failed.update.url}">AzureusWiki\uff1a Failed Update</A> [%1]
-Alert.failed.update.url=http://azureuswiki.com/index.php/Failed_Update
 OpenTorrentWindow.mb.existingFiles.partialList=\uff08\u90e8\u5206\u5217\u8868.  \u66f4\u591a\u6587\u4ef6\u5df2\u5b58\u5728\uff09
 TableColumn.header.bad_avail_time.info=\u4e0a\u4e00\u6b21\u770b\u5230\u5b8c\u6574\u62f7\u8d1d\u7684\u65f6\u95f4
 TableColumn.header.bad_avail_time=\u770b\u5230\u5b8c\u6574\u62f7\u8d1d\u7684\u65f6\u523b
@@ -2444,7 +2404,6 @@ azbuddy.ui.menu.remove=\u79fb\u9664
 azbuddy.ui.menu.copypk=\u590d\u5236\u516c\u94a5
 azbuddy.ui.menu.send=\u53d1\u9001\u6d88\u606f
 azbuddy.ui.menu.send_msg=\u8f93\u5165\u8981\u53d1\u9001\u7ed9\u4f60\u597d\u53cb(\u4eec)\u7684\u6587\u5b57
-azbuddy.ui.menu.ping=Ping
 azbuddy.ui.menu.ygm=\u53d1\u9001 YGM
 azbuddy.ui.menu.enc=\u52a0\u5bc6\u526a\u8d34\u677f
 azbuddy.ui.menu.dec=\u89e3\u5bc6\u526a\u8d34\u677f
@@ -2477,53 +2436,17 @@ Button.bar.share=\u5206\u4eab
 Button.bar.add=\u6dfb\u52a0
 Button.bar.edit=\u7f16\u8f91
 Button.bar.edit.cancel=\u5b8c\u6210\u7f16\u8f91
-v3.Share.menu=\u5206\u4eab\u5185\u5bb9
-v3.Share.header=\u5206\u4eab
-v3.Share.header.message=\u4e0e\u5f53\u524d\u597d\u53cb\u5206\u4eab\uff0c\u6216\u6dfb\u52a0\u65b0\u597d\u53cb
-v3.Share.add.buddy=\u6dfb\u52a0\u597d\u53cb
-v3.Share.add.edit.buddy=\u6dfb\u52a0/\u7f16\u8f91\u597d\u53cb
-v3.Share.add.buddy.all=\u548c\u6240\u6709\u4eba\u5206\u4eab
-v3.Share.add.buddy.existing=\u5df2\u6709\u597d\u53cb\uff1a
-v3.Share.add.buddy.new=\u65b0\u597d\u53cb\uff1a
-v3.Share.buddies=\u597d\u53cb
-v3.Share.invitees=\u88ab\u9080\u8bf7\u8005
-v3.Share.invite.buddies.prompt=\u9080\u8bf7\u66f4\u591a\u7684\u597d\u53cb\u6765\u5206\u4eab
-v3.Share.send.now=\u53d1\u9001
-v3.Share.optional.message=\u901a\u8fc7\u63d0\u793a\u53d1\u9001\u989d\u5916\u6d88\u606f (\u6700\u591a 140 \u5b57\u7b26):
-v3.Share.disclaimer=\u6ce8\u610f: \u60a8\u5206\u4eab\u7684\u5185\u5bb9\u548c\u989d\u5916\u7684\u4fe1\u606f\u90fd\u5c06\u88ab\u52a0\u5bc6\u3002
-v3.Share.disclaimer.link=\u66f4\u591a\u9605\u8bfb
-ConfigView.section.security.vuze.login=\u60a8\u9700\u8981\u767b\u5f55\u81f3 Vuze \u6765\u8fdb\u884c\u6b64\u64cd\u4f5c
-v3.buddy.menu.viewprofile=\u67e5\u770b\u9884\u7f6e\u6587\u4ef6
-v3.buddy.menu.remove=\u79fb\u9664\u597d\u53cb
 v3.MainWindow.menu.view.pluginbar=\u63d2\u4ef6\u9762\u677f
-v3.MainWindow.menu.view.buddies-viewer=\u597d\u53cb\u9762\u677f
-v3.activity.buddy-request=\u60a8\u6709\u4e00\u4e2a\u6765\u81ea %1 \u7684\u597d\u53cb\u8bf7\u6c42
-v3.activity.buddy-request.accept=\u63a5\u53d7
-v3.activity.buddy-request.multi=\u60a8\u6709\u4e00\u4e2a\u597d\u53cb\u8bf7\u6c42 [#%3] \u6765\u81ea %1
-v3.activity.buddy-linkup=\u60a8\u548c %1 \u73b0\u5728\u662f\u597d\u53cb\u4e86\u3002
-v3.activity.share-content=%1 \u4e0e\u60a8\u5206\u4eab\u4e86 %2  %3 <A HREF="%4" TITLE="%5">\u8bf4...</A>
-v3.activity.share-content.no-msg=%1 \u4e0e\u60a8\u5206\u4eab\u4e86 %2
-v3.buddies.friends=\u597d\u53cb
-v3.buddies.online=\u5728\u7ebf (%1)
-v3.buddies.remove=\u79fb\u9664\u597d\u53cb
-v3.buddies.add.to.share=\u6dfb\u52a0\u597d\u53cb\u5e76\u5206\u4eab
 MainWindow.dialog.select.vuze.file=\u9009\u62e9 Vuze \u6587\u4ef6
 MainWindow.menu.file.open.vuze=Vuze \u6587\u4ef6...
-azbuddy.ui.dialog.disable.title=\u7981\u7528\u597d\u53cb\u63d2\u4ef6
-azbuddy.ui.dialog.disable.text=\u7981\u7528\u597d\u53cb\u63d2\u4ef6\u5c06\u4f7f\u4f60\u65e0\u6cd5\u901a\u8fc7\u8be5\u7a0b\u5e8f\u5e95\u90e8\u7684\u597d\u53cb\u6761\u6765\u5206\u4eab torrents \uff0c\u5e76\u65e0\u6cd5\u4fee\u6539\u4f60\u7684\u597d\u53cb\u5217\u8868\n\n\u4f60\u786e\u5b9a\u4f60\u8981\u7981\u7528\u597d\u53cb\u63d2\u4ef6\uff1f
 metasearch.addtemplate.title=\u5b89\u88c5\u641c\u7d22\u6a21\u677f\uff1f
 metasearch.addtemplate.desc=\u4f60\u786e\u5b9a\u4f60\u60f3\u8981\u5b89\u88c5 '%1' \u7684\u641c\u7d22\u6a21\u677f\uff1f
 v3.share.private.title=\u5206\u4eab Torrent
 v3.share.private.text=\u6240\u9009\u7684 torrent \u88ab\u6807\u8bb0\u4e3a\u79c1\u6709 Torrent.\n\n\u60a8\u4e0d\u53ef\u4ee5\u5206\u4eab\u79c1\u6709 torrents\u3002
-v3.buddies.disabled.title=\u597d\u53cb\u63d2\u4ef6\u7981\u7528
-v3.buddies.disabled.text._windows=\u60a8\u5df2\u7ecf\u7981\u7528\u4e86\u597d\u53cb\u63d2\u4ef6\uff0c\u5c06\u4f7f\u60a8\u65e0\u6cd5\u5206\u4eab\u3001\u63a5\u53d7torrent\u6216\u597d\u53cb\u8bf7\u6c42\u3002\u60a8\u53ef\u4ee5\u5728\u201c\u9009\u9879\u201c\u6807\u7b7e\u9875\u4e2d\u66f4\u6539\u7684\u8bbe\u5b9a\u3002
-v3.buddies.disabled.text._mac=\u60a8\u5df2\u7ecf\u7981\u7528\u4e86\u597d\u53cb\u63d2\u4ef6\uff0c\u5c06\u4f7f\u60a8\u65e0\u6cd5\u5206\u4eab\u3001\u63a5\u53d7torrent\u6216\u597d\u53cb\u8bf7\u6c42\u3002\u60a8\u53ef\u4ee5\u5728\u201c\u9009\u9879\u201c\u6807\u7b7e\u9875\u4e2d\u66f4\u6539\u7684\u8bbe\u5b9a\u3002
 metasearch.addtemplate.dup.title=\u91cd\u590d\u7684\u6a21\u677f
 metasearch.addtemplate.dup.desc=\u641c\u7d22\u6a21\u677f %1 \u5df2\u7ecf\u5b89\u88c5\u4e86
 metasearch.export.select.template.file=\u4fdd\u5b58\u6a21\u677f
 metasearch.import.select.template.file=\u6253\u5f00\u6a21\u677f
-v3.MainWindow.button.newtag.share=\u65b0\u529f\u80fd\uff01Torrent\u5206\u4eab
-v3.buddies.faq=\u66f4\u591a\u9605\u8bfb
 dialog.uiswitch.title=\u5207\u6362\u5230 Vuze UI
 dialog.uiswitch.text=\u60a8\u9700\u8981\u8fd0\u884c\u4e2d\u7684 Vuze UI \u6765\u4f7f\u7528\u6b64\u529f\u80fd\n\nVuze \u5c06\u9700\u8981\u91cd\u65b0\u542f\u52a8
 dialog.uiswitch.button=\u5207\u6362\u5230 Vuze UI
@@ -2531,25 +2454,10 @@ azbuddy.tracker.enabled=\u542f\u7528 '\u597d\u53cb\u6367\u573a' \u6765\u901a\u8f
 azbuddy.protocolspeed=KB/s \u6700\u5927\u597d\u53cb\u534f\u8bae\u603b\u5f00\u9500
 v3.MainWindow.button.download=\u4e0b\u8f7d
 v3.MainWindow.button.run=\u542f\u52a8\u5df2\u4e0b\u8f7d\u7684\u6587\u4ef6
-v3.activity.header.friend.requests.foryou=\u597d\u53cb\u8bf7\u6c42 - \u4e3a\u60a8\u7684
-v3.activity.header.friend.requests.fromyou=\u597d\u53cb\u8bf7\u6c42 - \u6765\u81ea\u60a8
-v3.activity.header.friend.requests.accepted=\u597d\u53cb\u8bf7\u6c42 - \u63a5\u53d7
-v3.activity.header.share.requests=Torrent \u5206\u4eab\u8bf7\u6c42
 v3.activity.header.downloads=\u4e0b\u8f7d
-v3.activity.header.rating.reminders=\u4e3a\u63d0\u9192\u8005\u8bc4\u5206
 v3.activity.header.vuze.news=Vuze \u65b0\u95fb
-login.optional.message=\u60a8\u5fc5\u987b\u767b\u5f55\u4ee5\u4f7f\u7528\u6b64\u529f\u80fd
-message.confirm.share.singular=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u5206\u4eab Torrent \u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002
-message.confirm.share.plural=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u5206\u4eab Torrent \u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002
-message.confirm.share.invite.singular=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u8fde\u63a5\u5e76\u5206\u4eab\u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u7684\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.share.invite.plural=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u8fde\u63a5\u5e76\u5206\u4eab\u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u7684\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.invite.singular=\u68d2\u6781\u4e86\uff01\u4f60\u7684\u597d\u53cb\u8bf7\u6c42\u88ab\u5df2\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.invite.plural=\u68d2\u6781\u4e86\uff01\u4f60\u7684\u597d\u53cb\u8bf7\u6c42\u88ab\u5df2\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.invite.error=\u5012\uff01\u4e00\u4e9b\u5bf9\u6b64\u8bf7\u6c42\u7684\u7ebf\u8def\u51b2\u7a81\u4e86\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u4f60\u7684\u8bf7\u6c42\u53d1\u751f\u9519\u8bef\u3002
-message.prompt.add.friends=\u4ece\u4f60\u7684\u4fa7\u9762\u677f\u4e2d\u9009\u62e9\u597d\u53cb (\u5728\u5de6\u4e0b\u89d2).
 message.taking.too.long=\u5982\u679c\u6240\u82b1\u65f6\u95f4\u6bd4\u9884\u671f\u8981\u957f\u7684\u8bdd\n\u6309\u4e0b 'ESC' \u5165\u80a1\u4f60\u60f3\u8981\u53d6\u6d88\u6b64\u64cd\u4f5c
 message.status.success=\u6210\u529f
-message.intro.friends=\u6dfb\u52a0\u597d\u53cb\uff1b\n\u5206\u4eab Torrents\uff1b\n\u66f4\u5feb\u4e0b\u8f7d\u3002
 azbuddy.tracker.bbb.status.title=\u597d\u53cb\u6367\u573a
 azbuddy.tracker.bbb.status.title.tooltip=\u53cc\u51fb\u67e5\u770b\u8be6\u60c5
 azbuddy.tracker.bbb.status.idle=\u6ca1\u6709\u88ab\u6367\u573a
@@ -2558,13 +2466,8 @@ azbuddy.tracker.bbb.status.in=\u6211\u88ab\u6367\u573a\u5566
 azbuddy.tracker.bbb.status.out=\u5f53\u524d\u6367\u573a\u7684\u597d\u53cb
 v3.MainWindow.search.go.tooltip=\u6267\u884c\u641c\u7d22
 v3.MainWindow.search.last.tooltip=\u8fd4\u56de\u641c\u7d22\u7ed3\u679c
-v3.activity.buddy-invited=\u60a8\u5411 %1 \u53d1\u9001\u4e86\u597d\u53cb\u8bf7\u6c42
-v3.activity.buddy-invited.multi=\u60a8\u5411\u4ee5\u4e0b\u4eba\u5458\u53d1\u9001\u4e86\u597d\u53cb\u8bf7\u6c42:\n%1
 metasearch.addtemplate.done.title=\u6dfb\u52a0\u7684\u6a21\u677f
 metasearch.addtemplate.done.desc=\u6a21\u677f '%1' \u6210\u529f\u6dfb\u52a0.\n\u5b83\u4f1a\u5728\u4f60\u4e0b\u6b21\u641c\u7d22\u65f6\u4f7f\u7528\uff01
-v3.MainWindow.button.share=\u5206\u4eab\u5185\u5bb9
-v3.buddies.remove.buddy.dialog.title=\u79fb\u9664
-v3.buddies.remove.buddy.dialog.text=\u60a8\u786e\u5b9a\u8981\u79fb\u9664\u597d\u53cb %1 \u4e48\uff1f
 ConfigView.section.security.nopw=\u6ca1\u6709\u63d0\u4f9b\u5bc6\u7801
 ConfigView.section.security.nopw_v=\u6ca1\u6709\u53ef\u7528\u7684\u5bc6\u7801\uff0c\u8bf7\u4e0e Vuze \u7b7e\u540d
 fileplugininstall.install.title=\u5b89\u88c5\u63d2\u4ef6\uff1f
@@ -2578,14 +2481,7 @@ azbuddy.os_not_avail=\u4e0d\u53ef\u7528
 azbuddy.os_busy=\u5fd9\u788c
 azbuddy.os_offline=\u79bb\u7ebf
 azbuddy.ui.menu.disconnect=\u65ad\u5f00\u94fe\u63a5
-v3.buddy.menu.chat=\u804a\u5929
-v3.chat.offline=%1 \u76ee\u524d\u79bb\u7ebf\uff0c\u5c06\u5728\u4e0a\u7ebf\u65f6\u6536\u5230\u60a8\u53d1\u9001\u7684\u6d88\u606f
-v3.chat.wrongversion=%1 \u4f7f\u7528\u7684 Vuze \u7248\u672c\u4e0d\u652f\u6301\u804a\u5929\u3002
 azbuddy.enable_chat_notif=\u5141\u8bb8\u804a\u5929\u63d0\u793a
-v3.buddies.dnd.info.dialog.title=
-v3.buddies.dnd.info.dialog.text=\u60a8\u53d1\u8d77\u4e86\u4e00\u4e2a Drop Share\u3002\u60a8\u7684\u5185\u5bb9\u6b63\u88ab\u51c6\u5907\u5206\u4eab\u4e2d\uff0c\u5206\u4eab\u7a97\u53e3\u5c06\u5728\u60a8\u5185\u5bb9\u51c6\u5907\u597d\u540e\u6253\u5f00\n\n\u60a8\u9700\u8981\u4fdd\u6301 Vuze \u8fd0\u884c\u4ee5\u4fbf\u60a8\u7684\u597d\u53cb\u63a5\u53d7\u6570\u636e\u3002\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">\u70b9\u51fb\u8fd9\u91cc</A> \u83b7\u5f97\u5173\u4e8e\u6b64\u529f\u80fd\u66f4\u591a\u7684\u4fe1\u606f\u3002
-v3.buddies.dnd.info.dialog.ok=\u786e\u8ba4
-v3.buddies.dnd.info.dialog.remember=\u4e0d\u518d\u663e\u793a\u6b64\u6d88\u606f
 progress.window.msg.progress=\u8bf7\u7b49\u5f85\u64cd\u4f5c\u5b8c\u6210
 DetailedListView.title=\u8be6\u60c5\u5217\u8868
 ConfigView.section.connection.network.max.outstanding.connect.attempts=\u6700\u5927\u5bf9\u5916\u8fde\u63a5\u6570
@@ -2636,25 +2532,18 @@ PluginDeprecation.view=\u63d2\u4ef6 Debug
 PluginDeprecation.alert=\u4e00\u4e2a\u63d2\u4ef6\u5c1d\u8bd5\u4f7f\u7528\u4e00\u4e2a\u5373\u5c06\u88ab\u79fb\u9664\u7684\u529f\u80fd\u3002- \u8bf7\u6253\u5f00\u63d2\u4ef6 Debug \u65e5\u5fd7\u67e5\u770b\u66f4\u591a\u4fe1\u606f\u3002
 TableColumn.header.Thumbnail=\u56fe\u6807
 TableColumn.header.Thumbnail.info=\u7528\u4e8e Vuze \u7684\u7f29\u7565\u56fe\uff1b \u5bf9\u4e8e\u5176\u4ed6\u7684\u5185\u5bb9\u7531\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u8fd9\u4e9b\u56fe\u6807\u3002
-TableColumn.header.Rating_global=\u8bc4\u5206
-TableColumn.header.Rating_global.info=\u5bf9\u6b64\u5185\u5bb9\u7684\u603b\u4f53\u8bc4\u5206
 v3.MainWindow.menu.getting_started=\u5f00\u59cb\u4f7f\u7528(G)
 MainWindow.menu.community=\u793e\u533a\uff08C\uff09
 MainWindow.menu.help.faq=\u5e38\u89c1\u95ee\u9898\u89e3\u7b54\uff08&F\uff09
 MainWindow.menu.community.wiki=\u793e\u533a\u7ef4\u57fa\uff08W\uff09
 MainWindow.menu.community.forums=\u793e\u533a\u8bba\u575b\uff08R\uff09
 MainWindow.menu.community.blog=Vuze \u535a\u5ba2\uff08B\uff09
-MainWindow.menu.community.add_friends=\u6dfb\u52a0\u597d\u53cb\uff08A\uff09
 MainWindow.menu.help.support=\u5e2e\u52a9\u548c\u652f\u6301(H)
 externalLogin.title=\u9700\u8981\u767b\u5f55
 externalLogin.explanation=\u6a21\u677f "%1" \u9700\u8981\u60a8\u767b\u5f55\u3002\u4e00\u65e6\u767b\u5f55\u8be5\u7a97\u53e3\u4f1a\u81ea\u52a8\u5173\u95ed\u3002\u5982\u679c\u6ca1\u6709\u7684\u8bdd\u8bf7\u70b9\u51fb\u201c\u5b8c\u6210\u3002
 externalLogin.explanation.capture=\u60a8\u9700\u8981\u767b\u5f55\u6765\u521b\u5efa\u6b64\u6a21\u677f\u3002\u4e00\u65e6\u60a8\u767b\u5f55\u4e86\uff0c\u8bf7\u70b9\u51fb\u201c\u5b8c\u6210\u201d
 Button.done=\u5b8c\u6210
 GeneralView.torrent_created_on_and_by=%1 \u7531 %2 \u521b\u5efa
-v3.Share.wizard.title=\u5206\u4eab -- \u5411\u5bfc
-v3.AddFriends.header.message=\u6dfb\u52a0\u597d\u53cb\u5e76\u5f00\u59cb\u5206\u4eab\u60a8\u6700\u559c\u7231\u7684torrents
-v3.AddFriends.header=\u6dfb\u52a0\u597d\u53cb
-v3.AddFriends.wizard.title=\u6dfb\u52a0\u597d\u53cb -- \u5411\u5bfc
 Button.continue=\u7ee7\u7eed
 Button.preview=\u9884\u89c8
 Subscription.menu.forcecheck=\u73b0\u5728\u66f4\u65b0
@@ -2665,9 +2554,6 @@ sidebar.LibraryDL=\u4e0b\u8f7d\u4e2d
 sidebar.LibraryCD=\u5df2\u5b8c\u6210
 authenticator.location=\u5730\u5740
 authenticator.details=\u8be6\u60c5
-v3.MainWindow.menu.publish.new=\u53d1\u5e03\u65b0\u5185\u5bb9
-v3.MainWindow.menu.publish.mine=\u60a8\u53d1\u5e03\u7684\u5185\u5bb9
-v3.MainWindow.menu.publish.about=\u5173\u4e8e\u53d1\u5e03...
 v3.MainWindow.menu.showActionBarText=\u663e\u793a\u6587\u672c
 subscript.import.fail.title=\u5bfc\u5165\u5931\u8d25
 subscript.import.fail.desc=\u8be6\u60c5: %1
@@ -2684,13 +2570,11 @@ Subscription.menu.reset=\u91cd\u7f6e\u81f3\u521d\u59cb\u72b6\u6001
 ConfigView.section.Subscriptions=\u8ba2\u9605
 subscriptions.config.maxresults=\u6bcf\u4e2a\u8ba2\u9605\u76f8\u5173\u7ed3\u679c\u7684\u6700\u5927\u6570 [0: \u65e0\u9650\u5236]
 v3.activity.button.readall=\u6807\u8bb0\u6240\u6709\u4e3a\u5df2\u8bfb
-ConfigView.interface.start.library=\u4ece\u5a92\u4f53\u5e93\u5f00\u59cb
 TableColumn.header.activityNew=\u65b0\u5efa
 TableColumn.header.activityType=\u7c7b\u578b
 TableColumn.header.activityText=\u6d88\u606f
 TableColumn.header.activityDate=\u6dfb\u52a0\u7684\u65e5\u671f
 TableColumn.header.activityActions=\u52a8\u4f5c
-TableColumn.header.activityAvatar=\u5934\u50cf
 Subscription.menu.resetauth=\u91cd\u7f6e\u6388\u6743\u8be6\u60c5
 Search.menu.engines=\u6a21\u677f
 Wizard.Subscription.title=\u8ba2\u9605
@@ -2716,8 +2600,6 @@ Wizard.Subscription.rss.subtitle3=\u4e00\u65e6\u4fdd\u5b58\uff0c\u60a8\u5c31\u53
 Wizard.Subscription.subscribe.library=\u5a92\u4f53\u5e93\u4e2d\u7684\u5185\u5bb9
 Wizard.Subscription.subscribe.subscriptions=\u76f8\u5173\u7684\u8ba2\u9605
 Wizard.Subscription.subscribe.library.empty=\u6ca1\u6709\u53ef\u7528\u7684\u8ba2\u9605\uff1f\n \n\u627e\u627e Vuze HD Network \u4e0a\u4eae\u6a59\u8272\u7684\u8ba2\u9605\u6309\u94ae.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\u66f4\u591a\u9605\u8bfb</A>
-TableColumn.header.Info=\u4fe1\u606f
-TableColumn.header.videoLength=\u89c6\u9891\u957f\u5ea6
 message.confirm.delete.title=\u5220\u9664\u786e\u8ba4
 message.confirm.delete.text=\u4f60\u786e\u5b9a\u8981\u5220\u9664 '%1'?
 Subscription.menu.properties=\u5c5e\u6027
@@ -2767,8 +2649,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u548c\u8ba2\u9605\u76f8\u517
 Button.deleteContent.fromLibrary=\u4ece\u5a92\u4f53\u5e93\u4e2d\u79fb\u9664
 Button.deleteContent.fromComputer=\u4ece\u8ba1\u7b97\u673a\u4e2d\u5220\u9664
 v3.deleteContent.message=\n\u60a8\u60f3\u8981\u4ece\u60a8\u7535\u8111\u4e2d\u5220\u9664 '%1' \uff0c\u8fd8\u662f\u4ec5\u4ec5\u60f3\u4ece Vuze \u5a92\u4f53\u5e93\u4e2d\u79fb\u9664\u5462\uff1f
-v3.library.infobar.text1=\u5728\u627e\u201c\u9ad8\u7ea7\u89c6\u56fe\u201c\uff1f
-v3.library.infobar.text2=\u4f7f\u7528\u5728\u4e0a\u9762\u7684\u5de5\u5177\u680f\u7684\u201c\u89c6\u56fe\u201c\u6309\u94ae\u5207\u6362\u3002
 v3.MainWindow.menu.view.toolbartext=\u5de5\u5177\u680f\u6587\u672c
 v3.MainWindow.menu.view.asSimpleList=\u7b80\u6d01\u5217\u8868
 v3.MainWindow.menu.view.asAdvancedList=\u9ad8\u7ea7\u5217\u8868
@@ -2788,16 +2668,6 @@ azbuddy.ui.menu.cat.share=\u542f\u7528\u6765\u81ea\u597d\u53cb\u7684\u8ba2\u9605
 azbuddy.ui.menu.cat.set=\u8f93\u5165\u5206\u7c7b
 azbuddy.ui.menu.cat.set_msg=\u7528\u9017\u53f7\u5206\u9694\u7684\u5206\u7c7b\u5217\u8868\uff0c\u6216\u8005 'All'
 azbuddy.ui.menu.cat_subs=\u8ba2\u9605
-v3.buddy.prop.dn=\u663e\u793a\u540d
-v3.buddy.prop.un=\u7528\u6237\u540d
-v3.buddy.prop.on=\u5728\u7ebf
-v3.buddy.prop.lupd=\u4e0a\u6b21\u66f4\u65b0
-v3.buddy.prop.pks=\u516c\u94a5\u8ba1\u6570
-v3.buddy.prop.pc=\u5f85\u5b9a\u7684\u804a\u5929\u4fe1\u606f
-v3.buddy.prop.catout=\u60a8\u5141\u8bb8\u597d\u53cb\u8ba2\u9605\u7684\u5206\u7c7b
-v3.buddy.prop.catin=\u597d\u53cb\u63d0\u4f9b\u7ed9\u60a8\u7684\u5206\u7c7b
-v3.buddy.set.catout=\u5141\u8bb8\u597d\u53cb\u8ba2\u9605\u6b64\u5206\u7c7b
-v3.buddy.set.catin=\u8ba2\u9605\u597d\u53cb\u7684\u5206\u7c7b
 v3.dialog.cnclose.title=%1 \u5173\u95ed
 v3.dialog.cnclose.subtitle=\u63d0\u793a
 v3.dialog.cnclose.info1=\u60a8\u5df2\u7ecf\u5173\u95ed\u4e86\u4e00\u4e2a\u9ad8\u6e05\u7f51\u7edc
@@ -2810,12 +2680,9 @@ TableColumn.header.category.info=torrent \u6240\u5c5e\u7684\u5206\u7c7b\u540d
 TableColumn.header.DateCompleted.info=torrent \u4e0b\u8f7d\u5b8c\u6210\u7684\u65e5\u671f
 TableColumn.header.AzProduct.info=torrent \u6765\u81ea\u7684\u5185\u5bb9\u7f51\u7edc
 TableColumn.header.health.info=\u60a8\u5230 torrent \u7fa4\u7684\u94fe\u63a5\u5065\u5eb7\u5ea6\u5982\u4f55
-TableColumn.header.Info.info=\u542f\u52a8 Vuze \u8be6\u7ec6\u5185\u5bb9\u9875\u9762\u7684\u6309\u94ae
 TableColumn.header.maxuploads.info=\u540c\u65f6\u4e0a\u4f20\u7684\u6700\u5927 # peer \u6570
 TableColumn.header.name.info=torrent \u7684\u540d\u5b57
 TableColumn.header.unopened.info=\u663e\u793a torrent \u662f\u5426\u88ab\u64ad\u653e\u8fc7\uff08\u6253\u5f00\u8fc7\uff09\u7684\u6807\u8bc6\u7b26
-TableColumn.header.Quality.info=vuze \u5185\u5bb9\u7684\u8d28\u91cf\uff0c\u6bd4\u5982\u9ad8\u6e05\u3001\u6807\u6e05 
-TableColumn.header.RateIt.info=\u5bf9 vuze \u5185\u5bb9\u8bc4\u5206\u7684\u80fd\u529b
 TableColumn.header.savepath.info=torrent \u6570\u636e\u7684\u76ee\u6807\u6587\u4ef6\u5939\u6216\u6587\u4ef6
 TableColumn.header.SeedingRank.info=\u6807\u8bc6\u8be5 torrent \u5728\u591a\u5927\u7a0b\u5ea6\u4e0a\u9700\u8981\u505a\u79cd\u3002\u8f83\u9ad8\u7684\u503c\u610f\u5473\u7740\u6709\u8f83\u5f3a\u7684\u9700\u8981\u3002
 TableColumn.header.shareRatio.info=\u5c06\u60a8\u4e0a\u4f20\uff08\u5206\u4eab\uff09\u7684\u91cf\u4e0e\u4e0b\u8f7d\u7684\u91cf\u6bd4\u8f83
@@ -2825,7 +2692,6 @@ TableColumn.header.upspeed.info=\u5f53\u524d\u4e0a\u4f20\u901f\u5ea6
 TableColumn.header.downspeed.info=\u5f53\u524d\u4e0b\u8f7d\u901f\u5ea6
 TableColumn.header.up.info=\u5f53\u524d\u53d1\u9001\u7ed9\u5176\u4ed6\u7528\u6237\u7684\u6570\u636e\u91cf
 TableColumn.header.down.info=\u5f53\u524d\u4ece\u5176\u4ed6\u7528\u6237\u83b7\u5f97\u7684\u6570\u636e\u91cf
-TableColumn.header.videoLength.info=\u64ad\u653e vuze \u89c6\u9891\u5185\u5bb9\u65f6\u95f4
 TableColumn.header.ProgressETA.info=\u5c06\u72b6\u6001\u3001\u5b8c\u6210\u5ea6\u3001\u5269\u4f59\u65f6\u95f4\u548c\u4e0b\u8f7d\u901f\u5ea6\u6574\u5408\u5230\u4e00\u4e2a\u591a\u7ebf\u680f\u4e2d
 TableColumn.header.eta.info=\u5230 torrent \u4e0b\u8f7d\u5b8c\u6210\u7684\u4f30\u8ba1\u65f6\u95f4
 Pieces.column.#.info=\u5757\u7f16\u53f7
@@ -2846,19 +2712,3 @@ ColumnSetup.categories=\u5206\u7c7b\uff1a
 ColumnSetup.filters=\u8fc7\u6ee4\u5668
 ColumnSetup.availcolumns=\u53ef\u7528 %1 \u680f
 ColumnSetup.availcolumns.filteredby=\u7528 %2 \u8fc7\u6ee4\u540e\u7684\u53ef\u7528 %1 \u680f
-# The remaining keys were not in MessagesBundle.properties
-window.uiswitcher.AdvancedUI.title=\u9ad8\u7ea7 Vuze
-window.uiswitcher.AdvancedUI.text=* \u63a8\u8350\u90a3\u4e9b\u5e0c\u671b\u4fdd\u7559\u7ecf\u5178\u754c\u9762\u53c8\u9700\u8981 Vuse \u5e73\u53f0\u7684\u641c\u7d22\uff0c\u6d4f\u89c8\uff0c\u53d1\u5e03\u5185\u5bb9\u529f\u80fd\u7684\u7528\u6237\u4f7f\u7528\n\n* \u7b80\u5355\u7684\uff0c\u76f4\u89c2\u7684\u56fe\u5f62\u754c\u9762\uff0c\u642d\u914d\u66f4\u5148\u8fdb\u7684\u7279\u6027\u548c\u529f\u80fd
-v3.mb.notTrusted.button.cancel=\u53d6\u6d88
-v3.mb.UnknownContent.title=\u5185\u5bb9\u672a\u77e5
-v3.mb.notTrusted.text=\u5185\u5bb9 "%1" \u88ab\u8bc6\u522b\u4e3a\u6709\u6f5c\u5728\u5a01\u80c1\u7684\u5185\u5bb9\uff0c\u56e0\u4e3a\u7cfb\u7edf\u62a5\u544a\u5176\u7c7b\u578b\u4e3a\u7c7b\u578b\uff08%2\uff09.
-v3.mb.notTrusted.title=\u5185\u5bb9\u4e0d\u53ef\u4fe1
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u8bbe\u7f6e\u6d41\u91cf\u7b49\u7ea7/\u670d\u52a1\u7c7b\u578b\uff08TOS\uff09 \u5728\u8f93\u51fa\u5305 IP \u5934\u7684\u5b57\u6bb5\u3002\nVuze \u7559\u7a7a\u4e0d\u8bbe\u4e3a\u9ed8\u8ba4\uff0c\u610f\u601d\u662f\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u3002\n\u4f8b\u5982\u6570\u503c\u662f\uff1a\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\n\u6ce8\u610f\uff1a\u4f18\u5148\u7f51\u7edc\u5b9e\u73b0\u53ef\u80fd\u4f1a\u5ffd\u7565\u6b64\u503c\uff0c\u6240\u4ee5\u6b64\u9009\u9879\u975e\u5e38\u4f9d\u8d56\u7cfb\u7edf\u548c JRE \u7684\u7248\u672c\u3002
-v3.mb.notTrusted.noapp.text=\u5185\u5bb9 "%1" \u88ab\u8bc6\u522b\u4e3a\u6709\u6f5c\u5728\u5a01\u80c1\u7684\u5185\u5bb9\uff0c\u56e0\u4e3a\u7cfb\u7edf\u62a5\u544a\u5176\u7c7b\u578b\u4e3a\u672a\u77e5\u7c7b\u578b\uff08%2\uff09.
-v3.mb.UnknownContent.noapp.text=\u5185\u5bb9 "%1" \u65e0\u6cd5\u8bc6\u522b\uff0c\u56e0\u4e3a\u7cfb\u7edf\u6ca1\u6709\u8be5\u7c7b\u578b\u6587\u4ef6\uff08%2\uff09 \u7684\u5173\u8054\u7a0b\u5e8f\u3002
-v3.mb.UnknownContent.button.cancel=\u53d6\u6d88
-ConfigView.section.connection.advanced.IPTOS=\u8f93\u51fa\u5305\u670d\u52a1\u7c7b\u578b\uff08TOS\uff09\uff3bex. 0x02\uff0c 0x10\uff3d
-v3.mb.notTrusted.button.run=\u5373\u4f7f\u5982\u6b64\u4e5f\u8981\u8fd0\u884c
-v3.mb.UnknownContent.button.run=\u5373\u4f7f\u5982\u6b64\u4e5f\u8981\u8fd0\u884c
-v3.mb.UnknownContent.text=\u5185\u5bb9 "%1" \u65e0\u6cd5\u8bc6\u522b\uff0c\u7cfb\u7edf\u62a5\u544a\u5185\u5bb9\u4e3a\u7c7b\u578b "%2" \uff0c\u4f46\u6587\u4ef6\u81ea\u79f0 "%3"\u3002
-deletedata.message2=\n\u4f60\u786e\u8ba4\u8981\u7ee7\u7eed\u5417\uff1f
diff --git a/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties b/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties
index 23a8512..0e2e761 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
 MainWindow.menu.file.open.torrent=Torrent \u6a94...
 Main.parameter.usage=\u7528\u6cd5 : java org.gudy.azureus2.cl.Main [\u53c3\u6578] "\u6a94\u6848\u540d.torrent" "\u4fdd\u5b58\u8def\u5f91" 
 Main.parameter.maxUploads=\u6700\u5927\u540c\u6642\u4e0a\u50b3\u6578\u76ee
@@ -379,7 +380,6 @@ MyTorrentsView.menu.removeand.deletedata=\u522a\u9664\u8cc7\u6599 (&D)
 MyTorrentsView.menu.removeand.deleteboth=\u5169\u8005\u90fd\u522a\u9664 (&B)
 deletedata.title=\u8b66\u544a
 deletedata.message1=\u60a8\u5c07\u8981\u522a\u9664\u8cc7\u6599\uff0c\u8a72\u8cc7\u6599\u4f4d\u65bc\uff1a\n
-deletedata.message2=\n\u60a8\u78ba\u5b9a\u8981\u7e7c\u7e8c?
 MainWindow.menu.file.configure=\u8a2d\u5b9a\u7cbe\u9748 (&W)
 configureWizard.title=\u8a2d\u5b9a\u7cbe\u9748
 configureWizard.welcome.title=\u6b61\u8fce\u4f7f\u7528 Vuze \u8a2d\u5b9a\u7cbe\u9748
@@ -514,7 +514,6 @@ ConfigView.section.tracker=Tracker
 ConfigView.section.tracker.pollinterval=Tracker \u7528\u6236\u7aef\u8f2a\u8a62\u9593\u9694\uff08\u79d2\uff09
 ConfigView.section.tracker.publishenable=\u767c\u4f48 torrent \u8a73\u7d30\u8cc7\u8a0a\u5230 "<tracker_url>"
 ConfigView.section.tracker.ip=Tracker \u5916\u90e8 IP \u4f4d\u5740
-MainWindow.menu.help.faq=\u5e38\u898b\u554f\u984c (&F)
 ConfigView.section.style.enableXPStyle=\u555f\u7528 XP \u98a8\u683c\uff08\u9700\u8981\u91cd\u65b0\u555f\u52d5\uff09
 IPChecker.external.service.dyndns.name=DynDNS \u7db2\u7ad9
 IPChecker.external.service.dyndns.url=http://www.dyndns.org/ 
@@ -553,7 +552,6 @@ splash.openViews=\u958b\u555f\u6aa2\u8996
 splash.plugin=\u8f09\u5165\u5916\u639b\u6a21\u7d44 : 
 configureWizard.nat.tooManyPorts=\u6e2c\u8a66\u904e\u591a\u7684\u9023\u63a5\u57e0 (\u6700\u591a 9 \u500b)
 ConfigView.section.color=\u8272\u5f69\u914d\u7f6e
-PeerSocket.unknown=\u672a\u77e5
 MyTorrentsView.menu.publish=\u516c\u4f48... (&P)
 MyTrackerView.status.published=\u5df2\u516c\u4f48
 MyTrackerView.completed=\u5df2\u5b8c\u6210
@@ -569,9 +567,15 @@ IPChecker.external.service.no-ip.description=\u865b\u64ec\u548c\u56fa\u5b9a\u5f0
 ConfigView.section.tracker.publicenable=\u555f\u7528\u5916\u90e8 torrents
 ConfigView.label.playdownloadspeech=\u4e0b\u8f09\u5b8c\u7562\u5f8c\u64ad\u653e\u8a9e\u97f3\u63d0\u793a
 ConfigView.label.playdownloadspeech.info=\u76ee\u524d\u53ea\u6709\u82f1\u8a9e\u767c\u97f3
+#
+# Tooltips
+#
 GeneralView.label.status.pieces_available.tooltip=\u986f\u793a\u6bcf\u500b\u6a94\u6848\u5206\u584a\u53ef\u7528\u7684\u62f7\u8c9d\u6578\u76ee\n\u5982\u679c\u6578\u5b57\u7b49\u65bc\u6216\u5c0f\u65bc 1\uff0c\u60a8\u4fbf\u7121\u6cd5\u627e\u5230\u5b8c\u6574\u7684\u6a94\u6848\u62f7\u8c9d\uff08\u53ef\u80fd\u7121\u6cd5\u5b8c\u6210\u4e0b\u8f09\uff09
 GeneralView.label.trackerurl.tooltip=\u9ede\u9078\u6b64\u8655\u4ee5\u62f7\u8c9d\u767c\u4f48 url \u5230\u526a\u8cbc\u7c3f
 GeneralView.label.trackerurlopen.tooltip=\u9ede\u9078\u6b64\u8655\u6253\u958b tracker \u4e3b\u9801 
+#
+# 2.0.4.4
+#
 ConfigView.section.style.guiUpdate=\u66f4\u65b0 GUI \u9593\u9694
 ConfigView.section.style.graphicsUpdate=\u6bcf\u9694 N \u6b21 GUI \u66f4\u65b0\uff0c\u4e00\u4f75\u66f4\u65b0\u5716\u5f62\u689d
 ConfigView.section.style.reOrderDelay=\u6bcf N \u500b GUI \u66f4\u65b0\uff0c\u91cd\u65b0\u6392\u5217\u8868\u683c [0\uff1a\u6c38\u4e0d]
@@ -708,7 +712,9 @@ health.explain.yellow=\u8868\u793a tracker \u662f\u6b63\u5e38\u7684\uff0c\u60a8\
 health.explain.green=\u8868\u793a\u4e00\u5207\u6b63\u5e38
 ConfigView.section.style.alwaysRefreshMyTorrents=\u6301\u7e8c\u5237\u65b0"\u6211\u7684 Torrents"
 ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u9019\u500b\u9078\u9805\u6703\u66f4\u65b0"\u6211\u7684 Torrent" ,\u5373\u4f7f\u6c92\u6709\u986f\u793a\u51fa\u4f86 (\u5c0d\u67d0\u4e9b\u5916\u639b\u6a21\u7d44\u5f88\u6709\u7528)
-ConfigView.section.style.verticaloffset=\u5716\u5f62\u5782\u76f4\u504f\u79fb\uff08GTK fix\uff09
+#
+#2.0.7.0
+#
 security.certtruster.title=\u5b89\u5168\u6027\u6191\u8b49\u8b66\u544a
 security.certtruster.intro=\u9019\u500b\u5b89\u5168\u6027\u6191\u8b49\u662f\u7531\u60a8\u4e0d\u4fe1\u4efb\u7684\u516c\u53f8\u6240\u767c\u884c
 security.certtruster.resource=\u4f86\u6e90:
@@ -765,6 +771,9 @@ ConfigView.section.style.dropdiraction=\u555f\u7528\u76ee\u9304\u62d6\u653e\u529
 ConfigView.section.style.dropdiraction.opentorrents=\u6253\u958b Torrents
 ConfigView.section.style.dropdiraction.sharefolder=\u5171\u4eab\u76ee\u9304
 ConfigView.section.style.dropdiraction.sharefoldercontents=\u5171\u4eab\u5167\u5bb9
+#
+# 2.0.7.x
+#
 Categories.all=\u5168\u90e8
 Categories.uncategorized=\u672a\u5206\u985e
 CategoryAddWindow.message=\u8f38\u5165\u65b0\u7684\u5206\u985e\u540d\u7a31
@@ -843,7 +852,6 @@ ConfigView.text.minutes=\u5206
 ConfigView.text.neverIgnore=\u6c38\u4e0d\u5ffd\u7565
 ConfigView.text.any=\u4efb\u4f55
 DownloadManager.error.datamissing=\u8cc7\u6599\u907a\u5931
-iconBar.queue.tooltip=\u6392\u7a0b
 MainWindow.menu.file.open.torrentforseeding=Torrent \u6a94... (\u505a\u7a2e\u7528)
 MainWindow.menu.language.refresh=\u91cd\u65b0\u8b80\u53d6 (&R)
 ManagerItem.forced=\u5f37\u5236
@@ -921,6 +929,9 @@ SpeedView.stats.uptime=\u4e0a\u50b3\u6642\u9593
 SpeedView.stats.now=\u73fe\u5728
 SpeedView.stats.now.tooltip=\u7e3d\u8a08 (\u5354\u5b9a)
 AutoMigration.useralert=Vuze \u4f7f\u7528\u8005\u8a2d\u5b9a\u6a94\u6848/\u76ee\u9304\u81ea\u52d5\u79fb\u52d5\u7d50\u679c:\n\n%1\n\u4efb\u4f55\u5931\u6557\u90fd\u5fc5\u9808\u624b\u52d5\u79fb\u52d5.\n\u5982\u679c\u6a94\u6848\u88ab\u79fb\u52d5\u4e86\uff0c\u4e0d\u8981\u5fd8\u8a18\u5728\u8a2d\u5b9a\u4e2d\u66f4\u65b0\u60a8\u7684\u5b58\u6a94\u8def\u5f91
+#
+# > 2.0.8.0
+#
 OpenTorrentWindow.title=\u958b\u555f torrent
 OpenTorrentWindow.message=\u5be6\u9a57\u4e2d
 OpenTorrentWindow.addFiles=\u52a0\u5165\u6a94\u6848 (&A)
@@ -1160,6 +1171,8 @@ MyTrackerView.badnat.info=\u7a2e\u5b50/\u5925\u4f34 \u7684 NAT \u6aa2\u67e5\u932
 ConfigView.section.tracker.natchecktimeout=\u6aa2\u67e5\u903e\u6642\uff08\u79d2\uff09
 ConfigView.section.file.perf.cache.enable=\u555f\u7528\u78c1\u789f\u5feb\u53d6
 ConfigView.section.file.perf.cache.size=\u5feb\u53d6\u5927\u5c0f\u70ba%1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
 MainWindow.menu.transfers=\u50b3\u9001 (&R)
 MainWindow.menu.transfers.startalltransfers=\u5168\u90e8\u555f\u52d5 (&A)
 MainWindow.menu.transfers.stopalltransfers=\u5168\u90e8\u505c\u6b62 (&O)
@@ -1245,8 +1258,6 @@ FilesView.fullpath=\u986f\u793a\u5b8c\u6574\u8def\u5f91
 FilesView.remaining=\u672a\u5b8c\u6210\u7684\u6a94\u6848\u5206\u584a
 TableColumn.header.trackername=Tracker \u540d\u7a31
 TableColumn.header.trackername.info=URL \u767c\u4f48\u7684 tracker \u540d\u7a31
-ConfigView.label.announceport=\u7f6e\u63db tracker \u6307\u5b9a\u7684\u9023\u63a5\u57e0
-ConfigView.label.announceport.tooltip=\u901a\u77e5 tracker \u60a8\u6b63\u5728\u4f7f\u7528\u4e0d\u540c\u7684\u9023\u63a5\u57e0\u76e3\u807d\u3002\u4e0d\u60f3\u4f7f\u7528\u9019\u500b\u9078\u9805\u7684\u8a71\u8acb\u4fdd\u6301\u7a7a\u767d
 ConfigView.group.override=\u512a\u5148\u8a2d\u5b9a
 ConfigView.section.file.perf.cache.notsmallerthan=\u4e0d\u8981\u5feb\u53d6\u5c0f\u65bc(%1)\u7684\u6a94\u6848
 PeersView.menu.blockupload=\u963b\u6b62\u4e0a\u50b3
@@ -1277,8 +1288,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Socket SO_RCVBUF size[0\uff1a\u
 ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=\u8a2d\u5b9a\u6a19\u6e96 socket SO_RCVBUF \u6578\u503c\uff08bytes\uff09\uff0ci.e. TCP \u63a5\u6536\u7a97\u53e3\u7684\u5927\u5c0f\u548c\u6bd4\u4f8b\nVuze \u9810\u8a2d\u70ba\u7a7a\u767d\uff0c\u4e5f\u5c31\u662f\u6839\u64da\u6240\u4f7f\u7528\u7684\u5e95\u5c64\u4f5c\u696d\u7cfb\u7d71\u800c\u5b9a\n\u6ce8\u610f\uff1aLinux \u6703\u4f7f\u7528\u5169\u500d\u7684\u6307\u5b9a\u6578\u503c
 ConfigView.section.connection.advanced.SO_SNDBUF=Socket SO_SNDBUF size[0\uff1a\u9810\u8a2d]                   
 ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=\u8a2d\u5b9a\u6a19\u6e96 socket SO_SNDBUF \u6578\u503c\uff08bytes\uff09\uff0ci.e. TCP \u50b3\u9001\u7a97\u53e3\u7684\u5927\u5c0f\nVuze \u9810\u8a2d\u70ba\u7a7a\u767d\uff0c\u4e5f\u5c31\u662f\u6839\u64da\u6240\u4f7f\u7528\u7684\u5e95\u5c64\u4f5c\u696d\u7cfb\u7d71\u800c\u5b9a\n\u6ce8\u610f\uff1aLinux \u6703\u4f7f\u7528\u5169\u500d\u7684\u6307\u5b9a\u6578\u503c
-ConfigView.section.connection.advanced.IPTOS=\u9001\u51fa\u7684\u5c01\u5305\u670d\u52d9\u985e\u578b\uff08TOS\uff09                      
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u8a2d\u5b9a\u6d41\u91cf\u985e\u5225 / type-of-service (TOS) field in the IP header for outgoing packets.\nVuze \u9810\u8a2d\u70ba\u7a7a\u767d\uff0c\u4e5f\u5c31\u662f\u6839\u64da\u6240\u4f7f\u7528\u7684\u5e95\u5c64\u4f5c\u696d\u7cfb\u7d71\u800c\u5b9a\nExample values are:\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\n\u6ce8\u610f: \u5e95\u5c64\u7db2\u8def\u67b6\u69cb\u53ef\u80fd\u6703\u5ffd\u7565\u6b64\u9805\u6578\u503c\uff0c\u56e0\u6b64\u6b64\u9078\u9805\u4e3b\u8981\u4f9d\u64da\u4f5c\u696d\u7cfb\u7d71\u548c JRE \u7248\u672c\u800c\u5b9a
 ConfigView.section.interface.confirm_torrent_removal=torrent \u88ab\u79fb\u9664\u6642\uff0c\u986f\u793a\u78ba\u8a8d\u5c0d\u8a71\u8996\u7a97
 ConfigView.section.interface.confirm_torrent_removal.tooltip=\u5f9e"\u6211\u7684 torrent" \u4e2d\u79fb\u9664 torrent \u6642,\u8981\u6c42\u78ba\u8a8d
 MyTorrentsView.confirm_torrent_removal=\u60a8\u78ba\u5b9a\u8981\u522a\u9664\uff1f\n
@@ -1425,6 +1434,7 @@ MainWindow.menu.tools.nattest=NAT / Firewall \u6e2c\u8a66 (&N)
 Button.apply=\u5957\u7528
 Button.close=\u95dc\u9589
 window.welcome.title=\u6b61\u8fce\u4f7f\u7528 Vuze %1
+#file can be a URL or a path in the jar
 MainWindow.menu.help.releasenotes=\u66f4\u65b0\u7d00\u9304
 dht.reseed.label=\u4e00\u822c\u4f86\u8aaa,\u5206\u6563\u6027\u8cc7\u6599\u5eab\u6c92\u6709\u91cd\u65b0\u4f5c\u7a2e\u7684\u5fc5\u8981.\u4f46\u662f\u5982\u679c\u9023\u7d61\u4eba\u7684\u6578\u76ee\u904e\u4f4e,\u5247\u53ef\u4ee5\u7528\u4f86\u6574\u5408.\n \u4fdd\u6301\u7a7a\u767d\u4ee5\u8e22\u6389\u5df2\u9023\u7dda\u7684\u5925\u4f34\u6216\u662f\u8f38\u5165 IP \u4f4d\u7f6e\u548c\u9023\u63a5\u57e0\u4f86\u65b7\u7dda\u5df2\u77e5\u7684\u5925\u4f34
 dht.reseed.group=\u91cd\u65b0\u505a\u7a2e
@@ -1541,8 +1551,8 @@ Formats.units.kbit=kbit (\u5341\u9032\u4f4d)
 Formats.units.bit=\u4f4d\u5143
 Formats.units.alot=\u5f88\u591a !!!
 ConfigView.section.ipfilter.persistblocking=\u6bcf\u6b21\u91cd\u555f\u6642\u5132\u5b58\u5c01\u9396\u7684 IP \u7d30\u7bc0
-FilesView.rename.choose.path=\u9078\u64c7\u65b0\u589e\u6216\u5df2\u5b58\u5728\u7684\u6a94\u6848
 FilesView.menu.rename=\u91cd\u65b0\u547d\u540d\u6216\u91cd\u8a2d\u76ee\u7684\u5730
+FilesView.rename.choose.path=\u9078\u64c7\u65b0\u589e\u6216\u5df2\u5b58\u5728\u7684\u6a94\u6848
 FilesView.rename.confirm.delete.title=\u78ba\u8a8d\u522a\u9664
 FilesView.rename.confirm.delete.text=\u78ba\u8a8d\u522a\u9664\u539f\u59cb\u6a94 '%1'
 ConfigView.section.mode=\u6a21\u5f0f
@@ -1625,6 +1635,7 @@ MyTorrentsView.dialog.NumberError.title=\u7121\u6548\u6216\u7121\u6cd5\u8fa8\u8b
 MyTorrentsView.dialog.NumberError.text=\u60a8\u8f38\u5165\u7684\u6578\u5b57\u7121\u6548\u6216\u662f\u7121\u6cd5\u8fa8\u8b58
 MyTorrentsView.menu.manual=\u624b\u52d5... (&M)
 MyTorrentsView.dialog.setSpeed.title=\u8a2d\u5b9a %1 \u901f\u5ea6
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
 MyTorrentsView.dialog.setNumber.text=\u8f38\u5165 %1 \u4f86\u66f4\u6539 %2:
 MyTorrentsView.dialog.setNumber.upload=\u4e0a\u50b3
 MyTorrentsView.dialog.setNumber.download=\u5df2\u4e0b\u8f09
@@ -1724,7 +1735,6 @@ TorrentOptionsView.param.max.uploads=\u6700\u5927\u4e0a\u50b3\u9023\u7dda\u6578\
 MyTorrentsView.dialog.setPosition.title=\u8a2d\u5b9a\u4f4d\u7f6e
 MyTorrentsView.dialog.setPosition.text=\u70ba\u9078\u64c7\u7684 torrents \u8f38\u5165\u4f4d\u7f6e
 MyTorrentsView.menu.reposition.manual=\u518d\u914d\u7f6e
-TorrentOptionsView.param.max.uploads.when.seeding.enable=\u505a\u7a2e\u6642\u66ff\u4ee3\u4e0a\u50b3\u6578
 ConfigView.section.connection.advanced.info.link=\u8acb\u53c3\u7167\u6b64\u8655\u7684\u8a73\u7d30\u8aaa\u660e
 ConfigView.section.connection.advanced.socket.group=Socket \u9078\u9805
 ConfigView.section.connection.advanced.bind_port=\u9650\u5236\u5728\u672c\u5730\u9023\u63a5\u57e0 [0\uff1a\u505c\u7528]              
@@ -1747,6 +1757,7 @@ ConfigView.section.file.resume.recheck.all=\u7576\u6a5f\u91cd\u65b0\u555f\u52d5\
 ConfigureWizard.language.choose=\u5f9e\u4e0b\u9762\u7684\u5217\u8868\u9078\u64c7\u8a9e\u8a00
 popup.closing.in=\u5728 %1 \u79d2\u5f8c\u81ea\u52d5\u95dc\u9589\u8996\u7a97
 popup.more.waiting=%1 \u66f4\u591a\u8a0a\u606f..
+# > 2402
 popup.next=\u4e0b\u4e00\u500b>
 popup.previous=\u524d\u4e00\u500b< (%1)
 popup.download.finished="%1" \u5df2\u7d93\u4e0b\u8f09\u5b8c\u7562
@@ -1880,13 +1891,8 @@ MainWindow.menu.view.iconbar=\u5de5\u5177\u5217
 MyTorrentsView.menu.rename=\u66f4\u540d
 MyTorrentsView.menu.rename.displayed=\u66f4\u6539\u986f\u793a\u540d\u7a31
 MyTorrentsView.menu.rename.save_path=\u66f4\u6539\u5132\u5b58\u8def\u5f91
-MyTorrentsView.menu.rename.displayed_and_save_path=\u5169\u8005\u90fd\u66f4\u6539
 MyTorrentsView.menu.rename.displayed.enter.title=\u66f4\u6539\u986f\u793a\u540d\u7a31
 MyTorrentsView.menu.rename.displayed.enter.message=\u70ba\u9019\u500b\u4e0b\u8f09\u8f38\u5165\u65b0\u7684\u986f\u793a\u540d\u7a31\n\u5982\u679c\u6c92\u6709\u8f38\u5165\u6587\u5b57,\u5c31\u4f7f\u7528\u539f\u59cb\u540d\u7a31
-MyTorrentsView.menu.rename.save_path.enter.title=\u66f4\u6539\u5132\u5b58\u8def\u5f91
-MyTorrentsView.menu.rename.save_path.enter.message=\u70ba\u9019\u500b\u4e0b\u8f09\u8f38\u5165\u65b0\u7684\u5132\u5b58\u8def\u5f91\u540d\u7a31\n\u5982\u679c\u6c92\u6709\u8f38\u5165\u6587\u5b57,\u5c31\u4f7f\u7528\u4e0b\u8f09\u6a94\u6848\u7684\u986f\u793a\u540d\u7a31
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u66f4\u6539\u4e0b\u8f09\u540d\u7a31
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u8f38\u5165\u65b0\u7684\u4e0b\u8f09\u540d\u7a31\n\u5982\u679c\u6c92\u6709\u8f38\u5165\u6587\u5b57,\u5c31\u4f7f\u7528\u539f\u59cb\u503c
 UIDebugGenerator.messageask.title=\u9664\u932f\u7522\u751f\u5668
 UIDebugGenerator.messageask.text=\u8acb\u8f38\u5165\u60a8\u8981\u56de\u5831\u7684\u932f\u8aa4\u6558\u8ff0
 UIDebugGenerator.complete.title=\u9664\u932f\u904e\u7a0b\u5b8c\u6210
@@ -1912,5 +1918,9 @@ ConfigView.label.popup.autohide=\u5728 x \u79d2\u5f8c\u81ea\u52d5\u96b1\u85cf\u9
 ConfigView.label.please.visit.here=\u8acb\u53c3\u89c0\u6b64\u8655\u4ee5\u7372\u5f97\u8a73\u7d30\u8cc7\u8a0a
 ConfigView.section.ipfilter.enable.descriptionCache=\u5728 scratch \u6a94\u6848\u4e2d\u5132\u5b58 IP \u8aaa\u660e
 ConfigView.section.ipfilter.enable.descriptionCache.tooltip=\u505c\u7528\u6642\uff0c\u4e0d\u6703\u8a18\u9304\u8aaa\u660e\u8cc7\u6599
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u672a\u77e5
+ConfigView.label.announceport=\u7f6e\u63db tracker \u6307\u5b9a\u7684\u9023\u63a5\u57e0
+iconBar.queue.tooltip=\u6392\u7a0b
+MainWindow.menu.help.faq=\u5e38\u898b\u554f\u984c (&F)
 MainWindow.menu.help.donate=\u6350\u52a9 ($2,$5,...) 
-# The remaining keys were not in MessagesBundle.properties
diff --git a/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java b/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java
index 9551f61..8e17afb 100644
--- a/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java
+++ b/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java
@@ -205,7 +205,7 @@ public class PlatformManagerUnixPlugin
 								FileUtil.writeBytesAsFile(oldFilePathString,
 										startupScript.getBytes());
 								Runtime.getRuntime().exec(new String[] {
-									"chmod",
+									findCommand( "chmod" ),
 									"+x",
 									oldStartupScript
 								});
@@ -233,6 +233,25 @@ public class PlatformManagerUnixPlugin
 		}
 	}
 	
+	  private String
+	  findCommand(
+		String	name )
+	  {
+		final String[]  locations = { "/bin", "/usr/bin" };
+		
+		for ( String s: locations ){
+			
+			File f = new File( s, name );
+			
+			if ( f.exists() && f.canRead()){
+				
+				return( f.getAbsolutePath());
+			}
+		}
+		
+		return( name );
+	  }
+	  
 	private void showScriptManualUpdateDialog(String newFilePath,
 			String oldFilePath, final int version) {
 		final UIFunctions uif = UIFunctionsManager.getUIFunctions();
diff --git a/org/gudy/azureus2/platform/win32/access/impl/Release/aereg64.dll b/org/gudy/azureus2/platform/win32/access/impl/Release/aereg64.dll
deleted file mode 100644
index cda2ac7..0000000
Binary files a/org/gudy/azureus2/platform/win32/access/impl/Release/aereg64.dll and /dev/null differ
diff --git a/org/gudy/azureus2/plugins/peers/PeerStats.java b/org/gudy/azureus2/plugins/peers/PeerStats.java
index eed94d3..8ee7f07 100644
--- a/org/gudy/azureus2/plugins/peers/PeerStats.java
+++ b/org/gudy/azureus2/plugins/peers/PeerStats.java
@@ -130,4 +130,11 @@ public interface PeerStats
 	 * @since 2.4.0.0
 	 */
 	public long getTimeSinceConnectionEstablished();
+	
+	public void
+	setDownloadRateLimit(
+		int	bytes_per_sec );
+	
+	public int
+	getDownloadRateLimit();
 }
diff --git a/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java b/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java
index 8ec3af0..42a5eb2 100644
--- a/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java
+++ b/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java
@@ -25,5 +25,10 @@ package org.gudy.azureus2.plugins.ui.sidebar;
  */
 public interface SideBarDropListener
 {
-	public void sideBarEntryDrop(SideBarEntry entry, Object droppedObject);
+	/**
+	 * @param entry
+	 * @param droppedObject
+	 * @return true if you handled it, false if you didn't
+	 */
+	public boolean sideBarEntryDrop(SideBarEntry entry, Object droppedObject);
 }
diff --git a/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java b/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java
index 0a88a48..e4b3ee1 100644
--- a/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java
+++ b/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java
@@ -46,7 +46,6 @@ public class
 PeerForeignNetworkConnection
 	extends NetworkConnectionHelper
 {
-	private ConnectionEndpoint	endpoint;
 	private Peer				peer;
 	
 	private OutgoingMessageQueue	outgoing_message_queue = new omq();
@@ -59,16 +58,14 @@ PeerForeignNetworkConnection
 		Peer		_peer )
 	{
 		peer	= _peer;
-		
-			// make up a vaguely usable endpoint
-		
-		endpoint = new ConnectionEndpoint(new InetSocketAddress( peer.getIp(), peer.getPort()));
 	}
 	
 	public ConnectionEndpoint
 	getEndpoint()
 	{
-		return( endpoint );
+			// make up a vaguely usable endpoint
+
+		return( new ConnectionEndpoint(new InetSocketAddress( peer.getIp(), peer.getPort())));
 	}
 	
 	public void 
diff --git a/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java b/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java
index d030e0e..6a8d85e 100644
--- a/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java
+++ b/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java
@@ -120,4 +120,17 @@ PeerStatsImpl
 	{
 		return( peer_manager.getTimeSinceConnectionEstablished( owner ));
 	}
+	
+	public int 
+	getDownloadRateLimit() 
+	{
+		return( delegate.getDownloadRateLimitBytesPerSecond());
+	}
+	
+	public void 
+	setDownloadRateLimit( 
+		int bytes ) 
+	{
+		delegate.setDownloadRateLimitBytesPerSecond( bytes );
+	}
 }
diff --git a/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java b/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java
index 1466487..9d415bf 100644
--- a/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java
+++ b/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java
@@ -62,13 +62,24 @@ RSSUtils
 		}catch( ParseException e ){
 			
 			String[]	fallbacks =
-			{	"EEE MMM dd hh:mm:ss z yyyy",			// Fri Sep 26 00:00:00 EDT 2008
-				"EEE MMM dd hh:mm z yyyy",				// Fri Sep 26 00:00 EDT 2008	
-				"EEE MMM dd hh z yyyy",					// Fri Sep 26 00 EDT 2008	
-				"yyyy-MM-dd hh:mm:ss",					// 2009-02-08 22:56:45	
+			{	
+				"dd MMM yyyy HH:mm:ss z",				// As above but laxer
+				"EEE dd MMM yyyy HH:mm:ss z",			// As above but laxer
+				"EEE MMM dd HH:mm:ss z yyyy",			// Fri Sep 26 00:00:00 EDT 2008
+				"EEE MMM dd HH:mm z yyyy",				// Fri Sep 26 00:00 EDT 2008	
+				"EEE MMM dd HH z yyyy",					// Fri Sep 26 00 EDT 2008	
+				"yyyy-MM-dd HH:mm:ss",					// 2009-02-08 22:56:45	
 				"yyyy-MM-dd",							// 2009-02-08	
 			};
 			
+				// remove commas as these keep popping up in silly places
+			
+			date_str = date_str.replace( ',', ' ' );
+			
+				// remove duplicate white space
+			
+			date_str = date_str.replaceAll( "(\\s)+", " " );
+			
 			for (int i=0;i<fallbacks.length;i++){
 				
 				try{
diff --git a/org/gudy/azureus2/ui/console/commands/Hack.java b/org/gudy/azureus2/ui/console/commands/Hack.java
index 342cf0a..a6b91e4 100644
--- a/org/gudy/azureus2/ui/console/commands/Hack.java
+++ b/org/gudy/azureus2/ui/console/commands/Hack.java
@@ -298,10 +298,10 @@ public class Hack extends TorrentCommand
 			}
 			TRTrackerAnnouncer client = dm.getTrackerClient();
 			try {
-				URI uold = new URI(client.getTrackerUrl().toString());
+				URI uold = new URI(client.getTrackerURL().toString());
 				String portStr = (String) args.get(0);
 				URI unew = new URI(uold.getScheme(), uold.getUserInfo(), uold.getHost(), Integer.parseInt(portStr), uold.getPath(), uold.getQuery(), uold.getFragment());
-				client.setTrackerUrl(new URL(unew.toString()));
+				client.setTrackerURL(new URL(unew.toString()));
 				ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+unew.toString()+"'");
 			} catch (Exception e) {
 				ci.out.println("> Command 'hack': Assembling new tracker url failed: "+e.getMessage());
@@ -327,9 +327,9 @@ public class Hack extends TorrentCommand
 			}
 			TRTrackerAnnouncer client = dm.getTrackerClient();
 			try {
-				URI uold = new URI(client.getTrackerUrl().toString());
+				URI uold = new URI(client.getTrackerURL().toString());
 				URI unew = new URI(uold.getScheme(), uold.getUserInfo(), (String)args.get(0), uold.getPort(), uold.getPath(), uold.getQuery(), uold.getFragment());
-				client.setTrackerUrl(new URL(unew.toString()));
+				client.setTrackerURL(new URL(unew.toString()));
 				ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+unew.toString()+"'");
 			} catch (Exception e) {
 				ci.out.println("> Command 'hack': Assembling new tracker url failed: "+e.getMessage());
@@ -358,7 +358,7 @@ public class Hack extends TorrentCommand
 			try {
 				String uriStr = (String) args.get(0); 
 				URI uri = new URI(uriStr);
-				client.setTrackerUrl(new URL(uri.toString()));
+				client.setTrackerURL(new URL(uri.toString()));
 				ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+uri+"'");
 			} catch (Exception e) {
 				ci.out.println("> Command 'hack': Parsing tracker url failed: "+e.getMessage());
diff --git a/org/gudy/azureus2/ui/console/commands/Show.java b/org/gudy/azureus2/ui/console/commands/Show.java
index 383ac01..88795c7 100644
--- a/org/gudy/azureus2/ui/console/commands/Show.java
+++ b/org/gudy/azureus2/ui/console/commands/Show.java
@@ -529,7 +529,7 @@ public class Show extends IConsoleCommand {
 		out.println("- Tracker Info -");
 		TRTrackerAnnouncer trackerclient = dm.getTrackerClient();
 		if (trackerclient != null) {
-			out.println("URL: " + trackerclient.getTrackerUrl());
+			out.println("URL: " + trackerclient.getTrackerURL());
 			String timestr;
 			try {
 				int time = trackerclient.getTimeUntilNextUpdate();
diff --git a/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java b/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java
index 80b684f..798ee1b 100644
--- a/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java
+++ b/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java
@@ -35,9 +35,7 @@ import org.eclipse.swt.custom.TableEditor;
 import org.eclipse.swt.dnd.Clipboard;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.RowLayout;
@@ -100,7 +98,7 @@ public class OpenTorrentWindow
 	 */
 	//private final static int MIN_NODOWNLOAD_SIZE = 64 * 1024;
 	//private final static int MAX_NODOWNLOAD_COUNT = 3;
-	private final static int MIN_BUTTON_HEIGHT = Constants.isWindows ? 24 : -1;
+	private final static int MIN_BUTTON_HEIGHT = -1;
 
 	private final static String PARAM_DEFSAVEPATH = "Default save path";
 
@@ -172,7 +170,7 @@ public class OpenTorrentWindow
 	/** List of torrents being downloaded.  Stored so we don't close window
 	 * until they are done/aborted.
 	 */
-	private ArrayList downloaders = new ArrayList();
+	private ArrayList<TorrentDownloader> downloaders = new ArrayList<TorrentDownloader>();
 
 	private boolean bOverrideStartModeToStopped = false;
 
@@ -510,9 +508,6 @@ public class OpenTorrentWindow
 		});
 
 		updateDataDirCombo();
-		if (sDestDir != null && sDestDir.length() > 0) {
-			cmbDataDir.add(sDestDir);
-		}
 		dirList = COConfigurationManager.getStringListParameter("saveTo_list");
 		StringIterator iter = dirList.iterator();
 		while (iter.hasNext()) {
@@ -903,6 +898,9 @@ public class OpenTorrentWindow
 			int[] indexes = torrentTable.getSelectionIndices();
 
 			if (indexes.length == 0) {
+				if (cmbDataDir.getItemCount() == 0) {
+					cmbDataDir.add(sDestDir);
+				}
 				cmbDataDir.setText(sDestDir);
 				return;
 			}
@@ -1042,15 +1040,24 @@ public class OpenTorrentWindow
 
 		Utils.disposeSWTObjects(disposeList);
 
-		if (downloaders.size() > 0) {
-			for (Iterator iter = downloaders.iterator(); iter.hasNext();) {
-				TorrentDownloader element = (TorrentDownloader) iter.next();
-				element.cancel();
+		if (bCancel) {
+			
+			List<TorrentDownloader> to_cancel;
+			
+			synchronized( downloaders ){
+				
+				to_cancel = new ArrayList<TorrentDownloader>( downloaders );
+				
+				downloaders.clear(); 
+			}
+			
+			if (to_cancel.size() > 0){
+				for (Iterator iter = to_cancel.iterator(); iter.hasNext();) {
+					TorrentDownloader element = (TorrentDownloader) iter.next();
+					element.cancel();
+				}
 			}
-			downloaders.clear();
-		}
 
-		if (bCancel) {
 			for (Iterator iter = torrentList.iterator(); iter.hasNext();) {
 				TorrentInfo info = (TorrentInfo) iter.next();
 				if (info.bDeleteFileOnCancel) {
@@ -2340,10 +2347,16 @@ public class OpenTorrentWindow
 
 			activeTorrentCount--;
 			enableControl(ok, activeTorrentCount < 1);
-			if (!downloaders.contains(inf))
-				return;
-			downloaders.remove(inf);
-
+			
+				// PARG - yes, this code sucks, added some sync here to prvent some errors but obviously
+				// it needs a complete rewrite
+			
+			synchronized( downloaders ){
+				if (!downloaders.contains(inf))
+					return;
+				downloaders.remove(inf);
+			}
+			
 			File file = inf.getFile();
 			// we already know it isn't a torrent.. we are just using the call
 			// to popup the message
@@ -2357,16 +2370,20 @@ public class OpenTorrentWindow
 		if (state == TorrentDownloader.STATE_INIT) {
 			activeTorrentCount++;
 			enableControl(ok, activeTorrentCount < 1);
-			downloaders.add(inf);
+			synchronized( downloaders ){
+				downloaders.add(inf);
+			}
 		} else if (state == TorrentDownloader.STATE_FINISHED) {
 			activeTorrentCount--;
 			enableControl(ok, activeTorrentCount < 1);
 
 			// This can be called more than once for each inf..
-			if (!downloaders.contains(inf))
-				return;
-			downloaders.remove(inf);
-
+			synchronized( downloaders ){
+				if (!downloaders.contains(inf))
+					return;
+				downloaders.remove(inf);
+			}
+			
 			File file = inf.getFile();
 			if (addTorrent(file.getAbsolutePath(), inf.getURL()) == null) {
 				// addTorrent may not delete it on error if the downloader saved it
@@ -2410,7 +2427,9 @@ public class OpenTorrentWindow
 				|| state == TorrentDownloader.STATE_DUPLICATE) {
 			activeTorrentCount--;
 			enableControl(ok, activeTorrentCount < 1);
-			downloaders.remove(inf);
+			synchronized( downloaders ){
+				downloaders.remove(inf);
+			}
 		} else if (state == TorrentDownloader.STATE_DOWNLOADING) {
 			int count = inf.getLastReadCount();
 			int numRead = inf.getTotalRead();
diff --git a/org/gudy/azureus2/ui/swt/PasswordWindow.java b/org/gudy/azureus2/ui/swt/PasswordWindow.java
index a45885e..7de53a3 100644
--- a/org/gudy/azureus2/ui/swt/PasswordWindow.java
+++ b/org/gudy/azureus2/ui/swt/PasswordWindow.java
@@ -67,7 +67,9 @@ public class PasswordWindow {
 			public void runSupport() {
 				if (window == null) {
 					window = new PasswordWindow(display);
+					window.open();
 				} else {
+					window.shell.setVisible(true);
 					window.shell.forceActive();
 				}
 
@@ -85,6 +87,9 @@ public class PasswordWindow {
 		return bOk;
 	}
   protected PasswordWindow(Display display) {
+  }
+  
+  private void open() {
   	bOk = false;
 
     shell = ShellFactory.createMainShell(SWT.APPLICATION_MODAL | SWT.TITLE | SWT.CLOSE);
@@ -177,23 +182,24 @@ public class PasswordWindow {
     });
 
     shell.pack();
-    
+        
     Utils.centreWindow(shell);
-    
+
     shell.open();
   }
   
   protected void run() {
     while (!shell.isDisposed()) {
-    	if (!shell.getDisplay().readAndDispatch()) {
-    		shell.getDisplay().sleep();
+    	Display d = shell.getDisplay();
+    	if (!d.readAndDispatch() && !shell.isDisposed()) {
+    		d.sleep();
     	}
     }
   }
   
   private void close() {
     shell.dispose();
-    if(Constants.isOSX) {
+    if(Utils.isCarbon) {
     	UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
     	if (uiFunctions != null) {
 				Shell mainShell = uiFunctions.getMainShell();
diff --git a/org/gudy/azureus2/ui/swt/StartServer.java b/org/gudy/azureus2/ui/swt/StartServer.java
index 88f520e..1e21ca0 100644
--- a/org/gudy/azureus2/ui/swt/StartServer.java
+++ b/org/gudy/azureus2/ui/swt/StartServer.java
@@ -204,10 +204,8 @@ StartServer
     	return;
     }
     
-    if (args.length == 1
-				|| !COConfigurationManager.getBooleanParameter("add_torrents_silently")) {
-			showMainWindow();
-		}
+    boolean addSilent = COConfigurationManager.getBooleanParameter("add_torrents_silently");
+    boolean showMainWindow = !addSilent;
 
     boolean	open	= true;
     
@@ -228,10 +226,14 @@ StartServer
 	  	    	
 	  	    }else if ( arg.equalsIgnoreCase( "--open" )){
 	  	    	
+	  	    	showMainWindow = true;
+
 	  	    	continue;
 	  	    	
 	  	    }else if ( arg.equalsIgnoreCase( "--share" )){
 	  	    	
+	  	    	showMainWindow = true;
+
 	  	    	open	= false;
 	  	    	
 	  	    	continue;
@@ -244,41 +246,12 @@ StartServer
         
         if ( !file.exists() && !isURI( file_name )){
         	
-        		// handle hex info hashes
-	        
-	        if ( file_name.length() == 40 ){
-	        
-	        	byte[]	hash = null;
-	        	
-	        	try{
-	        		hash = ByteFormatter.decodeString( file_name );
-	        		
-	        	}catch( Throwable e ){
-	        	}
-	        	
-	        	if ( hash != null && hash.length == 20 ){
-	        		
-	        		file_name = "magnet:?xt=urn:btih:" + Base32.encode( hash );
-	        	}
-	        }
-	        
-	        	// handle base32 info hash
-	       
-	        if ( file_name.length() == 32 ){
-	            
-	        	byte[]	hash = null;
-	        	
-	        	try{
-	        		hash = Base32.decode( file_name );
-	        		
-	        	}catch( Throwable e ){
-	        	}
-	        	
-	        	if ( hash != null && hash.length == 20 ){
-	        		
-	        		file_name = "magnet:?xt=urn:btih:" +file_name;
-	        	}
-	        }
+        	String	magnet_uri = UrlUtils.normaliseMagnetURI( file_name );
+        	
+        	if ( magnet_uri != null ){
+        		
+        		file_name = magnet_uri;
+        	}
         }
         
         if ( isURI( file_name )) {
@@ -331,6 +304,10 @@ StartServer
         	handleFile( file_name, open );
         }
       }
+
+    if (showMainWindow) {
+			showMainWindow();
+		}
   }
   
   protected boolean
diff --git a/org/gudy/azureus2/ui/swt/TorrentUtil.java b/org/gudy/azureus2/ui/swt/TorrentUtil.java
index ebc506d..f1ef781 100644
--- a/org/gudy/azureus2/ui/swt/TorrentUtil.java
+++ b/org/gudy/azureus2/ui/swt/TorrentUtil.java
@@ -499,21 +499,12 @@ public class TorrentUtil {
 					return;
 				}
 				
-				List getright = torrent.getAdditionalListProperty( "url-list" );
-				List webseeds = torrent.getAdditionalListProperty( "httpseeds" );
+				List getright = getURLList( torrent, "url-list" );
+				List webseeds = getURLList( torrent, "httpseeds" );
 				
 				Map ws = new HashMap();
-				
-				if ( getright == null ){
-					getright = new ArrayList();
-				}
-				
-				ws.put( "getright", getright );
-				
-				if ( webseeds == null ){
-					webseeds = new ArrayList();
-				}
-				
+								
+				ws.put( "getright", getright );								
 				ws.put( "webseeds", webseeds );
 				
 				ws = BDecoder.decodeStrings( ws );
@@ -573,6 +564,31 @@ public class TorrentUtil {
 						true );
 
 			}
+			
+			protected List
+			getURLList(
+				TOTorrent	torrent,
+				String		key )
+			{
+				Object obj = torrent.getAdditionalProperty( key );
+				
+				if ( obj instanceof byte[] ){
+					
+	                List l = new ArrayList();
+	                
+			        l.add(obj);
+			        
+			        return( l );
+			        
+				}else if ( obj instanceof List ){
+					
+					return((List)obj);
+					
+				}else{
+					
+					return( new ArrayList());
+				}
+			}
 		});
 		
 		itemEditWebSeeds.setEnabled(dms.length==1);
@@ -1422,10 +1438,13 @@ public class TorrentUtil {
 					boolean found = dm.filesExist(true);
 					if (!found && dm.getTorrent() != null
 							&& !dm.getTorrent().isSimpleTorrent()) {
-						sSavePath = fSavePath.getParent();
-						if (sSavePath != null) {
-							dm.setTorrentSaveDir(sSavePath);
+						String parentPath = fSavePath.getParent();
+						if (parentPath != null) {
+							dm.setTorrentSaveDir(parentPath);
 							found = dm.filesExist(true);
+							if (!found) {
+								dm.setTorrentSaveDir(sSavePath);
+							}
 						}
 					}
 
diff --git a/org/gudy/azureus2/ui/swt/Utils.java b/org/gudy/azureus2/ui/swt/Utils.java
index fd09903..cc388d0 100644
--- a/org/gudy/azureus2/ui/swt/Utils.java
+++ b/org/gudy/azureus2/ui/swt/Utils.java
@@ -813,7 +813,7 @@ public class Utils
 			return;
 		}
 		
-		if (new File(sFile).isDirectory()) {
+		if (!Constants.isWindows && new File(sFile).isDirectory()) {
 			PlatformManager mgr = PlatformManagerFactory.getPlatformManager();
 			if (mgr.hasCapability(PlatformManagerCapabilities.ShowFileInBrowser)) {
 				try {
@@ -825,8 +825,7 @@ public class Utils
 		}
 
 		boolean launched = Program.launch(sFile);
-		if (!launched && Constants.isUnix
-				&& (UrlUtils.isURL(sFile) || sFile.startsWith("mailto:"))) {
+		if (!launched && Constants.isUnix) {
 			if (!Program.launch("xdg-open " + sFile)) {
 				Program.launch("htmlview " + sFile);
 			}
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java b/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java
index 01cff89..69f8658 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java
@@ -171,6 +171,12 @@ public class MainStatusBar
 
 	private String lastSRimageID = null;
 
+	private int last_dl_limit;
+
+	private long last_rec_data = - 1;
+
+	private long last_rec_prot;
+
 	/**
 	 * 
 	 */
@@ -330,8 +336,6 @@ public class MainStatusBar
 			}
 		});
 
-		statusBar.layout();
-
 		this.plugin_label_composite = new Composite(statusBar, SWT.NONE);
 		this.plugin_label_composite.setForeground(fgColor);
 		GridLayout gridLayout = new GridLayout();
@@ -402,7 +406,7 @@ public class MainStatusBar
 
 		statusDown = new CLabelPadding(statusBar, borderFlag);
 		statusDown.setImage(imageLoader.getImage("down"));
-		statusDown.setText(/*MessageText.getString("ConfigView.download.abbreviated") +*/"n/a");
+		//statusDown.setText(/*MessageText.getString("ConfigView.download.abbreviated") +*/"n/a");
 		Messages.setLanguageText(statusDown,
 				"MainWindow.status.updowndetails.tooltip");
 
@@ -414,7 +418,7 @@ public class MainStatusBar
 
 		statusUp = new CLabelPadding(statusBar, borderFlag);
 		statusUp.setImage(imageLoader.getImage("up"));
-		statusUp.setText(/*MessageText.getString("ConfigView.upload.abbreviated") +*/"n/a");
+		//statusUp.setText(/*MessageText.getString("ConfigView.upload.abbreviated") +*/"n/a");
 		Messages.setLanguageText(statusUp,
 				"MainWindow.status.updowndetails.tooltip");
 
@@ -563,6 +567,8 @@ public class MainStatusBar
 			}
 		}
 		
+		statusBar.layout(true);
+
 		return statusBar;
 	}
 
@@ -844,12 +850,20 @@ public class MainStatusBar
 			GlobalManagerStats stats = gm.getStats();
 
 			int dl_limit = NetworkManager.getMaxDownloadRateBPS() / 1024;
+			long rec_data = stats.getDataReceiveRate();
+			long rec_prot = stats.getProtocolReceiveRate();
+			
+			if (last_dl_limit != dl_limit || last_rec_data != rec_data || last_rec_prot != rec_prot) {
+				last_dl_limit = dl_limit;
+				last_rec_data = rec_data;
+				last_rec_prot = rec_prot;
 
-			statusDown.setText((dl_limit == 0 ? "" : "[" + dl_limit + "K] ")
-					+ DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(
-							stats.getDataReceiveRate(), stats.getProtocolReceiveRate()));
+				statusDown.setText((dl_limit == 0 ? "" : "[" + dl_limit + "K] ")
+						+ DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(rec_data, rec_prot));
+			}
 
-			boolean auto_up = COConfigurationManager.getBooleanParameter(TransferSpeedValidator.getActiveAutoUploadParameter(gm))
+
+			boolean auto_up = TransferSpeedValidator.isAutoSpeedActive(gm)
 					&& TransferSpeedValidator.isAutoUploadAvailable(core);
 
 			int ul_limit_norm = NetworkManager.getMaxUploadRateBPSNormal() / 1024;
@@ -873,9 +887,6 @@ public class MainStatusBar
 					+ DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(
 							stats.getDataSendRate(), stats.getProtocolSendRate()));
 		}
-
-		// End of Status Sections
-		statusBar.layout();
 	}
 
 	/**
@@ -1203,6 +1214,28 @@ public class MainStatusBar
 			setLayoutData(gridData);
 			setForeground(parent.getForeground());
 		}
+		
+		public void setText(String text) {
+			if (text == null) {
+				text = "";
+			}
+			if (text.equals(getText())) {
+				return;
+			}
+			super.setText(text);
+			int oldWidth = lastWidth;
+			Point pt = super.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
+			pt.x += 4;
+			if (pt.x > oldWidth && text.length() > 0) {
+				statusBar.layout();
+			} else if (pt.x < oldWidth) {
+				Utils.execSWTThreadLater(KEEPWIDTHFOR_MS, new AERunnable() {
+					public void runSupport() {
+						statusBar.layout();
+					}
+				});
+			}
+		}
 
 		/* (non-Javadoc)
 		 * @see org.eclipse.swt.custom.CLabel#computeSize(int, int, boolean)
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java b/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java
index 3ba6a86..5086a4a 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java
@@ -1211,6 +1211,10 @@ public class MenuFactory
 	 * @return may return <code>null</code> if not found
 	 */
 	public static MenuItem findMenuItem(Menu menuToStartWith, String idToMatch) {
+		return findMenuItem(menuToStartWith, idToMatch, true);
+	}
+
+	public static MenuItem findMenuItem(Menu menuToStartWith, String idToMatch, boolean deep) {
 		/*
 		 * This is a recursive method; it will start at the given menuToStartWith
 		 * and recursively traverse to all its sub menus until a matching
@@ -1229,12 +1233,14 @@ public class MenuFactory
 				return item;
 			}
 
-			/*
-			 * Go deeper into each child to try and find it
-			 */
-			MenuItem menuItemToFind = findMenuItem(item.getMenu(), idToMatch);
-			if (null != menuItemToFind) {
-				return menuItemToFind;
+			if (deep) {
+  			/*
+  			 * Go deeper into each child to try and find it
+  			 */
+  			MenuItem menuItemToFind = findMenuItem(item.getMenu(), idToMatch);
+  			if (null != menuItemToFind) {
+  				return menuItemToFind;
+  			}
 			}
 		}
 
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java b/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java
index cfea6cc..1c3898d 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java
@@ -168,6 +168,9 @@ public class SWTThread {
 
 		display.addListener(SWT.Activate, new Listener() {
 			public void handleEvent(Event event) {
+				if (event.detail != 1) {
+					return;
+				}
 				UIFunctionsSWT uif = UIFunctionsManagerSWT.getUIFunctionsSWT();
 				if (uif != null) {
 					uif.bringToFront(false);
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java b/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java
index f890bc3..611b9af 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java
@@ -83,7 +83,7 @@ public class SelectableSpeedMenu {
             final String configAutoKey = 
             		TransferSpeedValidator.getActiveAutoUploadParameter(globalManager);
      
-	        auto = COConfigurationManager.getBooleanParameter( configAutoKey );
+	        auto = TransferSpeedValidator.isAutoSpeedActive(globalManager);
 	        
 	        	// auto
 	        final MenuItem auto_item = new MenuItem(parent,SWT.CHECK);
diff --git a/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java b/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java
index 29114de..bcef598 100644
--- a/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java
+++ b/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java
@@ -446,7 +446,7 @@ public class MultiTrackerEditor {
   		
   		String prot = url.getProtocol().toLowerCase();
   		
-  		if ( prot.equals( "http") || prot.equals( "https" ) || prot.equals( "udp")){
+  		if ( prot.equals( "http") || prot.equals( "https" ) || prot.equals( "udp") || prot.equals( "dht")){
   			
   			return( true );
   		}
diff --git a/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java b/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java
index 092c18b..ee1b4da 100644
--- a/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java
+++ b/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java
@@ -88,6 +88,8 @@ public class CocoaUIEnhancer
 	private static long sel_application_openFiles_;
 
 	private static long sel_preferencesMenuItemSelected_;
+	
+	private static long sel_applicationShouldHandleReopen_;
 
 	private static long sel_toolbarButtonClicked_;
 
@@ -281,6 +283,18 @@ public class CocoaUIEnhancer
 				}
 			}
 			fileOpen(files);
+		} else if (sel == sel_applicationShouldHandleReopen_) {
+			Event event = new Event ();
+			event.detail = 1;
+			if (display != null) {
+				invoke(Display.class, display, "sendEvent", new Class[] {
+					int.class,
+					Event.class
+				}, new Object[] {
+					SWT.Activate,
+					event
+				});
+			}
 		}
 		return 0;
 	}
@@ -352,7 +366,8 @@ public class CocoaUIEnhancer
 	private static Object invoke(Class<?> clazz, Object target,
 			String methodName, Class[] signature, Object[] args) {
 		try {
-			Method method = clazz.getMethod(methodName, signature);
+			Method method = clazz.getDeclaredMethod(methodName, signature);
+			method.setAccessible(true);
 			return method.invoke(target, args);
 		} catch (Exception e) {
 			throw new IllegalStateException(e);
@@ -514,6 +529,7 @@ public class CocoaUIEnhancer
 			sel_natMenuSelected_ = registerName(osCls, "natMenuItemSelected:");
 			sel_speedMenuSelected_ = registerName(osCls, "speedMenuItemSelected:");
 			sel_wizardMenuSelected_ = registerName(osCls, "wizardMenuItemSelected:");
+			sel_applicationShouldHandleReopen_ = registerName(osCls, "applicationShouldHandleReopen:hasVisibleWindows:");
 		}
 
 		// Add the action callbacks for Preferences and About menu items.
@@ -553,6 +569,12 @@ public class CocoaUIEnhancer
 			wrapPointer(callBack3Addr),
 			"@:@"
 		});
+		invoke(osCls, "class_addMethod", new Object[] {
+			wrapPointer(delegateIdSWTApplication),
+			wrapPointer(sel_applicationShouldHandleReopen_),
+			wrapPointer(callBack4Addr),
+			"@:@c"
+		});
 
 		// Get the Mac OS X Application menu.
 		Object sharedApplication = invoke(nsapplicationCls, "sharedApplication");
diff --git a/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java b/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java
index b3e68ae..61a318c 100644
--- a/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java
+++ b/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java
@@ -184,7 +184,7 @@ public class ProgressReporter
 		/*
 		 * Notifies listeners
 		 */
-		notifyListeners();
+		notifyListeners( getProgressReport());
 
 		/*
 		 * Then dispose all listeners to let GC do it's magic.
@@ -223,7 +223,7 @@ public class ProgressReporter
 	 * this optimization is designed to prevent dangling/orphaned listeners, and also reduces the
 	 * number of listeners to notify upon the next event 
 	 */
-	private void notifyListeners() {
+	private void notifyListeners( IProgressReport report) {
 		if (null == reporterListeners || reporterListeners.size() < 1) {
 			return;
 		}
@@ -237,7 +237,7 @@ public class ProgressReporter
 				/*
 				 * If the listener returned RETVAL_OK_TO_DISPOSE then it has indicated that it is no longer needed so we release it
 				 */
-				if (RETVAL_OK_TO_DISPOSE == listener.report(getProgressReport())) {
+				if (RETVAL_OK_TO_DISPOSE == listener.report( report )) {
 					removalList.add(listener);
 				}
 			} catch (Throwable e) {
@@ -283,7 +283,7 @@ public class ProgressReporter
 		/*
 		 * Now we can notify listeners for this specific reporter
 		 */
-		notifyListeners();
+		notifyListeners( latestProgressReport );
 	}
 
 	/* (non-Javadoc)
diff --git a/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java b/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java
index 73461c3..a67821e 100644
--- a/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java
+++ b/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java
@@ -502,6 +502,7 @@ public class ProgressReporterPanel
 			case REPORT_TYPE_RETRY:
 				getDisplay().asyncExec(new Runnable() {
 					public void run() {
+						lastStatusError = null;
 						updateStatusLabel(pReport.getMessage(), false);
 						appendToDetail(
 								MessageText.getString("Progress.reporting.status.retrying"),
diff --git a/org/gudy/azureus2/ui/swt/views/GeneralView.java b/org/gudy/azureus2/ui/swt/views/GeneralView.java
index 1d9c83d..8edc31d 100644
--- a/org/gudy/azureus2/ui/swt/views/GeneralView.java
+++ b/org/gudy/azureus2/ui/swt/views/GeneralView.java
@@ -1255,7 +1255,7 @@ public class GeneralView extends AbstractIView implements ParameterListener,
     
     if ( trackerClient != null ){
     	
-    	URL	temp = trackerClient.getTrackerUrl();
+    	URL	temp = trackerClient.getTrackerURL();
     	
     	if ( temp != null ){
     		
diff --git a/org/gudy/azureus2/ui/swt/views/ManagerView.java b/org/gudy/azureus2/ui/swt/views/ManagerView.java
index b2e34cb..7308ac9 100644
--- a/org/gudy/azureus2/ui/swt/views/ManagerView.java
+++ b/org/gudy/azureus2/ui/swt/views/ManagerView.java
@@ -235,7 +235,7 @@ public class ManagerView
   		iviews_to_use.add(new LoggerView(true));
   	}
   	
-  	IView[] views = (IView[])iviews_to_use.toArray(new IView[iviews_to_use.size()]);
+  	final IView[] views = (IView[])iviews_to_use.toArray(new IView[iviews_to_use.size()]);
 
   	for (int i = 0; i < views.length; i++)
 		addSection(views[i], manager);
@@ -269,36 +269,42 @@ public class ManagerView
     folder.addSelectionListener(new SelectionAdapter() {
       public void widgetSelected(SelectionEvent e) {
       	folder.getShell().setCursor(e.display.getSystemCursor(SWT.CURSOR_WAIT));
-      	// Send one last refresh to previous tab, just in case it
-      	// wants to do something when view goes invisible
-        refresh();
-
-        CTabItem item = (CTabItem)e.item;
-        if (item != null) {
-        	IView view = (IView)item.getData("IView");
-          activeView = view;
-        	
-        	if (item.getControl() == null) {
-          	view.initialize(folder);
-          	item.setControl(view.getComposite());
-        	}
-        	
-        	item.getControl().setFocus();
-        }
-        refresh();
-    		ViewTitleInfoManager.refreshTitleInfo(ManagerView.this);
-      	folder.getShell().setCursor(e.display.getSystemCursor(SWT.CURSOR_ARROW));
+      	try {
+        	// Send one last refresh to previous tab, just in case it
+        	// wants to do something when view goes invisible
+          refresh();
+  
+          CTabItem item = (CTabItem)e.item;
+          if (item != null) {
+          	IView view = (IView)item.getData("IView");
+            activeView = view;
+          	
+          	if (item.getControl() == null) {
+            	view.initialize(folder);
+            	item.setControl(view.getComposite());
+          	}
+          	
+          	item.getControl().setFocus();
+          }
+          refresh();
+      		ViewTitleInfoManager.refreshTitleInfo(ManagerView.this);
+      	} finally {
+      		folder.getShell().setCursor(null);
+      	}
       }
     });
     
-    
-    views[0].initialize(folder);
-    folder.getItem(0).setControl(views[0].getComposite());
-    views[0].refresh();
-    views[0].getComposite().layout(true);
-    views[0].getComposite().setFocus();
-    activeView = views[0];
-		ViewTitleInfoManager.refreshTitleInfo(this);
+    Utils.execSWTThreadLater(0, new AERunnable() {
+			public void runSupport() {
+				views[0].initialize(folder);
+				folder.getItem(0).setControl(views[0].getComposite());
+				views[0].refresh();
+				views[0].getComposite().layout(true);
+				views[0].getComposite().setFocus();
+				activeView = views[0];
+				ViewTitleInfoManager.refreshTitleInfo(ManagerView.this);
+			}
+		});
   }
   
   private IView getActiveView() {
diff --git a/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java b/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java
index 0a85157..630ba11 100644
--- a/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java
+++ b/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java
@@ -210,7 +210,7 @@ TorrentInfoView
 			
 			if ( announcer != null ){
 				
-				active_url = announcer.getTrackerUrl();
+				active_url = announcer.getTrackerURL();
 				
 			}else{
 				
diff --git a/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java b/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java
index 18853ea..812d21a 100644
--- a/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java
+++ b/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java
@@ -10,8 +10,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.widgets.*;
 
-import org.gudy.azureus2.core3.download.DownloadManager;
-import org.gudy.azureus2.core3.download.DownloadManagerPeerListener;
+import org.gudy.azureus2.core3.download.*;
 import org.gudy.azureus2.core3.global.GlobalManagerListener;
 import org.gudy.azureus2.core3.peer.PEPeer;
 import org.gudy.azureus2.core3.peer.PEPeerListener;
@@ -227,6 +226,82 @@ public class ClientStatsView
 						break;
 					}
 				}
+				
+				Arrays.sort(stats, new Comparator<ClientStatsDataSource>() {
+					public int compare(ClientStatsDataSource o1, ClientStatsDataSource o2) {
+						float v1 = (float) o1.bytesDiscarded / o1.count;
+						float v2 = (float) o2.bytesDiscarded / o2.count;
+						if (v1 == v2) {
+							return 0;
+						}
+						return v1 > v2 ? -1 : 1;
+					}
+				});
+				top = 5;
+				first = true;
+				sb.append("\nMost Discarded (");
+				total = 0;
+				for (ClientStatsDataSource stat : stats) {
+					total += stat.bytesDiscarded;
+				}
+				sb.append(DisplayFormatters.formatByteCountToKiBEtc(total, false, true,
+						0));
+				sb.append(" Discarded): ");
+				for (ClientStatsDataSource stat : stats) {
+					if (first) {
+						first = false;
+					} else {
+						sb.append(", ");
+					}
+					sb.append(DisplayFormatters.formatByteCountToKiBEtc(
+							stat.bytesDiscarded / stat.count, false, true, 0));
+					sb.append(" per ");
+					sb.append(stat.client);
+					sb.append("(x");
+					sb.append(stat.count);
+					sb.append(")");
+					if (--top <= 0) {
+						break;
+					}
+				}
+
+				Arrays.sort(stats, new Comparator<ClientStatsDataSource>() {
+					public int compare(ClientStatsDataSource o1, ClientStatsDataSource o2) {
+						float v1 = (float) o1.bytesSent / o1.count;
+						float v2 = (float) o2.bytesSent / o2.count;
+						if (v1 == v2) {
+							return 0;
+						}
+						return v1 > v2 ? -1 : 1;
+					}
+				});
+				top = 5;
+				first = true;
+				sb.append("\nMost Fed (");
+				total = 0;
+				for (ClientStatsDataSource stat : stats) {
+					total += stat.bytesSent;
+				}
+				sb.append(DisplayFormatters.formatByteCountToKiBEtc(total, false, true,
+						0));
+				sb.append(" Sent): ");
+				for (ClientStatsDataSource stat : stats) {
+					if (first) {
+						first = false;
+					} else {
+						sb.append(", ");
+					}
+					sb.append(DisplayFormatters.formatByteCountToKiBEtc(
+							stat.bytesSent / stat.count, false, true, 0));
+					sb.append(" per ");
+					sb.append(stat.client);
+					sb.append("(x");
+					sb.append(stat.count);
+					sb.append(")");
+					if (--top <= 0) {
+						break;
+					}
+				}
 
 				ClipboardCopy.copyToClipBoard(sb.toString());
 			}
@@ -292,6 +367,12 @@ public class ClientStatsView
 					}
 				});
 		tableManager.registerColumn(ClientStatsDataSource.class,
+				ColumnCS_ReceivedPer.COLUMN_ID, new TableColumnCreationListener() {
+					public void tableColumnCreated(TableColumn column) {
+						new ColumnCS_ReceivedPer(column);
+					}
+				});
+		tableManager.registerColumn(ClientStatsDataSource.class,
 				ColumnCS_Sent.COLUMN_ID, new TableColumnCreationListener() {
 					public void tableColumnCreated(TableColumn column) {
 						new ColumnCS_Sent(column);
@@ -428,7 +509,9 @@ public class ClientStatsView
 	}
 
 	public void downloadManagerAdded(DownloadManager dm) {
-		dm.addPeerListener(this, true);
+		if (!dm.getDownloadState().getFlag(DownloadManagerState.FLAG_LOW_NOISE)) {
+			dm.addPeerListener(this, true);
+		}
 	}
 
 	public void downloadManagerRemoved(DownloadManager dm) {
diff --git a/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_Sent.java b/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_ReceivedPer.java
similarity index 80%
copy from org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_Sent.java
copy to org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_ReceivedPer.java
index b605370..1b18967 100644
--- a/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_Sent.java
+++ b/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_ReceivedPer.java
@@ -5,13 +5,13 @@ import org.gudy.azureus2.plugins.ui.tables.TableCell;
 import org.gudy.azureus2.plugins.ui.tables.TableCellRefreshListener;
 import org.gudy.azureus2.plugins.ui.tables.TableColumn;
 
-public class ColumnCS_Sent
+public class ColumnCS_ReceivedPer
 	implements TableCellRefreshListener
 {
 
-	public static final String COLUMN_ID = "sent";
+	public static final String COLUMN_ID = "received.per";
 
-	public ColumnCS_Sent(TableColumn column) {
+	public ColumnCS_ReceivedPer(TableColumn column) {
 		column.initialize(TableColumn.ALIGN_TRAIL, TableColumn.POSITION_LAST, 80);
 		column.addListeners(this);
 		column.setType(TableColumn.TYPE_TEXT_ONLY);
@@ -22,7 +22,7 @@ public class ColumnCS_Sent
 		if (ds == null) {
 			return;
 		}
-		long val = ds.bytesSent;
+		long val = ds.bytesReceived / ds.count;
 		if (cell.setSortValue(val) || !cell.isValid()) {
 			cell.setText(DisplayFormatters.formatByteCountToKiBEtc(val));
 		}
diff --git a/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java b/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java
index 0b1ad25..a44ce60 100644
--- a/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java
+++ b/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java
@@ -268,7 +268,8 @@ public class ConfigSectionConnectionAdvanced implements UISWTConfigSection {
 		gridData = new GridData();
 		write_select_min.setLayoutData(gridData);
 
-		
+		new BooleanParameter( cSection, "IPV6 Enable Support", "network.ipv6.enable.support"  );
+
 		
 		new BooleanParameter( cSection, "IPV6 Prefer Addresses", "network.ipv6.prefer.addresses"  );
 		
diff --git a/org/gudy/azureus2/ui/swt/views/stats/StatsView.java b/org/gudy/azureus2/ui/swt/views/stats/StatsView.java
index 5461c7e..d31bb85 100644
--- a/org/gudy/azureus2/ui/swt/views/stats/StatsView.java
+++ b/org/gudy/azureus2/ui/swt/views/stats/StatsView.java
@@ -114,7 +114,7 @@ public class StatsView extends AbstractIView {
     dhts.add( new DHTView( DHTView.DHT_TYPE_MAIN ));  
     vivaldis.add( new VivaldiView( VivaldiView.DHT_TYPE_MAIN ));  
 
-    if ( NetworkAdmin.getSingleton().hasIPV6Potential(false)){
+    if ( NetworkAdmin.getSingleton().hasDHTIPV6()){
   
     	dhts.add(  new DHTView( DHTView.DHT_TYPE_MAIN_V6 ));
     	vivaldis.add(  new VivaldiView( VivaldiView.DHT_TYPE_MAIN_V6 ));
diff --git a/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java b/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java
index 531d81b..3092871 100644
--- a/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java
+++ b/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java
@@ -30,7 +30,7 @@ public class TrackerStatsView
 		
 		TRTrackerAnnouncerFactory.addListener(new TRTrackerAnnouncerFactoryListener() {
 			public void clientDestroyed(TRTrackerAnnouncer client) {
-				System.out.println("ADD " + client.getTrackerUrl().toString());
+				System.out.println("ADD " + client.getTrackerURL().toString());
 			}
 			
 			public void clientCreated(TRTrackerAnnouncer client) {
diff --git a/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java b/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java
index daf0874..fd00c27 100644
--- a/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java
+++ b/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java
@@ -21,7 +21,6 @@
  */
 package org.gudy.azureus2.ui.swt.views.table.impl;
 
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.*;
 import java.util.List;
@@ -799,11 +798,9 @@ public class TableViewSWTImpl<DATASOURCETYPE>
 					event.width = preferredWidth;
 				}
 
-				if (slider == null) {
-  				int defaultHeight = getRowDefaultHeight();
-  				if (event.height < defaultHeight) {
-  					event.height = defaultHeight;
-  				}
+				int defaultHeight = getRowDefaultHeight();
+				if (event.height < defaultHeight) {
+					event.height = defaultHeight;
 				}
 			}
 		});
@@ -1060,11 +1057,21 @@ public class TableViewSWTImpl<DATASOURCETYPE>
 				Utils.disposeSWTObjects(new Object[] { slider } );
 			}
 		});
-
+/*
+		if (Utils.isCocoa) {
+			table.addListener(SWT.MouseVerticalWheel, new Listener() {
+				public void handleEvent(Event event) {
+					calculateClientArea();
+					visibleRowsChanged();
+				}
+			});
+		}
+*/		
 		ScrollBar bar = table.getVerticalBar();
 		if (bar != null) {
 			bar.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
+					calculateClientArea();
 					visibleRowsChanged();
 					// Bug: Scroll is slow when table is not focus
 					if (!table.isFocusControl()) {
@@ -1859,7 +1866,12 @@ public class TableViewSWTImpl<DATASOURCETYPE>
 			}
 			column.setAlignment(TableColumnSWTUtils.convertColumnAlignmentToSWT(tableColumns[i].getAlignment()));
 			Messages.setLanguageText(column, tableColumns[i].getTitleLanguageKey());
-			column.setWidth(tableColumns[i].getWidth());
+			if (!Constants.isUnix) {
+				column.setWidth(tableColumns[i].getWidth());
+			} else {
+				column.setData("widthOffset", new Long(1));
+				column.setWidth(tableColumns[i].getWidth() + 1);
+			}
 			if (tableColumns[i].getMinWidth() == tableColumns[i].getMaxWidth()
 					&& tableColumns[i].getMinWidth() > 0) {
 				column.setResizable(false);
@@ -2893,16 +2905,23 @@ public class TableViewSWTImpl<DATASOURCETYPE>
 			for (int i = 0; i < len; i++) {
 				TableColumnCore tc = (TableColumnCore) tableColumnsSWT[i].getData("TableColumnCore");
 				if (tc != null) {
+					boolean foundOne = false;
+
 					Rectangle bounds = item.getBounds(i);
 					int tcWidth = tc.getWidth();
 					if (tcWidth != 0 && bounds.width != 0) {
-						int ofs = tc.getWidth() - bounds.width;
-						if (ofs > 0) {
+						Object oOldOfs = tableColumnsSWT[i].getData("widthOffset");
+						int oldOfs = (oOldOfs instanceof Number) ? ((Number)oOldOfs).intValue() : 0;
+						int ofs = tc.getWidth() - bounds.width + oldOfs;
+						if (ofs > 0 && ofs != oldOfs) {
+							foundOne = true;
 							tableColumnsSWT[i].setResizable(true);
-							tableColumnsSWT[i].setData("widthOffset", new Long(ofs));
-							tc.triggerColumnSizeChange();
+							tableColumnsSWT[i].setData("widthOffset", new Long(ofs + oldOfs));
 						}
 					}
+					if (foundOne) {
+						tc.triggerColumnSizeChange();
+					}
 				}
 			}
 			columnPaddingAdjusted = true;
@@ -4355,6 +4374,9 @@ public class TableViewSWTImpl<DATASOURCETYPE>
 		int iBottomIndex = Utils.getTableBottomIndex(table, iTopIndex);
 
 		if (lastTopIndex != iTopIndex) {
+			if (Utils.isCocoa) {
+				calculateClientArea();
+			}
 			int tmpIndex = lastTopIndex;
 			lastTopIndex = iTopIndex;
 
diff --git a/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java b/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java
index c094802..d9c7cc6 100644
--- a/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java
+++ b/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java
@@ -637,22 +637,34 @@ public class TableColumnManager {
 		if (listener != null) {
 			mapColumnIDsToListener.put(forDataSourceType + "." + columnID, listener);
 		}
-		List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
-		if (list == null) {
-			list = new ArrayList(1);
-			mapDataSourceTypeToColumnIDs.put(forDataSourceType, list);
-		}
-		if (!list.contains(columnID)) {
-			list.add(columnID);
+		try {
+			items_mon.enter();
+
+  		List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
+  		if (list == null) {
+  			list = new ArrayList(1);
+  			mapDataSourceTypeToColumnIDs.put(forDataSourceType, list);
+  		}
+  		if (!list.contains(columnID)) {
+  			list.add(columnID);
+  		}
+		} finally {
+			items_mon.exit();
 		}
 	}
 	
 	public void unregisterColumn(Class forDataSourceType, String columnID,
 			TableColumnCreationListener listener) {
-		mapColumnIDsToListener.remove(forDataSourceType + "." + columnID);
-		List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
-		if (list != null) {
-			list.remove(columnID);
+		try {
+			items_mon.enter();
+
+			mapColumnIDsToListener.remove(forDataSourceType + "." + columnID);
+			List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
+			if (list != null) {
+				list.remove(columnID);
+			}
+		} finally {
+			items_mon.exit();
 		}
 	}
 
diff --git a/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java b/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java
index 6028673..4bed862 100644
--- a/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java
+++ b/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java
@@ -118,7 +118,7 @@ public class Win32UIEnhancer
 					int.class
 				});
 			} catch (Exception e) {
-				e.printStackTrace();
+				//e.printStackTrace();
 				mSetWindowLongPtr = claOS.getMethod("SetWindowLongPtr",
 						new Class[] {
 							long.class,
@@ -130,11 +130,11 @@ public class Win32UIEnhancer
 				mOS_memmove_byte = claOS.getMethod("memmove", new Class[] {
 					byte[].class,
 					long.class,
-					int.class
+					long.class
 				});
 				mOS_memmove_int = claOS.getMethod("memmove", new Class[] {
 					int[].class,
-					int.class,
+					long.class,
 					long.class
 				});
 			}
diff --git a/org/gudy/azureus2/ui/webplugin/WebPlugin.java b/org/gudy/azureus2/ui/webplugin/WebPlugin.java
index 415a61c..2fab9fc 100644
--- a/org/gudy/azureus2/ui/webplugin/WebPlugin.java
+++ b/org/gudy/azureus2/ui/webplugin/WebPlugin.java
@@ -51,6 +51,7 @@ public class
 WebPlugin
 	implements Plugin, TrackerWebPageGenerator
 {
+	public static final String	PR_ENABLE					= "Enable";						// Boolean
 	public static final String	PR_DISABLABLE				= "Disablable";					// Boolean
 	public static final String	PR_PORT						= "Port";						// Integer
 	public static final String	PR_BIND_IP					= "Bind IP";					// String
@@ -58,7 +59,7 @@ WebPlugin
 	public static final String	PR_ROOT_DIR					= "Root Dir";					// String
 	public static final String	PR_ACCESS					= "Access";						// String
 	public static final String	PR_LOG						= "DefaultLoggerChannel";		// LoggerChannel
-	public static final String	PR_CONFIG_MODEL				= "DefaultConfigModel";			// BasicPluginConfigModel
+	public static final String	PR_CONFIG_MODEL_PARAMS		= "DefaultConfigModelParams";	// String[] params to use when creating config model
 	public static final String	PR_VIEW_MODEL				= "DefaultViewModel";			// BasicPluginViewModel
 	public static final String	PR_HIDE_RESOURCE_CONFIG		= "DefaultHideResourceConfig";	// Boolean
 	public static final String	PR_ENABLE_KEEP_ALIVE		= "DefaultEnableKeepAlive";		// Boolean
@@ -68,19 +69,19 @@ WebPlugin
 	public static final String	CONFIG_MIGRATED			= "Config Migrated";
 	
 	public static final String	CONFIG_PASSWORD_ENABLE			= "Password Enable";
-	public        final boolean	CONFIG_PASSWORD_ENABLE_DEFAULT	= false;
+	public static final boolean	CONFIG_PASSWORD_ENABLE_DEFAULT	= false;
 	
 	public static final String	CONFIG_PAIRING_ENABLE			= "Pairing Enable";
-	public        final boolean	CONFIG_PAIRING_ENABLE_DEFAULT	= true;
+	public static final boolean	CONFIG_PAIRING_ENABLE_DEFAULT	= true;
 
-	public static final String	CONFIG_ENABLE					= "Enable";
-	public static final boolean	CONFIG_ENABLE_DEFAULT			= true;
+	public static final String	CONFIG_ENABLE					= PR_ENABLE;
+	public  			boolean	CONFIG_ENABLE_DEFAULT			= true;
 	
 	public static final String	CONFIG_USER						= "User";
-	public        final String	CONFIG_USER_DEFAULT				= "";
+	public static final String	CONFIG_USER_DEFAULT				= "";
 	
 	public static final String	CONFIG_PASSWORD					= "Password";
-	public        final byte[]	CONFIG_PASSWORD_DEFAULT			= {};
+	public static final byte[]	CONFIG_PASSWORD_DEFAULT			= {};
 	
 	public static final String 	CONFIG_PORT						= PR_PORT;
 	public int			 		CONFIG_PORT_DEFAULT				= 8089;
@@ -89,13 +90,13 @@ WebPlugin
 	public String		 		CONFIG_BIND_IP_DEFAULT			= "";
 
 	public static final String 	CONFIG_PROTOCOL					= "Protocol";
-	public 		  final String 	CONFIG_PROTOCOL_DEFAULT			= "HTTP";
+	public static final String 	CONFIG_PROTOCOL_DEFAULT			= "HTTP";
 
 	public static final String	CONFIG_UPNP_ENABLE				= "UPnP Enable";
-	public    	  final boolean	CONFIG_UPNP_ENABLE_DEFAULT		= true;
+	public static final boolean	CONFIG_UPNP_ENABLE_DEFAULT		= true;
 
 	public static final String 	CONFIG_HOME_PAGE				= "Home Page";
-	public        final String 	CONFIG_HOME_PAGE_DEFAULT		= "index.html";
+	public static final String 	CONFIG_HOME_PAGE_DEFAULT		= "index.html";
 	
 	public static final String 	CONFIG_ROOT_DIR					= PR_ROOT_DIR;
 	public        		String 	CONFIG_ROOT_DIR_DEFAULT			= "";
@@ -105,7 +106,7 @@ WebPlugin
 	
 	public static final String 	CONFIG_MODE						= "Mode";
 	public static final String 	CONFIG_MODE_FULL				= "full";
-	public        final String 	CONFIG_MODE_DEFAULT				= CONFIG_MODE_FULL;
+	public static final String 	CONFIG_MODE_DEFAULT				= CONFIG_MODE_FULL;
 	
 	public static final String 	CONFIG_ACCESS					= PR_ACCESS;
 	public        		String 	CONFIG_ACCESS_DEFAULT			= "all";
@@ -129,7 +130,7 @@ WebPlugin
 	private String				resource_root;
 	
 	private boolean				ip_range_all	= false;
-	private IPRange				ip_range;
+	private List<IPRange>		ip_ranges;
 	
 	private Properties	properties;
 	
@@ -154,6 +155,13 @@ WebPlugin
 	{	
 		plugin_interface	= _plugin_interface;
 		
+		Boolean	pr_enable = (Boolean)properties.get(PR_ENABLE);
+		
+		if ( pr_enable != null ){
+		
+			CONFIG_ENABLE_DEFAULT	= pr_enable.booleanValue();
+		}
+		
 		Integer	pr_port = (Integer)properties.get(PR_PORT);
 		
 		if ( pr_port != null ){
@@ -237,11 +245,19 @@ WebPlugin
 		
 		PluginConfig	plugin_config = plugin_interface.getPluginconfig();
 		
-		config_model = (BasicPluginConfigModel)properties.get( PR_CONFIG_MODEL );
+		String[] cm_params = (String[])properties.get( PR_CONFIG_MODEL_PARAMS );
 
-		if ( config_model == null ){
+		if ( cm_params == null || cm_params.length == 0 ){
 			
 			config_model = ui_manager.createBasicPluginConfigModel(ConfigSection.SECTION_PLUGINS, sConfigSectionID);
+			
+		}else if ( cm_params.length == 1 ){
+			
+			config_model = ui_manager.createBasicPluginConfigModel( cm_params[0] );
+
+		}else{
+			
+			config_model = ui_manager.createBasicPluginConfigModel( cm_params[0], cm_params[1] );
 		}
 		
 		boolean	save_needed = false;
@@ -349,7 +365,7 @@ WebPlugin
 			plugin_config.save();
 		}
 		
-		LabelParameter param_info = config_model.addLabelParameter2( "webui.restart.info" );
+		final LabelParameter param_info = config_model.addLabelParameter2( "webui.restart.info" );
 
 		Boolean	disablable = (Boolean)properties.get( PR_DISABLABLE );
 		
@@ -503,21 +519,77 @@ WebPlugin
 				pw_enable, user_name, password,
 			});
 			    
-		if ( !enabled ){
-			
-			Parameter[] params = config_model.getParameters();
+		if ( param_enable != null ){
+						
+			final List<Parameter> changed_params = new ArrayList<Parameter>();
 			
-			for ( Parameter param: params ){
+			if ( !enabled ){
 				
-				if ( param == param_enable || param == param_info ){
+				Parameter[] params = config_model.getParameters();
+
+				for ( Parameter param: params ){
+					
+					if ( param == param_enable || param == param_info ){
+						
+						continue;
+					}
+					
+					if ( param.isEnabled()){
+						
+						changed_params.add( param );
 					
-					continue;
+						param.setEnabled( false );
+					}
 				}
-				
-				param.setEnabled( false );
 			}
 			
-			return;
+			param_enable.addListener(
+				new ParameterListener()
+				{
+					public void 
+					parameterChanged(
+						Parameter e_p )
+					{
+							// this doesn't quite work as tne enabler/disabler parameter logic is implemented
+							// badly and only toggles the UI component, not the enabled state of the
+							// underlying parameter. grr. better than nothing though
+						
+						boolean	is_enabled = ((BooleanParameter)e_p).getValue();
+						
+						if ( is_enabled ){
+						
+							for ( Parameter p: changed_params ){
+								
+								p.setEnabled( true );
+							}
+						}else{
+							
+							changed_params.clear();
+							
+							Parameter[] params = config_model.getParameters();
+							
+							for ( Parameter param: params ){
+								
+								if ( param == e_p || param == param_info ){
+									
+									continue;
+								}
+								
+								if ( param.isEnabled()){
+									
+									changed_params.add( param );
+								
+									param.setEnabled( false );
+								}
+							}
+						}
+					}
+				});
+			
+			if ( !enabled ){
+				
+				return;
+			}
 		}
 		
 			// end config
@@ -649,32 +721,55 @@ WebPlugin
 		
 		String	access_str = param_access.getValue().trim();
 		
+		String ip_ranges_str = "";
+		
 		if ( access_str.length() > 7 && Character.isDigit(access_str.charAt(0))){
 			
-			ip_range	= plugin_interface.getIPFilter().createRange(true);
+			String[] ranges = access_str.replace( ';', ',' ).split( "," );
+			
+			ip_ranges = new ArrayList<IPRange>();
 			
-			int	sep = access_str.indexOf("-");
+			for ( String range: ranges ){
 				
-			if ( sep == -1 ){
+				range = range.trim();
 				
-				ip_range.setStartIP( access_str );
+				if ( range.length() > 7 ){
+					
+					IPRange ip_range	= plugin_interface.getIPFilter().createRange(true);
+			
+					int	sep = range.indexOf("-");
 				
-				ip_range.setEndIP( access_str );
+					if ( sep == -1 ){
 				
-			}else{				
+						ip_range.setStartIP( range );
 				
-				ip_range.setStartIP( access_str.substring(0,sep).trim());
+						ip_range.setEndIP( range );
 				
-				ip_range.setEndIP( access_str.substring( sep+1 ).trim());
-			}
+					}else{				
+				
+						ip_range.setStartIP( range.substring(0,sep).trim());
+				
+						ip_range.setEndIP( range.substring( sep+1 ).trim());
+					}
 			
-			ip_range.checkValid();
+					ip_range.checkValid();
 			
-			if (!ip_range.isValid()){
+					if (!ip_range.isValid()){
 			
-				log.log( LoggerChannel.LT_ERROR, "Access parameter '" + access_str + "' is invalid" );
+						log.log( LoggerChannel.LT_ERROR, "Access parameter '" + range + "' is invalid" );
+						
+					}else{
+						
+						ip_ranges.add( ip_range );
+						
+						ip_ranges_str += (ip_ranges_str.length()==0?"":", ") + ip_range.getStartIP() + " - " + ip_range.getEndIP();
+					}
+				}
+			}
 			
-				ip_range	= null;
+			if ( ip_ranges.size() == 0 ){
+				
+				ip_ranges = null;
 			}
 		}else{
 			
@@ -686,9 +781,9 @@ WebPlugin
 		
 		log.log( 	LoggerChannel.LT_INFORMATION, 
 					"Acceptable IP range = " +
-						( ip_range==null?
+						( ip_ranges==null?
 							(ip_range_all?"all":"local"):
-							(ip_range.getStartIP() + " - " + ip_range.getEndIP())));
+							(ip_ranges_str)));
 				
 							
 		try{
@@ -898,7 +993,7 @@ WebPlugin
 				boolean valid_ip = true;
 				InetAddress ia = InetAddress.getByName( client );
 				
-				if ( ip_range == null ){
+				if ( ip_ranges == null ){
 					
 					if ( !ia.isLoopbackAddress()){
 				
@@ -907,7 +1002,17 @@ WebPlugin
 					}
 				}else{
 					
-					if ( !ip_range.isInRange( ia.getHostAddress())){
+					boolean ok = false;
+					
+					for ( IPRange range: ip_ranges ){
+						
+						if ( range.isInRange( ia.getHostAddress())){
+						
+							ok = true;
+						}
+					}
+					
+					if ( !ok ){
 						
 						log.log( LoggerChannel.LT_ERROR, "Client '" + client + "' (" + ia.getHostAddress() + ") is not in range, rejecting" );
 						valid_ip = false;


hooks/post-receive
-- 
Azureus/Vuze packaging for Debian



More information about the pkg-java-commits mailing list