diff --git a/common_utility.cpp b/common_utility.cpp
new file mode 100644
index 0000000..5a12b6c
--- /dev/null
+++ b/common_utility.cpp
@@ -0,0 +1,75 @@
+#include "common_utility.hpp"
+
+#include "const.hpp"
+
+#include <iostream>
+#include <phosphor-logging/log.hpp>
+
+namespace openpower
+{
+namespace vpd
+{
+namespace common
+{
+namespace utility
+{
+using namespace constants;
+using namespace inventory;
+using namespace phosphor::logging;
+
+std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
+                       const std::string& interface)
+{
+    auto mapper = bus.new_method_call(mapperDestination, mapperObjectPath,
+                                      mapperInterface, "GetObject");
+    mapper.append(path, std::vector<std::string>({interface}));
+
+    std::map<std::string, std::vector<std::string>> response;
+    try
+    {
+        auto reply = bus.call(mapper);
+        reply.read(response);
+    }
+    catch (const sdbusplus::exception::SdBusError& e)
+    {
+        log<level::ERR>("D-Bus call exception",
+                        entry("OBJPATH=%s", mapperObjectPath),
+                        entry("INTERFACE=%s", mapperInterface),
+                        entry("EXCEPTION=%s", e.what()));
+
+        throw std::runtime_error("Service name is not found");
+    }
+
+    if (response.empty())
+    {
+        throw std::runtime_error("Service name response is empty");
+    }
+
+    return response.begin()->first;
+}
+
+void callPIM(ObjectMap&& objects)
+{
+    try
+    {
+        auto bus = sdbusplus::bus::new_default();
+        auto service = getService(bus, pimPath, pimIntf);
+        auto pimMsg =
+            bus.new_method_call(service.c_str(), pimPath, pimIntf, "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)
+    {
+        log<level::ERR>(e.what());
+    }
+}
+
+} // namespace utility
+} // namespace common
+} // namespace vpd
+} // namespace openpower
\ No newline at end of file
diff --git a/common_utility.hpp b/common_utility.hpp
new file mode 100644
index 0000000..15e2f2c
--- /dev/null
+++ b/common_utility.hpp
@@ -0,0 +1,31 @@
+#pragma once
+#include "types.hpp"
+
+namespace openpower
+{
+namespace vpd
+{
+namespace common
+{
+namespace utility
+{
+
+/** @brief Api to Get d-bus service for given interface
+ *  @param[in] bus - Bus object
+ *  @param[in] path - object path of the service
+ *  @param[in] interface - interface under the object path
+ *  @return service name
+ */
+std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
+                       const std::string& interface);
+
+/** @brief Call inventory-manager to add objects
+ *
+ *  @param [in] objects - Map of inventory object paths
+ */
+void callPIM(inventory::ObjectMap&& objects);
+
+} // namespace utility
+} // namespace common
+} // namespace vpd
+} // namespace openpower
\ No newline at end of file
diff --git a/const.hpp b/const.hpp
index 5c67968..8130334 100644
--- a/const.hpp
+++ b/const.hpp
@@ -125,6 +125,17 @@
     FAILED = -1
 };
 } // namespace eccStatus
+
+/**
+ * @brief Types of VPD
+ */
+enum vpdType
+{
+    IPZ_VPD,           /**< IPZ VPD type */
+    KEYWORD_VPD,       /**< Keyword VPD type */
+    MEMORY_VPD,        /**< Memory VPD type */
+    INVALID_VPD_FORMAT /**< Invalid VPD type */
+};
 } // namespace constants
 } // namespace vpd
 } // namespace openpower
diff --git a/ibm_vpd_app.cpp b/ibm_vpd_app.cpp
index 7eddeba..c677ba2 100644
--- a/ibm_vpd_app.cpp
+++ b/ibm_vpd_app.cpp
@@ -1,11 +1,12 @@
 #include "config.h"
 
+#include "common_utility.hpp"
 #include "defines.hpp"
+#include "ibm_vpd_utils.hpp"
 #include "ipz_parser.hpp"
 #include "keyword_vpd_parser.hpp"
 #include "memory_vpd_parser.hpp"
 #include "parser_factory.hpp"
-#include "utils.hpp"
 #include "vpd_exceptions.hpp"
 
 #include <assert.h>
@@ -913,7 +914,7 @@
     }
 
     // Notify PIM
-    inventory::callPIM(move(objects));
+    common::utility::callPIM(move(objects));
 }
 
 int main(int argc, char** argv)
diff --git a/utils.cpp b/ibm_vpd_utils.cpp
similarity index 84%
rename from utils.cpp
rename to ibm_vpd_utils.cpp
index 69fbe6e..d691c84 100644
--- a/utils.cpp
+++ b/ibm_vpd_utils.cpp
@@ -1,12 +1,14 @@
 #include "config.h"
 
