diff --git a/common/rfb/ComparingUpdateTracker.cxx b/common/rfb/ComparingUpdateTracker.cxx
index 1d27f3c..237adc4 100644
--- a/common/rfb/ComparingUpdateTracker.cxx
+++ b/common/rfb/ComparingUpdateTracker.cxx
@@ -20,12 +20,16 @@
 #include <vector>
 #include <rdr/types.h>
 #include <rfb/Exception.h>
+#include <rfb/LogWriter.h>
 #include <rfb/ComparingUpdateTracker.h>
 
 using namespace rfb;
 
+static LogWriter vlog("ComparingUpdateTracker");
+
 ComparingUpdateTracker::ComparingUpdateTracker(PixelBuffer* buffer)
-  : fb(buffer), oldFb(fb->getPF(), 0, 0), firstCompare(true), enabled(true)
+  : fb(buffer), oldFb(fb->getPF(), 0, 0), firstCompare(true),
+    enabled(true), totalPixels(0), missedPixels(0)
 {
     changed.assign_union(fb->getRect());
 }
@@ -72,6 +76,13 @@
   for (i = rects.begin(); i != rects.end(); i++)
     compareRect(*i, &newChanged);
 
+  changed.get_rects(&rects);
+  for (i = rects.begin(); i != rects.end(); i++)
+    totalPixels += i->area();
+  newChanged.get_rects(&rects);
+  for (i = rects.begin(); i != rects.end(); i++)
+    missedPixels += i->area();
+
   if (changed.equals(newChanged))
     return false;
 
@@ -165,3 +176,19 @@
     newChanged->assign_union(temp);
   }
 }
+
+void ComparingUpdateTracker::logStats()
+{
+  double ratio;
+  char a[1024], b[1024];
+
+  siPrefix(totalPixels, "pixels", a, sizeof(a));
+  siPrefix(missedPixels, "pixels", b, sizeof(b));
+
+  ratio = (double)totalPixels / missedPixels;
+
+  vlog.info("%s in / %s out", a, b);
+  vlog.info("(1:%g ratio)", ratio);
+
+  totalPixels = missedPixels = 0;
+}
diff --git a/common/rfb/ComparingUpdateTracker.h b/common/rfb/ComparingUpdateTracker.h
index fccc222..e62f2b2 100644
--- a/common/rfb/ComparingUpdateTracker.h
+++ b/common/rfb/ComparingUpdateTracker.h
@@ -40,12 +40,17 @@
 
     virtual void enable();
     virtual void disable();
+
+    void logStats();
+
   private:
     void compareRect(const Rect& r, Region* newchanged);
     PixelBuffer* fb;
     ManagedPixelBuffer oldFb;
     bool firstCompare;
     bool enabled;
+
+    rdr::U32 totalPixels, missedPixels;
   };
 
 }
diff --git a/common/rfb/VNCServerST.cxx b/common/rfb/VNCServerST.cxx
index d501085..e15cd70 100644
--- a/common/rfb/VNCServerST.cxx
+++ b/common/rfb/VNCServerST.cxx
@@ -110,6 +110,8 @@
     desktop->stop();
   }
 
+  if (comparer)
+    comparer->logStats();
   delete comparer;
 }
 
@@ -155,6 +157,10 @@
         desktopStarted = false;
         desktop->stop();
       }
+
+      if (comparer)
+        comparer->logStats();
+
       return;
     }
   }
@@ -292,6 +298,9 @@
 
 void VNCServerST::setPixelBuffer(PixelBuffer* pb_, const ScreenSet& layout)
 {
+  if (comparer)
+    comparer->logStats();
+
   pb = pb_;
   delete comparer;
   comparer = 0;
