diff --git a/base/HidlSupport.cpp b/base/HidlSupport.cpp
index 61db8cc..6d5e428 100644
--- a/base/HidlSupport.cpp
+++ b/base/HidlSupport.cpp
@@ -280,8 +280,10 @@
 
 // ----------------------------------------------------------------------
 // HidlInstrumentor implementation.
-HidlInstrumentor::HidlInstrumentor(const std::string &prefix)
-        : mInstrumentationLibPrefix(prefix) {
+HidlInstrumentor::HidlInstrumentor(
+        const std::string &package,
+        const std::string &interface)
+        : mInstrumentationLibPackage(package), mInterfaceName(interface) {
     configureInstrumentation(false);
 }
 
@@ -335,11 +337,15 @@
                 continue;
 
             void *handle = dlopen((path + file->d_name).c_str(), RTLD_NOW);
+            char *error;
             if (handle == nullptr) {
                 LOG(WARNING) << "couldn't load file: " << file->d_name
                     << " error: " << dlerror();
                 continue;
             }
+
+            dlerror(); /* Clear any existing error */
+
             using cb_fun = void (*)(
                     const InstrumentationEvent,
                     const char *,
@@ -347,12 +353,12 @@
                     const char *,
                     const char *,
                     std::vector<void *> *);
-            auto cb = (cb_fun)dlsym(handle, "HIDL_INSTRUMENTATION_FUNCTION");
-            if (cb == nullptr) {
+            auto cb = (cb_fun)dlsym(handle,
+                    ("HIDL_INSTRUMENTATION_FUNCTION_" + mInterfaceName).c_str());
+            if ((error = dlerror()) != NULL) {
                 LOG(WARNING)
-                    << "couldn't find symbol: HIDL_INSTRUMENTATION_FUNCTION, "
-                       "error: "
-                    << dlerror();
+                    << "couldn't find symbol: HIDL_INSTRUMENTATION_FUNCTION_"
+                    << mInterfaceName << ", error: " << error;
                 continue;
             }
             instrumentationCallbacks->push_back(cb);
@@ -371,7 +377,7 @@
 #ifdef LIBHIDL_TARGET_DEBUGGABLE
     if (file->d_type != DT_REG) return false;
     std::cmatch cm;
-    std::regex e("^" + mInstrumentationLibPrefix + "(.*).profiler.so$");
+    std::regex e("^" + mInstrumentationLibPackage + "(.*).profiler.so$");
     if (std::regex_match(file->d_name, cm, e)) return true;
 #endif
     return false;
diff --git a/base/include/hidl/HidlSupport.h b/base/include/hidl/HidlSupport.h
index 3f7248c..7fb052b 100644
--- a/base/include/hidl/HidlSupport.h
+++ b/base/include/hidl/HidlSupport.h
@@ -838,7 +838,9 @@
             const char *method,
             std::vector<void *> *args)>;
 
-    explicit HidlInstrumentor(const std::string &prefix);
+    explicit HidlInstrumentor(
+            const std::string &package,
+            const std::string &insterface);
     virtual ~HidlInstrumentor();
 
  protected:
@@ -870,7 +872,10 @@
     // Flag whether to enable instrumentation.
     bool mEnableInstrumentation;
     // Prefix to lookup the instrumentation libraries.
-    std::string mInstrumentationLibPrefix;
+    std::string mInstrumentationLibPackage;
+    // Used for dlsym to load the profiling method for given interface.
+    std::string mInterfaceName;
+
 };
 
 ///////////////////// toString functions
