diff --git a/unix/x0vncserver/PollingManager.cxx b/unix/x0vncserver/PollingManager.cxx
index 9a9f28a..27f1028 100644
--- a/unix/x0vncserver/PollingManager.cxx
+++ b/unix/x0vncserver/PollingManager.cxx
@@ -51,7 +51,6 @@
                                ImageFactory *factory,
                                int offsetLeft, int offsetTop)
   : m_dpy(dpy),
-    m_server(0),
     m_image(buffer->getImage()),
     m_bytesPerPixel(buffer->getPF().bpp / 8),
     m_offsetLeft(offsetLeft),
@@ -91,15 +90,6 @@
 }
 
 //
-// Register VNCServer object.
-//
-
-void PollingManager::setVNCServer(VNCServer *s)
-{
-  m_server = s;
-}
-
-//
 // DEBUG: Measuring time spent in the poll() function,
 //        as well as time intervals between poll() calls.
 //
@@ -127,15 +117,15 @@
 // Search for changed rectangles on the screen.
 //
 
-void PollingManager::poll()
+void PollingManager::poll(VNCServer *server)
 {
 #ifdef DEBUG
   debugBeforePoll();
 #endif
 
   // Perform polling and try update clients if changes were detected.
-  if (pollScreen())
-    m_server->tryUpdate();
+  if (pollScreen(server))
+    server->tryUpdate();
 
 #ifdef DEBUG
   debugAfterPoll();
@@ -148,9 +138,9 @@
 #define DBG_REPORT_CHANGES(title)
 #endif
 
-bool PollingManager::pollScreen()
+bool PollingManager::pollScreen(VNCServer *server)
 {
-  if (!m_server)
+  if (!server)
     return false;
 
   // Clear the m_changeFlags[] array, indicating that no changes have
@@ -175,7 +165,7 @@
     checkNeighbors();
     DBG_REPORT_CHANGES("After checking neighbors");
     // Inform the server about the changes.
-    nTilesChanged = sendChanges();
+    nTilesChanged = sendChanges(server);
   }
 
 #ifdef DEBUG_PRINT_NUM_CHANGED_TILES
@@ -265,7 +255,7 @@
   return nTilesChanged;
 }
 
-int PollingManager::sendChanges()
+int PollingManager::sendChanges(VNCServer *server)
 {
   const bool *pChangeFlags = m_changeFlags;
   int nTilesChanged = 0;
@@ -287,7 +277,7 @@
         if (rect.br.y > m_height)
           rect.br.y = m_height;
         // Add to the changed region maintained by the server.
-        m_server->add_changed(rect);
+        server->add_changed(rect);
         // Skip processed tiles.
         x += count;
       }
diff --git a/unix/x0vncserver/PollingManager.h b/unix/x0vncserver/PollingManager.h
index 97a158f..587e347 100644
--- a/unix/x0vncserver/PollingManager.h
+++ b/unix/x0vncserver/PollingManager.h
@@ -43,8 +43,6 @@
                  int offsetLeft = 0, int offsetTop = 0);
   virtual ~PollingManager();
 
-  void setVNCServer(VNCServer *s);
-
   // Currently, these functions do nothing. In past versions, we used
   // to poll area around the pointer if its position has been changed
   // recently. But that rather decreased overal polling performance,
@@ -54,15 +52,14 @@
   void setPointerPos(const Point &pos) {}
   void unsetPointerPos() {}
 
-  void poll();
+  void poll(VNCServer *server);
 
 protected:
 
   // Screen polling. Returns true if some changes were detected.
-  bool pollScreen();
+  bool pollScreen(VNCServer *server);
 
   Display *m_dpy;
-  VNCServer *m_server;
 
   const Image *m_image;
   const int m_bytesPerPixel;
@@ -98,7 +95,7 @@
 
   int checkRow(int x, int y, int w);
   int checkColumn(int x, int y, int h, bool *pChangeFlags);
-  int sendChanges();
+  int sendChanges(VNCServer *server);
 
   // Check neighboring tiles and update m_changeFlags[].
   void checkNeighbors();
diff --git a/unix/x0vncserver/x0vncserver.cxx b/unix/x0vncserver/x0vncserver.cxx
index 8489290..edaf1a8 100644
--- a/unix/x0vncserver/x0vncserver.cxx
+++ b/unix/x0vncserver/x0vncserver.cxx
@@ -202,8 +202,6 @@
     pollmgr = new PollingManager(dpy, pb, &factory,
                                  geometry->offsetLeft(),
                                  geometry->offsetTop());
-    pollmgr->setVNCServer(vs);
-
     running = true;
   }
 
@@ -225,7 +223,7 @@
 
   inline void poll() {
     if (pollmgr)
-      pollmgr->poll();
+      pollmgr->poll(server);
   }
 
   virtual void pointerEvent(const Point& pos, int buttonMask) {