-#include "utils.hpp"
+#include "ibm_vpd_utils.hpp"
 
+#include "common_utility.hpp"
 #include "defines.hpp"
 #include "vpd_exceptions.hpp"
 
 #include <fstream>
 #include <iomanip>
+#include <nlohmann/json.hpp>
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/server.hpp>
@@ -26,61 +28,10 @@
 using namespace sdbusplus::xyz::openbmc_project::Common::Error;
 using namespace record;
 using namespace openpower::vpd::exceptions;
+using namespace common::utility;
 namespace inventory
 {
 
-std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
-                       const std::string& interface)
-{
-    auto mapper = bus.new_method_call(mapperDestination, mapperObjectPath,
-                                      mapperInterface, "GetObject");
-    mapper.append(path, std::vector<std::string>({interface}));
-
-    std::map<std::string, std::vector<std::string>> response;
-    try
-    {
-        auto reply = bus.call(mapper);
-        reply.read(response);
-    }
-    catch (const sdbusplus::exception::SdBusError& e)
-    {
-        log<level::ERR>("D-Bus call exception",
-                        entry("OBJPATH=%s", mapperObjectPath),
-                        entry("INTERFACE=%s", mapperInterface),
-                        entry("EXCEPTION=%s", e.what()));
-
-        throw std::runtime_error("Service name is not found");
-    }
-
-    if (response.empty())
-    {
-        throw std::runtime_error("Service name response is empty");
-    }
-
-    return response.begin()->first;
-}
-
-void callPIM(ObjectMap&& objects)
-{
-    try
-    {
-        auto bus = sdbusplus::bus::new_default();
-        auto service = getService(bus, pimPath, pimIntf);
-        auto pimMsg =
-            bus.new_method_call(service.c_str(), pimPath, pimIntf, "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)
-    {
-        log<level::ERR>(e.what());
-    }
-}
-
 MapperResponse
     getObjectSubtreeForInterfaces(const std::string& root, const int32_t depth,
                                   const std::vector<std::string>& interfaces)
@@ -111,35 +62,6 @@
 
 } // namespace inventory
 
-vpdType vpdTypeCheck(const Binary& vpdVector)
-{
-    // Read first 3 Bytes to check the 11S bar code format
-    std::string is11SFormat = "";
-    for (uint8_t i = 0; i < FORMAT_11S_LEN; i++)
-    {
-        is11SFormat += vpdVector[MEMORY_VPD_DATA_START + i];
-    }
-
-    if (vpdVector[IPZ_DATA_START] == KW_VAL_PAIR_START_TAG)
-    {
-        // IPZ VPD FORMAT
-        return vpdType::IPZ_VPD;
-    }
-    else if (vpdVector[KW_VPD_DATA_START] == KW_VPD_START_TAG)
-    {
-        // KEYWORD VPD FORMAT
-        return vpdType::KEYWORD_VPD;
-    }
-    else if (is11SFormat.compare(MEMORY_VPD_START_TAG) == 0)
-    {
-        // Memory VPD format
-        return vpdType::MEMORY_VPD;
-    }
-
-    // INVALID VPD FORMAT
-    return vpdType::INVALID_VPD_FORMAT;
-}
-
 LE2ByteData readUInt16LE(Binary::const_iterator iterator)
 {
     LE2ByteData lowByte = *iterator;
@@ -346,5 +268,34 @@
     return present;
 }
 
+vpdType vpdTypeCheck(const Binary& vpdVector)
+{
+    // Read first 3 Bytes to check the 11S bar code format
+    std::string is11SFormat = "";
+    for (uint8_t i = 0; i < FORMAT_11S_LEN; i++)
+    {
+        is11SFormat += vpdVector[MEMORY_VPD_DATA_START + i];
+    }
+
+    if (vpdVector[IPZ_DATA_START] == KW_VAL_PAIR_START_TAG)
+    {
+        // IPZ VPD FORMAT
+        return vpdType::IPZ_VPD;
+    }
+    else if (vpdVector[KW_VPD_DATA_START] == KW_VPD_START_TAG)
+    {
+        // KEYWORD VPD FORMAT
+        return vpdType::KEYWORD_VPD;
+    }
+    else if (is11SFormat.compare(MEMORY_VPD_START_TAG) == 0)
+    {
+        // Memory VPD format
+        return vpdType::MEMORY_VPD;
+    }
+
+    // INVALID VPD FORMAT
+    return vpdType::INVALID_VPD_FORMAT;
+}
+
 } // namespace vpd
 } // namespace openpower
