diff --git a/java/src/com/tigervnc/vncviewer/RfbProto.java b/java/src/com/tigervnc/vncviewer/RfbProto.java
index dc7aa2e..ab3c152 100644
--- a/java/src/com/tigervnc/vncviewer/RfbProto.java
+++ b/java/src/com/tigervnc/vncviewer/RfbProto.java
@@ -391,7 +391,8 @@
 
     // Find first supported security type.
     for (int i = 0; i < nSecTypes; i++) {
-      if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth) {
+      if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth
+	   || secTypes[i] == SecTypeVeNCrypt) {
 	secType = secTypes[i];
 	break;
       }
@@ -406,6 +407,36 @@
     return secType;
   }
 
+    int authenticateVeNCrypt() throws Exception {
+	int majorVersion = readU8();
+	int minorVersion = readU8();
+	int Version = (majorVersion << 8) | minorVersion;
+	if (Version < 0x0002) {
+	    os.write(0);
+	    os.write(0);
+	    throw new Exception("Server reported an unsupported VeNCrypt version");
+	}
+	os.write(0);
+	os.write(2);
+	if (readU8() != 0)
+	    throw new Exception("Server reported it could not support the VeNCrypt version");
+	int nSecTypes = readU8();
+	int[] secTypes = new int[nSecTypes];
+	for(int i = 0; i < nSecTypes; i++)
+	    secTypes[i] = readU32();
+
+	for(int i = 0; i < nSecTypes; i++)
+	    switch(secTypes[i])
+		{
+		case SecTypeNone:
+		case SecTypeVncAuth:
+		    writeInt(secTypes[i]);
+		    return secTypes[i];
+		}
+
+	throw new Exception("No valid VeNCrypt sub-type");
+    }
+
   //
   // Perform "no authentication".
   //
diff --git a/java/src/com/tigervnc/vncviewer/VncViewer.java b/java/src/com/tigervnc/vncviewer/VncViewer.java
index 3c527ba..711b1c9 100644
--- a/java/src/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/src/com/tigervnc/vncviewer/VncViewer.java
@@ -361,25 +361,34 @@
       authType = secType;
     }
 
-    switch (authType) {
-    case RfbProto.AuthNone:
-      showConnectionStatus("No authentication needed");
-      rfb.authenticateNone();
-      break;
-    case RfbProto.AuthVNC:
-      showConnectionStatus("Performing standard VNC authentication");
-      if (passwordParam != null) {
-        rfb.authenticateVNC(passwordParam);
-      } else {
-        String pw = askPassword();
-        rfb.authenticateVNC(pw);
-      }
-      break;
-    default:
-      throw new Exception("Unknown authentication scheme " + authType);
-    }
+    doAuthentification(authType);
   }
 
+    void doAuthentification(int secType) throws Exception {
+	switch (secType) {
+	case RfbProto.SecTypeNone:
+	    showConnectionStatus("No authentication needed");
+	    rfb.authenticateNone();
+	    break;
+	case RfbProto.SecTypeVncAuth:
+	    showConnectionStatus("Performing standard VNC authentication");
+	    if (passwordParam != null) {
+		rfb.authenticateVNC(passwordParam);
+	    } else {
+		String pw = askPassword();
+		rfb.authenticateVNC(pw);
+	    }
+	    break;
+	case RfbProto.SecTypeVeNCrypt:
+	    showConnectionStatus("VeNCrypt chooser");
+	    secType = rfb.authenticateVeNCrypt();
+	    doAuthentification(secType);
+	    break;
+	default:
+	    throw new Exception("Unknown authentication scheme " + secType);
+	}
+    }
+
 
   //
   // Show a message describing the connection status.
