diff --git a/Makefile.am b/Makefile.am
index 89c3cc9..de3232a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,7 +6,9 @@
 	types.hpp \
 	write.hpp \
 	impl.hpp \
-	args.hpp
+	args.hpp \
+	types.hpp \
+	utils.hpp
 
 # Be sure to build writefru.hpp before compiling
 BUILT_SOURCES = writefru.hpp
@@ -27,7 +29,8 @@
 	args.cpp \
 	impl.cpp \
 	parser.cpp \
-	write.cpp
+	write.cpp \
+	utils.cpp
 openpower_read_vpd_LDFLAGS = $(SDBUSPLUS_LIBS) $(PHOSPHOR_LOGGING_LIBS)
 openpower_read_vpd_CXXFLAGS = $(SDBUSPLUS_CFLAGS) $(PHOSPHOR_LOGGING_CFLAGS)
 
diff --git a/test/Makefile.am b/test/Makefile.am
index 0eb18ac..4e69969 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -12,6 +12,7 @@
 	parser/parser.cpp \
 	../impl.cpp \
 	../parser.cpp \
-	../write.cpp
+	../write.cpp \
+        ../utils.cpp
 parser_test_LDFLAGS = $(SDBUSPLUS_LIBS) $(PHOSPHOR_LOGGING_LIBS)
 parser_test_CXXFLAGS = $(SDBUSPLUS_CFLAGS) $(PHOSPHOR_LOGGING_CFLAGS)
diff --git a/types.hpp b/types.hpp
index 7e56eb4..d65aa70 100644
--- a/types.hpp
+++ b/types.hpp
@@ -2,6 +2,9 @@
 
 #include <climits>
 #include <vector>
+#include <string>
+#include <map>
+#include <sdbusplus/server.hpp>
 
 namespace openpower
 {
@@ -14,5 +17,25 @@
 using Byte = uint8_t;
 using Binary = std::vector<Byte>;
 
+namespace inventory
+{
+
+using Path = std::string;
+using Property = std::string;
+using Value = sdbusplus::message::variant<bool, int64_t, std::string>;
+using PropertyMap = std::map<Property, Value>;
+
+using Interface = std::string;
+using InterfaceMap = std::map<Interface, PropertyMap>;
+
+using Object = sdbusplus::message::object_path;
+using ObjectMap = std::map<Object, InterfaceMap>;
+
+using namespace std::string_literals;
+static const auto pimPath = "/xyz/openbmc_project/Inventory"s;
+static const auto pimIntf = "xyz.openbmc_project.Inventory.Manager"s;
+
+} // namespace inventory
+
 } // namespace vpd
 } // namespace openpower
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
diff --git a/utils.hpp b/utils.hpp
new file mode 100644
index 0000000..0aeeb32
--- /dev/null
+++ b/utils.hpp
@@ -0,0 +1,26 @@
+#pragma once
+
+#include "types.hpp"
+
+namespace openpower
+{
+namespace vpd
+{
+
+namespace inventory
+{
+
+/** @brief Get inventory-manager's d-bus service
+ */
+auto getPIMService();
+
+/** @brief Call inventory-manager to add objects
+ *
+ *  @param [in] objects - Map of inventory object paths
+ */
+void callPIM(ObjectMap&& objects);
+
+} // namespace inventory
+
+} //namespace vpd
+} //namespace openpower
diff --git a/writefru.mako.hpp b/writefru.mako.hpp
index 7066f9a..9275e9f 100755
--- a/writefru.mako.hpp
+++ b/writefru.mako.hpp
@@ -7,10 +7,10 @@
 
 #include <map>
 #include <iostream>
-#include <sdbusplus/server.hpp>
-#include <log.hpp>
 #include "defines.hpp"
 #include "store.hpp"
+#include "types.hpp"
+#include "utils.hpp"
 
 namespace openpower
 {
@@ -19,78 +19,6 @@
 namespace inventory
 {
 
-using Property = std::string;
-using Value = sdbusplus::message::variant<bool, int64_t, std::string>;
-using PropertyMap = std::map<Property, Value>;
-
-using Interface = std::string;
-using InterfaceMap = std::map<Interface, PropertyMap>;
-
-using Object = sdbusplus::message::object_path;
-using ObjectMap = std::map<Object, InterfaceMap>;
-
-using namespace std::string_literals;
-static const auto pimPath = "/xyz/openbmc_project/Inventory"s;
-static const auto pimIntf = "xyz.openbmc_project.Inventory.Manager"s;
-
-/** @brief Get inventory-manager's d-bus service
- */
-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;
-}
-
-auto 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());
-    }
-}
-
 /** @brief API to write parsed VPD to inventory,
  *      for a specifc FRU
  *
