Fix for issue #455
diff --git a/java/com/tigervnc/vncviewer/OptionsDialog.java b/java/com/tigervnc/vncviewer/OptionsDialog.java
index a7c8778..186c1fc 100644
--- a/java/com/tigervnc/vncviewer/OptionsDialog.java
+++ b/java/com/tigervnc/vncviewer/OptionsDialog.java
@@ -616,6 +616,8 @@
       String sshPort = viaPortInput.getText();
       String viaStr = sshUser.concat("@").concat(sshHost).concat(":").concat(sshPort);
       via.setParam(viaStr);
+    } else {
+      via.setParam("");
     }
     extSSH.setParam(extSSHCheckbox.isSelected());
     if (!sshClientInput.getText().isEmpty())
diff --git a/java/com/tigervnc/vncviewer/Tunnel.java b/java/com/tigervnc/vncviewer/Tunnel.java
index 8d083f8..2e19160 100644
--- a/java/com/tigervnc/vncviewer/Tunnel.java
+++ b/java/com/tigervnc/vncviewer/Tunnel.java
@@ -58,17 +58,16 @@
     String remoteHost;
 
     remotePort = cc.getServerPort();
-    if (tunnel.getValue() && via.getValue().isEmpty()) {
-      gatewayHost = cc.getServerName();
-      remoteHost = "localhost";
-    } else {
+    gatewayHost = cc.getServerName();
+    remoteHost = "localhost";
+    if (!via.getValue().isEmpty()) {
       gatewayHost = getSshHost();
       remoteHost = cc.getServerName();
     }
 
     String pattern = extSSHArgs.getValue();
     if (pattern == null || pattern.isEmpty()) {
-      if (tunnel.getValue())
+      if (tunnel.getValue() && via.getValue().isEmpty())
         pattern = System.getProperty("VNC_TUNNEL_CMD");
       else
         pattern = System.getProperty("VNC_VIA_CMD");
@@ -207,7 +206,7 @@
                                       int remotePort, int localPort,
                                       String pattern) throws Exception {
     if (pattern == null || pattern.length() < 1) {
-      if (tunnel.getValue())
+      if (tunnel.getValue() && via.getValue().isEmpty())
         pattern = DEFAULT_TUNNEL_TEMPLATE;
       else
         pattern = DEFAULT_VIA_TEMPLATE;
@@ -240,7 +239,7 @@
       if (pattern.charAt(i) == '%') {
         switch (pattern.charAt(++i)) {
         case 'H':
-          cmd += (tunnel.getValue() ? gatewayHost : remoteHost);
+          cmd += remoteHost;
   	      H_found = true;
           continue;
         case 'G':