diff --git a/src/AndroidDesktop.cpp b/src/AndroidDesktop.cpp
index 72c5896..7539c69 100644
--- a/src/AndroidDesktop.cpp
+++ b/src/AndroidDesktop.cpp
@@ -141,8 +141,8 @@
     return rfb::Point(mPixels->width(), mPixels->height());
 }
 
-void AndroidDesktop::keyEvent(rdr::U32 key, bool down) {
-    mInputDevice->keyEvent(down, key);
+void AndroidDesktop::keyEvent(rdr::U32 keysym, __unused_attr rdr::U32 keycode, bool down) {
+    mInputDevice->keyEvent(down, keysym);
 }
 
 void AndroidDesktop::pointerEvent(const rfb::Point& pos, int buttonMask) {
@@ -190,3 +190,11 @@
     screens.add_screen(rfb::Screen(0, 0, 0, mPixels->width(), mPixels->height(), 0));
     mServer->setScreenLayout(screens);
 }
+
+void AndroidDesktop::queryConnection(network::Socket* sock, __unused_attr const char* userName) {
+    mServer->approveConnection(sock, true, NULL);
+}
+
+void AndroidDesktop::terminate() {
+    kill(getpid(), SIGTERM);
+}
diff --git a/src/AndroidDesktop.h b/src/AndroidDesktop.h
index 768c27c..93a6610 100644
--- a/src/AndroidDesktop.h
+++ b/src/AndroidDesktop.h
@@ -34,11 +34,12 @@
 
     virtual void start(rfb::VNCServer* vs);
     virtual void stop();
+    virtual void terminate();
 
     virtual rfb::Point getFbSize();
     virtual unsigned int setScreenLayout(int fb_width, int fb_height, const rfb::ScreenSet& layout);
 
-    virtual void keyEvent(rdr::U32 key, bool down);
+    virtual void keyEvent(rdr::U32 keysym, rdr::U32 keycode, bool down);
     virtual void pointerEvent(const rfb::Point& pos, int buttonMask);
 
     virtual void processFrames();
@@ -51,6 +52,8 @@
 
     virtual void onFrameAvailable(const BufferItem& item);
 
+    virtual void queryConnection(network::Socket* sock, const char* userName);
+
   private:
     virtual void notify();
 
diff --git a/src/main.cpp b/src/main.cpp
index 831268d..251edf6 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -12,6 +12,7 @@
 #include <network/Socket.h>
 #include <network/TcpSocket.h>
 #include <rfb/Configuration.h>
+#include <rfb/LogWriter.h>
 #include <rfb/Logger_android.h>
 #include <rfb/VNCServerST.h>
 #include <rfb/util.h>
@@ -75,7 +76,7 @@
     sp<ProcessState> self = ProcessState::self();
     self->startThreadPool();
 
-    std::list<network::TcpListener*> listeners;
+    std::list<network::SocketListener*> listeners;
 
     try {
         sp<AndroidDesktop> desktop = new AndroidDesktop();
@@ -98,7 +99,7 @@
             FD_ZERO(&wfds);
 
             FD_SET(eventFd, &rfds);
-            for (std::list<network::TcpListener*>::iterator i = listeners.begin();
+            for (std::list<network::SocketListener*>::iterator i = listeners.begin();
                  i != listeners.end(); i++)
                 FD_SET((*i)->getFd(), &rfds);
 
@@ -117,7 +118,7 @@
 
             wait_ms = 0;
 
-            rfb::soonestTimeout(&wait_ms, server.checkTimeouts());
+            rfb::soonestTimeout(&wait_ms, rfb::Timer::checkTimeouts());
 
             tv.tv_sec = wait_ms / 1000;
             tv.tv_usec = (wait_ms % 1000) * 1000;
@@ -134,7 +135,7 @@
             }
 
             // Accept new VNC connections
-            for (std::list<network::TcpListener*>::iterator i = listeners.begin();
+            for (std::list<network::SocketListener*>::iterator i = listeners.begin();
                  i != listeners.end(); i++) {
                 if (FD_ISSET((*i)->getFd(), &rfds)) {
                     network::Socket* sock = (*i)->accept();
@@ -147,7 +148,7 @@
                 }
             }
 
-            server.checkTimeouts();
+            rfb::Timer::checkTimeouts();
 
             // Client list could have been changed.
             server.getSockets(&sockets);