diff --git a/utils.hpp b/ibm_vpd_utils.hpp
similarity index 80%
rename from utils.hpp
rename to ibm_vpd_utils.hpp
index 94f4992..e21f13d 100644
--- a/utils.hpp
+++ b/ibm_vpd_utils.hpp
@@ -4,7 +4,6 @@
 #include "types.hpp"
 
 #include <iostream>
-#include <nlohmann/json.hpp>
 
 using namespace std;
 
@@ -12,26 +11,6 @@
 {
 namespace vpd
 {
-/**
- * @brief Types of VPD
- */
-enum vpdType
-{
-    IPZ_VPD,           /**< IPZ VPD type */
-    KEYWORD_VPD,       /**< Keyword VPD type */
-    MEMORY_VPD,        /**< Memory VPD type */
-    INVALID_VPD_FORMAT /**< Invalid VPD type */
-};
-
-/**
- * @brief Check the type of VPD.
- *
- * Checks the type of vpd based on the start tag.
- * @param[in] vector - Vpd data in vector format
- *
- * @return enum of type vpdType
- */
-vpdType vpdTypeCheck(const Binary& vector);
 
 /** @brief Return the hex representation of the incoming byte
  *
@@ -46,22 +25,6 @@
 
 namespace inventory
 {
-
-/** @brief Api to Get d-bus service for given interface
- *  @param[in] - Bus object
- *  @param[in] - object path of the service
- *  @param[in] - interface under the object path
- *  @return service name
- */
-std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
-                       const std::string& interface);
-
-/** @brief Call inventory-manager to add objects
- *
- *  @param [in] objects - Map of inventory object paths
- */
-void callPIM(ObjectMap&& objects);
-
 /** @brief Api to obtain a dictionary of path -> services
  * where path is in subtree and services is of the type
  * returned by the GetObject method.
@@ -139,5 +102,15 @@
  */
 bool isRecKwInDbusJson(const std::string& record, const std::string& keyword);
 
+/**
+ * @brief Check the type of VPD.
+ *
+ * Checks the type of vpd based on the start tag.
+ * @param[in] vector - Vpd data in vector format
+ *
+ * @return enum of type vpdType
+ */
+constants::vpdType vpdTypeCheck(const Binary& vector);
+
 } // namespace vpd
 } // namespace openpower
diff --git a/impl.cpp b/impl.cpp
index d8a6138..a0a45d9 100644
--- a/impl.cpp
+++ b/impl.cpp
@@ -2,7 +2,7 @@
 
 #include "const.hpp"
 #include "defines.hpp"
-#include "utils.hpp"
+#include "ibm_vpd_utils.hpp"
 #include "vpd_exceptions.hpp"
 
 #include <algorithm>
diff --git a/meson.build b/meson.build
index 1a44195..e05edc3 100644
--- a/meson.build
+++ b/meson.build
@@ -52,11 +52,11 @@
                        }
   )
 
-common_SOURCES =[
+common_SOURCES =['common_utility.cpp',
 'vpd-parser/parser_factory.cpp',
                  'vpd-parser/memory_vpd_parser.cpp',
                  'vpd-parser/keyword_vpd_parser.cpp',
-                 'vpd-parser/ipz_parser.cpp', 'impl.cpp', 'utils.cpp',
+                 'vpd-parser/ipz_parser.cpp', 'impl.cpp', 'ibm_vpd_utils.cpp',
                  'vpdecc/vpdecc.c', 'vpdecc/vpdecc_support.c'
 ]
 
@@ -142,7 +142,7 @@
                                       'impl.cpp',
                                       'vpd-parser/ipz_parser.cpp',
                                       'write.cpp',
-                                      'utils.cpp',
+                                      'common_utility.cpp',
                                       writefru_hpp,
                                       extra_properties_gen_hpp
         ]
diff --git a/test/meson.build b/test/meson.build
index 97b5e1c..74bb079 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -22,13 +22,14 @@
             'keyword_vpd_parser_test/kw_vpd_test.cpp',
             'vpd-manager-test/reader_test.cpp',
             'vpd-manager-test/editor_test.cpp'
