diff --git a/agents/hal/RequestHandler.cpp b/agents/hal/RequestHandler.cpp
index fadc181..84851c0 100644
--- a/agents/hal/RequestHandler.cpp
+++ b/agents/hal/RequestHandler.cpp
@@ -78,6 +78,17 @@
 }
 
 
+AndroidSystemControlResponseMessage* AgentRequestHandler::SetHostInfo(
+    const int callback_port) {
+  cout << "[runner->agent] command " << __FUNCTION__ << endl;
+  callback_port_ = callback_port;
+  AndroidSystemControlResponseMessage* response_msg =
+      new AndroidSystemControlResponseMessage();
+  response_msg->set_response_code(SUCCESS);
+  return response_msg;
+}
+
+
 AndroidSystemControlResponseMessage* AgentRequestHandler::CheckStubService(
     const string& service_name) {
   cout << "[runner->agent] command " << __FUNCTION__ << endl;
@@ -216,7 +227,6 @@
   if (!client.get()) return NULL;
 
   const char* result = client->Call(call_payload);
-  //if (result) cout << "Call: " << result << endl;
 
   AndroidSystemControlResponseMessage* response_msg =
       new AndroidSystemControlResponseMessage();
@@ -284,22 +294,19 @@
       buffer[len] = '\0';
 
       AndroidSystemControlCommandMessage command_msg;
-      //for (int i = 0; i < len; i++) {
-      //  cout << int(buffer[i]) << " ";
-      //}
-      //cout << endl;
       if (!command_msg.ParseFromString(string(buffer))) {
         cerr << "can't parse the cmd" << endl;
         return -1;
       }
-      //cout << "[runner->agent] command type " << command_msg.command_type()
-      //    << endl;
 
       AndroidSystemControlResponseMessage* response_msg = NULL;
       switch (command_msg.command_type()) {
         case LIST_HALS:
           response_msg = ListHals(command_msg.paths());
           break;
+        case SET_HOST_INFO:
+          response_msg = SetHostInfo(command_msg.callback_port());
+          break;
         case CHECK_STUB_SERVICE:
           response_msg = CheckStubService(command_msg.service_name());
           break;
diff --git a/agents/hal/RequestHandler.h b/agents/hal/RequestHandler.h
index 8a9f174..acee747 100644
--- a/agents/hal/RequestHandler.h
+++ b/agents/hal/RequestHandler.h
@@ -45,6 +45,9 @@
   AndroidSystemControlResponseMessage* ListHals(
       const ::google::protobuf::RepeatedPtrField< ::std::string>& base_paths);
 
+  // for the SET_HOST_INFO command.
+  AndroidSystemControlResponseMessage* SetHostInfo(const int callback_port);
+
   // for the CHECK_STUB_SERVICE command
   AndroidSystemControlResponseMessage* CheckStubService(
       const string& service_name);
@@ -68,6 +71,8 @@
  protected:
   // the currently opened, connected service name.
   string service_name_;
+  // the port number of a host-side callback server.
+  int callback_port_;
 };
 
 }  // namespace vts
