diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index fcad405..af84226 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -46,7 +46,7 @@
     supportsLEDState(false),
     is(0), os(0), reader_(0), writer_(0),
     shared(false),
-    state_(RFBSTATE_UNINITIALISED), useProtocol3_3(false),
+    state_(RFBSTATE_UNINITIALISED),
     pendingPFChange(false), preferredEncoding(encodingTight),
     compressLevel(2), qualityLevel(-1),
     formatChange(false), encodingChange(false),
@@ -173,7 +173,7 @@
     state_ = RFBSTATE_INVALID;
     throw Exception("Server gave unsupported RFB protocol version %d.%d",
                     server.majorVersion, server.minorVersion);
-  } else if (useProtocol3_3 || server.beforeVersion(3,7)) {
+  } else if (server.beforeVersion(3,7)) {
     server.setVersion(3,3);
   } else if (server.afterVersion(3,8)) {
     server.setVersion(3,8);
diff --git a/common/rfb/CConnection.h b/common/rfb/CConnection.h
index 5a3ef91..66a71a2 100644
--- a/common/rfb/CConnection.h
+++ b/common/rfb/CConnection.h
@@ -62,10 +62,6 @@
     // server upon initialisation.
     void setShared(bool s) { shared = s; }
 
-    // setProtocol3_3 configures whether or not the CConnection should
-    // only ever support protocol version 3.3
-    void setProtocol3_3(bool s) {useProtocol3_3 = s;}
-
     // setFramebuffer configures the PixelBuffer that the CConnection
     // should render all pixel data in to. Note that the CConnection
     // takes ownership of the PixelBuffer and it must not be deleted by
@@ -225,8 +221,6 @@
 
     CharArray serverName;
 
-    bool useProtocol3_3;
-
     bool pendingPFChange;
     rfb::PixelFormat pendingPF;
 
diff --git a/java/com/tigervnc/rfb/CConnection.java b/java/com/tigervnc/rfb/CConnection.java
index c9b6b89..17c4752 100644
--- a/java/com/tigervnc/rfb/CConnection.java
+++ b/java/com/tigervnc/rfb/CConnection.java
@@ -35,7 +35,7 @@
     super();
     csecurity = null; is = null; os = null; reader_ = null; writer_ = null;
     shared = false;
-    state_ = RFBSTATE_UNINITIALISED; useProtocol3_3 = false;
+    state_ = RFBSTATE_UNINITIALISED;
     framebuffer = null; decoder = new DecodeManager(this);
     security = new SecurityClient();
   }
@@ -54,10 +54,6 @@
   // server upon initialisation.
   public final void setShared(boolean s) { shared = s; }
 
-  // setProtocol3_3 configures whether or not the CConnection should
-  // only ever support protocol version 3.3
-  public final void setProtocol3_3(boolean s) { useProtocol3_3 = s; }
-
   // setStreams() sets the streams to be used for the connection.  These must
   // be set before initialiseProtocol() and processMsg() are called.  The
   // CSecurity object may call setStreams() again to provide alternative
@@ -161,7 +157,7 @@
       vlog.error(msg);
       state_ = RFBSTATE_INVALID;
       throw new Exception(msg);
-    } else if (useProtocol3_3 || cp.beforeVersion(3,7)) {
+    } else if (cp.beforeVersion(3,7)) {
       cp.setVersion(3,3);
     } else if (cp.afterVersion(3,8)) {
       cp.setVersion(3,8);
@@ -452,8 +448,6 @@
 
   private String serverName;
 
-  private boolean useProtocol3_3;
-
   protected ModifiablePixelBuffer framebuffer;
   private DecodeManager decoder;
 
