diff --git a/src/main.cpp b/src/main.cpp
index 6644c79..2b8a0aa 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2,6 +2,11 @@
 #include <utils/Log.h>
 
 #include <fcntl.h>
+#include <fstream>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
 
 #include "AndroidDesktop.h"
 
@@ -22,13 +27,22 @@
 
 static char* gProgramName;
 static bool gCaughtSignal = false;
-
+static std::string mPidFile;
 static rfb::IntParameter rfbport("rfbport", "TCP port to listen for RFB protocol", 5900);
 
 static void printVersion(FILE* fp) {
     fprintf(fp, "VNCFlinger 1.0");
 }
 
+static void CleanupSignalHandler(int)
+{
+    ALOGI("You killed me - cleaning up");
+    if (mPidFile.length() != 0) {
+        remove(mPidFile.c_str());
+    }
+    exit(1);
+}
+
 static void usage() {
     printVersion(stderr);
     fprintf(stderr, "\nUsage: %s [<parameters>]\n", gProgramName);
@@ -53,6 +67,12 @@
 
     rfb::Configuration::enableServerParams();
 
+#ifdef SIGHUP
+    signal(SIGHUP, CleanupSignalHandler);
+#endif
+    signal(SIGINT, CleanupSignalHandler);
+    signal(SIGTERM, CleanupSignalHandler);
+
     for (int i = 1; i < argc; i++) {
         if (rfb::Configuration::setParam(argv[i])) continue;
 
@@ -63,6 +83,13 @@
                     continue;
                 }
             }
+            if (strcmp(argv[i], "-pid") == 0) {
+                if (i + 1 < argc) {
+                    mPidFile = std::string(argv[i + 1]);
+                    i++;
+                    continue;
+                }
+            }
             if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "-version") == 0 ||
                 strcmp(argv[i], "--version") == 0) {
                 printVersion(stdout);
@@ -77,7 +104,7 @@
     self->startThreadPool();
 
     std::list<network::SocketListener*> listeners;
-
+    int ret = 0;
     try {
         sp<AndroidDesktop> desktop = new AndroidDesktop();
         rfb::VNCServerST server("vncflinger", desktop.get());
@@ -88,6 +115,15 @@
 
         ALOGI("Listening on port %d", (int)rfbport);
 
+        if (mPidFile.length() != 0) {
+            // write a pid file
+            ALOGI("pid file %s", mPidFile.c_str());
+            pid_t pid = getpid();
+            std::ofstream outfile(mPidFile);
+            outfile << pid;
+            outfile.close();
+        }
+
         while (!gCaughtSignal) {
             int wait_ms;
             struct timeval tv;
@@ -170,9 +206,14 @@
                 desktop->processFrames();
             }
         }
-
+        ret = 0;
     } catch (rdr::Exception& e) {
         ALOGE("%s", e.str());
-        return 1;
+        ret = 1;
     }
+    ALOGI("Bye - cleaning up");
+    if (mPidFile.length() != 0) {
+        remove(mPidFile.c_str());
+    }
+    return ret;
 }