diff --git a/images/angler/32/libvts_common.so b/images/angler/32/libvts_common.so
index ea10630..ff78ec0 100755
--- a/images/angler/32/libvts_common.so
+++ b/images/angler/32/libvts_common.so
Binary files differ
diff --git a/images/angler/32/libvts_multidevice_proto.so b/images/angler/32/libvts_multidevice_proto.so
index cfbfee3..a9f057c 100755
--- a/images/angler/32/libvts_multidevice_proto.so
+++ b/images/angler/32/libvts_multidevice_proto.so
Binary files differ
diff --git a/images/angler/64/libvts_common.so b/images/angler/64/libvts_common.so
index 7dd1d4e..4a0623e 100755
--- a/images/angler/64/libvts_common.so
+++ b/images/angler/64/libvts_common.so
Binary files differ
diff --git a/images/angler/64/libvts_multidevice_proto.so b/images/angler/64/libvts_multidevice_proto.so
index c064dd4..be75a34 100755
--- a/images/angler/64/libvts_multidevice_proto.so
+++ b/images/angler/64/libvts_multidevice_proto.so
Binary files differ
diff --git a/images/angler/64/vts_hal_agent b/images/angler/64/vts_hal_agent
index 7a8421d..30799a0 100755
--- a/images/angler/64/vts_hal_agent
+++ b/images/angler/64/vts_hal_agent
Binary files differ
diff --git a/images/bullhead/32/libvts_common.so b/images/bullhead/32/libvts_common.so
index 6aa1ee6..9643ee8 100755
--- a/images/bullhead/32/libvts_common.so
+++ b/images/bullhead/32/libvts_common.so
Binary files differ
diff --git a/images/bullhead/32/libvts_multidevice_proto.so b/images/bullhead/32/libvts_multidevice_proto.so
index eb300ab..8de2556 100755
--- a/images/bullhead/32/libvts_multidevice_proto.so
+++ b/images/bullhead/32/libvts_multidevice_proto.so
Binary files differ
diff --git a/images/bullhead/64/libvts_common.so b/images/bullhead/64/libvts_common.so
index fd13c8c..ddf4e7b 100755
--- a/images/bullhead/64/libvts_common.so
+++ b/images/bullhead/64/libvts_common.so
Binary files differ
diff --git a/images/bullhead/64/libvts_multidevice_proto.so b/images/bullhead/64/libvts_multidevice_proto.so
index 5d0c371..89d1547 100755
--- a/images/bullhead/64/libvts_multidevice_proto.so
+++ b/images/bullhead/64/libvts_multidevice_proto.so
Binary files differ
diff --git a/images/bullhead/64/vts_hal_agent b/images/bullhead/64/vts_hal_agent
index 6479ff5..c2902b6 100755
--- a/images/bullhead/64/vts_hal_agent
+++ b/images/bullhead/64/vts_hal_agent
Binary files differ
diff --git a/runners/host/proto/AndroidSystemControlMessage.proto b/runners/host/proto/AndroidSystemControlMessage.proto
index c87738b..100d4db 100644
--- a/runners/host/proto/AndroidSystemControlMessage.proto
+++ b/runners/host/proto/AndroidSystemControlMessage.proto
@@ -22,6 +22,8 @@
   UNKNOWN_COMMAND_TYPE = 0;
   // To get a list of available HAL modules.
   LIST_HALS = 1;
+  // To set the host information (e.g., callback server port).
+  SET_HOST_INFO = 2;
 
   // To check whether fuzzer's binder service is available.
   CHECK_STUB_SERVICE = 101;
@@ -53,6 +55,9 @@
   // for LIST_HALS
   repeated bytes paths = 1001;
 
+  // for SET_HOST_INFO
+  optional int32 callback_port = 1101;
+
   // for CHECK_STUB_SERVICE
   // the binder service name
   optional bytes service_name = 2001;
@@ -90,13 +95,13 @@
   // The reason.
   optional bytes reason = 1001;
 
-  // for the found componet files.
+  // for the found component files.
   repeated bytes file_names = 1002;
 
-  // for the found api spec.
+  // for the found API specification.
   optional bytes spec = 1003;
 
-  // for the api call result including result value, profiling data, and
+  // for the API call result including result value, profiling data, and
   // coverage measurement data.
   optional bytes result = 1004;
 }
