Merge branch 'system-wide-config' of https://github.com/jblaine/tigervnc
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cd5a23b..a9e7f4e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,10 +21,10 @@
 include(CMakeMacroLibtoolFile)
 
 project(tigervnc)
-set(VERSION 1.6.80)
+set(VERSION 1.7.80)
 
 # The RC version must always be four comma-separated numbers
-set(RCVERSION 1,6,80,0)
+set(RCVERSION 1,7,80,0)
 
 # Installation paths
 set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
@@ -104,8 +104,9 @@
   message(STATUS "32-bit build")
 endif()
 
-# CMake doesn't properly support resource compilation with MinGW.  Boo!
-if(MINGW)
+# Versions of CMake before 2.8.7 do not properly support resource compilation
+# with MinGW.  Boo!
+if(MINGW AND "${CMAKE_VERSION}" VERSION_LESS "2.8.7")
   if(NOT DEFINED RC)
     set(CMAKE_RC_COMPILER_INIT windres)
   else()
diff --git a/common/os/Thread.h b/common/os/Thread.h
index 1a9aa54..4c39884 100644
--- a/common/os/Thread.h
+++ b/common/os/Thread.h
@@ -17,7 +17,9 @@
  */
 
 #ifndef __OS_THREAD_H__
-#define __OP_THREAD_H__
+#define __OS_THREAD_H__
+
+#include <stddef.h>
 
 namespace os {
   class Mutex;
diff --git a/common/rfb/Configuration.cxx b/common/rfb/Configuration.cxx
index 8e1ea6e..a5c2302 100644
--- a/common/rfb/Configuration.cxx
+++ b/common/rfb/Configuration.cxx
@@ -23,24 +23,14 @@
 #include <ctype.h>
 #include <string.h>
 
+#include <os/Mutex.h>
+
 #include <rfb/util.h>
 #include <rfb/Configuration.h>
 #include <rfb/LogWriter.h>
 #include <rfb/Exception.h>
-#include <rfb/Threading.h>
 
-#ifdef __RFB_THREADING_IMPL
-// On platforms that support Threading, we use Locks to make getData safe
-#define LOCK_CONFIG Lock l(*configLock())
-rfb::Mutex* configLock_ = 0;
-static rfb::Mutex* configLock() {
-  if (!configLock_)
-    configLock_ = new rfb::Mutex;
-  return configLock_;
-}
-#else
-#define LOCK_CONFIG
-#endif
+#define LOCK_CONFIG os::AutoMutex a(mutex)
 
 #include <rdr/HexOutStream.h>
 #include <rdr/HexInStream.h>
@@ -195,9 +185,12 @@
 
   _next = conf->head;
   conf->head = this;
+
+  mutex = new os::Mutex();
 }
 
 VoidParameter::~VoidParameter() {
+  delete mutex;
 }
 
 const char*
diff --git a/common/rfb/Configuration.h b/common/rfb/Configuration.h
index da93fdd..fbf161d 100644
--- a/common/rfb/Configuration.h
+++ b/common/rfb/Configuration.h
@@ -45,6 +45,8 @@
 
 #include <rfb/util.h>
 
