diff --git a/x0vncserver/Makefile.in b/x0vncserver/Makefile.in
index 4227a51..f9a2ad7 100644
--- a/x0vncserver/Makefile.in
+++ b/x0vncserver/Makefile.in
@@ -1,6 +1,6 @@
 
 SRCS = Image.cxx CPUMonitor.cxx TimeMillis.cxx PollingManager.cxx \
-       x0vncserver.cxx
+       PollingScheduler.cxx x0vncserver.cxx
 
 OBJS = $(SRCS:.cxx=.o)
 
diff --git a/x0vncserver/PollingScheduler.cxx b/x0vncserver/PollingScheduler.cxx
new file mode 100644
index 0000000..2d28491
--- /dev/null
+++ b/x0vncserver/PollingScheduler.cxx
@@ -0,0 +1,60 @@
+/* Copyright (C) 2006 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ */
+
+//
+// PollingScheduler.cxx
+//
+
+#include <x0vncserver/PollingScheduler.h>
+
+PollingScheduler::PollingScheduler(int interval)
+{
+  setInterval(interval);
+  reset();
+}
+
+void PollingScheduler::setInterval(int interval)
+{
+  m_interval = interval;
+}
+
+void PollingScheduler::reset()
+{
+  initialState = true;
+}
+
+void PollingScheduler::newPass()
+{
+  m_passStarted.update();
+  initialState = false;
+}
+
+int PollingScheduler::millisRemaining() const
+{
+  if (initialState)
+    return 0;
+
+  TimeMillis timeNow;
+  int elapsed = timeNow.diffFrom(m_passStarted);
+
+  if (elapsed > m_interval)
+    return 0;
+
+  return (m_interval - elapsed);
+}
+
diff --git a/x0vncserver/PollingScheduler.h b/x0vncserver/PollingScheduler.h
new file mode 100644
index 0000000..777a665
--- /dev/null
+++ b/x0vncserver/PollingScheduler.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2006 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ */
+
+//
+// PollingScheduler.h
+//
+
+#ifndef __POLLINGSCHEDULER_H__
+#define __POLLINGSCHEDULER_H__
+
+#include <x0vncserver/TimeMillis.h>
+
+class PollingScheduler {
+
+public:
+
+  PollingScheduler(int interval);
+
+  // Set desired polling interval.
+  void setInterval(int interval);
+
+  // Reset the object into the initial state (no polling performed).
+  void reset();
+
+  // Tell the scheduler that new polling pass is just being started.
+  void newPass();
+
+  // This function estimates time remaining before new polling pass.
+  int millisRemaining() const;
+
+protected:
+
+  bool initialState;
+  int m_interval;
+  TimeMillis m_passStarted;
+
+};
+
+#endif // __POLLINGSCHEDULER_H__
+
diff --git a/x0vncserver/x0vncserver.cxx b/x0vncserver/x0vncserver.cxx
index af63ad0..27c130a 100644
--- a/x0vncserver/x0vncserver.cxx
+++ b/x0vncserver/x0vncserver.cxx
@@ -44,7 +44,7 @@
 #include <x0vncserver/Image.h>
 #include <x0vncserver/PollingManager.h>
 #include <x0vncserver/CPUMonitor.h>
-#include <x0vncserver/TimeMillis.h>
+#include <x0vncserver/PollingScheduler.h>
 
 using namespace rfb;
 using namespace network;
@@ -417,8 +417,8 @@
 
     CPUMonitor cpumon((int)maxProcessorUsage, 1000);
     int dynPollingCycle = (int)pollingCycle;
+    PollingScheduler sched(dynPollingCycle);
 
-    TimeMillis timeSaved, timeNow;
     fd_set rfds;
     struct timeval tv;
 
@@ -437,14 +437,8 @@
       }
 
       if (clients_connected) {
-        int poll_ms = 20;
-        if (timeNow.update()) {
-          poll_ms = timeNow.diffFrom(timeSaved);
-        }
-        int wait_ms = dynPollingCycle - poll_ms;
-        if (wait_ms < 0) {
-          wait_ms = 0;
-        } else if (wait_ms > 500) {
+        int wait_ms = sched.millisRemaining();
+        if (wait_ms > 500) {
           wait_ms = 500;
         }
         tv.tv_usec = wait_ms * 1000;
@@ -452,7 +446,8 @@
         fprintf(stderr, "[%d]\t", wait_ms);
 #endif
       } else {
-        tv.tv_usec = 50000;
+        sched.reset();
+        tv.tv_usec = 100000;
       }
       tv.tv_sec = 0;
 
@@ -490,16 +485,10 @@
 
       server.checkTimeouts();
 
-      if (timeNow.update()) {
-        int diff = timeNow.diffFrom(timeSaved);
-        if (diff >= dynPollingCycle) {
-          adjustPollingCycle(&dynPollingCycle, &cpumon);
-          timeSaved = timeNow;
-          desktop.poll();
-        }
-      } else {
-        // Something strange has happened -- TimeMillis::update() failed.
-        // Poll after each select(), as in the original VNC4 code.
+      if (sched.millisRemaining() <= 0) {
+        adjustPollingCycle(&dynPollingCycle, &cpumon);
+        sched.setInterval(dynPollingCycle);
+        sched.newPass();
         desktop.poll();
       }
     }