\ No newline at end of file
diff --git a/runners/host/proto/AndroidSystemControlMessage_pb2.py b/runners/host/proto/AndroidSystemControlMessage_pb2.py
index 2ad454f..e32b18f 100644
--- a/runners/host/proto/AndroidSystemControlMessage_pb2.py
+++ b/runners/host/proto/AndroidSystemControlMessage_pb2.py
@@ -14,7 +14,7 @@
 DESCRIPTOR = _descriptor.FileDescriptor(
   name='AndroidSystemControlMessage.proto',
   package='android.vts',
-  serialized_pb='\n!AndroidSystemControlMessage.proto\x12\x0b\x61ndroid.vts\"\x88\x02\n\"AndroidSystemControlCommandMessage\x12.\n\x0c\x63ommand_type\x18\x01 \x01(\x0e\x32\x18.android.vts.CommandType\x12\x0e\n\x05paths\x18\xe9\x07 \x03(\x0c\x12\x15\n\x0cservice_name\x18\xd1\x0f \x01(\x0c\x12\x12\n\tfile_path\x18\xb9\x17 \x01(\x0c\x12\r\n\x04\x62its\x18\xbb\x17 \x01(\x05\x12\x15\n\x0ctarget_class\x18\xbc\x17 \x01(\x05\x12\x14\n\x0btarget_type\x18\xbd\x17 \x01(\x05\x12\x17\n\x0etarget_version\x18\xbe\x17 \x01(\x05\x12\x14\n\x0bmodule_name\x18\xbf\x17 \x01(\x0c\x12\x0c\n\x03\x61rg\x18\xa1\x1f \x01(\x0c\"\x9d\x01\n#AndroidSystemControlResponseMessage\x12\x30\n\rresponse_code\x18\x01 \x01(\x0e\x32\x19.android.vts.ResponseCode\x12\x0f\n\x06reason\x18\xe9\x07 \x01(\x0c\x12\x13\n\nfile_names\x18\xea\x07 \x03(\x0c\x12\r\n\x04spec\x18\xeb\x07 \x01(\x0c\x12\x0f\n\x06result\x18\xec\x07 \x01(\x0c*\x86\x01\n\x0b\x43ommandType\x12\x18\n\x14UNKNOWN_COMMAND_TYPE\x10\x00\x12\r\n\tLIST_HALS\x10\x01\x12\x16\n\x12\x43HECK_STUB_SERVICE\x10\x65\x12\x17\n\x13LAUNCH_STUB_SERVICE\x10\x66\x12\x0e\n\tLIST_APIS\x10\xc9\x01\x12\r\n\x08\x43\x41LL_API\x10\xca\x01*@\n\x0cResponseCode\x12\x19\n\x15UNKNOWN_RESPONSE_CODE\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x08\n\x04\x46\x41IL\x10\x02')
+  serialized_pb='\n!AndroidSystemControlMessage.proto\x12\x0b\x61ndroid.vts\"\xa0\x02\n\"AndroidSystemControlCommandMessage\x12.\n\x0c\x63ommand_type\x18\x01 \x01(\x0e\x32\x18.android.vts.CommandType\x12\x0e\n\x05paths\x18\xe9\x07 \x03(\x0c\x12\x16\n\rcallback_port\x18\xcd\x08 \x01(\x05\x12\x15\n\x0cservice_name\x18\xd1\x0f \x01(\x0c\x12\x12\n\tfile_path\x18\xb9\x17 \x01(\x0c\x12\r\n\x04\x62its\x18\xbb\x17 \x01(\x05\x12\x15\n\x0ctarget_class\x18\xbc\x17 \x01(\x05\x12\x14\n\x0btarget_type\x18\xbd\x17 \x01(\x05\x12\x17\n\x0etarget_version\x18\xbe\x17 \x01(\x05\x12\x14\n\x0bmodule_name\x18\xbf\x17 \x01(\x0c\x12\x0c\n\x03\x61rg\x18\xa1\x1f \x01(\x0c\"\x9d\x01\n#AndroidSystemControlResponseMessage\x12\x30\n\rresponse_code\x18\x01 \x01(\x0e\x32\x19.android.vts.ResponseCode\x12\x0f\n\x06reason\x18\xe9\x07 \x01(\x0c\x12\x13\n\nfile_names\x18\xea\x07 \x03(\x0c\x12\r\n\x04spec\x18\xeb\x07 \x01(\x0c\x12\x0f\n\x06result\x18\xec\x07 \x01(\x0c*\x99\x01\n\x0b\x43ommandType\x12\x18\n\x14UNKNOWN_COMMAND_TYPE\x10\x00\x12\r\n\tLIST_HALS\x10\x01\x12\x11\n\rSET_HOST_INFO\x10\x02\x12\x16\n\x12\x43HECK_STUB_SERVICE\x10\x65\x12\x17\n\x13LAUNCH_STUB_SERVICE\x10\x66\x12\x0e\n\tLIST_APIS\x10\xc9\x01\x12\r\n\x08\x43\x41LL_API\x10\xca\x01*@\n\x0cResponseCode\x12\x19\n\x15UNKNOWN_RESPONSE_CODE\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x08\n\x04\x46\x41IL\x10\x02')
 
 _COMMANDTYPE = _descriptor.EnumDescriptor(
   name='CommandType',
@@ -31,26 +31,30 @@
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='CHECK_STUB_SERVICE', index=2, number=101,
+      name='SET_HOST_INFO', index=2, number=2,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='LAUNCH_STUB_SERVICE', index=3, number=102,
+      name='CHECK_STUB_SERVICE', index=3, number=101,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='LIST_APIS', index=4, number=201,
+      name='LAUNCH_STUB_SERVICE', index=4, number=102,
       options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='CALL_API', index=5, number=202,
+      name='LIST_APIS', index=5, number=201,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='CALL_API', index=6, number=202,
       options=None,
       type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=478,
-  serialized_end=612,
+  serialized_start=502,
+  serialized_end=655,
 )
 
 CommandType = enum_type_wrapper.EnumTypeWrapper(_COMMANDTYPE)
