diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index 474ae14..5ca9f0e 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -117,7 +117,8 @@
     delete pixelTrans;
 
   if (cursor) {
-    delete [] cursor->array;
+    if (!cursor->alloc_array)
+      delete [] cursor->array;
     delete cursor;
   }
 
@@ -178,43 +179,70 @@
   damage.clear();
 }
 
+#ifdef HAVE_FLTK_CURSOR
+static const char * dotcursor_xpm[] = {
+  "5 5 2 1",
+  ".	c #000000",
+  " 	c #FFFFFF",
+  "     ",
+  " ... ",
+  " ... ",
+  " ... ",
+  "     "};
+#endif
 
 void Viewport::setCursor(int width, int height, const Point& hotspot,
                               void* data, void* mask)
 {
 #ifdef HAVE_FLTK_CURSOR
-  U8 *buffer = new U8[width*height*4];
-  U8 *i, *o, *m;
-  int m_width;
-
-  const PixelFormat &pf = frameBuffer->getPF();
-
-  i = (U8*)data;
-  o = buffer;
-  m = (U8*)mask;
-  m_width = (width+7)/8;
-  for (int y = 0;y < height;y++) {
-    for (int x = 0;x < width;x++) {
-      pf.rgbFromBuffer(o, i, 1, &colourMap);
-
-      if (m[(m_width*y)+(x/8)] & 0x80>>(x%8))
-        o[3] = 255;
-      else
-        o[3] = 0;
-
-      o += 4;
-      i += pf.bpp/8;
-    }
-  }
-
   if (cursor) {
-    delete [] cursor->array;
+    if (!cursor->alloc_array)
+      delete [] cursor->array;
     delete cursor;
   }
 
-  cursor = new Fl_RGB_Image(buffer, width, height, 4);
+  int mask_len = ((width+7)/8) * height;
+  int i;
 
-  cursorHotspot = hotspot;
+  for (i = 0; i < mask_len; i++)
+    if (((rdr::U8*)mask)[i]) break;
+
+  if (i == mask_len) {
+    if (dotWhenNoCursor)
+      vlog.debug("cursor is empty - using dot");
+
+    Fl_Pixmap pxm(dotcursor_xpm);
+    cursor = new Fl_RGB_Image(&pxm);
+    cursorHotspot.x = cursorHotspot.y = 2;
+  } else {
+    U8 *buffer = new U8[width*height*4];
+    U8 *i, *o, *m;
+    int m_width;
+
+    const PixelFormat &pf = frameBuffer->getPF();
+
+    i = (U8*)data;
+    o = buffer;
+    m = (U8*)mask;
+    m_width = (width+7)/8;
+    for (int y = 0;y < height;y++) {
+      for (int x = 0;x < width;x++) {
+        pf.rgbFromBuffer(o, i, 1, &colourMap);
+
+        if (m[(m_width*y)+(x/8)] & 0x80>>(x%8))
+          o[3] = 255;
+        else
+          o[3] = 0;
+
+        o += 4;
+        i += pf.bpp/8;
+      }
+    }
+
+    cursor = new Fl_RGB_Image(buffer, width, height, 4);
+
+    cursorHotspot = hotspot;
+  }
 
   if (Fl::belowmouse() == this)
     window()->cursor(cursor, cursorHotspot.x, cursorHotspot.y);
