← Back to team overview

linuxdcpp-team team mailing list archive

[Merge] lp:~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n into lp:linuxdcpp

 

Steven Sheehy has proposed merging lp:~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n into lp:linuxdcpp.

Requested reviews:
  LinuxDC++ Team (linuxdcpp-team)
Related bugs:
  #311482 i18n support
  https://bugs.launchpad.net/bugs/311482

For more details, see:
https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n/+merge/47355
-- 
https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n/+merge/47355
Your team LinuxDC++ Team is requested to review the proposed merge of lp:~linuxdcpp-team/linuxdcpp/linuxdcpp-i18n into lp:linuxdcpp.
=== modified file '.bzrignore'
--- .bzrignore	2010-03-24 00:41:52 +0000
+++ .bzrignore	2011-01-25 05:11:20 +0000
@@ -2,3 +2,4 @@
 tags
 core
 linuxdcpp
+po

=== modified file 'Readme.txt'
--- Readme.txt	2010-11-05 13:09:29 +0000
+++ Readme.txt	2011-01-25 05:11:20 +0000
@@ -20,7 +20,7 @@
 scons >= 0.96
 pkg-config
 g++ >= 4.1
-gtk+-2.0 >= 2.10
+gtk+-2.0 >= 2.12
 gthread-2.0 >= 2.4
 libglade-2.0 >= 2.4
 pthread

=== modified file 'SConstruct'
--- SConstruct	2011-01-18 15:02:04 +0000
+++ SConstruct	2011-01-25 05:11:20 +0000
@@ -12,13 +12,14 @@
 
 EnsureSConsVersion(0, 98, 1)
 
-APP_NAME = 'linuxdcpp'
+PACKAGE = 'linuxdcpp'
+CORE_PACKAGE = 'libdcpp'
 BUILD_PATH = '#/build/'
+BUILD_LOCALE_PATH = BUILD_PATH + 'locale/'
 
