diff --git a/unix/x0vncserver/PollingManager.cxx b/unix/x0vncserver/PollingManager.cxx
index bcc9547..71b5d66 100644
--- a/unix/x0vncserver/PollingManager.cxx
+++ b/unix/x0vncserver/PollingManager.cxx
@@ -43,27 +43,25 @@
 //
 // Constructor.
 //
-// Note that dpy and image should remain valid during the object
+// Note that dpy and buffer should remain valid during the object
 // lifetime, while factory is used only in the constructor itself.
 //
-// FIXME: Pass XPixelBuffer* instead of Image*.
-//
 
-PollingManager::PollingManager(Display *dpy, Image *image,
+PollingManager::PollingManager(Display *dpy, XPixelBuffer *buffer,
                                ImageFactory *factory,
                                int offsetLeft, int offsetTop)
   : m_dpy(dpy),
     m_server(0),
-    m_image(image),
-    m_bytesPerPixel(image->xim->bits_per_pixel / 8),
+    m_image(buffer->getImage()),
+    m_bytesPerPixel(buffer->getPF().bpp / 8),
     m_offsetLeft(offsetLeft),
     m_offsetTop(offsetTop),
-    m_width(image->xim->width),
-    m_height(image->xim->height),
-    m_widthTiles((image->xim->width + 31) / 32),
-    m_heightTiles((image->xim->height + 31) / 32),
-    m_numTiles(((image->xim->width + 31) / 32) *
-               ((image->xim->height + 31) / 32)),
+    m_width(buffer->width()),
+    m_height(buffer->height()),
+    m_widthTiles((buffer->width() + 31) / 32),
+    m_heightTiles((buffer->height() + 31) / 32),
+    m_numTiles(((buffer->width() + 31) / 32) *
+               ((buffer->height() + 31) / 32)),
     m_pollingStep(0)
 {
   // Get initial screen image.
diff --git a/unix/x0vncserver/PollingManager.h b/unix/x0vncserver/PollingManager.h
index cedac1a..015b3ca 100644
--- a/unix/x0vncserver/PollingManager.h
+++ b/unix/x0vncserver/PollingManager.h
@@ -27,6 +27,7 @@
 #include <rfb/VNCServer.h>
 
 #include <x0vncserver/Image.h>
+#include <x0vncserver/XPixelBuffer.h>
 
 #ifdef DEBUG
 #include <x0vncserver/TimeMillis.h>
@@ -38,7 +39,7 @@
 
 public:
 
-  PollingManager(Display *dpy, Image *image, ImageFactory *factory,
+  PollingManager(Display *dpy, XPixelBuffer *buffer, ImageFactory *factory,
                  int offsetLeft = 0, int offsetTop = 0);
   virtual ~PollingManager();
 
diff --git a/unix/x0vncserver/XPixelBuffer.cxx b/unix/x0vncserver/XPixelBuffer.cxx
index 2947007..78ac558 100644
--- a/unix/x0vncserver/XPixelBuffer.cxx
+++ b/unix/x0vncserver/XPixelBuffer.cxx
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Constantin Kaplinsky.  All Rights Reserved.
+/* Copyright (C) 2007-2008 Constantin Kaplinsky.  All Rights Reserved.
  *    
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
diff --git a/unix/x0vncserver/XPixelBuffer.h b/unix/x0vncserver/XPixelBuffer.h
index 010763b..2f84245 100644
--- a/unix/x0vncserver/XPixelBuffer.h
+++ b/unix/x0vncserver/XPixelBuffer.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Constantin Kaplinsky.  All Rights Reserved.
+/* Copyright (C) 2007-2008 Constantin Kaplinsky.  All Rights Reserved.
  *    
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,6 +40,12 @@
                const PixelFormat& pf, ColourMap* cm);
   virtual ~XPixelBuffer();
 
+  // We allow public access to the underlying Image object.
+  // The image is heavily used by the PollingManager.
+  // TODO: Allow read-only (const Image *) access only.
+  //       Or better do not allow public access at all.
+  virtual Image *getImage() const { return m_image; }
+
   virtual int getStride() const { return m_stride; }
 
   // Override PixelBuffer's function.
diff --git a/unix/x0vncserver/x0vncserver.cxx b/unix/x0vncserver/x0vncserver.cxx
index ab93984..8489290 100644
--- a/unix/x0vncserver/x0vncserver.cxx
+++ b/unix/x0vncserver/x0vncserver.cxx
@@ -1,5 +1,5 @@
 /* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
- * Copyright (C) 2004-2006 Constantin Kaplinsky.  All Rights Reserved.
+ * Copyright (C) 2004-2008 Constantin Kaplinsky.  All Rights Reserved.
  *    
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -180,13 +180,6 @@
     image = factory.newImage(dpy, geometry->width(), geometry->height());
     vlog.info("Allocated %s", image->classDesc());
 
-    // Create polling manager object. It will track screen changes and
-    // keep pixels of the `image' object up to date.
-    pollmgr = new PollingManager(dpy, image, &factory,
-                                 geometry->offsetLeft(),
-                                 geometry->offsetTop());
-    pollmgr->setVNCServer(vs);
-
     pf.bpp = image->xim->bits_per_pixel;
     pf.depth = image->xim->depth;
     pf.bigEndian = (image->xim->byte_order == MSBFirst);
@@ -205,6 +198,12 @@
     server = vs;
     server->setPixelBuffer(pb);
 
+    // Create polling manager object for detection of pixel changes.
+    pollmgr = new PollingManager(dpy, pb, &factory,
+                                 geometry->offsetLeft(),
+                                 geometry->offsetTop());
+    pollmgr->setVNCServer(vs);
+
     running = true;
   }
 
@@ -286,7 +285,7 @@
   Display* dpy;
   Geometry* geometry;
   PixelFormat pf;
-  PixelBuffer* pb;
+  XPixelBuffer* pb;
   VNCServer* server;
   Image* image;
   PollingManager* pollmgr;