@@ -75,13 +79,14 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=614,
-  serialized_end=678,
+  serialized_start=657,
+  serialized_end=721,
 )
 
 ResponseCode = enum_type_wrapper.EnumTypeWrapper(_RESPONSECODE)
 UNKNOWN_COMMAND_TYPE = 0
 LIST_HALS = 1
+SET_HOST_INFO = 2
 CHECK_STUB_SERVICE = 101
 LAUNCH_STUB_SERVICE = 102
 LIST_APIS = 201
@@ -114,56 +119,63 @@
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='service_name', full_name='android.vts.AndroidSystemControlCommandMessage.service_name', index=2,
+      name='callback_port', full_name='android.vts.AndroidSystemControlCommandMessage.callback_port', index=2,
+      number=1101, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='service_name', full_name='android.vts.AndroidSystemControlCommandMessage.service_name', index=3,
       number=2001, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value="",
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='file_path', full_name='android.vts.AndroidSystemControlCommandMessage.file_path', index=3,
+      name='file_path', full_name='android.vts.AndroidSystemControlCommandMessage.file_path', index=4,
       number=3001, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value="",
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='bits', full_name='android.vts.AndroidSystemControlCommandMessage.bits', index=4,
+      name='bits', full_name='android.vts.AndroidSystemControlCommandMessage.bits', index=5,
       number=3003, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='target_class', full_name='android.vts.AndroidSystemControlCommandMessage.target_class', index=5,
+      name='target_class', full_name='android.vts.AndroidSystemControlCommandMessage.target_class', index=6,
       number=3004, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='target_type', full_name='android.vts.AndroidSystemControlCommandMessage.target_type', index=6,
+      name='target_type', full_name='android.vts.AndroidSystemControlCommandMessage.target_type', index=7,
       number=3005, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='target_version', full_name='android.vts.AndroidSystemControlCommandMessage.target_version', index=7,
+      name='target_version', full_name='android.vts.AndroidSystemControlCommandMessage.target_version', index=8,
       number=3006, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='module_name', full_name='android.vts.AndroidSystemControlCommandMessage.module_name', index=8,
+      name='module_name', full_name='android.vts.AndroidSystemControlCommandMessage.module_name', index=9,
       number=3007, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value="",
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='arg', full_name='android.vts.AndroidSystemControlCommandMessage.arg', index=9,
+      name='arg', full_name='android.vts.AndroidSystemControlCommandMessage.arg', index=10,
       number=4001, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value="",
       message_type=None, enum_type=None, containing_type=None,
@@ -179,7 +191,7 @@
   is_extendable=False,
   extension_ranges=[],
   serialized_start=51,
-  serialized_end=315,
+  serialized_end=339,
 )
 
 
@@ -234,8 +246,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=318,
-  serialized_end=475,
+  serialized_start=342,
+  serialized_end=499,
 )
 
 _ANDROIDSYSTEMCONTROLCOMMANDMESSAGE.fields_by_name['command_type'].enum_type = _COMMANDTYPE