+namespace os { class Mutex; }
+
 namespace rfb {
   class VoidParameter;
   struct ParameterIterator;
@@ -174,6 +176,8 @@
     bool immutable;
     const char* name;
     const char* description;
+
+    os::Mutex* mutex;
   };
 
   class AliasParameter : public VoidParameter {
diff --git a/common/rfb/Hostname.h b/common/rfb/Hostname.h
index f70347f..bd68dc0 100644
--- a/common/rfb/Hostname.h
+++ b/common/rfb/Hostname.h
@@ -19,6 +19,7 @@
 #ifndef __RFB_HOSTNAME_H__
 #define __RFB_HOSTNAME_H__
 
+#include <assert.h>
 #include <stdlib.h>
 #include <rdr/Exception.h>
 #include <rfb/util.h>
@@ -26,30 +27,72 @@
 namespace rfb {
 
   static void getHostAndPort(const char* hi, char** host, int* port, int basePort=5900) {
-    CharArray portBuf;
-    CharArray hostBuf;
+    const char* hostStart;
+    const char* hostEnd;
+    const char* portStart;
+
     if (hi == NULL)
       throw rdr::Exception("NULL host specified");
+
+    assert(host);
+    assert(port);
+
     if (hi[0] == '[') {
-      if (!strSplit(&hi[1], ']', &hostBuf.buf, &portBuf.buf))
+      hostStart = &hi[1];
+      hostEnd = strchr(hostStart, ']');
+      if (hostEnd == NULL)
         throw rdr::Exception("unmatched [ in host");
+
+      portStart = hostEnd + 1;
+      if (*portStart == '\0')
+        portStart = NULL;
     } else {
-      portBuf.buf = strDup(hi);
-    }
-    if (strSplit(portBuf.buf, ':', hostBuf.buf ? 0 : &hostBuf.buf, &portBuf.buf)) {
-      if (portBuf.buf[0] == ':') {
-        *port = atoi(&portBuf.buf[1]);
+      hostStart = &hi[0];
+      hostEnd = strrchr(hostStart, ':');
+
+      if (hostEnd == NULL) {
+        hostEnd = hostStart + strlen(hostStart);
+        portStart = NULL;
       } else {
-        *port = atoi(portBuf.buf);
-        if (*port < 100) *port += basePort;
+        if ((hostEnd > hostStart) && (hostEnd[-1] == ':'))
+          hostEnd--;
+        portStart = strchr(hostStart, ':');
+        if (portStart != hostEnd) {
+          // We found more : in the host. This is probably an IPv6 address
+          hostEnd = hostStart + strlen(hostStart);
+          portStart = NULL;
+        }
       }
-    } else {
-      *port = basePort;
     }
-    if (strlen(hostBuf.buf) == 0)
+
+    if (hostStart == hostEnd)
       *host = strDup("localhost");
-    else
-      *host = hostBuf.takeBuf();
+    else {
+      size_t len;
+      len = hostEnd - hostStart + 1;
+      *host = new char[len];
+      strncpy(*host, hostStart, len-1);
+      (*host)[len-1] = '\0';
+    }
+
+    if (portStart == NULL)
+      *port = basePort;
+    else {
+      char* end;
+
+      if (portStart[0] != ':')
+        throw rdr::Exception("invalid port specified");
+
+      if (portStart[1] != ':')
+        *port = strtol(portStart + 1, &end, 10);
+      else
+        *port = strtol(portStart + 2, &end, 10);
+      if (*end != '\0')
+        throw rdr::Exception("invalid port specified");
+
+      if ((portStart[1] != ':') && (*port < 100))
+        *port += basePort;
+    }
   }
 
 };
diff --git a/common/rfb/KeyRemapper.cxx b/common/rfb/KeyRemapper.cxx
index d33f0a4..b4c2793 100644
--- a/common/rfb/KeyRemapper.cxx
+++ b/common/rfb/KeyRemapper.cxx
@@ -17,6 +17,9 @@
  */
 
 #include <stdio.h>
+
+#include <os/Mutex.h>
+
 #include <rfb/KeyRemapper.h>
 #include <rfb/Configuration.h>
 #include <rfb/LogWriter.h>
@@ -27,14 +30,21 @@
 
 KeyRemapper KeyRemapper::defInstance;
 
-#ifdef __RFB_THREADING_IMPL
-static Mutex mappingLock;
-#endif
+KeyRemapper::KeyRemapper(const char* m)
+{
+  mutex = new os::Mutex;
+
+  setMapping(m);
+}
+
+KeyRemapper::~KeyRemapper()
+{
+  delete mutex;
+}
 
 void KeyRemapper::setMapping(const char* m) {
-#ifdef __RFB_THREADING_IMPL
-  Lock l(mappingLock);
-#endif
+  os::AutoMutex a(mutex);
+
   mapping.clear();
   while (m[0]) {
     int from, to;
@@ -59,9 +69,8 @@
 }
 
 rdr::U32 KeyRemapper::remapKey(rdr::U32 key) const {
-#ifdef __RFB_THREADING_IMPL
-  Lock l(mappingLock);
-#endif
+  os::AutoMutex a(mutex);
+
   std::map<rdr::U32,rdr::U32>::const_iterator i = mapping.find(key);
   if (i != mapping.end())
     return i->second;
diff --git a/common/rfb/KeyRemapper.h b/common/rfb/KeyRemapper.h
index a4b7aa0..1406bad 100644
--- a/common/rfb/KeyRemapper.h
+++ b/common/rfb/KeyRemapper.h
@@ -22,16 +22,20 @@
 #include <map>
 #include <rdr/types.h>
 
+namespace os { class Mutex; }
+
 namespace rfb {
 
   class KeyRemapper {
   public:
-    KeyRemapper(const char* m="") { setMapping(m); }
+    KeyRemapper(const char* m="");
+    ~KeyRemapper();
     void setMapping(const char* m);
     rdr::U32 remapKey(rdr::U32 key) const;
     static KeyRemapper defInstance;
   private:
     std::map<rdr::U32,rdr::U32> mapping;
+    os::Mutex* mutex;
   };
 
 };
diff --git a/common/rfb/Logger_file.cxx b/common/rfb/Logger_file.cxx
index ebe15d5..149ad40 100644
--- a/common/rfb/Logger_file.cxx
+++ b/common/rfb/Logger_file.cxx
@@ -21,36 +21,30 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <os/Mutex.h>
+
 #include <rfb/util.h>
 #include <rfb/Logger_file.h>
-#include <rfb/Threading.h>
 
 using namespace rfb;
 
-
-// If threading is available then protect the write() operation
-// from concurrent accesses
-#ifdef __RFB_THREADING_IMPL
-static Mutex logLock;
-#endif
-
-
 Logger_File::Logger_File(const char* loggerName)
   : Logger(loggerName), indent(13), width(79), m_filename(0), m_file(0),
     m_lastLogTime(0)
 {
+  mutex = new os::Mutex();
 }
 
 Logger_File::~Logger_File()
 {
   closeFile();
+  delete mutex;
 }
 
 void Logger_File::write(int level, const char *logname, const char *message)
 {
-#ifdef __RFB_THREADING_IMPL
-  Lock l(logLock);
-#endif
+  os::AutoMutex a(mutex);
+
   if (!m_file) {
     if (!m_filename) return;
     CharArray bakFilename(strlen(m_filename) + 1 + 4);
diff --git a/common/rfb/Logger_file.h b/common/rfb/Logger_file.h
index 5e0c917..5b5c34e 100644
--- a/common/rfb/Logger_file.h
+++ b/common/rfb/Logger_file.h
@@ -24,6 +24,8 @@
 #include <time.h>
 #include <rfb/Logger.h>
 
+namespace os { class Mutex; }
+
 namespace rfb {
 
   class Logger_File : public Logger {
@@ -43,6 +45,7 @@
     char* m_filename;
     FILE* m_file;
     time_t m_lastLogTime;
+    os::Mutex* mutex;
   };
 
   bool initFileLogger(const char* filename);
diff --git a/common/rfb/Logger_syslog.cxx b/common/rfb/Logger_syslog.cxx
index 291d36c..dc1d0c1 100644
--- a/common/rfb/Logger_syslog.cxx
+++ b/common/rfb/Logger_syslog.cxx
@@ -25,7 +25,6 @@
 #include <rfb/util.h>
 #include <rfb/Logger_syslog.h>
 #include <rfb/LogWriter.h>
-#include <rfb/Threading.h>
 
 using namespace rfb;
 
diff --git a/contrib/packages/rpm/el6/SPECS/tigervnc.spec b/contrib/packages/rpm/el6/SPECS/tigervnc.spec
index 16d1ba5..447eb7f 100644
--- a/contrib/packages/rpm/el6/SPECS/tigervnc.spec
+++ b/contrib/packages/rpm/el6/SPECS/tigervnc.spec
@@ -10,7 +10,7 @@
 
 Name: tigervnc
 Version: @VERSION@
-Release: 4%{?snap:.%{snap}}%{?dist}
+Release: 5%{?snap:.%{snap}}%{?dist}
 Summary: A TigerVNC remote display system
 
 Group: User Interface/Desktops
@@ -177,7 +177,7 @@
 for all in `find . -type f -perm -001`; do
 	chmod -x "$all"
 done
-patch -p1 -b --suffix .vnc < ../xserver115.patch
+patch -p1 -b --suffix .vnc < ../xserver117.patch
 popd
 
 %patch16 -p0 -b .man
@@ -339,7 +339,7 @@
 	-DJAVA_KEY_ALIAS=%{_key_alias} \
 	-DJAVA_STOREPASS=":env STOREPASS" \
 	-DJAVA_KEYPASS=":env KEYPASS" \
-	-DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa .
+	-DJAVA_TSA_URL=http://timestamp.geotrust.com/tsa .
 %endif
 
 JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
@@ -460,6 +460,9 @@
 %endif
 
 %changelog
+* Mon Jun 20 2016 Brian P. Hinz <bphinz@users.sourceforge.net> 1.6.80-5
+- Patch for Xorg 1.17 due to vendor bump of Xorg version
+
 * Sat Apr 02 2016 Brian P. Hinz <bphinz@users.sourceforge.net> 1.6.80-4
 - Fixed CVE-2015-8803 CVE-2015-8804 CVE-2015-8805 secp256r1 and secp384r1 bugs
 
diff --git a/contrib/packages/rpm/el7/SPECS/tigervnc.spec b/contrib/packages/rpm/el7/SPECS/tigervnc.spec
index c440d98..ac58d5b 100644
--- a/contrib/packages/rpm/el7/SPECS/tigervnc.spec
+++ b/contrib/packages/rpm/el7/SPECS/tigervnc.spec
@@ -259,7 +259,7 @@
 	-DJAVA_KEY_ALIAS=%{_key_alias} \
 	-DJAVA_STOREPASS=":env STOREPASS" \
 	-DJAVA_KEYPASS=":env KEYPASS" \
-	-DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa .
+	-DJAVA_TSA_URL=http://timestamp.geotrust.com/tsa .
 %endif
 
 JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
diff --git a/doc/keyboard-test.txt b/doc/keyboard-test.txt
index 800faec..89b5088 100644
--- a/doc/keyboard-test.txt
+++ b/doc/keyboard-test.txt
@@ -3,6 +3,15 @@
 
 Platform specific tests/issues are marked with [].
 
+These tests are primarily about what is sent over the protocol and some
+may be difficult or impossible to test using normal applications. In
+these cases you can turn on debug logging in either the client or the
+server by specifying "-Log *:stderr:100".
+
+We currently have a limitation in Xvnc where it can run out of symbols,
+resulting in nothing being sent to the applications. Just run setxkbmap
+with any layout to reset the symbol table.
+
 Client
 ------
 
@@ -11,74 +20,95 @@
   - ASCII characters
   - Latin 1 character
   - Unicode BMP characters
-  - Unicode non-BMP characters
+  - Unicode non-BMP characters (does any layout actually have these?)
 
 - Dead keys:
 
+  These are not available on a single layout, so you need to switch to
+  test everything. The useful layouts also differ per platform:
+
+    X11: US International for most, Greek for some specific diacretics
+    Win: US International, Czech, Greek Polytonic, Vietnamese
+    OS X: ABC Extended (FIXME: lots of broken keys),
+          Greek (FIXME: cannot be used with TigerVNC)
+
   - Grave
   - Acute
   - Circumflex
   - Tilde
-  - Macron
+  - Macron (FIXME: broken on Win)
   - Breve
   - Dot above
+  - Dot below
   - Diaeresis
   - Ring above
   - Double acute
   - Caron
   - Cedilla
   - Ogonek
-  - Ypogegrammeni
-  - Katakana voiced mark
-  - Katakana semi-voiced mark
-  - Dialytika tonos
+  - Ypogegrammeni (iota below) (FIXME: broken on Win)
+  - Dialytika tonos [Win] (Diaresis on X11, and maybe OS X?)
+  - Comma above (FIXME: broken on Win)
+  - Reversed comma above (FIXME: broken on Win)
+  - Horn [X11?]
+  - Hook above [Win?]
+  - Hook below [X11?, Win?]
+  - Dakuten (Katakana voiced mark) (Only Input Methods layouts?)
+  - Handakuten (Katakana semi-voiced mark) (Only Input Methods layouts?)
   - FIXME: Many more that we currently probably don't support
 
   - No composition on client
 
 - Modifiers:
 
+  X11: You can usually toggle Hyper/Super and Compose/Scroll_Lock using
+       XKB options.
+
   - CapsLock, NumLock (sent but ignored by server)
   - Shift, Ctrl
   - Alt, AltGr, Super [Win, X11] (FIXME: AltGr broken on Win)
+  - Meta [X11]
   - Left/right identification (FIXME: broken for Shift on Win)
-  - CmdL => AltL, CmdR => SuperL, AltL => ModeSwitch, AltR => Level3Shift [Mac]
+  - CmdL => AltL, CmdR => SuperL, AltL => ModeSwitch, AltR => Level3Shift [OS X]
   - Hyper sends Super [X11]
 
   - CapsLock, Shift and AltGr affect symbol lookup
-  - NumLock affects symbol lookup [Win, X11]
   - Ctrl does not affect symbol lookup
-  - Shift inverts NumLock behaviour [X11]
-  - Shift turns NumLock off, but not on [Win] (FIXME: fake Shifts also sent)
-  - CtrlL+AltR fake release [Win]
-  - Ctrl+Alt+any (note behaviour above though)
-  - Ctrl+AltGr+any (FIXME: broken on Win)
+  - CtrlL+AltR is fake released to compensate for Windows' AltGr magic [Win]
+  - Ctrl+Alt+<ANY> sends the same symbol as <ANY> (note behaviour above though)
+  - Ctrl+AltGr+<ANY> sends the same symbol as AltGr+<ANY> (FIXME: broken on Win)
   - "Shift press, A press, Shift release, A release" should not send "a release"
 
 - Numpad:
 
+  - NumLock affects symbol lookup [Win, X11]
   - Numpad specific symbols are sent
-  - Affected by NumLock
   - Decimal key should send Decimal for layouts with . as a symbol, and
     Separator for layouts with , as a symbol
+  - Shift inverts NumLock behaviour [X11]
+  - Shift turns NumLock off, but not on [Win] (FIXME: fake Shifts also sent)
 
 - Multimedia keys:
 
+  OS X: FIXME: all broken
+
   - Back, Forward, Refresh, Stop
-  - HomePage, Search, Favourites
+  - HomePage, Search, Favourites (FIXME: broken on Win)
   - Mail, Calculator
   - Volume up, down, mute
   - Media next, previous, stop, play
-  - Sleep
+  - Sleep (FIXME: broken on Win)
   - FIXME: probably more keys exist
 
 - Non-character keys:
 
-  - F1-F24
-  - Tab, Space, Backspace, Return
-  - LeftTab sends Tab
-  - Esc, PrntScrn, ScrollLock, Pause
-  - Insert, Delete, Home, End, PageUp, PageDown
+  - F1-F24 (FIXME: F14-F15 broken on OS X)
+  - Tab, Space, Backspace, Return, Esc
+  - LeftTab sends Tab [X11?]
+  - PrntScrn, ScrollLock, Pause [X11, Win]
+  - Help [X11?, OS X]
+  - Insert [X11, Win]
+  - Delete, Home, End, PageUp, PageDown
   - Arrow keys
   - Menu
   - Alt+PrntScrn sends Sys_Req [Win]
@@ -93,7 +123,7 @@
 
 - Local input methods are disabled/enabled with focus
 
-- System keys should be grabbed in full screen
+- System keys should be grabbed in full screen (FIXME: lots missing on Win)
 
   The exact keys depends on the system and configuration, but it
   is usually variants of these:
diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt
index 8f698ac..7f7b298 100644
--- a/java/CMakeLists.txt
+++ b/java/CMakeLists.txt
@@ -2,7 +2,7 @@
 
 project(tigervnc-java Java)
 if(NOT VERSION)
-  set(VERSION 1.6.80)
+  set(VERSION 1.7.80)
 endif()
 
 find_package(Java)
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index 887174b..8fcb64e 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -1,7 +1,7 @@
 # Gettext support - mostly borrowed from the Licq project
 
 set(po_FILES
-    bg da de el eo es fi fr it nl pl pt_BR ru sk sr sv tr uk zh_CN
+    bg da de el eo es fi fr it nl pl pt_BR ru sk sr sv tr uk vi zh_CN
 )
 
 if (NOT GETTEXT_MSGMERGE_EXECUTABLE AND NOT GETTEXT_MSGFMT_EXECUTABLE)
diff --git a/po/da.po b/po/da.po
index ec0574c..f917aeb 100644
--- a/po/da.po
+++ b/po/da.po
@@ -1,14 +1,14 @@
 # Danish translation of tigervnc.
-# Copyright (C) 2015 the TigerVNC Team (msgids)
+# Copyright (C) 2016 the TigerVNC Team (msgids)
 # This file is distributed under the same license as the tigervnc package.
-# Joe Hansen <joedalton2@yahoo.dk>, 2015.
+# Joe Hansen <joedalton2@yahoo.dk>, 2015, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-08 15:00+0000\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-04 15:00+0000\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 "Language: da\n"
@@ -17,108 +17,98 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "forbundet til værten %s på port %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Skrivebordsnavn: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Vært: %.80s port: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Størrelse: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Billedformat: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(serverstandard %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Anmodt kodning: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Sidst anvendt kodning: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Linjehastighedsestimat: %d kbit/s"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Protokolversion: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Sikkerhedsmetode: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "SetDesktopSize fejlede: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr "Ugyldig SetColourMapEntries fra server!"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Ukendt kodning %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Ukendt kodning"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Aktiverer fortsættende opdateringer"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Gennemløb %d kbit/s - ændrer til kvalitet %d"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Gennemløb %d kbit/s - fuld farve er nu %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "deaktiveret"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "aktiveret"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "Bruger %s-kodning"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Bruger billedpunktsformat %s"
@@ -127,25 +117,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Ugyldig geometri angivet!"
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Justerer vinduesstørrelse for at undgå utilsigtet anmodning om fuld skærm"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Kunne ikke fange tastatur"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Kunne ikke fange mus"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr "Ugyldig skærmlayout beregnet for anmodning om ny størrelse!"
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Ikke nok hukommelse for framebuffer"
 
@@ -162,160 +152,164 @@
 msgstr "VNC-fremviser: Forbindelsesindstillinger"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Afbryd"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "O.k."
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Komprimering"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Vælg automatisk"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Foretrukken kodning"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Farveniveau"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "Fuld (alle tilgængelige farver)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "Mellem (256 farver)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "Lav (64 farver)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "Meget lav (8 farver)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Tilpasset komprimeringsniveau:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "niveau (1=hurtig, 6=bedst [4-6 bruges sjældent])"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "Tillad JPEG-komprimering:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "kvalitet (0=dårlig, 9=bedst)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Sikkerhed"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Kryptering"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Ingen"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "TLS med anonyme certifikater"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "TLS med X509-certifikater"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Sti til X509 CA-certifikat"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Sti til X509 CRL-fil"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Godkendelse"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "Standard-VNC (usikker uden kryptering)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Bruernavn og adgangskode (usikker uden kryptering)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Inddata"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Vis kun (ignorer mus og tastatur)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Accepter udklipsholderen fra serveren"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Angiv også primær markering"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Send udklipsholderen til serveren"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Send primær markering og klip mellemlager som udklipsholder"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Send primær markering som udklipsholder"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Videresend systemnøgler direkte til serveren (fuld skærm)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Menutast"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Skærm"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Ændr størrelse for ekstern session ved forbind"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Ændr størrelse for ekstern session til det lokale vindue"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Tilstand for fuld skærm"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Aktiver tilstand for fuld skærm over alle skærme"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Div."
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Delt (afbryd ikke andre fremvisere)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Vis punktum når ingen markør"
 
@@ -367,112 +361,112 @@
 msgid "Username:"
 msgstr "Brugernavn:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr "Kan ikke oprette platformspecifik framebuffer: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr "Bruger framebuffer uafhængig af platform"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Ingen skanningskode for udvidet virtuel nøgle 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Ingen skanningskode for virtuel nøgle 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Intet symbol for udvidet virtuel nøgle 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Intet symbol for virtuel nøgle 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Intet symbol for nøglekode 0x%02x (i den nuværende tilstand)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Intet symbol for nøglekode %d (i den nuværende tilstand)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "&Afslut fremviser"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&Fuld skærm"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "&Minimer"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "Ændr størrelse for &vindue til session"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&Ctrl"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&Alt"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "Send %s"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "Send Ctrl-Alt-&Slet"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "&Opdater skærm"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "&Indstillinger ..."
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "Forbindelses&info ..."
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "Om &TigerVNC-fremviseren ..."
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Fjern %menu"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "VNC-forbindelsesinfo"
 
@@ -494,123 +488,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr "Skærm mangler pixmap-format for standarddybde"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr "Kunne ikke finde et egnet pixmap-format"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr "Kun skærme med »true colour« er understøttet"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Bruger standardfarvekort og visuel, TrueColor, dybde %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Kunne ikke oprette framebuffer-billede"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "Navnet på parameteren %s var for lang til at kunne skrives til registret"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "Parameteren %s var for lang til at kunne skrives til registret"
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Kunne ikke skrive parameteren %s af typen %s til registret: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "Navnet for parameteren %s var for lang til at kunne læses fra registret"
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr "Kunne ikke læse parameteren %s fra registret: %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "Parameteren %s var for lang til at kunne læses fra registret"
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Kunne ikke oprette registernøgle: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Ukendt parametertype for parameteren %s"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Kunne ikke lukke registernøgle: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Kunne ikke åbne registernøgle: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr "Kunne ikke skrive konfigurationsfil, kan ikke indhente hjemmemappens sti."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Kunne ikke skrive konfigurationsfil, kan ikke åbne %s: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr "Kunne ikke læse konfigurationsfil, kan ikke indhente hjemmemappens sti."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Kunne ikke læse konfigurationsfil, kan ikke åbne %s: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Kunne ikke læse linje %d i filen %s: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Linjen er for lang"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "Konfigurationsfilen %s er i et ugyldigt format"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Ugyldigt format"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Ugyldigt format eller for stor værdi"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Ukendt parameter %s på linje %d i filen %s"
@@ -632,86 +626,92 @@
 msgid "About TigerVNC Viewer"
 msgstr "Om TigerVNC-fremviseren"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Intern FLTK-fejl. Afbryder."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Fejl ved start af ny TigerVNC-fremviser: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Opsigelsessignalet %d er blevet modtaget. TigerVNC-fremviseren vil nu afslutte."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "TigerVNC-fremviser"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Nej"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Ja"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Luk"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "Om"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Skjul"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Afslut"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Tjenester"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Skjul andre"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Vis alle"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Fil"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Ny forbindelse"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr "Kunne ikke oprette VNC-hjemmemappen: Kan ikke indhente hjemmemappens sti."
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr "Kunne ikke oprette VNC-hjemmemappe: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "Parameterne -listen og -via er ikke kompatible"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Lytter på port %d"
 
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Intern FLTK-fejl. Afbryder."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Ukendt kodning %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Ukendt kodning"
diff --git a/po/de.po b/po/de.po
index 3c1a20a..796c553 100644
--- a/po/de.po
+++ b/po/de.po
@@ -2,13 +2,13 @@
 # Copyright (C) 2014 the TigerVNC Team (msgids)
 # This file is distributed under the same license as the tigervnc package.
 # Klaus Franken <Klaus.Franken@StrukturPunkt.de>, 2005.
-# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015.
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-05 22:02+0100\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-07 22:49+0200\n"
 "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -16,110 +16,100 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.5\n"
+"X-Generator: Poedit 1.8.7.1\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "verbunden mit Rechner %s, Port %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Desktop-Name: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Rechner: %.80s Port: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Größe: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Pixelformat: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(Server-Vorgabe %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Angeforderte Zeichenkodierung: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Zuletzt verwendete Zeichenkodierung: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Geschätzte Verbindungsgeschwindigkeit: %d kbit/s"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Protokollversion: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Sicherheitsmethode: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "SetDesktopSize fehlgeschlagen: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr "Ungültige SetColourMapEntries vom Server!"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Unbekannte Kodierung %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Unbekannte Kodierung"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Fortlaufende Aktualisierungen aktivieren"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Durchsatz %d kbit/s - Qualität wird auf %d geändert"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Durchsatz %d kbit/s - Vollfarbmodus ist jetzt %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "deaktiviert"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "aktiviert"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "%s-Verschlüsselung wird verwendet"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Pixelformat %s wird verwendet"
@@ -128,25 +118,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Unzulässige Geometrie wurde angegeben!"
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Fenstergröße anpassen, um zufällige Vollbild-Anforderung zu vermeiden"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Fehler beim Erkennen der Tastatur"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Fehler beim Erkennen der Maus"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr "Ungültige Bildschirmanordnung wurde für die Größenänderungsanforderung ermittelt!"
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Nicht genügend Speicher für Framebuffer"
 
@@ -163,160 +153,164 @@
 msgstr "VNC-Betrachter: Verbindungsoptionen"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "OK"
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Kompression"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Automatisch auswählen"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Bevorzugte Kodierung"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Farbstufe"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "Voll (alle verfügbaren Farben)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "Mittel (256 Farben)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "Niedrig (64 Farben)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "Sehr gering (8 Farben)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Individuelle Kompressionsstufe:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "Stufe (1=schnell, 9=beste) [4-6 sind selten sinnvoll]"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "JPEG-Kompression erlauben:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "Qualität (0=schlechte, 9=beste)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Sicherheit"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Verschlüsselung"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Keine"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "TLS mit anonymen Zertifikaten"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "TLS mit X509-Zertifikaten"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Pfad zum X509-CA-Zertifikat"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Pfad zur X509-CRL-Datei"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Authentifizierung"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "Standard-VNC (unsicher ohne Verschlüsselung)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Benutzername und Passwort (unsicher ohne Verschlüsselung)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Eingabe"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Nur Ansicht (Maus und Tastatur ignorieren)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Zwischenablage vom Server akzeptieren"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Primäre Auswahl ebenfalls setzen"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Zwischenablage zum Server senden"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Primäre Auswahl und Ausschneidepuffer als Zwischenablage senden"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Primäre Auswahl als Zwischenablage senden"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Systemtasten direkt an den Server übergeben (Vollbild)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Menü-Taste"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Bildschirm"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Ferne Sitzung beim Verbinden an das lokale Fenster anpassen"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Ferne Sitzung an das lokale Fenster anpassen"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Vollbildmodus"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Vollbildmodus für alle Monitore aktivieren"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Sonstiges"
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Gemeinsamer Zugriff (andere VNC-Viewer nicht trennen)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Punkt zeigen, wenn kein Cursor"
 
@@ -368,112 +362,112 @@
 msgid "Username:"
 msgstr "Benutzername:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr "Plattformspezifischer Framebuffer konnte nicht erstellt werden: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr "Plattformunabhängiger Framebuffer wird verwendet"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Kein Scan-Code für erweiterte virtuelle Taste 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Kein Scan-Code für virtuelle Taste 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Kein Symbol für erweiterte virtuelle Taste 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Kein Symbol für virtuelle Taste 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Kein Symbol für Tastencode 0x%02x (im aktuellen Zustand)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Kein Symbol für Tastencode %d (im aktuellen Zustand)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "Betrachter be&enden"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&Vollbildmodus"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "M&inimieren"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "&Fenster an Sitzung anpassen"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&Strg"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&Alt"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "%s senden"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "Strg-Alt-E&ntf senden"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "Bildschirm &aktualisieren"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "&Optionen …"
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "Verbindungs&informationen …"
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "Info zu &TigerVNC-Betrachter …"
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Menü &verlassen"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "VNC-Verbindungsinformation"
 
@@ -495,123 +489,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr "Anzeige hat kein Pixmap-Format für die vorgegebene Tiefe"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr "Es konnte kein geeignetes Pixmap-Format gefunden werden"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr "Nur True-Color-Anzeigen werden unterstützt"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Vorgegebene Farbzuweisung und Anzeige wird verwendet,Tiefe %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Framebuffer-Image konnte nicht erstellt werden"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "Der Parameterwert %s war beim Schreiben in die Registrierungsdatenbank zu groß"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "Der Parameterwert %s war zu groß zum Schreiben in die Registrierungsdatenbank."
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Der Parameterwert %s des Typs %s konnte nicht in die Registrierungsdatenbank geschrieben werden: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "Der Parametername %s war zu groß zum Lesen aus der Registrierungsdatenbank."
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr "Der Parameter %s konnte nicht aus der Registrierungsdatenbank gelesen werden %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "Der Parameterwert %s war zu groß zum Lesen aus der Registrierungsdatenbank."
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Registrierungsschlüssel konnte nicht erzeugt werden: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Unbekannter Parametertyp für Parameter %s"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Registrierungsschlüssel konnte nicht geschlossen werden: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Registrierungsschlüssel konnte nicht geöffnet werden: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr "Konfigurationsdatei konnte nicht geschrieben werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Konfigurationsdatei kann nicht geschrieben werden, %s lässt sich nicht öffnen: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr "Konfigurationsdatei konnte nicht gelesen werden, auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Konfigurationsdatei kann nicht gelesen werden, %s lässt sich nicht öffnen: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Zeile %d in Datei %s konnte nicht gelesen werden: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Zeile ist zu lang"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "Format der Konfigurationsdatei %s ist ungültig"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Ungültiges Format"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Ungültiges Format oder zu großer Wert"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Ungültiger Parametername %s in Zeile %d in Datei %s"
@@ -634,89 +628,95 @@
 msgid "About TigerVNC Viewer"
 msgstr "Info zu TigerVNC-Betrachter"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Interner FLTK-Fehler. Abbruch."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Fehler beim Starten des neuen TigerVNC-Betrachters: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Terminierungssignal %d wurde empfangen. Der TigerVNC-Betrachter wird nun beendet."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "TigerVNC-Betrachter"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Nein"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Ja"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Schließen"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "Info"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Verbergen"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Beenden"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Dienste"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Andere verbergen"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Alle zeigen"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Datei"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Neue Verbindung"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr "VNC-Benutzerverzeichnis konnte nicht angelegt werden: auf Benutzerverzeichnispfad kann nicht zugegriffen werden."
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr "VNC-Benutzerverzeichnis konnte nicht erstellt werden: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "Die Parameter -listen und -via schließen sich gegenseitig aus"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Am Port %d wird gelauscht"
 
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Interner FLTK-Fehler. Abbruch."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Unbekannte Kodierung %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Unbekannte Kodierung"
 
 #~ msgid "Alt"
 #~ msgstr "Alt"
diff --git a/po/nl.po b/po/nl.po
index 37598a8..0c24da1 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -2,13 +2,13 @@
 # Copyright (C) the TigerVNC Team (msgids)
 # This file is distributed under the same license as the tigervnc package.
 #
-# Benno Schulenberg <benno@vertaalt.nl>, 2014, 2015.
+# Benno Schulenberg <benno@vertaalt.nl>, 2014, 2015, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-04 21:42+0100\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-26 11:15+0200\n"
 "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
@@ -18,108 +18,98 @@
 "X-Generator: Lokalize 1.0\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "verbonden met host %s poort %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Bureaubladnaam: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Host: %.80s poort: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Grootte: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Pixel-indeling: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(serverstandaard is %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Gevraagde codering: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Laatst gebruikte codering: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Geschatte lijnsnelheid: %d kbit/s"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Protocolversie: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Beveiligingsmethode: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "### SetDesktopSize is mislukt: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr "Ongeldige 'SetColourMapEntries' van de server!"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Onbekende codering %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Onbekende codering"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Continue updates inschakelen"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Throughput is %d kbit/s -- overgaand naar kwaliteit %d"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Throughput is %d kbit/s -- volledige kleuren is nu %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "uitgeschakeld"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "ingeschakeld"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "Codering %s wordt gebruikt"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Pixel-indeling %s wordt gebruikt"
@@ -128,25 +118,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Ongeldige afmetingen opgegeven!"
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Venstergrootte wordt aangepast om onbedoeld volledigschermverzoek te vermijden"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Het pakken van het toetsenbord is mislukt"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Het pakken van de muis is mislukt"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr "Ongeldige schermopmaak berekend voor wijzigingsverzoek."
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Onvoldoende geheugen beschikbaar voor framebuffer"
 
@@ -163,160 +153,164 @@
 msgstr "VNC-viewer: Verbindingsopties"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Annuleren"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "OK"
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Compressie"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Automatisch selecteren"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Voorkeurscodering"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Kleurdiepte"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "volledig (alle beschikbare kleuren)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "medium (256 kleuren)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "laag (64 kleuren)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "zeer laag (8 kleuren)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Aangepast compressieniveau:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "niveau (1=snel, 6=best [4-6 zijn zelden nuttig])"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "JPEG-compressie toestaan:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "kwaliteit (0=slecht, 9=best)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Beveiliging"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Versleuteling"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Geen"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "TLS met anonieme certificaten"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "TLS met X509-certificaten"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Pad naar X509 CA-certificaat"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Pad naar X509 CRL-bestand"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Authenticatie"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "Standaard VNC (onveilig zonder versleuteling)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Gebruikersnaam en wachtwoord (onveilig zonder versleuteling)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Invoer"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Alleen kijken (muis en toetsenbord negeren)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Klembord van server accepteren"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Ook de hoofdselectie instellen"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Klembord naar server zenden"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Hoofdselectie en knipbuffer als klembord verzenden"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Hoofdselectie als klembord verzenden"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Systeemsleutels direct aan server doorgeven (volledigscherm)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Menutoets"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Scherm"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Grootte van gindse sessie aanpassen bij verbinden"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Gindse sessie aan het lokale venster aanpassen"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Volledigscherm-modus"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Volledigscherm-modus over alle beeldschermen inschakelen"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Overige"
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Gedeeld (verbinding van andere viewers niet verbreken)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Punt tonen als er geen cursor is"
 
@@ -368,112 +362,112 @@
 msgid "Username:"
 msgstr "Gebruikersnaam:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr "Kan geen platform-specifiek framebuffer aanmaken: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr "Platform-onafhankelijk framebuffer wordt gebruikt"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Geen scancode voor uitgebreide virtuele toets 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Geen scancode voor virtuele toets 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Geen symbool voor uitgebreide virtuele toets 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Geen symbool voor virtuele toets 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Geen symbool voor toetscode 0x%02x (in de huidige toestand)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Geen symbool voor toetscode %d (in de huidige toestand)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "Viewer af&sluiten"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&Volledig scherm"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "&Minimaliseren"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "Ve&nster aan sessie aanpassen"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&Ctrl"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&Alt"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "%s zenden"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "Ctrl-Alt-&Del zenden"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "Sch&erm verversen"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "&Opties..."
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "Verbindings&info..."
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "Info over &TigerVNC-viewer..."
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Menu ver&laten"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "VNC-verbindingsinfo"
 
@@ -495,123 +489,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr "Scherm heeft geen pixmap-indeling voor standaard kleurdiepte"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr "Kan geen geschikte pixmap-indeling vinden"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr "Alleen true-color beeldschermen worden ondersteund"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Standaard kleurenkaart en visual worden gebruikt, TrueColor, diepte %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Kan framebuffer-afbeelding niet aanmaken"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "De naam van parameter %s is te lang om naar het register te schrijven"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "Parameter %s is te lang om naar het register te schrijven"
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Schrijven van parameter %s van type %s naar het register is mislukt: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "De naam van parameter %s is te lang om uit het register te lezen"
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr "Lezen van parameter %s uit het register is mislukt: %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "Parameter %s is te lang om uit het register te lezen"
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Aanmaken registersleutel is mislukt: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Onbekend parametertype voor parameter %s"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Sluiten van registersleutel is mislukt: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Openen van registersleutel is mislukt: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr "Schrijven van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Schrijven van configuratiebestand is mislukt; kan %s niet openen: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr "Lezen van configuratiebestand is mislukt; kan pad van thuismap niet verkrijgen."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Lezen van configuratiebestand is mislukt; kan %s niet openen: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Lezen van regel %d in bestand %s is mislukt: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Regel is te lang"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "Configuratiebestand %s het een ongeldige opmaak"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Ongeldige opmaak"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Ongeldige opmaak of te grote waarde"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Onbekende parameter %s op regel %d in bestand %s"
@@ -633,89 +627,95 @@
 msgid "About TigerVNC Viewer"
 msgstr "Info over TigerVNC-viewer"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Interne FLTK-fout.  Bezig met afsluiten."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Fout tijdens starten van nieuwe TigerVNC-viewer: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Beëindigingssignaal %d werd ontvangen.  TigerVNC-viewer sluit nu af."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "TigerVNC-viewer"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Nee"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Ja"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Sluiten"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "Info"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Verbergen"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Afsluiten"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Diensten"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Andere verbergen"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Alles tonen"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Bestand"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Nieuwe verbinding"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr "Kan de VNC-thuismap niet aanmaken: kan pad van thuismap niet verkrijgen."
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr "Kan de VNC-thuismap niet aanmaken: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "de opties '-listen' en '-via' gaan niet samen"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Luisterend op poort %d"
 
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Interne FLTK-fout.  Bezig met afsluiten."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Onbekende codering %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Onbekende codering"
 
 #~ msgid "Bad Name/Value pair on line: %d in file: %s"
 #~ msgstr "Ongeldig naam-waardepaar op regel %d in bestand %s"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index ec1dd04..0a061d8 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,14 +1,14 @@
 # Brazilian Portuguese translation of tigervnc.
-# Copyright (C) 2015 the TigerVNC Team (msgids)
+# Copyright (C) 2016 the TigerVNC Team (msgids)
 # This file is distributed under the same license as the tigervnc package.
-# Rafael Fontenelle <rffontenelle@gmail.com>, 2015.
+# Rafael Fontenelle <rffontenelle@gmail.com>, 2015, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-15 15:50-0200\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-01 15:36-0200\n"
 "Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
 "Language: pt_BR\n"
@@ -18,108 +18,98 @@
 "X-Generator: Poedit 1.8.6\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "conectado ao host %s porta %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Nome do desktop: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Host %.80s porta: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Tamanho: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Formato de pixel: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(padrão do servidor %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Codificação solicitada: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Última codificação usada: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Velocidade estimada da linha: %d kbit/s"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Versão do protocolo: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Método de segurança: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "Definir tamanho do desktop falhou: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr "SetColourMapEntries inválido do servidor!"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Codificação %d desconhecida"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Codificação desconhecida"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Ativando atualizações contínuas"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Resultado %d kbit/s - alteração para qualidade %d"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Resultado %d kbit/s - a cor total agora está em %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "desativado"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "ativado"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "Usando codificação %s"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Usando formato de pixel %s"
@@ -128,25 +118,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Geometria inválida especificada!"
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Ajustando tamanho de janela para evitar solicitação de tela cheia acidental"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Falha ao se conectar com o teclado"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Falha ao se conectar com o mouse"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr "Layout de tela inválida computada para solicitação de redimensionamento!"
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Memória insuficiente para o framebuffer"
 
@@ -163,160 +153,164 @@
 msgstr "Visualizador VNC: Opções da conexão"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "OK"
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Compressão"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Seleção automática"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Codificação preferida"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Profundidade de cores"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "Completo (todas as cores)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "Médio (256 cores)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "Baixo (64 cores)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "Muito baixo (8 cores)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Compressão personalizada:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "nível (1=rápido, 6=o melhor [4-6 raramente úteis])"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "Permite compressão JPEG:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "qualidade (0=ruim, 9=o melhor)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Segurança"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Criptografia"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Nenhum"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "TLS com certificados anônimos"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "TLS com certificados X509"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Caminho para o certificado X509 CA"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Caminho para o arquivo X509 CRL"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Autenticação"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "VNC padrão (inseguro sem criptografia)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Usuário e senha (inseguro sem criptografia)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Entrada"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Ver apenas (ignora mouse e teclado)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Aceitar área de transferência do servidor"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Também enviar seleção primária"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Enviar área de transferência para o servidor"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Enviar seleção primária e recortar buffer como área de transferência"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Enviar seleção primária como área de transferência"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Passar teclas de sistema diretamente para o servidor (tela cheia)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Tecla de menu"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Tela"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Redimensionar a sessão remota ao conectar"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Redimensionar a sessão remota para a janela local"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Modo tela cheia"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Ativar o modo de tela cheia em todos os monitores"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Diversos"
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Compartilhado (não desconecta outros visualizadores)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Mostrar ponto quando estiver sem mouse"
 
@@ -334,11 +328,11 @@
 
 #: vncviewer/ServerDialog.cxx:69
 msgid "Load..."
-msgstr "Carregar…"
+msgstr "Carregar..."
 
 #: vncviewer/ServerDialog.cxx:74
 msgid "Save As..."
-msgstr "Salvar como…"
+msgstr "Salvar como..."
 
 #: vncviewer/ServerDialog.cxx:86
 msgid "About..."
@@ -368,112 +362,112 @@
 msgid "Username:"
 msgstr "Nome de usuário:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
-msgstr "Não foi possível criar frambuffer específico da plataforma: %s"
+msgstr "Não foi possível criar framebuffer específico da plataforma: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
-msgstr "Usando frambuffer independente de plataforma"
+msgstr "Usando framebuffer independente de plataforma"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Nenhum código de scan para a tecla virtual estendida 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Nenhum código de scan para a tecla virtual 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Nenhum símbolo para a tecla virtual estendida 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Nenhum símbolo para a tecla virtual 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Nenhum símbolo para a tecla virtual 0x%02x (no estado atual)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Nenhum símbolo para a tecla virtual %d (no estado atual)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "&Sair do visualizador"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&Tela cheia"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "Minimi&zar"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "Redimensionar a &janela para a sessão"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&Ctrl"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&Alt"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "Enviar %s"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "Enviar Ctrl-Alt-&Del"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "&Atualizar tela"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "&Opções..."
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "&Informação de conexão..."
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "Sobre o visualizador &TigerVNC..."
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Recusar &menu"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "Informação de conexão VNC..."
 
@@ -495,123 +489,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
-msgstr "Tela carece de formato de pixamp para profundidade padrão"
+msgstr "Tela carece de formato de pixmap para profundidade padrão"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
-msgstr "Não foi possível localizar um formato de pixamo adequado"
+msgstr "Não foi possível localizar um formato de pixmap adequado"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
-msgstr "Apenas suporte a telas true color"
+msgstr "Apenas suporte a telas True Color"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Usando mapa de cores padrão e visual, TrueColor, profundidade %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Não foi possível criar imagem framebuffer"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "O nome do parâmetro %s era grande demais ser escrito no registro"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "O parâmetro %s era grande demais para ser escrito no registro"
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Falha ao escrever parâmetro %s do tipo %s no registro: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "O nome do parâmetro %s era grande demais ser lido do registro"
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
-msgstr "flaha ao ler parâmetro %s do registro: %ld"
+msgstr "Falha ao ler parâmetro %s do registro: %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "O parâmetro %s era grande demais para ser lido do registro"
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Falha ao criar chave de registro: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Tipo de parâmetro desconhecido para o parâmetro %s"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Falha ao fechar chave de registro: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Falha ao abrir chave de registro: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
-msgstr "Não foi possível escrever o arquivo de configuração, não foi possível obter o caminho do diretório home."
+msgstr "Não foi possível escrever o arquivo de configuração, não foi possível obter o caminho do diretório HOME."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Não foi possível escrever o arquivo de configuração, não foi possível abrir %s: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
-msgstr "Não foi possível ler o arquivo de configuração, não foi possível obter o caminho do diretório home."
+msgstr "Não foi possível ler o arquivo de configuração, não foi possível obter o caminho do diretório HOME."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Não foi possível ler o arquivo de configuração, não foi possível abrir %s: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Falha ao ler a linha %d no arquivo %s: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Linha longa demais"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "O arquivo de configuração %s está em um formato inválido"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Formato inválido"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Formato inválido ou valor grande demais"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Parâmetro %s desconhecido na linha %d no arquivo %s"
@@ -633,89 +627,95 @@
 msgid "About TigerVNC Viewer"
 msgstr "Sobre o Visualizador TigerVNC"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Erro interno no FLTK. Saindo."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Erro ao iniciar novo Visualizador TigerVNC: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Sinal de terminação %d foi recebido. Visualizador TigerVNC vai fechar agora."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "Visualizador TigerVNC"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Não"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Sim"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Fechar"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "Sobre"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Ocultar"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Sair"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Serviços"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Ocultar Outros"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Exibir Todos"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Arquivo"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Nova Conexão"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
-msgstr "Não foi possível criar o diretório home VNC: não foi possível obter o caminho do diretório home."
+msgstr "Não foi possível criar o diretório HOME do VNC: não foi possível obter o caminho do diretório HOME."
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
-msgstr "Não foi possível criar um diretório inicial VNC: %s."
+msgstr "Não foi possível criar um diretório HOME do VNC: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "Os parâmetros -listen e -via são incompatíveis"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Ouvindo na porta %d"
 
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Erro interno no FLTK. Saindo."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Codificação %d desconhecida"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Codificação desconhecida"
 
 #~ msgid "Multiple characters given for key code %d (0x%04x): '%s'"
 #~ msgstr "Diversos caracteres fornecidos como código de chave %d (0x%04x): '%s'"
diff --git a/po/ru.po b/po/ru.po
index a35981e..67884af 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,126 +1,117 @@
 # Russian translation for tigervnc.
 # Copyright © 2016 the TigerVNC Team (msgids)
 # This file is distributed under the same license as the tigervnc package.
-# Constantin Kaplinsky <const@tightvnc.com>, 2011.
 # PuppyRus linux team <www.puppyrus.org>.
+# Constantin Kaplinsky <const@tightvnc.com>, 2011.
 # Pavel Maryanov <acid@jack.kiev.ua>, 2016.
+# Yuri Kozlov <yuray@komyakino.ru>, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2016-04-07 16:08+0300\n"
-"Last-Translator: Pavel Maryanov <acid@jack.kiev.ua>\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-07 09:23+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
 "Language: ru_UA\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 1.8.7.1\n"
+"X-Generator: Lokalize 1.5\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "подключен к компьютеру %s, порт %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Имя компьютера: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Компьютер: %.80s порт: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Размер: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Формат пикселей: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(сервер по умолчанию %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Запрошено кодирование: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Используется кодирование: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Скорость соединения: %d кбит/с"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Версия протокола: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Метод защиты: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "Ошибка SetDesktopSize: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
-msgstr "С сервера получен недопустмый SetColourMapEntries"
+msgstr "С сервера получен недопустимый SetColourMapEntries"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Неизвестное кодирование %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Неизвестное кодирование"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Включение непрерывного обновления"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Пропускная способность %d кбит/с. Установлено качество %d"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Пропускная способность %d кбит/с. Глубина цвета %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "отключено"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "включено"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "Используется кодирование %s"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Используется формат пикселей %s"
@@ -129,25 +120,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Указан недопустимый размер экрана."
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Зафиксировать размер окна, чтобы исключить переключения на полный экран"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Не удалось перехватить клавиатуру"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Не удалось перехватить мышь"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
-msgstr "Для запроса на изменение рамера рассчитан недопустимый макет экрана."
+msgstr "Для запроса на изменение размера рассчитан недопустимый макет экрана."
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Недостаточно памяти для framebuffer"
 
@@ -164,160 +155,164 @@
 msgstr "VNC Viewer: параметры соединения"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Отмена"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "ОК"
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Сжатие"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Автоматический выбор"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Вид кодирования"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Глубина цвета"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "Полная (все цвета)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "Средняя (256 цветов)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "Низкая (64 цвета)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "Минимум цвета (8 цветов)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Задать уровень сжатия:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "уровень (1=мин, 6=макс. [4-6 используются редко])"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "Разрешить сжатие JPEG:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "качество (0=наихудшее, 9=наилучшее)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Безопасность"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Шифрование"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Нет"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "TLS с анонимными сертификатами"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "TLS с сертификатами X509"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Путь к сертификату X509 CA"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Путь к файлу X509 CRL"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Авторизация"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "Стандартный VNC (без защиты и шифрования)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Имя пользователя и пароль (без защиты и шифрования)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Ввод"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Только просмотр (не перехватывать мышь и клавиатуру)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Принимать буфер обмена с сервера"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Также принимать мышиный буфер"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Отправлять буфер обмена на сервер"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Отправлять выделение в терминале в буфер обмена сервера"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Отправлять мышиный буфер туда же, куда и буфер обмена"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Отправлять сочетания клавиш (для полного экрана)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Вызов меню:"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Экран"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Изменить размер удалённого экрана"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Изменить размер удалённого сеанса до локального окна"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Полноэкранный режим"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Расширить режим полного экрана на все мониторы"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Разное"
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Совместная работа (не отключать других клиентов)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Показывать точку при отсутствии курсора"
 
@@ -369,112 +364,112 @@
 msgid "Username:"
 msgstr "Имя пользователя:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr "Не удаётся создать framebuffer: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr "Используется универсальный framebuffer"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Нет скан-кода для дополнительной виртуальной клавиши 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Нет скан-кода для виртуальной клавиши 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Нет символа для расширенной виртуальной клавиши 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Нет символа для виртуальной клавиши 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Нет символа для кода клавиши 0x%02x (в текущем состоянии)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Нет символа для кода клавиши %d (в текущем состоянии)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "В&ыход"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&Полный экран"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "&Свернуть"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "Изменить размер окна"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&CTRL"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&ALT"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "Отправить %s"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "Отправить CTRL-ALT-&DEL"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "&Обновить экран"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "&Параметры"
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "Сведения о соединении"
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "О &TigerVNC viewer"
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Закрыть &меню"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "Сведения о соединении VNC"
 
@@ -496,123 +491,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr "Неправильный формат pixmap для выбранной глубины цвета"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr "Не удалось найти допустимый формат pixmap"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr "Поддерживаются только полноцветные экраны"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Используется стандартная цветовая карта и визуальное оформление, TrueColor, глубина %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Не удалось создать изображение в framebuffer"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "Название параметра %s слишком длинное для записи в реестр"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "Параметр %s слишком длинный для записи в реестр"
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Не удалось записать параметр %s типа %s в реестр: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "Название параметра %s слишком длинное для чтения из реестра"
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr "Не удалось прочитать параметр %s из реестра: %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "Параметр %s слишком длинный для чтения из реестра"
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Не удалось создать ключ реестра: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Неизвестный тип для параметра %s"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Не удалось закрыть ключ реестра: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Не удалось открыть ключ реестра: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr "Не удалось создать домашний каталог VNC: не удаётся получить путь к домашнему каталогу."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Не удалось записать файл конфигурации: не удаётся открыть %s: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr "Не удалось прочитать файл конфигурации: не удаётся получить путь к домашнему каталогу."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Не удалось прочитать файл конфигурации: не удаётся открыть %s: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Не удалось прочитать строку  %d из файла %s: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Строка слишком длинная"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "Недопустимый формат файла конфигурации %s"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Недопустимый формат"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Недопустимый формат или слишком большое значение"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Неизвестный параметр %s в строке %d файла %s"
@@ -634,86 +629,92 @@
 msgid "About TigerVNC Viewer"
 msgstr "О TigerVNC viewer"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Внутренняя ошибка FLTK. Выход."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Не удалось запустить новый TigerVNC Viewer: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Получен сигнал завершения работы %d. TigerVNC Viewer будет закрыт."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "TigerVNC Viewer"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Нет"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Да"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Закрыть"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "О программе"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Скрыть"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Выход"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Службы"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Скрыть прочее"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Показать все"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Файл"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Новое соединение"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr "Не удалось создать домашний каталог VNC: не удаётся получить путь к домашнему каталогу."
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr "Не удалось создать домашний каталог VNC: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "Параметры -listen и -via несовместимы"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Прослушивается порт %d"
 
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Внутренняя ошибка FLTK. Выход."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Неизвестное кодирование %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Неизвестное кодирование"
diff --git a/po/sr.po b/po/sr.po
index 6768e6b..b452195 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,13 +1,13 @@
 # Serbian translation for tigervnc.
-# Copyright © 2015 the TigerVNC Team (msgids)
+# Copyright © 2016 the TigerVNC Team (msgids)
 # This file is distributed under the same license as the tigervnc package.
 # Мирослав Николић <miroslavnikolic@rocketmail.com>, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc-1.5.90\n"
+"Project-Id-Version: tigervnc-1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2016-03-06 15:42+0200\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-08-07 21:27+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
 "Language: sr\n"
@@ -16,108 +16,98 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "повезан сам са домаћином „%s“ прикључник %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Назив радне површи: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Домаћин: %.80s прикључник: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Величина: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Формат пиксела: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(основно на серверу %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Затражено кодирање: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Последње коришћено кодирање: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Процењена брзина линије: %d kbit/s"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Издања протокола: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Метод безбедности: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "Неуспело подешавање величине радне површи: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr "Неисправни уноси подешавања мапе боје са сервера!"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Непознато кодирање „%d“"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Непознато кодирање"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Укључујем непрекидно освежавање"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Пропусност је %d kbit/s — мењам на квалитет %d"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Пропусност је %d kbit/s — пуна боја је сада %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "искључена"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "укључена"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "Користим „%s“ кодирање"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Користим формат пиксела %s"
@@ -126,25 +116,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Наведена је неисправна геометрија!"
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Прилагођавам величину прозора да би се избегли случајни захтеви за целим екраном"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Неуспех хватања тастатуре"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Неуспех хватања миша"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr "Прорачунат је неодговарајући распоред екрана за захтев промене величине!"
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Нема довољно меморије за међумеморију кадра"
 
@@ -161,160 +151,164 @@
 msgstr "ВНЦ прегледач: Могућности повезивања"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Откажи"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "У реду"
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Сажимање"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Сам изабери"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Жељено кодирање"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Ниво боје"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "Пун (све доступне боје)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "Средњи (256 боја)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "Низак (64 боје)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "Врло низак (8 боје)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Произвољни ниво сажимања:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "ниво (1=брзо, 6=најбоље [4-6 се ретко користи])"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "Дозволи ЈПЕГ сажимање:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "квалитет (0=лош, 9=најбољи)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Безбедност"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Шифровање"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Ништа"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "ТЛС са анонимним уверењима"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "ТЛС са X509 уверењима"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Путања до X509 уверења"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Путања до X509 ЦРЛ датотеке"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Потврђивање идентитета"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "Стандардни ВНЦ (несигурно без шифровања)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Корисник и лозинка (несигурно без шифровања)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Улаз"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Само преглед (занемари миша и тастатуру)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Прихвати оставу са сервера"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Такође постави први избор"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Пошаљи оставу на сервер"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Пошаљи први избор и исеци међумеморију као оставу"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Пошаљи први избор као оставу"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Проследи системске кључеве директно на сервер (пун екран)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Тастер изборника"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Екран"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Промени величину удаљене сесије приликом повезивања"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Промени величину удаљене сесије на месни прозор"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Режим пуног екрана"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Укључи режим преко целог екрана на свим мониторима"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Разно"
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Дељено (не прекидај везу другим прегледачима)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Прикажи тачку када нема курзора"
 
@@ -366,112 +360,112 @@
 msgid "Username:"
 msgstr "Корисник:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr "Не могу да направим међумеморију кадра особену за платформу: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr "Користим међумеморију кадра независну од платформе"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Нема шифре прегледа за проширени виртуелни кључ 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Нема шифре прегледа за виртуелни кључ 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Нема симбола за проширени виртуелни кључ 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Нема симбола за виртуелни кључ 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Нема симбола за шифру кључа 0x%02x (у текућем стању)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Нема симбола за шифру кључа %d (у текућем стању)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "&Напусти прегледача"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&Пун екран"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "&Умањи"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "&Величина прозора на сесију"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&Ктрл"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&Алт"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "Пошаљи „%s“"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "Пошаљи Ктрл-Алт-&Дел"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "&Освежи екран"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "&Могућности..."
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "Подаци о &вези..."
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "О &програму..."
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Одбаци &изборник"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "Подаци о ВНЦ вези"
 
@@ -493,123 +487,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr "Приказу недостаје формат пиксмапе за основну дубину"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr "Не могу да нађем погодан формат пиксмапе"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr "Само прикази праве боје су подржани"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Користим основну мапу боје и видности, Права боја, дубине %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Не могу да направим слику међумеморије кадра"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "Назив параметра „%s“ беше превелик за уписивање у регистар"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "Параметар „%s“ беше превелик за уписивање у регистар"
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Нисам успео да упишем параметар „%s“ врсте „%s“ у регистар: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "Назив параметра „%s“ беше превелик за читање из регистра"
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr "Нисам успео да прочитам параметар „%s“ из регистра: %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "Параметар „%s“ беше превелик за читање из регистра"
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Нисам успео да направим кључ регистра: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Непозната врста параметра за параметар „%s“"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Нисам успео да затворим кључ регистра: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Нисам успео да отворим кључ регистра: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr "Нисам успео да упишем датотеку подешавања, не могу да добијем путању личне фасцикле."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Нисам успео да упишем датотеку подешавања, не могу да отворим „%s“: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr "Нисам успео да прочитам датотеку подешавања, не могу да добијем путању личне фасцикле."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Нисам успео да прочитам датотеку подешавања, не могу да отворим „%s“: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Нисам успео да прочитам %d. ред у датотеци „%s“: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Ред је предуг"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "Датотека подешавања „%s“ је у неисправном запису"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Неисправан запис"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Неисправан запис или предуга вредност"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Непознат параметар „%s“ у %d. реду у датотеци „%s“"
@@ -631,86 +625,92 @@
 msgid "About TigerVNC Viewer"
 msgstr "О програму"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Унутрашња ФЛТК грешка. Излазим."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Грешка покретања новог примерка програма: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Примљен је сигнал за окончавање %d. Програм ће сада изаћи."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "Прегледач ТигарВНЦ"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Не"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Да"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Затвори"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "О програму"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Сакриј"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Изађи"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Услуге"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Сакриј остале"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Прикажи све"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Датотека"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Нова веза"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr "Не могу да направим личну фасциклу ВНЦ-а: не могу да добијем путању личне фасцикле."
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr "Не могу да направим личну фасциклу ВНЦ-а: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "Параметри „-listen“ и „-via“ нису сагласни"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Ослушкујем на прикључнику %d"
 
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Унутрашња ФЛТК грешка. Излазим."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Непознато кодирање „%d“"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Непознато кодирање"
diff --git a/po/sv.po b/po/sv.po
index ee48aa2..d4500a5 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,16 +1,17 @@
 # Swedish messages for TigerVNC.
-# Copyright © 2015 the TigerVNC Team (msgids)
+# Copyright © 2015, 2016 the TigerVNC Team (msgids)
 # This file is distributed under the same license as the TigerVNC package.
-# Peter Åstrand <astrand@cendio.se>, 2011.
-# Göran Uddeborg <goeran@uddeborg.se>, 2015.
 #
-# $Revision: 1.10 $
+# Peter Åstrand <astrand@cendio.se>, 2011.
+# Göran Uddeborg <goeran@uddeborg.se>, 2015, 2016.
+#
+# $Revision: 1.13 $
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-28 16:52+0100\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-16 20:31+0200\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -19,108 +20,98 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "ansluten till värd %s port %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Skrivbordsnamn: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Värd: %.80s port: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Storlek: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Pixelformat: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(serverstandard %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Begärd kodning: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Senast använd kodning: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Uppskattad hastighet på förbindelsen: %d kbit/s"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Protokollversion: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Säkerhetsmetod: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "SetDesktopSize misslyckades: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr "Ogiltig SetColourMapEntries från server!"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Okänd kodning %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Okänd kodning"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Aktiverar kontinuerliga uppdateringar"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Bandbredd %d kbit/s - byter till kvalitet %d"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Bandbredd %d kbit/s - fullfärg är nu %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "avaktiverad"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "aktiverad"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "Använder kodning %s"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Använder pixelformat %s"
@@ -129,25 +120,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Ogiltig geometri angiven!"
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Justerar fönsterstorleken för att undvika fullskärm av misstag"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Misslyckades med att fånga tangentbordet"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Misslyckades med att fånga musen"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr "Ogiltig skärmlayout beräknad för storleksförändrings-begäran!"
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Inte tillräckligt med minne för framebuffer"
 
@@ -164,160 +155,164 @@
 msgstr "VNC-visare: Anslutningsalternativ"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "Ok"
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Kompression"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Automatiskt val"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Föredragen kodning"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Färgnivå"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "Full (alla tillgängliga färger)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "Medium (256 färger)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "Låg (64 färger)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "Mycket låg (8 färger)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Anpassad komprimeringsnivå:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "nivå (1=snabb, 6=bäst [4-6 sällan användbara])"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "Tillåt JPEG-komprimering:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "kvalitet (0=dålig, 9=bäst)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Säkerhet"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Kryptering"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Ingen"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "TLS med anonyma certifikat"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "TLS med X509-certifikat"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Sökväg till CA-certifikat för X509"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Sökväg till CRL-fil för X509"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Autentisering"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "Standard-VNC (osäkert utan kryptering)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Användarnamn och lösenord (osäkert utan kryptering)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Inmatning"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Endast visning (ignorera mus och tangentbord)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Acceptera urklipp från server"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Sätt även primär markering"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Skicka urklipp till server"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Skicka primär markering och klippbuffert som urklipp"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Skicka primär markering som urklipp"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Skicka systemtangenter direkt till servern (fullskärm)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Menytangent"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Skärm"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Anpassa sessionsstorlek vid anslutning"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Anpassa sessionsstorlek till lokalt fönster"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Fullskärmsläge"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Aktivera fullskärmsläge på alla skärmar"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Diverse"
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Delad (koppla ej från andra visare)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Visa punkt när muspekare saknas"
 
@@ -369,112 +364,112 @@
 msgid "Username:"
 msgstr "Användarnamn:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr "Kan inte skapa plattformsspecifik framebuffer: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr "Använder plattformsoberoende framebuffer"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Ingen scancode för utökad virtuell tangent 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Ingen scancode för virtuell tangent 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Ingen symbol för utökad virtuell tangent 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Ingen symbol för virtuell tangent 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Ingen symbol för tangentkod 0x%02x (i nuvarande tillstånd)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Ingen symbol för tangentkod %d (i nuvarande tillstånd)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "&Avsluta visaren"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&Fullskärm"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "M&inimera"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "Anpassa &fönster till session"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&Ctrl"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&Alt"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "Skicka %s"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "Skicka Ctrl-Alt-&Del"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "&Uppdatera skärm"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "&Inställningar..."
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "&Information om anslutningen..."
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "Om &TigerVNC-visaren..."
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Stäng &meny"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "VNC anslutningsinformation"
 
@@ -496,123 +491,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr "Skärmen saknar pixmap-format för standarddjup"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr "Kunde inte hitta lämpligt pixmap-format"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr "Endast skärmar med true colour stöds"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Använder standardfärgkarta och visual, TrueColor, depth %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Kunde inte skapa framebuffer-bild"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "Namnet på parameter %s var för stor för skrivning till registret"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "Parameter %s var för stor för skrivning till registret"
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Misslyckades med att skriva parameter %s av typ %s till registret: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "Namnet på parameter %s var för stor för att läsas från registret"
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr "Misslyckades med att läsa parameter %s från registret: %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "Parameter %s var för stor för läsning från registret"
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Misslyckades med att skapa registernyckel: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Okänd parametertyp för parameter %s"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Misslyckades med att stänga registernyckel: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Misslyckades med att öppna registernyckel: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr "Misslyckades med att skriva konfigurations-fil, kan inte avgöra hemkatalogens sökväg."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Misslyckades med att skriva konfigurations-fil: kan inte öppna %s: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr "Misslyckades med att läsa konfigurations-fil, kan inte avgöra hemkatalogens sökväg."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Misslyckades med att läsa konfigurations-fil, kan inte öppna %s: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Misslyckades med att läsa rad %d i fil %s: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Raden är för lång"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "Konfigurationsfilen %s har ogiltigt format"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Ogiltigt format"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Ogiltigt format eller för stort värde"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Okänd parameter %s på rad %d i fil %s"
@@ -634,86 +629,86 @@
 msgid "About TigerVNC Viewer"
 msgstr "Om VNC-visaren"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Internt FLTK-fel. Avslutar."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Fel vid start av ny TigerVNC-visare: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Termineringssignal %d har mottagits. TigerVNC-visaren kommer nu att avslutas."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "VNC-visare"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Ingen"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Ja"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Stäng"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "Om"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Göm"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Avsluta"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Tjänster"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Göm andra"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Visa alla"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Arkiv"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Ny anslutning"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr "Kunde inte skapa VNC-hemkatalog: kan inte avgöra hemkatalogens sökväg"
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr "Kunde inte skapa VNC-hemkatalog: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "Parametrar -listen och -via är inkompatibla"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Lyssnar på port %d"
-
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Internt FLTK-fel. Avslutar."
diff --git a/po/tigervnc.pot b/po/tigervnc.pot
index 2bb748d..0d9e049 100644
--- a/po/tigervnc.pot
+++ b/po/tigervnc.pot
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,108 +17,98 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr ""
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr ""
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr ""
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr ""
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr ""
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr ""
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr ""
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr ""
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr ""
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr ""
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr ""
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr ""
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr ""
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr ""
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr ""
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr ""
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr ""
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr ""
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr ""
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr ""
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr ""
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr ""
@@ -127,25 +117,25 @@
 msgid "Invalid geometry specified!"
 msgstr ""
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr ""
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr ""
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr ""
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr ""
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr ""
 
@@ -162,160 +152,164 @@
 msgstr ""
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr ""
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr ""
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr ""
 
@@ -367,112 +361,112 @@
 msgid "Username:"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr ""
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr ""
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr ""
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr ""
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr ""
 
@@ -494,123 +488,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr ""
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr ""
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr ""
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr ""
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr ""
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr ""
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr ""
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr ""
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr ""
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr ""
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr ""
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr ""
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr ""
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr ""
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr ""
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr ""
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr ""
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr ""
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr ""
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr ""
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr ""
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr ""
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr ""
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr ""
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr ""
@@ -628,86 +622,86 @@
 msgid "About TigerVNC Viewer"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr ""
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr ""
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr ""
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr ""
-
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr ""
diff --git a/po/uk.po b/po/uk.po
index b8a8b12..379fdde 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -2,13 +2,13 @@
 # Copyright (C) 2014 the TigerVNC Team (msgids)
 # This file is distributed under the same license as the tigervnc package.
 #
-# Yuri Chornoivan <yurchor@ukr.net>, 2014, 2015.
+# Yuri Chornoivan <yurchor@ukr.net>, 2014, 2015, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: tigervnc 1.5.90\n"
+"Project-Id-Version: tigervnc 1.6.90\n"
 "Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2015-11-26 11:33+0000\n"
-"PO-Revision-Date: 2015-12-01 21:51+0200\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-01 14:38+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
 "Language: uk\n"
@@ -18,108 +18,98 @@
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Lokalize 1.5\n"
 
-#: vncviewer/CConn.cxx:111
+#: vncviewer/CConn.cxx:110
 #, c-format
 msgid "connected to host %s port %d"
 msgstr "з’єднано з вузлом %s, порт %d"
 
-#: vncviewer/CConn.cxx:173
+#: vncviewer/CConn.cxx:169
 #, c-format
 msgid "Desktop name: %.80s"
 msgstr "Назва робочої станції: %.80s"
 
-#: vncviewer/CConn.cxx:178
+#: vncviewer/CConn.cxx:174
 #, c-format
 msgid "Host: %.80s port: %d"
 msgstr "Вузол: %.80s порт: %d"
 
-#: vncviewer/CConn.cxx:183
+#: vncviewer/CConn.cxx:179
 #, c-format
 msgid "Size: %d x %d"
 msgstr "Розмір: %d x %d"
 
-#: vncviewer/CConn.cxx:191
+#: vncviewer/CConn.cxx:187
 #, c-format
 msgid "Pixel format: %s"
 msgstr "Формат у пікселях: %s"
 
-#: vncviewer/CConn.cxx:198
+#: vncviewer/CConn.cxx:194
 #, c-format
 msgid "(server default %s)"
 msgstr "(типовий для сервера %s)"
 
-#: vncviewer/CConn.cxx:203
+#: vncviewer/CConn.cxx:199
 #, c-format
 msgid "Requested encoding: %s"
 msgstr "Запит щодо кодування: %s"
 
-#: vncviewer/CConn.cxx:208
+#: vncviewer/CConn.cxx:204
 #, c-format
 msgid "Last used encoding: %s"
 msgstr "Останнє використане кодування: %s"
 
-#: vncviewer/CConn.cxx:213
+#: vncviewer/CConn.cxx:209
 #, c-format
 msgid "Line speed estimate: %d kbit/s"
 msgstr "Оцінка швидкості лінії: %d кбіт/с"
 
-#: vncviewer/CConn.cxx:218
+#: vncviewer/CConn.cxx:214
 #, c-format
 msgid "Protocol version: %d.%d"
 msgstr "Версія протоколу: %d.%d"
 
-#: vncviewer/CConn.cxx:223
+#: vncviewer/CConn.cxx:219
 #, c-format
 msgid "Security method: %s"
 msgstr "Метод захисту: %s"
 
-#: vncviewer/CConn.cxx:329
+#: vncviewer/CConn.cxx:319
 #, c-format
 msgid "SetDesktopSize failed: %d"
 msgstr "Помилка SetDesktopSize: %d"
 
-#: vncviewer/CConn.cxx:398
+#: vncviewer/CConn.cxx:411
 msgid "Invalid SetColourMapEntries from server!"
 msgstr "Некоректне значення SetColourMapEntries від сервера!"
 
-#. TRANSLATORS: Refers to a VNC protocol encoding type
-#: vncviewer/CConn.cxx:444 vncviewer/CConn.cxx:451
-#, c-format
-msgid "Unknown encoding %d"
-msgstr "Невідоме кодування %d"
-
-#: vncviewer/CConn.cxx:445 vncviewer/CConn.cxx:452
-msgid "Unknown encoding"
-msgstr "Невідоме кодування"
-
-#: vncviewer/CConn.cxx:484
+#: vncviewer/CConn.cxx:485
 msgid "Enabling continuous updates"
 msgstr "Увімкнути неперервне оновлення"
 
-#: vncviewer/CConn.cxx:554
+#: vncviewer/CConn.cxx:555
 #, c-format
 msgid "Throughput %d kbit/s - changing to quality %d"
 msgstr "Пропускна здатність %d кбіт/с — змінюємо якість на %d"
 
-#: vncviewer/CConn.cxx:576
+#: vncviewer/CConn.cxx:577
 #, c-format
 msgid "Throughput %d kbit/s - full color is now %s"
 msgstr "Пропускна здатність %d кбіт/с — змінюємо колірність на %s"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "disabled"
 msgstr "вимкнено"
 
-#: vncviewer/CConn.cxx:578
+#: vncviewer/CConn.cxx:579
 msgid "enabled"
 msgstr "увімкнено"
 
-#: vncviewer/CConn.cxx:588
+#: vncviewer/CConn.cxx:589
 #, c-format
 msgid "Using %s encoding"
 msgstr "Використовуємо кодування %s"
 
-#: vncviewer/CConn.cxx:635
+#: vncviewer/CConn.cxx:636
 #, c-format
 msgid "Using pixel format %s"
 msgstr "Використовуємо формат у пікселях %s"
@@ -128,25 +118,25 @@
 msgid "Invalid geometry specified!"
 msgstr "Вказано некоректні геометричні параметри!"
 
-#: vncviewer/DesktopWindow.cxx:309
+#: vncviewer/DesktopWindow.cxx:303
 msgid "Adjusting window size to avoid accidental full screen request"
 msgstr "Коригувати розміри вікна, щоб уникнути випадкового запиту щодо переходу у повноекранний режим"
 
-#: vncviewer/DesktopWindow.cxx:491 vncviewer/DesktopWindow.cxx:497
-#: vncviewer/DesktopWindow.cxx:510
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
 msgid "Failure grabbing keyboard"
 msgstr "Помилка під час спроби перехопити клавіатуру"
 
-#: vncviewer/DesktopWindow.cxx:522
+#: vncviewer/DesktopWindow.cxx:516
 msgid "Failure grabbing mouse"
 msgstr "Помилка під час спроби перехопити мишу"
 
-#: vncviewer/DesktopWindow.cxx:752
+#: vncviewer/DesktopWindow.cxx:746
 msgid "Invalid screen layout computed for resize request!"
 msgstr "Результати обчислення компонування вікна для запиту щодо зміни розмірів є некоректними!"
 
 #: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
-#: vncviewer/X11PixelBuffer.cxx:113
+#: vncviewer/X11PixelBuffer.cxx:117
 msgid "Not enough memory for framebuffer"
 msgstr "Недостатньо пам’яті для буфера кадрів"
 
@@ -163,160 +153,164 @@
 msgstr "Засіб перегляду VNC: параметри з’єднання"
 
 #: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
-#: vncviewer/vncviewer.cxx:268
+#: vncviewer/vncviewer.cxx:282
 msgid "Cancel"
 msgstr "Скасувати"
 
-#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:267
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
 msgid "OK"
 msgstr "Гаразд"
 
-#: vncviewer/OptionsDialog.cxx:413
+#: vncviewer/OptionsDialog.cxx:423
 msgid "Compression"
 msgstr "Стискання"
 
-#: vncviewer/OptionsDialog.cxx:429
+#: vncviewer/OptionsDialog.cxx:439
 msgid "Auto select"
 msgstr "Автовибір"
 
-#: vncviewer/OptionsDialog.cxx:441
+#: vncviewer/OptionsDialog.cxx:451
 msgid "Preferred encoding"
 msgstr "Бажане кодування"
 
-#: vncviewer/OptionsDialog.cxx:489
+#: vncviewer/OptionsDialog.cxx:499
 msgid "Color level"
 msgstr "Рівень відтворення кольору"
 
-#: vncviewer/OptionsDialog.cxx:500
+#: vncviewer/OptionsDialog.cxx:510
 msgid "Full (all available colors)"
 msgstr "Повністю (усі доступні кольори)"
 
-#: vncviewer/OptionsDialog.cxx:507
+#: vncviewer/OptionsDialog.cxx:517
 msgid "Medium (256 colors)"
 msgstr "Середній (256 кольори)"
 
-#: vncviewer/OptionsDialog.cxx:514
+#: vncviewer/OptionsDialog.cxx:524
 msgid "Low (64 colors)"
 msgstr "Низький (64 кольори)"
 
-#: vncviewer/OptionsDialog.cxx:521
+#: vncviewer/OptionsDialog.cxx:531
 msgid "Very low (8 colors)"
 msgstr "Дуже низький (8 кольорів)"
 
-#: vncviewer/OptionsDialog.cxx:538
+#: vncviewer/OptionsDialog.cxx:548
 msgid "Custom compression level:"
 msgstr "Нетиповий рівень стискання:"
 
-#: vncviewer/OptionsDialog.cxx:544
+#: vncviewer/OptionsDialog.cxx:554
 msgid "level (1=fast, 6=best [4-6 are rarely useful])"
 msgstr "рівень (1=швидко, 6=найякісніше [4-6 використовувати не варто])"
 
-#: vncviewer/OptionsDialog.cxx:551
+#: vncviewer/OptionsDialog.cxx:561
 msgid "Allow JPEG compression:"
 msgstr "Дозволити стискання JPEG:"
 
-#: vncviewer/OptionsDialog.cxx:557
+#: vncviewer/OptionsDialog.cxx:567
 msgid "quality (0=poor, 9=best)"
 msgstr "якість (0=найгірша, 9=найкраща)"
 
-#: vncviewer/OptionsDialog.cxx:568
+#: vncviewer/OptionsDialog.cxx:578
 msgid "Security"
 msgstr "Захист"
 
-#: vncviewer/OptionsDialog.cxx:583
+#: vncviewer/OptionsDialog.cxx:593
 msgid "Encryption"
 msgstr "Шифрування"
 
-#: vncviewer/OptionsDialog.cxx:594 vncviewer/OptionsDialog.cxx:647
-#: vncviewer/OptionsDialog.cxx:715
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
 msgid "None"
 msgstr "Немає"
 
-#: vncviewer/OptionsDialog.cxx:600
+#: vncviewer/OptionsDialog.cxx:610
 msgid "TLS with anonymous certificates"
 msgstr "TLS із анонімними сертифікатами"
 
-#: vncviewer/OptionsDialog.cxx:606
+#: vncviewer/OptionsDialog.cxx:616
 msgid "TLS with X509 certificates"
 msgstr "TLS з сертифікатами X509"
 
-#: vncviewer/OptionsDialog.cxx:613
+#: vncviewer/OptionsDialog.cxx:623
 msgid "Path to X509 CA certificate"
 msgstr "Шлях до сертифіката CA X509"
 
-#: vncviewer/OptionsDialog.cxx:620
+#: vncviewer/OptionsDialog.cxx:630
 msgid "Path to X509 CRL file"
 msgstr "Шлях до файла CRL X509"
 
-#: vncviewer/OptionsDialog.cxx:636
+#: vncviewer/OptionsDialog.cxx:646
 msgid "Authentication"
 msgstr "Розпізнавання"
 
-#: vncviewer/OptionsDialog.cxx:653
+#: vncviewer/OptionsDialog.cxx:663
 msgid "Standard VNC (insecure without encryption)"
 msgstr "Стандартний VNC (без захисту і шифрування)"
 
-#: vncviewer/OptionsDialog.cxx:659
+#: vncviewer/OptionsDialog.cxx:669
 msgid "Username and password (insecure without encryption)"
 msgstr "Ім’я користувача і пароль (без захисту і шифрування)"
 
-#: vncviewer/OptionsDialog.cxx:678
+#: vncviewer/OptionsDialog.cxx:688
 msgid "Input"
 msgstr "Введення"
 
-#: vncviewer/OptionsDialog.cxx:686
+#: vncviewer/OptionsDialog.cxx:696
 msgid "View only (ignore mouse and keyboard)"
 msgstr "Лише перегляд (ігнорувати сигнали від миші і клавіатури)"
 
-#: vncviewer/OptionsDialog.cxx:692
+#: vncviewer/OptionsDialog.cxx:702
 msgid "Accept clipboard from server"
 msgstr "Приймати вміст буфера з сервера"
 
-#: vncviewer/OptionsDialog.cxx:698
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Також встановити основне позначене"
+
+#: vncviewer/OptionsDialog.cxx:716
 msgid "Send clipboard to server"
 msgstr "Надіслати вміст буфера обміну до сервера"
 
-#: vncviewer/OptionsDialog.cxx:704
-msgid "Send primary selection and cut buffer as clipboard"
-msgstr "Надіслати основне позначене і вирізати буфер до буфера обміну"
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Надіслати основне позначене як буфер обміну"
 
-#: vncviewer/OptionsDialog.cxx:710
+#: vncviewer/OptionsDialog.cxx:730
 msgid "Pass system keys directly to server (full screen)"
 msgstr "Передавати натискання системних клавіш безпосередньо до сервера (повноекранний режим)"
 
-#: vncviewer/OptionsDialog.cxx:713
+#: vncviewer/OptionsDialog.cxx:733
 msgid "Menu key"
 msgstr "Клавіша меню"
 
-#: vncviewer/OptionsDialog.cxx:729
+#: vncviewer/OptionsDialog.cxx:749
 msgid "Screen"
 msgstr "Екран"
 
-#: vncviewer/OptionsDialog.cxx:737
+#: vncviewer/OptionsDialog.cxx:757
 msgid "Resize remote session on connect"
 msgstr "Змінювати розміри віддаленого сеансу під час з’єднання"
 
-#: vncviewer/OptionsDialog.cxx:750
+#: vncviewer/OptionsDialog.cxx:770
 msgid "Resize remote session to the local window"
 msgstr "Змінювати розміри віддаленого сеансу відповідно до локального вікна"
 
-#: vncviewer/OptionsDialog.cxx:756
+#: vncviewer/OptionsDialog.cxx:776
 msgid "Full-screen mode"
 msgstr "Повноекранний режим"
 
-#: vncviewer/OptionsDialog.cxx:762
+#: vncviewer/OptionsDialog.cxx:782
 msgid "Enable full-screen mode over all monitors"
 msgstr "Увімкнути повноекранний режим на усіх моніторах"
 
-#: vncviewer/OptionsDialog.cxx:771
+#: vncviewer/OptionsDialog.cxx:791
 msgid "Misc."
 msgstr "Інше"
 
-#: vncviewer/OptionsDialog.cxx:779
+#: vncviewer/OptionsDialog.cxx:799
 msgid "Shared (don't disconnect other viewers)"
 msgstr "Спільний (не від’єднувати інші засоби перегляду)"
 
-#: vncviewer/OptionsDialog.cxx:785
+#: vncviewer/OptionsDialog.cxx:805
 msgid "Show dot when no cursor"
 msgstr "Показувати крапку, якщо немає курсора"
 
@@ -368,112 +362,112 @@
 msgid "Username:"
 msgstr "Користувач:"
 
-#: vncviewer/Viewport.cxx:433
+#: vncviewer/Viewport.cxx:391
 #, c-format
 msgid "Unable to create platform specific framebuffer: %s"
 msgstr "Не вдалося створити специфічний для платформи буфер кадрів: %s"
 
-#: vncviewer/Viewport.cxx:434
+#: vncviewer/Viewport.cxx:392
 msgid "Using platform independent framebuffer"
 msgstr "Використовуємо незалежний від платформи буфер кадрів"
 
-#: vncviewer/Viewport.cxx:668
+#: vncviewer/Viewport.cxx:628
 #, c-format
 msgid "No scan code for extended virtual key 0x%02x"
 msgstr "Немає коду сканування для віртуальної клавіші розширення 0x%02x"
 
-#: vncviewer/Viewport.cxx:670
+#: vncviewer/Viewport.cxx:630
 #, c-format
 msgid "No scan code for virtual key 0x%02x"
 msgstr "Немає коду сканування для віртуальної клавіші 0x%02x"
 
-#: vncviewer/Viewport.cxx:687
+#: vncviewer/Viewport.cxx:647
 #, c-format
 msgid "No symbol for extended virtual key 0x%02x"
 msgstr "Немає символу для віртуальної клавіші розширення 0x%02x"
 
-#: vncviewer/Viewport.cxx:689
+#: vncviewer/Viewport.cxx:649
 #, c-format
 msgid "No symbol for virtual key 0x%02x"
 msgstr "Немає символу для віртуальної клавіші 0x%02x"
 
-#: vncviewer/Viewport.cxx:727
+#: vncviewer/Viewport.cxx:687
 #, c-format
 msgid "No symbol for key code 0x%02x (in the current state)"
 msgstr "Немає символу для клавіші з кодом 0x%02x (у поточному стані)"
 
-#: vncviewer/Viewport.cxx:753
+#: vncviewer/Viewport.cxx:713
 #, c-format
 msgid "No symbol for key code %d (in the current state)"
 msgstr "Немає символу для клавіші з кодом %d (у поточному стані)"
 
-#: vncviewer/Viewport.cxx:790
+#: vncviewer/Viewport.cxx:750
 msgctxt "ContextMenu|"
 msgid "E&xit viewer"
 msgstr "Ви&йти із засобу перегляду"
 
-#: vncviewer/Viewport.cxx:793
+#: vncviewer/Viewport.cxx:753
 msgctxt "ContextMenu|"
 msgid "&Full screen"
 msgstr "&На весь екран"
 
-#: vncviewer/Viewport.cxx:796
+#: vncviewer/Viewport.cxx:756
 msgctxt "ContextMenu|"
 msgid "Minimi&ze"
 msgstr "М&інімізувати"
 
-#: vncviewer/Viewport.cxx:798
+#: vncviewer/Viewport.cxx:758
 msgctxt "ContextMenu|"
 msgid "Resize &window to session"
 msgstr "Змінити &розміри вікна відповідно до сеансу"
 
-#: vncviewer/Viewport.cxx:803
+#: vncviewer/Viewport.cxx:763
 msgctxt "ContextMenu|"
 msgid "&Ctrl"
 msgstr "&Ctrl"
 
-#: vncviewer/Viewport.cxx:806
+#: vncviewer/Viewport.cxx:766
 msgctxt "ContextMenu|"
 msgid "&Alt"
 msgstr "&Alt"
 
-#: vncviewer/Viewport.cxx:812
+#: vncviewer/Viewport.cxx:772
 #, c-format
 msgctxt "ContextMenu|"
 msgid "Send %s"
 msgstr "Надіслати %s"
 
-#: vncviewer/Viewport.cxx:818
+#: vncviewer/Viewport.cxx:778
 msgctxt "ContextMenu|"
 msgid "Send Ctrl-Alt-&Del"
 msgstr "На&діслати Ctrl-Alt-Del"
 
-#: vncviewer/Viewport.cxx:821
+#: vncviewer/Viewport.cxx:781
 msgctxt "ContextMenu|"
 msgid "&Refresh screen"
 msgstr "&Оновити вміст екрана"
 
-#: vncviewer/Viewport.cxx:824
+#: vncviewer/Viewport.cxx:784
 msgctxt "ContextMenu|"
 msgid "&Options..."
 msgstr "П&араметри…"
 
-#: vncviewer/Viewport.cxx:826
+#: vncviewer/Viewport.cxx:786
 msgctxt "ContextMenu|"
 msgid "Connection &info..."
 msgstr "Дані щодо з’&єднання…"
 
-#: vncviewer/Viewport.cxx:828
+#: vncviewer/Viewport.cxx:788
 msgctxt "ContextMenu|"
 msgid "About &TigerVNC viewer..."
 msgstr "Про &засіб перегляду TigerVNC…"
 
-#: vncviewer/Viewport.cxx:831
+#: vncviewer/Viewport.cxx:791
 msgctxt "ContextMenu|"
 msgid "Dismiss &menu"
 msgstr "Закрити &меню"
 
-#: vncviewer/Viewport.cxx:915
+#: vncviewer/Viewport.cxx:875
 msgid "VNC connection info"
 msgstr "Дані щодо з’єднання VNC"
 
@@ -495,123 +489,123 @@
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:61
+#: vncviewer/X11PixelBuffer.cxx:65
 msgid "Display lacks pixmap format for default depth"
 msgstr "Для дисплея не вказано формат у пікселях для типової глибини"
 
 #. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
 #. to translate.
-#: vncviewer/X11PixelBuffer.cxx:72
+#: vncviewer/X11PixelBuffer.cxx:76
 msgid "Couldn't find suitable pixmap format"
 msgstr "Не вдалося визначити відповідний формат зображення"
 
-#: vncviewer/X11PixelBuffer.cxx:81
+#: vncviewer/X11PixelBuffer.cxx:85
 msgid "Only true colour displays supported"
 msgstr "Передбачено підтримку лише дисплеїв з True Color"
 
-#: vncviewer/X11PixelBuffer.cxx:83
+#: vncviewer/X11PixelBuffer.cxx:87
 #, c-format
 msgid "Using default colormap and visual, TrueColor, depth %d."
 msgstr "Використовуємо типову карту кольорів і відтворення, TrueColor, глибина %d."
 
-#: vncviewer/X11PixelBuffer.cxx:109
+#: vncviewer/X11PixelBuffer.cxx:113
 msgid "Could not create framebuffer image"
 msgstr "Не вдалося створити зображення буфера кадрів"
 
-#: vncviewer/parameters.cxx:279 vncviewer/parameters.cxx:313
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
 #, c-format
 msgid "The name of the parameter %s was too large to write to the registry"
 msgstr "Назва параметра %s є надто довгою для запису до реєстру"
 
-#: vncviewer/parameters.cxx:285 vncviewer/parameters.cxx:292
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
 #, c-format
 msgid "The parameter %s was too large to write to the registry"
 msgstr "Параметр %s є надто довгим для запису до реєстру"
 
-#: vncviewer/parameters.cxx:298 vncviewer/parameters.cxx:319
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
 #, c-format
 msgid "Failed to write parameter %s of type %s to the registry: %ld"
 msgstr "Не вдалося записати параметр %s типу %s до реєстру: %ld"
 
-#: vncviewer/parameters.cxx:334 vncviewer/parameters.cxx:373
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
 #, c-format
 msgid "The name of the parameter %s was too large to read from the registry"
 msgstr "Назва параметра %s є надто довгою для читання з реєстру"
 
-#: vncviewer/parameters.cxx:343 vncviewer/parameters.cxx:382
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
 #, c-format
 msgid "Failed to read parameter %s from the registry: %ld"
 msgstr "Не вдалося прочитати параметр %s з реєстру: %ld"
 
-#: vncviewer/parameters.cxx:352
+#: vncviewer/parameters.cxx:359
 #, c-format
 msgid "The parameter %s was too large to read from the registry"
 msgstr "Параметр %s є надто довгим для читання з реєстру"
 
-#: vncviewer/parameters.cxx:402
+#: vncviewer/parameters.cxx:409
 #, c-format
 msgid "Failed to create registry key: %ld"
 msgstr "Не вдалося створити ключ реєстру: %ld"
 
-#: vncviewer/parameters.cxx:416 vncviewer/parameters.cxx:465
-#: vncviewer/parameters.cxx:527 vncviewer/parameters.cxx:658
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
 #, c-format
 msgid "Unknown parameter type for parameter %s"
 msgstr "Невідомий тип параметра %s"
 
-#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
 #, c-format
 msgid "Failed to close registry key: %ld"
 msgstr "Не вдалося закрити ключ реєстру: %ld"
 
-#: vncviewer/parameters.cxx:439
+#: vncviewer/parameters.cxx:446
 #, c-format
 msgid "Failed to open registry key: %ld"
 msgstr "Не вдалося відкрити ключ реєстру: %ld"
 
-#: vncviewer/parameters.cxx:496
+#: vncviewer/parameters.cxx:503
 msgid "Failed to write configuration file, can't obtain home directory path."
 msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу."
 
-#: vncviewer/parameters.cxx:509
+#: vncviewer/parameters.cxx:516
 #, c-format
 msgid "Failed to write configuration file, can't open %s: %s"
 msgstr "Не вдалося записати файл налаштувань, оскільки не вдалося відкрити %s: %s"
 
-#: vncviewer/parameters.cxx:552
+#: vncviewer/parameters.cxx:559
 msgid "Failed to read configuration file, can't obtain home directory path."
 msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося визначити шлях до домашнього каталогу."
 
-#: vncviewer/parameters.cxx:565
+#: vncviewer/parameters.cxx:572
 #, c-format
 msgid "Failed to read configuration file, can't open %s: %s"
 msgstr "Не вдалося прочитати файл налаштувань, оскільки не вдалося відкрити %s: %s"
 
-#: vncviewer/parameters.cxx:578 vncviewer/parameters.cxx:583
-#: vncviewer/parameters.cxx:608 vncviewer/parameters.cxx:621
-#: vncviewer/parameters.cxx:637
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
 #, c-format
 msgid "Failed to read line %d in file %s: %s"
 msgstr "Не вдалося прочитати рядок %d у файлі %s: %s"
 
-#: vncviewer/parameters.cxx:584
+#: vncviewer/parameters.cxx:591
 msgid "Line too long"
 msgstr "Занадто довгий рядок"
 
-#: vncviewer/parameters.cxx:591
+#: vncviewer/parameters.cxx:598
 #, c-format
 msgid "Configuration file %s is in an invalid format"
 msgstr "Файл налаштувань %s збережено у некоректному форматі"
 
-#: vncviewer/parameters.cxx:609
+#: vncviewer/parameters.cxx:616
 msgid "Invalid format"
 msgstr "Некоректне форматування"
 
-#: vncviewer/parameters.cxx:622 vncviewer/parameters.cxx:638
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
 msgid "Invalid format or too large value"
 msgstr "Некоректне форматування або надто велике значення"
 
-#: vncviewer/parameters.cxx:665
+#: vncviewer/parameters.cxx:672
 #, c-format
 msgid "Unknown parameter %s on line %d in file %s"
 msgstr "Невідомий параметр %s у рядку %d файла %s"
@@ -633,89 +627,95 @@
 msgid "About TigerVNC Viewer"
 msgstr "Про засіб перегляду TigerVNC"
 
-#: vncviewer/vncviewer.cxx:144 vncviewer/vncviewer.cxx:156
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Внутрішня помилка FLTK. Завершуємо роботу."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
 #, c-format
 msgid "Error starting new TigerVNC Viewer: %s"
 msgstr "Помилка під час спроби запуску нового засобу перегляду TigerVNC: %s"
 
-#: vncviewer/vncviewer.cxx:165
+#: vncviewer/vncviewer.cxx:179
 #, c-format
 msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
 msgstr "Отримано сигнал переривання %d. Зараз засіб перегляду TigerVNC завершить роботу."
 
-#: vncviewer/vncviewer.cxx:257
+#: vncviewer/vncviewer.cxx:271
 msgid "TigerVNC Viewer"
 msgstr "Засіб перегляду TigerVNC"
 
-#: vncviewer/vncviewer.cxx:265
+#: vncviewer/vncviewer.cxx:279
 msgid "No"
 msgstr "Ні"
 
-#: vncviewer/vncviewer.cxx:266
+#: vncviewer/vncviewer.cxx:280
 msgid "Yes"
 msgstr "Так"
 
-#: vncviewer/vncviewer.cxx:269
+#: vncviewer/vncviewer.cxx:283
 msgid "Close"
 msgstr "Закрити"
 
-#: vncviewer/vncviewer.cxx:274
+#: vncviewer/vncviewer.cxx:288
 msgid "About"
 msgstr "Про програму"
 
-#: vncviewer/vncviewer.cxx:277
+#: vncviewer/vncviewer.cxx:291
 msgid "Hide"
 msgstr "Сховати"
 
-#: vncviewer/vncviewer.cxx:280
+#: vncviewer/vncviewer.cxx:294
 msgid "Quit"
 msgstr "Вийти"
 
-#: vncviewer/vncviewer.cxx:284
+#: vncviewer/vncviewer.cxx:298
 msgid "Services"
 msgstr "Служби"
 
-#: vncviewer/vncviewer.cxx:285
+#: vncviewer/vncviewer.cxx:299
 msgid "Hide Others"
 msgstr "Сховати решту"
 
-#: vncviewer/vncviewer.cxx:286
+#: vncviewer/vncviewer.cxx:300
 msgid "Show All"
 msgstr "Показати всі"
 
-#: vncviewer/vncviewer.cxx:295
+#: vncviewer/vncviewer.cxx:309
 msgctxt "SysMenu|"
 msgid "&File"
 msgstr "&Файл"
 
-#: vncviewer/vncviewer.cxx:298
+#: vncviewer/vncviewer.cxx:312
 msgctxt "SysMenu|File|"
 msgid "&New Connection"
 msgstr "&Створити з'єднання"
 
-#: vncviewer/vncviewer.cxx:310
+#: vncviewer/vncviewer.cxx:324
 msgid "Could not create VNC home directory: can't obtain home directory path."
 msgstr "Не вдалося створити домашній каталог VNC: не вдалося отримати шлях до домашнього каталогу."
 
-#: vncviewer/vncviewer.cxx:315
+#: vncviewer/vncviewer.cxx:329
 #, c-format
 msgid "Could not create VNC home directory: %s."
 msgstr "Не вдалося створити домашній каталог VNC: %s."
 
 #. TRANSLATORS: "Parameters" are command line arguments, or settings
 #. from a file or the Windows registry.
-#: vncviewer/vncviewer.cxx:520 vncviewer/vncviewer.cxx:521
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
 msgid "Parameters -listen and -via are incompatible"
 msgstr "Параметри -listen і -via є несумісними"
 
-#: vncviewer/vncviewer.cxx:536
+#: vncviewer/vncviewer.cxx:550
 #, c-format
 msgid "Listening on port %d"
 msgstr "Очікуємо на дані на порту %d"
 
-#: vncviewer/vncviewer.cxx:601
-msgid "Internal FLTK error. Exiting."
-msgstr "Внутрішня помилка FLTK. Завершуємо роботу."
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Невідоме кодування %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Невідоме кодування"
 
 #~ msgid "Alt"
 #~ msgstr "Alt"
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..2c52155
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,728 @@
+# Vietnamese translations for tigervnc package
+# Bản dịch Tiếng Việt dành cho gói tigervnc
+# This file is distributed under the same license as the tigervnc package.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tigervnc 1.6.90\n"
+"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
+"POT-Creation-Date: 2016-07-01 10:15+0000\n"
+"PO-Revision-Date: 2016-07-04 08:44+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#: vncviewer/CConn.cxx:110
+#, c-format
+msgid "connected to host %s port %d"
+msgstr "đã kết nối đến máy %s cổng %d"
+
+#: vncviewer/CConn.cxx:169
+#, c-format
+msgid "Desktop name: %.80s"
+msgstr "Tên máy tính: %.80s"
+
+#: vncviewer/CConn.cxx:174
+#, c-format
+msgid "Host: %.80s port: %d"
+msgstr "Máy: %.80s cổng: %d"
+
+#: vncviewer/CConn.cxx:179
+#, c-format
+msgid "Size: %d x %d"
+msgstr "Cỡ: %d x %d"
+
+#: vncviewer/CConn.cxx:187
+#, c-format
+msgid "Pixel format: %s"
+msgstr "Định dạng điểm ảnh: %s"
+
+#: vncviewer/CConn.cxx:194
+#, c-format
+msgid "(server default %s)"
+msgstr "(máy chủ mặc định %s)"
+
+#: vncviewer/CConn.cxx:199
+#, c-format
+msgid "Requested encoding: %s"
+msgstr "Bộ mã đã yêu cầu: %s"
+
+#: vncviewer/CConn.cxx:204
+#, c-format
+msgid "Last used encoding: %s"
+msgstr "Bảng mã dùng lần cuối: %s"
+
+#: vncviewer/CConn.cxx:209
+#, c-format
+msgid "Line speed estimate: %d kbit/s"
+msgstr "Ước tính tốc độ đường dây: %d kbit/s"
+
+#: vncviewer/CConn.cxx:214
+#, c-format
+msgid "Protocol version: %d.%d"
+msgstr "Phiên bản giao thức: %d.%d"
+
+#: vncviewer/CConn.cxx:219
+#, c-format
+msgid "Security method: %s"
+msgstr "Phương thức bảo mật: %s"
+
+#: vncviewer/CConn.cxx:319
+#, c-format
+msgid "SetDesktopSize failed: %d"
+msgstr "SetDesktopSize gặp lỗi: %d"
+
+#: vncviewer/CConn.cxx:411
+msgid "Invalid SetColourMapEntries from server!"
+msgstr "SetColourMapEntries từ máy phục vụ không hợp lệ!"
+
+#: vncviewer/CConn.cxx:485
+msgid "Enabling continuous updates"
+msgstr "Đang bật cập nhật liên tục"
+
+#: vncviewer/CConn.cxx:555
+#, c-format
+msgid "Throughput %d kbit/s - changing to quality %d"
+msgstr "Năng lực %d kbit/s - đổi thành chất lượng %d"
+
+#: vncviewer/CConn.cxx:577
+#, c-format
+msgid "Throughput %d kbit/s - full color is now %s"
+msgstr "Năng lực %d kbit/s - màu đầy đủ giờ là %s"
+
+#: vncviewer/CConn.cxx:579
+msgid "disabled"
+msgstr "tắt"
+
+#: vncviewer/CConn.cxx:579
+msgid "enabled"
+msgstr "bật"
+
+#: vncviewer/CConn.cxx:589
+#, c-format
+msgid "Using %s encoding"
+msgstr "Đang dùng bảng mã %s"
+
+#: vncviewer/CConn.cxx:636
+#, c-format
+msgid "Using pixel format %s"
+msgstr "Đang dùng định dạng điểm ảnh %s"
+
+#: vncviewer/DesktopWindow.cxx:106
+msgid "Invalid geometry specified!"
+msgstr "Hình dạng đã cho không hợp lệ!"
+
+#: vncviewer/DesktopWindow.cxx:303
+msgid "Adjusting window size to avoid accidental full screen request"
+msgstr "Chỉnh cỡ cửa sổ để tránh yêu cầu toàm màn hình ngẫu nhiên"
+
+#: vncviewer/DesktopWindow.cxx:485 vncviewer/DesktopWindow.cxx:491
+#: vncviewer/DesktopWindow.cxx:504
+msgid "Failure grabbing keyboard"
+msgstr "Gặp lỗi khi điều khiển bàn phím"
+
+#: vncviewer/DesktopWindow.cxx:516
+msgid "Failure grabbing mouse"
+msgstr "Gặp lỗi khi điều khiển chuột"
+
+#: vncviewer/DesktopWindow.cxx:746
+msgid "Invalid screen layout computed for resize request!"
+msgstr "Bố cục màn hình đã tính toán không hợp lệ cho yêu cầu đổi cỡ!"
+
+#: vncviewer/FLTKPixelBuffer.cxx:33 vncviewer/OSXPixelBuffer.cxx:48
+#: vncviewer/X11PixelBuffer.cxx:117
+msgid "Not enough memory for framebuffer"
+msgstr "Không đủ bộ nhớ cho bộ đệm khung"
+
+#: vncviewer/OSXPixelBuffer.cxx:52
+msgid "Could not create framebuffer device"
+msgstr "Không thể tạo thiết bị bộ đệm khung"
+
+#: vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr "Không thể tạo ánh xạ bộ đệm khung"
+
+#: vncviewer/OptionsDialog.cxx:57
+msgid "VNC Viewer: Connection Options"
+msgstr "Bộ xem VNC: Các tùy chọn kết nối"
+
+#: vncviewer/OptionsDialog.cxx:83 vncviewer/ServerDialog.cxx:91
+#: vncviewer/vncviewer.cxx:282
+msgid "Cancel"
+msgstr "Thôi"
+
+#: vncviewer/OptionsDialog.cxx:88 vncviewer/vncviewer.cxx:281
+msgid "OK"
+msgstr "Đồng ý"
+
+#: vncviewer/OptionsDialog.cxx:423
+msgid "Compression"
+msgstr "Nén"
+
+#: vncviewer/OptionsDialog.cxx:439
+msgid "Auto select"
+msgstr "Chọn tự động"
+
+#: vncviewer/OptionsDialog.cxx:451
+msgid "Preferred encoding"
+msgstr "Bảng mã ưa thích"
+
+#: vncviewer/OptionsDialog.cxx:499
+msgid "Color level"
+msgstr "Mức màu"
+
+#: vncviewer/OptionsDialog.cxx:510
+msgid "Full (all available colors)"
+msgstr "Đầy đủ (mọi màu sẵn có)"
+
+#: vncviewer/OptionsDialog.cxx:517
+msgid "Medium (256 colors)"
+msgstr "Trung bình (256 màu)"
+
+#: vncviewer/OptionsDialog.cxx:524
+msgid "Low (64 colors)"
+msgstr "Thấp (64 màu)"
+
+#: vncviewer/OptionsDialog.cxx:531
+msgid "Very low (8 colors)"
+msgstr "Rất thấp (8 màu)"
+
+#: vncviewer/OptionsDialog.cxx:548
+msgid "Custom compression level:"
+msgstr "Mức nén tự chọn:"
+
+#: vncviewer/OptionsDialog.cxx:554
+msgid "level (1=fast, 6=best [4-6 are rarely useful])"
+msgstr "mức độ (1=nhanh, 6=tốt nhất [4-6 là hữu dụng hơn cả])"
+
+#: vncviewer/OptionsDialog.cxx:561
+msgid "Allow JPEG compression:"
+msgstr "Cho phép nén JPEG:"
+
+#: vncviewer/OptionsDialog.cxx:567
+msgid "quality (0=poor, 9=best)"
+msgstr "Chất lượng (0=kém, 9=tốt nhất)"
+
+#: vncviewer/OptionsDialog.cxx:578
+msgid "Security"
+msgstr "Bảo mật"
+
+#: vncviewer/OptionsDialog.cxx:593
+msgid "Encryption"
+msgstr "Mã hóa"
+
+#: vncviewer/OptionsDialog.cxx:604 vncviewer/OptionsDialog.cxx:657
+#: vncviewer/OptionsDialog.cxx:735
+msgid "None"
+msgstr "Không có gì"
+
+#: vncviewer/OptionsDialog.cxx:610
+msgid "TLS with anonymous certificates"
+msgstr "TLS với chứng nhận nặc danh"
+
+#: vncviewer/OptionsDialog.cxx:616
+msgid "TLS with X509 certificates"
+msgstr "TLS với chứng nhận X509"
+
+#: vncviewer/OptionsDialog.cxx:623
+msgid "Path to X509 CA certificate"
+msgstr "Đường dẫn chứng nhận CA X509"
+
+#: vncviewer/OptionsDialog.cxx:630
+msgid "Path to X509 CRL file"
+msgstr "Đường dẫn đến tập tin CRL X509"
+
+#: vncviewer/OptionsDialog.cxx:646
+msgid "Authentication"
+msgstr "Xác thực"
+
+#: vncviewer/OptionsDialog.cxx:663
+msgid "Standard VNC (insecure without encryption)"
+msgstr "VNC tiêu chuẩn (không bảo mật, không mã hóa)"
+
+#: vncviewer/OptionsDialog.cxx:669
+msgid "Username and password (insecure without encryption)"
+msgstr "Tài khoản và mật khẩu (không bảo mật, không mã hóa)"
+
+#: vncviewer/OptionsDialog.cxx:688
+msgid "Input"
+msgstr "Đầu vào"
+
+#: vncviewer/OptionsDialog.cxx:696
+msgid "View only (ignore mouse and keyboard)"
+msgstr "Chỉ xem (không bắt chuột và bàn phím)"
+
+#: vncviewer/OptionsDialog.cxx:702
+msgid "Accept clipboard from server"
+msgstr "Chấp nhận clipboard từ máy chủ"
+
+#: vncviewer/OptionsDialog.cxx:709
+msgid "Also set primary selection"
+msgstr "Cũng đặt chọn chính"
+
+#: vncviewer/OptionsDialog.cxx:716
+msgid "Send clipboard to server"
+msgstr "Gửi clipboard đến máy chủ"
+
+#: vncviewer/OptionsDialog.cxx:723
+msgid "Send primary selection as clipboard"
+msgstr "Gửi chọn chính là clipboard"
+
+#: vncviewer/OptionsDialog.cxx:730
+msgid "Pass system keys directly to server (full screen)"
+msgstr "Gửi các phím hệ thống trực tiếp đến máy phục vụ (toàn màn hình)"
+
+#: vncviewer/OptionsDialog.cxx:733
+msgid "Menu key"
+msgstr "Phím trình đơn"
+
+#: vncviewer/OptionsDialog.cxx:749
+msgid "Screen"
+msgstr "Màn hình"
+
+#: vncviewer/OptionsDialog.cxx:757
+msgid "Resize remote session on connect"
+msgstr "Đổi cỡ phiên máy từ xa khi kết nối"
+
+#: vncviewer/OptionsDialog.cxx:770
+msgid "Resize remote session to the local window"
+msgstr "Đổi cỡ phiên thành cửa sổ nội bộ"
+
+#: vncviewer/OptionsDialog.cxx:776
+msgid "Full-screen mode"
+msgstr "Chế độ toàn màn hình"
+
+#: vncviewer/OptionsDialog.cxx:782
+msgid "Enable full-screen mode over all monitors"
+msgstr "Bật chế độ toàn màn hình qua tất cả các màn hình"
+
+#: vncviewer/OptionsDialog.cxx:791
+msgid "Misc."
+msgstr "Linh tinh"
+
+#: vncviewer/OptionsDialog.cxx:799
+msgid "Shared (don't disconnect other viewers)"
+msgstr "Đã chia sẻ (đừng ngắt kết nối các bộ xem khác)"
+
+#: vncviewer/OptionsDialog.cxx:805
+msgid "Show dot when no cursor"
+msgstr "Hiển thị chấm khi không có con trỏ"
+
+#: vncviewer/ServerDialog.cxx:42
+msgid "VNC Viewer: Connection Details"
+msgstr "Phần mềm xem VNC: Chi tiết kết nối"
+
+#: vncviewer/ServerDialog.cxx:49 vncviewer/ServerDialog.cxx:54
+msgid "VNC server:"
+msgstr "Máy phục vụ VNC:"
+
+#: vncviewer/ServerDialog.cxx:64
+msgid "Options..."
+msgstr "Tùy chọn…"
+
+#: vncviewer/ServerDialog.cxx:69
+msgid "Load..."
+msgstr "Tải…"
+
+#: vncviewer/ServerDialog.cxx:74
+msgid "Save As..."
+msgstr "Lưu thành…"
+
+#: vncviewer/ServerDialog.cxx:86
+msgid "About..."
+msgstr "Giới thiệu…"
+
+#: vncviewer/ServerDialog.cxx:96
+msgid "Connect"
+msgstr "Kết nối"
+
+#: vncviewer/UserDialog.cxx:74
+msgid "Opening password file failed"
+msgstr "Gặp lỗi khi mở tập tin mật khẩu"
+
+#: vncviewer/UserDialog.cxx:86 vncviewer/UserDialog.cxx:96
+msgid "VNC authentication"
+msgstr "Xác thực VNC"
+
+#: vncviewer/UserDialog.cxx:87 vncviewer/UserDialog.cxx:102
+msgid "Password:"
+msgstr "Mật khẩu:"
+
+#: vncviewer/UserDialog.cxx:89
+msgid "Authentication cancelled"
+msgstr "Xác thực bị hủy bỏ"
+
+#: vncviewer/UserDialog.cxx:99
+msgid "Username:"
+msgstr "Tài khoản:"
+
+#: vncviewer/Viewport.cxx:391
+#, c-format
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr "Không thể tạo bộ đệm khung đặc tả nền tảng: %s"
+
+#: vncviewer/Viewport.cxx:392
+msgid "Using platform independent framebuffer"
+msgstr "Đang sử dụng bộ đệm khung độc lập nên tảng"
+
+#: vncviewer/Viewport.cxx:628
+#, c-format
+msgid "No scan code for extended virtual key 0x%02x"
+msgstr "Không có mã quét cho phím ảo mở rộng 0x%02x"
+
+#: vncviewer/Viewport.cxx:630
+#, c-format
+msgid "No scan code for virtual key 0x%02x"
+msgstr "Không có mã quét cho phím ảo 0x%02x"
+
+#: vncviewer/Viewport.cxx:647
+#, c-format
+msgid "No symbol for extended virtual key 0x%02x"
+msgstr "Không có ký hiệu cho phím ảo mở rộng 0x%02x"
+
+#: vncviewer/Viewport.cxx:649
+#, c-format
+msgid "No symbol for virtual key 0x%02x"
+msgstr "Không có ký hiệu cho phím ảo 0x%02x"
+
+#: vncviewer/Viewport.cxx:687
+#, c-format
+msgid "No symbol for key code 0x%02x (in the current state)"
+msgstr "Không có ký hiệu cho mã phím 0x%02x (trong trạng thái hiện tại)"
+
+#: vncviewer/Viewport.cxx:713
+#, c-format
+msgid "No symbol for key code %d (in the current state)"
+msgstr "Không có ký hiệu cho mã phím %d (trong trạng thái hiện tại)"
+
+#: vncviewer/Viewport.cxx:750
+msgctxt "ContextMenu|"
+msgid "E&xit viewer"
+msgstr "T&hoát khỏi bộ xem"
+
+#: vncviewer/Viewport.cxx:753
+msgctxt "ContextMenu|"
+msgid "&Full screen"
+msgstr "T&oàn màn hình"
+
+#: vncviewer/Viewport.cxx:756
+msgctxt "ContextMenu|"
+msgid "Minimi&ze"
+msgstr "Thu &nhỏ"
+
+#: vncviewer/Viewport.cxx:758
+msgctxt "ContextMenu|"
+msgid "Resize &window to session"
+msgstr "Đổi cỡ Cửa &sổ sang phiên"
+
+#: vncviewer/Viewport.cxx:763
+msgctxt "ContextMenu|"
+msgid "&Ctrl"
+msgstr "&Ctrl"
+
+#: vncviewer/Viewport.cxx:766
+msgctxt "ContextMenu|"
+msgid "&Alt"
+msgstr "&Alt"
+
+#: vncviewer/Viewport.cxx:772
+#, c-format
+msgctxt "ContextMenu|"
+msgid "Send %s"
+msgstr "Gửi %s"
+
+#: vncviewer/Viewport.cxx:778
+msgctxt "ContextMenu|"
+msgid "Send Ctrl-Alt-&Del"
+msgstr "Gửi Ctrl-Alt-&Del"
+
+#: vncviewer/Viewport.cxx:781
+msgctxt "ContextMenu|"
+msgid "&Refresh screen"
+msgstr "&Làm mới màn hình"
+
+#: vncviewer/Viewport.cxx:784
+msgctxt "ContextMenu|"
+msgid "&Options..."
+msgstr "Tù&y chọn…"
+
+#: vncviewer/Viewport.cxx:786
+msgctxt "ContextMenu|"
+msgid "Connection &info..."
+msgstr "Thông t&in về kết nối…"
+
+#: vncviewer/Viewport.cxx:788
+msgctxt "ContextMenu|"
+msgid "About &TigerVNC viewer..."
+msgstr "Giới thiệu Bộ xem &TigerVNC…"
+
+#: vncviewer/Viewport.cxx:791
+msgctxt "ContextMenu|"
+msgid "Dismiss &menu"
+msgstr "Thải bỏ &Trình đơn"
+
+#: vncviewer/Viewport.cxx:875
+msgid "VNC connection info"
+msgstr "Thông tin kết nối VNC"
+
+#: vncviewer/Win32PixelBuffer.cxx:62
+msgid "unable to create DIB section"
+msgstr "không thể tạo phần DIB"
+
+#: vncviewer/Win32PixelBuffer.cxx:79
+msgid "CreateCompatibleDC failed"
+msgstr "CreateCompatibleDC gặp lỗi"
+
+#: vncviewer/Win32PixelBuffer.cxx:82
+msgid "SelectObject failed"
+msgstr "SelectObject gặp lỗi"
+
+#: vncviewer/Win32PixelBuffer.cxx:91
+msgid "BitBlt failed"
+msgstr "BitBlt gặp lỗi"
+
+#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+#. to translate.
+#: vncviewer/X11PixelBuffer.cxx:65
+msgid "Display lacks pixmap format for default depth"
+msgstr "Hiển thị định dạng pixmap thiếu cho độ sâu mặc định"
+
+#. TRANSLATORS: "pixmap" is an X11 concept and may not be suitable
+#. to translate.
+#: vncviewer/X11PixelBuffer.cxx:76
+msgid "Couldn't find suitable pixmap format"
+msgstr "Không thể tìm thấy định dạng phù hợp pixmap"
+
+#: vncviewer/X11PixelBuffer.cxx:85
+msgid "Only true colour displays supported"
+msgstr "Chỉ hỗ trợ hiển thị màu thật"
+
+#: vncviewer/X11PixelBuffer.cxx:87
+#, c-format
+msgid "Using default colormap and visual, TrueColor, depth %d."
+msgstr "Đang dùng bản đồ màu mặc định và ảo, TrueColor, độ sâu %d."
+
+#: vncviewer/X11PixelBuffer.cxx:113
+msgid "Could not create framebuffer image"
+msgstr "Không thể tạo ảnh bộ đệm khung"
+
+#: vncviewer/parameters.cxx:286 vncviewer/parameters.cxx:320
+#, c-format
+msgid "The name of the parameter %s was too large to write to the registry"
+msgstr "Tên của tham số %s là quá lớn để ghi vào đăng ký"
+
+#: vncviewer/parameters.cxx:292 vncviewer/parameters.cxx:299
+#, c-format
+msgid "The parameter %s was too large to write to the registry"
+msgstr "Tham số %s là quá lớn để ghi vào đăng ký"
+
+#: vncviewer/parameters.cxx:305 vncviewer/parameters.cxx:326
+#, c-format
+msgid "Failed to write parameter %s of type %s to the registry: %ld"
+msgstr "Gặp lỗi khi ghi tham số %s của kiểu %s vào sổ đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:341 vncviewer/parameters.cxx:380
+#, c-format
+msgid "The name of the parameter %s was too large to read from the registry"
+msgstr "Tên của tham số %s là quá lớn để đọc từ sổ đăng ký"
+
+#: vncviewer/parameters.cxx:350 vncviewer/parameters.cxx:389
+#, c-format
+msgid "Failed to read parameter %s from the registry: %ld"
+msgstr "Gặp lỗi khi đọc tham số %s từ sổ đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:359
+#, c-format
+msgid "The parameter %s was too large to read from the registry"
+msgstr "Tham số %s là quá lớn để đọc từ sổ đăng ký"
+
+#: vncviewer/parameters.cxx:409
+#, c-format
+msgid "Failed to create registry key: %ld"
+msgstr "Gặp lỗi khi tạo khóa đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:423 vncviewer/parameters.cxx:472
+#: vncviewer/parameters.cxx:534 vncviewer/parameters.cxx:665
+#, c-format
+msgid "Unknown parameter type for parameter %s"
+msgstr "Không hiểu kiểu tham số cho đối số %s"
+
+#: vncviewer/parameters.cxx:430 vncviewer/parameters.cxx:479
+#, c-format
+msgid "Failed to close registry key: %ld"
+msgstr "Gặp lỗi khi đóng khóa đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:446
+#, c-format
+msgid "Failed to open registry key: %ld"
+msgstr "Gặp lỗi khi mở khóa đăng ký: %ld"
+
+#: vncviewer/parameters.cxx:503
+msgid "Failed to write configuration file, can't obtain home directory path."
+msgstr "Gặp lỗi khi ghi tập tin cấu hình, không thể lấy đường dẫn thư mục riêng."
+
+#: vncviewer/parameters.cxx:516
+#, c-format
+msgid "Failed to write configuration file, can't open %s: %s"
+msgstr "Gặp lỗi khi ghi tập tin cấu hình, không thể mở %s: %s"
+
+#: vncviewer/parameters.cxx:559
+msgid "Failed to read configuration file, can't obtain home directory path."
+msgstr "Gặp lỗi khi đọc tập tin cấu hình, không thể lấy đường dẫn thư mục riêng."
+
+#: vncviewer/parameters.cxx:572
+#, c-format
+msgid "Failed to read configuration file, can't open %s: %s"
+msgstr "Gặp lỗi khi đọc tập tin cấu hình, không thể mở %s: %s"
+
+#: vncviewer/parameters.cxx:585 vncviewer/parameters.cxx:590
+#: vncviewer/parameters.cxx:615 vncviewer/parameters.cxx:628
+#: vncviewer/parameters.cxx:644
+#, c-format
+msgid "Failed to read line %d in file %s: %s"
+msgstr "Gặp lỗi khi đọc dòng %d trong tập tin %s: %s"
+
+#: vncviewer/parameters.cxx:591
+msgid "Line too long"
+msgstr "Dòng quá dài"
+
+#: vncviewer/parameters.cxx:598
+#, c-format
+msgid "Configuration file %s is in an invalid format"
+msgstr "Tập tin cấu hình %s ở định dạng không hợp lệ"
+
+#: vncviewer/parameters.cxx:616
+msgid "Invalid format"
+msgstr "Định dạng không hợp lệ"
+
+#: vncviewer/parameters.cxx:629 vncviewer/parameters.cxx:645
+msgid "Invalid format or too large value"
+msgstr "Định dạng không hợp lệ hay giá trị quá lớn"
+
+#: vncviewer/parameters.cxx:672
+#, c-format
+msgid "Unknown parameter %s on line %d in file %s"
+msgstr "Không hiểu tham số %s trên dòng %d ở tập tin %s"
+
+#: vncviewer/vncviewer.cxx:100
+#, c-format
+msgid ""
+"TigerVNC Viewer %d-bit v%s\n"
+"Built on: %s\n"
+"Copyright (C) 1999-%d TigerVNC Team and many others (see README.txt)\n"
+"See http://www.tigervnc.org for information on TigerVNC."
+msgstr ""
+"TigerVNC Viewer %d-bít v%s\n"
+"Biên dịch vào: %s\n"
+"Copyright (C) 1999-%d Nhóm TigerVNC và nhiều người khác (xem README.txt)\n"
+"Truy cập http://www.tigervnc.org để biết thêm thông tin về TigerVNC."
+
+#: vncviewer/vncviewer.cxx:127
+msgid "About TigerVNC Viewer"
+msgstr "Giới thiệu về bộ xem TigerVNC"
+
+#: vncviewer/vncviewer.cxx:140
+msgid "Internal FLTK error. Exiting."
+msgstr "Lỗi bên trong FLTK. Nên thoát."
+
+#: vncviewer/vncviewer.cxx:158 vncviewer/vncviewer.cxx:170
+#, c-format
+msgid "Error starting new TigerVNC Viewer: %s"
+msgstr "Gặp lỗi khi khởi chạy bộ xem TigerVNC mới: %s"
+
+#: vncviewer/vncviewer.cxx:179
+#, c-format
+msgid "Termination signal %d has been received. TigerVNC Viewer will now exit."
+msgstr "Đã nhận được tín hiệu kết thúc %d. Bộ xem TigerVNC bây giờ sẽ thoát."
+
+#: vncviewer/vncviewer.cxx:271
+msgid "TigerVNC Viewer"
+msgstr "Bộ xem TigerVNC"
+
+#: vncviewer/vncviewer.cxx:279
+msgid "No"
+msgstr "Không"
+
+#: vncviewer/vncviewer.cxx:280
+msgid "Yes"
+msgstr "Có"
+
+#: vncviewer/vncviewer.cxx:283
+msgid "Close"
+msgstr "Đóng"
+
+#: vncviewer/vncviewer.cxx:288
+msgid "About"
+msgstr "Giới thiệu"
+
+#: vncviewer/vncviewer.cxx:291
+msgid "Hide"
+msgstr "Ẩn"
+
+#: vncviewer/vncviewer.cxx:294
+msgid "Quit"
+msgstr "Thoát"
+
+#: vncviewer/vncviewer.cxx:298
+msgid "Services"
+msgstr "Dịch vụ"
+
+#: vncviewer/vncviewer.cxx:299
+msgid "Hide Others"
+msgstr "Các thứ khác ẩn"
+
+#: vncviewer/vncviewer.cxx:300
+msgid "Show All"
+msgstr "Hiện tất cả"
+
+#: vncviewer/vncviewer.cxx:309
+msgctxt "SysMenu|"
+msgid "&File"
+msgstr "&Chính"
+
+#: vncviewer/vncviewer.cxx:312
+msgctxt "SysMenu|File|"
+msgid "&New Connection"
+msgstr "Kết nối &mới"
+
+#: vncviewer/vncviewer.cxx:324
+msgid "Could not create VNC home directory: can't obtain home directory path."
+msgstr "Không thể tạo thư mục cá nhân cho VNC: không thể lấy đường dẫn thư mục cá nhân."
+
+#: vncviewer/vncviewer.cxx:329
+#, c-format
+msgid "Could not create VNC home directory: %s."
+msgstr "Không thể tạo thư mục cá nhân cho VNC: %s."
+
+#. TRANSLATORS: "Parameters" are command line arguments, or settings
+#. from a file or the Windows registry.
+#: vncviewer/vncviewer.cxx:534 vncviewer/vncviewer.cxx:535
+msgid "Parameters -listen and -via are incompatible"
+msgstr "Các tham số -listen và -via xung khắc nhau"
+
+#: vncviewer/vncviewer.cxx:550
+#, c-format
+msgid "Listening on port %d"
+msgstr "Đang nghe trên cổng %d"
+
+#~ msgid "Unknown encoding %d"
+#~ msgstr "Bảng mã chưa biết %d"
+
+#~ msgid "Unknown encoding"
+#~ msgstr "Bảng mã chưa biết"
+
+#~ msgid "Alt"
+#~ msgstr "Alt"
+
+#~ msgid "CleanupSignalHandler called"
+#~ msgstr "CleanupSignalHandler được gọi"
+
+#, fuzzy
+#~ msgid "Error(%d) reading %s from Registry."
+#~ msgstr "Gặp lỗi khi đọc từ máy phục vụ"
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index e99c825..bfd69dc 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -13,3 +13,6 @@
 
 add_executable(encperf encperf.cxx)
 target_link_libraries(encperf test_util rfb)
+
+add_executable(hostport hostport.cxx)
+target_link_libraries(hostport rfb)
diff --git a/tests/hostport.cxx b/tests/hostport.cxx
new file mode 100644
index 0000000..00026e6
--- /dev/null
+++ b/tests/hostport.cxx
@@ -0,0 +1,80 @@
+/* Copyright 2016 Pierre Ossman <ossman@cendio.se> for Cendio AB
+ *
+ * This 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 software 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 software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ */
+
+#include <stdio.h>
+
+#include <rfb/Hostname.h>
+
+static void doTest(const char* hostAndPort,
+                   const char* expectedHost, int expectedPort)
+{
+    char* host;
+    int port;
+
+    printf("\"%s\": ", hostAndPort);
+
+    rfb::getHostAndPort(hostAndPort, &host, &port);
+
+    if (strcmp(host, expectedHost) != 0)
+        printf("FAILED (\"%s\" != \"%s\")", host, expectedHost);
+    else if (port != expectedPort)
+        printf("FAILED (%d != %d)", port, expectedPort);
+    else
+        printf("OK");
+    printf("\n");
+    fflush(stdout);
+
+    rfb::strFree(host);
+}
+
+int main(int argc, char** argv)
+{
+    doTest(":5", "localhost", 5905);
+
+    doTest("1.2.3.4", "1.2.3.4", 5900);
+
+    doTest("1.2.3.4:5", "1.2.3.4", 5905);
+    doTest("1.2.3.4:99", "1.2.3.4", 5999);
+    doTest("1.2.3.4:100", "1.2.3.4", 100);
+    doTest("1.2.3.4:5901", "1.2.3.4", 5901);
+
+    doTest("1.2.3.4::5", "1.2.3.4", 5);
+    doTest("1.2.3.4::99", "1.2.3.4", 99);
+    doTest("1.2.3.4::5901", "1.2.3.4", 5901);
+
+    doTest("[1.2.3.4]", "1.2.3.4", 5900);
+    doTest("[1.2.3.4]:5", "1.2.3.4", 5905);
+    doTest("[1.2.3.4]:100", "1.2.3.4", 100);
+    doTest("[1.2.3.4]::5", "1.2.3.4", 5);
+    doTest("[1.2.3.4]::100", "1.2.3.4", 100);
+
+    // Ambigiuous. For now we'll keep the old behaviour...
+    doTest("::1", "localhost", 1);
+
+    doTest("2001:1234::20:1", "2001:1234::20:1", 5900);
+
+    doTest("[::1]", "::1", 5900);
+    doTest("[2001:1234::20:1]", "2001:1234::20:1", 5900);
+
+    doTest("[2001:1234::20:1]:5", "2001:1234::20:1", 5905);
+    doTest("[2001:1234::20:1]:99", "2001:1234::20:1", 5999);
+    doTest("[2001:1234::20:1]:100", "2001:1234::20:1", 100);
+    doTest("[2001:1234::20:1]:5901", "2001:1234::20:1", 5901);
+
+    return 0;
+}
diff --git a/unix/vncconfig/vncExt.c b/unix/vncconfig/vncExt.c
index e9b948d..6256d3b 100644
--- a/unix/vncconfig/vncExt.c
+++ b/unix/vncconfig/vncExt.c
@@ -24,10 +24,6 @@
 #define _VNCEXT_PROTO_
 #include "vncExt.h"
 
-static Bool XVncExtClientCutTextNotifyWireToEvent(Display* dpy, XEvent* e,
-                                                  xEvent* w);
-static Bool XVncExtSelectionChangeNotifyWireToEvent(Display* dpy, XEvent* e,
-                                                    xEvent* w);
 static Bool XVncExtQueryConnectNotifyWireToEvent(Display* dpy, XEvent* e,
                                                  xEvent* w);
 
@@ -40,10 +36,6 @@
     extensionInited = True;
     codes = XInitExtension(dpy, VNCEXTNAME);
     if (!codes) return False;
-    XESetWireToEvent(dpy, codes->first_event + VncExtClientCutTextNotify,
-                     XVncExtClientCutTextNotifyWireToEvent);
-    XESetWireToEvent(dpy, codes->first_event + VncExtSelectionChangeNotify,
-                     XVncExtSelectionChangeNotifyWireToEvent);
     XESetWireToEvent(dpy, codes->first_event + VncExtQueryConnectNotify,
                      XVncExtQueryConnectNotifyWireToEvent);
   }
@@ -214,53 +206,6 @@
   }
 }
 
-Bool XVncExtSetServerCutText(Display* dpy, const char* str, int len)
-{
-  xVncExtSetServerCutTextReq* req;
-
-  if (!checkExtension(dpy)) return False;
-
-  LockDisplay(dpy);
-  GetReq(VncExtSetServerCutText, req);
-  req->reqType = codes->major_opcode;
-  req->vncExtReqType = X_VncExtSetServerCutText;
-  req->length += (len + 3) >> 2;
-  req->textLen = len;
-  Data(dpy, str, len);
-  UnlockDisplay(dpy);
-  SyncHandle();
-  return True;
-}
-
-Bool XVncExtGetClientCutText(Display* dpy, char** str, int* len)
-{
-  xVncExtGetClientCutTextReq* req;
-  xVncExtGetClientCutTextReply rep;
-
-  if (!checkExtension(dpy)) return False;
-
-  LockDisplay(dpy);
-  GetReq(VncExtGetClientCutText, req);
-  req->reqType = codes->major_opcode;
-  req->vncExtReqType = X_VncExtGetClientCutText;
-  if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
-    UnlockDisplay(dpy);
-    SyncHandle();
-    return False;
-  }
-  UnlockDisplay(dpy);
-  SyncHandle();
-  *len = rep.textLen;
-  *str = (char*) Xmalloc (*len+1);
-  if (!*str) {
-    _XEatData(dpy, (*len+1)&~1);
-    return False;
-  }
-  _XReadPad(dpy, *str, *len);
-  (*str)[*len] = 0;
-  return True;
-}
-
 Bool XVncExtSelectInput(Display* dpy, Window w, int mask)
 {
   xVncExtSelectInputReq* req;
@@ -359,35 +304,6 @@
 }
 
 
-static Bool XVncExtClientCutTextNotifyWireToEvent(Display* dpy, XEvent* e,
-                                                  xEvent* w)
-{
-  XVncExtClientCutTextEvent* ev = (XVncExtClientCutTextEvent*)e;
-  xVncExtClientCutTextNotifyEvent* wire = (xVncExtClientCutTextNotifyEvent*)w;
-  ev->type = wire->type & 0x7f;
-  ev->serial = _XSetLastRequestRead(dpy,(xGenericReply*)wire);
-  ev->send_event = (wire->type & 0x80) != 0;
-  ev->display = dpy;
-  ev->window = wire->window;
-  ev->time = wire->time;
-  return True;
-}
-
-static Bool XVncExtSelectionChangeNotifyWireToEvent(Display* dpy, XEvent* e,
-                                                    xEvent* w)
-{
-  XVncExtSelectionChangeEvent* ev = (XVncExtSelectionChangeEvent*)e;
-  xVncExtSelectionChangeNotifyEvent* wire
-    = (xVncExtSelectionChangeNotifyEvent*)w;
-  ev->type = wire->type & 0x7f;
-  ev->serial = _XSetLastRequestRead(dpy,(xGenericReply*)wire);
-  ev->send_event = (wire->type & 0x80) != 0;
-  ev->display = dpy;
-  ev->window = wire->window;
-  ev->selection = wire->selection;
-  return True;
-}
-
 static Bool XVncExtQueryConnectNotifyWireToEvent(Display* dpy, XEvent* e,
                                                     xEvent* w)
 {
diff --git a/unix/vncconfig/vncExt.h b/unix/vncconfig/vncExt.h
index e41e2e5..2b24469 100644
--- a/unix/vncconfig/vncExt.h
+++ b/unix/vncconfig/vncExt.h
@@ -26,18 +26,12 @@
 #define X_VncExtGetParam 1
 #define X_VncExtGetParamDesc 2
 #define X_VncExtListParams 3
-#define X_VncExtSetServerCutText 4
-#define X_VncExtGetClientCutText 5
 #define X_VncExtSelectInput 6
 #define X_VncExtConnect 7
 #define X_VncExtGetQueryConnect 8
 #define X_VncExtApproveConnect 9
 
-#define VncExtClientCutTextNotify 0
-#define VncExtSelectionChangeNotify 1
 #define VncExtQueryConnectNotify 2
-#define VncExtClientCutTextMask (1 << VncExtClientCutTextNotify)
-#define VncExtSelectionChangeMask (1 << VncExtSelectionChangeNotify)
 #define VncExtQueryConnectMask (1 << VncExtQueryConnectNotify)
 
 #define VncExtNumberEvents 3
@@ -51,8 +45,6 @@
 char* XVncExtGetParamDesc(Display* dpy, const char* param);
 char** XVncExtListParams(Display* dpy, int* nParams);
 void XVncExtFreeParamList(char** list);
-Bool XVncExtSetServerCutText(Display* dpy, const char* str, int len);
-Bool XVncExtGetClientCutText(Display* dpy, char** str, int* len);
 Bool XVncExtSelectInput(Display* dpy, Window w, int mask);
 Bool XVncExtConnect(Display* dpy, const char* hostAndPort);
 Bool XVncExtGetQueryConnect(Display* dpy, char** addr,
@@ -66,24 +58,6 @@
   Bool send_event;
   Display *display;
   Window window;
-  Time time;
-} XVncExtClientCutTextEvent;
-
-typedef struct {
-  int type;
-  unsigned long serial;
-  Bool send_event;
-  Display *display;
-  Window window;
-  Atom selection;
-} XVncExtSelectionChangeEvent;
-
-typedef struct {
-  int type;
-  unsigned long serial;
-  Bool send_event;
-  Display *display;
-  Window window;
 } XVncExtQueryConnectEvent;
 
 #endif
@@ -194,37 +168,6 @@
 
 typedef struct {
   CARD8 reqType;       /* always VncExtReqCode */
-  CARD8 vncExtReqType; /* always VncExtSetServerCutText */
-  CARD16 length B16;
-  CARD32 textLen B32;
-} xVncExtSetServerCutTextReq;
-#define sz_xVncExtSetServerCutTextReq 8
-
-
-typedef struct {
-  CARD8 reqType;       /* always VncExtReqCode */
-  CARD8 vncExtReqType; /* always VncExtGetClientCutText */
-  CARD16 length B16;
-} xVncExtGetClientCutTextReq;
-#define sz_xVncExtGetClientCutTextReq 4
-
-typedef struct {
- BYTE type; /* X_Reply */
- BYTE pad0;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 textLen B32;
- CARD32 pad1 B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
-} xVncExtGetClientCutTextReply;
-#define sz_xVncExtGetClientCutTextReply 32
-
-
-typedef struct {
-  CARD8 reqType;       /* always VncExtReqCode */
   CARD8 vncExtReqType; /* always VncExtSelectInput */
   CARD16 length B16;
   CARD32 window B32;
@@ -293,34 +236,6 @@
 
 
 typedef struct {
-  BYTE type;    /* always eventBase + VncExtClientCutTextNotify */
-  BYTE pad0;
-  CARD16 sequenceNumber B16;
-  CARD32 window B32;
-  CARD32 time B32;
-  CARD32 pad1 B32;
-  CARD32 pad2 B32;
-  CARD32 pad3 B32;
-  CARD32 pad4 B32;
-  CARD32 pad5 B32;
-} xVncExtClientCutTextNotifyEvent;
-#define sz_xVncExtClientCutTextNotifyEvent 32
-
-typedef struct {
-  BYTE type;    /* always eventBase + VncExtSelectionChangeNotify */
-  BYTE pad0;
-  CARD16 sequenceNumber B16;
-  CARD32 window B32;
-  CARD32 selection B32;
-  CARD32 pad1 B32;
-  CARD32 pad2 B32;
-  CARD32 pad3 B32;
-  CARD32 pad4 B32;
-  CARD32 pad5 B32;
-} xVncExtSelectionChangeNotifyEvent;
-#define sz_xVncExtSelectionChangeNotifyEvent 32
-
-typedef struct {
   BYTE type;    /* always eventBase + VncExtQueryConnectNotify */
   BYTE pad0;
   CARD16 sequenceNumber B16;
diff --git a/unix/vncconfig/vncconfig.cxx b/unix/vncconfig/vncconfig.cxx
index 2d6adf5..2bb299f 100644
--- a/unix/vncconfig/vncconfig.cxx
+++ b/unix/vncconfig/vncconfig.cxx
@@ -1,4 +1,5 @@
 /* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
+ * Copyright 2012-2016 Pierre Ossman for Cendio AB
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -38,7 +39,6 @@
 #include <rfb/Configuration.h>
 #include <rfb/Logger_stdio.h>
 #include <rfb/LogWriter.h>
-#include <rfb/Timer.h>
 #include "TXWindow.h"
 #include "TXCheckbox.h"
 #include "TXLabel.h"
@@ -51,22 +51,13 @@
 StringParameter displayname("display", "The X display", "");
 BoolParameter noWindow("nowin", "Don't display a window", 0);
 BoolParameter iconic("iconic", "Start with window iconified", 0);
-BoolParameter setPrimary("SetPrimary", "Set the PRIMARY as well "
-                         "as the CLIPBOARD selection", true);
-BoolParameter sendPrimary("SendPrimary", "Send the PRIMARY as well as the "
-                          "CLIPBOARD selection", true);
-IntParameter pollTime("poll",
-                      "How often to poll for clipboard changes in ms", 0);
-
-inline const char* selectionName(Atom sel) {
-  if (sel == xaCLIPBOARD) return "CLIPBOARD";
-  if (sel == XA_PRIMARY) return "PRIMARY";
-  return "unknown";
-}
 
 #define ACCEPT_CUT_TEXT "AcceptCutText"
 #define SEND_CUT_TEXT "SendCutText"
 
+#define SET_PRIMARY "SetPrimary"
+#define SEND_PRIMARY "SendPrimary"
+
 char* programName = 0;
 Display* dpy;
 int vncExtEventBase, vncExtErrorBase;
@@ -83,90 +74,39 @@
 class VncConfigWindow : public TXWindow, public TXEventHandler,
                         public TXDeleteWindowCallback,
                         public TXCheckboxCallback,
-                        public rfb::Timer::Callback,
                         public QueryResultCallback {
 public:
   VncConfigWindow(Display* dpy)
-    : TXWindow(dpy, 300, 100), cutText(0), cutTextLen(0),
+    : TXWindow(dpy, 300, 100),
       acceptClipboard(dpy, "Accept clipboard from viewers", this, false, this),
-      setPrimaryCB(dpy, "Also set primary selection",
-                      this, false, this),
+      setPrimaryCB(dpy, "Also set primary selection", this, false, this),
       sendClipboard(dpy, "Send clipboard to viewers", this, false, this),
       sendPrimaryCB(dpy, "Send primary selection to viewers", this,false,this),
-      pollTimer(this),
       queryConnectDialog(0)
   {
-    selection[0] = selection[1] = 0;
-    selectionLen[0] = selectionLen[1] = 0;
     int y = yPad;
     acceptClipboard.move(xPad, y);
     acceptClipboard.checked(getBoolParam(dpy, ACCEPT_CUT_TEXT));
     y += acceptClipboard.height();
     setPrimaryCB.move(xPad + 10, y);
-    setPrimaryCB.checked(setPrimary);
+    setPrimaryCB.checked(getBoolParam(dpy, SET_PRIMARY));
     setPrimaryCB.disabled(!acceptClipboard.checked());
     y += setPrimaryCB.height();
     sendClipboard.move(xPad, y);
     sendClipboard.checked(getBoolParam(dpy, SEND_CUT_TEXT));
     y += sendClipboard.height();
-    sendPrimaryCB.move(xPad, y);
-    sendPrimaryCB.checked(sendPrimary);
+    sendPrimaryCB.move(xPad + 10, y);
+    sendPrimaryCB.checked(getBoolParam(dpy, SEND_PRIMARY));
     sendPrimaryCB.disabled(!sendClipboard.checked());
     y += sendPrimaryCB.height();
     setEventHandler(this);
     toplevel("VNC config", this, 0, 0, 0, iconic);
-    XVncExtSelectInput(dpy, win(),
-                       VncExtClientCutTextMask|
-                       VncExtSelectionChangeMask|
-                       VncExtQueryConnectMask);
-    XConvertSelection(dpy, XA_PRIMARY, XA_STRING,
-                      XA_PRIMARY, win(), CurrentTime);
-    XConvertSelection(dpy, xaCLIPBOARD, XA_STRING,
-                      xaCLIPBOARD, win(), CurrentTime);
-    if (pollTime != 0)
-      pollTimer.start(pollTime);
+    XVncExtSelectInput(dpy, win(), VncExtQueryConnectMask);
   }
 
-  // handleEvent(). If we get a ClientCutTextNotify event from Xvnc, set the
-  // primary and clipboard selections to the clientCutText. If we get a
-  // SelectionChangeNotify event from Xvnc, set the serverCutText to the value
-  // of the new selection.
+  // handleEvent()
 
   virtual void handleEvent(TXWindow* w, XEvent* ev) {
-    if (acceptClipboard.checked()) {
-      if (ev->type == vncExtEventBase + VncExtClientCutTextNotify) {
-        XVncExtClientCutTextEvent* cutEv = (XVncExtClientCutTextEvent*)ev;
-        if (cutText)
-          XFree(cutText);
-        cutText = 0;
-        if (XVncExtGetClientCutText(dpy, &cutText, &cutTextLen)) {
-          vlog.debug("Got client cut text: '%.*s%s'",
-                     cutTextLen<9?cutTextLen:8, cutText,
-                     cutTextLen<9?"":"...");
-          XStoreBytes(dpy, cutText, cutTextLen);
-          if (setPrimaryCB.checked()) {
-            ownSelection(XA_PRIMARY, cutEv->time);
-          }
-          ownSelection(xaCLIPBOARD, cutEv->time);
-          delete [] selection[0];
-          delete [] selection[1];
-          selection[0] = selection[1] = 0;
-          selectionLen[0] = selectionLen[1] = 0;
-        }
-      }
-    }
-    if (sendClipboard.checked()) {
-      if (ev->type == vncExtEventBase + VncExtSelectionChangeNotify) {
-        vlog.debug("selection change event");
-        XVncExtSelectionChangeEvent* selEv = (XVncExtSelectionChangeEvent*)ev;
-        if (selEv->selection == xaCLIPBOARD ||
-            (selEv->selection == XA_PRIMARY && sendPrimaryCB.checked())) {
-          if (!selectionOwner(selEv->selection))
-            XConvertSelection(dpy, selEv->selection, XA_STRING,
-                              selEv->selection, win(), CurrentTime);
-        }
-      }
-    }
     if (ev->type == vncExtEventBase + VncExtQueryConnectNotify) {
        vlog.debug("query connection event");
        if (queryConnectDialog)
@@ -188,55 +128,6 @@
        }
     }
   }
-  
-
-  // selectionRequest() is called when we are the selection owner and another X
-  // client has requested the selection.  We simply put the server's cut text
-  // into the requested property.  TXWindow will handle the rest.
-  bool selectionRequest(Window requestor, Atom selection, Atom property)
-  {
-    if (cutText)
-      XChangeProperty(dpy, requestor, property, XA_STRING, 8,
-                      PropModeReplace, (unsigned char*)cutText,
-                      cutTextLen);
-    return cutText;
-  }
-
-  // selectionNotify() is called when we have requested the selection from the
-  // selection owner.
-  void selectionNotify(XSelectionEvent* ev, Atom type, int format,
-                       int nitems, void* data)
-  {
-    if (ev->requestor != win() || ev->target != XA_STRING)
-      return;
-
-    if (data && format == 8) {
-      int i = (ev->selection == XA_PRIMARY ? 0 : 1);
-      if (selectionLen[i] == nitems && memcmp(selection[i], data, nitems) == 0)
-        return;
-      delete [] selection[i];
-      selection[i] = new char[nitems];
-      memcpy(selection[i], data, nitems);
-      selectionLen[i] = nitems;
-      if (cutTextLen == nitems && memcmp(cutText, data, nitems) == 0) {
-        vlog.debug("ignoring duplicate cut text");
-        return;
-      }
-      if (cutText)
-        XFree(cutText);
-      cutText = (char*)malloc(nitems); // assuming XFree() same as free()
-      if (!cutText) {
-        vlog.error("unable to allocate selection buffer");
-        return;
-      }
-      memcpy(cutText, data, nitems);
-      cutTextLen = nitems;
-      vlog.debug("sending %s selection as server cut text: '%.*s%s'",
-                 selectionName(ev->selection),cutTextLen<9?cutTextLen:8,
-                 cutText, cutTextLen<9?"":"...");
-      XVncExtSetServerCutText(dpy, cutText, cutTextLen);
-    }
-  }
 
   // TXDeleteWindowCallback method
   virtual void deleteWindow(TXWindow* w) {
@@ -253,20 +144,15 @@
       XVncExtSetParam(dpy, (sendClipboard.checked()
                             ? SEND_CUT_TEXT "=1" : SEND_CUT_TEXT "=0"));
       sendPrimaryCB.disabled(!sendClipboard.checked());
+    } else if (checkbox == &setPrimaryCB) {
+      XVncExtSetParam(dpy, (setPrimaryCB.checked()
+                            ? SET_PRIMARY "=1" : SET_PRIMARY "=0"));
+    } else if (checkbox == &sendPrimaryCB) {
+      XVncExtSetParam(dpy, (sendPrimaryCB.checked()
+                            ? SEND_PRIMARY "=1" : SEND_PRIMARY "=0"));
     }
   }
 
-  // rfb::Timer::Callback interface
-  virtual bool handleTimeout(rfb::Timer* timer) {
-    if (sendPrimaryCB.checked() && !selectionOwner(XA_PRIMARY))
-      XConvertSelection(dpy, XA_PRIMARY, XA_STRING,
-                        XA_PRIMARY, win(), CurrentTime);
-    if (!selectionOwner(xaCLIPBOARD))
-      XConvertSelection(dpy, xaCLIPBOARD, XA_STRING,
-                        xaCLIPBOARD, win(), CurrentTime);
-    return true;
-  }
-
   // QueryResultCallback interface
   virtual void queryApproved() {
     XVncExtApproveConnect(dpy, queryConnectId, 1);
@@ -276,12 +162,8 @@
   }
 
 private:
-  char* cutText;
-  int cutTextLen;
-  char* selection[2];
-  int selectionLen[2];
-  TXCheckbox acceptClipboard, setPrimaryCB, sendClipboard, sendPrimaryCB;
-  rfb::Timer pollTimer;
+  TXCheckbox acceptClipboard, setPrimaryCB;
+  TXCheckbox sendClipboard, sendPrimaryCB;
 
   QueryConnectDialog* queryConnectDialog;
   void* queryConnectId;
diff --git a/unix/vncconfig/vncconfig.man b/unix/vncconfig/vncconfig.man
index 6695be3..06f9ca9 100644
--- a/unix/vncconfig/vncconfig.man
+++ b/unix/vncconfig/vncconfig.man
@@ -37,14 +37,11 @@
 servers prior to version 4.
 
 When run with no options, it runs as a kind of "helper" application for Xvnc.
-Its main purpose when run in this mode is to support clipboard transfer to and
-from the VNC viewer(s).  Note that without a running instance of
-\fBvncconfig\fP there will be no clipboard support.  It puts up a window with
-some checkboxes which can be used to disable clipboard transfers if required
-(in the future there may be more functions available from this window).  The
-\fB-nowin\fP flag can be used if you always want clipboard support but don't
-wish to clutter the desktop with this window - alternatively the \fB-iconic\fP
-option can be used to make it iconified by default.
+Its main purpose when run in this mode is to query the user how new
+connections should be handled (provided this feature is enabled). The
+\fB-nowin\fP flag can be used if you always want the query support but don't
+wish to clutter the desktop with the settings window - alternatively the
+\fB-iconic\fP option can be used to make it iconified by default.
 
 When run in any other mode, \fBvncconfig\fP is a one-shot program used to
 configure or control Xvnc as appropriate.  It can be used to tell Xvnc to
diff --git a/unix/vncserver b/unix/vncserver
index f12df57..6c29a75 100755
--- a/unix/vncserver
+++ b/unix/vncserver
@@ -373,9 +373,9 @@
 # Create the user's config file if necessary.
 if (!(-e "$vncUserDir/config")) {
     warn "Creating default config $vncUserDir/config\n";
-    open(XSTARTUP, ">$vncUserDir/config");
-    print XSTARTUP $defaultConfig;
-    close(XSTARTUP);
+    open(VNCUSERCONFIG, ">$vncUserDir/config");
+    print VNCUSERCONFIG $defaultConfig;
+    close(VNCUSERCONFIG);
     chmod 0644, "$vncUserDir/config";
 }
 
@@ -397,8 +397,6 @@
 }
 $ENV{VNCDESKTOP}= $desktopName;
 
-system($exedir."vncconfig -nowin >> " . &quotedString($desktopLog) . " 2>&1 &");
-
 if ($opt{'-fg'}) {
     if (! $skipxstartup) {
         system("$xstartupFile >> " . &quotedString($desktopLog) . " 2>&1");
diff --git a/unix/xserver/hw/vnc/Input.c b/unix/xserver/hw/vnc/Input.c
index 55befa7..64305cb 100644
--- a/unix/xserver/hw/vnc/Input.c
+++ b/unix/xserver/hw/vnc/Input.c
@@ -33,7 +33,9 @@
 #include "inpututils.h"
 #endif
 #include "mi.h"
+#include "mipointer.h"
 #include "exevents.h"
+#include "scrnintstr.h"
 #include "xkbsrv.h"
 #include "xkbstr.h"
 #include "xserver-properties.h"
@@ -186,8 +188,16 @@
 
 void vncGetPointerPos(int *x, int *y)
 {
-	if (vncPointerDev != NULL)
-		GetSpritePosition(vncPointerDev, &cursorPosX, &cursorPosY);
+	if (vncPointerDev != NULL) {
+		ScreenPtr ptrScreen;
+
+		miPointerGetPosition(vncPointerDev, &cursorPosX, &cursorPosY);
+
+		/* Pointer coordinates are screen relative */
+		ptrScreen = miPointerGetScreen(vncPointerDev);
+		cursorPosX += ptrScreen->x;
+		cursorPosY += ptrScreen->y;
+	}
 
 	*x = cursorPosX;
 	*y = cursorPosY;
diff --git a/unix/xserver/hw/vnc/Makefile.am b/unix/xserver/hw/vnc/Makefile.am
index d7ab259..95b03d2 100644
--- a/unix/xserver/hw/vnc/Makefile.am
+++ b/unix/xserver/hw/vnc/Makefile.am
@@ -10,11 +10,12 @@
 noinst_LTLIBRARIES = libvnccommon.la
 
 HDRS = vncExtInit.h vncHooks.h \
-	vncBlockHandler.h XorgGlue.h \
-	XserverDesktop.h xorg-version.h \
+	vncBlockHandler.h vncSelection.h \
+	XorgGlue.h XserverDesktop.h xorg-version.h \
 	Input.h RFBGlue.h
 
-libvnccommon_la_SOURCES = $(HDRS) vncExt.c vncExtInit.cc vncHooks.c \
+libvnccommon_la_SOURCES = $(HDRS) \
+	vncExt.c vncExtInit.cc vncHooks.c vncSelection.c \
 	vncBlockHandler.c XorgGlue.c RFBGlue.cc XserverDesktop.cc \
 	Input.c InputXKB.c
 
diff --git a/unix/xserver/hw/vnc/RFBGlue.cc b/unix/xserver/hw/vnc/RFBGlue.cc
index d6c3ef6..c915336 100644
--- a/unix/xserver/hw/vnc/RFBGlue.cc
+++ b/unix/xserver/hw/vnc/RFBGlue.cc
@@ -31,6 +31,7 @@
 
 // Loggers used by C code must be created here
 static LogWriter inputLog("Input");
+static LogWriter selectionLog("Selection");
 
 void vncInitRFB(void)
 {
diff --git a/unix/xserver/hw/vnc/XorgGlue.c b/unix/xserver/hw/vnc/XorgGlue.c
index d7892b1..712ed6a 100644
--- a/unix/xserver/hw/vnc/XorgGlue.c
+++ b/unix/xserver/hw/vnc/XorgGlue.c
@@ -92,6 +92,16 @@
   *blueMask = vis->blueMask;
 }
 
+int vncGetScreenX(int scrIdx)
+{
+  return screenInfo.screens[scrIdx]->x;
+}
+
+int vncGetScreenY(int scrIdx)
+{
+  return screenInfo.screens[scrIdx]->y;
+}
+
 int vncGetScreenWidth(int scrIdx)
 {
   return screenInfo.screens[scrIdx]->width;
diff --git a/unix/xserver/hw/vnc/XorgGlue.h b/unix/xserver/hw/vnc/XorgGlue.h
index 92b0d18..5cae860 100644
--- a/unix/xserver/hw/vnc/XorgGlue.h
+++ b/unix/xserver/hw/vnc/XorgGlue.h
@@ -33,6 +33,8 @@
                         int *trueColour, int *bigEndian,
                         int *redMask, int *greenMask, int *blueMask);
 
+int vncGetScreenX(int scrIdx);
+int vncGetScreenY(int scrIdx);
 int vncGetScreenWidth(int scrIdx);
 int vncGetScreenHeight(int scrIdx);
 
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc
index f1c9b74..4f82a54 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.cc
+++ b/unix/xserver/hw/vnc/XserverDesktop.cc
@@ -43,6 +43,7 @@
 #include "XserverDesktop.h"
 #include "vncExtInit.h"
 #include "vncHooks.h"
+#include "vncSelection.h"
 #include "XorgGlue.h"
 #include "Input.h"
 
@@ -513,6 +514,8 @@
       // We are responsible for propagating mouse movement between clients
       int cursorX, cursorY;
       vncGetPointerPos(&cursorX, &cursorY);
+      cursorX -= vncGetScreenX(screenIndex);
+      cursorY -= vncGetScreenY(screenIndex);
       if (oldCursorPos.x != cursorX || oldCursorPos.y != cursorY) {
         oldCursorPos.x = cursorX;
         oldCursorPos.y = cursorY;
@@ -647,7 +650,8 @@
 
 void XserverDesktop::pointerEvent(const Point& pos, int buttonMask)
 {
-  vncPointerMove(pos.x, pos.y);
+  vncPointerMove(pos.x + vncGetScreenX(screenIndex),
+                 pos.y + vncGetScreenY(screenIndex));
   vncPointerButtonAction(buttonMask);
 }
 
diff --git a/unix/xserver/hw/vnc/Xvnc.man b/unix/xserver/hw/vnc/Xvnc.man
index a4d9f8d..04e8f94 100644
--- a/unix/xserver/hw/vnc/Xvnc.man
+++ b/unix/xserver/hw/vnc/Xvnc.man
@@ -126,14 +126,8 @@
 is off.
 .
 .TP
-.B \-SendCutText
-Send clipboard changes to clients (default is on).  Note that you must also run
-\fBvncconfig\fP(1) to get the clipboard to work.
-.
-.TP
 .B \-AcceptCutText
-Accept clipboard updates from clients (default is on).  Note that you must also
-run \fBvncconfig\fP(1) to get the clipboard to work.
+Accept clipboard updates from clients (default is on).
 .
 .TP
 .B \-MaxCutText \fIbytes\fP
@@ -141,6 +135,15 @@
 Default is \fB262144\fP.
 .
 .TP
+.B \-SendCutText
+Send clipboard changes to clients (default is on).
+.
+.TP
+.B \-SendPrimary
+Send the primary selection and cut buffer to the server as well as the
+clipboard selection. Default is on.
+.
+.TP
 .B \-AcceptPointerEvents
 Accept pointer press and release events from clients (default is on).
 .
@@ -314,7 +317,7 @@
 When \fBNoClipboard\fP parameter is set, allowing override of \fBSendCutText\fP
 and \fBAcceptCutText\fP has no effect.
 
-Default is \fBdesktop,AcceptPointerEvents,SendCutText,AcceptCutText\fP.
+Default is \fBdesktop,AcceptPointerEvents,SendCutText,AcceptCutText,SendPrimary,SetPrimary\fP.
 
 .SH USAGE WITH INETD
 By configuring the \fBinetd\fP(1) service appropriately, Xvnc can be launched
diff --git a/unix/xserver/hw/vnc/vncExt.c b/unix/xserver/hw/vnc/vncExt.c
index b27115f..0ee3210 100644
--- a/unix/xserver/hw/vnc/vncExt.c
+++ b/unix/xserver/hw/vnc/vncExt.c
@@ -27,7 +27,6 @@
 #include "dixstruct.h"
 #include "extnsionst.h"
 #include "scrnintstr.h"
-#include "selection.h"
 
 #define _VNCEXT_SERVER_
 #define _VNCEXT_PROTO_
@@ -44,17 +43,11 @@
 
 static void vncClientStateChange(CallbackListPtr*, void *, void *);
 
-static void vncSelectionCallback(CallbackListPtr *callbacks,
-                                 void * data, void * args);
-
 static int vncErrorBase = 0;
 static int vncEventBase = 0;
 
 int vncNoClipboard = 0;
 
-static char* clientCutText = NULL;
-static int clientCutTextLen = 0;
-
 static struct VncInputSelect* vncInputSelectHead = NULL;
 
 struct VncInputSelect {
@@ -83,10 +76,6 @@
     FatalError("Add ClientStateCallback failed\n");
   }
 
-  if (!AddCallback(&SelectionCallback, vncSelectionCallback, 0)) {
-    FatalError("Add SelectionCallback failed\n");
-  }
-
   return 0;
 }
 
@@ -121,47 +110,6 @@
   return count;
 }
 
-void vncClientCutText(const char* str, int len)
-{
-  xVncExtClientCutTextNotifyEvent ev;
-
-  if (clientCutText != NULL)
-    free(clientCutText);
-  clientCutTextLen = 0;
-
-  clientCutText = malloc(len);
-  if (clientCutText == NULL) {
-    ErrorF("Could not allocate clipboard buffer\n");
-    return;
-  }
-
-  memcpy(clientCutText, str, len);
-  clientCutTextLen = len;
-
-  ev.type = vncEventBase + VncExtClientCutTextNotify;
-  for (struct VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) {
-    if (cur->mask & VncExtClientCutTextMask) {
-      ev.sequenceNumber = cur->client->sequence;
-      ev.window = cur->window;
-      ev.time = GetTimeInMillis();
-      if (cur->client->swapped) {
-#if XORG < 112
-        int n;
-        swaps(&ev.sequenceNumber, n);
-        swapl(&ev.window, n);
-        swapl(&ev.time, n);
-#else
-        swaps(&ev.sequenceNumber);
-        swapl(&ev.window);
-        swapl(&ev.time);
-#endif
-      }
-      WriteToClient(cur->client, sizeof(xVncExtClientCutTextNotifyEvent),
-                    (char *)&ev);
-    }
-  }
-}
-
 static int ProcVncExtSetParam(ClientPtr client)
 {
   char *param;
@@ -397,73 +345,6 @@
   return ProcVncExtListParams(client);
 }
 
-static int ProcVncExtSetServerCutText(ClientPtr client)
-{
-  REQUEST(xVncExtSetServerCutTextReq);
-  REQUEST_FIXED_SIZE(xVncExtSetServerCutTextReq, stuff->textLen);
-  vncServerCutText((const char*)&stuff[1], stuff->textLen);
-  return (client->noClientException);
-}
-
-static int SProcVncExtSetServerCutText(ClientPtr client)
-{
-  REQUEST(xVncExtSetServerCutTextReq);
-#if XORG < 112
-  register char n;
-  swaps(&stuff->length, n);
-#else
-  swaps(&stuff->length);
-#endif
-  REQUEST_AT_LEAST_SIZE(xVncExtSetServerCutTextReq);
-#if XORG < 112
-  swapl(&stuff->textLen, n);
-#else
-  swapl(&stuff->textLen);
-#endif
-  return ProcVncExtSetServerCutText(client);
-}
-
-static int ProcVncExtGetClientCutText(ClientPtr client)
-{
-  xVncExtGetClientCutTextReply rep;
-
-  REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
-
-  rep.type = X_Reply;
-  rep.length = (clientCutTextLen + 3) >> 2;
-  rep.sequenceNumber = client->sequence;
-  rep.textLen = clientCutTextLen;
-  if (client->swapped) {
-#if XORG < 112
-    int n;
-    swaps(&rep.sequenceNumber, n);
-    swapl(&rep.length, n);
-    swapl(&rep.textLen, n);
-#else
-    swaps(&rep.sequenceNumber);
-    swapl(&rep.length);
-    swapl(&rep.textLen);
-#endif
-  }
-  WriteToClient(client, sizeof(xVncExtGetClientCutTextReply), (char *)&rep);
-  if (clientCutText)
-    WriteToClient(client, clientCutTextLen, clientCutText);
-  return (client->noClientException);
-}
-
-static int SProcVncExtGetClientCutText(ClientPtr client)
-{
-  REQUEST(xVncExtGetClientCutTextReq);
-#if XORG < 112
-  register char n;
-  swaps(&stuff->length, n);
-#else
-  swaps(&stuff->length);
-#endif
-  REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq);
-  return ProcVncExtGetClientCutText(client);
-}
-
 static int ProcVncExtSelectInput(ClientPtr client)
 {
   struct VncInputSelect** nextPtr;
@@ -667,10 +548,6 @@
     return ProcVncExtGetParamDesc(client);
   case X_VncExtListParams:
     return ProcVncExtListParams(client);
-  case X_VncExtSetServerCutText:
-    return ProcVncExtSetServerCutText(client);
-  case X_VncExtGetClientCutText:
-    return ProcVncExtGetClientCutText(client);
   case X_VncExtSelectInput:
     return ProcVncExtSelectInput(client);
   case X_VncExtConnect:
@@ -696,10 +573,6 @@
     return SProcVncExtGetParamDesc(client);
   case X_VncExtListParams:
     return SProcVncExtListParams(client);
-  case X_VncExtSetServerCutText:
-    return SProcVncExtSetServerCutText(client);
-  case X_VncExtGetClientCutText:
-    return SProcVncExtGetClientCutText(client);
   case X_VncExtSelectInput:
     return SProcVncExtSelectInput(client);
   case X_VncExtConnect:
@@ -732,39 +605,3 @@
     }
   }
 }
-
-static void SendSelectionChangeEvent(Atom selection)
-{
-  xVncExtSelectionChangeNotifyEvent ev;
-  ev.type = vncEventBase + VncExtSelectionChangeNotify;
-  for (struct VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) {
-    if (cur->mask & VncExtSelectionChangeMask) {
-      ev.sequenceNumber = cur->client->sequence;
-      ev.window = cur->window;
-      ev.selection = selection;
-      if (cur->client->swapped) {
-#if XORG < 112
-        int n;
-        swaps(&ev.sequenceNumber, n);
-        swapl(&ev.window, n);
-        swapl(&ev.selection, n);
-#else
-        swaps(&ev.sequenceNumber);
-        swapl(&ev.window);
-        swapl(&ev.selection);
-#endif
-      }
-      WriteToClient(cur->client, sizeof(xVncExtSelectionChangeNotifyEvent),
-                    (char *)&ev);
-    }
-  }
-}
-
-static void vncSelectionCallback(CallbackListPtr *callbacks, void * data, void * args)
-{
-  SelectionInfoRec *info = (SelectionInfoRec *) args;
-  Selection *selection = info->selection;
-
-  SendSelectionChangeEvent(selection->selection);
-}
-
diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc
index 1d37493..dea3cb8 100644
--- a/unix/xserver/hw/vnc/vncExtInit.cc
+++ b/unix/xserver/hw/vnc/vncExtInit.cc
@@ -38,6 +38,7 @@
 #include "vncExtInit.h"
 #include "vncHooks.h"
 #include "vncBlockHandler.h"
+#include "vncSelection.h"
 #include "XorgGlue.h"
 
 using namespace rfb;
@@ -83,7 +84,12 @@
                                      true);
 rfb::StringParameter allowOverride("AllowOverride",
                                    "Comma separated list of parameters that can be modified using VNC extension.",
-                                   "desktop,AcceptPointerEvents,SendCutText,AcceptCutText");
+                                   "desktop,AcceptPointerEvents,SendCutText,AcceptCutText,SendPrimary,SetPrimary");
+rfb::BoolParameter setPrimary("SetPrimary", "Set the PRIMARY as well "
+                              "as the CLIPBOARD selection", true);
+rfb::BoolParameter sendPrimary("SendPrimary",
+                               "Send the PRIMARY as well as the CLIPBOARD selection",
+                               true);
 
 static PixelFormat vncGetPixelFormat(int scrIdx)
 {
@@ -151,6 +157,8 @@
   if (ret == -1)
     return;
 
+  vncSelectionInit();
+
   vlog.info("VNC extension running!");
 
   try {
@@ -274,6 +282,16 @@
   return (bool)avoidShiftNumLock;
 }
 
+int vncGetSetPrimary(void)
+{
+  return (bool)setPrimary;
+}
+
+int vncGetSendPrimary(void)
+{
+  return (bool)sendPrimary;
+}
+
 void vncUpdateDesktopName(void)
 {
   for (int scr = 0; scr < vncGetScreenCount(); scr++) {
@@ -376,10 +394,14 @@
   desktop[scrIdx]->add_copied(reg, rfb::Point(dx, dy));
 }
 
-void vncSetCursor(int scrIdx, int width, int height, int hotX, int hotY,
+void vncSetCursor(int width, int height, int hotX, int hotY,
                   const unsigned char *rgbaData)
 {
-  desktop[scrIdx]->setCursor(width, height, hotX, hotY, rgbaData);
+  for (int scr = 0; scr < vncGetScreenCount(); scr++) {
+    if (desktop[scr] == NULL)
+      continue;
+    desktop[scr]->setCursor(width, height, hotX, hotY, rgbaData);
+  }
 }
 
 void vncPreScreenResize(int scrIdx)
diff --git a/unix/xserver/hw/vnc/vncExtInit.h b/unix/xserver/hw/vnc/vncExtInit.h
index be6487c..9785d11 100644
--- a/unix/xserver/hw/vnc/vncExtInit.h
+++ b/unix/xserver/hw/vnc/vncExtInit.h
@@ -41,8 +41,6 @@
 
 int vncNotifyQueryConnect(void);
 
-void vncClientCutText(const char* str, int len);
-
 // vncExtInit.cc
 extern void* vncFbptr[];
 extern int vncFbstride[];
@@ -59,6 +57,9 @@
 
 int vncGetAvoidShiftNumLock(void);
 
+int vncGetSetPrimary(void);
+int vncGetSendPrimary(void);
+
 void vncUpdateDesktopName(void);
 
 void vncServerCutText(const char *text, size_t len);
@@ -83,7 +84,7 @@
                   int nRects, const struct UpdateRect *rects,
                   int dx, int dy);
 
-void vncSetCursor(int scrIdx, int width, int height, int hotX, int hotY,
+void vncSetCursor(int width, int height, int hotX, int hotY,
                   const unsigned char *rgbaData);
 
 void vncPreScreenResize(int scrIdx);
diff --git a/unix/xserver/hw/vnc/vncHooks.c b/unix/xserver/hw/vnc/vncHooks.c
index b21f4c6..22ea9ea 100644
--- a/unix/xserver/hw/vnc/vncHooks.c
+++ b/unix/xserver/hw/vnc/vncHooks.c
@@ -699,7 +699,7 @@
     }
 #endif
 
-    vncSetCursor(pScreen->myNum, width, height, hotX, hotY, rgbaData);
+    vncSetCursor(width, height, hotX, hotY, rgbaData);
 
     free(rgbaData);
   }
diff --git a/unix/xserver/hw/vnc/vncSelection.c b/unix/xserver/hw/vnc/vncSelection.c
new file mode 100644
index 0000000..e50548a
--- /dev/null
+++ b/unix/xserver/hw/vnc/vncSelection.c
@@ -0,0 +1,521 @@
+/* Copyright 2016 Pierre Ossman for Cendio AB
+ * 
+ * This 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 software 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 software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/Xatom.h>
+
+#include "propertyst.h"
+#include "scrnintstr.h"
+#include "selection.h"
+#include "windowstr.h"
+#include "xace.h"
+
+#include "xorg-version.h"
+
+#include "vncExtInit.h"
+#include "vncSelection.h"
+#include "RFBGlue.h"
+
+#define LOG_NAME "Selection"
+
+#define LOG_ERROR(...) vncLogError(LOG_NAME, __VA_ARGS__)
+#define LOG_STATUS(...) vncLogStatus(LOG_NAME, __VA_ARGS__)
+#define LOG_INFO(...) vncLogInfo(LOG_NAME, __VA_ARGS__)
+#define LOG_DEBUG(...) vncLogDebug(LOG_NAME, __VA_ARGS__)
+
+static Atom xaPRIMARY, xaCLIPBOARD;
+static Atom xaTARGETS, xaTIMESTAMP, xaSTRING, xaTEXT, xaUTF8_STRING;
+
+static WindowPtr pWindow;
+static Window wid;
+
+static char* clientCutText;
+static int clientCutTextLen;
+
+static int vncCreateSelectionWindow(void);
+static int vncOwnSelection(Atom selection);
+static int vncProcConvertSelection(ClientPtr client);
+static int vncProcSendEvent(ClientPtr client);
+static void vncSelectionCallback(CallbackListPtr *callbacks,
+                                 void * data, void * args);
+
+static int (*origProcConvertSelection)(ClientPtr);
+static int (*origProcSendEvent)(ClientPtr);
+
+void vncSelectionInit(void)
+{
+  xaPRIMARY = MakeAtom("PRIMARY", 7, TRUE);
+  xaCLIPBOARD = MakeAtom("CLIPBOARD", 9, TRUE);
+
+  xaTARGETS = MakeAtom("TARGETS", 7, TRUE);
+  xaTIMESTAMP = MakeAtom("TIMESTAMP", 9, TRUE);
+  xaSTRING = MakeAtom("STRING", 6, TRUE);
+  xaTEXT = MakeAtom("TEXT", 4, TRUE);
+  xaUTF8_STRING = MakeAtom("UTF8_STRING", 11, TRUE);
+
+  /* There are no hooks for when these are internal windows, so
+   * override the relevant handlers. */
+  origProcConvertSelection = ProcVector[X_ConvertSelection];
+  ProcVector[X_ConvertSelection] = vncProcConvertSelection;
+  origProcSendEvent = ProcVector[X_SendEvent];
+  ProcVector[X_SendEvent] = vncProcSendEvent;
+
+  if (!AddCallback(&SelectionCallback, vncSelectionCallback, 0))
+    FatalError("Add VNC SelectionCallback failed\n");
+}
+
+void vncClientCutText(const char* str, int len)
+{
+  int rc;
+
+  if (clientCutText != NULL)
+    free(clientCutText);
+
+  clientCutText = malloc(len);
+  if (clientCutText == NULL) {
+    LOG_ERROR("Could not allocate clipboard buffer");
+    DeleteWindowFromAnySelections(pWindow);
+    return;
+  }
+
+  memcpy(clientCutText, str, len);
+  clientCutTextLen = len;
+
+  if (vncGetSetPrimary()) {
+    rc = vncOwnSelection(xaPRIMARY);
+    if (rc != Success)
+      LOG_ERROR("Could not set PRIMARY selection");
+  }
+
+  vncOwnSelection(xaCLIPBOARD);
+  if (rc != Success)
+    LOG_ERROR("Could not set CLIPBOARD selection");
+}
+
+static int vncCreateSelectionWindow(void)
+{
+  ScreenPtr pScreen;
+  int result;
+
+  if (pWindow != NULL)
+    return Success;
+
+  pScreen = screenInfo.screens[0];
+
+  wid = FakeClientID(0);
+  pWindow = CreateWindow(wid, pScreen->root,
+                         0, 0, 100, 100, 0, InputOnly,
+                         0, NULL, 0, serverClient,
+                         CopyFromParent, &result);
+  if (!pWindow)
+    return result;
+
+  if (!AddResource(pWindow->drawable.id, RT_WINDOW, pWindow))
+      return BadAlloc;
+
+  LOG_DEBUG("Created selection window");
+
+  return Success;
+}
+
+static int vncOwnSelection(Atom selection)
+{
+  Selection *pSel;
+  int rc;
+
+  SelectionInfoRec info;
+
+  rc = vncCreateSelectionWindow();
+  if (rc != Success)
+    return rc;
+
+  rc = dixLookupSelection(&pSel, selection, serverClient, DixSetAttrAccess);
+  if (rc == Success) {
+    if (pSel->client && (pSel->client != serverClient)) {
+      xEvent event = {
+        .u.selectionClear.time = currentTime.milliseconds,
+        .u.selectionClear.window = pSel->window,
+        .u.selectionClear.atom = pSel->selection
+      };
+      event.u.u.type = SelectionClear;
+      WriteEventsToClient(pSel->client, 1, &event);
+    }
+  } else if (rc == BadMatch) {
+    pSel = dixAllocateObjectWithPrivates(Selection, PRIVATE_SELECTION);
+    if (!pSel)
+      return BadAlloc;
+
+    pSel->selection = selection;
+
+    rc = XaceHookSelectionAccess(serverClient, &pSel,
+                                 DixCreateAccess | DixSetAttrAccess);
+    if (rc != Success) {
+        free(pSel);
+        return rc;
+    }
+
+    pSel->next = CurrentSelections;
+    CurrentSelections = pSel;
+  }
+  else
+      return rc;
+
+  pSel->lastTimeChanged = currentTime;
+  pSel->window = wid;
+  pSel->pWin = pWindow;
+  pSel->client = serverClient;
+
+  LOG_DEBUG("Grabbed %s selection", NameForAtom(selection));
+
+  info.selection = pSel;
+  info.client = serverClient;
+  info.kind = SelectionSetOwner;
+  CallCallbacks(&SelectionCallback, &info);
+
+  return Success;
+}
+
+static int vncConvertSelection(ClientPtr client, Atom selection,
+                               Atom target, Atom property,
+                               Window requestor, TimeStamp time)
+{
+  Selection *pSel;
+  WindowPtr pWin;
+  int rc;
+
+  Atom realProperty;
+
+  xEvent event;
+
+  LOG_DEBUG("Selection request for %s (type %s)",
+            NameForAtom(selection), NameForAtom(target));
+
+  rc = dixLookupSelection(&pSel, selection, client, DixGetAttrAccess);
+  if (rc != Success)
+    return rc;
+
+  if (CompareTimeStamps(time, pSel->lastTimeChanged) != LATER)
+    return BadMatch;
+
+  rc = dixLookupWindow(&pWin, requestor, client, DixSetAttrAccess);
+  if (rc != Success)
+    return rc;
+
+  if (property != None)
+    realProperty = property;
+  else
+    realProperty = target;
+
+  /* FIXME: MULTIPLE target */
+
+  if (target == xaTARGETS) {
+    Atom targets[] = { xaTARGETS, xaTIMESTAMP,
+                       xaSTRING, xaTEXT, xaUTF8_STRING };
+
+    rc = ChangeWindowProperty(pWin, realProperty, XA_ATOM, 32,
+                              PropModeReplace,
+                              sizeof(targets)/sizeof(targets[0]),
+                              targets, TRUE);
+    if (rc != Success)
+      return rc;
+  } else if (target == xaTIMESTAMP) {
+    rc = ChangeWindowProperty(pWin, realProperty, XA_INTEGER, 32,
+                              PropModeReplace, 1,
+                              &pSel->lastTimeChanged.milliseconds,
+                              TRUE);
+    if (rc != Success)
+      return rc;
+  } else if ((target == xaSTRING) || (target == xaTEXT)) {
+    rc = ChangeWindowProperty(pWin, realProperty, XA_STRING, 8,
+                              PropModeReplace, clientCutTextLen,
+                              clientCutText, TRUE);
+    if (rc != Success)
+      return rc;
+  } else if (target == xaUTF8_STRING) {
+    unsigned char* buffer;
+    unsigned char* out;
+    size_t len;
+
+    const unsigned char* in;
+    size_t in_len;
+
+    buffer = malloc(clientCutTextLen*2);
+    if (buffer == NULL)
+      return BadAlloc;
+
+    out = buffer;
+    len = 0;
+    in = clientCutText;
+    in_len = clientCutTextLen;
+    while (in_len > 0) {
+      if (*in & 0x80) {
+        *out++ = 0xc0 | (*in >> 6);
+        *out++ = 0x80 | (*in & 0x3f);
+        len += 2;
+        in++;
+        in_len--;
+      } else {
+        *out++ = *in++;
+        len++;
+        in_len--;
+      }
+    }
+
+    rc = ChangeWindowProperty(pWin, realProperty, xaUTF8_STRING, 8,
+                              PropModeReplace, len, buffer, TRUE);
+    free(buffer);
+    if (rc != Success)
+      return rc;
+  } else {
+    return BadMatch;
+  }
+
+  event.u.u.type = SelectionNotify;
+  event.u.selectionNotify.time = time.milliseconds;
+  event.u.selectionNotify.requestor = requestor;
+  event.u.selectionNotify.selection = selection;
+  event.u.selectionNotify.target = target;
+  event.u.selectionNotify.property = property;
+  WriteEventsToClient(client, 1, &event);
+  return Success;
+}
+
+static int vncProcConvertSelection(ClientPtr client)
+{
+  Bool paramsOkay;
+  WindowPtr pWin;
+  Selection *pSel;
+  int rc;
+
+  REQUEST(xConvertSelectionReq);
+  REQUEST_SIZE_MATCH(xConvertSelectionReq);
+
+  rc = dixLookupWindow(&pWin, stuff->requestor, client, DixSetAttrAccess);
+  if (rc != Success)
+    return rc;
+
+  paramsOkay = ValidAtom(stuff->selection) && ValidAtom(stuff->target);
+  paramsOkay &= (stuff->property == None) || ValidAtom(stuff->property);
+  if (!paramsOkay) {
+    client->errorValue = stuff->property;
+    return BadAtom;
+  }
+
+  rc = dixLookupSelection(&pSel, stuff->selection, client, DixReadAccess);
+  if (rc == Success && pSel->client == serverClient &&
+      pSel->window == wid) {
+    TimeStamp time;
+    time = ClientTimeToServerTime(stuff->time);
+    rc = vncConvertSelection(client, stuff->selection,
+                             stuff->target, stuff->property,
+                             stuff->requestor, time);
+    if (rc != Success) {
+      xEvent event;
+
+      memset(&event, 0, sizeof(xEvent));
+      event.u.u.type = SelectionNotify;
+      event.u.selectionNotify.time = stuff->time;
+      event.u.selectionNotify.requestor = stuff->requestor;
+      event.u.selectionNotify.selection = stuff->selection;
+      event.u.selectionNotify.target = stuff->target;
+      event.u.selectionNotify.property = None;
+      WriteEventsToClient(client, 1, &event);
+    }
+
+    return Success;
+  }
+
+  return origProcConvertSelection(client);
+}
+
+static void vncSelectionRequest(Atom selection, Atom target)
+{
+  Selection *pSel;
+  xEvent event;
+  int rc;
+
+  rc = vncCreateSelectionWindow();
+  if (rc != Success)
+    return;
+
+  LOG_DEBUG("Requesting %s for %s selection",
+            NameForAtom(target), NameForAtom(selection));
+
+  rc = dixLookupSelection(&pSel, selection, serverClient, DixGetAttrAccess);
+  if (rc != Success)
+    return;
+
+  event.u.u.type = SelectionRequest;
+  event.u.selectionRequest.owner = pSel->window;
+  event.u.selectionRequest.time = currentTime.milliseconds;
+  event.u.selectionRequest.requestor = wid;
+  event.u.selectionRequest.selection = selection;
+  event.u.selectionRequest.target = target;
+  event.u.selectionRequest.property = target;
+  WriteEventsToClient(pSel->client, 1, &event);
+}
+
+static Bool vncHasAtom(Atom atom, const Atom list[], size_t size)
+{
+  size_t i;
+
+  for (i = 0;i < size;i++) {
+    if (list[i] == atom)
+      return TRUE;
+  }
+
+  return FALSE;
+}
+
+static void vncHandleSelection(Atom selection, Atom target,
+                               Atom property, Atom requestor,
+                               TimeStamp time)
+{
+  PropertyPtr prop;
+  int rc;
+
+  rc = dixLookupProperty(&prop, pWindow, property,
+                         serverClient, DixReadAccess);
+  if (rc != Success)
+    return;
+
+  LOG_DEBUG("Selection notification for %s (target %s, property %s, type %s)",
+            NameForAtom(selection), NameForAtom(target),
+            NameForAtom(property), NameForAtom(prop->type));
+
+  if (target != property)
+    return;
+
+  if (target == xaTARGETS) {
+    if (prop->format != 32)
+      return;
+    if (prop->type != XA_ATOM)
+      return;
+
+    if (vncHasAtom(xaSTRING, (const Atom*)prop->data, prop->size))
+      vncSelectionRequest(selection, xaSTRING);
+    else if (vncHasAtom(xaUTF8_STRING, (const Atom*)prop->data, prop->size))
+      vncSelectionRequest(selection, xaUTF8_STRING);
+  } else if (target == xaSTRING) {
+    if (prop->format != 8)
+      return;
+    if (prop->type != xaSTRING)
+      return;
+
+    vncServerCutText(prop->data, prop->size);
+  } else if (target == xaUTF8_STRING) {
+    unsigned char* buffer;
+    unsigned char* out;
+    size_t len;
+
+    const unsigned char* in;
+    size_t in_len;
+
+    if (prop->format != 8)
+      return;
+    if (prop->type != xaUTF8_STRING)
+      return;
+
+    buffer = malloc(prop->size);
+    if (buffer == NULL)
+      return;
+
+    out = buffer;
+    len = 0;
+    in = prop->data;
+    in_len = prop->size;
+    while (in_len > 0) {
+      if ((*in & 0x80) == 0x00) {
+        *out++ = *in++;
+        len++;
+        in_len--;
+      } else if ((*in & 0xe0) == 0xc0) {
+        unsigned ucs;
+        ucs = (*in++ & 0x1f) << 6;
+        in_len--;
+        if (in_len > 0) {
+          ucs |= (*in++ & 0x3f);
+          in_len--;
+        }
+        if (ucs <= 0xff)
+          *out++ = ucs;
+        else
+          *out++ = '?';
+        len++;
+      } else {
+        *out++ = '?';
+        len++;
+        do {
+          in++;
+          in_len--;
+        } while ((in_len > 0) && ((*in & 0xc0) == 0x80));
+      }
+    }
+
+    vncServerCutText((const char*)buffer, len);
+
+    free(buffer);
+  }
+}
+
+#define SEND_EVENT_BIT 0x80
+
+static int vncProcSendEvent(ClientPtr client)
+{
+  REQUEST(xSendEventReq);
+  REQUEST_SIZE_MATCH(xSendEventReq);
+
+  stuff->event.u.u.type &= ~(SEND_EVENT_BIT);
+
+  if (stuff->event.u.u.type == SelectionNotify &&
+      stuff->event.u.selectionNotify.requestor == wid) {
+    TimeStamp time;
+    time = ClientTimeToServerTime(stuff->event.u.selectionNotify.time);
+    vncHandleSelection(stuff->event.u.selectionNotify.selection,
+                       stuff->event.u.selectionNotify.target,
+                       stuff->event.u.selectionNotify.property,
+                       stuff->event.u.selectionNotify.requestor,
+                       time);
+  }
+
+  return origProcSendEvent(client);
+}
+
+static void vncSelectionCallback(CallbackListPtr *callbacks,
+                                 void * data, void * args)
+{
+  SelectionInfoRec *info = (SelectionInfoRec *) args;
+
+  if (info->kind != SelectionSetOwner)
+    return;
+  if (info->client == serverClient)
+    return;
+
+  if ((info->selection->selection != xaPRIMARY) &&
+      (info->selection->selection != xaCLIPBOARD))
+    return;
+
+  if ((info->selection->selection == xaPRIMARY) &&
+      !vncGetSendPrimary())
+    return;
+
+  vncSelectionRequest(info->selection->selection, xaTARGETS);
+}
diff --git a/common/rfb/Threading.h b/unix/xserver/hw/vnc/vncSelection.h
similarity index 65%
rename from common/rfb/Threading.h
rename to unix/xserver/hw/vnc/vncSelection.h
index 66b3aa0..969f895 100644
--- a/common/rfb/Threading.h
+++ b/unix/xserver/hw/vnc/vncSelection.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
+/* Copyright 2016 Pierre Ossman for Cendio AB
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -15,17 +15,19 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  * USA.
  */
+#ifndef __SELECTION_H__
+#define __SELECTION_H__
 
-// -=- Threading.h
-// General purpose threading interface.
-// If the current platform supports threading then __RFB_THREADING_IMPL
-// will be defined after this header has been included.
-
-#ifndef __RFB_THREADING_H__
-#define __RFB_THREADING_H__
-
-#ifdef WIN32
-#include <rfb_win32/Threading.h>
+#ifdef __cplusplus
+extern "C" {
 #endif
 
-#endif // __RFB_THREADING_H__
+void vncSelectionInit(void);
+
+void vncClientCutText(const char* str, int len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c
index 5709893..c5b684d 100644
--- a/unix/xserver/hw/vnc/xvnc.c
+++ b/unix/xserver/hw/vnc/xvnc.c
@@ -85,7 +85,7 @@
 #include "version-config.h"
 #include "site.h"
 
-#define XVNCVERSION "TigerVNC 1.6.80"
+#define XVNCVERSION "TigerVNC 1.7.80"
 #define XVNCCOPYRIGHT ("Copyright (C) 1999-2016 TigerVNC Team and many others (see README.txt)\n" \
                        "See http://www.tigervnc.org for information on TigerVNC.\n")
 
@@ -854,6 +854,40 @@
 static Bool
 vfbCursorOffScreen (ScreenPtr *ppScreen, int *x, int *y)
 {
+    int absX, absY;
+    int i;
+
+    if (screenInfo.numScreens == 1)
+        return FALSE;
+
+    if ((*x >= 0) && (*x < (*ppScreen)->width) &&
+        (*y >= 0) && (*y < (*ppScreen)->height))
+        return FALSE;
+
+    absX = *x + (*ppScreen)->x;
+    absY = *y + (*ppScreen)->y;
+
+    for (i = 0;i < screenInfo.numScreens;i++) {
+        ScreenPtr newScreen;
+
+        newScreen = screenInfo.screens[i];
+
+        if (absX < newScreen->x)
+            continue;
+        if (absY < newScreen->y)
+            continue;
+        if (absX >= (newScreen->x + newScreen->width))
+            continue;
+        if (absY >= (newScreen->y + newScreen->height))
+            continue;
+
+        *ppScreen = newScreen;
+        *x = absX - newScreen->x;
+        *y = absY - newScreen->y;
+
+        return TRUE;
+    }
+
     return FALSE;
 }
 
@@ -1456,11 +1490,10 @@
 vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
 #endif
 {
-#if XORG < 113
-    vfbScreenInfoPtr pvfb = &vfbScreens[index];
-#else
-    vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum];
+#if XORG >= 113
+    int index = pScreen->myNum;
 #endif
+    vfbScreenInfoPtr pvfb = &vfbScreens[index];
     int dpi;
     int ret;
     void *pbits;
@@ -1481,13 +1514,8 @@
 
     pbits = vfbAllocateFramebufferMemory(&pvfb->fb);
     if (!pbits) return FALSE;
-#if XORG < 113
     vncFbptr[index] = pbits;
     vncFbstride[index] = pvfb->fb.paddedWidth;
-#else
-    vncFbptr[pScreen->myNum] = pbits;
-    vncFbstride[pScreen->myNum] = pvfb->fb.paddedWidth;
-#endif
 
     miSetPixmapDepths();
 
@@ -1524,6 +1552,12 @@
 	return FALSE;
     }
 
+    if (index > 0) {
+        ScreenPtr prevScreen = screenInfo.screens[index-1];
+        pScreen->x = prevScreen->x + prevScreen->width;
+        pScreen->y = 0;
+    }
+
     ret = fbScreenInit(pScreen, pbits, pvfb->fb.width, pvfb->fb.height,
 		       dpi, dpi, pvfb->fb.paddedWidth, pvfb->fb.bitsPerPixel);
   
diff --git a/vncviewer/vncviewer.man b/vncviewer/vncviewer.man
index 9ee616d..d6a3708 100644
--- a/vncviewer/vncviewer.man
+++ b/vncviewer/vncviewer.man
@@ -280,7 +280,10 @@
 .SH FILES
 .TP
 $HOME/.vnc/default.tigervnc
-Default configuration options.
+Default configuration options. This file must have a "magic" first line of
+"TigerVNC Configuration file Version 1.0" (without quotes), followed by simple
+<setting>=<value> pairs of your choosing. The available settings are those
+shown in this man page.
 .TP
 $HOME/.vnc/x509_ca.pem
 Default CA certificate for authenticating servers.
diff --git a/win/rfb_win32/CMakeLists.txt b/win/rfb_win32/CMakeLists.txt
index 047b0d8..305247a 100644
--- a/win/rfb_win32/CMakeLists.txt
+++ b/win/rfb_win32/CMakeLists.txt
@@ -22,7 +22,6 @@
   SInput.cxx
   SocketManager.cxx
   TCharArray.cxx
-  Threading.cxx
   TsSessions.cxx
   Win32Util.cxx
   WMCursor.cxx
diff --git a/win/rfb_win32/Clipboard.h b/win/rfb_win32/Clipboard.h
index 498f75f..3da7bfc 100644
--- a/win/rfb_win32/Clipboard.h
+++ b/win/rfb_win32/Clipboard.h
@@ -25,7 +25,6 @@
 #define __RFB_WIN32_CLIPBOARD_H__
 
 #include <rfb/SDesktop.h>
-#include <rfb/Threading.h>
 #include <rfb_win32/MsgWindow.h>
 #include <rfb_win32/DeviceFrameBuffer.h>
 
diff --git a/win/rfb_win32/RegConfig.cxx b/win/rfb_win32/RegConfig.cxx
index 30cb310..5c89e78 100644
--- a/win/rfb_win32/RegConfig.cxx
+++ b/win/rfb_win32/RegConfig.cxx
@@ -85,30 +85,29 @@
 }
 
 
-RegConfigThread::RegConfigThread() : Thread("RegConfigThread"), config(&eventMgr) {
+RegConfigThread::RegConfigThread() : config(&eventMgr), thread_id(-1) {
 }
 
 RegConfigThread::~RegConfigThread() {
-  join();
+  PostThreadMessage(thread_id, WM_QUIT, 0, 0);
+  wait();
 }
 
 bool RegConfigThread::start(const HKEY rootKey, const TCHAR* keyname) {
   if (config.setKey(rootKey, keyname)) {
     Thread::start();
+    while (thread_id == (DWORD)-1)
+      Sleep(0);
     return true;
   }
   return false;
 }
 
-void RegConfigThread::run() {
+void RegConfigThread::worker() {
   DWORD result = 0;
   MSG msg;
+  thread_id = GetCurrentThreadId();
   while ((result = eventMgr.getMessage(&msg, 0, 0, 0)) > 0) {}
   if (result < 0)
     throw rdr::SystemException("RegConfigThread failed", GetLastError());
 }
-
-Thread* RegConfigThread::join() {
-  PostThreadMessage(getThreadId(), WM_QUIT, 0, 0);
-  return Thread::join();
-}
diff --git a/win/rfb_win32/RegConfig.h b/win/rfb_win32/RegConfig.h
index e9c01b1..c092090 100644
--- a/win/rfb_win32/RegConfig.h
+++ b/win/rfb_win32/RegConfig.h
@@ -24,7 +24,8 @@
 #ifndef __RFB_WIN32_REG_CONFIG_H__
 #define __RFB_WIN32_REG_CONFIG_H__
 
-#include <rfb/Threading.h>
+#include <os/Thread.h>
+
 #include <rfb/Configuration.h>
 #include <rfb_win32/Registry.h>
 #include <rfb_win32/EventManager.h>
@@ -63,7 +64,7 @@
       RegKey key;
     };
 
-    class RegConfigThread : Thread {
+    class RegConfigThread : os::Thread {
     public:
       RegConfigThread();
       ~RegConfigThread();
@@ -71,10 +72,10 @@
       // Start the thread, reading from the specified key
       bool start(const HKEY rootkey, const TCHAR* keyname);
     protected:
-      void run();
-      Thread* join();
+      virtual void worker();
       EventManager eventMgr;
       RegConfig config;
+      DWORD thread_id;
     };
 
   };
diff --git a/win/rfb_win32/Service.cxx b/win/rfb_win32/Service.cxx
index d054ce4..719c44b 100644
--- a/win/rfb_win32/Service.cxx
+++ b/win/rfb_win32/Service.cxx
@@ -22,7 +22,7 @@
 #include <rfb_win32/MsgWindow.h>
 #include <rfb_win32/ModuleFileName.h>
 #include <rfb_win32/Registry.h>
-#include <rfb/Threading.h>
+#include <rfb_win32/Handle.h>
 #include <logmessages/messages.h>
 #include <rdr/Exception.h>
 #include <rfb/LogWriter.h>
diff --git a/win/rfb_win32/Threading.cxx b/win/rfb_win32/Threading.cxx
deleted file mode 100644
index 5873b58..0000000
--- a/win/rfb_win32/Threading.cxx
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
- * 
- * This 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 software 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 software; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
- * USA.
- */
-
-// -=- Threading.cxx
-// Win32 Threading interface implementation
-
-#include <malloc.h>
-
-#include <rdr/Exception.h>
-#include <rfb/LogWriter.h>
-#include <rfb/util.h>
-#include <rfb_win32/Threading.h>
-
-using namespace rfb;
-
-static LogWriter vlog("Threading");
-
-static DWORD threadStorage = TlsAlloc();
-
-
-inline void logAction(Thread* t, const char* action) {
-  vlog.debug("%-16.16s %s(%p)", action, t->getName(), t);
-}
-
-inline void logError(Thread* t, const char* err) {
-  vlog.error("%-16.16s %s(%p):%s", "failed", t->getName(), t, err);
-}
-
-
-DWORD WINAPI
-Thread::threadProc(LPVOID lpParameter) {
-  Thread* thread = (Thread*) lpParameter;
-  TlsSetValue(threadStorage, thread);
-  logAction(thread, "started");
-  try {
-    thread->run();
-    logAction(thread, "stopped");
-  } catch (rdr::Exception& e) {
-    logError(thread, e.str());
-  }
-  bool deleteThread = false;
-  {
-    Lock l(thread->mutex);
-    thread->state = ThreadStopped;
-    thread->sig->signal();
-    deleteThread = thread->deleteAfterRun;
-  }
-  if (deleteThread)
-    delete thread;
-  return 0;
-}
-
-Thread::Thread(const char* name_) : name(strDup(name_ ? name_ : "Unnamed")), sig(0), deleteAfterRun(false) {
-  sig = new Condition(mutex);
-  cond_event.h = CreateEvent(NULL, TRUE, FALSE, NULL);
-  thread.h = CreateThread(NULL, 0, threadProc, this, CREATE_SUSPENDED, &thread_id);
-  state = ThreadCreated;
-  logAction(this, "created");
-}
-
-Thread::Thread(HANDLE thread_, DWORD thread_id_) : 
-  thread(thread_), thread_id(thread_id_), name(strDup("Native")), sig(0), deleteAfterRun(false) {
-  cond_event.h = CreateEvent(NULL, TRUE, FALSE, NULL);
-  state = ThreadNative;
-  logAction(this, "created");
-}
-
-Thread::~Thread() {
-  logAction(this, "destroying");
-  if (!deleteAfterRun && state != ThreadNative)
-    this->join();
-  if (sig)
-    delete sig;
-  logAction(this, "destroyed");
-}
-
-void
-Thread::run() {
-}
-
-void
-Thread::start() {
-  Lock l(mutex);
-  if (state == ThreadCreated) {
-    state = ThreadStarted;
-    sig->signal();
-    ResumeThread(thread);
-  }
-}
-
-Thread*
-Thread::join() {
-  if (deleteAfterRun)
-    throw rdr::Exception("attempt to join() with deleteAfterRun thread");
-  Lock l(mutex);
-  if (state == ThreadJoined) {
-    logAction(this, "already joined");
-  } else {
-    logAction(this, "joining");
-    while (state == ThreadStarted) {
-      sig->wait();
-      logAction(this, "checking");
-    }
-    state = ThreadJoined;
-    logAction(this, "joined");
-  }
-  return this;
-}
-
-const char*
-Thread::getName() const {
-  return name.buf;
-}
-
-ThreadState
-Thread::getState() const {
-  return state;
-}
-
-unsigned long
-Thread::getThreadId() const {
-  return thread_id;
-}
-
-
-Thread*
-Thread::self() {
-  Thread* thread = (Thread*) TlsGetValue(threadStorage);
-  if (!thread) {
-    // *** memory leak - could use GetExitCodeThread to lazily detect when
-    //     to clean up native thread objects
-    thread = new Thread(GetCurrentThread(), GetCurrentThreadId());
-    TlsSetValue(threadStorage, thread);
-  }
-  return thread;
-}
diff --git a/win/rfb_win32/Threading.h b/win/rfb_win32/Threading.h
deleted file mode 100644
index 70bef41..0000000
--- a/win/rfb_win32/Threading.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
- * 
- * This 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 software 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 software; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
- * USA.
- */
-
-// -=- Threading_win32.h
-// Win32 Threading interface implementation
-
-#ifndef __RFB_THREADING_IMPL_WIN32
-#define __RFB_THREADING_IMPL_WIN32
-
-#define __RFB_THREADING_IMPL WIN32
-
-#include <rfb_win32/Handle.h>
-#include <rfb/util.h>
-#include <rdr/Exception.h>
-//#include <stdio.h>
-
-
-namespace rfb {
-  class Condition;
-
-  class Mutex {
-  public:
-    Mutex() {
-      InitializeCriticalSection(&crit);
-    }
-    ~Mutex() {
-      DeleteCriticalSection(&crit);
-    }
-    friend class Lock;
-    friend class Condition;
-  protected:
-    void enter() {EnterCriticalSection(&crit);}
-    void exit() {LeaveCriticalSection(&crit);}
-    CRITICAL_SECTION crit;
-  };
-
-  class Lock {
-  public:
-    Lock(Mutex& m) : mutex(m) {m.enter();}
-    ~Lock() {mutex.exit();}
-  protected:
-    Mutex& mutex;
-  };
-
-  enum ThreadState {ThreadCreated, ThreadStarted, ThreadStopped, ThreadJoined, ThreadNative};
-
-  class Thread {
-  public:
-    Thread(const char* name_=0);
-    virtual ~Thread();
-
-    virtual void run();
-
-    virtual void start();
-    virtual Thread* join();
-
-    const char* getName() const;
-    ThreadState getState() const;
-
-    // Determines whether the thread should delete itself when run() returns
-    // If you set this, you must NEVER call join()!
-    void setDeleteAfterRun() {deleteAfterRun = true;};
-
-    unsigned long getThreadId() const;
-
-    static Thread* self();
-
-    friend class Condition;
-
-  protected:
-    Thread(HANDLE thread_, DWORD thread_id_);
-    static DWORD WINAPI threadProc(LPVOID lpParameter);
-
-    win32::Handle thread;
-    DWORD thread_id;
-    CharArray name;
-    ThreadState state;
-    Condition* sig;
-    Mutex mutex;
-
-    win32::Handle cond_event;
-	  Thread* cond_next;
-
-    bool deleteAfterRun;
-  };
-
-  class Condition {
-  public:
-    Condition(Mutex& m) : mutex(m), waiting(0) {
-    }
-    ~Condition() {
-    }
-
-    // Wake up the specified number of threads that are waiting
-    // on this Condition, or all of them if -1 is specified.
-    void signal(int howMany=1) {
-      Lock l(cond_lock);
-      while (waiting && howMany!=0) {
-        SetEvent(waiting->cond_event);
-        waiting = waiting->cond_next;
-        if (howMany>0) --howMany;
-      }
-    }
-
-    // NB: Must hold "mutex" to call wait()
-    // Wait until either the Condition is signalled or the timeout
-    // expires.
-    void wait(DWORD timeout=INFINITE) {
-      Thread* self = Thread::self();
-      ResetEvent(self->cond_event);
-      { Lock l(cond_lock);
-        self->cond_next = waiting;
-        waiting = self;
-      }
-      mutex.exit();
-      DWORD result = WaitForSingleObject(self->cond_event, timeout);
-      mutex.enter();
-      if (result == WAIT_TIMEOUT) {
-        Lock l(cond_lock);
-        // Remove this thread from the Condition
-        for (Thread** removeFrom = &waiting; *removeFrom; removeFrom = &(*removeFrom)->cond_next) {
-          if (*removeFrom == self) {
-            *removeFrom = self->cond_next;
-            break;
-          }
-        }
-      } else if (result == WAIT_FAILED) {
-        throw rdr::SystemException("failed to wait on Condition", GetLastError());
-      }
-    }
-    
-  protected:
-    Mutex& mutex;
-    Mutex cond_lock;
-	  Thread* waiting;
-  };
-
-};
-
-#endif // __RFB_THREADING_IMPL
diff --git a/win/rfb_win32/WMHooks.cxx b/win/rfb_win32/WMHooks.cxx
index 0e5e70a..bbc1508 100644
--- a/win/rfb_win32/WMHooks.cxx
+++ b/win/rfb_win32/WMHooks.cxx
@@ -18,11 +18,13 @@
 
 // -=- WMHooks.cxx
 
+#include <os/Mutex.h>
+#include <os/Thread.h>
+
 #include <rfb_win32/WMHooks.h>
 #include <rfb_win32/Service.h>
 #include <rfb_win32/MsgWindow.h>
 #include <rfb_win32/IntervalTimer.h>
-#include <rfb/Threading.h>
 #include <rfb/LogWriter.h>
 
 #include <list>
@@ -108,20 +110,21 @@
 }
 
 
-class WMHooksThread : public Thread {
+class WMHooksThread : public os::Thread {
 public:
-  WMHooksThread() : Thread("WMHookThread"), 
-    active(true) {
-  }
-  virtual void run();
-  virtual Thread* join();
+  WMHooksThread() : active(true), thread_id(-1) { }
+  void stop();
+  DWORD getThreadId() { return thread_id; }
+protected:
+  virtual void worker();
 protected:
   bool active;
+  DWORD thread_id;
 };
 
 static WMHooksThread* hook_mgr = 0;
 static std::list<WMHooks*> hooks;
-static Mutex hook_mgr_lock;
+static os::Mutex hook_mgr_lock;
 
 
 static bool StartHookThread() {
@@ -131,15 +134,17 @@
     return false;
   vlog.debug("creating thread");
   hook_mgr = new WMHooksThread();
+  hook_mgr->start();
+  while (hook_mgr->getThreadId() == (DWORD)-1)
+    Sleep(0);
   vlog.debug("installing hooks");
   if (!WM_Hooks_Install(hook_mgr->getThreadId(), 0)) {
     vlog.error("failed to initialise hooks");
-    delete hook_mgr->join();
+    hook_mgr->stop();
+    delete hook_mgr;
     hook_mgr = 0;
     return false;
   }
-  vlog.debug("starting thread");
-  hook_mgr->start();
   return true;
 }
 
@@ -149,14 +154,15 @@
   if (!hooks.empty())
     return;
   vlog.debug("closing thread");
-  delete hook_mgr->join();
+  hook_mgr->stop();
+  delete hook_mgr;
   hook_mgr = 0;
 }
 
 
 static bool AddHook(WMHooks* hook) {
   vlog.debug("adding hook");
-  Lock l(hook_mgr_lock);
+  os::AutoMutex a(&hook_mgr_lock);
   if (!StartHookThread())
     return false;
   hooks.push_back(hook);
@@ -166,7 +172,7 @@
 static bool RemHook(WMHooks* hook) {
   {
     vlog.debug("removing hook");
-    Lock l(hook_mgr_lock);
+    os::AutoMutex a(&hook_mgr_lock);
     hooks.remove(hook);
   }
   StopHookThread();
@@ -174,7 +180,7 @@
 }
 
 static void NotifyHooksRegion(const Region& r) {
-  Lock l(hook_mgr_lock);
+  os::AutoMutex a(&hook_mgr_lock);
   std::list<WMHooks*>::iterator i;
   for (i=hooks.begin(); i!=hooks.end(); i++)
     (*i)->NotifyHooksRegion(r);
@@ -182,7 +188,7 @@
 
 
 void
-WMHooksThread::run() {
+WMHooksThread::worker() {
   // Obtain message ids for all supported hook messages
   UINT windowMsg = WM_Hooks_WindowChanged();
   UINT clientAreaMsg = WM_Hooks_WindowClientAreaChanged();
@@ -208,6 +214,8 @@
 
   vlog.debug("starting hook thread");
 
+  thread_id = GetCurrentThreadId();
+
   while (active && GetMessage(&msg, NULL, 0, 0)) {
     count++;
 
@@ -283,13 +291,13 @@
   WM_Hooks_Remove(getThreadId());
 }
 
-Thread*
-WMHooksThread::join() {
+void
+WMHooksThread::stop() {
   vlog.debug("stopping WMHooks thread");
   active = false;
   PostThreadMessage(thread_id, WM_QUIT, 0, 0);
-  vlog.debug("joining WMHooks thread");
-  return Thread::join();
+  vlog.debug("waiting for WMHooks thread");
+  wait();
 }
 
 // -=- WMHooks class
@@ -311,7 +319,7 @@
 
 bool rfb::win32::WMHooks::getUpdates(UpdateTracker* ut) {
   if (!updatesReady) return false;
-  Lock l(hook_mgr_lock);
+  os::AutoMutex a(&hook_mgr_lock);
   updates.copyTo(ut);
   updates.clear();
   updatesReady = false;
@@ -363,12 +371,12 @@
   return block_ == blocking;
 }
 
-Mutex blockMutex;
-int blockCount = 0;
+static os::Mutex blockMutex;
+static int blockCount = 0;
 
 bool rfb::win32::WMBlockInput::blockInputs(bool on) {
   if (active == on) return true;
-  Lock l(blockMutex);
+  os::AutoMutex a(&blockMutex);
   int newCount = on ? blockCount+1 : blockCount-1;
   if (!blockRealInputs(newCount > 0))
     return false;
diff --git a/win/rfb_win32/WMNotifier.h b/win/rfb_win32/WMNotifier.h
index ada45d0..3855430 100644
--- a/win/rfb_win32/WMNotifier.h
+++ b/win/rfb_win32/WMNotifier.h
@@ -28,7 +28,6 @@
 #define __RFB_WIN32_NOTIFIER_H__
 
 #include <rfb/SDesktop.h>
-#include <rfb/Threading.h>
 #include <rfb_win32/MsgWindow.h>
 #include <rfb_win32/DeviceFrameBuffer.h>
 #include <rfb_win32/SInput.h>
diff --git a/win/winvnc/QueryConnectDialog.cxx b/win/winvnc/QueryConnectDialog.cxx
index 8e50696..103621e 100644
--- a/win/winvnc/QueryConnectDialog.cxx
+++ b/win/winvnc/QueryConnectDialog.cxx
@@ -41,7 +41,7 @@
 QueryConnectDialog::QueryConnectDialog(network::Socket* sock_,
                                        const char* userName_,
                                        VNCServerWin32* s)
-: Thread("QueryConnectDialog"), Dialog(GetModuleHandle(0)),
+: Dialog(GetModuleHandle(0)),
   sock(sock_), approve(false), server(s) {
   peerIp.buf = sock->getPeerAddress();
   userName.buf = strDup(userName_);
@@ -54,7 +54,7 @@
 
 // - Thread overrides
 
-void QueryConnectDialog::run() {
+void QueryConnectDialog::worker() {
   countdown = timeout;
   try {
     if (desktopChangeRequired() && !changeDesktop())
diff --git a/win/winvnc/QueryConnectDialog.h b/win/winvnc/QueryConnectDialog.h
index b28de19..de5e31e 100644
--- a/win/winvnc/QueryConnectDialog.h
+++ b/win/winvnc/QueryConnectDialog.h
@@ -21,24 +21,26 @@
 #ifndef __WINVNC_QUERY_CONNECT_DIALOG_H__
 #define __WINVNC_QUERY_CONNECT_DIALOG_H__
 
-#include <rfb/Threading.h>
 #include <rfb_win32/Dialog.h>
 #include <rfb/util.h>
 
+namespace os { class Thread; }
+
 namespace network { class Socket; }
 
 namespace winvnc {
 
   class VNCServerWin32;
 
-  class QueryConnectDialog : public rfb::Thread, rfb::win32::Dialog {
+  class QueryConnectDialog : public os::Thread, rfb::win32::Dialog {
   public:
     QueryConnectDialog(network::Socket* sock, const char* userName, VNCServerWin32* s);
     virtual void startDialog();
-    virtual void run();
     network::Socket* getSock() {return sock;}
     bool isAccepted() const {return approve;}
   protected:
+    // Thread methods
+    virtual void worker();
 
     // Dialog methods (protected)
     virtual void initDialog();
diff --git a/win/winvnc/STrayIcon.cxx b/win/winvnc/STrayIcon.cxx
index 762a56a..05a38d6 100644
--- a/win/winvnc/STrayIcon.cxx
+++ b/win/winvnc/STrayIcon.cxx
@@ -22,14 +22,19 @@
 #include <winvnc/VNCServerService.h>
 #include <winvnc/resource.h>
 
+#include <os/Mutex.h>
+#include <os/Thread.h>
+
 #include <rfb/LogWriter.h>
 #include <rfb/Configuration.h>
+
 #include <rfb_win32/LaunchProcess.h>
 #include <rfb_win32/TrayIcon.h>
 #include <rfb_win32/AboutDialog.h>
 #include <rfb_win32/MsgBox.h>
 #include <rfb_win32/Service.h>
 #include <rfb_win32/CurrentUser.h>
+
 #include <winvnc/ControlPanel.h>
 
 using namespace rfb;
@@ -209,7 +214,7 @@
 
     case WM_SET_TOOLTIP:
       {
-        rfb::Lock l(thread.lock);
+        os::AutoMutex a(thread.lock);
         if (thread.toolTip.buf)
           setToolTip(thread.toolTip.buf);
       }
@@ -231,15 +236,24 @@
 
 STrayIconThread::STrayIconThread(VNCServerWin32& sm, UINT inactiveIcon_, UINT activeIcon_, 
                                  UINT dis_inactiveIcon_, UINT dis_activeIcon_, UINT menu_)
-: Thread("TrayIcon"), windowHandle(0), server(sm),
+: thread_id(-1), windowHandle(0), server(sm),
   inactiveIcon(inactiveIcon_), activeIcon(activeIcon_),
   dis_inactiveIcon(dis_inactiveIcon_), dis_activeIcon(dis_activeIcon_),
   menu(menu_), runTrayIcon(true) {
+  lock = new os::Mutex;
   start();
+  while (thread_id == (DWORD)-1)
+    Sleep(0);
 }
 
+STrayIconThread::~STrayIconThread() {
+  runTrayIcon = false;
+  PostThreadMessage(thread_id, WM_QUIT, 0, 0);
+  delete lock;
+}
 
-void STrayIconThread::run() {
+void STrayIconThread::worker() {
+  thread_id = GetCurrentThreadId();
   while (runTrayIcon) {
     if (rfb::win32::desktopChangeRequired() && 
       !rfb::win32::changeDesktop())
@@ -260,7 +274,7 @@
 
 void STrayIconThread::setToolTip(const TCHAR* text) {
   if (!windowHandle) return;
-  Lock l(lock);
+  os::AutoMutex a(lock);
   delete [] toolTip.buf;
   toolTip.buf = tstrDup(text);
   PostMessage(windowHandle, WM_SET_TOOLTIP, 0, 0);
diff --git a/win/winvnc/STrayIcon.h b/win/winvnc/STrayIcon.h
index 309d3f4..0906636 100644
--- a/win/winvnc/STrayIcon.h
+++ b/win/winvnc/STrayIcon.h
@@ -22,20 +22,19 @@
 #include <winvnc/VNCServerWin32.h>
 #include <rfb_win32/TCharArray.h>
 #include <rfb/Configuration.h>
-#include <rfb/Threading.h>
+
+namespace os {
+  class Mutex;
+  class Thread;
+}
 
 namespace winvnc {
 
-  class STrayIconThread : rfb::Thread {
+  class STrayIconThread : os::Thread {
   public:
     STrayIconThread(VNCServerWin32& sm, UINT inactiveIcon,
       UINT activeIcon, UINT dis_inactiveIcon, UINT dis_activeIcon, UINT menu);
-    virtual ~STrayIconThread() {
-      runTrayIcon = false;
-      PostThreadMessage(getThreadId(), WM_QUIT, 0, 0);
-    }
-
-    virtual void run();
+    virtual ~STrayIconThread();
 
     void setToolTip(const TCHAR* text);
 
@@ -44,7 +43,10 @@
 
     friend class STrayIcon;
   protected:
-    rfb::Mutex lock;
+    virtual void worker();
+
+    os::Mutex* lock;
+    DWORD thread_id;
     HWND windowHandle;
     rfb::TCharArray toolTip;
     VNCServerWin32& server;
diff --git a/win/winvnc/VNCServerWin32.cxx b/win/winvnc/VNCServerWin32.cxx
index 27aea9f..d86384d 100644
--- a/win/winvnc/VNCServerWin32.cxx
+++ b/win/winvnc/VNCServerWin32.cxx
@@ -21,9 +21,13 @@
 #include <winvnc/VNCServerWin32.h>
 #include <winvnc/resource.h>
 #include <winvnc/STrayIcon.h>
+
+#include <os/Mutex.h>
+
 #include <rfb_win32/ComputerName.h>
 #include <rfb_win32/CurrentUser.h>
 #include <rfb_win32/Service.h>
+
 #include <rfb/Hostname.h>
 #include <rfb/LogWriter.h>
 
@@ -53,16 +57,21 @@
 
 
 VNCServerWin32::VNCServerWin32()
-  : command(NoCommand), commandSig(commandLock),
+  : command(NoCommand),
     commandEvent(CreateEvent(0, TRUE, FALSE, 0)),
     sessionEvent(isServiceProcess() ?
       CreateEvent(0, FALSE, FALSE, "Global\\SessionEventTigerVNC") : 0),
     vncServer(CStr(ComputerName().buf), &desktop),
-    hostThread(0), runServer(false), isDesktopStarted(false),
+    thread_id(-1), runServer(false), isDesktopStarted(false),
     httpServer(&vncServer), config(&sockMgr),
     rfbSock(&sockMgr), httpSock(&sockMgr), trayIcon(0),
     queryConnectDialog(0)
 {
+  commandLock = new os::Mutex;
+  commandSig = new os::Condition(commandLock);
+
+  runLock = new os::Mutex;
+
   // Initialise the desktop
   desktop.setStatusLocation(&isDesktopStarted);
 
@@ -85,8 +94,15 @@
   desktop.setStatusLocation(0);
 
   // Join the Accept/Reject dialog thread
-  if (queryConnectDialog)
-    delete queryConnectDialog->join();
+  if (queryConnectDialog) {
+    queryConnectDialog->wait();
+    delete queryConnectDialog;
+  }
+
+  delete runLock;
+
+  delete commandSig;
+  delete commandLock;
 }
 
 
@@ -149,8 +165,9 @@
 
 
 int VNCServerWin32::run() {
-  { Lock l(runLock);
-    hostThread = Thread::self();
+  {
+    os::AutoMutex a(runLock);
+    thread_id = GetCurrentThreadId();
     runServer = true;
   }
 
@@ -195,19 +212,20 @@
     vlog.error("%s", e.str());
   }
 
-  { Lock l(runLock);
+  {
+    os::AutoMutex a(runLock);
     runServer = false;
-    hostThread = 0;
+    thread_id = (DWORD)-1;
   }
 
   return result;
 }
 
 void VNCServerWin32::stop() {
-  Lock l(runLock);
+  os::AutoMutex a(runLock);
   runServer = false;
-  if (hostThread)
-    PostThreadMessage(hostThread->getThreadId(), WM_QUIT, 0, 0);
+  if (thread_id != (DWORD)-1)
+    PostThreadMessage(thread_id, WM_QUIT, 0, 0);
 }
 
 
@@ -261,17 +279,17 @@
 
 
 bool VNCServerWin32::queueCommand(Command cmd, const void* data, int len, bool wait) {
-  Lock l(commandLock);
+  os::AutoMutex a(commandLock);
   while (command != NoCommand)
-    commandSig.wait();
+    commandSig->wait();
   command = cmd;
   commandData = data;
   commandDataLen = len;
   SetEvent(commandEvent);
   if (wait) {
     while (command != NoCommand)
-      commandSig.wait();
-    commandSig.signal();
+      commandSig->wait();
+    commandSig->signal();
   }
   return true;
 }
@@ -282,7 +300,7 @@
   if (event_ == commandEvent.h) {
     // If there is no command queued then return immediately
     {
-      Lock l(commandLock);
+      os::AutoMutex a(commandLock);
       if (command == NoCommand)
         return;
     }
@@ -312,7 +330,8 @@
       vncServer.approveConnection(queryConnectDialog->getSock(),
                                   queryConnectDialog->isAccepted(),
                                   "Connection rejected by user");
-      delete queryConnectDialog->join();
+      queryConnectDialog->wait();
+      delete queryConnectDialog;
       queryConnectDialog = 0;
       break;
 
@@ -322,9 +341,9 @@
 
     // Clear the command and signal completion
     {
-      Lock l(commandLock);
+      os::AutoMutex a(commandLock);
       command = NoCommand;
-      commandSig.signal();
+      commandSig->signal();
     }
   } else if (event_ == sessionEvent.h) {
     stop();
diff --git a/win/winvnc/VNCServerWin32.h b/win/winvnc/VNCServerWin32.h
index b85814a..225e634 100644
--- a/win/winvnc/VNCServerWin32.h
+++ b/win/winvnc/VNCServerWin32.h
@@ -30,6 +30,12 @@
 #include <winvnc/JavaViewer.h>
 #include <winvnc/ManagedListener.h>
 
+namespace os {
+    class Mutex;
+    class Condition;
+    class Thread;
+}
+
 namespace winvnc {
 
   class STrayIconThread;
@@ -99,16 +105,16 @@
     Command command;
     const void* commandData;
     int commandDataLen;
-    rfb::Mutex commandLock;
-    rfb::Condition commandSig;
+    os::Mutex* commandLock;
+    os::Condition* commandSig;
     rfb::win32::Handle commandEvent;
     rfb::win32::Handle sessionEvent;
 
     // VNCServerWin32 Server-internal state
     rfb::win32::SDisplay desktop;
     rfb::VNCServerST vncServer;
-    rfb::Mutex runLock;
-    rfb::Thread* hostThread;
+    os::Mutex* runLock;
+    DWORD thread_id;
     bool runServer;
     bool isDesktopStarted;
     JavaViewerServer httpServer;
diff --git a/win/winvnc/winvnc.cxx b/win/winvnc/winvnc.cxx
index ff16aac..aa41bcb 100644
--- a/win/winvnc/winvnc.cxx
+++ b/win/winvnc/winvnc.cxx
@@ -168,6 +168,19 @@
         runServer = false;
         int j = i;
         i = argc;
+
+        // Try to clean up earlier services we've had
+        try {
+          rfb::win32::unregisterService("WinVNC4");
+        } catch (rdr::SystemException) {
+          // Do nothing as we might fail simply because there was no
+          // service to remove
+        }
+        try {
+          rfb::win32::unregisterService("TigerVNC Server");
+        } catch (rdr::SystemException) {
+        }
+
         if (rfb::win32::registerService(VNCServerService::Name,
                                         _T("TigerVNC Server"),
                                         _T("Provides remote access to this machine via the VNC/RFB protocol."),