-# todo: remove -fpermissive and fix the errors
 BUILD_FLAGS = {
-	'common': ['-I#', '-fpermissive', '-D_GNU_SOURCE', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_REENTRANT'],
-	'debug': ['-g', '-ggdb', '-Wall', '-D_DEBUG'], 
+	'common'  : ['-I#', '-D_GNU_SOURCE', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_REENTRANT'],
+	'debug'   : ['-g', '-ggdb', '-Wall', '-D_DEBUG'], 
 	'release' : ['-O3', '-fomit-frame-pointer', '-DNDEBUG']
 }
 
@@ -67,21 +68,29 @@
 	context.Result(revision)
 	return revision
 
-# Install app icons to share/icons and all others to share/linuxdcpp/icons
-def install_icons(env, icons_dir):
-	prefix = env['FAKE_ROOT'] + os.path.join(env['PREFIX'], 'share')
-
-	for root, dirs, files in os.walk(icons_dir):
-		for file in files:
-			(filename, ext) = file.rsplit('.', 1)
-
-			if (filename == APP_NAME):
-				target = os.path.join(prefix, root)
-			else:
-				target = os.path.join(prefix, APP_NAME, root)
-
-			src = os.path.join(root, file)
-			env.Alias('install', env.Install(dir = target, source = src))
+# Recursively installs all files within the source folder to target. Optionally,
+# a filter function can be provided to prevent installation of certain files.
+def recursive_install(env, source, target, filter = None):
+	nodes = env.Glob(os.path.join(source, '*'))
+	target = os.path.join(target, os.path.basename(source))
+
+	for node in nodes:
+		if node.isdir():
+			env.RecursiveInstall(str(node), target, filter)
+		elif filter == None or filter(node.name):
+			env.Alias('install', env.Install(target, node))
+
+def generate_message_catalogs(env):
+	mo_path = os.path.join(BUILD_LOCALE_PATH, '%s', 'LC_MESSAGES', env['package'] + '.mo')
+	po_files = env.Glob('po/*.po', strings = True)
+
+	for po_file in po_files:
+		basename = os.path.basename(po_file)
+		lang = os.path.splitext(basename)[0]
+		mo_file = mo_path % lang
+		env.MoBuild(source = po_file, target = mo_file)
+
+	return None
 
 
 # ----------------------------------------------------------------------
@@ -107,7 +116,7 @@
 # Initialization
 # ----------------------------------------------------------------------
 
-env = Environment(ENV = os.environ, options = vars)
+env = Environment(ENV = os.environ, variables = vars, package = PACKAGE)
 
 env['mode'] = 'debug' if env.get('debug') else 'release'
 env['build_path'] = BUILD_PATH + env['mode'] + '/'
@@ -136,7 +145,26 @@
 vars.Save('build/sconf/scache.conf', env)
 Help(vars.GenerateHelpText(env))
 
-env.AddMethod(install_icons, 'InstallIcons')
+pot_args = ['xgettext', '--default-domain=$PACKAGE', '--package-name=$PACKAGE',
+		'--msgid-bugs-address=https://translations.launchpad.net/linuxdcpp',
+		'--copyright-holder=LinuxDC++ Team', '--add-comments=TRANSLATORS',
+		'--keyword=_', '--keyword=N_', '--keyword=C_:1c,2', '--keyword=F_',
+		'--keyword=P_:1,2', '--from-code=UTF-8', '--foreign-user',
+		'--no-wrap', '--boost', '--sort-output', '--language=$LANGUAGE',
+		'--output=$TARGET', '$SOURCES']
+pot_build = Builder(action = Action([pot_args], 'Extracting messages to $TARGET from $SOURCES'))
+env.Append(BUILDERS = {'PotBuild' : pot_build})
+
+merge_pot_args = ['msgcat', '$SOURCES', '--output-file=$TARGET']
+merge_pot_builder = Builder(action = Action([merge_pot_args], 'Merging pot files $SOURCES to $TARGET'))
+env.Append(BUILDERS = {'MergePotFiles' : merge_pot_builder})
+
+mo_args = ['msgfmt', '-c', '-o', '$TARGET', '$SOURCE']
+mo_build = Builder(action = Action([mo_args], 'Compiling message catalog $TARGET from $SOURCES'))
+env.Append(BUILDERS = {'MoBuild' : mo_build})
+
+env.AddMethod(generate_message_catalogs, 'GenerateMessageCatalogs')
+env.AddMethod(recursive_install, 'RecursiveInstall')
 
 conf = env.Configure(
 	custom_tests =
@@ -164,8 +192,8 @@
 		print '\tpkg-config not found.'
 		Exit(1)
 
-	if not conf.CheckPKG('gtk+-2.0 >= 2.10'):
-		print '\tgtk+ >= 2.10 not found.'
+	if not conf.CheckPKG('gtk+-2.0 >= 2.12'):
+		print '\tgtk+ >= 2.12 not found.'
 		print '\tNote: You might have the lib but not the headers'
 		Exit(1)
 
@@ -255,7 +283,7 @@
 	env.ParseConfig('pkg-config --libs libglade-2.0')
 	env.ParseConfig('pkg-config --libs gthread-2.0')
 
-	env.Append(LIBPATH = env['build_path'] + 'dcpp')
+	env.Append(LIBPATH = env['build_path'] + CORE_PACKAGE)
 	env.Prepend(LIBS = 'dcpp')
 
 	if os.sys.platform == 'linux2':
@@ -281,17 +309,22 @@
 # Build
 # ----------------------------------------------------------------------
 
-	Export('env')
-
 	# Build the dcpp library
-	libdcpp = SConscript(dirs = 'dcpp', variant_dir = env['build_path'] + 'dcpp', duplicate = 0)
+	dcpp_env = env.Clone(package = CORE_PACKAGE)
+	libdcpp = SConscript(dirs = 'dcpp', variant_dir = env['build_path'] + CORE_PACKAGE, duplicate = 0, exports = {'env': dcpp_env})
 
 	# Build the GUI
-	obj_files = SConscript(dirs = 'linux', variant_dir = env['build_path'] + 'gui', duplicate = 0)
+	ui_env = env.Clone()
+	glade_pot_file = SConscript(dirs = 'glade', variant_dir = env['build_path'] + 'glade', duplicate = 0, exports = {'env': ui_env})
+
+	(linux_pot_file, obj_files) = SConscript(dirs = 'linux', variant_dir = env['build_path'] + 'gui', duplicate = 0, exports = {'env': ui_env})
 
 	# Create the executable
-	env.Program(target = APP_NAME, source = [libdcpp, obj_files])
-	Default(APP_NAME)
+	env.Program(target = PACKAGE, source = [libdcpp, obj_files])
+
+	# i18n
+	env.MergePotFiles(source = [glade_pot_file, linux_pot_file], target = 'po/%s.pot' % PACKAGE)
+	env.GenerateMessageCatalogs()
 
 
 # ----------------------------------------------------------------------
@@ -303,11 +336,16 @@
 	glade_files = env.Glob('glade/*.glade')
 	text_files = env.Glob('*.txt')
 	prefix = env['FAKE_ROOT'] + env['PREFIX']
-	desktop_file = os.path.join('data', APP_NAME + '.desktop')
-
-	env.InstallIcons('icons/hicolor/')
-	env.Alias('install', env.Install(dir = os.path.join(prefix, 'share', APP_NAME, 'glade'), source = glade_files))
-	env.Alias('install', env.Install(dir = os.path.join(prefix, 'share', 'doc', APP_NAME), source = text_files))
+	desktop_file = os.path.join('data', PACKAGE + '.desktop')
+	app_icon_filter = lambda icon: os.path.splitext(icon)[0] == PACKAGE
+	regular_icon_filter = lambda icon: os.path.splitext(icon)[0] != PACKAGE
+
+	env.RecursiveInstall('icons/hicolor', os.path.join(prefix, 'share', 'icons'), app_icon_filter)
+	env.RecursiveInstall('icons/hicolor', os.path.join(prefix, 'share', PACKAGE, 'icons'), regular_icon_filter)
+	env.RecursiveInstall(BUILD_LOCALE_PATH, os.path.join(prefix, 'share', 'locale'))
+
+	env.Alias('install', env.Install(dir = os.path.join(prefix, 'share', PACKAGE, 'glade'), source = glade_files))
+	env.Alias('install', env.Install(dir = os.path.join(prefix, 'share', 'doc', PACKAGE), source = text_files))
 	env.Alias('install', env.Install(dir = os.path.join(prefix, 'share', 'applications'), source = desktop_file))
-	env.Alias('install', env.Install(dir = os.path.join(prefix, 'bin'), source = APP_NAME))
+	env.Alias('install', env.Install(dir = os.path.join(prefix, 'bin'), source = PACKAGE))
 

=== modified file 'dcpp/DCPlusPlus.cpp'
--- dcpp/DCPlusPlus.cpp	2009-08-15 04:40:26 +0000
+++ dcpp/DCPlusPlus.cpp	2011-01-25 05:11:20 +0000
@@ -59,9 +59,8 @@
 	WSAStartup(MAKEWORD(2, 2), &wsaData);
 #endif
 
-	Util::initialize();
-
 	bindtextdomain(PACKAGE, LOCALEDIR);
+	bind_textdomain_codeset(PACKAGE, "UTF-8");
 
 	ResourceManager::newInstance();
 	SettingsManager::newInstance();
@@ -83,16 +82,15 @@
 
 	SettingsManager::getInstance()->load();
 
+#ifdef _WIN32
 	if(!SETTING(LANGUAGE).empty()) {
-#ifdef _WIN32
 		string language = "LANGUAGE=" + SETTING(LANGUAGE);
 		putenv(language.c_str());
-#else
-		setenv("LANGUAGE", SETTING(LANGUAGE).c_str(), true);
-#endif
-		// Apparently this is supposted to make gettext reload the message catalog...
+
+		// Apparently this is supposed to make gettext reload the message catalog...
 		_nl_msg_cat_cntr++;
 	}
+#endif
 
 	FavoriteManager::getInstance()->load();
 	CryptoManager::getInstance()->loadCertificates();

=== modified file 'dcpp/SConscript'
--- dcpp/SConscript	2010-10-07 04:32:15 +0000
+++ dcpp/SConscript	2011-01-25 05:11:20 +0000
@@ -2,14 +2,14 @@
 
 Import('env')
 
-# We don't want to add this CXXFLAG globally so we copy the env
-env = env.Clone()
+dcpp_files = env.Glob('*.cpp')
+
 env.Append(CPPDEFINES = 'BUILDING_DCPP')
 
-dcpp_files = env.Glob('*.cpp')
-
 # Build the dcpp files and create the library
 libdcpp  = env.StaticLibrary(target = 'dcpp', source = dcpp_files)
 
+env.GenerateMessageCatalogs()
+
 Return('libdcpp')
 

=== modified file 'dcpp/Util.cpp'
--- dcpp/Util.cpp	2010-04-18 04:11:04 +0000
+++ dcpp/Util.cpp	2011-01-25 05:11:20 +0000
@@ -105,7 +105,7 @@
 
 #endif
 
-void Util::initialize() {
+void Util::initialize(PathsMap pathOverrides) {
 	Text::initialize();
 
 	sgenrand((unsigned long)time(NULL));
@@ -170,10 +170,8 @@
 	}
 
 	paths[PATH_USER_LOCAL] = paths[PATH_USER_CONFIG];
-
-	// @todo paths[PATH_RESOURCES] = <replace from sconscript?>;
-	// @todo paths[PATH_LOCALE] = <replace from sconscript?>;
-
+	paths[PATH_RESOURCES] = "/usr/share/";
+	paths[PATH_LOCALE] = paths[PATH_RESOURCES] + "locale/";
 	paths[PATH_DOWNLOADS] = home + "/Downloads/";
 #endif
 
@@ -181,6 +179,13 @@
 	paths[PATH_HUB_LISTS] = paths[PATH_USER_LOCAL] + "HubLists" PATH_SEPARATOR_STR;
 	paths[PATH_NOTEPAD] = paths[PATH_USER_CONFIG] + "Notepad.txt";
 
+	// Override core generated paths
+	for (PathsMap::const_iterator it = pathOverrides.begin(); it != pathOverrides.end(); ++it)
+	{
+		if (!it->second.empty())
+			paths[it->first] = it->second;
+	}
+
 	File::ensureDirectory(paths[PATH_USER_CONFIG]);
 	File::ensureDirectory(paths[PATH_USER_LOCAL]);
 

=== modified file 'dcpp/Util.h'
--- dcpp/Util.h	2009-08-15 04:40:26 +0000
+++ dcpp/Util.h	2011-01-25 05:11:20 +0000
@@ -118,7 +118,8 @@
 		PATH_LAST
 	};
 
-	static void initialize();
+	typedef std::map<Util::Paths, std::string> PathsMap;
+	static void initialize(PathsMap pathOverrides = PathsMap());
 
 	/** Path of temporary storage */
 	static string getTempPath() {

=== added file 'glade/SConscript'
--- glade/SConscript	1970-01-01 00:00:00 +0000
+++ glade/SConscript	2011-01-25 05:11:20 +0000
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+
+Import('env')
+
+glade_files = env.Glob('*.glade')
+
+pot_file = env.PotBuild(source=glade_files, target='po/glade.pot', LANGUAGE='glade')
+
+Return('pot_file')
+

=== modified file 'glade/favoritehubs.glade'
--- glade/favoritehubs.glade	2009-10-11 04:40:31 +0000
+++ glade/favoritehubs.glade	2011-01-25 05:11:20 +0000
@@ -170,7 +170,7 @@
               <widget class="GtkLabel" id="labelAddress">
                 <property name="visible">True</property>
                 <property name="xalign">0</property>
-                <property name="label" translatable="yes">_Address:</property>
+                <property name="label" translatable="yes">_Hub address:</property>
                 <property name="use_underline">True</property>
                 <property name="mnemonic_widget">entryAddress</property>
               </widget>
@@ -419,6 +419,15 @@
       </widget>
     </child>
   </widget>
+  <widget class="GtkMessageDialog" id="confirmDeletionDialog">
+    <property name="border_width">5</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">dialog</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="message_type">warning</property>
+    <property name="buttons">ok-cancel</property>
+    <property name="text" translatable="yes">Are you sure you want to delete the selected favorite hub?</property>
+  </widget>
   <widget class="GtkMenu" id="menu">
     <child>
       <widget class="GtkImageMenuItem" id="addMenuItem">

=== modified file 'glade/favoriteusers.glade'
--- glade/favoriteusers.glade	2010-05-22 14:23:56 +0000
+++ glade/favoriteusers.glade	2011-01-25 05:11:20 +0000
@@ -71,14 +71,14 @@
     <child>
       <widget class="GtkMenuItem" id="connectItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Connect to hub</property>
+        <property name="label" translatable="yes">_Connect to hub</property>
         <property name="use_underline">True</property>
       </widget>
     </child>
     <child>
       <widget class="GtkMenuItem" id="descriptionItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Description</property>
+        <property name="label" translatable="yes">_Edit description...</property>
         <property name="use_underline">True</property>
       </widget>
     </child>
@@ -130,8 +130,9 @@
             <child>
               <widget class="GtkLabel" id="label10">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">&lt;b&gt;Description&lt;/b&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">_Description:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">descriptionEntry</property>
               </widget>
               <packing>
                 <property name="type">label_item</property>

=== modified file 'glade/hash.glade'
--- glade/hash.glade	2008-02-29 04:39:28 +0000
+++ glade/hash.glade	2011-01-25 05:11:20 +0000
@@ -94,7 +94,7 @@
               <widget class="GtkProgressBar" id="progressbar">
                 <property name="visible">True</property>
                 <property name="pulse_step">0.10000000149011612</property>
-                <property name="text" translatable="yes">0%</property>
+                <property name="text" translatable="no">0%</property>
               </widget>
               <packing>
                 <property name="expand">False</property>

=== modified file 'glade/hub.glade'
--- glade/hub.glade	2010-09-05 00:10:54 +0000
+++ glade/hub.glade	2011-01-25 05:11:20 +0000
@@ -106,7 +106,7 @@
     </child>
   </widget>
   <widget class="GtkDialog" id="passwordDialog">
-    <property name="title" translatable="yes">Enter hub password</property>
+    <property name="title" translatable="yes">Hub Password</property>
     <property name="resizable">False</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
     <child internal-child="vbox">
@@ -139,8 +139,7 @@
             <child>
               <widget class="GtkLabel" id="label1">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">&lt;b&gt;Enter your password&lt;/b&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">Enter your password:</property>
               </widget>
               <packing>
                 <property name="type">label_item</property>

=== modified file 'glade/mainwindow.glade'
--- glade/mainwindow.glade	2010-10-14 03:51:12 +0000
+++ glade/mainwindow.glade	2011-01-25 05:11:20 +0000
@@ -65,7 +65,7 @@
                     <child>
                       <widget class="GtkImageMenuItem" id="quickConnectMenuItem">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">_Quick connect</property>
+                        <property name="label" translatable="yes">_Quick connect...</property>
                         <property name="use_underline">True</property>
                         <accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="activate"/>
                         <child internal-child="image">
@@ -693,66 +693,19 @@
       </widget>
     </child>
   </widget>
-  <widget class="GtkDialog" id="exitDialog">
-    <property name="title" translatable="yes">Exit LinuxDC++?</property>
-    <property name="resizable">False</property>
+  <widget class="GtkMessageDialog" id="exitDialog">
+    <property name="border_width">5</property>
     <property name="destroy_with_parent">True</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="dialog-vbox1">
-        <property name="visible">True</property>
-        <child>
-          <widget class="GtkLabel" id="label3">
-            <property name="visible">True</property>
-            <property name="label" translatable="yes">Do you really want to exit?</property>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="cancelbutton1">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="okbutton1">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="label">gtk-ok</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-5</property>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
+    <property name="type_hint">dialog</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="message_type">warning</property>
+    <property name="buttons">ok-cancel</property>
+    <property name="text" translatable="yes">Are you sure you want to exit the application?</property>
   </widget>
   <widget class="GtkDialog" id="connectDialog">
-    <property name="title" translatable="yes">Connect to a hub</property>
+    <property name="title" translatable="yes">Quick Connect</property>
     <property name="destroy_with_parent">True</property>
+    <property name="default_width">400</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
     <child internal-child="vbox">
       <widget class="GtkVBox" id="dialog-vbox2">
@@ -785,8 +738,9 @@
             <child>
               <widget class="GtkLabel" id="label4">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">&lt;b&gt;Connect to address:&lt;/b&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">_Hub address:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">connectEntry</property>
               </widget>
               <packing>
                 <property name="type">label_item</property>
@@ -839,7 +793,7 @@
     <property name="logo_icon_name">linuxdcpp</property>
     <property name="destroy_with_parent">True</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <property name="copyright" translatable="yes">Copyright © 2004-2009 Jens Oknelid</property>
+    <property name="copyright" translatable="yes">Copyright © 2004-2011 Jens Oknelid</property>
     <property name="comments" translatable="yes">A DC++ port for Linux
 
 LinuxDC++ version: %s
@@ -968,7 +922,7 @@
     </child>
   </widget>
   <widget class="GtkDialog" id="ucLineDialog">
-    <property name="title" translatable="yes">Enter line for user command</property>
+    <property name="title" translatable="yes">User Command Argument</property>
     <property name="default_width">300</property>
     <property name="destroy_with_parent">True</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
@@ -1003,7 +957,6 @@
             <child>
               <widget class="GtkLabel" id="ucLabel">
                 <property name="visible">True</property>
-                <property name="use_markup">True</property>
               </widget>
               <packing>
                 <property name="type">label_item</property>
@@ -1076,7 +1029,7 @@
     </child>
   </widget>
   <widget class="GtkDialog" id="magnetDialog">
-    <property name="title" translatable="yes">Magnet properties</property>
+    <property name="title" translatable="yes">Magnet Properties</property>
     <property name="modal">True</property>
     <property name="destroy_with_parent">True</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
@@ -1095,7 +1048,9 @@
               <widget class="GtkLabel" id="label9">
                 <property name="visible">True</property>
                 <property name="xalign">0</property>
-                <property name="label" translatable="yes">Magnet</property>
+                <property name="label" translatable="yes">_Magnet:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">magnetEntry</property>
               </widget>
               <packing>
                 <property name="x_options">GTK_FILL</property>
@@ -1106,7 +1061,9 @@
               <widget class="GtkLabel" id="label8">
                 <property name="visible">True</property>
                 <property name="xalign">0</property>
-                <property name="label" translatable="yes">File name</property>
+                <property name="label" translatable="yes">_Filename</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">magnetNameEntry</property>
               </widget>
               <packing>
                 <property name="top_attach">1</property>
@@ -1119,7 +1076,9 @@
               <widget class="GtkLabel" id="label5">
                 <property name="visible">True</property>
                 <property name="xalign">0</property>
-                <property name="label" translatable="yes">Size</property>
+                <property name="label" translatable="yes">_Size:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">magnetSizeEntry</property>
               </widget>
               <packing>
                 <property name="top_attach">2</property>
@@ -1132,7 +1091,9 @@
               <widget class="GtkLabel" id="label7">
                 <property name="visible">True</property>
                 <property name="xalign">0</property>
-                <property name="label" translatable="yes">TTH</property>
+                <property name="label" translatable="yes">_TTH:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">tthEntry</property>
               </widget>
               <packing>
                 <property name="top_attach">4</property>
@@ -1201,7 +1162,9 @@
               <widget class="GtkLabel" id="label6">
                 <property name="visible">True</property>
                 <property name="xalign">0</property>
-                <property name="label" translatable="yes">Exact size</property>
+                <property name="label" translatable="yes">_Exact size:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">exactSizeEntry</property>
               </widget>
               <packing>
                 <property name="top_attach">3</property>

=== modified file 'glade/publichubs.glade'
--- glade/publichubs.glade	2008-05-27 00:23:19 +0000
+++ glade/publichubs.glade	2011-01-25 05:11:20 +0000
@@ -323,7 +323,7 @@
     <child>
       <widget class="GtkImageMenuItem" id="favMenuItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Add to favorites</property>
+        <property name="label" translatable="yes">_Add to favorites</property>
         <property name="use_underline">True</property>
       </widget>
     </child>

=== modified file 'glade/search.glade'
--- glade/search.glade	2010-09-05 00:10:54 +0000
+++ glade/search.glade	2011-01-25 05:11:20 +0000
@@ -22,7 +22,9 @@
                   <widget class="GtkLabel" id="label1">
                     <property name="visible">True</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Search for</property>
+                    <property name="label" translatable="yes">_Search text:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">comboboxentrySearch</property>
                   </widget>
                   <packing>
                     <property name="expand">False</property>
@@ -442,7 +444,7 @@
     <child>
       <widget class="GtkMenuItem" id="downloadToItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Download _to...</property>
+        <property name="label" translatable="yes">Download _to</property>
         <property name="use_underline">True</property>
         <child>
           <widget class="GtkMenu" id="downloadMenu">
@@ -453,14 +455,14 @@
     <child>
       <widget class="GtkMenuItem" id="downloadWholeDirItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Download _whole directory</property>
+        <property name="label" translatable="yes">Do_wnload directory</property>
         <property name="use_underline">True</property>
       </widget>
     </child>
     <child>
       <widget class="GtkMenuItem" id="downloadWholeDirToItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Download whole director_y to...</property>
+        <property name="label" translatable="yes">Download director_y to</property>
         <property name="use_underline">True</property>
         <child>
           <widget class="GtkMenu" id="downloadDirMenu">

=== modified file 'glade/settingsdialog.glade'
--- glade/settingsdialog.glade	2010-09-05 00:10:54 +0000
+++ glade/settingsdialog.glade	2011-01-25 05:11:20 +0000
@@ -30,13 +30,31 @@
                         <property name="border_width">8</property>
                         <property name="n_rows">5</property>
                         <property name="n_columns">2</property>
-                        <property name="column_spacing">4</property>
+                        <property name="column_spacing">10</property>
                         <property name="row_spacing">4</property>
                         <child>
-                          <widget class="GtkVBox" id="connectionBox">
+                          <widget class="GtkHBox" id="connectionBox">
                             <property name="visible">True</property>
                             <child>
-                              <placeholder/>
+                              <widget class="GtkComboBox" id="speedComboBox">
+                                <property name="visible">True</property>
+                                <property name="items" translatable="no"/>
+                              </widget>
+                              <packing>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkLabel" id="speedLabel">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Mb/s</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="padding">5</property>
+                                <property name="position">1</property>
+                              </packing>
                             </child>
                           </widget>
                           <packing>
@@ -88,8 +106,10 @@
                         <child>
                           <widget class="GtkLabel" id="label12">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">Max upload speed (MiB/s)</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Max upload _speed:</property>
+                            <property name="use-underline">True</property>
+                            <property name="mnemonic_widget">speedComboBox</property>
                           </widget>
                           <packing>
                             <property name="top_attach">3</property>
@@ -101,8 +121,10 @@
                         <child>
                           <widget class="GtkLabel" id="label11">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">Description</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_Description:</property>
+                            <property name="use-underline">True</property>
+                            <property name="mnemonic_widget">descriptionEntry</property>
                           </widget>
                           <packing>
                             <property name="top_attach">2</property>
@@ -114,8 +136,10 @@
                         <child>
                           <widget class="GtkLabel" id="label10">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">E-Mail</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_Email:</property>
+                            <property name="use-underline">True</property>
+                            <property name="mnemonic_widget">emailEntry</property>
                           </widget>
                           <packing>
                             <property name="top_attach">1</property>
@@ -127,8 +151,10 @@
                         <child>
                           <widget class="GtkLabel" id="label9">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">Username</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_Username:</property>
+                            <property name="use-underline">True</property>
+                            <property name="mnemonic_widget">nickEntry</property>
                           </widget>
                           <packing>
                             <property name="x_options">GTK_FILL</property>
@@ -138,8 +164,10 @@
                         <child>
                           <widget class="GtkLabel" id="label15">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">Default hub encoding</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Default _hub encoding:</property>
+                            <property name="use-underline">True</property>
+                            <property name="mnemonic_widget">comboboxCharset</property>
                           </widget>
                           <packing>
                             <property name="top_attach">4</property>
@@ -272,8 +300,10 @@
                         <child>
                           <widget class="GtkLabel" id="tlsLabel">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">TLS</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">T_LS:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">tlsEntry</property>
                           </widget>
                           <packing>
                             <property name="left_attach">2</property>
@@ -352,8 +382,10 @@
                         <child>
                           <widget class="GtkLabel" id="udpLabel">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">UDP</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_UDP:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">udpEntry</property>
                           </widget>
                           <packing>
                             <property name="left_attach">2</property>
@@ -367,9 +399,10 @@
                         <child>
                           <widget class="GtkLabel" id="tcpLabel">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">TCP</property>
-                            <property name="justify">GTK_JUSTIFY_RIGHT</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_TCP:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">tcpEntry</property>
                           </widget>
                           <packing>
                             <property name="left_attach">2</property>
@@ -384,7 +417,8 @@
                           <widget class="GtkLabel" id="label149">
                             <property name="visible">True</property>
                             <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Ports</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Ports&lt;/b&gt;</property>
+                            <property name="use_markup">True</property>
                           </widget>
                           <packing>
                             <property name="left_attach">3</property>
@@ -397,7 +431,7 @@
                           <widget class="GtkRadioButton" id="activeRadioButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Active</property>
+                            <property name="label" translatable="yes">_Active</property>
                             <property name="use_underline">True</property>
                             <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
@@ -412,7 +446,7 @@
                           <widget class="GtkRadioButton" id="passiveRadioButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Firewall (passive, last resort)</property>
+                            <property name="label" translatable="yes">_Passive</property>
                             <property name="use_underline">True</property>
                             <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
@@ -428,8 +462,10 @@
                         <child>
                           <widget class="GtkLabel" id="ipLabel">
                             <property name="visible">True</property>
-                            <property name="xalign">1</property>
-                            <property name="label" translatable="yes">External / WAN IP</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Public _IP Address:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">ipComboboxEntry</property>
                           </widget>
                           <packing>
                             <property name="left_attach">1</property>
@@ -444,7 +480,7 @@
                           <widget class="GtkCheckButton" id="forceIPCheckButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Don't allow hub/UPnP to override</property>
+                            <property name="label" translatable="yes">Don't allow hu_b / UPnP to override</property>
                             <property name="use_underline">True</property>
                             <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
@@ -462,7 +498,7 @@
                           <widget class="GtkRadioButton" id="portForwardRadioButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Firewall with manual port forward</property>
+                            <property name="label" translatable="yes">_Manual port forwarding</property>
                             <property name="use_underline">True</property>
                             <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
@@ -479,7 +515,7 @@
                     <child>
                       <widget class="GtkLabel" id="label139">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Incoming connection settings&lt;/b&gt;</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Incoming Connection Settings&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </widget>
                       <packing>
@@ -569,7 +605,9 @@
                               <widget class="GtkLabel" id="socksUserLabel">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Username</property>
+                                <property name="label" translatable="yes">User_name:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">socksUserEntry</property>
                               </widget>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -584,7 +622,7 @@
                               <widget class="GtkCheckButton" id="socksCheckButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Use SOCKS5 server to resolve hostnames</property>
+                                <property name="label" translatable="yes">Use SOCKS5 server to resolve _hostnames</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                                 <property name="draw_indicator">True</property>
@@ -616,7 +654,9 @@
                               <widget class="GtkLabel" id="socksPassLabel">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Password</property>
+                                <property name="label" translatable="yes">Pass_word:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">socksPassEntry</property>
                               </widget>
                               <packing>
                                 <property name="left_attach">2</property>
@@ -645,7 +685,9 @@
                               <widget class="GtkLabel" id="socksPortLabel">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Port</property>
+                                <property name="label" translatable="yes">Po_rt:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">socksPortEntry</property>
                               </widget>
                               <packing>
                                 <property name="left_attach">2</property>
@@ -660,7 +702,9 @@
                               <widget class="GtkLabel" id="socksIPLabel">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Socks IP</property>
+                                <property name="label" translatable="yes">Soc_ks IP</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">socksIPEntry</property>
                               </widget>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -675,7 +719,7 @@
                               <widget class="GtkRadioButton" id="socksRadioButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">SOCKS5</property>
+                                <property name="label" translatable="yes">_SOCKS5</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                                 <property name="draw_indicator">True</property>
@@ -692,7 +736,7 @@
                               <widget class="GtkRadioButton" id="outDirectRadioButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Direct connection</property>
+                                <property name="label" translatable="yes">_Direct connection</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                                 <property name="draw_indicator">True</property>
@@ -712,7 +756,7 @@
                     <child>
                       <widget class="GtkLabel" id="label8">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Outgoing connection settings&lt;/b&gt;</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Outgoing Connection Settings&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </widget>
                       <packing>
@@ -756,90 +800,64 @@
                         <property name="visible">True</property>
                         <property name="label_xalign">0</property>
                         <child>
-                          <widget class="GtkVBox" id="vbox5">
+                          <widget class="GtkTable" id="table3">
                             <property name="visible">True</property>
-                            <property name="border_width">8</property>
-                            <child>
-                              <widget class="GtkLabel" id="label21">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Default download directory</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkHBox" id="hbox1">
-                                <property name="visible">True</property>
-                                <property name="spacing">4</property>
-                                <child>
-                                  <widget class="GtkEntry" id="finishedDownloadsEntry">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                  </widget>
-                                </child>
-                                <child>
-                                  <widget class="GtkButton" id="finishedDownloadsButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label" translatable="yes">Browse...</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="response_id">0</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label22">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Unfinished downloads directory</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkHBox" id="hbox2">
-                                <property name="visible">True</property>
-                                <property name="spacing">4</property>
-                                <child>
-                                  <widget class="GtkEntry" id="unfinishedDownloadsEntry">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                  </widget>
-                                </child>
-                                <child>
-                                  <widget class="GtkButton" id="unfinishedDownloadsButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label" translatable="yes">Browse...</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="response_id">0</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="position">3</property>
+                            <property name="n_rows">2</property>
+                            <property name="n_columns">2</property>
+                            <property name="column_spacing">15</property>
+                            <property name="row_spacing">4</property>
+                            <child>
+                              <widget class="GtkLabel" id="finishedDownloadsLabel">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="xpad">8</property>
+                                <property name="label" translatable="yes">_Finished downloads:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">finishedDownloadsFileChooserButton</property>
+                              </widget>
+                              <packing>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkLabel" id="unfinishedDownloadsLabel">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="xpad">8</property>
+                                <property name="label" translatable="yes">Unfin_ished downloads:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">unfinishedDownloadsFileChooserButton</property>
+                              </widget>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkFileChooserButton" id="unfinishedDownloadsFileChooserButton">
+                                <property name="visible">True</property>
+                                <property name="local_only">False</property>
+                                <property name="action">select-folder</property>
+                                <property name="title" translatable="yes">Select a Folder</property>
+                              </widget>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkFileChooserButton" id="finishedDownloadsFileChooserButton">
+                                <property name="visible">True</property>
+                                <property name="local_only">False</property>
+                                <property name="action">select-folder</property>
+                                <property name="title" translatable="yes">Select a Folder</property>
+                              </widget>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
                               </packing>
                             </child>
                           </widget>
@@ -864,86 +882,87 @@
                         <property name="visible">True</property>
                         <property name="label_xalign">0</property>
                         <child>
-                          <widget class="GtkVBox" id="vbox6">
+                          <widget class="GtkTable" id="table5">
                             <property name="visible">True</property>
-                            <property name="border_width">8</property>
-                            <property name="spacing">2</property>
-                            <child>
-                              <widget class="GtkTable" id="table5">
-                                <property name="visible">True</property>
-                                <property name="n_rows">2</property>
-                                <property name="n_columns">2</property>
-                                <property name="column_spacing">4</property>
-                                <property name="row_spacing">4</property>
-                                <child>
-                                  <widget class="GtkLabel" id="label25">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">No new downloads if speed exceeds (KiB/s, 0 = disable)</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkLabel" id="label24">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">Maximum simultaneous downloads (0 = infinite)</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkSpinButton" id="newDownloadsSpinButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="adjustment">1 0 10000 1 10 0</property>
-                                    <property name="climb_rate">1</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkSpinButton" id="maxDownloadsSpinButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="adjustment">0 0 100 1 10 0</property>
-                                    <property name="climb_rate">1</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label26">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Note; because of changing download speeds, this is not 100% accurate...</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
+                            <property name="n_rows">2</property>
+                            <property name="n_columns">3</property>
+                            <property name="column_spacing">10</property>
+                            <property name="row_spacing">4</property>
+                            <child>
+                              <widget class="GtkLabel" id="label25">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="xpad">8</property>
+                                <property name="label" translatable="yes">_No new downloads if speed exceeds:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">newDownloadsSpinButton</property>
+                              </widget>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkLabel" id="label24">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="xpad">8</property>
+                                <property name="label" translatable="yes">_Maximum simultaneous downloads:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">maxDownloadsSpinButton</property>
+                              </widget>
+                              <packing>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkSpinButton" id="newDownloadsSpinButton">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="adjustment">0 0 10000 1 10 0</property>
+                                <property name="climb_rate">1</property>
+                                <property name="tooltip_text" translatable="yes">A value of '0' will disable this option</property>
+                              </widget>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkSpinButton" id="maxDownloadsSpinButton">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="adjustment">0 0 100 1 10 0</property>
+                                <property name="climb_rate">1</property>
+                                <property name="tooltip_text" translatable="yes">A value of '0' will disable this option</property>
+                              </widget>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkLabel" id="kiBpsLabel">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">KiB/s</property>
+                              </widget>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                                <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"></property>
                               </packing>
                             </child>
                           </widget>
@@ -974,58 +993,92 @@
                             <property name="border_width">8</property>
                             <property name="spacing">4</property>
                             <child>
-                              <widget class="GtkVBox" id="vbox8">
+                              <widget class="GtkHBox" id="hbox5">
                                 <property name="visible">True</property>
+                                <property name="spacing">4</property>
                                 <child>
-                                  <widget class="GtkLabel" id="label28">
+                                  <widget class="GtkTreeView" id="publicHubsTreeView">
                                     <property name="visible">True</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">Public Hubs list URL</property>
+                                    <property name="can_focus">True</property>
                                   </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                  </packing>
                                 </child>
                                 <child>
-                                  <widget class="GtkHBox" id="hbox3">
+                                  <widget class="GtkVBox" id="vbox6">
                                     <property name="visible">True</property>
-                                    <child>
-                                      <widget class="GtkButton" id="publicHubsButton">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="label" translatable="yes">Configure Public Hub Lists</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="response_id">0</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <placeholder/>
+                                    <property name="spacing">0</property>
+                                    <child>
+                                      <widget class="GtkButton" id="publicHubsAddButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label">gtk-add</property>
+                                        <property name="use_stock">True</property>
+                                        <property name="response_id">0</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkButton" id="publicHubsUpButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label">gtk-go-up</property>
+                                        <property name="use_stock">True</property>
+                                        <property name="response_id">0</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkButton" id="publicHubsDownButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label">gtk-go-down</property>
+                                        <property name="use_stock">True</property>
+                                        <property name="response_id">0</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkButton" id="publicHubsRemoveButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label">gtk-remove</property>
+                                        <property name="use_stock">True</property>
+                                        <property name="response_id">0</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">3</property>
+                                      </packing>
                                     </child>
                                   </widget>
                                   <packing>
                                     <property name="expand">False</property>
-                                    <property name="fill">False</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
                               </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                              </packing>
                             </child>
                             <child>
-                              <widget class="GtkVBox" id="vbox9">
+                              <widget class="GtkHBox" id="httpProxyHBox">
                                 <property name="visible">True</property>
                                 <child>
                                   <widget class="GtkLabel" id="label29">
                                     <property name="visible">True</property>
                                     <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">HTTP Proxy (for hublist only)</property>
+                                    <property name="label" translatable="yes">_HTTP proxy:</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="mnemonic_widget">proxyEntry</property>
                                   </widget>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1038,9 +1091,10 @@
                                     <property name="can_focus">True</property>
                                   </widget>
                                   <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
+                                    <property name="padding">15</property>
                                   </packing>
                                 </child>
                               </widget>
@@ -1053,7 +1107,7 @@
                         <child>
                           <widget class="GtkLabel" id="label27">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Public Hubs list&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Public Hubs List&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
                           </widget>
                           <packing>
@@ -1159,8 +1213,10 @@
                     <child>
                       <widget class="GtkLabel" id="label32">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Favorite download to directories&lt;/b&gt;</property>
+                        <property name="label" translatable="yes">&lt;b&gt;_Favorite Download Directories&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">favoriteTreeView</property>
                       </widget>
                       <packing>
                         <property name="type">label_item</property>
@@ -1174,7 +1230,7 @@
                 <child>
                   <widget class="GtkLabel" id="label30">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes">Download to</property>
+                    <property name="label" translatable="yes">Favorite Downloads</property>
                   </widget>
                   <packing>
                     <property name="type">tab</property>
@@ -1195,16 +1251,10 @@
                             <property name="visible">True</property>
                             <property name="border_width">4</property>
                             <property name="n_rows">2</property>
-                            <property name="n_columns">7</property>
-                            <property name="column_spacing">4</property>
+                            <property name="n_columns">6</property>
+                            <property name="column_spacing">10</property>
                             <property name="row_spacing">4</property>
                             <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
                               <widget class="GtkSpinButton" id="priorityHighestSpinButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
@@ -1226,8 +1276,8 @@
                                 <property name="climb_rate">1</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">5</property>
-                                <property name="right_attach">6</property>
+                                <property name="left_attach">4</property>
+                                <property name="right_attach">5</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options"></property>
@@ -1242,8 +1292,8 @@
                                 <property name="climb_rate">1</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">5</property>
-                                <property name="right_attach">6</property>
+                                <property name="left_attach">4</property>
+                                <property name="right_attach">5</property>
                                 <property name="x_options"></property>
                                 <property name="y_options"></property>
                               </packing>
@@ -1252,11 +1302,13 @@
                               <widget class="GtkLabel" id="label183">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">High priority max size</property>
+                                <property name="label" translatable="yes">_High priority max size:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">priorityHighSpinButton</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">4</property>
-                                <property name="right_attach">5</property>
+                                <property name="left_attach">3</property>
+                                <property name="right_attach">4</property>
                                 <property name="x_options">GTK_FILL</property>
                                 <property name="y_options"></property>
                               </packing>
@@ -1265,11 +1317,13 @@
                               <widget class="GtkLabel" id="label184">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Low priority size</property>
+                                <property name="label" translatable="yes">_Low priority max size:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">priorityLowSpinButton</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">4</property>
-                                <property name="right_attach">5</property>
+                                <property name="left_attach">3</property>
+                                <property name="right_attach">4</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options">GTK_FILL</property>
@@ -1283,8 +1337,8 @@
                                 <property name="label" translatable="yes">KiB</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">6</property>
-                                <property name="right_attach">7</property>
+                                <property name="left_attach">5</property>
+                                <property name="right_attach">6</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options">GTK_FILL</property>
@@ -1298,8 +1352,8 @@
                                 <property name="label" translatable="yes">KiB</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">6</property>
-                                <property name="right_attach">7</property>
+                                <property name="left_attach">5</property>
+                                <property name="right_attach">6</property>
                                 <property name="x_options">GTK_FILL</property>
                                 <property name="y_options"></property>
                               </packing>
@@ -1352,7 +1406,9 @@
                               <widget class="GtkLabel" id="label177">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Normal priority max size</property>
+                                <property name="label" translatable="yes">_Normal priority max size:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">priorityNormalSpinButton</property>
                               </widget>
                               <packing>
                                 <property name="top_attach">1</property>
@@ -1365,7 +1421,9 @@
                               <widget class="GtkLabel" id="label176">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Highest priority max size</property>
+                                <property name="label" translatable="yes">Highes_t priority max size:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">priorityHighestSpinButton</property>
                               </widget>
                               <packing>
                                 <property name="x_options">GTK_FILL</property>
@@ -1377,7 +1435,7 @@
                         <child>
                           <widget class="GtkLabel" id="label173">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Auto-priority settings&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Auto-Priority&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
                           </widget>
                           <packing>
@@ -1399,22 +1457,10 @@
                             <property name="visible">True</property>
                             <property name="border_width">4</property>
                             <property name="n_rows">3</property>
-                            <property name="n_columns">7</property>
-                            <property name="column_spacing">4</property>
+                            <property name="n_columns">6</property>
+                            <property name="column_spacing">10</property>
                             <property name="row_spacing">4</property>
                             <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
                               <widget class="GtkSpinButton" id="dropMinSourcesSpinButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
@@ -1454,8 +1500,8 @@
                                 <property name="climb_rate">1</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">5</property>
-                                <property name="right_attach">6</property>
+                                <property name="left_attach">4</property>
+                                <property name="right_attach">5</property>
                                 <property name="x_options"></property>
                                 <property name="y_options"></property>
                               </packing>
@@ -1468,8 +1514,8 @@
                                 <property name="climb_rate">1</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">5</property>
-                                <property name="right_attach">6</property>
+                                <property name="left_attach">4</property>
+                                <property name="right_attach">5</property>
                                 <property name="top_attach">2</property>
                                 <property name="bottom_attach">3</property>
                                 <property name="x_options"></property>
@@ -1484,8 +1530,8 @@
                                 <property name="climb_rate">1</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">5</property>
-                                <property name="right_attach">6</property>
+                                <property name="left_attach">4</property>
+                                <property name="right_attach">5</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options"></property>
@@ -1496,11 +1542,13 @@
                               <widget class="GtkLabel" id="label194">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Min filesize</property>
+                                <property name="label" translatable="yes">Min _file size:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">dropSizeSpinButton</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">4</property>
-                                <property name="right_attach">5</property>
+                                <property name="left_attach">3</property>
+                                <property name="right_attach">4</property>
                                 <property name="top_attach">2</property>
                                 <property name="bottom_attach">3</property>
                                 <property name="x_options">GTK_FILL</property>
@@ -1511,11 +1559,13 @@
                               <widget class="GtkLabel" id="label193">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Max inactivity</property>
+                                <property name="label" translatable="yes">Max _inactivity:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">dropInactiveSpinButton</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">4</property>
-                                <property name="right_attach">5</property>
+                                <property name="left_attach">3</property>
+                                <property name="right_attach">4</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options">GTK_FILL</property>
@@ -1526,11 +1576,13 @@
                               <widget class="GtkLabel" id="label192">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Check every</property>
+                                <property name="label" translatable="yes">Chec_k every:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">dropCheckSpinButton</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">4</property>
-                                <property name="right_attach">5</property>
+                                <property name="left_attach">3</property>
+                                <property name="right_attach">4</property>
                                 <property name="x_options">GTK_FILL</property>
                                 <property name="y_options"></property>
                               </packing>
@@ -1542,8 +1594,8 @@
                                 <property name="label" translatable="yes">KiB</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">6</property>
-                                <property name="right_attach">7</property>
+                                <property name="left_attach">5</property>
+                                <property name="right_attach">6</property>
                                 <property name="top_attach">2</property>
                                 <property name="bottom_attach">3</property>
                                 <property name="x_options">GTK_FILL</property>
@@ -1557,8 +1609,8 @@
                                 <property name="label" translatable="yes">s</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">6</property>
-                                <property name="right_attach">7</property>
+                                <property name="left_attach">5</property>
+                                <property name="right_attach">6</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options">GTK_FILL</property>
@@ -1572,8 +1624,8 @@
                                 <property name="label" translatable="yes">s</property>
                               </widget>
                               <packing>
-                                <property name="left_attach">6</property>
-                                <property name="right_attach">7</property>
+                                <property name="left_attach">5</property>
+                                <property name="right_attach">6</property>
                                 <property name="x_options">GTK_FILL</property>
                                 <property name="y_options"></property>
                               </packing>
@@ -1624,7 +1676,9 @@
                               <widget class="GtkLabel" id="label180">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Min sources online</property>
+                                <property name="label" translatable="yes">Min _sources online:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">dropMinSourcesSpinButton</property>
                               </widget>
                               <packing>
                                 <property name="top_attach">2</property>
@@ -1637,7 +1691,9 @@
                               <widget class="GtkLabel" id="label179">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Min elapsed</property>
+                                <property name="label" translatable="yes">Min _elapsed:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">dropElapsedSpinButton</property>
                               </widget>
                               <packing>
                                 <property name="top_attach">1</property>
@@ -1650,7 +1706,9 @@
                               <widget class="GtkLabel" id="label178">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Drop sources below</property>
+                                <property name="label" translatable="yes">_Drop sources below:</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">dropSpeedSpinButton</property>
                               </widget>
                               <packing>
                                 <property name="x_options">GTK_FILL</property>
@@ -1662,7 +1720,7 @@
                         <child>
                           <widget class="GtkLabel" id="label174">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Auto-drop settings&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Auto-Drop&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
                           </widget>
                           <packing>
@@ -1700,8 +1758,10 @@
                         <child>
                           <widget class="GtkLabel" id="label175">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Other queue options&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;O_ptions&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">queueOtherTreeView</property>
                           </widget>
                           <packing>
                             <property name="type">label_item</property>
@@ -1775,91 +1835,53 @@
                           </widget>
                         </child>
                         <child>
-                          <widget class="GtkLabel" id="label34">
-                            <property name="visible">True</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Note: New files are added to the share only once they've been hashed!</property>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
                           <widget class="GtkHBox" id="hbox5">
                             <property name="visible">True</property>
                             <child>
                               <widget class="GtkLabel" id="sharedSizeLabel">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Total size: 0 B</property>
+                                <property name="label" translatable="yes">Total size: %1%</property>
                               </widget>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
                             </child>
                             <child>
-                              <widget class="GtkHBox" id="hbox6">
+                              <widget class="GtkButton" id="sharedAddButton">
                                 <property name="visible">True</property>
-                                <property name="spacing">4</property>
-                                <child>
-                                  <widget class="GtkCheckButton" id="shareHiddenCheckButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label" translatable="yes">Share hidden files</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="response_id">0</property>
-                                    <property name="draw_indicator">True</property>
-                                  </widget>
-                                </child>
-                                <child>
-                                  <widget class="GtkCheckButton" id="followLinksCheckButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label" translatable="yes">Follow Links</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="response_id">0</property>
-                                    <property name="draw_indicator">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkButton" id="sharedAddButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label">gtk-add</property>
-                                    <property name="use_stock">True</property>
-                                    <property name="response_id">0</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">2</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkButton" id="sharedRemoveButton">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label">gtk-remove</property>
-                                    <property name="use_stock">True</property>
-                                    <property name="response_id">0</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">3</property>
-                                  </packing>
-                                </child>
+                                <property name="can_focus">True</property>
+                                <property name="label">gtk-add</property>
+                                <property name="use_stock">True</property>
+                                <property name="response_id">0</property>
                               </widget>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
+                            <child>
+                              <widget class="GtkButton" id="sharedRemoveButton">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="label">gtk-remove</property>
+                                <property name="use_stock">True</property>
+                                <property name="response_id">0</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
-                            <property name="position">2</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
                           </packing>
                         </child>
                       </widget>
@@ -1867,7 +1889,7 @@
                     <child>
                       <widget class="GtkLabel" id="label33">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Shared directories&lt;/b&gt;</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Shared Directories&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </widget>
                       <packing>
@@ -1879,12 +1901,39 @@
                 <child>
                   <widget class="GtkTable" id="table6">
                     <property name="visible">True</property>
-                    <property name="n_rows">2</property>
+                    <property name="n_rows">4</property>
                     <property name="n_columns">3</property>
-                    <property name="column_spacing">4</property>
+                    <property name="column_spacing">10</property>
                     <property name="row_spacing">4</property>
                     <child>
-                      <placeholder/>
+                      <widget class="GtkCheckButton" id="followLinksCheckButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="label" translatable="yes">_Follow links</property>
+                        <property name="use_underline">True</property>
+                        <property name="response_id">0</property>
+                        <property name="draw_indicator">True</property>
+                      </widget>
+                      <packing>
+                        <property name="x_options">GTK_FILL</property>
+                        <property name="y_options"></property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkCheckButton" id="shareHiddenCheckButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="label" translatable="yes">_Share hidden files</property>
+                        <property name="use_underline">True</property>
+                        <property name="response_id">0</property>
+                        <property name="draw_indicator">True</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_FILL</property>
+                        <property name="y_options"></property>
+                      </packing>
                     </child>
                     <child>
                       <widget class="GtkSpinButton" id="sharedUploadSlotsSpinButton">
@@ -1896,8 +1945,8 @@
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
                         <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
@@ -1905,12 +1954,14 @@
                     <child>
                       <widget class="GtkLabel" id="label38">
                         <property name="visible">True</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">Upload slots</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">_Upload slots:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">sharedUploadSlotsSpinButton</property>
                       </widget>
                       <packing>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
                         <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
@@ -1922,6 +1973,8 @@
                         <property name="label" translatable="yes">KiB/s</property>
                       </widget>
                       <packing>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
                         <property name="left_attach">2</property>
                         <property name="right_attach">3</property>
                         <property name="x_options">GTK_FILL</property>
@@ -1934,8 +1987,11 @@
                         <property name="can_focus">True</property>
                         <property name="adjustment">0 0 10000 1 10 0</property>
                         <property name="climb_rate">1</property>
+                        <property name="tooltip_text" translatable="yes">A value of '0' will disable this option</property>
                       </widget>
                       <packing>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
                         <property name="x_options">GTK_FILL</property>
@@ -1945,10 +2001,15 @@
                     <child>
                       <widget class="GtkLabel" id="label36">
                         <property name="visible">True</property>
-                        <property name="xalign">1</property>
-                        <property name="label" translatable="yes">Automatically open extra slot if speed is below (0 = disable)</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Automatically open _extra slot if speed is below:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">sharedExtraSlotSpinButton</property>
                       </widget>
                       <packing>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
+                        <property name="x_options">GTK_FILL</property>
                         <property name="y_options"></property>
                       </packing>
                     </child>
@@ -2011,8 +2072,10 @@
                             <child>
                               <widget class="GtkLabel" id="label200">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">&lt;b&gt;Options&lt;/b&gt;</property>
+                                <property name="label" translatable="yes">&lt;b&gt;O_ptions&lt;/b&gt;</property>
                                 <property name="use_markup">True</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">appearanceOptionsTreeView</property>
                               </widget>
                               <packing>
                                 <property name="type">label_item</property>
@@ -2023,184 +2086,151 @@
                       </widget>
                     </child>
                     <child>
-                      <widget class="GtkHBox" id="hbox4">
+                      <widget class="GtkTable" id="table4">
                         <property name="visible">True</property>
-                        <child>
-                          <widget class="GtkFrame" id="frame9">
-                            <property name="visible">True</property>
-                            <property name="label_xalign">0</property>
-                            <child>
-                              <widget class="GtkAlignment" id="alignment6">
-                                <property name="visible">True</property>
-                                <property name="bottom_padding">5</property>
-                                <property name="left_padding">12</property>
-                                <child>
-                                  <widget class="GtkHBox" id="tabPositionHBox">
-                                    <property name="visible">True</property>
-                                    <child>
-                                      <widget class="GtkComboBox" id="tabPositionComboBox">
-                                        <property name="visible">True</property>
-                                        <property name="items" translatable="yes">Top
-Left
-Right
-Bottom</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                      </packing>
-                                    </child>
-                                  </widget>
-                                </child>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label16">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">&lt;b&gt;Tab Position&lt;/b&gt;</property>
-                                <property name="use_markup">True</property>
-                              </widget>
-                              <packing>
-                                <property name="type">label_item</property>
-                              </packing>
-                            </child>
-                          </widget>
-                        </child>
-                        <child>
-                          <widget class="GtkFrame" id="frame10">
-                            <property name="visible">True</property>
-                            <property name="label_xalign">0</property>
-                            <child>
-                              <widget class="GtkAlignment" id="alignment7">
-                                <property name="visible">True</property>
-                                <property name="bottom_padding">5</property>
-                                <property name="left_padding">12</property>
-                                <child>
-                                  <widget class="GtkHBox" id="toolbarStyleHBox">
-                                    <property name="visible">True</property>
-                                    <child>
-                                      <widget class="GtkComboBox" id="toolbarStyleComboBox">
-                                        <property name="visible">True</property>
-                                        <property name="items" translatable="yes">Icons
+                        <property name="n_rows">4</property>
+                        <property name="n_columns">2</property>
+                        <property name="column_spacing">15</property>
+                        <property name="row_spacing">4</property>
+                        <child>
+                          <widget class="GtkLabel" id="label43">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_Default away message:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">awayMessageEntry</property>
+                          </widget>
+                          <packing>
+                            <property name="top_attach">3</property>
+                            <property name="bottom_attach">4</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options"></property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkEntry" id="awayMessageEntry">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">&#x25CF;</property>
+                          </widget>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">3</property>
+                            <property name="bottom_attach">4</property>
+                            <property name="y_options"></property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkLabel" id="label44">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Timestamp _format:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">timestampEntry</property>
+                          </widget>
+                          <packing>
+                            <property name="top_attach">2</property>
+                            <property name="bottom_attach">3</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options"></property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkEntry" id="timestampEntry">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">&#x25CF;</property>
+                          </widget>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">2</property>
+                            <property name="bottom_attach">3</property>
+                            <property name="y_options"></property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkLabel" id="label17">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_Main toolbar style:</property>
+                            <property name="mnemonic_widget">toolbarStyleComboBox</property>
+                            <property name="use_underline">True</property>
+                          </widget>
+                          <packing>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options"></property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkLabel" id="label16">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">_Tab position:</property>
+                            <property name="mnemonic_widget">tabPositionComboBox</property>
+                            <property name="use_underline">True</property>
+                          </widget>
+                          <packing>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options"></property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkAspectFrame" id="aspectframe2">
+                            <property name="visible">True</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
+                            <property name="xalign">0</property>
+                            <child>
+                              <widget class="GtkComboBox" id="toolbarStyleComboBox">
+                                <property name="visible">True</property>
+                                <property name="items" translatable="yes">Icons
 Text
 Both
 Both horizontal
 Hidden
 System default</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                      </packing>
-                                    </child>
-                                  </widget>
-                                </child>
                               </widget>
                             </child>
+                          </widget>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                            <property name="y_options">GTK_FILL</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkAspectFrame" id="aspectframe1">
+                            <property name="visible">True</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
+                            <property name="xalign">0</property>
                             <child>
-                              <widget class="GtkLabel" id="label17">
+                              <widget class="GtkComboBox" id="tabPositionComboBox">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">&lt;b&gt;Main Toolbar Style&lt;/b&gt;</property>
-                                <property name="use_markup">True</property>
+                                <property name="items" translatable="yes">Top
+Left
+Right
+Bottom</property>
                               </widget>
-                              <packing>
-                                <property name="type">label_item</property>
-                              </packing>
                             </child>
                           </widget>
                           <packing>
-                            <property name="position">1</property>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                       </widget>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
-                    <child>
-                      <widget class="GtkHBox" id="hbox18">
-                        <property name="visible">True</property>
-                        <child>
-                          <widget class="GtkFrame" id="frame12">
-                            <property name="visible">True</property>
-                            <property name="label_xalign">0</property>
-                            <child>
-                              <widget class="GtkHBox" id="hbox8">
-                                <property name="visible">True</property>
-                                <property name="border_width">8</property>
-                                <child>
-                                  <widget class="GtkEntry" id="awayMessageEntry">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                  </widget>
-                                </child>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label43">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">&lt;b&gt;Default away message&lt;/b&gt;</property>
-                                <property name="use_markup">True</property>
-                              </widget>
-                              <packing>
-                                <property name="type">label_item</property>
-                              </packing>
-                            </child>
-                          </widget>
-                        </child>
-                        <child>
-                          <widget class="GtkFrame" id="frame13">
-                            <property name="visible">True</property>
-                            <property name="label_xalign">0</property>
-                            <child>
-                              <widget class="GtkHBox" id="hbox9">
-                                <property name="visible">True</property>
-                                <property name="border_width">8</property>
-                                <child>
-                                  <widget class="GtkEntry" id="timestampEntry">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                  </widget>
-                                </child>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label44">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">&lt;b&gt;Timestamps&lt;/b&gt;</property>
-                                <property name="use_markup">True</property>
-                              </widget>
-                              <packing>
-                                <property name="type">label_item</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkLabel" id="label45">
-                        <property name="visible">True</property>
-                        <property name="xalign">0</property>
-                        <property name="yalign">0</property>
-                        <property name="label" translatable="yes">Note: Most of these options require that you restart the application</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
                   </widget>
                 </child>
                 <child>
@@ -2220,6 +2250,7 @@
                     <child>
                       <widget class="GtkFrame" id="frame45">
                         <property name="visible">True</property>
+                        <property name="sensitive">False</property>
                         <property name="label_xalign">0</property>
                         <child>
                           <widget class="GtkTable" id="table23">
@@ -2233,7 +2264,7 @@
                               <widget class="GtkButton" id="upColor">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Uploads</property>
+                                <property name="label" translatable="yes">_Uploads</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                               </widget>
@@ -2248,7 +2279,7 @@
                               <widget class="GtkButton" id="downColor">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Downloads</property>
+                                <property name="label" translatable="yes">_Downloads</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                               </widget>
@@ -2265,7 +2296,7 @@
                               <widget class="GtkButton" id="textStyle">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Select text style</property>
+                                <property name="label" translatable="yes">Select _text style</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                               </widget>
@@ -2280,7 +2311,7 @@
                               <widget class="GtkButton" id="appearanceColor">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Select window color</property>
+                                <property name="label" translatable="yes">Select window _color</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                               </widget>
@@ -2310,6 +2341,7 @@
                     <child>
                       <widget class="GtkFrame" id="frame46">
                         <property name="visible">True</property>
+                        <property name="sensitive">False</property>
                         <property name="label_xalign">0</property>
                         <child>
                           <widget class="GtkVBox" id="vbox21">
@@ -2320,7 +2352,7 @@
                               <widget class="GtkCheckButton" id="soundPMReceivedCheckButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Beep every time a private message is received</property>
+                                <property name="label" translatable="yes">_Beep every time a private message is received</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                                 <property name="draw_indicator">True</property>
@@ -2334,7 +2366,7 @@
                               <widget class="GtkCheckButton" id="soundPMWindowCheckButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Beep when a private message window is opened</property>
+                                <property name="label" translatable="yes">B_eep when a private message window is opened</property>
                                 <property name="use_underline">True</property>
                                 <property name="response_id">0</property>
                                 <property name="draw_indicator">True</property>
@@ -2387,8 +2419,10 @@
                         <child>
                           <widget class="GtkLabel" id="label206">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Tab bolding on content change&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;_Notifications&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">tabBoldingTreeView</property>
                           </widget>
                           <packing>
                             <property name="type">label_item</property>
@@ -2399,19 +2433,6 @@
                         <property name="position">2</property>
                       </packing>
                     </child>
-                    <child>
-                      <widget class="GtkLabel" id="label207">
-                        <property name="visible">True</property>
-                        <property name="xalign">0</property>
-                        <property name="yalign">0</property>
-                        <property name="label" translatable="yes">Note: Most of these options require that you restart the application</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
                   </widget>
                   <packing>
                     <property name="position">1</property>
@@ -2461,8 +2482,10 @@
                         <child>
                           <widget class="GtkLabel" id="label201">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Auto-open on startup&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;_Auto-Open on Startup&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">windowsAutoOpenTreeView</property>
                           </widget>
                           <packing>
                             <property name="type">label_item</property>
@@ -2499,8 +2522,10 @@
                         <child>
                           <widget class="GtkLabel" id="label202">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Window Options&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;_Window Behavior&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">windowsOptionsTreeView</property>
                           </widget>
                           <packing>
                             <property name="type">label_item</property>
@@ -2540,8 +2565,10 @@
                         <child>
                           <widget class="GtkLabel" id="label203">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Confirmation Dialog Options&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Confirmation _Dialog&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">windowsConfirmTreeView</property>
                           </widget>
                           <packing>
                             <property name="type">label_item</property>
@@ -2560,7 +2587,7 @@
                 <child>
                   <widget class="GtkLabel" id="label198">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes">Tabs</property>
+                    <property name="label" translatable="yes">Window</property>
                   </widget>
                   <packing>
                     <property name="type">tab</property>
@@ -2594,267 +2621,224 @@
                     <property name="visible">True</property>
                     <property name="label_xalign">0</property>
                     <child>
-                      <widget class="GtkVBox" id="vbox20">
+                      <widget class="GtkTable" id="logTable">
                         <property name="visible">True</property>
-                        <property name="border_width">8</property>
-                        <property name="spacing">4</property>
-                        <child>
-                          <widget class="GtkHBox" id="hbox10">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <child>
-                              <widget class="GtkLabel" id="label47">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Directory</property>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkEntry" id="logDirectoryEntry">
-                                <property name="width_request">226</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                              </widget>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkButton" id="logBrowseButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="label" translatable="yes">Browse...</property>
-                                <property name="use_underline">True</property>
-                                <property name="response_id">0</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
+                        <property name="n_rows">8</property>
+                        <property name="n_columns">2</property>
+                        <property name="column_spacing">15</property>
+                        <property name="row_spacing">20</property>
+                        <child>
+                          <widget class="GtkLabel" id="outputDirectoryLabel">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Ou_tput directory:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">logDirectoryFileChooserButton</property>
+                          </widget>
+                          <packing>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkFileChooserButton" id="logDirectoryFileChooserButton">
+                            <property name="visible">True</property>
+                            <property name="show_hidden">True</property>
+                            <property name="local_only">False</property>
+                            <property name="action">select-folder</property>
+                            <property name="title" translatable="yes">Select a Folder</property>
+                          </widget>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <widget class="GtkCheckButton" id="logMainCheckButton">
+                            <property name="label" translatable="yes">_Main chat format:</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Log main chat</property>
+                            <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
                           </widget>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkHBox" id="hbox11">
+                          <widget class="GtkEntry" id="logMainEntry">
+                            <property name="width_request">270</property>
                             <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <child>
-                              <widget class="GtkLabel" id="logMainLabel">
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Format</property>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkEntry" id="logMainEntry">
-                                <property name="width_request">270</property>
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="can_focus">True</property>
-                              </widget>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="sensitive">False</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">&#x25CF;</property>
                           </widget>
                           <packing>
-                            <property name="position">2</property>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">1</property>
+                            <property name="bottom_attach">2</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <widget class="GtkCheckButton" id="logPrivateCheckButton">
+                            <property name="label" translatable="yes">_Private chat format:</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Log private chat</property>
+                            <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
                           </widget>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">3</property>
+                            <property name="top_attach">2</property>
+                            <property name="bottom_attach">3</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkHBox" id="hbox12">
+                          <widget class="GtkEntry" id="logPrivateEntry">
+                            <property name="width_request">270</property>
                             <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <child>
-                              <widget class="GtkLabel" id="logPrivateLabel">
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Format</property>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkEntry" id="logPrivateEntry">
-                                <property name="width_request">270</property>
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="can_focus">True</property>
-                              </widget>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="sensitive">False</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">&#x25CF;</property>
                           </widget>
                           <packing>
-                            <property name="position">4</property>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">2</property>
+                            <property name="bottom_attach">3</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <widget class="GtkCheckButton" id="logDownloadsCheckButton">
+                            <property name="label" translatable="yes">_Download format:</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Log downloads</property>
+                            <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
                           </widget>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">5</property>
+                            <property name="top_attach">3</property>
+                            <property name="bottom_attach">4</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkHBox" id="hbox13">
+                          <widget class="GtkEntry" id="logDownloadsEntry">
+                            <property name="width_request">270</property>
                             <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <child>
-                              <widget class="GtkLabel" id="logDownloadsLabel">
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Format</property>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkEntry" id="logDownloadsEntry">
-                                <property name="width_request">270</property>
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="can_focus">True</property>
-                              </widget>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="sensitive">False</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">&#x25CF;</property>
                           </widget>
                           <packing>
-                            <property name="position">6</property>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">3</property>
+                            <property name="bottom_attach">4</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <widget class="GtkCheckButton" id="logUploadsCheckButton">
+                            <property name="label" translatable="yes">_Upload format:</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Log uploads</property>
+                            <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
                           </widget>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">7</property>
+                            <property name="top_attach">4</property>
+                            <property name="bottom_attach">5</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkHBox" id="hbox14">
+                          <widget class="GtkEntry" id="logUploadsEntry">
+                            <property name="width_request">270</property>
                             <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <child>
-                              <widget class="GtkLabel" id="logUploadsLabel">
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Format</property>
-                              </widget>
-                            </child>
-                            <child>
-                              <widget class="GtkEntry" id="logUploadsEntry">
-                                <property name="width_request">270</property>
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="can_focus">True</property>
-                              </widget>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="sensitive">False</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">&#x25CF;</property>
                           </widget>
                           <packing>
-                            <property name="position">8</property>
+                            <property name="left_attach">1</property>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">4</property>
+                            <property name="bottom_attach">5</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <widget class="GtkCheckButton" id="logSystemCheckButton">
+                            <property name="label" translatable="yes">_System messages</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Log system messages</property>
+                            <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
                           </widget>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">9</property>
+                            <property name="top_attach">5</property>
+                            <property name="bottom_attach">6</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <widget class="GtkCheckButton" id="logStatusCheckButton">
+                            <property name="label" translatable="yes">St_atus messages</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Log status messages</property>
+                            <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
                           </widget>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">10</property>
+                            <property name="top_attach">6</property>
+                            <property name="bottom_attach">7</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <widget class="GtkCheckButton" id="logFilelistTransfersCheckButton">
+                            <property name="label" translatable="yes">_File list transfers</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label" translatable="yes">Log filelist transfers</property>
+                            <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <property name="response_id">0</property>
                             <property name="draw_indicator">True</property>
                           </widget>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">11</property>
+                            <property name="top_attach">7</property>
+                            <property name="bottom_attach">8</property>
+                            <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
                       </widget>
                     </child>
                     <child>
@@ -2877,7 +2861,7 @@
             <child>
               <widget class="GtkLabel" id="label5">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">Logs</property>
+                <property name="label" translatable="yes">Logging</property>
               </widget>
               <packing>
                 <property name="type">tab</property>
@@ -3039,480 +3023,445 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkVBox" id="vbox56">
+                  <widget class="GtkTable" id="expertsOnlyTable">
                     <property name="visible">True</property>
-                    <property name="border_width">8</property>
-                    <property name="spacing">4</property>
-                    <child>
-                      <widget class="GtkHBox" id="hbox19">
-                        <property name="visible">True</property>
-                        <property name="spacing">4</property>
-                        <child>
-                          <widget class="GtkVBox" id="vbox61">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <widget class="GtkLabel" id="label157">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Max hash speed</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label158">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">PM history</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label159">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Mini slot size</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label160">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Max filelist size</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label161">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">CID</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkVBox" id="vbox62">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <widget class="GtkSpinButton" id="hashSpeedSpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">0 0 102400 1 64 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkSpinButton" id="pmHistorySpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">10 0 100 1 10 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkSpinButton" id="slotSizeSpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">64 0 10240 1 10 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkSpinButton" id="maxListSizeSpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">0 0 1000 1 10 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkEntry" id="CIDEntry">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkVBox" id="vbox63">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <widget class="GtkLabel" id="label154">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">MiB/s</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label208">
-                                <property name="visible">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label168">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">KiB</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label169">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">MiB</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label209">
-                                <property name="visible">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkVBox" id="vbox64">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <widget class="GtkLabel" id="label156">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Write buffer size</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label166">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Search history</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label165">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Bind address</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label164">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Socket read buffer</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label163">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Socket write buffer</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label162">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Auto refresh time</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                         </widget>
-                          <packing>
-                            <property name="position">3</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkVBox" id="vbox65">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <widget class="GtkSpinButton" id="writeBufferSpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">0 0 1024 64 10 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkSpinButton" id="searchHistorySpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">10 0 100 1 10 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkEntry" id="bindAddressEntry">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkSpinButton" id="socketReadSpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">0 0 102400 1 64 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkSpinButton" id="socketWriteSpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">0 0 102400 1 64 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkSpinButton" id="autoRefreshSpinButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="adjustment">1 0 100 1 10 0</property>
-                                <property name="climb_rate">1</property>
-                                <property name="numeric">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">4</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkVBox" id="vbox66">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <widget class="GtkLabel" id="label155">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">KiB</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label14">
-                                <property name="visible">True</property>
-                              </widget>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label213">
-                                <property name="visible">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label170">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">B</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label171">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">B</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label210">
-                                <property name="visible">True</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                     	</widget>
-                          <packing>
-                            <property name="position">5</property>
-                          </packing>
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                      </packing>
+                    <property name="n_rows">11</property>
+                    <property name="n_columns">3</property>
+                    <property name="column_spacing">10</property>
+                    <child>
+                      <widget class="GtkLabel" id="autoRefreshLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Auto refresh _time:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">autoRefreshSpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="autoRefreshSpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">1 0 100 1 10 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label167">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">s</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="bindAddressLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">_Bind address:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">bindAddressEntry</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkEntry" id="bindAddressEntry">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="cidLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">CI_D:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">CIDEntry</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkEntry" id="CIDEntry">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="maxListSizeLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Maximum _file list size:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">maxListSizeSpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="maxListSizeSpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">0 0 1000 1 10 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label169">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">MiB</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="hashSpeedLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Maximum _hash speed:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">hashSpeedSpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">4</property>
+                        <property name="bottom_attach">5</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="hashSpeedSpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">0 0 102400 1 64 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">4</property>
+                        <property name="bottom_attach">5</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label154">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">MiB/s</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="top_attach">4</property>
+                        <property name="bottom_attach">5</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="slotSizeLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">_Mini slot size:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">slotSizeSpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">5</property>
+                        <property name="bottom_attach">6</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="slotSizeSpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">64 0 10240 1 10 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">5</property>
+                        <property name="bottom_attach">6</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label168">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">KiB</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="top_attach">5</property>
+                        <property name="bottom_attach">6</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="pmHistoryLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">_Private message history:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">pmHistorySpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">6</property>
+                        <property name="bottom_attach">7</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="pmHistorySpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">10 0 100 1 10 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">6</property>
+                        <property name="bottom_attach">7</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="searchHistoryLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">_Search history:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">searchHistorySpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">7</property>
+                        <property name="bottom_attach">8</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="searchHistorySpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">10 0 100 1 10 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">7</property>
+                        <property name="bottom_attach">8</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="socketReadLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Socket _read buffer:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">socketReadSpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">8</property>
+                        <property name="bottom_attach">9</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="socketReadSpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">0 0 102400 1 64 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">8</property>
+                        <property name="bottom_attach">9</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label170">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">B</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="top_attach">8</property>
+                        <property name="bottom_attach">9</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="socketWriteLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Socket _write buffer:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">socketWriteSpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">9</property>
+                        <property name="bottom_attach">10</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="socketWriteSpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">0 0 102400 1 64 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">9</property>
+                        <property name="bottom_attach">10</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label171">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">B</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="top_attach">9</property>
+                        <property name="bottom_attach">10</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="writeBufferLabel">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Wr_ite buffer size:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">writeBufferSpinButton</property>
+                      </widget>
+                      <packing>
+                        <property name="top_attach">10</property>
+                        <property name="bottom_attach">11</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="writeBufferSpinButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                        <property name="adjustment">0 0 1024 64 10 0</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">10</property>
+                        <property name="bottom_attach">11</property>
+                        <property name="x_options">GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label155">
+                        <property name="visible">True</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">KiB</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="top_attach">10</property>
+                        <property name="bottom_attach">11</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
                     </child>
                   </widget>
                   <packing>
@@ -3540,124 +3489,100 @@
                         <child>
                           <widget class="GtkAlignment" id="alignment4">
                             <property name="visible">True</property>
-                            <property name="left_padding">12</property>
+                            <property name="left_padding">8</property>
                             <child>
                               <widget class="GtkTable" id="table2">
                                 <property name="visible">True</property>
                                 <property name="n_rows">3</property>
-                                <property name="n_columns">3</property>
-                                <child>
-                                  <widget class="GtkButton" id="trustedCertificatesPathButton">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Browse...</property>
-                                    <property name="response_id">0</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">2</property>
-                                    <property name="right_attach">3</property>
-                                    <property name="top_attach">2</property>
-                                    <property name="bottom_attach">3</property>
-                                    <property name="x_options"></property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkButton" id="certificateFileButton">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Browse...</property>
-                                    <property name="response_id">0</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">2</property>
-                                    <property name="right_attach">3</property>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
-                                    <property name="x_options"></property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkButton" id="privateKeyButton">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Browse...</property>
-                                    <property name="response_id">0</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">2</property>
-                                    <property name="right_attach">3</property>
-                                    <property name="x_options"></property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkEntry" id="trustedCertificatesPathEntry">
-                                    <property name="visible">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
-                                    <property name="top_attach">2</property>
-                                    <property name="bottom_attach">3</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkEntry" id="certificateFileEntry">
-                                    <property name="visible">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkEntry" id="privateKeyEntry">
-                                    <property name="visible">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
+                                <property name="n_columns">2</property>
+                                <property name="column_spacing">15</property>
+                                <property name="row_spacing">5</property>
+                                <child>
+                                  <widget class="GtkLabel" id="privateKeyLabel">
+                                    <property name="visible">True</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">_Private key file:</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="mnemonic_widget">privateKeyFileChooserButton</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="x_options">GTK_FILL</property>
+                                    <property name="y_options"></property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkFileChooserButton" id="privateKeyFileChooserButton">
+                                    <property name="visible">True</property>
+                                    <property name="local_only">False</property>
+                                    <property name="action">open</property>
+                                    <property name="title" translatable="yes">Select a File</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                    <property name="x_options">GTK_FILL|GTK_EXPAND</property>
+                                    <property name="y_options"></property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkLabel" id="certificateFileLabel">
+                                    <property name="visible">True</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">C_ertificate file:</property>
+                                    <property name="mnemonic_widget">certificateFileChooserButton</property>
+                                    <property name="use_underline">True</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                    <property name="x_options">GTK_FILL</property>
+                                    <property name="y_options"></property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkFileChooserButton" id="certificateFileChooserButton">
+                                    <property name="visible">True</property>
+                                    <property name="local_only">False</property>
+                                    <property name="action">open</property>
+                                    <property name="title" translatable="yes">Select a File</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                    <property name="x_options">GTK_FILL|GTK_EXPAND</property>
+                                    <property name="y_options"></property>
                                   </packing>
                                 </child>
                                 <child>
                                   <widget class="GtkLabel" id="trustedCertificatesPathLabel">
                                     <property name="visible">True</property>
-                                    <property name="xalign">1</property>
-                                    <property name="label" translatable="yes">Trusted certificates path</property>
-                                    <property name="single_line_mode">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="top_attach">2</property>
-                                    <property name="bottom_attach">3</property>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkLabel" id="certificateFileLabel">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">1</property>
-                                    <property name="label" translatable="yes">Certificate file</property>
-                                    <property name="single_line_mode">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options"></property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <widget class="GtkLabel" id="privateKeyLabel">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">1</property>
-                                    <property name="label" translatable="yes">Private key file</property>
-                                    <property name="justify">GTK_JUSTIFY_RIGHT</property>
-                                    <property name="single_line_mode">True</property>
-                                  </widget>
-                                  <packing>
-                                    <property name="x_options">GTK_FILL</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">_Trusted certificates path:</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="mnemonic_widget">trustedCertificatesPathFileChooserButton</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="top_attach">2</property>
+                                    <property name="bottom_attach">3</property>
+                                    <property name="x_options">GTK_FILL</property>
+                                    <property name="y_options"></property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkFileChooserButton" id="trustedCertificatesPathFileChooserButton">
+                                    <property name="visible">True</property>
+                                    <property name="local_only">False</property>
+                                    <property name="action">select-folder</property>
+                                    <property name="title" translatable="yes">Select a Folder</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                    <property name="top_attach">2</property>
+                                    <property name="bottom_attach">3</property>
+                                    <property name="x_options">GTK_FILL|GTK_EXPAND</property>
                                     <property name="y_options"></property>
                                   </packing>
                                 </child>
@@ -3704,8 +3629,10 @@
                         <child>
                           <widget class="GtkLabel" id="otherOptionsLabel">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Other Security Options&lt;/b&gt;</property>
+                            <property name="label" translatable="yes">&lt;b&gt;_Security Options&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">certificatesTreeView</property>
                           </widget>
                           <packing>
                             <property name="type">label_item</property>
@@ -3722,9 +3649,10 @@
                         <child>
                           <widget class="GtkButton" id="generateCertificatesButton">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">Generate certificates</property>
+                            <property name="label" translatable="yes">_Generate certificates</property>
                             <property name="xalign">1</property>
                             <property name="response_id">0</property>
+                            <property name="use_underline">True</property>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -3749,7 +3677,7 @@
                 <child>
                   <widget class="GtkLabel" id="certificates">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes">Security Certificates</property>
+                    <property name="label" translatable="yes">Security</property>
                   </widget>
                   <packing>
                     <property name="type">tab</property>
@@ -3815,139 +3743,8 @@
       </widget>
     </child>
   </widget>
-  <widget class="GtkDialog" id="publicHubsDialog">
-    <property name="width_request">500</property>
-    <property name="height_request">250</property>
-    <property name="title" translatable="yes">Configure hub lists</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="dialog-vbox1">
-        <property name="visible">True</property>
-        <child>
-          <widget class="GtkVBox" id="vbox8">
-            <property name="visible">True</property>
-            <property name="border_width">8</property>
-            <property name="spacing">4</property>
-            <child>
-              <widget class="GtkHBox" id="hbox5">
-                <property name="visible">True</property>
-                <property name="spacing">4</property>
-                <child>
-                  <widget class="GtkTreeView" id="publicHubsDialogTreeView">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                  </widget>
-                </child>
-                <child>
-                  <widget class="GtkVBox" id="vbox6">
-                    <property name="visible">True</property>
-                    <property name="spacing">4</property>
-                    <child>
-                      <widget class="GtkButton" id="publicHubsDialogAddButton">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="label">gtk-add</property>
-                        <property name="use_stock">True</property>
-                        <property name="response_id">0</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkButton" id="publicHubsDialogUpButton">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="label">gtk-go-up</property>
-                        <property name="use_stock">True</property>
-                        <property name="response_id">0</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkButton" id="publicHubsDialogDownButton">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="label">gtk-go-down</property>
-                        <property name="use_stock">True</property>
-                        <property name="response_id">0</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkButton" id="publicHubsDialogRemoveButton">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="label">gtk-remove</property>
-                        <property name="use_stock">True</property>
-                        <property name="response_id">0</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">3</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkLabel" id="label3">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">&lt;b&gt;Note:&lt;/b&gt; Edit urls in the list by clicking them once when selected</property>
-                <property name="use_markup">True</property>
-              </widget>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="okbutton1">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="label">gtk-ok</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-5</property>
-              </widget>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="GtkDialog" id="favoriteNameDialog">
-    <property name="title" translatable="yes">Favorite name</property>
+    <property name="title" translatable="yes">Favorite Name</property>
     <property name="resizable">False</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
     <child internal-child="vbox">
@@ -3978,8 +3775,9 @@
             <child>
               <widget class="GtkLabel" id="label63">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">&lt;b&gt;Under what name you see the directory&lt;/b&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">_Alias for the favorite download directory:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">favoriteNameDialogEntry</property>
               </widget>
               <packing>
                 <property name="type">label_item</property>
@@ -4029,7 +3827,7 @@
     </child>
   </widget>
   <widget class="GtkDialog" id="virtualNameDialog">
-    <property name="title" translatable="yes">Virtual name</property>
+    <property name="title" translatable="yes">Virtual Name</property>
     <property name="resizable">False</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
     <child internal-child="vbox">
@@ -4044,6 +3842,7 @@
               <widget class="GtkVBox" id="vbox26">
                 <property name="visible">True</property>
                 <property name="border_width">8</property>
+                <property name="spacing">10</property>
                 <child>
                   <widget class="GtkEntry" id="virtualNameDialogEntry">
                     <property name="visible">True</property>
@@ -4055,14 +3854,27 @@
                     <property name="fill">False</property>
                   </packing>
                 </child>
+                <child>
+                  <widget class="GtkLabel" id="label34">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Note: New files are added to the share only once they've been hashed</property>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
               </widget>
             </child>
             <child>
               <widget class="GtkLabel" id="label65">
                 <property name="visible">True</property>
                 <property name="xalign">0</property>
-                <property name="label" translatable="yes">&lt;b&gt;Name under which the others see the directory&lt;/b&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">_Alias for the shared directory:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">virtualNameDialogEntry</property>
               </widget>
               <packing>
                 <property name="type">label_item</property>
@@ -4111,7 +3923,7 @@
     </child>
   </widget>
   <widget class="GtkFileChooserDialog" id="dirChooserDialog">
-    <property name="title" translatable="yes">Choose a directory</property>
+    <property name="title" translatable="yes">Select a Folder</property>
     <property name="modal">True</property>
     <property name="local_only">False</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
@@ -4161,59 +3973,9 @@
       </widget>
     </child>
   </widget>
-  <widget class="GtkFileChooserDialog" id="fileChooserDialog">
-    <property name="border_width">5</property>
-    <property name="title" translatable="yes">Choose a File</property>
-    <property name="modal">True</property>
-    <property name="local_only">False</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="dialog-vbox9">
-        <property name="visible">True</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
-        <property name="spacing">2</property>
-        <child>
-          <placeholder/>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="dialog-action_area9">
-            <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="button4">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="button3">
-                <property name="visible">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="label" translatable="yes">gtk-open</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-5</property>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="GtkDialog" id="commandDialog">
-    <property name="title" translatable="yes">Modify User Command</property>
-    <property name="resizable">False</property>
+    <property name="title" translatable="yes">Edit User Command</property>
+    <property name="default_width">500</property>
     <property name="modal">True</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
     <child internal-child="vbox">
@@ -4238,7 +4000,7 @@
                       <widget class="GtkRadioButton" id="commandDialogRaw">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Raw</property>
+                        <property name="label" translatable="yes">_Raw</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4254,7 +4016,7 @@
                       <widget class="GtkRadioButton" id="commandDialogPM">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">PM</property>
+                        <property name="label" translatable="yes">_Private Message</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4272,7 +4034,7 @@
                       <widget class="GtkRadioButton" id="commandDialogChat">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Chat</property>
+                        <property name="label" translatable="yes">Ch_at</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4288,7 +4050,7 @@
                       <widget class="GtkRadioButton" id="commandDialogSeparator">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Separator</property>
+                        <property name="label" translatable="yes">_Separator</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4325,7 +4087,7 @@
                       <widget class="GtkCheckButton" id="commandDialogSearchMenu">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Search Menu</property>
+                        <property name="label" translatable="yes">S_earch</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4340,7 +4102,7 @@
                       <widget class="GtkCheckButton" id="commandDialogUserMenu">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Chat Menu</property>
+                        <property name="label" translatable="yes">Ch_at</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4355,7 +4117,7 @@
                       <widget class="GtkCheckButton" id="commandDialogFilelistMenu">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Filelist Menu</property>
+                        <property name="label" translatable="yes">_File list</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4372,7 +4134,7 @@
                       <widget class="GtkCheckButton" id="commandDialogHubMenu">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Hub Menu</property>
+                        <property name="label" translatable="yes">_Hub</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4386,7 +4148,7 @@
                 <child>
                   <widget class="GtkLabel" id="label68">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Context&lt;/b&gt;</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Menu Context&lt;/b&gt;</property>
                     <property name="use_markup">True</property>
                   </widget>
                   <packing>
@@ -4414,7 +4176,9 @@
                           <widget class="GtkLabel" id="label70">
                             <property name="visible">True</property>
                             <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Name</property>
+                            <property name="label" translatable="yes">_Name:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">commandDialogName</property>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -4442,7 +4206,9 @@
                           <widget class="GtkLabel" id="label71">
                             <property name="visible">True</property>
                             <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Command</property>
+                            <property name="label" translatable="yes">Co_mmand:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">commandDialogCommand</property>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -4473,7 +4239,9 @@
                           <widget class="GtkLabel" id="label72">
                             <property name="visible">True</property>
                             <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Hub IP / DNS (empty = All, 'op' = where operator)</property>
+                            <property name="label" translatable="yes">_Hub address:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">commandDialogHub</property>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -4485,6 +4253,7 @@
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="activates_default">True</property>
+                            <property name="tooltip_text" translatable="yes">A value of 'op' indicates only hubs in which the user is an operator. Leave empty for all hubs.</property>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -4504,7 +4273,9 @@
                           <widget class="GtkLabel" id="label73">
                             <property name="visible">True</property>
                             <property name="xalign">0</property>
-                            <property name="label" translatable="yes">To (empty for selected user)</property>
+                            <property name="label" translatable="yes">_Username:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">commandDialogTo</property>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -4516,6 +4287,7 @@
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="activates_default">True</property>
+                            <property name="tooltip_text">Leave empty for selected user</property>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -4532,7 +4304,7 @@
                       <widget class="GtkCheckButton" id="commandDialogOnce">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="label" translatable="yes">Send once per user</property>
+                        <property name="label" translatable="yes">Sen_d once per user</property>
                         <property name="use_underline">True</property>
                         <property name="response_id">0</property>
                         <property name="draw_indicator">True</property>
@@ -4584,7 +4356,7 @@
                 <child>
                   <widget class="GtkLabel" id="label74">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Text sent to hub&lt;/b&gt;</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Raw Command&lt;/b&gt;</property>
                     <property name="use_markup">True</property>
                   </widget>
                   <packing>

=== modified file 'glade/sharebrowser.glade'
--- glade/sharebrowser.glade	2009-06-17 03:28:37 +0000
+++ glade/sharebrowser.glade	2011-01-25 05:11:20 +0000
@@ -80,7 +80,7 @@
         </child>
         <child>
           <widget class="GtkStatusbar" id="filesStatus">
-            <property name="width_request">120</property>
+            <property name="width_request">130</property>
             <property name="visible">True</property>
             <property name="has_resize_grip">False</property>
           </widget>
@@ -92,7 +92,7 @@
         </child>
         <child>
           <widget class="GtkStatusbar" id="totalStatus">
-            <property name="width_request">120</property>
+            <property name="width_request">150</property>
             <property name="visible">True</property>
             <property name="has_resize_grip">False</property>
           </widget>
@@ -151,7 +151,7 @@
   <widget class="GtkDialog" id="findDialog">
     <property name="width_request">275</property>
     <property name="height_request">125</property>
-    <property name="title" translatable="yes">Find files</property>
+    <property name="title" translatable="yes">Find Files</property>
     <property name="modal">True</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
     <child internal-child="vbox">
@@ -179,8 +179,9 @@
             <child>
               <widget class="GtkLabel" id="label1">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">Enter text to search for</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">_Search text:</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">findEntry</property>
               </widget>
               <packing>
                 <property name="type">label_item</property>
@@ -232,14 +233,14 @@
     <child>
       <widget class="GtkMenuItem" id="dirDownloadItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Download</property>
+        <property name="label" translatable="yes">_Download</property>
         <property name="use_underline">True</property>
       </widget>
     </child>
     <child>
       <widget class="GtkMenuItem" id="dirDownloadToItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Download to...</property>
+        <property name="label" translatable="yes">Download _to</property>
         <property name="use_underline">True</property>
         <child>
           <widget class="GtkMenu" id="dirDownloadMenu">
@@ -255,7 +256,7 @@
     <child>
       <widget class="GtkMenuItem" id="dirUserCommandItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">User commands</property>
+        <property name="label" translatable="yes">_User commands</property>
         <property name="use_underline">True</property>
         <child>
           <widget class="GtkMenu" id="dirUserCommandMenu">
@@ -268,14 +269,14 @@
     <child>
       <widget class="GtkMenuItem" id="fileDownloadItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Download</property>
+        <property name="label" translatable="yes">_Download</property>
         <property name="use_underline">True</property>
       </widget>
     </child>
     <child>
       <widget class="GtkMenuItem" id="fileDownloadToItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">Download to...</property>
+        <property name="label" translatable="yes">Download _to</property>
         <property name="use_underline">True</property>
         <child>
           <widget class="GtkMenu" id="fileDownloadMenu">
@@ -305,7 +306,7 @@
     <child>
       <widget class="GtkMenuItem" id="fileUserCommandItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">User commands</property>
+        <property name="label" translatable="yes">_User commands</property>
         <property name="use_underline">True</property>
         <child>
           <widget class="GtkMenu" id="fileUserCommandMenu">

=== modified file 'glade/transfers.glade'
--- glade/transfers.glade	2009-03-18 00:50:57 +0000
+++ glade/transfers.glade	2011-01-25 05:11:20 +0000
@@ -70,7 +70,7 @@
     <child>
       <widget class="GtkMenuItem" id="userCommandItem">
         <property name="visible">True</property>
-        <property name="label" translatable="yes">User commands</property>
+        <property name="label" translatable="yes">_User commands</property>
         <property name="use_underline">True</property>
         <child>
           <widget class="GtkMenu" id="userCommandMenu">

=== added file 'linux/IntlUtil.hh'
--- linux/IntlUtil.hh	1970-01-01 00:00:00 +0000
+++ linux/IntlUtil.hh	2011-01-25 05:11:20 +0000
@@ -0,0 +1,64 @@
+/*
+ * Copyright © 2010 Jens Oknelid, paskharen@xxxxxxxxx
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * In addition, as a special exception, compiling, linking, and/or
+ * using OpenSSL with this program is allowed.
+ */
+
+#ifndef LINUXDCPP_INTL_UTIL_HH
+#define LINUXDCPP_INTL_UTIL_HH
+
+#include <boost/format.hpp>
+#include <string>
+#include <exception>
+#include <glib/gi18n.h>
+#include <errno.h>
+
+class IntlUtil
+{
+	public:
+		// Initialize i18n support
+		static void initialize()
+		{
+			if (bindtextdomain(PACKAGE, _DATADIR "/locale") == NULL)
+				throw std::runtime_error(strerror(errno));
+
+			if (textdomain(PACKAGE) == NULL)
+				throw std::runtime_error(strerror(errno));
+
+			if (bind_textdomain_codeset(PACKAGE, "UTF-8") == NULL)
+				throw std::runtime_error(strerror(errno));
+		}
+
+		static inline boost::format message_format(const char *text)
+		{
+			boost::format fmt(text);
+			fmt.exceptions(boost::io::no_error_bits);
+			return fmt;
+		}
+
+		static inline boost::format message_format(const std::string &text)
+		{
+			return message_format(text.c_str());
+		}
+};
+
+#define F_(text, params) (IntlUtil::message_format(_(text)) params).str()
+#define P_(text, text_plural, params, n) (IntlUtil::message_format(g_dngettext(NULL, text, text_plural, n)) params).str()
+
+#endif /* LINUXDCPP_INTL_UTIL_HH */
+

=== modified file 'linux/SConscript'
--- linux/SConscript	2010-10-12 04:50:18 +0000
+++ linux/SConscript	2011-01-25 05:11:20 +0000
@@ -4,18 +4,19 @@
 
 VERSION_SOURCE = 'version.cc'
 
-# We don't want to add these CFLAGS globally so we copy the env
-env = env.Clone()
-env.ParseConfig('pkg-config --cflags libglade-2.0')
-
+header_files = env.Glob('*.hh')
 gui_files = env.Glob('*.cc')
 gui_files.remove(File(VERSION_SOURCE))
 obj_files = []
 
+env.ParseConfig('pkg-config --cflags libglade-2.0')
+env.Append(CPPDEFINES='PACKAGE=\'\"%s\"\'' % env['package'])
+
 # Build the gui_files
 obj_files = env.Object(gui_files)
 obj_file = env.Object(VERSION_SOURCE, CPPDEFINES = 'BZR_REVISION=\\"%s\\"' % env['BZR_REVISION'])
-
 obj_files.append(obj_file)
 
-Return('obj_files')
+pot_file = env.PotBuild(source=gui_files + header_files, target='po/linux.pot', LANGUAGE='C++')
+
+Return('pot_file', 'obj_files')

=== modified file 'linux/WulforUtil.cc'
--- linux/WulforUtil.cc	2010-05-22 14:23:56 +0000
+++ linux/WulforUtil.cc	2011-01-25 05:11:20 +0000
@@ -20,7 +20,7 @@
  */
 
 #include "WulforUtil.hh"
-#include <glib/gi18n.h>
+#include "IntlUtil.hh"
 #include <glib/gstdio.h>
 #include <glib.h>
 #include <dcpp/ClientManager.h>
@@ -38,7 +38,7 @@
 using namespace std;
 using namespace dcpp;
 
-const string WulforUtil::ENCODING_LOCALE = _("System default");
+const string WulforUtil::ENCODING_LOCALE = C_("Character encoding", "System default");
 std::vector<std::string> WulforUtil::charsets;
 const std::string WulforUtil::magnetSignature = "magnet:?xt=urn:tree:tiger:";
 GtkIconFactory* WulforUtil::iconFactory = NULL;
@@ -154,7 +154,7 @@
 {
 	StringList hubs = ClientManager::getInstance()->getHubNames(cid);
 	if (hubs.empty())
-		return _("Offline");
+		return C_("User", "Offline");
 	else
 		return Util::toString(hubs);
 }
@@ -190,22 +190,22 @@
 	if (charsets.size() == 0)
 	{
 		charsets.push_back(ENCODING_LOCALE);
-		charsets.push_back(_("UTF-8 (Unicode)"));
-		charsets.push_back(_("CP1252 (Western Europe)"));
-		charsets.push_back(_("CP1250 (Central Europe)"));
-		charsets.push_back(_("ISO-8859-2 (Central Europe)"));
-		charsets.push_back(_("ISO-8859-7 (Greek)"));
-		charsets.push_back(_("ISO-8859-8 (Hebrew)"));
-		charsets.push_back(_("ISO-8859-9 (Turkish)"));
-		charsets.push_back(_("ISO-2022-JP (Japanese)"));
-		charsets.push_back(_("SJIS (Japanese)"));
-		charsets.push_back(_("CP949 (Korean)"));
-		charsets.push_back(_("KOI8-R (Cyrillic)"));
-		charsets.push_back(_("CP1251 (Cyrillic)"));
-		charsets.push_back(_("CP1256 (Arabic)"));
-		charsets.push_back(_("CP1257 (Baltic)"));
-		charsets.push_back(_("GB18030 (Chinese)"));
-		charsets.push_back(_("TIS-620 (Thai)"));
+		charsets.push_back(C_("Character encoding", "UTF-8 (Unicode)"));
+		charsets.push_back(C_("Character encoding", "CP1252 (Western Europe)"));
+		charsets.push_back(C_("Character encoding", "CP1250 (Central Europe)"));
+		charsets.push_back(C_("Character encoding", "ISO-8859-2 (Central Europe)"));
+		charsets.push_back(C_("Character encoding", "ISO-8859-7 (Greek)"));
+		charsets.push_back(C_("Character encoding", "ISO-8859-8 (Hebrew)"));
+		charsets.push_back(C_("Character encoding", "ISO-8859-9 (Turkish)"));
+		charsets.push_back(C_("Character encoding", "ISO-2022-JP (Japanese)"));
+		charsets.push_back(C_("Character encoding", "SJIS (Japanese)"));
+		charsets.push_back(C_("Character encoding", "CP949 (Korean)"));
+		charsets.push_back(C_("Character encoding", "KOI8-R (Cyrillic)"));
+		charsets.push_back(C_("Character encoding", "CP1251 (Cyrillic)"));
+		charsets.push_back(C_("Character encoding", "CP1256 (Arabic)"));
+		charsets.push_back(C_("Character encoding", "CP1257 (Baltic)"));
+		charsets.push_back(C_("Character encoding", "GB18030 (Chinese)"));
+		charsets.push_back(C_("Character encoding", "TIS-620 (Thai)"));
 	}
 	return charsets;
 }
@@ -248,9 +248,9 @@
 
 bool WulforUtil::splitMagnet(const string &magnet, string &name, int64_t &size, string &tth)
 {
-	name = _("Unknown");
+	name = C_("Magnet", "Unknown");
 	size = 0;
-	tth = _("Unknown");
+	tth = C_("Magnet", "Unknown");
 
 	if (!isMagnet(magnet.c_str()) || magnet.size() <= magnetSignature.length())
 		return FALSE;

=== modified file 'linux/bookentry.cc'
--- linux/bookentry.cc	2011-01-07 16:04:03 +0000
+++ linux/bookentry.cc	2011-01-25 05:11:20 +0000
@@ -101,6 +101,7 @@
 	if (len > labelSize)
 	{
 		gchar truncatedText[text.size()];
+		// TRANSLATORS: Tab label ellipsis to indicate text is longer than tab width
 		const string clipText = _("...");
 		len = labelSize - g_utf8_strlen(clipText.c_str(), -1);
 		g_utf8_strncpy(truncatedText, text.c_str(), len);

=== modified file 'linux/downloadqueue.cc'
--- linux/downloadqueue.cc	2009-08-15 04:40:26 +0000
+++ linux/downloadqueue.cc	2011-01-25 05:11:20 +0000
@@ -57,17 +57,17 @@
 
 	// Initialize file treeview
 	fileView.setView(GTK_TREE_VIEW(getWidget("fileView")), TRUE, "downloadqueue");
-	fileView.insertColumn("Filename", G_TYPE_STRING, TreeView::STRING, 200);
-	fileView.insertColumn("Status", G_TYPE_STRING, TreeView::STRING, 100);
-	fileView.insertColumn("Size", G_TYPE_STRING, TreeView::STRING, 100);
-	fileView.insertColumn("Downloaded", G_TYPE_STRING, TreeView::STRING, 150);
-	fileView.insertColumn("Priority", G_TYPE_STRING, TreeView::STRING, 75);
-	fileView.insertColumn("Users", G_TYPE_STRING, TreeView::STRING, 200);
-	fileView.insertColumn("Path", G_TYPE_STRING, TreeView::STRING, 200);
-	fileView.insertColumn("Exact Size", G_TYPE_STRING, TreeView::STRING, 100);
-	fileView.insertColumn("Errors", G_TYPE_STRING, TreeView::STRING, 200);
-	fileView.insertColumn("Added", G_TYPE_STRING, TreeView::STRING, 120);
-	fileView.insertColumn("TTH", G_TYPE_STRING, TreeView::STRING, 125);
+	fileView.insertColumn(N_("Filename"), G_TYPE_STRING, TreeView::STRING, 200);
+	fileView.insertColumn(N_("Status"), G_TYPE_STRING, TreeView::STRING, 100);
+	fileView.insertColumn(N_("Size"), G_TYPE_STRING, TreeView::STRING, 100);
+	fileView.insertColumn(N_("Downloaded"), G_TYPE_STRING, TreeView::STRING, 150);
+	fileView.insertColumn(N_("Priority"), G_TYPE_STRING, TreeView::STRING, 75);
+	fileView.insertColumn(N_("Users"), G_TYPE_STRING, TreeView::STRING, 200);
+	fileView.insertColumn(N_("Path"), G_TYPE_STRING, TreeView::STRING, 200);
+	fileView.insertColumn(N_("Exact Size"), G_TYPE_STRING, TreeView::STRING, 100);
+	fileView.insertColumn(N_("Errors"), G_TYPE_STRING, TreeView::STRING, 200);
+	fileView.insertColumn(N_("Added"), G_TYPE_STRING, TreeView::STRING, 120);
+	fileView.insertColumn(N_("TTH"), G_TYPE_STRING, TreeView::STRING, 125);
 	fileView.insertHiddenColumn("Size Sort", G_TYPE_INT64);
 	fileView.insertHiddenColumn("Downloaded Sort", G_TYPE_INT64);
 	fileView.insertHiddenColumn("Target", G_TYPE_STRING);
@@ -225,10 +225,10 @@
 
 void DownloadQueue::updateStatus_gui()
 {
-	setStatus_gui(_("Items: ") + Util::toString(currentItems), "statusItems");
-	setStatus_gui(_("Size: ") + Util::formatBytes(currentSize), "statusFileSize");
-	setStatus_gui(_("Files: ") + Util::toString(totalItems), "statusFiles");
-	setStatus_gui(_("Size: ") + Util::formatBytes(totalSize), "statusTotalSize");
+	setStatus_gui(F_("Items: %1%", % currentItems), "statusItems");
+	setStatus_gui(F_("Size: %1%", % Util::formatBytes(currentSize)), "statusFileSize");
+	setStatus_gui(F_("Files: %1%", % totalItems), "statusFiles");
+	setStatus_gui(F_("Size: %1%", % Util::formatBytes(totalSize)), "statusTotalSize");
 }
 
 void DownloadQueue::addFiles_gui(vector<StringMap> files, bool firstUpdate)
@@ -1237,6 +1237,7 @@
 	string nick;
 	map<string, string> source;
 	int online = 0;
+	int totalSources = item->getSources().size();
 
 	params["Filename"] = item->getTargetFileName();
 	params["Path"] = Util::getFilePath(item->getTarget());
@@ -1261,7 +1262,7 @@
 
 	// Status
 	if (item->isWaiting())
-		params["Status"] = Util::toString(online) + _(" of ") + Util::toString(item->getSources().size()) + _(" user(s) online");
+		params["Status"] = P_("%1% of %2% user online", "%1% of %2% users online", % online % totalSources, totalSources);
 	else 
 		params["Status"] = _("Running...");
 	
@@ -1269,8 +1270,8 @@
 	params["Size Sort"] = Util::toString(item->getSize());
 	if (item->getSize() < 0)
 	{
-		params["Size"] = _("Unknown");
-		params["Exact Size"] = _("Unknown");
+		params["Size"] = C_("Size", "Unknown");
+		params["Exact Size"] = C_("Size", "Unknown");
 	}
 	else
 	{
@@ -1294,22 +1295,22 @@
 	switch (item->getPriority())
 	{
 		case QueueItem::PAUSED:
-			params["Priority"] = _("Paused");
+			params["Priority"] = C_("Priority", "Paused");
 			break;
 		case QueueItem::LOWEST:
-			params["Priority"] = _("Lowest");
+			params["Priority"] = C_("Priority", "Lowest");
 			break;
 		case QueueItem::LOW:
-			params["Priority"] = _("Low");
+			params["Priority"] = C_("Priority", "Low");
 			break;
 		case QueueItem::HIGH:
-			params["Priority"] = _("High");
+			params["Priority"] = C_("Priority", "High");
 			break;
 		case QueueItem::HIGHEST:
-			params["Priority"] = _("Highest");
+			params["Priority"] = C_("Priority", "Highest");
 			break;
 		default:
-			params["Priority"] = _("Normal");
+			params["Priority"] = C_("Priority", "Normal");
 	}
 
 	// Error

=== modified file 'linux/downloadqueue.hh'
--- linux/downloadqueue.hh	2009-03-12 05:47:55 +0000
+++ linux/downloadqueue.hh	2011-01-25 05:11:20 +0000
@@ -22,6 +22,8 @@
 #ifndef WULFOR_DOWNLOAD_QUEUE_HH
 #define WULFOR_DOWNLOAD_QUEUE_HH
 
+#include "IntlUtil.hh"
+
 #include <dcpp/stdinc.h>
 #include <dcpp/DCPlusPlus.h>
 #include <dcpp/QueueManager.h>

=== modified file 'linux/entry.hh'
--- linux/entry.hh	2010-09-08 02:51:30 +0000
+++ linux/entry.hh	2011-01-25 05:11:20 +0000
@@ -25,7 +25,7 @@
 #include <gtk/gtk.h>
 #include <glade/glade.h>
 #include <gdk/gdkkeysyms.h>
-#include <glib/gi18n.h>
+#include "IntlUtil.hh"
 #include <string>
 #include <map>
 

=== modified file 'linux/favoritehubs.cc'
--- linux/favoritehubs.cc	2010-09-05 00:10:54 +0000
+++ linux/favoritehubs.cc	2011-01-25 05:11:20 +0000
@@ -43,14 +43,14 @@
 
 	// Initialize favorite hub list treeview
 	favoriteView.setView(GTK_TREE_VIEW(getWidget("favoriteView")), TRUE, "favoritehubs");
-	favoriteView.insertColumn("Auto Connect", G_TYPE_BOOLEAN, TreeView::BOOL, 100);
-	favoriteView.insertColumn("Name", G_TYPE_STRING, TreeView::STRING, 150);
-	favoriteView.insertColumn("Description", G_TYPE_STRING, TreeView::STRING, 250);
-	favoriteView.insertColumn("Address", G_TYPE_STRING, TreeView::STRING, 175);
-	favoriteView.insertColumn("Username", G_TYPE_STRING, TreeView::STRING, 100);
-	favoriteView.insertColumn("Password", G_TYPE_STRING, TreeView::STRING, 100);
-	favoriteView.insertColumn("User Description", G_TYPE_STRING, TreeView::STRING, 125);
-	favoriteView.insertColumn("Encoding", G_TYPE_STRING, TreeView::STRING, 125);
+	favoriteView.insertColumn(N_("Auto Connect"), G_TYPE_BOOLEAN, TreeView::BOOL, 100);
+	favoriteView.insertColumn(N_("Name"), G_TYPE_STRING, TreeView::STRING, 150);
+	favoriteView.insertColumn(N_("Description"), G_TYPE_STRING, TreeView::STRING, 250);
+	favoriteView.insertColumn(N_("Address"), G_TYPE_STRING, TreeView::STRING, 175);
+	favoriteView.insertColumn(N_("Username"), G_TYPE_STRING, TreeView::STRING, 100);
+	favoriteView.insertColumn(N_("Password"), G_TYPE_STRING, TreeView::STRING, 100);
+	favoriteView.insertColumn(N_("User Description"), G_TYPE_STRING, TreeView::STRING, 125);
+	favoriteView.insertColumn(N_("Encoding"), G_TYPE_STRING, TreeView::STRING, 125);
 	favoriteView.insertHiddenColumn("Hidden Password", G_TYPE_STRING);
 	favoriteView.finalize();
 	favoriteStore = gtk_list_store_newv(favoriteView.getColCount(), favoriteView.getGTypes());
@@ -375,17 +375,11 @@
 	{
 		if (BOOLSETTING(CONFIRM_HUB_REMOVAL))
 		{
-			string name = fh->favoriteView.getString(&iter, "Name").c_str();
-			GtkWindow* parent = GTK_WINDOW(WulforManager::get()->getMainWindow()->getContainer());
-			GtkWidget* dialog = gtk_message_dialog_new(parent,
-				GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
-				_("Are you sure you want to delete favorite hub \"%s\"?"), name.c_str());
-			gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_REMOVE, GTK_RESPONSE_YES, NULL);
-			gtk_dialog_set_alternative_button_order(GTK_DIALOG(dialog), GTK_RESPONSE_YES, GTK_RESPONSE_CANCEL, -1);
-			gint response = gtk_dialog_run(GTK_DIALOG(dialog));
-			gtk_widget_destroy(dialog);
+			GtkWidget *confirmDeletionDialog = fh->getWidget("confirmDeletionDialog");
+			gint response = gtk_dialog_run(GTK_DIALOG(confirmDeletionDialog));
+			gtk_widget_hide(fh->getWidget("confirmDeletionDialog"));
 
-			if (response != GTK_RESPONSE_YES)
+			if (response != GTK_RESPONSE_OK)
 				return;
 		}
 

=== modified file 'linux/favoriteusers.cc'
--- linux/favoriteusers.cc	2010-09-05 00:10:54 +0000
+++ linux/favoriteusers.cc	2011-01-25 05:11:20 +0000
@@ -38,12 +38,12 @@
 
 	// Initialize favorite users list treeview
 	favoriteUserView.setView(GTK_TREE_VIEW(getWidget("favoriteUserView")), TRUE, "favoriteusers");
-	favoriteUserView.insertColumn(_("Auto Grant Slot"), G_TYPE_BOOLEAN, TreeView::BOOL, 120);
-	favoriteUserView.insertColumn(_("User"), G_TYPE_STRING, TreeView::ICON_STRING, 100, "Icon");
-	favoriteUserView.insertColumn(_("Most Recent Hub"), G_TYPE_STRING, TreeView::STRING, 200);
-	favoriteUserView.insertColumn(_("Time Last Seen"), G_TYPE_STRING, TreeView::STRING, 120);
-	favoriteUserView.insertColumn(_("Description"), G_TYPE_STRING, TreeView::STRING, 150);
-	favoriteUserView.insertColumn("CID", G_TYPE_STRING, TreeView::STRING, 350);
+	favoriteUserView.insertColumn(N_("Auto Grant Slot"), G_TYPE_BOOLEAN, TreeView::BOOL, 120);
+	favoriteUserView.insertColumn(N_("User"), G_TYPE_STRING, TreeView::ICON_STRING, 100, "Icon");
+	favoriteUserView.insertColumn(N_("Most Recent Hub"), G_TYPE_STRING, TreeView::STRING, 200);
+	favoriteUserView.insertColumn(N_("Time Last Seen"), G_TYPE_STRING, TreeView::STRING, 120);
+	favoriteUserView.insertColumn(N_("Description"), G_TYPE_STRING, TreeView::STRING, 150);
+	favoriteUserView.insertColumn(N_("CID"), G_TYPE_STRING, TreeView::STRING, 350);
 	favoriteUserView.insertHiddenColumn("URL", G_TYPE_STRING);
 	favoriteUserView.insertHiddenColumn("Icon", G_TYPE_STRING);
 	favoriteUserView.finalize();
@@ -54,12 +54,12 @@
 
 	favoriteUserSelection = gtk_tree_view_get_selection(favoriteUserView.get());
 	gtk_tree_selection_set_mode(favoriteUserSelection, GTK_SELECTION_MULTIPLE);
-	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(favoriteUserStore), favoriteUserView.col(_("User")), GTK_SORT_ASCENDING);
-	gtk_tree_view_column_set_sort_indicator(gtk_tree_view_get_column(favoriteUserView.get(), favoriteUserView.col(_("User"))), TRUE);
+	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(favoriteUserStore), favoriteUserView.col("User"), GTK_SORT_ASCENDING);
+	gtk_tree_view_column_set_sort_indicator(gtk_tree_view_get_column(favoriteUserView.get(), favoriteUserView.col("User")), TRUE);
 	gtk_tree_view_set_fixed_height_mode(favoriteUserView.get(), TRUE);
 
 	GList *list = gtk_tree_view_column_get_cell_renderers(gtk_tree_view_get_column(favoriteUserView.get(),
-		favoriteUserView.col(_("Auto Grant Slot"))));
+		favoriteUserView.col("Auto Grant Slot")));
 	GObject *renderer = (GObject *)g_list_nth_data(list, 0);
 	g_signal_connect(renderer, "toggled", G_CALLBACK(onAutoGrantSlotToggled_gui), (gpointer)this);
 	g_list_free(list);
@@ -96,16 +96,16 @@
 		const FavoriteUser &user = it->second;
 		bool online = user.getUser()->isOnline();
 		string hub = online ? WulforUtil::getHubNames(user.getUser()) : user.getUrl();
-		string seen = online ? _("Online") : Util::formatTime("%Y-%m-%d %H:%M", user.getLastSeen());
+		string seen = online ? C_("User", "Online") : Util::formatTime("%Y-%m-%d %H:%M", user.getLastSeen());
 		string cid = user.getUser()->getCID().toBase32();
 
 		gtk_list_store_append(favoriteUserStore, &iter);
 		gtk_list_store_set(favoriteUserStore, &iter,
-			favoriteUserView.col(_("Auto Grant Slot")), user.isSet(FavoriteUser::FLAG_GRANTSLOT) ? TRUE : FALSE,
-			favoriteUserView.col(_("User")), user.getNick().c_str(),
-			favoriteUserView.col(_("Most Recent Hub")), hub.c_str(),
-			favoriteUserView.col(_("Time Last Seen")), seen.c_str(),
-			favoriteUserView.col(_("Description")), user.getDescription().c_str(),
+			favoriteUserView.col("Auto Grant Slot"), user.isSet(FavoriteUser::FLAG_GRANTSLOT) ? TRUE : FALSE,
+			favoriteUserView.col("User"), user.getNick().c_str(),
+			favoriteUserView.col("Most Recent Hub"), hub.c_str(),
+			favoriteUserView.col("Time Last Seen"), seen.c_str(),
+			favoriteUserView.col("Description"), user.getDescription().c_str(),
 			favoriteUserView.col("CID"), cid.c_str(),
 			favoriteUserView.col("URL"), user.getUrl().c_str(),
 			favoriteUserView.col("Icon"), "linuxdcpp-normal",
@@ -355,8 +355,8 @@
 
 			if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fu->favoriteUserStore), &iter, path))
 			{
-				description = fu->favoriteUserView.getString(&iter, _("Description"));
-				nick = fu->favoriteUserView.getString(&iter, _("User"));
+				description = fu->favoriteUserView.getString(&iter, "Description");
+				nick = fu->favoriteUserView.getString(&iter, "User");
 				cid = fu->favoriteUserView.getString(&iter, "CID");
 			}
 			gtk_tree_path_free(path);
