diff --git a/unix/vncviewer/CConn.cxx b/unix/vncviewer/CConn.cxx
index 53d5ed3..db36489 100644
--- a/unix/vncviewer/CConn.cxx
+++ b/unix/vncviewer/CConn.cxx
@@ -670,39 +670,51 @@
   }
 }
 
-// Note: The method below is duplicated in vncviewer/cview.cxx!
+// Note: The method below is duplicated in win/vncviewer/CConn.cxx!
 
 // autoSelectFormatAndEncoding() chooses the format and encoding appropriate
 // to the connection speed:
 //
-//   Above 16Mbps (timing for at least a second), switch to hextile
-//   Otherwise, switch to ZRLE
+//   First we wait for at least one second of bandwidth measurement.
 //
-//   Above 256Kbps, use full colour mode
+//   Above 16Mbps (i.e. LAN), we choose the second highest JPEG quality,
+//   which should be perceptually lossless.
+//
+//   If the bandwidth is below that, we choose a more lossy JPEG quality.
+//
+//   If the bandwidth drops below 256 Kbps, we switch to palette mode.
+//
+//   Note: The system here is fairly arbitrary and should be replaced
+//         with something more intelligent at the server end.
 //
 void CConn::autoSelectFormatAndEncoding()
 {
   int kbitsPerSecond = sock->inStream().kbitsPerSecond();
-  unsigned int newEncoding = currentEncoding;
-  bool newFullColour = fullColour;
   unsigned int timeWaited = sock->inStream().timeWaited();
+  bool newFullColour = fullColour;
+  int newQualityLevel = qualityLevel;
 
-  // Select best encoding
-  if (kbitsPerSecond > 16000 && timeWaited >= 10000) {
-    newEncoding = encodingHextile;
-  } else {
-    newEncoding = encodingZRLE;
-  }
+  // Always use Tight
+  currentEncoding = encodingTight;
 
-  if (newEncoding != currentEncoding) {
-    vlog.info("Throughput %d kbit/s - changing to %s encoding",
-              kbitsPerSecond, encodingName(newEncoding));
-    currentEncoding = newEncoding;
-    encodingChange = true;
-  }
-
-  if (kbitsPerSecond == 0) {
+  // Check that we have a decent bandwidth measurement
+  if ((kbitsPerSecond == 0) || (timeWaited < 10000))
     return;
+
+  // Select appropriate quality level
+  if (!noJpeg) {
+    if (kbitsPerSecond > 16000)
+      newQualityLevel = 8;
+    else
+      newQualityLevel = 6;
+
+    if (newQualityLevel != qualityLevel) {
+      vlog.info("Throughput %d kbit/s - changing to quality %d ",
+                kbitsPerSecond, newQualityLevel);
+      cp.qualityLevel = newQualityLevel;
+      qualityLevel.setParam(newQualityLevel);
+      encodingChange = true;
+    }
   }
 
   if (cp.beforeVersion(3, 8)) {
diff --git a/unix/vncviewer/OptionsDialog.h b/unix/vncviewer/OptionsDialog.h
index 68ce8d6..44b662c 100644
--- a/unix/vncviewer/OptionsDialog.h
+++ b/unix/vncviewer/OptionsDialog.h
@@ -145,7 +145,7 @@
     sendPrimary.disabled(!sendClipboard.checked());
     dotWhenNoCursor.disabled(!useLocalCursor.checked());
     compressLevel.disabled(!customCompressLevel.checked());
-    qualityLevel.disabled(!noJpeg.checked());
+    qualityLevel.disabled(autoSelect.checked() || !noJpeg.checked());
   }
 
   virtual void takeFocus(Time time) {
@@ -171,6 +171,7 @@
       mediumColour.disabled(autoSelect.checked());
       lowColour.disabled(autoSelect.checked());
       veryLowColour.disabled(autoSelect.checked());
+      qualityLevel.disabled(autoSelect.checked() || !noJpeg.checked());
     } else if (checkbox == &fullColour || checkbox == &mediumColour ||
                checkbox == &lowColour || checkbox == &veryLowColour) {
       fullColour.checked(checkbox == &fullColour);
@@ -189,7 +190,7 @@
     } else if (checkbox == &customCompressLevel) {
       compressLevel.disabled(!customCompressLevel.checked());
     } else if (checkbox == &noJpeg) {
-      qualityLevel.disabled(!noJpeg.checked());
+      qualityLevel.disabled(autoSelect.checked() || !noJpeg.checked());
     }
   }
 