diff --git a/runners/host/tcp_client/vts_tcp_client.py b/runners/host/tcp_client/vts_tcp_client.py
index 4a5ee9f..7d38439 100755
--- a/runners/host/tcp_client/vts_tcp_client.py
+++ b/runners/host/tcp_client/vts_tcp_client.py
@@ -29,6 +29,7 @@
 TARGET_PORT = os.environ.get("TARGET_PORT", 5001)
 _SOCKET_CONN_TIMEOUT_SECS = 60
 COMMAND_TYPE_NAME = {1: "LIST_HALS",
+                     2: "SET_HOST_INFO",
                      101: "CHECK_STUB_SERVICE",
                      102: "LAUNCH_STUB_SERVICE",
                      201: "LIST_APIS",
@@ -53,15 +54,22 @@
         self.channel = None
         self._mode = mode
 
-    def Connect(self, ip=TARGET_IP, port=TARGET_PORT):
+    def Connect(self, ip=TARGET_IP, port=TARGET_PORT,
+                callback_port=None):
         """Connects to a target device.
 
         Args:
-            ip: string, the IP adress of a target device.
-            port: integer, the TCP port.
+            ip: string, the IP address of a target device.
+            port: int, the TCP port which can be used to connect to
+                  a target device.
+            callback_port: int, the TCP port number of a host-side callback
+                           server.
+
+        Returns:
+            True if success, False otherwise
 
         Raises:
-            Exception when the connection fails.
+            socket.error when the connection fails.
         """
         try:
             # TODO: This assumption is incorrect. Need to fix.
@@ -81,6 +89,14 @@
             raise
         self.channel = self.connection.makefile(mode="brw")
 
+        if callback_port is not None:
+            self.SendCommand(SysMsg_pb2.SET_HOST_INFO,
+                             callback_port=callback_port)
+            resp = self.RecvResponse()
+            if (resp.response_code != SysMsg_pb2.SUCCESS):
+                return False
+        return True
+
     def Disconnect(self):
         """Disconnects from the target device.
 
@@ -159,13 +175,14 @@
                     target_version=None,
                     module_name=None,
                     service_name=None,
+                    callback_port=None,
                     arg=None):
         """Sends a command.
 
         Args:
             command_type: integer, the command type.
-            target_name: string, the target name.
-            paths: a list of strings.
+            each of the other args are to fill in a field in
+            AndroidSystemControlCommandMessage.
         """
         if not self.channel:
             raise VtsTcpError("channel is None, unable to send command.")
@@ -174,6 +191,8 @@
         command_msg.command_type = command_type
         logging.info("sending a command (type %s)",
                      COMMAND_TYPE_NAME[command_type])
+        if command_type == 202:
+            logging.info("target API: %s", arg)
 
         if target_class is not None:
             command_msg.target_class = target_class
@@ -199,6 +218,9 @@
         if bits is not None:
             command_msg.bits = bits
 
+        if callback_port is not None:
+            command_msg.callback_port = callback_port
+
         if arg is not None:
             command_msg.arg = arg
 
@@ -214,7 +236,7 @@
         try:
             header = self.channel.readline()
             len = int(header.strip("\n"))
-            logging.debug("resp %d bytes", len)
+            logging.info("resp %d bytes", len)
             data = self.channel.read(len)
             response_msg = SysMsg_pb2.AndroidSystemControlResponseMessage()
             response_msg.ParseFromString(data)
diff --git a/runners/host/tcp_server/Android.mk b/runners/host/tcp_server/Android.mk
index a858ed0..cfce96a 100644
--- a/runners/host/tcp_server/Android.mk
+++ b/runners/host/tcp_server/Android.mk
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-the_py_script = tcp_server_test.py
+the_py_script = vts_tcp_server_test.py
 PRIVATE_PY_SCRIPT := $(the_py_script)
 
 default:
diff --git a/runners/host/tcp_server/__init__.py b/runners/host/tcp_server/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/runners/host/tcp_server/__init__.py
diff --git a/runners/host/tcp_server/tcp_server.py b/runners/host/tcp_server/vts_tcp_server.py
similarity index 94%
rename from runners/host/tcp_server/tcp_server.py
rename to runners/host/tcp_server/vts_tcp_server.py
index 673740a..2292f8e 100644
--- a/runners/host/tcp_server/tcp_server.py
+++ b/runners/host/tcp_server/vts_tcp_server.py
@@ -58,7 +58,7 @@
         self.request.sendall(response)  # send the response back to client
 
 
-class ThreadedTCPServer(object):
+class VtsTcpServer(object):
     """This class creates TCPServer in separate thread.
 
     Attributes:
@@ -90,7 +90,6 @@
             None or callback_func is None; else returns True after inserting
             the key-func_id and value-callback_func.
         """
-
         if func_id is None or func_id in _functions or callback_func is None:
             return False
         else:
@@ -108,7 +107,6 @@
             Returns false if func_id is not present in the dictionary -
                 _functions, else return True after removing it from dict.
         """
-
         if func_id is None or func_id not in _functions:
             return False
         else:
@@ -123,6 +121,9 @@
                   is zero, in which case a free port will be chosen
                   automatically.
 
+        Returns:
+            IP Address, port number
+
         Raises:
             TcpServerCreationError: Error occurred while starting server.
         """
@@ -134,21 +135,21 @@
 
             # Start a thread with the server -- that thread will then start one
             # more thread for each request
-            server_thread = threading.Thread(target = self._server.serve_forever)
+            server_thread = threading.Thread(target=self._server.serve_forever)
 
             # Exit the server thread when the main thread terminates
             server_thread.daemon = True
             server_thread.start()
-            logging.info('Server loop running in thread: %s', server_thread.name)
+            logging.info('TcpServer %s started (%s:%s)',
+                         server_thread.name, self._IP_address, self._port_used)
 
+            return self._IP_address, self._port_used
         except (RuntimeError, IOError, socket_error) as e:
             logging.exception(e)
             raise TcpServerCreationError('TcpServerCreationError occurred.')
 
     def Stop(self):
         """This function calls stop server to stop the server instance."""
-
-        # stop the server instance
         self._server.shutdown
         self._server.server_close()
 
diff --git a/runners/host/tcp_server/tcp_server_test.py b/runners/host/tcp_server/vts_tcp_server_test.py
similarity index 76%
rename from runners/host/tcp_server/tcp_server_test.py
rename to runners/host/tcp_server/vts_tcp_server_test.py
index fd80294..02b24d3 100644
--- a/runners/host/tcp_server/tcp_server_test.py
+++ b/runners/host/tcp_server/vts_tcp_server_test.py
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 import socket
-from tcp_server import ThreadedTCPServer
+from vts_tcp_server import VtsTcpServer
 import unittest
 import logging
 import errno
@@ -35,24 +35,24 @@
     correct error when we try to connect to server from a wrong port.
 
     Attributes:
-        _thread_tcp_server: an instance of ThreadedTCPServer that is used to
+        _thread_tcp_server: an instance of VtsTcpServer that is used to
                             start and stop the TCP server.
     """
     _thread_tcp_server = None
 
     def setUp(self):
-        """This function initiates starting the server in ThreadedTCPServer."""
+        """This function initiates starting the server in VtsTcpServer."""
 
-        self._thread_tcp_server = ThreadedTCPServer()
+        self._thread_tcp_server = VtsTcpServer()
         self._thread_tcp_server.Start()  # To start the server
 
     def tearDown(self):
         """To initiate shutdown of the server.
 
-        This function calls the tcp_server.ThreadedTCPServer.Stop which
+        This function calls the tcp_server.VtsTcpServer.Stop which
         shutdowns the server.
         """
-        self._thread_tcp_server.Stop()  # calls tcp_server.ThreadedTCPServer.Stop
+        self._thread_tcp_server.Stop()  # calls tcp_server.VtsTcpServer.Stop
 
     def DoErrorCase(self):
         """Unit test for Error case.
@@ -87,47 +87,47 @@
             sock.close()
 
     def ConnectToServer(self, func_id):
-      """This function creates a connection to TCP server and sends/receives
-          message.
+        """This function creates a connection to TCP server and sends/receives
+            message.
 
-      Args:
-          func_id: This is the unique key corresponding to a function and also
-              the data that we send to the server.
+        Args:
+            func_id: This is the unique key corresponding to a function and also
+                the data that we send to the server.
 
-      Returns:
-          received: String corresponding to the message that's received from
-              the server.
+        Returns:
+            received: String corresponding to the message that's received from
+                the server.
 
-      Raises:
-          TcpServerConnectionError: Exception occurred while stopping server.
-      """
-      data = func_id
-      received = ""
+        Raises:
+            TcpServerConnectionError: Exception occurred while stopping server.
+        """
+        data = func_id
+        received = ""
 
-      # Create a socket (SOCK_STREAM means a TCP socket)
-      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-      sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-      host = self._thread_tcp_server.GetIPAddress()
-      port = self._thread_tcp_server.GetPortUsed()
-      logging.info('Sending Request to host: %s ,using port: %s ', host, port)
+        # Create a socket (SOCK_STREAM means a TCP socket)
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        host = self._thread_tcp_server.GetIPAddress()
+        port = self._thread_tcp_server.GetPortUsed()
+        logging.info('Sending Request to host: %s ,using port: %s ', host, port)
 
-      try:
-          # Connect to server and send data
-          sock.connect((host, port))
-          sock.sendall(data + "\n")
+        try:
+            # Connect to server and send data
+            sock.connect((host, port))
+            sock.sendall(data + "\n")
 
-          # Receive data from the server and shut down
-          received = sock.recv(1024)
-          logging.info('Request sent')
-      except socket_error as e:
-          logging.error(e)
-          raise TcpServerConnectionError('Exception occurred.')
-      finally:
-          sock.close()
-      logging.info('Sent : %s', data)
-      logging.info('Received : %s', received)
+            # Receive data from the server and shut down
+            received = sock.recv(1024)
+            logging.info('Request sent')
+        except socket_error as e:
+            logging.error(e)
+            raise TcpServerConnectionError('Exception occurred.')
+        finally:
+            sock.close()
+        logging.info('Sent : %s', data)
+        logging.info('Received : %s', received)
 
-      return received
+        return received
 
     def test_DoErrorCase(self):
         """ Unit test for error cases."""
@@ -223,4 +223,3 @@
 if __name__ == '__main__':
     # Test the code
     unittest.main()
-
diff --git a/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp b/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp
index a8cbe30..39acabe 100644
--- a/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp
+++ b/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp
@@ -370,7 +370,7 @@
     }
     DIR* srcdir = opendir(product_path);
     if (!srcdir) {
-      cerr << "couln't open " << product_path << endl;
+      cerr << __func__ << " couln't open " << product_path << endl;
       return;
     }
 
@@ -405,7 +405,7 @@
     }
     srcdir = opendir(module_basepath);
     if (!srcdir) {
-      cerr << "couln't open " << module_basepath << endl;
+      cerr << __func__ << " couln't open " << module_basepath << endl;
       return;
     }
 
@@ -463,7 +463,7 @@
   }
   DIR* srcdir = opendir(gcov_output_basepath_);
   if (!srcdir) {
-    cerr << "couln't open " << gcov_output_basepath_ << endl;
+    cerr << __func__ << " couln't open " << gcov_output_basepath_ << endl;
     return NULL;
   }
 
diff --git a/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp b/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp
index 3ef916f..59c39f0 100644
--- a/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp
+++ b/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp
@@ -232,9 +232,10 @@
 
   void* result;
   func_fuzzer->FunctionCallBegin();
-  cout << __func__ << " Call Function " << func_msg->name() << endl;
+  cout << __func__ << " Call Function " << func_msg->name() << " parent_path("
+      << func_msg->parent_path() << ")" << endl;
   if (!func_fuzzer->Fuzz(func_msg, &result, agent_port_)) {
-    cout << __func__ << " function not found - todo handle more explicitly" << endl;
+    cerr << __func__ << " function not found - todo handle more explicitly" << endl;
     return *(new string("error"));
   }
   cout << __func__ << ": called" << endl;
diff --git a/testcases/host/sample/SampleCameraTest.py b/testcases/host/sample/SampleCameraTest.py
index 8fc7440..52eb3d7 100644
--- a/testcases/host/sample/SampleCameraTest.py
+++ b/testcases/host/sample/SampleCameraTest.py
@@ -32,11 +32,11 @@
                                          target_basepaths=["/data/local/tmp/32/hal"],
                                          bits=32)
 
-    def testCameraOpenFirst(self):
+    def TestCameraOpenFirst(self):
         """A simple testcase which just calls an open function."""
         self.dut.hal.camera.common.methods.open()  # note args are skipped
 
-    def testCameraInit(self):
+    def TestCameraInit(self):
         """A simple testcase which just calls an init function."""
         self.dut.hal.camera.init()  # expect an exception? (can be undefined)
 
@@ -56,6 +56,9 @@
         def torch_mode_status_change():
             logging.info("torch_mode_status_change")
 
+        my_callback = self.dut.hal.camera.camera_module_callbacks_t(
+            camera_device_status_change, torch_mode_status_change)
+        self.dut.hal.camera.set_callbacks(my_callback)
         self.dut.hal.camera.common.methods.open()  # note args are skipped
 
 
diff --git a/utils/python/mirror/hal_mirror.py b/utils/python/mirror/hal_mirror.py
index c01e2fa..d60cc66 100644
--- a/utils/python/mirror/hal_mirror.py
+++ b/utils/python/mirror/hal_mirror.py
@@ -22,6 +22,7 @@
 from vts.runners.host import errors
 from vts.runners.host.proto import InterfaceSpecificationMessage_pb2 as IfaceSpecMsg
 from vts.runners.host.tcp_client import vts_tcp_client
+from vts.runners.host.tcp_server import vts_tcp_server
 from vts.utils.python.mirror import mirror_object
 
 COMPONENT_CLASS_DICT = {"hal_conventional": 1,
@@ -45,16 +46,20 @@
     This class holds and manages the life cycle of multiple mirror objects that
     map to different HAL components.
 
-    One can use this class to create and des
+    One can use this class to create and destroy a HAL mirror object.
 
     Attributes:
-        hal_level_mirrors: dict, key is HAL handler name, value is HAL
-                           mirror object.
-        host_port: int, the port number on the host side to use.
+        _hal_level_mirrors: dict, key is HAL handler name, value is HAL
+                            mirror object.
+        _host_port: int, the port number on the host side to use.
+        _callback_server: the instance of a callback server.
+        _callback_port: int, the port number of a host-side callback server.
     """
     def __init__(self, host_port):
         self._hal_level_mirrors = {}
         self._host_port = host_port
+        self._callback_server = None
+        self._callback_port = 0
 
     def __del__(self):
         for hal_mirror_name in self._hal_level_mirrors:
@@ -147,7 +152,10 @@
         if bits not in [32, 64]:
             raise error.ComponentLoadingError("Invalid value for bits: %s" % bits)
         client = vts_tcp_client.VtsTcpClient()
-        client.Connect(port=self._host_port)
+        callback_server = vts_tcp_server.VtsTcpServer()
+        _, self._callback_port = callback_server.Start()
+        client.Connect(port=self._host_port,
+                       callback_port=self._callback_port)
         if not handler_name:
             handler_name = target_type
         service_name = "vts_binder_%s" % handler_name
@@ -200,7 +208,8 @@
         text_format.Merge(found_api_spec, if_spec_msg)
 
         # Instantiate a MirrorObject and return it.
-        hal_mirror = mirror_object.MirrorObject(client, if_spec_msg)
+        hal_mirror = mirror_object.MirrorObject(client, if_spec_msg,
+                                                callback_server)
         self._hal_level_mirrors[handler_name] = hal_mirror
 
     def __getattr__(self, name):
diff --git a/utils/python/mirror/mirror_object.py b/utils/python/mirror/mirror_object.py
index f4f26e0..df8b7d2 100644
--- a/utils/python/mirror/mirror_object.py
+++ b/utils/python/mirror/mirror_object.py
@@ -26,9 +26,12 @@
 # a dict containing the IDs of the registered function pointers.
 _function_pointer_id_dict = {}
 
+
 class MirrorObjectError(Exception):
+    """Raised when there is a general error in manipulating a mirror object."""
     pass
 
+
 class MirrorObject(object):
     """The class that mirrors objects on the native side.
 
@@ -39,12 +42,14 @@
         _client: the TCP client instance.
         _if_spec_msg: the interface specification message of a host object to
                       mirror.
+        _callback_server: the instance of a callback server.
         _parent_path: the name of a sub struct this object mirrors.
     """
 
-    def __init__(self, client, msg, parent_path=None):
+    def __init__(self, client, msg, callback_server, parent_path=None):
         self._client = client
         self._if_spec_msg = msg
+        self._callback_server = callback_server
         self._parent_path = parent_path
 
     def GetFunctionPointerID(self, function_pointer):
@@ -56,7 +61,9 @@
             if not max_num or key > max_num:
                 max_num = key
         _function_pointer_id_dict[max_num + 1] = function_pointer
-        return str(max_num + 1)
+        id = str(max_num + 1)
+        self._callback_server.RegisterCallback(id, function_pointer)
+        return id
 
     def OpenConventionalHal(self, module_name=None):
         """Opens the target conventional HAL component.
@@ -322,7 +329,9 @@
                 parent_name = "%s.%s" % (self._parent_path, api_name)
             else:
                 parent_name = api_name
-            return MirrorObject(self._client, struct_msg, parent_name)
+            return MirrorObject(self._client, struct_msg,
+                                self._callback_server,
+                                parent_path=parent_name)
 
         # handle attributes.
         fuzz = False