@@ -380,7 +380,7 @@
 			if (fu->findUser_gui(cid, &iter))
 			{
 				description = gtk_entry_get_text(GTK_ENTRY(fu->getWidget("descriptionEntry")));
-				gtk_list_store_set(fu->favoriteUserStore, &iter, fu->favoriteUserView.col(_("Description")), description.c_str(), -1);
+				gtk_list_store_set(fu->favoriteUserStore, &iter, fu->favoriteUserView.col("Description"), description.c_str(), -1);
 
 				typedef Func2<FavoriteUsers, string, string> F2;
 				F2 *func = new F2(fu, &FavoriteUsers::setUserDescription_client, cid, description);
@@ -409,7 +409,7 @@
 			if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fu->favoriteUserStore), &iter, path))
 			{
 				string cid = fu->favoriteUserView.getString(&iter, "CID");
-				string nick = fu->favoriteUserView.getString(&iter, _("User"));
+				string nick = fu->favoriteUserView.getString(&iter, "User");
 				params.insert(ParamMap::value_type(cid, nick));
 			}
 			gtk_tree_path_free(path);
@@ -423,7 +423,7 @@
 				GTK_DIALOG_DESTROY_WITH_PARENT,
 				GTK_MESSAGE_WARNING,
 				GTK_BUTTONS_NONE,