-           ]
+]
 
 application_src =['../impl.cpp',
                    '../vpdecc/vpdecc.c',
                    '../vpdecc/vpdecc_support.c',
                    '../vpd-parser/ipz_parser.cpp',
-                   '../utils.cpp',
+                   '../ibm_vpd_utils.cpp',
+                   '../common_utility.cpp',
                    '../vpd-manager/reader_impl.cpp',
                    '../vpd-parser/keyword_vpd_parser.cpp',
                    '../vpd-manager/editor_impl.cpp',
diff --git a/utilInterface.hpp b/utilInterface.hpp
index 086f510..0d13b7d 100644
--- a/utilInterface.hpp
+++ b/utilInterface.hpp
@@ -1,5 +1,5 @@
 #pragma once
-#include "utils.hpp"
+#include "ibm_vpd_utils.hpp"
 
 #include <string>
 
diff --git a/vpd-manager/editor_impl.cpp b/vpd-manager/editor_impl.cpp
index 9ca68fc..23079f2 100644
--- a/vpd-manager/editor_impl.cpp
+++ b/vpd-manager/editor_impl.cpp
@@ -2,9 +2,9 @@
 
 #include "editor_impl.hpp"
 
+#include "ibm_vpd_utils.hpp"
 #include "ipz_parser.hpp"
 #include "parser_factory.hpp"
-#include "utils.hpp"
 
 #include "vpdecc/vpdecc.h"
 
diff --git a/vpd-manager/manager.cpp b/vpd-manager/manager.cpp
index 5344664..feb6115 100644
--- a/vpd-manager/manager.cpp
+++ b/vpd-manager/manager.cpp
@@ -3,9 +3,9 @@
 #include "manager.hpp"
 
 #include "editor_impl.hpp"
+#include "ibm_vpd_utils.hpp"
 #include "ipz_parser.hpp"
 #include "reader_impl.hpp"
-#include "utils.hpp"
 
 using namespace openpower::vpd::constants;
 using namespace openpower::vpd::inventory;
diff --git a/vpd-manager/meson.build b/vpd-manager/meson.build
index 56b139e..66e283f 100644
--- a/vpd-manager/meson.build
+++ b/vpd-manager/meson.build
@@ -11,7 +11,8 @@
                       'reader_impl.cpp',
                       '../impl.cpp',
                       '../vpd-parser/ipz_parser.cpp',
-                      '../utils.cpp',
+                      '../ibm_vpd_utils.cpp',
+                      '../common_utility.cpp',
                       '../vpdecc/vpdecc.c',
                       '../vpdecc/vpdecc_support.c',
                       '../vpd-parser//keyword_vpd_parser.cpp',
diff --git a/vpd-manager/reader_impl.cpp b/vpd-manager/reader_impl.cpp
index 4da02be..08eb32b 100644
--- a/vpd-manager/reader_impl.cpp
+++ b/vpd-manager/reader_impl.cpp
@@ -2,7 +2,7 @@
 
 #include "reader_impl.hpp"
 
-#include "utils.hpp"
+#include "ibm_vpd_utils.hpp"
 
 #include <algorithm>
 #include <com/ibm/VPD/error.hpp>
diff --git a/vpd-parser/parser_factory.cpp b/vpd-parser/parser_factory.cpp
index 7953655..0489ef1 100644
--- a/vpd-parser/parser_factory.cpp
+++ b/vpd-parser/parser_factory.cpp
@@ -1,9 +1,10 @@
 #include "parser_factory.hpp"
 
+#include "const.hpp"
+#include "ibm_vpd_utils.hpp"
 #include "ipz_parser.hpp"
 #include "keyword_vpd_parser.hpp"
 #include "memory_vpd_parser.hpp"
-#include "utils.hpp"
 #include "vpd_exceptions.hpp"
 
 using namespace vpd::keyword::parser;
@@ -11,6 +12,7 @@
 using namespace openpower::vpd::parser::interface;
 using namespace openpower::vpd::ipz::parser;
 using namespace openpower::vpd::exceptions;
+using namespace openpower::vpd::constants;
 
 namespace openpower
 {
diff --git a/vpd_tool.cpp b/vpd_tool.cpp
index 9e76331..a4891f6 100644
--- a/vpd_tool.cpp
+++ b/vpd_tool.cpp
@@ -1,4 +1,3 @@
-#include "utils.hpp"
 #include "vpd_tool_impl.hpp"
 
 #include <CLI/CLI.hpp>
diff --git a/vpd_tool_impl.hpp b/vpd_tool_impl.hpp
index 1ca50b5..4e320b2 100644
--- a/vpd_tool_impl.hpp
+++ b/vpd_tool_impl.hpp
@@ -1,8 +1,8 @@
 #include "config.h"
 
 #include "editor_impl.hpp"
+#include "ibm_vpd_utils.hpp"
 #include "types.hpp"
-#include "utils.hpp"
 
 #include <nlohmann/json.hpp>
 #include <string>
diff --git a/writefru.mako.hpp b/writefru.mako.hpp
index 203d033..6e04649 100755
--- a/writefru.mako.hpp
+++ b/writefru.mako.hpp
@@ -10,7 +10,7 @@
 #include "defines.hpp"
 #include "store.hpp"
 #include "types.hpp"
-#include "utils.hpp"
+#include "common_utility.hpp"
 #include "extra-properties-gen.hpp"
 
 namespace openpower
@@ -19,6 +19,7 @@
 {
 namespace inventory
 {
+using namespace openpower::vpd::common::utility;
 
 /** @brief API to write parsed VPD to inventory,
  *      for a specific FRU
