diff --git a/java/src/com/tightvnc/vncviewer/VncCanvas.java b/java/src/com/tightvnc/vncviewer/VncCanvas.java
index 56019be..4e5460f 100644
--- a/java/src/com/tightvnc/vncviewer/VncCanvas.java
+++ b/java/src/com/tightvnc/vncviewer/VncCanvas.java
@@ -45,7 +45,7 @@
 //
 
 class VncCanvas extends Canvas
-  implements KeyListener, MouseListener, MouseMotionListener, Repaintable {
+  implements KeyListener, MouseListener, MouseMotionListener, Repaintable, Runnable {
 
   VncViewer viewer;
   RfbProto rfb;
@@ -174,6 +174,11 @@
     addKeyListener(this);
     addMouseListener(this);
     addMouseMotionListener(this);
+
+    // Create thread, that will send mouse movement events
+    // to VNC server.
+    Thread mouseThread = new Thread(this);
+    mouseThread.start();
   }
 
   public VncCanvas(VncViewer v) throws IOException {
@@ -771,6 +776,26 @@
     processLocalMouseEvent(evt, true);
   }
 
+  private synchronized void trySendPointerEvent() {
+    if ((needToSendMouseEvent) && (mouseEvent!=null)) {
+      sendMouseEvent(mouseEvent, false);
+      needToSendMouseEvent = false;
+      lastMouseEventSendTime = System.currentTimeMillis();
+    }
+  }
+
+  public void run() {
+    while (true) {
+      // Send mouse movement if we have it
+      trySendPointerEvent();
+      // Sleep for some time
+      try {
+        Thread.sleep(1000 / mouseMaxFreq);
+      } catch (InterruptedException ex) {
+      }
+    }
+  }
+
   //
   // Ignored events.
   //
@@ -817,9 +842,15 @@
     if (viewer.rfb != null && rfb.inNormalProtocol) {
       if (!inSelectionMode) {
         if (inputEnabled) {
-          if (System.currentTimeMillis() - lastMouseEventSendTime >=
-              (1000 / mouseMaxFreq)) {
+          // If mouse not moved, but it's click event then
+          // send it to server immideanlty.
+          // Else, it's mouse movement - we can send it in
+          // our thread later.
+          if (!moved) {
             sendMouseEvent(evt, moved);
+          } else {
+            mouseEvent = evt;
+            needToSendMouseEvent = true;
           }
         }
       } else {
@@ -880,7 +911,8 @@
 
   MemoryImageSource softCursorSource;
   Image softCursor;
-
+  MouseEvent mouseEvent = null;
+  boolean needToSendMouseEvent = false;
   int cursorX = 0, cursorY = 0;
   int cursorWidth, cursorHeight;
   int origCursorWidth, origCursorHeight;