-				_("Are you sure you want to delete the selected favorite user(s)?"));
+				_("Are you sure you want to delete the selected favorite users?"));
 			gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_REMOVE,
 				GTK_RESPONSE_YES, NULL);
 			gtk_dialog_set_alternative_button_order(GTK_DIALOG(dialog), GTK_RESPONSE_YES, GTK_RESPONSE_CANCEL, -1);
@@ -455,9 +455,9 @@
 	if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(fu->favoriteUserStore), &iter, path))
 	{
 		string cid = fu->favoriteUserView.getString(&iter, "CID");
-		gboolean grant = fu->favoriteUserView.getValue<gboolean>(&iter, _("Auto Grant Slot"));
+		gboolean grant = fu->favoriteUserView.getValue<gboolean>(&iter, "Auto Grant Slot");
 		grant = !grant;
-		gtk_list_store_set(fu->favoriteUserStore, &iter, fu->favoriteUserView.col(_("Auto Grant Slot")), grant, -1);
+		gtk_list_store_set(fu->favoriteUserStore, &iter, fu->favoriteUserView.col("Auto Grant Slot"), grant, -1);
 
 		typedef Func2<FavoriteUsers, string, bool> F2;
 		F2 *func = new F2(fu, &FavoriteUsers::setAutoGrantSlot_client, cid, grant);
@@ -563,16 +563,16 @@
 
 	if (findUser_gui(cid, &iter))
 	{
-		gtk_list_store_set(favoriteUserStore, &iter, favoriteUserView.col(_("Time Last Seen")), params["Time"].c_str(), -1);
+		gtk_list_store_set(favoriteUserStore, &iter, favoriteUserView.col("Time Last Seen"), params["Time"].c_str(), -1);
 	}
 	else
 	{
 		gtk_list_store_append(favoriteUserStore, &iter);
 		gtk_list_store_set(favoriteUserStore, &iter,
-			favoriteUserView.col(_("User")), params["User"].c_str(),
-			favoriteUserView.col(_("Most Recent Hub")), params["Hub"].c_str(),
-			favoriteUserView.col(_("Time Last Seen")), params["Time"].c_str(),
-			favoriteUserView.col(_("Description")), params["Description"].c_str(),
+			favoriteUserView.col("User"), params["User"].c_str(),
+			favoriteUserView.col("Most Recent Hub"), params["Hub"].c_str(),
+			favoriteUserView.col("Time Last Seen"), params["Time"].c_str(),
+			favoriteUserView.col("Description"), params["Description"].c_str(),
 			favoriteUserView.col("CID"), cid.c_str(),
 			favoriteUserView.col("URL"), params["URL"].c_str(),
 			favoriteUserView.col("Icon"), "linuxdcpp-normal",
@@ -609,7 +609,7 @@
 	bool online = user.getUser()->isOnline();
 	params.insert(ParamMap::value_type("User", user.getNick()));
 	params.insert(ParamMap::value_type("Hub", online ? WulforUtil::getHubNames(user.getUser()) : user.getUrl()));
-	params.insert(ParamMap::value_type("Time", online ? _("Online") : Util::formatTime("%Y-%m-%d %H:%M", user.getLastSeen())));
+	params.insert(ParamMap::value_type("Time", online ? C_("User", "Online") : Util::formatTime("%Y-%m-%d %H:%M", user.getLastSeen())));
 	params.insert(ParamMap::value_type("Description", user.getDescription()));
 	params.insert(ParamMap::value_type("CID", user.getUser()->getCID().toBase32()));
 	params.insert(ParamMap::value_type("URL", user.getUrl()));
@@ -634,7 +634,7 @@
 
 	if (user->isOnline())
 	{
-		seen = _("Online");
+		seen = C_("User", "Online");
 	}
 	else
 	{

=== modified file 'linux/finishedtransfers.cc'
--- linux/finishedtransfers.cc	2010-09-18 17:51:54 +0000
+++ linux/finishedtransfers.cc	2011-01-25 05:11:20 +0000
@@ -47,13 +47,13 @@
 {
 	// Initialize transfer treeview
 	fileView.setView(GTK_TREE_VIEW(getWidget("fileView")), true, "finished");
-	fileView.insertColumn("Time", G_TYPE_STRING, TreeView::STRING, 150);
-	fileView.insertColumn("Filename", G_TYPE_STRING, TreeView::STRING, 100);
-	fileView.insertColumn("Path", G_TYPE_STRING, TreeView::STRING, 200);
-	fileView.insertColumn("Users", G_TYPE_STRING, TreeView::STRING, 100);
-	fileView.insertColumn("Size", G_TYPE_INT64, TreeView::SIZE, 100);
-	fileView.insertColumn("Average Speed", G_TYPE_INT64, TreeView::SPEED, 125);
-	fileView.insertColumn("CRC Checked", G_TYPE_STRING, TreeView::STRING, 115);
+	fileView.insertColumn(N_("Time"), G_TYPE_STRING, TreeView::STRING, 150);
+	fileView.insertColumn(N_("Filename"), G_TYPE_STRING, TreeView::STRING, 100);
+	fileView.insertColumn(N_("Path"), G_TYPE_STRING, TreeView::STRING, 200);
+	fileView.insertColumn(N_("Users"), G_TYPE_STRING, TreeView::STRING, 100);
+	fileView.insertColumn(N_("Size"), G_TYPE_INT64, TreeView::SIZE, 100);
+	fileView.insertColumn(N_("Average Speed"), G_TYPE_INT64, TreeView::SPEED, 125);
+	fileView.insertColumn(N_("CRC Checked"), G_TYPE_STRING, TreeView::STRING, 115);
 	fileView.insertHiddenColumn("Target", G_TYPE_STRING);
 	fileView.insertHiddenColumn("Elapsed Time", G_TYPE_INT64);
 	fileView.finalize();
@@ -156,7 +156,8 @@
 
 void FinishedTransfers::updateStatus_gui()
 {
-	string status = Util::toString(totalFiles) + _(" files");
+	// TRANSLATORS: Displays the total number of files in the status bar.
+	string status = P_("File: %1%", "Files: %1%", % totalFiles, totalFiles);
 
 	string size = Util::formatBytes(totalBytes);
 	string speed = Util::formatBytes((totalTime > 0) ? totalBytes * ((int64_t)1000) / totalTime : 0) + "/s";

=== modified file 'linux/hashdialog.cc'
--- linux/hashdialog.cc	2009-03-12 05:47:55 +0000
+++ linux/hashdialog.cc	2011-01-25 05:11:20 +0000
@@ -55,25 +55,33 @@
 	double diff = tick - startTime;
 	if (diff < 1000 || files == 0 || bytes == 0)
 	{
-		gtk_label_set_text(GTK_LABEL(getWidget("labelSpeed")), string("-.-- B/s, " + Util::formatBytes(bytes) + _(" left")).c_str());
-		gtk_label_set_text(GTK_LABEL(getWidget("labelTime")), _("-:--:-- left"));
-		gtk_progress_bar_set_text (GTK_PROGRESS_BAR(getWidget("progressbar")), "0%");
+		// TRANSLATORS: Hashing speed and bytes left to hash
+		const gchar *speed = F_("%1%/s, %2% left", % Util::formatBytes(0) % Util::formatBytes(bytes)).c_str();
+
+		// TRANSLATORS: Time left to hash the remaining files.
+		const gchar *time = F_("%1% left", % Util::formatSeconds(0)).c_str();
+
+		gtk_label_set_text(GTK_LABEL(getWidget("labelSpeed")), speed);
+		gtk_label_set_text(GTK_LABEL(getWidget("labelTime")), time);
+		gtk_progress_bar_set_text(GTK_PROGRESS_BAR(getWidget("progressbar")), "0%");
 		gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(getWidget("progressbar")), 0.0);
 	}
 	else
 	{
 		double speedStat = (((double)(startBytes - bytes)) * 1000) / diff;
+		const gchar *speed = F_("%1%/s, %2% left", % Util::formatBytes((int64_t)speedStat) % Util::formatBytes(bytes)).c_str();
 
-		gtk_label_set_text(GTK_LABEL(getWidget("labelSpeed")), string(Util::formatBytes((int64_t)speedStat) + "/s, " + Util::formatBytes(bytes) + " left").c_str());
+		gtk_label_set_text(GTK_LABEL(getWidget("labelSpeed")), speed);
 
 		if (speedStat == 0)
 		{
-			gtk_label_set_text(GTK_LABEL(getWidget("labelTime")), _("-:--:-- left"));
+			gtk_label_set_text(GTK_LABEL(getWidget("labelTime")), F_("%1% left", % Util::formatSeconds(0)).c_str());
 		}
 		else
 		{
 			double ss = (double)bytes / speedStat;
-			gtk_label_set_text(GTK_LABEL(getWidget("labelTime")), string(Util::formatSeconds((int64_t)ss) + _(" left")).c_str());
+			const gchar *time = F_("%1% left", % Util::formatSeconds((int64_t)ss)).c_str();
+			gtk_label_set_text(GTK_LABEL(getWidget("labelTime")), time);
 		}
 	}
 

=== modified file 'linux/hub.cc'
--- linux/hub.cc	2010-09-10 01:26:40 +0000
+++ linux/hub.cc	2011-01-25 05:11:20 +0000
@@ -51,13 +51,13 @@
 
 	// Initialize nick treeview
 	nickView.setView(GTK_TREE_VIEW(getWidget("nickView")), true, "hub");
-	nickView.insertColumn("User", G_TYPE_STRING, TreeView::ICON_STRING, 100, "Icon");
-	nickView.insertColumn("Shared", G_TYPE_INT64, TreeView::SIZE, 75);
-	nickView.insertColumn("Description", G_TYPE_STRING, TreeView::STRING, 85);
-	nickView.insertColumn("Tag", G_TYPE_STRING, TreeView::STRING, 100);
-	nickView.insertColumn("Connection", G_TYPE_STRING, TreeView::STRING, 85);
-	nickView.insertColumn("IP", G_TYPE_STRING, TreeView::STRING, 85);
-	nickView.insertColumn("eMail", G_TYPE_STRING, TreeView::STRING, 90);
+	nickView.insertColumn(N_("User"), G_TYPE_STRING, TreeView::ICON_STRING, 100, "Icon");
+	nickView.insertColumn(N_("Shared"), G_TYPE_INT64, TreeView::SIZE, 75);
+	nickView.insertColumn(N_("Description"), G_TYPE_STRING, TreeView::STRING, 85);
+	nickView.insertColumn(N_("Tag"), G_TYPE_STRING, TreeView::STRING, 100);
+	nickView.insertColumn(N_("Connection"), G_TYPE_STRING, TreeView::STRING, 85);
+	nickView.insertColumn(N_("IP"), G_TYPE_STRING, TreeView::STRING, 85);
+	nickView.insertColumn(N_("Email"), G_TYPE_STRING, TreeView::STRING, 90);
 	nickView.insertHiddenColumn("Icon", G_TYPE_STRING);
 	nickView.insertHiddenColumn("Nick Order", G_TYPE_STRING);
 	nickView.insertHiddenColumn("CID", G_TYPE_STRING);
@@ -201,6 +201,13 @@
 	return FALSE;
 }
 
+void Hub::updateStats_gui()
+{
+	// TRANSLATORS: Count of users appearing in the status bar.
+	setStatus_gui("statusUsers", P_("%1% User", "%1% Users", % userMap.size(), userMap.size()));
+	setStatus_gui("statusShared", Util::formatBytes(totalShared));
+}
+
 void Hub::updateUser_gui(ParamMap params, bool showJoin)
 {
 	GtkTreeIter iter;
@@ -211,7 +218,7 @@
 	if (findUser_gui(cid, &iter))
 	{
 		totalShared += shared - nickView.getValue<int64_t>(&iter, "Shared");
-		string nick = nickView.getString(&iter,"User");
+		string nick = nickView.getString(&iter, "User");
 
 		if (nick != params["User"])
 		{
@@ -228,7 +235,7 @@
 			nickView.col("Tag"), params["Tag"].c_str(),
  			nickView.col("Connection"), params["Connection"].c_str(),
 			nickView.col("IP"), params["IP"].c_str(),
-			nickView.col("eMail"), params["eMail"].c_str(),
+			nickView.col("Email"), params["Email"].c_str(),
  			nickView.col("Icon"), icon.c_str(),
 			nickView.col("Nick Order"), params["Nick Order"].c_str(),
 			nickView.col("CID"), cid.c_str(),
@@ -246,7 +253,7 @@
 			nickView.col("Tag"), params["Tag"].c_str(),
  			nickView.col("Connection"), params["Connection"].c_str(),
 			nickView.col("IP"), params["IP"].c_str(),
-			nickView.col("eMail"), params["eMail"].c_str(),
+			nickView.col("Email"), params["Email"].c_str(),
  			nickView.col("Icon"), icon.c_str(),
 			nickView.col("Nick Order"), params["Nick Order"].c_str(),
 			nickView.col("CID"), cid.c_str(),
@@ -255,11 +262,10 @@
 		userIters[cid] = iter;
 
 		if (showJoin)
-			addStatusMessage_gui(params["User"] + _(" has joined"));
+			addStatusMessage_gui(F_("%1% has joined", % params["User"]));
 	}
 
-	setStatus_gui("statusUsers", Util::toString(userMap.size()) + _(" Users"));
-	setStatus_gui("statusShared", Util::formatBytes(totalShared));
+	updateStats_gui();
 }
 
 void Hub::removeUser_gui(string cid)
@@ -275,8 +281,7 @@
 		removeTag_gui(nick);
 		userMap.erase(nick);
 		userIters.erase(cid);
-		setStatus_gui("statusUsers", Util::toString(userMap.size()) + _(" Users"));
-		setStatus_gui("statusShared", Util::formatBytes(totalShared));
+		updateStats_gui();
 	}
 }
 
@@ -302,8 +307,7 @@
 	userMap.clear();
 	userIters.clear();
 	totalShared = 0;
-	setStatus_gui("statusUsers", _("0 Users"));
-	setStatus_gui("statusShared", "0 B");
+	updateStats_gui();
 }
 
 void Hub::popupNickMenu_gui()
@@ -894,7 +898,7 @@
 				Util::setAway(TRUE);
 				Util::setManualAway(TRUE);
 				Util::setAwayMessage(param);
-				hub->addStatusMessage_gui(_("Away mode on: ") + Util::getAwayMessage());
+				hub->addStatusMessage_gui(F_("Away mode on: %1%", % Util::getAwayMessage()));
 			}
 		}
 		else if (command == _("back"))
