diff --git a/utils.cpp b/utils.cpp
new file mode 100644
index 0000000..4226d44
--- /dev/null
+++ b/utils.cpp
@@ -0,0 +1,73 @@
+#include "utils.hpp"
+#include <sdbusplus/server.hpp>
+#include <log.hpp>
+#include <iostream>
+
+namespace openpower
+{
+namespace vpd
+{
+
+namespace inventory
+{
+
+auto getPIMService()
+{
+    auto bus = sdbusplus::bus::new_default();
+    auto mapper =
+        bus.new_method_call(
+            "xyz.openbmc_project.ObjectMapper",
+            "/xyz/openbmc_project/ObjectMapper",
+            "xyz.openbmc_project.ObjectMapper",
+            "GetObject");
+
+    mapper.append(pimPath);
+    mapper.append(std::vector<std::string>({pimIntf}));
+
+    auto result = bus.call(mapper);
+    if(result.is_method_error())
+    {
+        throw std::runtime_error("ObjectMapper GetObject failed");
+    }
+
+    std::map<std::string, std::vector<std::string>> response;
+    result.read(response);
+    if(response.empty())
+    {
+        throw std::runtime_error("ObjectMapper GetObject bad response");
+    }
+
+    return response.begin()->first;
+}
+
+void callPIM(ObjectMap&& objects)
+{
+    std::string service;
+
+    try
+    {
+        service = getPIMService();
+        auto bus = sdbusplus::bus::new_default();
+        auto pimMsg = bus.new_method_call(
+                              service.c_str(),
+                              pimPath.c_str(),
+                              pimIntf.c_str(),
+                              "Notify");
+        pimMsg.append(std::move(objects));
+        auto result = bus.call(pimMsg);
+        if(result.is_method_error())
+        {
+            std::cerr << "PIM Notify() failed\n";
+        }
+    }
+    catch (const std::runtime_error& e)
+    {
+        using namespace phosphor::logging;
+        log<level::ERR>(e.what());
+    }
+}
+
+} // namespace inventory
+
+} //namespace vpd
+} //namespace openpower
