diff --git a/common/rfb/ServerCore.cxx b/common/rfb/ServerCore.cxx
index 59a7cff..b1097a3 100644
--- a/common/rfb/ServerCore.cxx
+++ b/common/rfb/ServerCore.cxx
@@ -101,8 +101,3 @@
 ("QueryConnect",
  "Prompt the local user to accept or reject incoming connections.",
  false);
-rfb::IntParameter rfb::Server::queryConnectTimeout
-("QueryConnectTimeout",
- "Number of seconds to show the Accept Connection dialog before "
- "rejecting the connection",
- 10);
diff --git a/common/rfb/ServerCore.h b/common/rfb/ServerCore.h
index 37923cc..f915c7a 100644
--- a/common/rfb/ServerCore.h
+++ b/common/rfb/ServerCore.h
@@ -49,7 +49,6 @@
     static BoolParameter sendCutText;
     static BoolParameter acceptSetDesktopSize;
     static BoolParameter queryConnect;
-    static IntParameter queryConnectTimeout;
 
   };
 
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index b183c05..d9bb281 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -71,7 +71,7 @@
 VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s,
                                    bool reverse)
   : sock(s), reverseConnection(reverse),
-    queryConnectTimer(this), inProcessMessages(false),
+    inProcessMessages(false),
     pendingSyncFence(false), syncFence(false), fenceFlags(0),
     fenceDataLen(0), fenceData(NULL),
     baseRTT(-1), congWindow(0), ackedOffset(0), sentOffset(0),
@@ -485,10 +485,8 @@
   CharArray reason;
   VNCServerST::queryResult qr = server->queryConnection(sock, userName,
                                                         &reason.buf);
-  if (qr == VNCServerST::PENDING) {
-    queryConnectTimer.start(rfb::Server::queryConnectTimeout * 1000);
+  if (qr == VNCServerST::PENDING)
     return;
-  }
 
   // - If server returns ACCEPT/REJECT then pass result to SConnection
   approveConnection(qr == VNCServerST::ACCEPT, reason.buf);
@@ -870,10 +868,6 @@
   try {
     if (t == &congestionTimer)
       updateCongestion();
-    else if (t == &queryConnectTimer) {
-      if (state() == RFBSTATE_QUERYING)
-        approveConnection(false, "The attempt to prompt the user to accept the connection failed");
-    }
   } catch (rdr::Exception& e) {
     close(e.str());
   }
diff --git a/common/rfb/VNCSConnectionST.h b/common/rfb/VNCSConnectionST.h
index 9b7b14b..42eb85a 100644
--- a/common/rfb/VNCSConnectionST.h
+++ b/common/rfb/VNCSConnectionST.h
@@ -185,8 +185,6 @@
     CharArray peerEndpoint;
     bool reverseConnection;
 
-    Timer queryConnectTimer;
-
     bool inProcessMessages;
 
     bool pendingSyncFence, syncFence;
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc
index dd1d4ca..c68a077 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.cc
+++ b/unix/xserver/hw/vnc/XserverDesktop.cc
@@ -57,6 +57,11 @@
                           "Send keyboard events straight through and "
                           "avoid mapping them to the current keyboard "
                           "layout", false);
+IntParameter queryConnectTimeout("QueryConnectTimeout",
+                                 "Number of seconds to show the "
+                                 "Accept Connection dialog before "
+                                 "rejecting the connection",
+                                 10);
 
 class FileHTTPServer : public rfb::HTTPServer {
 public:
@@ -107,7 +112,7 @@
     server(0), httpServer(0),
     listeners(listeners_), httpListeners(httpListeners_),
     directFbptr(true),
-    queryConnectId(0)
+    queryConnectId(0), queryConnectTimer(this)
 {
   format = pf;
 
@@ -301,7 +306,7 @@
 {
   int count;
 
-  if (queryConnectId) {
+  if (queryConnectTimer.isStarted()) {
     *reason = strDup("Another connection is currently being queried.");
     return rfb::VNCServerST::REJECT;
   }
@@ -319,6 +324,8 @@
   queryConnectId = (uint32_t)(intptr_t)sock;
   queryConnectSocket = sock;
 
+  queryConnectTimer.start(queryConnectTimeout * 1000);
+
   return rfb::VNCServerST::PENDING;
 }
 
@@ -557,14 +564,14 @@
 {
   *opaqueId = queryConnectId;
 
-  if (queryConnectId == 0) {
+  if (!queryConnectTimer.isStarted()) {
     *address = "";
     *username = "";
     *timeout = 0;
   } else {
     *address = queryConnectAddress.buf;
     *username = queryConnectUsername.buf;
-    *timeout = rfb::Server::queryConnectTimeout;
+    *timeout = queryConnectTimeout;
   }
 }
 
@@ -574,6 +581,7 @@
   if (queryConnectId == opaqueId) {
     server->approveConnection(queryConnectSocket, accept, rejectMsg);
     queryConnectId = 0;
+    queryConnectTimer.stop();
   }
 }
 
@@ -783,3 +791,14 @@
 
   vncKeyboardEvent(keysym, keycode, down);
 }
+
+bool XserverDesktop::handleTimeout(Timer* t)
+{
+  if (t == &queryConnectTimer) {
+    server->approveConnection(queryConnectSocket, false,
+                              "The attempt to prompt the user to "
+                              "accept the connection failed");
+  }
+
+  return false;
+}
diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h
index 9e7dfd1..2a378ea 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.h
+++ b/unix/xserver/hw/vnc/XserverDesktop.h
@@ -47,7 +47,8 @@
 
 class XserverDesktop : public rfb::SDesktop, public rfb::FullFramePixelBuffer,
                        public rdr::Substitutor,
-                       public rfb::VNCServerST::QueryConnectionHandler {
+                       public rfb::VNCServerST::QueryConnectionHandler,
+                       public rfb::Timer::Callback {
 public:
 
   XserverDesktop(int screenIndex,
@@ -113,6 +114,8 @@
                          network::SocketServer* sockserv,
                          bool read, bool write);
 
+  virtual bool handleTimeout(rfb::Timer* t);
+
 private:
   rfb::ScreenSet computeScreenLayout();
 
@@ -127,6 +130,7 @@
   network::Socket* queryConnectSocket;
   rfb::CharArray queryConnectAddress;
   rfb::CharArray queryConnectUsername;
+  rfb::Timer queryConnectTimer;
 
 #ifdef RANDR
   typedef std::map<intptr_t, rdr::U32> OutputIdMap;