@@ -991,7 +995,7 @@
 		}
 		else
 		{
-			hub->addStatusMessage_gui(_("Unknown command '") + text + _("': type /help for a list of available commands"));
+			hub->addStatusMessage_gui(F_("Unknown command '%1%': Type /help for a list of available commands", % text));
 		}
 
 	}
@@ -1222,7 +1226,7 @@
 			if (gtk_tree_model_get_iter(GTK_TREE_MODEL(hub->nickStore), &iter, path))
 			{
 				cid = hub->nickView.getString(&iter, "CID");
-				nick = hub->nickView.getString(&iter, _("User"));
+				nick = hub->nickView.getString(&iter, "User");
 				if (!cid.empty() && nick != hub->client->getMyNick())
 				{
 					F1 *func = new F1(hub, &Hub::addFavoriteUser_client, cid);
@@ -1349,7 +1353,7 @@
 		if (user)
 		{
 			UploadManager::getInstance()->reserveSlot(user, client->getHubUrl());
-			message = _("Slot granted to ") + WulforUtil::getNicks(user);
+			message = F_("Slot granted to %1%", % WulforUtil::getNicks(user));
 		}
 	}
 
@@ -1473,7 +1477,7 @@
 	params["Tag"] = id.getTag();
 	params["Connection"] = id.getConnection();
 	params["IP"] = id.getIp();
-	params["eMail"] = id.getEmail();
+	params["Email"] = id.getEmail();
 	params["CID"] = id.getUser()->getCID().toBase32();
 }
 
@@ -1486,7 +1490,7 @@
 void Hub::on(ClientListener::Connecting, Client *) throw()
 {
 	typedef Func1<Hub, string> F1;
-	F1 *f1 = new F1(this, &Hub::addStatusMessage_gui, _("Connecting to ") + client->getHubUrl());
+	F1 *f1 = new F1(this, &Hub::addStatusMessage_gui, F_("Connecting to %1%", % client->getHubUrl()));
 	WulforManager::get()->dispatchGuiFunc(f1);
 }
 
@@ -1541,7 +1545,7 @@
 
 	if (showJoins_client(user.getUser()))
 	{
-		func = new F1(this, &Hub::addStatusMessage_gui, nick + _(" has quit"));
+		func = new F1(this, &Hub::addStatusMessage_gui, F_("%1% has quit", % nick));
 		WulforManager::get()->dispatchGuiFunc(func);
 	}
 
@@ -1563,7 +1567,7 @@
 	WulforManager::get()->dispatchGuiFunc(f0);
 
 	typedef Func1<Hub, string> F1;
-	F1 *f1 = new F1(this, &Hub::addStatusMessage_gui, _("Connect failed: ") + reason);
+	F1 *f1 = new F1(this, &Hub::addStatusMessage_gui, F_("Connect failed: %1%", % reason));
 	WulforManager::get()->dispatchGuiFunc(f1);
 }
 
@@ -1698,7 +1702,7 @@
 	}
 	else if (user.getIdentity().isBot() && BOOLSETTING(IGNORE_BOT_PMS))
 	{
-		error = _("Ignored private message from bot ") + user.getIdentity().getNick();
+		error = F_("Ignored private message from bot %1%", % user.getIdentity().getNick());
 		typedef Func1<Hub, string> F1;
 		F1 *func = new F1(this, &Hub::addStatusMessage_gui, error);
 		WulforManager::get()->dispatchGuiFunc(func);
@@ -1722,7 +1726,7 @@
 void Hub::on(ClientListener::SearchFlood, Client *, const string &msg) throw()
 {
 	typedef Func1<Hub, string> F1;
-	F1 *func = new F1(this, &Hub::addStatusMessage_gui, _("Search spam detected from ") + msg);
+	F1 *func = new F1(this, &Hub::addStatusMessage_gui, F_("Search spam detected from %1%", % msg));
 	WulforManager::get()->dispatchGuiFunc(func);
 }
 

=== modified file 'linux/hub.hh'
--- linux/hub.hh	2010-09-10 01:26:40 +0000
+++ linux/hub.hh	2011-01-25 05:11:20 +0000
@@ -50,6 +50,7 @@
 		void setStatus_gui(std::string statusBar, std::string text);
 		bool findUser_gui(const std::string &cid, GtkTreeIter *iter);
 		bool findNick_gui(const std::string &nick, GtkTreeIter *iter);
+		void updateStats_gui();
 		void updateUser_gui(ParamMap id, bool showJoin);
 		void removeUser_gui(std::string cid);
 		void removeTag_gui(const std::string &nick);

=== modified file 'linux/mainwindow.cc'
--- linux/mainwindow.cc	2010-09-10 01:26:40 +0000
+++ linux/mainwindow.cc	2011-01-25 05:11:20 +0000
@@ -160,7 +160,8 @@
 	gtk_widget_destroy(dummy);
 	emptyStatusWidth = req.width;
 
-	setMainStatus_gui(_("Welcome to ") + string(g_get_application_name()));
+	// TRANSLATORS: Shown in status bar on startup.
+	setMainStatus_gui(F_("Welcome to %1%", % g_get_application_name()));
 
 	loadIcons_gui();
 	showTransfersPane_gui();
@@ -465,9 +466,9 @@
 
 void MainWindow::updateStatusIconTooltip_gui(string download, string upload)
 {
-	ostringstream toolTip;
-	toolTip << g_get_application_name() << endl << _("Download: ") << download << endl << _("Upload: ") << upload;
-	gtk_status_icon_set_tooltip(statusIcon, toolTip.str().c_str());
+	// TRANSLATORS: Notify icon (systray) tooltip
+	string tooltip = F_("%1%\nDownload: %2%\nUpload: %3%", % g_get_application_name() % download % upload);
+	gtk_status_icon_set_tooltip(statusIcon, tooltip.c_str());
 }
 
 void MainWindow::showNotification_gui(string title, string body)
@@ -728,12 +729,10 @@
 bool MainWindow::getUserCommandLines_gui(const string &command, StringMap &ucParams)
 {
 	string name;
-	string label;
 	string line;
 	StringMap done;
 	string::size_type i = 0;
 	string::size_type j = 0;
-	string text = string("<b>") + _("Enter value for ") + "\'";
 
 	while ((i = command.find("%[line:", i)) != string::npos)
 	{
@@ -746,9 +745,11 @@
 		if (done.find(name) == done.end())
 		{
 			line.clear();
-			label = text + name + "\'</b>";
-
-			gtk_label_set_label(GTK_LABEL(getWidget("ucLabel")), label.c_str());
+
+			// TRANSLATORS: Appears in a dialog prompt when a user command requires arguments.
+			string label = F_("Enter a value for '%1%'", % name);
+
+			gtk_label_set_text(GTK_LABEL(getWidget("ucLabel")), label.c_str());
 			gtk_entry_set_text(GTK_ENTRY(getWidget("ucLineEntry")), "");
 			gtk_widget_grab_focus(getWidget("ucLineEntry"));
 
@@ -1249,7 +1250,7 @@
 		catch (const Exception &e)
 		{
 			string primaryText = _("Unable to open TCP/TLS port");
-			string secondaryText = _("File transfers will not work correctly until you change settings or turn off any application that might be using the TCP/TLS port.");
+			string secondaryText = _("File transfers will not work correctly until the connection settings are adjusted or any application using the port is closed.");
 			typedef Func2<MainWindow, string, string> F2;
 			F2* func = new F2(this, &MainWindow::showMessageDialog_gui, primaryText, secondaryText);
 			WulforManager::get()->dispatchGuiFunc(func);
@@ -1263,7 +1264,7 @@
 		catch (const Exception &e)
 		{
 			string primaryText = _("Unable to open UDP port");
-			string secondaryText = _("Searching will not work correctly until you change settings or turn off any application that might be using the UDP port.");
+			string secondaryText = _("Searching will not work correctly until the connection settings are adjusted or any application using the port is closed.");
 			typedef Func2<MainWindow, string, string> F2;
 			F2* func = new F2(this, &MainWindow::showMessageDialog_gui, primaryText, secondaryText);
 			WulforManager::get()->dispatchGuiFunc(func);

=== modified file 'linux/mainwindow.hh'
--- linux/mainwindow.hh	2010-09-10 01:26:40 +0000
+++ linux/mainwindow.hh	2011-01-25 05:11:20 +0000
@@ -22,6 +22,8 @@
 #ifndef WULFOR_MAIN_WINDOW_HH
 #define WULFOR_MAIN_WINDOW_HH
 
+#include "IntlUtil.hh"
+
 #include <dcpp/stdinc.h>
 #include <dcpp/DCPlusPlus.h>
 #include <dcpp/ConnectionManager.h>

=== modified file 'linux/privatemessage.cc'
--- linux/privatemessage.cc	2010-09-10 01:26:40 +0000
+++ linux/privatemessage.cc	2011-01-25 05:11:20 +0000
@@ -331,7 +331,7 @@
 				Util::setAway(TRUE);
 				Util::setManualAway(TRUE);
 				Util::setAwayMessage(param);
-				pm->addStatusMessage_gui(_("Away mode on: ") + Util::getAwayMessage());
+				pm->addStatusMessage_gui(F_("Away mode on: %1%", % Util::getAwayMessage()));
 			}
 		}
 		else if (command == _("back"))
@@ -376,7 +376,7 @@
 		}
 		else
 		{
-			pm->addStatusMessage_gui(_("Unknown command ") + text + _(": type /help for a list of available commands"));
+			pm->addStatusMessage_gui(F_("Unknown command '%1%': Type /help for a list of available commands", % text));
 		}
 	}
 	else
@@ -644,7 +644,7 @@
 		if (BOOLSETTING(SHOW_JOINS) || (BOOLSETTING(FAV_SHOW_JOINS) && 
 			FavoriteManager::getInstance()->isFavoriteUser(user)))
 		{
-			statusMessage = nicks + _(" has quit");
+			statusMessage = F_("%1% has quit", % nicks);
 		}
 
 		typedef Func4<PrivateMessage, string, string, bool, string> F4;

=== modified file 'linux/publichubs.cc'
--- linux/publichubs.cc	2010-01-01 00:57:24 +0000
+++ linux/publichubs.cc	2011-01-25 05:11:20 +0000
@@ -35,17 +35,17 @@
 
 	// Initialize public hub list treeview
 	hubView.setView(GTK_TREE_VIEW(getWidget("hubView")), true, "publichubs");
-	hubView.insertColumn("Name", G_TYPE_STRING, TreeView::STRING, 200);
-	hubView.insertColumn("Description", G_TYPE_STRING, TreeView::STRING, 350);
-	hubView.insertColumn("Users", G_TYPE_INT, TreeView::INT, 75);
-	hubView.insertColumn("Address", G_TYPE_STRING, TreeView::STRING, 110);
-	hubView.insertColumn("Country", G_TYPE_STRING, TreeView::STRING, 100);
-	hubView.insertColumn("Shared", G_TYPE_INT64, TreeView::SIZE, 70);
-	hubView.insertColumn("Min Share", G_TYPE_INT64, TreeView::SIZE, 80);
-	hubView.insertColumn("Min Slots", G_TYPE_INT, TreeView::INT, 70);
-	hubView.insertColumn("Max Hubs", G_TYPE_INT, TreeView::INT, 80);
-	hubView.insertColumn("Max Users", G_TYPE_INT, TreeView::INT, 80);
-	hubView.insertColumn("Rating", G_TYPE_STRING, TreeView::STRING, 70);
+	hubView.insertColumn(N_("Name"), G_TYPE_STRING, TreeView::STRING, 200);
+	hubView.insertColumn(N_("Description"), G_TYPE_STRING, TreeView::STRING, 350);
+	hubView.insertColumn(N_("Users"), G_TYPE_INT, TreeView::INT, 75);
+	hubView.insertColumn(N_("Address"), G_TYPE_STRING, TreeView::STRING, 110);
+	hubView.insertColumn(N_("Country"), G_TYPE_STRING, TreeView::STRING, 100);
+	hubView.insertColumn(N_("Shared"), G_TYPE_INT64, TreeView::SIZE, 70);
+	hubView.insertColumn(N_("Min Share"), G_TYPE_INT64, TreeView::SIZE, 80);
+	hubView.insertColumn(N_("Min Slots"), G_TYPE_INT, TreeView::INT, 70);
+	hubView.insertColumn(N_("Max Hubs"), G_TYPE_INT, TreeView::INT, 80);
+	hubView.insertColumn(N_("Max Users"), G_TYPE_INT, TreeView::INT, 80);
+	hubView.insertColumn(N_("Rating"), G_TYPE_STRING, TreeView::STRING, 70);
 	hubView.finalize();
 	hubStore = gtk_list_store_newv(hubView.getColCount(), hubView.getGTypes());
 	gtk_tree_view_set_model(hubView.get(), GTK_TREE_MODEL(hubStore));
@@ -169,8 +169,8 @@
 
 	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(hubStore), sortColumn, sortType);
 
-	setStatus_gui("statusHubs", _("Hubs: ") + Util::toString(numHubs));
-	setStatus_gui("statusUsers", _("Users: ") + Util::toString(numUsers));
+	setStatus_gui("statusHubs", P_("%1% Hub", "%1% Hubs", % numHubs, numHubs));
+	setStatus_gui("statusUsers", P_("%1% User", "%1% Users", % numUsers, numUsers));
 }
 
 void PublicHubs::setStatus_gui(string statusBar, string text)
