diff --git a/const.hpp b/const.hpp
index 1ee8c89..6153410 100644
--- a/const.hpp
+++ b/const.hpp
@@ -49,6 +49,23 @@
 static constexpr auto SYSTEM_2U = "50001001";
 static constexpr auto SYSTEM_4U = "50001000";
 
+constexpr uint8_t KW_VPD_START_TAG = 0x82;
+constexpr uint8_t KW_VPD_END_TAG = 0x78;
+constexpr uint8_t ALT_KW_VAL_PAIR_START_TAG = 0x90;
+constexpr uint8_t KW_VAL_PAIR_END_TAG = 0x79;
+constexpr auto MEMORY_VPD_START_TAG = "11S";
+constexpr int TWO_BYTES = 2;
+constexpr int KW_VPD_DATA_START = 0;
+constexpr auto MEMORY_VPD_DATA_START = 416;
+constexpr auto FORMAT_11S_LEN = 3;
+static constexpr auto PART_NUM_LEN = 7;
+static constexpr auto SERIAL_NUM_LEN = 12;
+static constexpr auto CCIN_LEN = 4;
+
+using namespace std::string_literals;
+constexpr auto pimPath = "/xyz/openbmc_project/inventory";
+constexpr auto pimIntf = "xyz.openbmc_project.Inventory.Manager";
+
 namespace lengths
 {
 enum Lengths
diff --git a/ibm_vpd_app.cpp b/ibm_vpd_app.cpp
index b761b10..24363d0 100644
--- a/ibm_vpd_app.cpp
+++ b/ibm_vpd_app.cpp
@@ -1,7 +1,6 @@
 #include "config.h"
 
 #include "defines.hpp"
-#include "ibm_vpd_type_check.hpp"
 #include "keyword_vpd_parser.hpp"
 #include "parser.hpp"
 #include "utils.hpp"
@@ -21,10 +20,10 @@
 using namespace openpower::vpd;
 using namespace CLI;
 using namespace vpd::keyword::parser;
-using namespace vpdFormat;
 using namespace openpower::vpd::constants;
 namespace fs = filesystem;
 using json = nlohmann::json;
+using namespace openpower::vpd::inventory;
 
 /**
  * @brief Expands location codes
diff --git a/ibm_vpd_type_check.cpp b/ibm_vpd_type_check.cpp
deleted file mode 100644
index 41303ee..0000000
--- a/ibm_vpd_type_check.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "ibm_vpd_type_check.hpp"
-
-#include "keyword_vpd_types.hpp"
-
-using namespace vpd::keyword::parser;
-
-namespace vpdFormat
-{
-vpdType vpdTypeCheck(const Binary& vpdVector)
-{
-    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;
-    }
-
-    // INVALID VPD FORMAT
-    return vpdType::INVALID_VPD_FORMAT;
-}
-} // namespace vpdFormat
diff --git a/ibm_vpd_type_check.hpp b/ibm_vpd_type_check.hpp
deleted file mode 100644
index d122473..0000000
--- a/ibm_vpd_type_check.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-#include <types.hpp>
-
-using namespace openpower::vpd;
-
-namespace vpdFormat
-{
-/**
- * @brief Types of VPD
- */
-enum vpdType
-{
-    IPZ_VPD,           /**< IPZ VPD type */
-    KEYWORD_VPD,       /**< Keyword 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);
-} // namespace vpdFormat
diff --git a/keyword_vpd_parser.cpp b/keyword_vpd_parser.cpp
index eef17b8..9e147b5 100644
--- a/keyword_vpd_parser.cpp
+++ b/keyword_vpd_parser.cpp
@@ -1,5 +1,7 @@
 #include "keyword_vpd_parser.hpp"
 
+#include "const.hpp"
+
 #include <iostream>
 #include <numeric>
 #include <string>
@@ -10,6 +12,9 @@
 {
 namespace parser
 {
+using namespace openpower::vpd::constants;
+using namespace openpower::vpd::inventory;
+
 KeywordVpdMap KeywordVpdParser::parseKwVpd()
 {
     int kwVpdType;
diff --git a/keyword_vpd_parser.hpp b/keyword_vpd_parser.hpp
index 769a83a..f2339fa 100644
--- a/keyword_vpd_parser.hpp
+++ b/keyword_vpd_parser.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "keyword_vpd_types.hpp"
+#include "types.hpp"
 
 namespace vpd
 {
@@ -31,7 +31,6 @@
  * 6) Validate the 'small resource type last end tag'.
  * 7) Return the keyword-value map.
  */
-
 class KeywordVpdParser
 {
   public:
@@ -45,7 +44,7 @@
      *
      * Move kwVpdVector to parser object's kwVpdVector
      */
-    KeywordVpdParser(Binary&& kwVpdVector) :
+    KeywordVpdParser(openpower::vpd::Binary&& kwVpdVector) :
         keywordVpdVector(std::move(kwVpdVector))
     {
     }
@@ -59,15 +58,19 @@
      *
      * @return map of keyword:value
      */
-    KeywordVpdMap parseKwVpd();
+    openpower::vpd::inventory::KeywordVpdMap parseKwVpd();
 
   private:
-    Binary::iterator checkSumStart; //!< Pointer to the start byte from where
-                                    //!< the checksum need to be calculated
-    Binary::iterator checkSumEnd;   //!< Pointer to the end byte until which the
-                                    //!< checksum need to be calculated
-    Binary::iterator kwVpdIterator; //!< Iterator to parse the vector
-    Binary keywordVpdVector;        //!< Vector which stores keyword VPD data
+    openpower::vpd::Binary::iterator
+        checkSumStart; //!< Pointer to the start byte from where
+                       //!< the checksum need to be calculated
+    openpower::vpd::Binary::iterator
+        checkSumEnd; //!< Pointer to the end byte until which the
+                     //!< checksum need to be calculated
+    openpower::vpd::Binary::iterator
+        kwVpdIterator; //!< Iterator to parse the vector
+    openpower::vpd::Binary
+        keywordVpdVector; //!< Vector which stores keyword VPD data
 
     /**
      * @brief Validate the large resource identifier string
@@ -86,7 +89,7 @@
      *
      * @return map of keyword:value
      */
-    KeywordVpdMap kwValParser();
+    openpower::vpd::inventory::KeywordVpdMap kwValParser();
 
     /**
      * @brief Validate small resource type end tag
diff --git a/keyword_vpd_types.hpp b/keyword_vpd_types.hpp
deleted file mode 100644
index b219da7..0000000
--- a/keyword_vpd_types.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-
-#include <string>
-#include <unordered_map>
-#include <vector>
-
-namespace vpd
-{
-namespace keyword
-{
-namespace parser
-{
-constexpr uint8_t KW_VPD_START_TAG = 0x82;
-constexpr uint8_t KW_VPD_END_TAG = 0x78;
-constexpr uint8_t KW_VAL_PAIR_START_TAG = 0x84;
-constexpr uint8_t ALT_KW_VAL_PAIR_START_TAG = 0x90;
-constexpr uint8_t KW_VAL_PAIR_END_TAG = 0x79;
-constexpr int TWO_BYTES = 2;
-constexpr int IPZ_DATA_START = 11;
-constexpr int KW_VPD_DATA_START = 0;
-
-using Binary = std::vector<uint8_t>;
-using KeywordVpdMap = std::unordered_map<std::string, std::vector<uint8_t>>;
-} // namespace parser
-} // namespace keyword
-} // namespace vpd
diff --git a/meson.build b/meson.build
index 35947a2..7d76402 100644
--- a/meson.build
+++ b/meson.build
@@ -41,7 +41,6 @@
 
 if get_option('ibm-parser').enabled()
         ibm_read_vpd_SOURCES = ['ibm_vpd_app.cpp',
-                                'ibm_vpd_type_check.cpp',
                                 'parser.cpp',
                                 'impl.cpp',
                                 'utils.cpp',
diff --git a/test/keyword_vpd_parser_test/kw_vpd_test.cpp b/test/keyword_vpd_parser_test/kw_vpd_test.cpp
index c09d494..115d60a 100644
--- a/test/keyword_vpd_parser_test/kw_vpd_test.cpp
+++ b/test/keyword_vpd_parser_test/kw_vpd_test.cpp
@@ -1,4 +1,5 @@
 #include "keyword_vpd_parser.hpp"
+#include "types.hpp"
 
 #include <exception>
 #include <fstream>
@@ -6,6 +7,8 @@
 #include <gtest/gtest.h>
 
 using namespace vpd::keyword::parser;
+using namespace openpower::vpd;
+using namespace openpower::vpd::inventory;
 
 class KeywordVpdParserTest : public ::testing::Test
 {
diff --git a/types.hpp b/types.hpp
index d48b317..5ff2959 100644
--- a/types.hpp
+++ b/types.hpp
@@ -43,6 +43,7 @@
 using namespace std::string_literals;
 constexpr auto pimPath = "/xyz/openbmc_project/inventory";
 constexpr auto pimIntf = "xyz.openbmc_project.Inventory.Manager";
+using KeywordVpdMap = std::unordered_map<std::string, Binary>;
 
 } // namespace inventory
 
diff --git a/utils.cpp b/utils.cpp
index 6002b9c..24d7b4c 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -11,7 +11,7 @@
 {
 namespace vpd
 {
-
+using namespace openpower::vpd::constants;
 namespace inventory
 {
 
@@ -68,7 +68,35 @@
 
 } // namespace inventory
 
-using namespace openpower::vpd::constants;
+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;
diff --git a/utils.hpp b/utils.hpp
index da6546c..54e562c 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -10,6 +10,27 @@
 {
 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
  *
  * @param [in] c - The input byte
