diff --git a/java/src/com/tightvnc/vncviewer/ButtonPanel.java b/java/src/com/tightvnc/vncviewer/ButtonPanel.java
index 63ad6a1..dea182d 100644
--- a/java/src/com/tightvnc/vncviewer/ButtonPanel.java
+++ b/java/src/com/tightvnc/vncviewer/ButtonPanel.java
@@ -39,9 +39,10 @@
   Button ctrlAltDelButton;
   Button refreshButton;
   Button selectButton;
-  Button videoIgnoreButton;
+  Button videoFreezeButton;
 
-  final String videoIgnoreLabel = "Video Ignore";
+  final String enableVideoFreezeLabel = "Enable Video Freeze";
+  final String disableVideoFreezeLabel = "Disable Video Freeze";
   final String selectEnterLabel = "Select Video Area";
   final String selectLeaveLabel = "Hide Selection";
 
@@ -88,11 +89,10 @@
   /**
    * Add video ignore button to the ButtonPanel.
    */
-  public void addVideoIgnoreButton() {
-    videoIgnoreButton = new Button(videoIgnoreLabel);
-    videoIgnoreButton.setEnabled(false);
-    add(selectButton);
-    videoIgnoreButton.addActionListener(this);
+  public void addVideoFreezeButton() {
+    videoFreezeButton = new Button(enableVideoFreezeLabel);
+    add(videoFreezeButton);
+    videoFreezeButton.addActionListener(this);
   }
 
   //
@@ -156,11 +156,32 @@
 
     } else if (evt.getSource() == clipboardButton) {
       viewer.clipboard.setVisible(!viewer.clipboard.isVisible());
-    } else if (evt.getSource() == videoIgnoreButton) {
+    } else if (evt.getSource() == videoFreezeButton) {
+
       //
-      // Do something onVideoIgnoreButtonClick event
-      // ...
+      // Send video freeze message to server and change caption of button
       //
+
+      //
+      // TODO: Move this code to another place.
+      //
+
+      boolean sendOk = true;
+      boolean currentFreezeState =
+              videoFreezeButton.getLabel().equals(disableVideoFreezeLabel);
+      try {
+        viewer.rfb.trySendVideoFreeze(!currentFreezeState);
+      } catch (IOException ex) {
+        sendOk = false;
+        ex.printStackTrace();
+      }
+      if (sendOk) {
+        if (!currentFreezeState) {
+            videoFreezeButton.setLabel(disableVideoFreezeLabel);
+        } else {
+            videoFreezeButton.setLabel(enableVideoFreezeLabel);
+        }
+      }
     } else if (evt.getSource() == ctrlAltDelButton) {
       try {
         final int modifiers = InputEvent.CTRL_MASK | InputEvent.ALT_MASK;
diff --git a/java/src/com/tightvnc/vncviewer/RfbProto.java b/java/src/com/tightvnc/vncviewer/RfbProto.java
index 156b41a..9e6284f 100644
--- a/java/src/com/tightvnc/vncviewer/RfbProto.java
+++ b/java/src/com/tightvnc/vncviewer/RfbProto.java
@@ -100,6 +100,8 @@
   // Non-standard client-to-server messages
   final static int EnableContinuousUpdates = 150;
   final static int VideoRectangleSelection = 151;
+  final static int VideoFreeze = 152;
+  final static String SigVideoFreeze = "VD_FREEZ";
   final static String SigEnableContinuousUpdates = "CUC_ENCU";
   final static String SigVideoRectangleSelection = "VRECTSEL";
 
@@ -498,6 +500,9 @@
     clientMsgCaps.add(VideoRectangleSelection, TightVncVendor,
                       SigVideoRectangleSelection,
                       "Select a rectangle to be treated as video");
+    clientMsgCaps.add(VideoFreeze, TightVncVendor,
+                      SigVideoFreeze,
+                      "Disable/enable video rectangle");
 
     // Supported encoding types
     encodingCaps.add(EncodingCopyRect, StandardVendor,
@@ -1406,6 +1411,27 @@
     System.out.println("Video rectangle selection message sent");
   }
 
+  void trySendVideoFreeze(boolean freeze) throws IOException
+  {
+    if (!clientMsgCaps.isEnabled(VideoFreeze)) {
+      System.out.println("Video freeze is not supported by the server");
+      return;
+    }
+
+    byte[] b = new byte[2];
+    byte fb = 0;
+    if (freeze) {
+      fb = 1;
+    }
+
+    b[0] = (byte) VideoFreeze;
+    b[1] = (byte) fb;
+
+    os.write(b);
+
+    System.out.println("Video freeze selection message sent");
+  }
+
   public void startTiming() {
     timing = true;
 
diff --git a/java/src/com/tightvnc/vncviewer/VncViewer.java b/java/src/com/tightvnc/vncviewer/VncViewer.java
index 4ff85ff..fd71114 100644
--- a/java/src/com/tightvnc/vncviewer/VncViewer.java
+++ b/java/src/com/tightvnc/vncviewer/VncViewer.java
@@ -167,6 +167,11 @@
         buttonPanel.addSelectButton();
       }
 
+      if (showControls &&
+          rfb.clientMsgCaps.isEnabled(RfbProto.VideoFreeze)) {
+        buttonPanel.addVideoFreezeButton();
+      }
+
       // FIXME: Use auto-scaling not only in a separate frame.
       if (options.autoScale && inSeparateFrame) {
 	Dimension screenSize;