@@ -427,7 +427,7 @@
 
 void PublicHubs::on(FavoriteManagerListener::DownloadStarting, const string &file) throw()
 {
-	string msg = _("Download starting: ") + file;
+	string msg = _("Download starting");
 	typedef Func2<PublicHubs, string, string> Func;
 	Func *func = new Func(this, &PublicHubs::setStatus_gui, "statusMain", msg);
 	WulforManager::get()->dispatchGuiFunc(func);
@@ -435,7 +435,7 @@
 
 void PublicHubs::on(FavoriteManagerListener::DownloadFailed, const string &file) throw()
 {
-	string msg = _("Download failed: ") + file;
+	string msg = F_("Download failed: %1%", % file);
 	typedef Func2<PublicHubs, string, string> Func;
 	Func *func = new Func(this, &PublicHubs::setStatus_gui, "statusMain", msg);
 	WulforManager::get()->dispatchGuiFunc(func);
@@ -443,7 +443,7 @@
 
 void PublicHubs::on(FavoriteManagerListener::DownloadFinished, const string &file) throw()
 {
-	string msg = _("Download finished: ") + file;
+	string msg = _("Download finished");
 	typedef Func2<PublicHubs, string, string> Func;
 	Func *f2 = new Func(this, &PublicHubs::setStatus_gui, "statusMain", msg);
 	WulforManager::get()->dispatchGuiFunc(f2);

=== modified file 'linux/search.cc'
--- linux/search.cc	2010-10-29 19:44:50 +0000
+++ linux/search.cc	2011-01-25 05:11:20 +0000
@@ -38,6 +38,10 @@
 
 Search::Search():
 	BookEntry(Entry::SEARCH, _("Search"), "search.glade", generateID()),
+	droppedResult(0),
+	searchHits(0),
+	isHash(false),
+	onlyFree(BOOLSETTING(SEARCH_ONLY_FREE_SLOTS)),
 	previousGrouping(NOGROUPING)
 {
 	// Initialize the search entries combo box
@@ -53,7 +57,6 @@
 	gtk_dialog_set_alternative_button_order(GTK_DIALOG(getWidget("dirChooserDialog")), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
 
 	// Initialize check button options.
-	onlyFree = BOOLSETTING(SEARCH_ONLY_FREE_SLOTS);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("checkbuttonSlots")), onlyFree);
 	gtk_widget_set_sensitive(GTK_WIDGET(getWidget("checkbuttonSlots")), FALSE);
 	gtk_widget_set_sensitive(GTK_WIDGET(getWidget("checkbuttonShared")), FALSE);
@@ -79,17 +82,17 @@
 
 	// Initialize search result treeview
 	resultView.setView(GTK_TREE_VIEW(getWidget("treeviewResult")), TRUE, "search");
-	resultView.insertColumn("Filename", G_TYPE_STRING, TreeView::ICON_STRING, 250, "Icon");
-	resultView.insertColumn("User", G_TYPE_STRING, TreeView::STRING, 100);
-	resultView.insertColumn("Type", G_TYPE_STRING, TreeView::STRING, 65);
-	resultView.insertColumn("Size", G_TYPE_STRING, TreeView::STRING, 80);
-	resultView.insertColumn("Path", G_TYPE_STRING, TreeView::STRING, 100);
-	resultView.insertColumn("Slots", G_TYPE_STRING, TreeView::STRING, 50);
-	resultView.insertColumn("Connection", G_TYPE_STRING, TreeView::STRING, 90);
-	resultView.insertColumn("Hub", G_TYPE_STRING, TreeView::STRING, 150);
-	resultView.insertColumn("Exact Size", G_TYPE_STRING, TreeView::STRING, 80);
-	resultView.insertColumn("IP", G_TYPE_STRING, TreeView::STRING, 100);
-	resultView.insertColumn("TTH", G_TYPE_STRING, TreeView::STRING, 125);
+	resultView.insertColumn(N_("Filename"), G_TYPE_STRING, TreeView::ICON_STRING, 250, "Icon");
+	resultView.insertColumn(N_("User"), G_TYPE_STRING, TreeView::STRING, 100);
+	resultView.insertColumn(N_("Type"), G_TYPE_STRING, TreeView::STRING, 65);
+	resultView.insertColumn(N_("Size"), G_TYPE_STRING, TreeView::STRING, 80);
+	resultView.insertColumn(N_("Path"), G_TYPE_STRING, TreeView::STRING, 100);
+	resultView.insertColumn(N_("Slots"), G_TYPE_STRING, TreeView::STRING, 50);
+	resultView.insertColumn(N_("Connection"), G_TYPE_STRING, TreeView::STRING, 90);
+	resultView.insertColumn(N_("Hub"), G_TYPE_STRING, TreeView::STRING, 150);
+	resultView.insertColumn(N_("Exact Size"), G_TYPE_STRING, TreeView::STRING, 80);
+	resultView.insertColumn(N_("IP"), G_TYPE_STRING, TreeView::STRING, 100);
+	resultView.insertColumn(N_("TTH"), G_TYPE_STRING, TreeView::STRING, 125);
 	resultView.insertHiddenColumn("Icon", G_TYPE_STRING);
 	resultView.insertHiddenColumn("Real Size", G_TYPE_INT64);
 	resultView.insertHiddenColumn("Slots Order", G_TYPE_INT);
@@ -161,6 +164,7 @@
 void Search::show()
 {
 	initHubs_gui();
+	updateStats_gui();
 	ClientManager::getInstance()->addListener(this);
 	SearchManager::getInstance()->addListener(this);
 }
@@ -295,7 +299,8 @@
 	}
 
 	// Add Browse item
-	menuItem = gtk_menu_item_new_with_label(_("Browse..."));
+	menuItem = gtk_menu_item_new_with_label(_("_Browse..."));
+	gtk_menu_item_set_use_underline(GTK_MENU_ITEM(menuItem), TRUE);
 	g_signal_connect(menuItem, "activate", G_CALLBACK(onDownloadToClicked_gui), (gpointer)this);
 	gtk_menu_shell_append(GTK_MENU_SHELL(getWidget("downloadMenu")), menuItem);
 
@@ -366,7 +371,8 @@
 		gtk_menu_shell_append(GTK_MENU_SHELL(getWidget("downloadDirMenu")), menuItem);
 	}
 
-	menuItem = gtk_menu_item_new_with_label(_("Browse..."));
+	menuItem = gtk_menu_item_new_with_label(_("_Browse..."));
+	gtk_menu_item_set_use_underline(GTK_MENU_ITEM(menuItem), TRUE);
 	g_signal_connect(menuItem, "activate", G_CALLBACK(onDownloadDirToClicked_gui), (gpointer)this);
 	gtk_menu_shell_append(GTK_MENU_SHELL(getWidget("downloadDirMenu")), menuItem);
 
@@ -383,6 +389,15 @@
 	gtk_statusbar_push(GTK_STATUSBAR(getWidget(statusBar)), 0, text.c_str());
 }
 
+void Search::updateStats_gui()
+{
+	// TRANSLATORS: Appears in the status bar when a valid search result is received.
+	setStatus_gui("statusbar2", P_("%1% Result", "%1% Results", % searchHits, searchHits));
+
+	// TRANSLATORS: Appears in the status bar when a search result is ignored/dropped.
+	setStatus_gui("statusbar3", F_("%1% Dropped", % droppedResult));
+}
+
 void Search::search_gui()
 {
 	StringList clients;
@@ -459,9 +474,8 @@
 
 	droppedResult = 0;
 	searchHits = 0;
-	setStatus_gui("statusbar1", _("Searching for ") + text + " ...");
-	setStatus_gui("statusbar2", _("0 items"));
-	setStatus_gui("statusbar3", _("0 filtered"));
+	setStatus_gui("statusbar1", F_("Searching for %1%...", % text));
+	updateStats_gui();
 	setLabel_gui(text);
 
 	if (SearchManager::getInstance()->okToSearch())
@@ -474,10 +488,8 @@
 	else
 	{
 		int32_t waitFor = SearchManager::getInstance()->timeToSearch();
-		string line = _("Searching too soon, retry in ") + Util::toString(waitFor) + " s";
+		string line = F_("Searching too soon, retry in %1% s", % waitFor);
 		setStatus_gui("statusbar1", line);
-		setStatus_gui("statusbar2", "");
-		setStatus_gui("statusbar3", "");
 	}
 }
 
@@ -556,7 +568,7 @@
 		updateParentRow_gui(&parent, &iter);
 
 	++searchHits;
-	setStatus_gui("statusbar2", Util::toString(searchHits) + _(" items"));
+	updateStats_gui();
 
 	if (BOOLSETTING(BOLD_SEARCH))
 		setBold_gui();
@@ -595,7 +607,7 @@
 	gint children = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(resultStore), parent);
 	dcassert(children != 0);
 
-	string users = Util::toString(children) + _(" user(s)");
+	string users = P_("%1% User", "%1% Users", % children, children);
 	gtk_tree_store_set(resultStore, parent, resultView.col("User"), users.c_str(), -1);
 
 	if (child == NULL)
@@ -1740,14 +1752,12 @@
 	if (searchlist.empty() || result == NULL)
 		return;
 
-	typedef Func2<Search, string, string> F2;
-
 	if (isHash)
 	{
 		if (result->getType() != SearchResult::TYPE_FILE || TTHValue(searchlist[0]) != result->getTTH())
 		{
 			++droppedResult;
-			F2 *func = new F2(this, &Search::setStatus_gui, "statusbar3", Util::toString(droppedResult) + _(" filtered"));
+			Func0<Search> *func = new Func0<Search>(this, &Search::updateStats_gui);
 			WulforManager::get()->dispatchGuiFunc(func);
 			return;
 		}
@@ -1760,7 +1770,7 @@
 			    (*i->begin() == '-' && i->size() != 1 && Util::findSubString(result->getFile(), i->substr(1)) != (string::size_type)-1))
 			{
 				++droppedResult;
-				F2 *func = new F2(this, &Search::setStatus_gui, "statusbar3", Util::toString(droppedResult) + _(" dropped"));
+				Func0<Search> *func = new Func0<Search>(this, &Search::updateStats_gui);
 				WulforManager::get()->dispatchGuiFunc(func);
 				return;
 			}

=== modified file 'linux/search.hh'
--- linux/search.hh	2010-09-05 06:03:16 +0000
+++ linux/search.hh	2011-01-25 05:11:20 +0000
@@ -67,6 +67,7 @@
 		void removeHub_gui(std::string url);
 		void popupMenu_gui();
 		void setStatus_gui(std::string statusBar, std::string text);
+		void updateStats_gui();
 		void search_gui();
 		void addResult_gui(const dcpp::SearchResultPtr result);
 		GtkTreeIter createParentRow_gui(GtkTreeIter *child, const std::string &groupStr, gint position = -1);

=== modified file 'linux/settingsdialog.cc'
--- linux/settingsdialog.cc	2010-07-27 04:26:37 +0000
+++ linux/settingsdialog.cc	2011-01-25 05:11:20 +0000
@@ -38,10 +38,8 @@
 	// Configure the dialogs.
 	gtk_dialog_set_alternative_button_order(GTK_DIALOG(getWidget("dialog")), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
 	gtk_dialog_set_alternative_button_order(GTK_DIALOG(getWidget("favoriteNameDialog")), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
-	gtk_dialog_set_alternative_button_order(GTK_DIALOG(getWidget("publicHubsDialog")), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
 	gtk_dialog_set_alternative_button_order(GTK_DIALOG(getWidget("virtualNameDialog")), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
 	gtk_dialog_set_alternative_button_order(GTK_DIALOG(getWidget("dirChooserDialog")), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
-	gtk_dialog_set_alternative_button_order(GTK_DIALOG(getWidget("fileChooserDialog")), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
 
 	// Initialize the tabs in the GtkNotebook.
 	initPersonal_gui();
@@ -59,10 +57,8 @@
 		saveSettings_client();
 
 	gtk_widget_destroy(getWidget("favoriteNameDialog"));
-	gtk_widget_destroy(getWidget("publicHubsDialog"));
 	gtk_widget_destroy(getWidget("virtualNameDialog"));
 	gtk_widget_destroy(getWidget("dirChooserDialog"));
-	gtk_widget_destroy(getWidget("fileChooserDialog"));
 	gtk_widget_destroy(getWidget("commandDialog"));
 }
 
@@ -75,7 +71,8 @@
 		sm->set(SettingsManager::NICK, gtk_entry_get_text(GTK_ENTRY(getWidget("nickEntry"))));
 		sm->set(SettingsManager::EMAIL, gtk_entry_get_text(GTK_ENTRY(getWidget("emailEntry"))));
 		sm->set(SettingsManager::DESCRIPTION, gtk_entry_get_text(GTK_ENTRY(getWidget("descriptionEntry"))));
-		sm->set(SettingsManager::UPLOAD_SPEED, SettingsManager::connectionSpeeds[gtk_combo_box_get_active(connectionSpeedComboBox)]);
+		gint speed = gtk_combo_box_get_active(GTK_COMBO_BOX(getWidget("speedComboBox")));
+		sm->set(SettingsManager::UPLOAD_SPEED, SettingsManager::connectionSpeeds[speed]);
 
 		gchar *encoding = gtk_combo_box_get_active_text(GTK_COMBO_BOX(getWidget("comboboxCharset")));
 		WSET("default-charset", string(encoding));
@@ -125,19 +122,27 @@
 	}
 
 	{ // Downloads
-		path = gtk_entry_get_text(GTK_ENTRY(getWidget("finishedDownloadsEntry")));
-		if (path[path.length() - 1] != PATH_SEPARATOR)
-			path += PATH_SEPARATOR;
-		sm->set(SettingsManager::DOWNLOAD_DIRECTORY, path);
+		saveFileChooserPath_gui(getWidget("finishedDownloadsFileChooserButton"), SettingsManager::DOWNLOAD_DIRECTORY);
+		saveFileChooserPath_gui(getWidget("unfinishedDownloadsFileChooserButton"), SettingsManager::TEMP_DOWNLOAD_DIRECTORY);
 
-		path = gtk_entry_get_text(GTK_ENTRY(getWidget("unfinishedDownloadsEntry")));
-		if (!path.empty() && path[path.length() - 1] != PATH_SEPARATOR)
-			path += PATH_SEPARATOR;
-		sm->set(SettingsManager::TEMP_DOWNLOAD_DIRECTORY, path);
 		sm->set(SettingsManager::DOWNLOAD_SLOTS, (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("maxDownloadsSpinButton"))));
 		sm->set(SettingsManager::MAX_DOWNLOAD_SPEED, (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("newDownloadsSpinButton"))));
 		sm->set(SettingsManager::HTTP_PROXY, gtk_entry_get_text(GTK_ENTRY(getWidget("proxyEntry"))));
 
+		// Public Hubs List Tree View
+		string lists;
+		GtkTreeIter iter;
+		GtkTreeModel *m = GTK_TREE_MODEL(publicListStore);
+		gboolean valid = gtk_tree_model_get_iter_first(m, &iter);
+		while (valid)
+		{
+			lists += publicListView.getString(&iter, "List") + ";";
+			valid = gtk_tree_model_iter_next(m, &iter);
+		}
+		if (!lists.empty())
+			lists.erase(lists.size() - 1);
+		SettingsManager::getInstance()->set(SettingsManager::HUBLIST_SERVERS, lists);
+
 		{ // Queue
 			// Auto-priority
 			sm->set(SettingsManager::PRIO_HIGHEST_SIZE, Util::toString(gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("priorityHighestSpinButton")))));
@@ -198,10 +203,8 @@
 	}
 
 	{ // Logs
-		path = gtk_entry_get_text(GTK_ENTRY(getWidget("logDirectoryEntry")));
-		if (!path.empty() && path[path.length() - 1] != PATH_SEPARATOR)
-			path += PATH_SEPARATOR;
-		sm->set(SettingsManager::LOG_DIRECTORY, path);
+		saveFileChooserPath_gui(getWidget("logDirectoryFileChooserButton"), SettingsManager::LOG_DIRECTORY);
+
 		sm->set(SettingsManager::LOG_MAIN_CHAT, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(getWidget("logMainCheckButton"))));
 		sm->set(SettingsManager::LOG_FORMAT_MAIN_CHAT, string(gtk_entry_get_text(GTK_ENTRY(getWidget("logMainEntry")))));
 		sm->set(SettingsManager::LOG_PRIVATE_CHAT, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(getWidget("logPrivateCheckButton"))));
@@ -230,13 +233,11 @@
 		sm->set(SettingsManager::BIND_ADDRESS, string(gtk_entry_get_text(GTK_ENTRY(getWidget("bindAddressEntry")))));
 		sm->set(SettingsManager::SOCKET_IN_BUFFER, Util::toString(gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("socketReadSpinButton")))));
 		sm->set(SettingsManager::SOCKET_OUT_BUFFER, Util::toString(gtk_spin_button_get_value(GTK_SPIN_BUTTON(getWidget("socketWriteSpinButton")))));
+
 		// Security Certificates
-		path = gtk_entry_get_text(GTK_ENTRY(getWidget("trustedCertificatesPathEntry")));
-		if (!path.empty() && path[path.length() - 1] != PATH_SEPARATOR)
-			path += PATH_SEPARATOR;
-		sm->set(SettingsManager::TLS_PRIVATE_KEY_FILE, string(gtk_entry_get_text(GTK_ENTRY(getWidget("privateKeyEntry")))));
-		sm->set(SettingsManager::TLS_CERTIFICATE_FILE, string(gtk_entry_get_text(GTK_ENTRY(getWidget("certificateFileEntry")))));
-		sm->set(SettingsManager::TLS_TRUSTED_CERTIFICATES_PATH, path);
+		saveFileChooserPath_gui(getWidget("privateKeyFileChooserButton"), SettingsManager::TLS_PRIVATE_KEY_FILE);
+		saveFileChooserPath_gui(getWidget("certificateFileChooserButton"), SettingsManager::TLS_CERTIFICATE_FILE);
+		saveFileChooserPath_gui(getWidget("trustedCertificatesPathFileChooserButton"), SettingsManager::TLS_TRUSTED_CERTIFICATES_PATH);
 
 		saveOptionsView_gui(certificatesView);
 	}
@@ -328,14 +329,29 @@
 	}
 }
 
+void Settings::saveFileChooserPath_gui(GtkWidget *fileChooser, dcpp::SettingsManager::StrSetting setting)
+{
+	gchar *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fileChooser));
+	if (path)
+	{
+		if (!g_str_has_suffix(path, G_DIR_SEPARATOR_S))
+		{
+			gchar *tmp = g_strconcat(path, G_DIR_SEPARATOR_S, NULL);
+			g_free(path);
+			path = tmp;
+		}
+
+		SettingsManager::getInstance()->set(setting, path);
+		g_free(path);
+	}
+}
+
 void Settings::initPersonal_gui()
 {
 	gtk_entry_set_text(GTK_ENTRY(getWidget("nickEntry")), SETTING(NICK).c_str());
 	gtk_entry_set_text(GTK_ENTRY(getWidget("emailEntry")), SETTING(EMAIL).c_str());
 	gtk_entry_set_text(GTK_ENTRY(getWidget("descriptionEntry")), SETTING(DESCRIPTION).c_str());
-	connectionSpeedComboBox = GTK_COMBO_BOX(gtk_combo_box_new_text());
-	gtk_box_pack_start(GTK_BOX(getWidget("connectionBox")), GTK_WIDGET(connectionSpeedComboBox), FALSE, TRUE, 0);
-	gtk_widget_show_all(GTK_WIDGET(connectionSpeedComboBox));
+	GtkComboBox *connectionSpeedComboBox = GTK_COMBO_BOX(getWidget("speedComboBox"));
 
 	for (StringIter i = SettingsManager::connectionSpeeds.begin(); i != SettingsManager::connectionSpeeds.end(); ++i)
 	{
@@ -412,21 +428,18 @@
 void Settings::initDownloads_gui()
 {
 	{ // Downloads
-		g_signal_connect(getWidget("finishedDownloadsButton"), "clicked", G_CALLBACK(onBrowseFinished_gui), (gpointer)this);
-		g_signal_connect(getWidget("unfinishedDownloadsButton"), "clicked", G_CALLBACK(onBrowseUnfinished_gui), (gpointer)this);
-		g_signal_connect(getWidget("publicHubsButton"), "clicked", G_CALLBACK(onPublicHubs_gui), (gpointer)this);
-		g_signal_connect(getWidget("publicHubsDialogAddButton"), "clicked", G_CALLBACK(onPublicAdd_gui), (gpointer)this);
-		g_signal_connect(getWidget("publicHubsDialogUpButton"), "clicked", G_CALLBACK(onPublicMoveUp_gui), (gpointer)this);
-		g_signal_connect(getWidget("publicHubsDialogDownButton"), "clicked", G_CALLBACK(onPublicMoveDown_gui), (gpointer)this);
-		g_signal_connect(getWidget("publicHubsDialogRemoveButton"), "clicked", G_CALLBACK(onPublicRemove_gui), (gpointer)this);
+		g_signal_connect(getWidget("publicHubsAddButton"), "clicked", G_CALLBACK(onPublicAdd_gui), (gpointer)this);
+		g_signal_connect(getWidget("publicHubsUpButton"), "clicked", G_CALLBACK(onPublicMoveUp_gui), (gpointer)this);
+		g_signal_connect(getWidget("publicHubsDownButton"), "clicked", G_CALLBACK(onPublicMoveDown_gui), (gpointer)this);
+		g_signal_connect(getWidget("publicHubsRemoveButton"), "clicked", G_CALLBACK(onPublicRemove_gui), (gpointer)this);
 
-		gtk_entry_set_text(GTK_ENTRY(getWidget("finishedDownloadsEntry")), SETTING(DOWNLOAD_DIRECTORY).c_str());
-		gtk_entry_set_text(GTK_ENTRY(getWidget("unfinishedDownloadsEntry")), SETTING(TEMP_DOWNLOAD_DIRECTORY).c_str());
+		gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(getWidget("finishedDownloadsFileChooserButton")), SETTING(DOWNLOAD_DIRECTORY).c_str());
+		gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(getWidget("unfinishedDownloadsFileChooserButton")), SETTING(TEMP_DOWNLOAD_DIRECTORY).c_str());
 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(getWidget("maxDownloadsSpinButton")), (double)SETTING(DOWNLOAD_SLOTS));
 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(getWidget("newDownloadsSpinButton")), (double)SETTING(MAX_DOWNLOAD_SPEED));
 		gtk_entry_set_text(GTK_ENTRY(getWidget("proxyEntry")), SETTING(HTTP_PROXY).c_str());
 
-		publicListView.setView(GTK_TREE_VIEW(getWidget("publicHubsDialogTreeView")));
+		publicListView.setView(GTK_TREE_VIEW(getWidget("publicHubsTreeView")));
 		publicListView.insertColumn("List", G_TYPE_STRING, TreeView::EDIT_STRING, -1);
 		publicListView.finalize();
 		publicListStore = gtk_list_store_newv(publicListView.getColCount(), publicListView.getGTypes());
@@ -438,14 +451,23 @@
 		GObject *editRenderer = G_OBJECT(g_list_nth_data(list, 0));
 		g_list_free(list);
 		g_signal_connect(editRenderer, "edited", G_CALLBACK(onPublicEdit_gui), (gpointer)this);
+
+		// Populate the public hubs list tree view
+		StringList lists = FavoriteManager::getInstance()->getHubLists();
+		for (StringList::iterator list = lists.begin(); list != lists.end(); ++list)
+		{
+			GtkTreeIter iter;
+			gtk_list_store_append(publicListStore, &iter);
+			gtk_list_store_set(publicListStore, &iter, publicListView.col("List"), list->c_str(), -1);
+		}
 	}
 
 	{ // Download to
 		g_signal_connect(getWidget("favoriteAddButton"), "clicked", G_CALLBACK(onAddFavorite_gui), (gpointer)this);
 		g_signal_connect(getWidget("favoriteRemoveButton"), "clicked", G_CALLBACK(onRemoveFavorite_gui), (gpointer)this);
 		downloadToView.setView(GTK_TREE_VIEW(getWidget("favoriteTreeView")));
-		downloadToView.insertColumn("Favorite Name", G_TYPE_STRING, TreeView::STRING, -1);
-		downloadToView.insertColumn("Directory", G_TYPE_STRING, TreeView::STRING, -1);
+		downloadToView.insertColumn(N_("Favorite Name"), G_TYPE_STRING, TreeView::STRING, -1);
+		downloadToView.insertColumn(N_("Directory"), G_TYPE_STRING, TreeView::STRING, -1);
 		downloadToView.finalize();
 		downloadToStore = gtk_list_store_newv(downloadToView.getColCount(), downloadToView.getGTypes());
 		gtk_tree_view_set_model(downloadToView.get(), GTK_TREE_MODEL(downloadToStore));
@@ -490,7 +512,7 @@
 		addOption_gui(queueStore, _("Automatically search for alternative download locations"), SettingsManager::AUTO_SEARCH);
 		addOption_gui(queueStore, _("Automatically match queue for auto search hits"), SettingsManager::AUTO_SEARCH_AUTO_MATCH);
 		addOption_gui(queueStore, _("Skip zero-byte files"), SettingsManager::SKIP_ZERO_BYTE);
-		addOption_gui(queueStore, _("Don't download files already in share"), SettingsManager::DONT_DL_ALREADY_SHARED);
+		addOption_gui(queueStore, _("Don't download files already in the share"), SettingsManager::DONT_DL_ALREADY_SHARED);
 		addOption_gui(queueStore, _("Don't download files already in the queue"), SettingsManager::DONT_DL_ALREADY_QUEUED);
 	}
 }
@@ -502,9 +524,9 @@
 	g_signal_connect(getWidget("sharedRemoveButton"), "clicked", G_CALLBACK(onRemoveShare_gui), (gpointer)this);
 
 	shareView.setView(GTK_TREE_VIEW(getWidget("sharedTreeView")));
-	shareView.insertColumn("Virtual Name", G_TYPE_STRING, TreeView::STRING, -1);
-	shareView.insertColumn("Directory", G_TYPE_STRING, TreeView::STRING, -1);
-	shareView.insertColumn("Size", G_TYPE_STRING, TreeView::STRING, -1);
+	shareView.insertColumn(N_("Virtual Name"), G_TYPE_STRING, TreeView::STRING, -1);
+	shareView.insertColumn(N_("Directory"), G_TYPE_STRING, TreeView::STRING, -1);
+	shareView.insertColumn(N_("Size"), G_TYPE_STRING, TreeView::STRING, -1);
 	shareView.insertHiddenColumn("Real Size", G_TYPE_INT64);
 	shareView.finalize();
 	shareStore = gtk_list_store_newv(shareView.getColCount(), shareView.getGTypes());
@@ -527,7 +549,9 @@
 			-1);
 	}
 
-	gtk_label_set_text(GTK_LABEL(getWidget("sharedSizeLabel")), string("Total size: " + Util::formatBytes(ShareManager::getInstance()->getShareSize())).c_str());
+	int64_t shareSize = ShareManager::getInstance()->getShareSize();
+	string shareSizeText = F_("Total share size: %1%", % Util::formatBytes(shareSize));
+	gtk_label_set_text(GTK_LABEL(getWidget("sharedSizeLabel")), shareSizeText.c_str());
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("shareHiddenCheckButton")), BOOLSETTING(SHARE_HIDDEN));
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("followLinksCheckButton")), BOOLSETTING(FOLLOW_LINKS));
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(getWidget("sharedExtraSlotSpinButton")), (double)SETTING(MIN_UPLOAD_SPEED));
@@ -573,21 +597,14 @@
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("soundPMReceivedCheckButton")), BOOLSETTING(PRIVATE_MESSAGE_BEEP));
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("soundPMWindowCheckButton")), BOOLSETTING(PRIVATE_MESSAGE_BEEP_OPEN));
 		*/
-		gtk_widget_set_sensitive(getWidget("soundPMReceivedCheckButton"), FALSE);
-		gtk_widget_set_sensitive(getWidget("soundPMWindowCheckButton"), FALSE);
-
-		gtk_widget_set_sensitive(getWidget("appearanceColor"), FALSE);
-		gtk_widget_set_sensitive(getWidget("upColor"), FALSE);
-		gtk_widget_set_sensitive(getWidget("downColor"), FALSE);
-		gtk_widget_set_sensitive(getWidget("textStyle"), FALSE);
 
 		createOptionsView_gui(colorView, colorStore, "tabBoldingTreeView");
 
 		addOption_gui(colorStore, _("Finished Downloads"), SettingsManager::BOLD_FINISHED_DOWNLOADS);
 		addOption_gui(colorStore, _("Finished Uploads"), SettingsManager::BOLD_FINISHED_UPLOADS);
 		addOption_gui(colorStore, _("Download Queue"), SettingsManager::BOLD_QUEUE);
