diff --git a/src/VNCFlinger.cpp b/src/VNCFlinger.cpp
index a637c47..cd7da0f 100644
--- a/src/VNCFlinger.cpp
+++ b/src/VNCFlinger.cpp
@@ -41,21 +41,23 @@
     String8 v4("127.0.0.1");
     String8 v6("::1");
 
-    setListenAddress(v4, false);
-    setListenAddress(v6, true);
+    setV4Address(v4);
+    setV6Address(v6);
 }
 
-status_t VNCFlinger::setListenAddress(String8& address, bool v6) {
-    if (v6) {
-        mVNCScreen->listen6Interface = const_cast<char *>(address.string());
-        return NO_ERROR;
-    }
+status_t VNCFlinger::setV4Address(const String8& address) {
     if (!rfbStringToAddr(const_cast<char *>(address.string()), &(mVNCScreen->listenInterface))) {
         return BAD_VALUE;
     }
     return NO_ERROR;
 }
 
+status_t VNCFlinger::setV6Address(const String8& address) {
+    ALOGD("v6: %s", const_cast<char *>(address.string()));
+    mVNCScreen->listen6Interface = const_cast<char *>(address.string());
+    return NO_ERROR;
+}
+
 status_t VNCFlinger::setPort(unsigned int port) {
     if (port > 65535) {
         port = 0;
@@ -76,7 +78,7 @@
     return OK;
 }
 
-status_t VNCFlinger::setPassword(String8& passwd) {
+status_t VNCFlinger::setPassword(const String8& passwd) {
     String8 path(VNC_AUTH_FILE);
     if (rfbEncryptAndStorePasswd(const_cast<char *>(passwd.string()),
                                  const_cast<char *>(path.string())) != 0) {
diff --git a/src/VNCFlinger.h b/src/VNCFlinger.h
index 7433f0c..856bbb7 100644
--- a/src/VNCFlinger.h
+++ b/src/VNCFlinger.h
@@ -23,6 +23,7 @@
 #include <utils/String8.h>
 
 #include <rfb/rfb.h>
+#undef max
 
 #define VNC_AUTH_FILE "/data/system/vncauth"
 #define NUM_BUFS 1
@@ -42,11 +43,12 @@
     virtual size_t addClient();
     virtual size_t removeClient();
 
-    virtual status_t setListenAddress(String8& address, bool v6);
     virtual status_t setPort(unsigned int port);
+    virtual status_t setV4Address(const String8& address);
+    virtual status_t setV6Address(const String8& address);
 
     virtual status_t clearPassword();
-    virtual status_t setPassword(String8& passwd);
+    virtual status_t setPassword(const String8& passwd);
 
   private:
     class FrameListener : public CpuConsumer::FrameAvailableListener {
diff --git a/src/VNCService.h b/src/VNCService.h
new file mode 100644
index 0000000..6362798
--- /dev/null
+++ b/src/VNCService.h
@@ -0,0 +1,50 @@
+#include "org/chemlab/BnVNCService.h"
+
+#include "VNCFlinger.h"
+
+namespace android {
+
+class VNCService : public org::chemlab::BnVNCService {
+
+public:
+    VNCService(sp<VNCFlinger> flinger) : mVNC(flinger) {}
+
+    binder::Status start(bool* ret) {
+        *ret = mVNC->start();
+        return binder::Status::ok();
+    }
+
+    binder::Status stop(bool* ret) {
+        *ret = mVNC->stop() == NO_ERROR;
+        return binder::Status::ok();
+    }
+
+    binder::Status setPort(int32_t port, bool* ret) {
+        *ret = mVNC->setPort(port) == NO_ERROR;
+        return binder::Status::ok();
+    }
+
+    binder::Status setV4Address(const String16& addr, bool* ret) {
+        *ret = mVNC->setV4Address(String8(addr)) == NO_ERROR;
+        return binder::Status::ok();
+    }
+
+    binder::Status setV6Address(const String16& addr, bool* ret) {
+        *ret = mVNC->setV6Address(String8(addr)) == NO_ERROR;
+        return binder::Status::ok();
+    }
+
+    binder::Status setPassword(const String16& addr, bool* ret) {
+        *ret = mVNC->setPassword(String8(addr)) == NO_ERROR;
+        return binder::Status::ok();
+    }
+
+    binder::Status clearPassword(bool* ret) {
+        *ret = mVNC->clearPassword() == NO_ERROR;
+        return binder::Status::ok();
+    }
+
+private:
+    sp<VNCFlinger> mVNC;
+};
+};
diff --git a/src/main.cpp b/src/main.cpp
index 8ef24fb..e1e8ac1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -19,7 +19,10 @@
 #include <csignal>
 #include <iostream>
 
+#include <binder/IServiceManager.h>
+
 #include "VNCFlinger.h"
+#include "VNCService.h"
 
 using namespace android;
 
@@ -84,7 +87,7 @@
 
             case '4':
                 arg = optarg;
-                if (gVNC->setListenAddress(arg, false) != OK) {
+                if (gVNC->setV4Address(arg) != OK) {
                     std::cerr << "Failed to set IPv4 address\n";
                     exit(1);
                 }
@@ -92,14 +95,13 @@
 
             case '6':
                 arg = optarg;
-                if (gVNC->setListenAddress(arg, true) != OK) {
+                if (gVNC->setV6Address(arg) != OK) {
                     std::cerr << "Failed to set IPv6 address\n";
                     exit(1);
                 }
                 break;
 
             case 'p':
-                std::cerr << "port=" << optarg << std::endl;
                 if (gVNC->setPort(std::stoi(optarg)) != OK) {
                     std::cerr << "Failed to set port\n";
                     exit(1);
@@ -127,5 +129,8 @@
 
     parseArgs(argc, argv);
 
+    // binder interface
+    defaultServiceManager()->addService(String16("vnc"), new VNCService(gVNC));
+
     gVNC->start();
 }
