diff --git a/adapter/HidlBinderAdapter.cpp b/adapter/HidlBinderAdapter.cpp
index 71c9a8c..d368fca 100644
--- a/adapter/HidlBinderAdapter.cpp
+++ b/adapter/HidlBinderAdapter.cpp
@@ -37,10 +37,14 @@
 const static std::string kDeactivateProp = "test.hidl.adapters.deactivated";
 
 int usage(const std::string& me) {
-    std::cerr << "usage: " << me << " [-p] interface-name instance-name number-of-threads."
+    std::cerr << "usage: " << me
+              << " [-p] [-n instance-name] interface-name instance-name number-of-threads."
               << std::endl;
     std::cerr << "    -p: stop based on property " << kDeactivateProp << "and reset it."
               << std::endl;
+    std::cerr
+        << "    -n instance-name: register as a different instance name (does not de-register)"
+        << std::endl;
     return EINVAL;
 }
 
@@ -49,16 +53,21 @@
     std::string interface;     // e.x. IFoo
     std::string instanceName;  // e.x. default
     int threadNumber;
+    std::string registerInstanceName;  // e.x. default
 };
 
 bool processArguments(int argc, char** argv, Args* args) {
     int c;
-    while ((c = getopt(argc, argv, "p")) != -1) {
+    while ((c = getopt(argc, argv, "pn:")) != -1) {
         switch (c) {
             case 'p': {
                 args->propertyStop = true;
                 break;
             }
+            case 'n': {
+                args->registerInstanceName = optarg;
+                break;
+            }
             default: { return false; }
         }
     }
@@ -83,6 +92,10 @@
         return false;
     }
 
+    if (args->registerInstanceName.empty()) {
+        args->registerInstanceName = args->instanceName;
+    }
+
     return true;
 }
 
@@ -121,7 +134,8 @@
         return 1;
     }
 
-    std::cout << "Trying to adapt down " << interfaceName << "/" << args.instanceName << std::endl;
+    std::cout << "Trying to adapt down " << interfaceName << "/" << args.instanceName << " to "
+              << args.registerInstanceName << std::endl;
 
     configureRpcThreadpool(args.threadNumber, false /* callerWillJoin */);
 
@@ -143,7 +157,7 @@
         return 1;
     }
 
-    bool replaced = manager->add(args.instanceName, adapter).withDefault(false);
+    bool replaced = manager->add(args.registerInstanceName, adapter).withDefault(false);
     if (!replaced) {
         std::cerr << "ERROR: could not register the service with the service manager." << std::endl;
         return 1;
@@ -157,11 +171,14 @@
         getchar();
     }
 
-    bool restored = manager->add(args.instanceName, implementation).withDefault(false);
-    if (!restored) {
-        std::cerr << "ERROR: could not re-register interface with the service manager."
-                  << std::endl;
-        return 1;
+    // automatically unregistered on process exit if it is a new instance name
+    if (args.registerInstanceName == args.instanceName) {
+        bool restored = manager->add(args.instanceName, implementation).withDefault(false);
+        if (!restored) {
+            std::cerr << "ERROR: could not re-register interface with the service manager."
+                      << std::endl;
+            return 1;
+        }
     }
 
     std::cout << "Success." << std::endl;