-		addOption_gui(colorStore, _("Hub (also sets urgency hint)"), SettingsManager::BOLD_HUB);
-		addOption_gui(colorStore, _("Private Message (also sets urgency hint)"), SettingsManager::BOLD_PM);
+		addOption_gui(colorStore, _("Hub"), SettingsManager::BOLD_HUB);
+		addOption_gui(colorStore, _("Private Message"), SettingsManager::BOLD_PM);
 		addOption_gui(colorStore, _("Search"), SettingsManager::BOLD_SEARCH);
 	}
 
@@ -607,7 +624,7 @@
 
 		addOption_gui(windowStore2, _("Open file list window in the background"), SettingsManager::POPUNDER_FILELIST);
 		addOption_gui(windowStore2, _("Open new private messages from other users in the background"), SettingsManager::POPUNDER_PM);
-		addOption_gui(windowStore2, _("Open new window when using /join"), SettingsManager::JOIN_OPEN_NEW_WINDOW);
+		addOption_gui(windowStore2, _("Open a new window when using /join"), SettingsManager::JOIN_OPEN_NEW_WINDOW);
 		addOption_gui(windowStore2, _("Ignore private messages from the hub"), SettingsManager::IGNORE_HUB_PMS);
 		addOption_gui(windowStore2, _("Ignore private messages from bots"), SettingsManager::IGNORE_BOT_PMS);
 
@@ -623,32 +640,23 @@
 
 void Settings::initLog_gui()
 {
-	g_signal_connect(getWidget("logBrowseButton"), "clicked", G_CALLBACK(onLogBrowseClicked_gui), (gpointer)this);
-	gtk_entry_set_text(GTK_ENTRY(getWidget("logDirectoryEntry")), SETTING(LOG_DIRECTORY).c_str());
+	gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(getWidget("logDirectoryFileChooserButton")), SETTING(LOG_DIRECTORY).c_str());
 
 	g_signal_connect(getWidget("logMainCheckButton"), "toggled", G_CALLBACK(onLogMainClicked_gui), (gpointer)this);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("logMainCheckButton")), BOOLSETTING(LOG_MAIN_CHAT));
 	gtk_entry_set_text(GTK_ENTRY(getWidget("logMainEntry")), SETTING(LOG_FORMAT_MAIN_CHAT).c_str());
-	gtk_widget_set_sensitive(getWidget("logMainLabel"), BOOLSETTING(LOG_MAIN_CHAT));
-	gtk_widget_set_sensitive(getWidget("logMainEntry"), BOOLSETTING(LOG_MAIN_CHAT));
 
 	g_signal_connect(getWidget("logPrivateCheckButton"), "toggled", G_CALLBACK(onLogPrivateClicked_gui), (gpointer)this);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("logPrivateCheckButton")), BOOLSETTING(LOG_PRIVATE_CHAT));
 	gtk_entry_set_text(GTK_ENTRY(getWidget("logPrivateEntry")), SETTING(LOG_FORMAT_PRIVATE_CHAT).c_str());
-	gtk_widget_set_sensitive(getWidget("logPrivateLabel"), BOOLSETTING(LOG_PRIVATE_CHAT));
-	gtk_widget_set_sensitive(getWidget("logPrivateEntry"), BOOLSETTING(LOG_PRIVATE_CHAT));
 
 	g_signal_connect(getWidget("logDownloadsCheckButton"), "toggled", G_CALLBACK(onLogDownloadClicked_gui), (gpointer)this);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("logDownloadsCheckButton")), BOOLSETTING(LOG_DOWNLOADS));
 	gtk_entry_set_text(GTK_ENTRY(getWidget("logDownloadsEntry")), SETTING(LOG_FORMAT_POST_DOWNLOAD).c_str());
-	gtk_widget_set_sensitive(getWidget("logDownloadsLabel"), BOOLSETTING(LOG_DOWNLOADS));
-	gtk_widget_set_sensitive(getWidget("logDownloadsEntry"), BOOLSETTING(LOG_DOWNLOADS));
 
 	g_signal_connect(getWidget("logUploadsCheckButton"), "toggled", G_CALLBACK(onLogUploadClicked_gui), (gpointer)this);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("logUploadsCheckButton")), BOOLSETTING(LOG_UPLOADS));
 	gtk_entry_set_text(GTK_ENTRY(getWidget("logUploadsEntry")), SETTING(LOG_FORMAT_POST_UPLOAD).c_str());
-	gtk_widget_set_sensitive(getWidget("logUploadsLabel"), BOOLSETTING(LOG_UPLOADS));
-	gtk_widget_set_sensitive(getWidget("logUploadsEntry"), BOOLSETTING(LOG_UPLOADS));
 
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("logSystemCheckButton")), BOOLSETTING(LOG_SYSTEM));
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(getWidget("logStatusCheckButton")), BOOLSETTING(LOG_STATUS_MESSAGES));
@@ -669,11 +677,11 @@
 		addOption_gui(advancedStore, _("Enable segmented downloads"), SettingsManager::SEGMENTED_DL);
 		addOption_gui(advancedStore, _("Enable automatic SFV checking"), SettingsManager::SFV_CHECK);
 		addOption_gui(advancedStore, _("Enable safe and compressed transfers"), SettingsManager::COMPRESS_TRANSFERS);
-		addOption_gui(advancedStore, _("Accept custom user commands from hub"), SettingsManager::HUB_USER_COMMANDS);
+		addOption_gui(advancedStore, _("Accept custom user commands from the hub"), SettingsManager::HUB_USER_COMMANDS);
 		addOption_gui(advancedStore, _("Send unknown /commands to the hub"), SettingsManager::SEND_UNKNOWN_COMMANDS);
-		addOption_gui(advancedStore, _("Add finished files to share instantly (if shared)"), SettingsManager::ADD_FINISHED_INSTANTLY);
+		addOption_gui(advancedStore, _("Add finished files to the share instantly (if shared)"), SettingsManager::ADD_FINISHED_INSTANTLY);
 		addOption_gui(advancedStore, _("Don't send the away message to bots"), SettingsManager::NO_AWAYMSG_TO_BOTS);
-		addOption_gui(advancedStore, _("Use fast hashing method (disable if you have problems with hashing)"), SettingsManager::FAST_HASH);
+		addOption_gui(advancedStore, _("Use fast hashing method"), SettingsManager::FAST_HASH);
 		/// @todo: Uncomment when implemented
 		//addOption_gui(advancedStore, _("Register with the OS to handle dchub:// and adc:// URL links"), SettingsManager::URL_HANDLER);
 		//addOption_gui(advancedStore, _("Register with the OS to handle magnet: URL links"), SettingsManager::MAGNET_REGISTER);
@@ -682,9 +690,9 @@
 
 	{ // User Commands
 		userCommandView.setView(GTK_TREE_VIEW(getWidget("userCommandTreeView")));
-		userCommandView.insertColumn("Name", G_TYPE_STRING, TreeView::STRING, -1);
-		userCommandView.insertColumn("Hub", G_TYPE_STRING, TreeView::STRING, -1);
-		userCommandView.insertColumn("Command", G_TYPE_STRING, TreeView::STRING, -1);
+		userCommandView.insertColumn(N_("Name"), G_TYPE_STRING, TreeView::STRING, -1);
+		userCommandView.insertColumn(N_("Hub"), G_TYPE_STRING, TreeView::STRING, -1);
+		userCommandView.insertColumn(N_("Command"), G_TYPE_STRING, TreeView::STRING, -1);
 		userCommandView.finalize();
 		userCommandStore = gtk_list_store_newv(userCommandView.getColCount(), userCommandView.getGTypes());
 		gtk_tree_view_set_model(userCommandView.get(), GTK_TREE_MODEL(userCommandStore));
@@ -726,18 +734,15 @@
 	}
 
 	{ // Security Certificates
-		gtk_entry_set_text(GTK_ENTRY(getWidget("privateKeyEntry")), SETTING(TLS_PRIVATE_KEY_FILE).c_str());
-		gtk_entry_set_text(GTK_ENTRY(getWidget("certificateFileEntry")), SETTING(TLS_CERTIFICATE_FILE).c_str());
-		gtk_entry_set_text(GTK_ENTRY(getWidget("trustedCertificatesPathEntry")), SETTING(TLS_TRUSTED_CERTIFICATES_PATH).c_str());
-		g_signal_connect(getWidget("privateKeyButton"), "clicked", G_CALLBACK(onCertificatesPrivateBrowseClicked_gui), (gpointer)this);
-		g_signal_connect(getWidget("certificateFileButton"), "clicked", G_CALLBACK(onCertificatesFileBrowseClicked_gui), (gpointer)this);
-		g_signal_connect(getWidget("trustedCertificatesPathButton"), "clicked", G_CALLBACK(onCertificatesPathBrowseClicked_gui), (gpointer)this);
+		gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(getWidget("privateKeyFileChooserButton")), SETTING(TLS_PRIVATE_KEY_FILE).c_str());
+		gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(getWidget("certificateFileChooserButton")), SETTING(TLS_CERTIFICATE_FILE).c_str());
+		gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(getWidget("trustedCertificatesPathFileChooserButton")), SETTING(TLS_TRUSTED_CERTIFICATES_PATH).c_str());
 
 		createOptionsView_gui(certificatesView, certificatesStore, "certificatesTreeView");
 
 		addOption_gui(certificatesStore, _("Use TLS when remote client supports it"), SettingsManager::USE_TLS);
-		addOption_gui(certificatesStore, _("Allow TLS connections to hubs without trusted certificate"), SettingsManager::ALLOW_UNTRUSTED_HUBS);
-		addOption_gui(certificatesStore, _("Allow TLS connections to clients without trusted certificate"), SettingsManager::ALLOW_UNTRUSTED_CLIENTS);
+		addOption_gui(certificatesStore, _("Allow TLS connections to hubs without a trusted certificate"), SettingsManager::ALLOW_UNTRUSTED_HUBS);
+		addOption_gui(certificatesStore, _("Allow TLS connections to clients without a trusted certificate"), SettingsManager::ALLOW_UNTRUSTED_CLIENTS);
 
 		g_signal_connect(getWidget("generateCertificatesButton"), "clicked", G_CALLBACK(onGenerateCertificatesClicked_gui), (gpointer)this);
 	}
@@ -817,6 +822,7 @@
 
 	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(getWidget("commandDialogSeparator"))))
 	{
+		// TRANSLATORS: Name of custom separator user command.
 		name = _("Separator");
 		type = UserCommand::TYPE_SEPARATOR;
 	}
@@ -1027,74 +1033,6 @@
 	gtk_widget_set_sensitive(s->getWidget("socksCheckButton"), TRUE);
 }
 
-void Settings::onBrowseFinished_gui(GtkWidget *widget, gpointer data)
-{
-	Settings *s = (Settings *)data;
-
- 	gint response = gtk_dialog_run(GTK_DIALOG(s->getWidget("dirChooserDialog")));
-	gtk_widget_hide(s->getWidget("dirChooserDialog"));
-
-	if (response == GTK_RESPONSE_OK)
-	{
-		gchar *path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(s->getWidget("dirChooserDialog")));
-		if (path)
-		{
-			gtk_entry_set_text(GTK_ENTRY(s->getWidget("finishedDownloadsEntry")), Text::toUtf8(path).c_str());
-			g_free(path);
-		}
-	}
-}
-
-void Settings::onBrowseUnfinished_gui(GtkWidget *widget, gpointer data)
-{
-	Settings *s = (Settings *)data;
-
- 	gint response = gtk_dialog_run(GTK_DIALOG(s->getWidget("dirChooserDialog")));
-	gtk_widget_hide(s->getWidget("dirChooserDialog"));
-
-	if (response == GTK_RESPONSE_OK)
-	{
-		gchar *path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(s->getWidget("dirChooserDialog")));
-		if (path)
-		{
-			gtk_entry_set_text(GTK_ENTRY(s->getWidget("unfinishedDownloadsEntry")),  Text::toUtf8(path).c_str());
-			g_free(path);
-		}
-	}
-}
-
-void Settings::onPublicHubs_gui(GtkWidget *widget, gpointer data)
-{
-	Settings *s = (Settings *)data;
-	GtkTreeIter iter;
-
-	gtk_list_store_clear(s->publicListStore);
-	StringList lists(FavoriteManager::getInstance()->getHubLists());
-	for (StringList::iterator idx = lists.begin(); idx != lists.end(); ++idx)
-	{
-		gtk_list_store_append(s->publicListStore, &iter);
-		gtk_list_store_set(s->publicListStore, &iter, s->publicListView.col("List"), (*idx).c_str(), -1);
-	}
-
-	gint response = gtk_dialog_run(GTK_DIALOG(s->getWidget("publicHubsDialog")));
-	gtk_widget_hide(s->getWidget("publicHubsDialog"));
-
-	if (response == GTK_RESPONSE_OK)
-	{
-		string lists = "";
-		GtkTreeModel *m = GTK_TREE_MODEL(s->publicListStore);
-		gboolean valid = gtk_tree_model_get_iter_first(m, &iter);
-		while (valid)
-		{
-			lists += s->publicListView.getString(&iter, "List") + ";";
-			valid = gtk_tree_model_iter_next(m, &iter);
-		}
-		if (!lists.empty())
-			lists.erase(lists.size() - 1);
-		SettingsManager::getInstance()->set(SettingsManager::HUBLIST_SERVERS, lists);
-	}
-}
-
 void Settings::onPublicAdd_gui(GtkWidget *widget, gpointer data)
 {
 	Settings *s = (Settings *)data;
@@ -1103,7 +1041,7 @@
 	GtkTreeViewColumn *col;
 
 	gtk_list_store_append(s->publicListStore, &iter);
-	gtk_list_store_set(s->publicListStore, &iter, s->publicListView.col("List"), _("New list"), -1);
+	gtk_list_store_set(s->publicListStore, &iter, s->publicListView.col("List"), _("New public hub list"), -1);
 	path = gtk_tree_model_get_path(GTK_TREE_MODEL(s->publicListStore), &iter);
 	col = gtk_tree_view_get_column(s->publicListView.get(), 0);
 	gtk_tree_view_set_cursor(s->publicListView.get(), path, col, TRUE);
@@ -1300,35 +1238,17 @@
 			-1);
 	}
 
-	string text = _("Total size: ") + Util::formatBytes(ShareManager::getInstance()->getShareSize());
+	int64_t shareSize = ShareManager::getInstance()->getShareSize();
+	string text = F_("Total share size: %1%", % Util::formatBytes(shareSize));
 	gtk_label_set_text(GTK_LABEL(s->getWidget("sharedSizeLabel")), text.c_str());
 
 	return FALSE;
 }
 
-void Settings::onLogBrowseClicked_gui(GtkWidget *widget, gpointer data)
-{
-	Settings *s = (Settings *)data;
-
- 	gint response = gtk_dialog_run(GTK_DIALOG(s->getWidget("dirChooserDialog")));
-	gtk_widget_hide(s->getWidget("dirChooserDialog"));
-
-	if (response == GTK_RESPONSE_OK)
-	{
-		gchar *path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(s->getWidget("dirChooserDialog")));
-		if (path)
-		{
-			gtk_entry_set_text(GTK_ENTRY(s->getWidget("logDirectoryEntry")), Text::toUtf8(path).c_str());
-			g_free(path);
-		}
-	}
-}
-
 void Settings::onLogMainClicked_gui(GtkToggleButton *button, gpointer data)
 {
 	Settings *s = (Settings *)data;
 	bool toggled = gtk_toggle_button_get_active(button);
-	gtk_widget_set_sensitive(s->getWidget("logMainLabel"), toggled);
 	gtk_widget_set_sensitive(s->getWidget("logMainEntry"), toggled);
 }
 
@@ -1336,7 +1256,6 @@
 {
 	Settings *s = (Settings *)data;
 	bool toggled = gtk_toggle_button_get_active(button);
-	gtk_widget_set_sensitive(s->getWidget("logPrivateLabel"), toggled);
 	gtk_widget_set_sensitive(s->getWidget("logPrivateEntry"), toggled);
 }
 
@@ -1344,7 +1263,6 @@
 {
 	Settings *s = (Settings *)data;
 	bool toggled = gtk_toggle_button_get_active(button);
-	gtk_widget_set_sensitive(s->getWidget("logDownloadsLabel"), toggled);
 	gtk_widget_set_sensitive(s->getWidget("logDownloadsEntry"), toggled);
 }
 
@@ -1352,7 +1270,6 @@
 {
 	Settings *s = (Settings *)data;
 	bool toggled = gtk_toggle_button_get_active(button);
-	gtk_widget_set_sensitive(s->getWidget("logUploadsLabel"), toggled);
 	gtk_widget_set_sensitive(s->getWidget("logUploadsEntry"), toggled);
 }
 
@@ -1614,61 +1531,6 @@
 
 	return FALSE;
 }
-
-void Settings::onCertificatesPrivateBrowseClicked_gui(GtkWidget *widget, gpointer data)
-{
-	Settings *s = (Settings *)data;
-
- 	gint response = gtk_dialog_run(GTK_DIALOG(s->getWidget("fileChooserDialog")));
-	gtk_widget_hide(s->getWidget("fileChooserDialog"));
-
-	if (response == GTK_RESPONSE_OK)
-	{
-		gchar *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(s->getWidget("fileChooserDialog")));
-		if (path)
-		{
-			gtk_entry_set_text(GTK_ENTRY(s->getWidget("privateKeyEntry")), Text::toUtf8(path).c_str());
-			g_free(path);
-		}
-	}
-}
-
-void Settings::onCertificatesFileBrowseClicked_gui(GtkWidget *widget, gpointer data)
-{
-	Settings *s = (Settings *)data;
-
- 	gint response = gtk_dialog_run(GTK_DIALOG(s->getWidget("fileChooserDialog")));
-	gtk_widget_hide(s->getWidget("fileChooserDialog"));
-
-	if (response == GTK_RESPONSE_OK)
-	{
-		gchar *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(s->getWidget("fileChooserDialog")));
-		if (path)
-		{
-			gtk_entry_set_text(GTK_ENTRY(s->getWidget("certificateFileEntry")), Text::toUtf8(path).c_str());
-			g_free(path);
-		}
-	}
-}
-
-void Settings::onCertificatesPathBrowseClicked_gui(GtkWidget *widget, gpointer data)
-{
-	Settings *s = (Settings *)data;
-
- 	gint response = gtk_dialog_run(GTK_DIALOG(s->getWidget("dirChooserDialog")));
-	gtk_widget_hide(s->getWidget("dirChooserDialog"));
-
-	if (response == GTK_RESPONSE_OK)
-	{
-		gchar *path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(s->getWidget("dirChooserDialog")));
-		if (path)
-		{
-			gtk_entry_set_text(GTK_ENTRY(s->getWidget("trustedCertificatesPathEntry")), Text::toUtf8(path).c_str());
-			g_free(path);
-		}
-	}
-}
-
 void Settings::onGenerateCertificatesClicked_gui(GtkWidget *widget, gpointer data)
 {
 	Settings *s = (Settings *)data;

=== modified file 'linux/settingsdialog.hh'
--- linux/settingsdialog.hh	2009-08-15 16:59:22 +0000
+++ linux/settingsdialog.hh	2011-01-25 05:11:20 +0000
@@ -43,6 +43,7 @@
 		void addOption_gui(GtkListStore *store, const std::string &name, const std::string &setting);
 		void createOptionsView_gui(TreeView &treeView, GtkListStore *&store, const std::string &widgetName);
 		void saveOptionsView_gui(TreeView &treeView);
+		void saveFileChooserPath_gui(GtkWidget *fileChooser, dcpp::SettingsManager::StrSetting setting);
 		void initPersonal_gui();
 		void initConnection_gui();
 		void initDownloads_gui();
@@ -66,9 +67,6 @@
 		static void onInFW_NAT_gui(GtkToggleButton *button, gpointer data);
 		static void onOutDirect_gui(GtkToggleButton *button, gpointer data);
 		static void onSocks5_gui(GtkToggleButton *button, gpointer data);
-		static void onBrowseFinished_gui(GtkWidget *widget, gpointer data);
-		static void onBrowseUnfinished_gui(GtkWidget *widget, gpointer data);
-		static void onPublicHubs_gui(GtkWidget *widget, gpointer data);
 		static void onPublicAdd_gui(GtkWidget *widget, gpointer data);
 		static void onPublicMoveUp_gui(GtkWidget *widget, gpointer data);
 		static void onPublicMoveDown_gui(GtkWidget *widget, gpointer data);
@@ -86,7 +84,6 @@
 		//static void onDownColorClicked_gui(GtkCellRendererToggle *cell, gchar *path, gpointer data);
 		//static void onUpColorClicked_gui(GtkCellRendererToggle *cell, gchar *path, gpointer data);
 		//static void onTextStyleClicked_gui(GtkCellRendererToggle *cell, gchar *path, gpointer data);
-		static void onLogBrowseClicked_gui(GtkWidget *widget, gpointer data);
 		static void onLogMainClicked_gui(GtkToggleButton *button, gpointer data);
 		static void onLogPrivateClicked_gui(GtkToggleButton *button, gpointer data);
 		static void onLogDownloadClicked_gui(GtkToggleButton *button, gpointer data);
@@ -101,9 +98,6 @@
 		static void onUserCommandTypeChat_gui(GtkWidget *widget, gpointer data);
 		static void onUserCommandTypePM_gui(GtkWidget *widget, gpointer data);
 		static gboolean onUserCommandKeyPress_gui(GtkWidget *widget, GdkEventKey *event, gpointer data);
-		static void onCertificatesPrivateBrowseClicked_gui(GtkWidget *widget, gpointer data);
-		static void onCertificatesFileBrowseClicked_gui(GtkWidget *widget, gpointer data);
-		static void onCertificatesPathBrowseClicked_gui(GtkWidget *widget, gpointer data);
 		static void onGenerateCertificatesClicked_gui(GtkWidget *widget, gpointer data);
 
 		// Client functions
@@ -114,7 +108,6 @@
 		void moveUserCommand_client(std::string name, std::string hub, int pos);
 		void generateCertificates_client();
 
-		GtkComboBox *connectionSpeedComboBox;
 		GtkListStore *downloadToStore, *publicListStore, *queueStore,
 			*shareStore, *appearanceStore, *colorStore, *windowStore1,
 			*windowStore2, *windowStore3, *advancedStore, *certificatesStore, *userCommandStore;

=== modified file 'linux/settingsmanager.hh'
--- linux/settingsmanager.hh	2009-03-12 05:47:55 +0000
+++ linux/settingsmanager.hh	2011-01-25 05:11:20 +0000
@@ -22,6 +22,7 @@
 #ifndef WULFOR_SETTINGSMANAGER_HH
 #define WULFOR_SETTINGSMANAGER_HH
 
+#include "IntlUtil.hh"
 #include <string>
 #include <map>
 #include <dcpp/stdinc.h>

=== modified file 'linux/sharebrowser.cc'
--- linux/sharebrowser.cc	2010-10-14 03:51:12 +0000
+++ linux/sharebrowser.cc	2011-01-25 05:11:20 +0000
@@ -34,7 +34,7 @@
 using namespace dcpp;
 
 ShareBrowser::ShareBrowser(UserPtr user, const std::string &file, const std::string &initialDirectory):
-	BookEntry(Entry::SHARE_BROWSER, _("List: ") + WulforUtil::getNicks(user), "sharebrowser.glade", user->getCID().toBase32()),
+	BookEntry(Entry::SHARE_BROWSER, WulforUtil::getNicks(user), "sharebrowser.glade", user->getCID().toBase32()),
 	user(user),
 	file(file),
 	initialDirectory(initialDirectory),
@@ -53,7 +53,7 @@
 		string name = Util::getFileName(file);
 		string::size_type loc = name.find('.');
 		nick = name.substr(0, loc);
-		setLabel_gui(_("List: ") + nick);
+		setLabel_gui(nick);
 	}
 
 	// Configure the dialogs
@@ -67,11 +67,11 @@
 
 	// Initialize the file TreeView
 	fileView.setView(GTK_TREE_VIEW(getWidget("fileView")), true, "sharebrowser");
-	fileView.insertColumn("Filename", G_TYPE_STRING, TreeView::ICON_STRING, 400, "Icon");
-	fileView.insertColumn("Size", G_TYPE_STRING, TreeView::STRINGR, 80);
-	fileView.insertColumn("Type", G_TYPE_STRING, TreeView::STRING, 50);
-	fileView.insertColumn("TTH", G_TYPE_STRING, TreeView::STRING, 150);
-	fileView.insertColumn("Exact Size", G_TYPE_STRING, TreeView::STRINGR, 105);
+	fileView.insertColumn(N_("Filename"), G_TYPE_STRING, TreeView::ICON_STRING, 400, "Icon");
+	fileView.insertColumn(N_("Size"), G_TYPE_STRING, TreeView::STRINGR, 80);
+	fileView.insertColumn(N_("Type"), G_TYPE_STRING, TreeView::STRING, 50);
+	fileView.insertColumn(N_("TTH"), G_TYPE_STRING, TreeView::STRING, 150);
+	fileView.insertColumn(N_("Exact Size"), G_TYPE_STRING, TreeView::STRINGR, 105);
 	fileView.insertHiddenColumn("DL File", G_TYPE_POINTER);
 	fileView.insertHiddenColumn("Icon", G_TYPE_STRING);
 	fileView.insertHiddenColumn("Size Order", G_TYPE_INT64);
@@ -156,7 +156,7 @@
 	}
 	catch (const Exception &e)
 	{
-		setStatus_gui("mainStatus", _("Unable to load file list: ") + e.getError());
+		setStatus_gui("mainStatus", F_("Unable to load file list: %1%", % e.getError()));
 	}
 }
 
@@ -319,25 +319,18 @@
 
 void ShareBrowser::updateStatus_gui()
 {
-	string items, files, size, total;
-	files = _("Files: ") + Util::toString(shareItems);
-	total = _("Total: ") + Util::formatBytes(shareSize);
-
-	if (gtk_tree_selection_get_selected(dirSelection, NULL, NULL))
-	{
-		items = _("Items: ") + Util::toString(currentItems);
-		size = _("Size: ") + Util::formatBytes(currentSize);
-	}
-	else
-	{
-		items = _("Items: 0");
-		size = _("Size: 0 B");
-	}
-
-	setStatus_gui("itemsStatus", items);
+	string files = P_("File: %1%", "Files: %1%", % currentItems, currentItems);
+	setStatus_gui("itemsStatus", files);
+
+	// TRANSLATORS: Size of currently visible folder.
+	string size = F_("Size: %1%", % Util::formatBytes(currentSize));
 	setStatus_gui("sizeStatus", size);
-	setStatus_gui("filesStatus", files);
-	setStatus_gui("totalStatus", total);
+
+	string totalFiles = P_("Total File: %1%", "Total Files: %1%", % shareItems, shareItems);
+	setStatus_gui("filesStatus", totalFiles);
+
+	string totalSize = F_("Total Size: %1%", % Util::formatBytes(shareSize));
+	setStatus_gui("totalStatus", totalSize);
 }
 
 void ShareBrowser::setStatus_gui(string statusBar, std::string msg)
@@ -464,7 +457,8 @@
 		gtk_menu_shell_append(GTK_MENU_SHELL(getWidget("fileDownloadMenu")), menuItem);
 	}
 
-	menuItem = gtk_menu_item_new_with_label(_("Browse..."));
+	menuItem = gtk_menu_item_new_with_label(_("_Browse..."));
+	gtk_menu_item_set_use_underline(GTK_MENU_ITEM(menuItem), TRUE);
 	g_signal_connect(menuItem, "activate", G_CALLBACK(onDownloadToClicked_gui), (gpointer)this);
 	gtk_menu_shell_append(GTK_MENU_SHELL(getWidget("fileDownloadMenu")), menuItem);
 
@@ -532,7 +526,8 @@
 		gtk_menu_shell_append(GTK_MENU_SHELL(getWidget("dirDownloadMenu")), menuItem);
 	}
 
-	menuItem = gtk_menu_item_new_with_label(_("Browse..."));
+	menuItem = gtk_menu_item_new_with_label(_("_Browse..."));
+	gtk_menu_item_set_use_underline(GTK_MENU_ITEM(menuItem), TRUE);
 	g_signal_connect(menuItem, "activate", G_CALLBACK(onDownloadDirToClicked_gui), (gpointer)this);
 	gtk_menu_shell_append(GTK_MENU_SHELL(getWidget("dirDownloadMenu")), menuItem);
 
