diff --git a/java/com/tigervnc/vncviewer/ClipboardDialog.java b/java/com/tigervnc/vncviewer/ClipboardDialog.java
index d6e2525..2c9b7d0 100644
--- a/java/com/tigervnc/vncviewer/ClipboardDialog.java
+++ b/java/com/tigervnc/vncviewer/ClipboardDialog.java
@@ -57,15 +57,12 @@
     pack();
   }
 
-  public void initDialog() {
-    textArea.setText(current);
-    textArea.selectAll();
+  public void setContents(String str) {
+    textArea.setText(str);
   }
 
-  public void setContents(String str) {
-    current = str;
-    textArea.setText(str);
-    textArea.selectAll();
+  public String getContents() {
+    return textArea.getText();
   }
 
   public void serverCutText(String str, int len) {
@@ -77,13 +74,13 @@
       if (cb != null) {
         StringSelection ss = new StringSelection(str);
         try {
-          cb.setContents(ss, ss);
+          cb.setContents(ss, null);
         } catch(Exception e) {
-          vlog.debug(e.toString());
+          vlog.debug(e.getMessage());
         }
       }
     } catch(SecurityException e) {
-      System.err.println("Cannot access the system clipboard");
+      vlog.debug("Cannot access the system clipboard: "+e.getMessage());
     }
   }
 
@@ -94,11 +91,9 @@
   public void actionPerformed(ActionEvent e) {
     Object s = e.getSource();
     if (s instanceof JButton && (JButton)s == clearButton) {
-      current = "";
-      textArea.setText(current);
+      serverCutText(new String(""), 0);
     } else if (s instanceof JButton && (JButton)s == sendButton) {
-      current = textArea.getText();
-      cc.writeClientCutText(current, current.length());
+      cc.writeClientCutText(textArea.getText(), textArea.getText().length());
       endDialog();
     } else if (s instanceof JButton && (JButton)s == cancelButton) {
       endDialog();
@@ -106,7 +101,6 @@
   }
 
   CConn cc;
-  String current;
   JTextArea textArea;
   JButton clearButton, sendButton, cancelButton;
   static LogWriter vlog = new LogWriter("ClipboardDialog");
diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java
index 3657b03..e1d242a 100644
--- a/java/com/tigervnc/vncviewer/DesktopWindow.java
+++ b/java/com/tigervnc/vncviewer/DesktopWindow.java
@@ -357,30 +357,33 @@
     g2.dispose();
   }
 
-  String oldContents = "";
-
   public synchronized void checkClipboard() {
     SecurityManager sm = System.getSecurityManager();
     try {
       if (sm != null) sm.checkSystemClipboardAccess();
       Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
-      if (cb != null && cc.viewer.sendClipboard.getValue()) {
-        Transferable t = cb.getContents(null);
-        if ((t != null) && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-          try {
-            String newContents = (String)t.getTransferData(DataFlavor.stringFlavor);
-            if (newContents != null && !newContents.equals(oldContents)) {
-              cc.writeClientCutText(newContents, newContents.length());
-              oldContents = newContents;
-              cc.clipboardDialog.setContents(newContents);
-            }
-          } catch(java.lang.Exception e) {
-            System.out.println("Exception getting clipboard data: " + e.getMessage());
+      if (cb == null) return;
+      Transferable t = cb.getContents(null);
+      if ((t != null) && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+        try {
+          String newContents = new String("");
+          if (t.getTransferData(DataFlavor.stringFlavor) != null) {
+            int len = Math.min(cc.viewer.maxCutText.getValue(),
+                               ((String)t.getTransferData(DataFlavor.stringFlavor)).length());
+            newContents = 
+              ((String)t.getTransferData(DataFlavor.stringFlavor)).substring(0, len);
           }
+          if (!newContents.equals(cc.clipboardDialog.getContents())) {
+            if (cc.viewer.sendClipboard.getValue())
+              cc.writeClientCutText(newContents, newContents.length());
+            cc.clipboardDialog.setContents(newContents);
+          }
+        } catch(java.lang.Exception e) {
+          vlog.debug("Exception getting clipboard data: " + e.getMessage());
         }
       }
     } catch(SecurityException e) {
-      System.err.println("Cannot access the system clipboard");
+      vlog.debug("Cannot access the system clipboard");
     }
   }
 
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index 9a015cf..89bc94e 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -460,6 +460,10 @@
   = new BoolParameter("SendClipboard",
                       "Send clipboard changes to the server",
                       true);
+  IntParameter maxCutText
+  = new IntParameter("MaxCutText",
+                     "Maximum permitted length of an outgoing clipboard update",
+                     262144);
   StringParameter menuKey
   = new StringParameter("MenuKey",
                         "The key which brings up the popup menu",
