diff --git a/unix/x0vncserver/PollingManager.cxx b/unix/x0vncserver/PollingManager.cxx
index 71b5d66..9a9f28a 100644
--- a/unix/x0vncserver/PollingManager.cxx
+++ b/unix/x0vncserver/PollingManager.cxx
@@ -64,9 +64,6 @@
                ((buffer->height() + 31) / 32)),
     m_pollingStep(0)
 {
-  // Get initial screen image.
-  m_image->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop);
-
   // Create additional images used in polling algorithm, warn if
   // underlying class names are different from the class name of the
   // primary image.
@@ -290,7 +287,6 @@
         if (rect.br.y > m_height)
           rect.br.y = m_height;
         // Add to the changed region maintained by the server.
-        getScreenRect(rect);
         m_server->add_changed(rect);
         // Skip processed tiles.
         x += count;
diff --git a/unix/x0vncserver/PollingManager.h b/unix/x0vncserver/PollingManager.h
index 015b3ca..97a158f 100644
--- a/unix/x0vncserver/PollingManager.h
+++ b/unix/x0vncserver/PollingManager.h
@@ -64,7 +64,7 @@
   Display *m_dpy;
   VNCServer *m_server;
 
-  Image *m_image;
+  const Image *m_image;
   const int m_bytesPerPixel;
 
   const int m_offsetLeft;
@@ -74,16 +74,6 @@
 
 private:
 
-  inline void getScreen() {
-    m_image->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop);
-  }
-
-  inline void getScreenRect(const Rect& r) {
-    m_image->get(DefaultRootWindow(m_dpy),
-                 m_offsetLeft + r.tl.x, m_offsetTop + r.tl.y,
-                 r.width(), r.height(), r.tl.x, r.tl.y);
-  }
-
   inline void getRow(int x, int y, int w) {
     if (w == m_width) {
       // Getting full row may be more efficient.
diff --git a/unix/x0vncserver/XPixelBuffer.cxx b/unix/x0vncserver/XPixelBuffer.cxx
index 78ac558..2692c18 100644
--- a/unix/x0vncserver/XPixelBuffer.cxx
+++ b/unix/x0vncserver/XPixelBuffer.cxx
@@ -20,6 +20,8 @@
 // XPixelBuffer.cxx
 //
 
+#include <vector>
+#include <rfb/Region.h>
 #include <X11/Xlib.h>
 #include <x0vncserver/XPixelBuffer.h>
 
@@ -36,6 +38,8 @@
     m_offsetTop(offsetTop),
     m_stride(image->xim->bytes_per_line * 8 / image->xim->bits_per_pixel)
 {
+  // Get initial screen image.
+  m_image->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop);
 }
 
 XPixelBuffer::~XPixelBuffer()
@@ -45,6 +49,11 @@
 void
 XPixelBuffer::grabRegion(const rfb::Region& region)
 {
-  // m_image->get(DefaultRootWindow(m_dpy), m_offsetLeft, m_offsetTop);
+  std::vector<Rect> rects;
+  std::vector<Rect>::const_iterator i;
+  region.get_rects(&rects);
+  for (i = rects.begin(); i != rects.end(); i++) {
+    grabRect(*i);
+  }
 }
 
diff --git a/unix/x0vncserver/XPixelBuffer.h b/unix/x0vncserver/XPixelBuffer.h
index 2f84245..b909bb8 100644
--- a/unix/x0vncserver/XPixelBuffer.h
+++ b/unix/x0vncserver/XPixelBuffer.h
@@ -59,6 +59,14 @@
 
   // The number of pixels in a row, with padding included.
   int m_stride;
+
+  // Copy pixels from the screen to the pixel buffer,
+  // for the specified rectangular area of the buffer.
+  inline void grabRect(const Rect &r) {
+    m_image->get(DefaultRootWindow(m_dpy),
+		 m_offsetLeft + r.tl.x, m_offsetTop + r.tl.y,
+		 r.width(), r.height(), r.tl.x, r.tl.y);
+  }
 };
 
 #endif // __XPIXELBUFFER_H__