@@ -991,7 +986,7 @@
 void ShareBrowser::matchQueue_client()
 {
 	int matched = QueueManager::getInstance()->matchListing(listing, "");
-	string message = _("Matched ") + Util::toString(matched) + _(" files");
+	string message = P_("Matched %1% file", "Matched %1% files", % matched, matched);
 
 	typedef Func2<ShareBrowser, string, string> F2;
 	F2 *f = new F2(this, &ShareBrowser::setStatus_gui, "mainStatus", message);

=== modified file 'linux/sharebrowser.hh'
--- linux/sharebrowser.hh	2009-06-28 23:06:29 +0000
+++ linux/sharebrowser.hh	2011-01-25 05:11:20 +0000
@@ -22,6 +22,8 @@
 #ifndef WULFOR_SHARE_BROWSER_HH
 #define WULFOR_SHARE_BROWSER_HH
 
+#include "IntlUtil.hh"
+
 #include <dcpp/stdinc.h>
 #include <dcpp/DCPlusPlus.h>
 #include <dcpp/DirectoryListing.h>

=== modified file 'linux/transfers.cc'
--- linux/transfers.cc	2010-09-05 06:31:22 +0000
+++ linux/transfers.cc	2011-01-25 05:11:20 +0000
@@ -46,15 +46,15 @@
 
 	// Initialize transfer treeview
 	transferView.setView(GTK_TREE_VIEW(getWidget("transfers")), TRUE, "transfers");
-	transferView.insertColumn("User", G_TYPE_STRING, TreeView::ICON_STRING, 150, "Icon");
-	transferView.insertColumn("Hub Name", G_TYPE_STRING, TreeView::STRING, 100);
-	transferView.insertColumn("Status", G_TYPE_STRING, TreeView::PROGRESS, 250, "Progress");
-	transferView.insertColumn("Time Left", G_TYPE_INT64, TreeView::TIME_LEFT, 85);
-	transferView.insertColumn("Speed", G_TYPE_INT64, TreeView::SPEED, 125);
-	transferView.insertColumn("Filename", G_TYPE_STRING, TreeView::STRING, 200);
-	transferView.insertColumn("Size", G_TYPE_INT64, TreeView::SIZE, 125);
-	transferView.insertColumn("Path", G_TYPE_STRING, TreeView::STRING, 200);
-	transferView.insertColumn("IP", G_TYPE_STRING, TreeView::STRING, 175);
+	transferView.insertColumn(N_("User"), G_TYPE_STRING, TreeView::ICON_STRING, 150, "Icon");
+	transferView.insertColumn(N_("Hub Name"), G_TYPE_STRING, TreeView::STRING, 100);
+	transferView.insertColumn(N_("Status"), G_TYPE_STRING, TreeView::PROGRESS, 250, "Progress");
+	transferView.insertColumn(N_("Time Left"), G_TYPE_INT64, TreeView::TIME_LEFT, 85);
+	transferView.insertColumn(N_("Speed"), G_TYPE_INT64, TreeView::SPEED, 125);
+	transferView.insertColumn(N_("Filename"), G_TYPE_STRING, TreeView::STRING, 200);
+	transferView.insertColumn(N_("Size"), G_TYPE_INT64, TreeView::SIZE, 125);
+	transferView.insertColumn(N_("Path"), G_TYPE_STRING, TreeView::STRING, 200);
+	transferView.insertColumn(N_("IP"), G_TYPE_STRING, TreeView::STRING, 175);
 	transferView.insertHiddenColumn("Icon", G_TYPE_STRING);
 	transferView.insertHiddenColumn("Progress", G_TYPE_INT);
 	transferView.insertHiddenColumn("Sort Order", G_TYPE_STRING);
@@ -506,8 +506,10 @@
 void Transfers::updateParent_gui(GtkTreeIter* iter)
 {
 	int active = 0;
+	int total = 0;
 	GtkTreeIter child;
 	string users;
+	string status;
 	std::set<string> hubs;
 	bool valid;
 	int64_t speed = 0;
@@ -515,7 +517,6 @@
 	int64_t totalSize = 0;
 	int64_t timeLeft = 0;
 	double progress = 0.0;
-	ostringstream stream;
 	ostringstream tmpHubs;
 
 	position = transferView.getValue<int64_t>(iter, "Download Position");
@@ -535,6 +536,7 @@
 				speed += transferView.getValue<int64_t>(&child, "Speed");
 				position += transferView.getValue<int64_t>(&child, "Download Position");	
 			}
+			++total;
 			users += transferView.getString(&child, "User") + string(", ");
 			hubs.insert(transferView.getString(&child, "Hub Name"));
 			valid = WulforUtil::getNextIter_gui(GTK_TREE_MODEL(transferStore), &child, TRUE, FALSE);
@@ -546,31 +548,27 @@
 	if (speed > 0)
 		timeLeft = (totalSize - position) / speed;
 
-	stream << setiosflags(ios::fixed) << setprecision(1);
-
 	if (transferView.getValue<gboolean>(iter, "Failed") == 0)
 	{
 		if (active)
-			stream << _("Downloaded ");
+			status = F_("Downloaded %1% (%2$.1f%%)", % Util::formatBytes(position) % progress);
 		else
-			stream << _("Waiting for slot ");
-
-		stream << Util::formatBytes(position) << " (" << progress;
-		stream << _("%) from ") << active << "/" << gtk_tree_model_iter_n_children(GTK_TREE_MODEL(transferStore), iter) << _(" user(s)");
+			status = _("Waiting for slot");
 	}
 	else
 	{
-		stream << transferView.getString(iter, "Status");
+		status = transferView.getString(iter, "Status");
 	}
 
+	string user = P_("%1% of %2% User", "%1% of %2% Users", % active % total, total);
 	std::copy(hubs.begin(), hubs.end(), std::ostream_iterator<string>(tmpHubs, ", "));
 
 	gtk_tree_store_set(transferStore, iter, 
-		transferView.col("User"), users.substr(0, users.length()-2).c_str(),
+		transferView.col("User"), user.c_str(),
 		transferView.col("Hub Name"), tmpHubs.str().substr(0, tmpHubs.str().length()-2).c_str(),
 		transferView.col("Speed"), speed, 
 		transferView.col("Time Left"), timeLeft,
-		transferView.col("Status"), stream.str().c_str(), 
+		transferView.col("Status"), status.c_str(), 
 		transferView.col("Progress"), static_cast<int>(progress),
 		transferView.col("Sort Order"), active ? (string("d").append(users)).c_str() : (string("w").append(users)).c_str(), 
 		-1);
@@ -729,7 +727,7 @@
 			gtk_tree_store_set(transferStore, &iter,
 				transferView.col("Status"), status.c_str(),
 				transferView.col("Failed"), (gboolean)1, 
-				transferView.col("Speed"), (uint64_t)-1,
+				transferView.col("Speed"), (gint64)-1,
 				-1);
 		}
 	}
@@ -894,22 +892,29 @@
 		
 		getParams_client(params, *it);
 
+		// TODO: These flags in the status are a hack and should be redesigned.
 		if (dl->getUserConnection().isSecure())
 		{
 			if (dl->getUserConnection().isTrusted())
+				// TRANSLATORS: Status flag to indicate transfer is secure and trusted.
 				stream << _("[S]");
 			else
+				// TRANSLATORS: Status flag to indicate transfer is secure but untrusted.
 				stream << _("[U]");
 		}
 		if (dl->isSet(Download::FLAG_TTH_CHECK))
+			// TRANSLATORS: Status flag to indicate a TTH check will be performed on the transfer.
 			stream << _("[T]");
 		if (dl->isSet(Download::FLAG_ZDOWNLOAD))
+			// TRANSLATORS: Status flag to indicate transfer is compressed.
 			stream << _("[Z]");
 
-		stream << setiosflags(ios::fixed) << setprecision(1);
-		stream << " " << _("Downloaded ") << Util::formatBytes(dl->getPos()) << " (" << params["Progress"]
-		<< "%) in " << Util::formatSeconds((GET_TICK() - dl->getStart()) / 1000);
-		params["Status"] = stream.str();
+		string bytes = Util::formatBytes(dl->getPos());
+		double progress = dl->getSize() <= 0 ? 0.0 : static_cast<double>(dl->getPos() * 100.0) / dl->getSize();
+
+		// TRANSLATORS: Shows the bytes downloaded and the percentage completed.
+		string status = F_("Downloaded %1% (%2$.1f%%)", % bytes % progress);
+		params["Status"] = stream.tellp() > 0 ? stream.str() + " " + status : status;
 
 		typedef Func2<Transfers, StringMap, bool> F2;
 		F2* f2 = new F2(this, &Transfers::updateTransfer_gui, params, TRUE);
@@ -1057,7 +1062,7 @@
 		Upload* ul = *it;
 		StringMap params;
 		ostringstream stream;
-		
+
 		getParams_client(params, ul);
 
 		if (ul->getUserConnection().isSecure())
@@ -1070,10 +1075,12 @@
 		if (ul->isSet(Upload::FLAG_ZUPLOAD))
 			stream << _("[Z]");
 
-		stream << setiosflags(ios::fixed) << setprecision(1);
-		stream << " " << _("Uploaded ") << Util::formatBytes(ul->getPos()) << " (" << params["Progress"]
-		<< "%) in " << Util::formatSeconds((GET_TICK() - ul->getStart()) / 1000);
-		params["Status"] = stream.str();
+		string bytes = Util::formatBytes(ul->getPos());
+		double progress = ul->getSize() <= 0 ? 0.0 : static_cast<double>(ul->getPos() * 100.0) / ul->getSize();
+
+		// TRANSLATORS: Shows the bytes uploaded and the percentage completed.
+		string status = F_("Uploaded %1% (%2$.1f%%)", % bytes % progress);
+		params["Status"] = stream.tellp() > 0 ? stream.str() + " " + status : status;
 
 		typedef Func2<Transfers, StringMap, bool> F2;
 		F2* f2 = new F2(this, &Transfers::updateTransfer_gui, params, FALSE);

=== modified file 'linux/transfers.hh'
--- linux/transfers.hh	2010-05-30 03:15:23 +0000
+++ linux/transfers.hh	2011-01-25 05:11:20 +0000
@@ -22,6 +22,8 @@
 #ifndef WULFOR_TRANSFERS_HH
 #define WULFOR_TRANSFERS_HH
 
+#include "IntlUtil.hh"
+
 #include <dcpp/stdinc.h>
 #include <dcpp/DCPlusPlus.h>
 #include <dcpp/ConnectionManager.h>

=== modified file 'linux/treeview.cc'
--- linux/treeview.cc	2010-01-01 00:57:24 +0000
+++ linux/treeview.cc	2011-01-25 05:11:20 +0000
@@ -22,6 +22,8 @@
 #include "treeview.hh"
 #include "settingsmanager.hh"
 #include "WulforUtil.hh"
+#include "IntlUtil.hh"
+#include <sstream>
 
 using namespace std;
 
@@ -71,7 +73,7 @@
 		m = gtk_tree_view_get_model(view);
 	string value;
 	gchar* temp;
-	dcassert(gtk_tree_model_get_column_type(m, col(column)) == G_TYPE_STRING);
+	g_assert(gtk_tree_model_get_column_type(m, col(column)) == G_TYPE_STRING);
 	gtk_tree_model_get(m, i, col(column), &temp, -1);
 
 	if (temp != NULL)
@@ -86,10 +88,10 @@
 void TreeView::insertColumn(const string &title, const GType &gtype, const columnType type, const int width, const string &linkedCol)
 {
 	// All insertColumn's have to be called before any insertHiddenColumn's.
-	dcassert(hiddenColumns.size() == 0);
+	g_assert(hiddenColumns.size() == 0);
 
 	// Title must be unique.
-	dcassert(!title.empty() && columns.find(title) == columns.end());
+	g_assert(!title.empty() && columns.find(title) == columns.end());
 
 	columns[title] = Column(title, count, gtype, type, width, linkedCol);
 	sortedColumns[count] = title;
@@ -99,9 +101,9 @@
 void TreeView::insertHiddenColumn(const string &title, const GType &gtype)
 {
 	// Title must be unique.
-	dcassert(!title.empty());
-	dcassert(hiddenColumns.find(title) == hiddenColumns.end());
-	dcassert(columns.find(title) == columns.end());
+	g_assert(!title.empty());
+	g_assert(hiddenColumns.find(title) == hiddenColumns.end());
+	g_assert(columns.find(title) == columns.end());
 
 	hiddenColumns[title] = Column(title, count, gtype);
 	sortedHiddenColumns[count] = title;
@@ -110,7 +112,7 @@
 
 void TreeView::finalize()
 {
-	dcassert(count > 0);
+	g_assert(count > 0);
 
 	menu = GTK_MENU(gtk_menu_new());
 	visibleColumns = columns.size();
@@ -123,11 +125,6 @@
 		Column& col = columns[iter->second];
 		addColumn_gui(col);
 
-		colMenuItems[col.title] = gtk_check_menu_item_new_with_label(col.title.c_str());
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(colMenuItems[col.title]), col.visible);
-		g_signal_connect(colMenuItems[col.title], "activate", G_CALLBACK(toggleColumnVisibility), (gpointer)this);
-		gtk_menu_shell_append(GTK_MENU_SHELL(menu), colMenuItems[col.title]);
-
 		if (!col.visible)
 			visibleColumns--;
 	}
@@ -229,50 +226,51 @@
 {
 	GtkTreeViewColumn *col = NULL;
 	GtkCellRenderer *renderer;
+	const gchar *title = _(column.title.c_str());
 
 	switch (column.type)
 	{
 		case INT:
 		case STRING:
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
+			col = gtk_tree_view_column_new_with_attributes(title,
 				gtk_cell_renderer_text_new(), "text", column.pos, NULL);
 			break;
 		case SIZE:
 			renderer = gtk_cell_renderer_text_new();
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
+			col = gtk_tree_view_column_new_with_attributes(title,
 					renderer, "text", column.pos, NULL);
 			gtk_tree_view_column_set_cell_data_func(col, renderer, TreeView::sizeDataFunc, &column, NULL);
 			break;
 		case SPEED:
 			renderer = gtk_cell_renderer_text_new();
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
+			col = gtk_tree_view_column_new_with_attributes(title,
 					renderer, "text", column.pos, NULL);
 			gtk_tree_view_column_set_cell_data_func(col, renderer, TreeView::speedDataFunc, &column, NULL);
 			break;
 		case TIME_LEFT:
 			renderer = gtk_cell_renderer_text_new();
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
+			col = gtk_tree_view_column_new_with_attributes(title,
 					renderer, "text", column.pos, NULL);
 			gtk_tree_view_column_set_cell_data_func(col, renderer, TreeView::timeLeftDataFunc, &column, NULL);
 			break;
 		case STRINGR:
 			renderer = gtk_cell_renderer_text_new();
 			g_object_set(renderer, "xalign", 1.0, NULL);
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(), renderer, "text", column.pos, NULL);
+			col = gtk_tree_view_column_new_with_attributes(title, renderer, "text", column.pos, NULL);
 			gtk_tree_view_column_set_alignment(col, 1.0);
 			break;
 		case BOOL:
 			renderer = gtk_cell_renderer_toggle_new();
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(), renderer, "active", column.pos, NULL);
+			col = gtk_tree_view_column_new_with_attributes(title, renderer, "active", column.pos, NULL);
 			break;
 		case PIXBUF:
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
+			col = gtk_tree_view_column_new_with_attributes(title,
 				gtk_cell_renderer_pixbuf_new(), "pixbuf", column.pos, NULL);
 			break;
 		case ICON_STRING:
 			renderer = gtk_cell_renderer_pixbuf_new();
 			col = gtk_tree_view_column_new();
-			gtk_tree_view_column_set_title(col, column.title.c_str());
+			gtk_tree_view_column_set_title(col, title);
 			gtk_tree_view_column_pack_start(col, renderer, false);
 			gtk_tree_view_column_add_attribute(col, renderer, "icon-name", TreeView::col(column.linkedCol));
 			renderer = gtk_cell_renderer_text_new();
@@ -282,12 +280,12 @@
 		case EDIT_STRING:
 			renderer = gtk_cell_renderer_text_new();
  			g_object_set(renderer, "editable", TRUE, NULL);
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(), renderer, "text", column.pos, NULL);
+			col = gtk_tree_view_column_new_with_attributes(title, renderer, "text", column.pos, NULL);
 			break;
 		case PROGRESS:
 			renderer = gtk_cell_renderer_progress_new();
 			g_object_set(renderer, "xalign", 0.0, NULL); // Doesn't work yet. See: http://bugzilla.gnome.org/show_bug.cgi?id=334576
-			col = gtk_tree_view_column_new_with_attributes(column.title.c_str(),
+			col = gtk_tree_view_column_new_with_attributes(title,
 				renderer, "text", column.pos, "value", TreeView::col(column.linkedCol), NULL);
 			break;
 	}
@@ -316,6 +314,9 @@
 	gtk_tree_view_column_set_visible(col, column.visible);
 
 	gtk_tree_view_insert_column(view, col, column.pos);
+	g_object_set_data(G_OBJECT(col), "column", (gpointer)&column);
+
+	addCheckMenuItem(col);
 
 	/*
 	 * Breaks GTK+ API, but is the only way to attach a signal to a gtktreeview column header. See GTK bug #141937.
@@ -324,6 +325,18 @@
 	g_signal_connect(col->button, "button-release-event", G_CALLBACK(popupMenu_gui), (gpointer)this);
 }
 
+void TreeView::addCheckMenuItem(GtkTreeViewColumn *col)
+{
+	bool visible = gtk_tree_view_column_get_visible(col);
+	const gchar *title = gtk_tree_view_column_get_title(col);
+
+	GtkWidget *menuItem = gtk_check_menu_item_new_with_label(title);
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuItem), visible);
+	g_object_set_data(G_OBJECT(menuItem), "gtktreeviewcolumn", (gpointer)col);
+	g_signal_connect(menuItem, "activate", G_CALLBACK(toggleColumnVisibility), (gpointer)this);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
+}
+
 void TreeView::setSortColumn_gui(const string &column, const string &sortColumn)
 {
 	GtkTreeViewColumn *gtkColumn = gtk_tree_view_get_column(view, col(column));
@@ -332,8 +345,8 @@
 
 int TreeView::col(const string &title)
 {
-	dcassert(!title.empty());
-	dcassert(columns.find(title) != columns.end() || hiddenColumns.find(title) != hiddenColumns.end());
+	g_assert(!title.empty());
+	g_assert(columns.find(title) != columns.end() || hiddenColumns.find(title) != hiddenColumns.end());
 	int retval = -1;
 
 	if (columns.find(title) != columns.end())
@@ -341,7 +354,7 @@
 	else
 		retval = hiddenColumns[title].id;
 
-	dcassert(retval >= 0 && (retval < count));
+	g_assert(retval >= 0 && (retval < count));
 	return retval;
 }
 
@@ -362,33 +375,19 @@
 void TreeView::toggleColumnVisibility(GtkMenuItem *item, gpointer data)
 {
 	TreeView *tv = (TreeView*)data;
-	GtkTreeViewColumn *column = NULL;
-	gboolean visible;
-	SortedColIter iter;
-	string title = string(gtk_label_get_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(item)))));
-
-	// Function col(title) doesn't work here, so we have to find column manually.
-	for (iter = tv->sortedColumns.begin(); iter != tv->sortedColumns.end(); iter++)
-	{
-		column = gtk_tree_view_get_column(tv->view, iter->first);
-		if (string(gtk_tree_view_column_get_title(column)) == title)
-			break;
-	}
-
-	if (!column)
-		return;
-
-	visible = !gtk_tree_view_column_get_visible(column);
+	gpointer column_data = g_object_get_data(G_OBJECT(item), "gtktreeviewcolumn");
+	GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(column_data);
+	gboolean visible = !gtk_tree_view_column_get_visible(column);
 
 	// Can't let number of visible columns fall below 1, otherwise there's no way to unhide columns.
 	if (!visible && tv->visibleColumns <= 1)
 	{
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tv->colMenuItems[title]), true);
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), true);
 		return;
 	}
 
 	gtk_tree_view_column_set_visible(column, visible);
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tv->colMenuItems[title]), visible);
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), visible);
 
 	if (visible)
 	{
@@ -432,41 +431,44 @@
 
 void TreeView::saveSettings()
 {
-	string columnOrder, columnWidth, columnVisibility, title;
-	GtkTreeViewColumn *col;
-	gint width;
-
-	dcassert(columns.size() > 0);
+	const string delimiter = ",";
+	stringstream columnOrder;
+	stringstream columnWidth;
+	stringstream columnVisibility;
 
 	for (size_t i = 0; i < columns.size(); i++)
 	{
-		col = gtk_tree_view_get_column(view, i);
+		GtkTreeViewColumn *col = gtk_tree_view_get_column(view, i);
 		if (col == NULL)
 			continue;
 
-		title = string(gtk_tree_view_column_get_title(col));
-		width = gtk_tree_view_column_get_width(col);
+		Column *column = (Column*)g_object_get_data(G_OBJECT(col), "column");
 
 		// A col was moved to the right of the padding col
-		if (title.empty())
+		if (column == NULL)
 			return;
 
-		columnOrder += dcpp::Util::toString(columns[title].id) + ",";
-		if (width >= 20)
-			columnWidth += dcpp::Util::toString(width) + ",";
-		else
-			columnWidth += dcpp::Util::toString(columns[title].width) + ",";
-		columnVisibility += dcpp::Util::toString(gtk_tree_view_column_get_visible(col)) + ",";
+		gint width = gtk_tree_view_column_get_width(col);
+		width = width >= 20 ? width : column->width;
+		gboolean visible = gtk_tree_view_column_get_visible(col);
+
+		columnOrder << column->id;
+		columnWidth << width;
+		columnVisibility << visible;
+
+		// Add delimiter except for the last iteration
+		if (i < columns.size() - 1)
+		{
+			columnOrder << delimiter;
+			columnWidth << delimiter;
+			columnVisibility << delimiter;
+		}
 	}
 
-	if (columnOrder.size() > 0)
+	if (!columnOrder.str().empty())
 	{
-		columnOrder.erase(columnOrder.size() - 1, 1);
-		columnWidth.erase(columnWidth.size() - 1, 1);
-		columnVisibility.erase(columnVisibility.size() - 1, 1);
-
-		WSET(name + "-order", columnOrder);
-		WSET(name + "-width", columnWidth);
-		WSET(name + "-visibility", columnVisibility);
+		WSET(name + "-order", columnOrder.str());
+		WSET(name + "-width", columnWidth.str());
+		WSET(name + "-visibility", columnVisibility.str());
 	}
 }

=== modified file 'linux/treeview.hh'
--- linux/treeview.hh	2010-01-01 00:57:24 +0000
+++ linux/treeview.hh	2011-01-25 05:11:20 +0000
@@ -23,7 +23,6 @@
 #define WULFOR_TREE_VIEW_HH
 
 #include <gtk/gtk.h>
-#include <cassert>
 #include <map>
 #include <string>
 
@@ -67,7 +66,7 @@
 			if (m == NULL)
 				m = gtk_tree_view_get_model(view);
 			T value;
-			assert(gtk_tree_model_get_column_type(m, col(column)) != G_TYPE_STRING);
+			g_assert(gtk_tree_model_get_column_type(m, col(column)) != G_TYPE_STRING);
 			gtk_tree_model_get(m, i, col(column), &value, -1);
 			return value;
 		}
@@ -101,6 +100,7 @@
 		};
 
 		void addColumn_gui(Column& column);
+		void addCheckMenuItem(GtkTreeViewColumn *col);
 		void restoreSettings();
 		static gboolean popupMenu_gui(GtkWidget *widget, GdkEventButton *event, gpointer data);
 		static void toggleColumnVisibility(GtkMenuItem *item, gpointer data);
@@ -115,7 +115,6 @@
 		int visibleColumns;
 		GtkMenu *menu;
 		GType *gtypes;
-		std::map<std::string, GtkWidget*> colMenuItems;
 
 		typedef std::map<std::string, Column> ColMap;
 		typedef std::map<int, std::string> SortedColMap;

=== modified file 'linux/wulfor.cc'
--- linux/wulfor.cc	2010-03-23 01:35:22 +0000
+++ linux/wulfor.cc	2011-01-25 05:11:20 +0000
@@ -21,7 +21,7 @@
 
 #include <gtk/gtk.h>
 #include <glade/glade.h>
-#include <glib/gi18n.h>
+#include "IntlUtil.hh"
 
 #include <dcpp/stdinc.h>
 #include <dcpp/DCPlusPlus.h>
@@ -44,25 +44,19 @@
 	CommandlineArgs() : show(FALSE), refresh(FALSE), version(FALSE), existing(FALSE) { }
 };
 
-
-void callBack(void* x, const std::string& a)
-{
-	std::cout << "Loading: " << a << std::endl;
-}
-
 void printVersionInfo() 
 {
-	std::cout << "Version information: " << std::endl;
-	std::cout << "\t" <<  APPNAME << " version: " << LINUXDCPP_VERSION_STRING << std::endl;
-	std::cout << "\t" <<  "DC++ Core version: " << VERSIONSTRING << std::endl;
-	std::cout << "\t" <<  "GLIB header version: " << GLIB_MAJOR_VERSION << "." << 
-		GLIB_MINOR_VERSION << "." << GLIB_MICRO_VERSION << std::endl;
-	std::cout << "\t" <<  "GLIB version: " << glib_major_version << "." 
-		<< glib_minor_version << "." << glib_micro_version << std::endl;
-	std::cout << "\t" <<  "GTK header version: " << GTK_MAJOR_VERSION << "." 
-		<< GTK_MINOR_VERSION << "." << GTK_MICRO_VERSION << std::endl;
-	std::cout << "\t" <<  "GTK version: " << gtk_major_version << "." 
-		<< gtk_minor_version << "." << gtk_micro_version << std::endl;
+	// TRANSLATORS: Application version printed on the command line.
+	std::cout << F_("%1% version: %2%", % APPNAME % LINUXDCPP_VERSION_STRING) << std::endl;
+
+	// TRANSLATORS: DC++ core library version printed on the command line.
+	std::cout << F_("DC++ library version: %1%", % VERSIONSTRING) << std::endl;
+
+	// TRANSLATORS: GTK+ version in major.minor.micro format printed on the command line.
+	std::cout << F_("GTK+ version: %1%.%2%.%3%", % gtk_major_version % gtk_minor_version % gtk_micro_version) << std::endl;
+
+	// TRANSLATORS: GLib version in major.minor.micro format printed on the command line.
+	std::cout << F_("GLib version: %1%.%2%.%3%", % glib_major_version % glib_minor_version % glib_micro_version) << std::endl;
 }
 
 void parseExtraArguments(int argc, char* argv[], CommandlineArgs* args)
@@ -84,7 +78,7 @@
 
 	GOptionEntry entries[] = {
 		{ "connect", 'c', 0, G_OPTION_ARG_STRING_ARRAY, &address, N_("Connect to the given hub"), N_("URI") },
-		{ "existing", 'e', 0, G_OPTION_ARG_NONE, &existing, N_("Direct commands to an already running instance"), NULL },
+		{ "existing", 'e', 0, G_OPTION_ARG_NONE, &existing, N_("Send commands to the existing instance (if applicable)"), NULL },
 		{ "magnet", 'm', 0, G_OPTION_ARG_STRING_ARRAY, &magnet, N_("Search for the given magnet link"), N_("URI") },
 		{ "refresh", 'r', 0, G_OPTION_ARG_NONE, &refresh, N_("Initiate filelist refresh"), NULL },
 		{ "show", 's', 0, G_OPTION_ARG_NONE, &show, N_("Show the running instance (default action)"), NULL },
@@ -102,7 +96,7 @@
 
 	if (!g_option_context_parse(context, argc, argv, &error))
 	{
-		g_print(_("Option parsing failed: %s\n"), error->message);
+		std::cerr << F_("Option parsing failed: %1%", % error->message) << std::endl;
 		return FALSE;
 	}
 	else
@@ -166,11 +160,13 @@
 int main(int argc, char *argv[])
 {
 	CommandlineArgs args;
-	// Initialize i18n support
-	bindtextdomain("linuxdcpp", _DATADIR "/locale");
-	textdomain("linuxdcpp");
-	bind_textdomain_codeset("linuxdcpp", "UTF-8");
-
+
+	dcpp::Util::PathsMap pathsMap;
+	pathsMap[dcpp::Util::PATH_RESOURCES] = _DATADIR;
+	pathsMap[dcpp::Util::PATH_LOCALE] = _DATADIR "/locale";
+	dcpp::Util::initialize(pathsMap);
+
+	IntlUtil::initialize();
 
 	if (!parseArguments(&argc, &argv, &args))
 	{
@@ -190,7 +186,7 @@
 
 		if (retval < 0) 
 		{
-			std::cout << _("Failed to communicate with existing instance: ") <<  dcpp::Util::translateError(retval) << std::endl;
+			std::cerr << F_("Failed to communicate with existing instance: %1%", % dcpp::Util::translateError(retval)) << std::endl;
 			return -1;
 		}
 
@@ -212,14 +208,12 @@
 
 	if (args.existing) // If we're still here and --existing was given, bail out since no running instance was found
 	{
-		std::cout << _("No running instance found") << std::endl;
+		std::cerr << _("No running instance found") << std::endl;
 		return 0;
 	}
 
-	printVersionInfo();
-
 	// Start the DC++ client core
-	dcpp::startup(callBack, NULL);
+	dcpp::startup(NULL, NULL);
 
 	dcpp::TimerManager::getInstance()->start();
 
@@ -239,7 +233,6 @@
 	WulforManager::stop();
 	WulforSettingsManager::deleteInstance();
 
-	std::cout << "Shutting down..." << std::endl;
 	dcpp::shutdown();
 
 	return 0;

=== modified file 'linux/wulformanager.cc'
--- linux/wulformanager.cc	2010-02-02 04:01:05 +0000
+++ linux/wulformanager.cc	2011-01-25 05:11:20 +0000
@@ -23,7 +23,6 @@
 
 #include <iostream>
 #include <gdk/gdkx.h>
-#include <glib/gi18n.h>
 #include "hashdialog.hh"
 #include "settingsdialog.hh"
 


Follow ups