diff --git a/Android.mk b/Android.mk
index 9e2de52..5f52278 100644
--- a/Android.mk
+++ b/Android.mk
@@ -7,6 +7,9 @@
     src/VNCFlinger.cpp \
     src/main.cpp
 
+LOCAL_SRC_FILES += \
+    aidl/org/chemlab/IVNCService.aidl
+
 LOCAL_C_INCLUDES += \
     $(LOCAL_PATH)/src \
     external/libvncserver \
diff --git a/aidl/org/chemlab/IVNCService.aidl b/aidl/org/chemlab/IVNCService.aidl
new file mode 100644
index 0000000..5c7ac9d
--- /dev/null
+++ b/aidl/org/chemlab/IVNCService.aidl
@@ -0,0 +1,13 @@
+package org.chemlab;
+
+interface IVNCService {
+    boolean start();
+    boolean stop();
+
+    boolean setPort(int port);
+    boolean setV4Address(String addr);
+    boolean setV6Address(String addr);
+
+    boolean setPassword(String password);
+    boolean clearPassword();
+}
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();
 }
