diff --git a/const.hpp b/const.hpp
index 7d9666e..8b75758 100644
--- a/const.hpp
+++ b/const.hpp
@@ -80,6 +80,7 @@
 static constexpr auto SPD_BYTE_6 = 6;
 static constexpr auto SPD_BYTE_12 = 12;
 static constexpr auto SPD_BYTE_13 = 13;
+static constexpr auto SPD_BYTE_18 = 18;
 static constexpr auto SPD_BYTE_BIT_0_3_MASK = 0x0F;
 static constexpr auto SPD_BYTE_MASK = 0xFF;
 
diff --git a/vpd-parser/isdimm_vpd_parser.cpp b/vpd-parser/isdimm_vpd_parser.cpp
index 7071516..0dd9954 100644
--- a/vpd-parser/isdimm_vpd_parser.cpp
+++ b/vpd-parser/isdimm_vpd_parser.cpp
@@ -156,19 +156,39 @@
     return serialNumber;
 }
 
-auto isdimmVpdParser::getDDR4FruNumber(const std::string& partNumber)
+auto isdimmVpdParser::getDDR4FruNumber(const std::string& partNumber,
+                                       Binary::const_iterator& iterator)
 {
     // check for 128GB ISRDIMM not implemented
     //(128GB 2RX4(8GX72) IS RDIMM 36*(16GBIT, 2H),1.2V 288PIN,1.2" ROHS) - NA
 
-    static std::unordered_map<std::string, std::string> pnFruMap = {
-        {"8421000", "78P4191"}, {"8421008", "78P4192"}, {"8529000", "78P4197"},
-        {"8529008", "78P4198"}, {"8529928", "78P4199"}, {"8529B28", "78P4200"},
-        {"8631008", "78P6815"}, {"8631928", "78P6925"}};
+    // MTB Units is used in deciding the frequency of the DIMM
+    // This is applicable only for DDR4 specification
+    // 10 - DDR4-1600
+    // 9  - DDR4-1866
+    // 8  - DDR4-2133
+    // 7  - DDR4-2400
+    // 6  - DDR4-2666
+    // 5  - DDR4-3200
+    // pnFreqFnMap < tuple <partNumber, MTBUnits>, fruNumber>
+    static std::map<std::tuple<std::string, uint8_t>, std::string> pnFreqFnMap =
+        {{std::make_tuple("8421000", 6), "78P4191"},
+         {std::make_tuple("8421008", 6), "78P4192"},
+         {std::make_tuple("8529000", 6), "78P4197"},
+         {std::make_tuple("8529008", 6), "78P4198"},
+         {std::make_tuple("8529928", 6), "78P4199"},
+         {std::make_tuple("8529B28", 6), "78P4200"},
+         {std::make_tuple("8631928", 6), "78P6925"},
+         {std::make_tuple("8529000", 5), "78P7317"},
+         {std::make_tuple("8529008", 5), "78P7318"},
+         {std::make_tuple("8631008", 5), "78P6815"}};
 
     std::string fruNumber;
-    auto itr = pnFruMap.find(partNumber);
-    if (itr != pnFruMap.end())
+    uint8_t mtbUnits = iterator[openpower::vpd::constants::SPD_BYTE_18] &
+                       openpower::vpd::constants::SPD_BYTE_MASK;
+    std::tuple<std::string, uint8_t> tup_key = {partNumber, mtbUnits};
+    auto itr = pnFreqFnMap.find(tup_key);
+    if (itr != pnFreqFnMap.end())
     {
         fruNumber = itr->second;
     }
@@ -179,15 +199,16 @@
     return fruNumber;
 }
 
-auto isdimmVpdParser::getDDR4CCIN(const std::string& partNumber)
+auto isdimmVpdParser::getDDR4CCIN(const std::string& fruNumber)
 {
     static std::unordered_map<std::string, std::string> pnCCINMap = {
-        {"8421000", "324D"}, {"8421008", "324E"}, {"8529000", "324E"},
-        {"8529008", "324F"}, {"8529928", "325A"}, {"8529B28", "324C"},
-        {"8631008", "32BB"}, {"8631928", "32BC"}};
+        {"78P4191", "324D"}, {"78P4192", "324E"}, {"78P4197", "324E"},
+        {"78P4198", "324F"}, {"78P4199", "325A"}, {"78P4200", "324C"},
+        {"78P6925", "32BC"}, {"78P7317", "331A"}, {"78P7318", "331F"},
+        {"78P6815", "32BB"}};
 
     std::string ccin;
-    auto itr = pnCCINMap.find(partNumber);
+    auto itr = pnCCINMap.find(fruNumber);
     if (itr != pnCCINMap.end())
     {
         ccin = itr->second;
@@ -302,9 +323,9 @@
         }
 
         auto partNumber = getDDR4PartNumber(iterator);
-        auto fruNumber = getDDR4FruNumber(partNumber);
+        auto fruNumber = getDDR4FruNumber(partNumber, iterator);
         auto serialNumber = getDDR4SerialNumber(iterator);
-        auto ccin = getDDR4CCIN(partNumber);
+        auto ccin = getDDR4CCIN(fruNumber);
         keywordValueMap.emplace("PN", move(partNumber));
         keywordValueMap.emplace("FN", move(fruNumber));
         keywordValueMap.emplace("SN", move(serialNumber));
diff --git a/vpd-parser/isdimm_vpd_parser.hpp b/vpd-parser/isdimm_vpd_parser.hpp
index 69ae2c5..c8105f4 100644
--- a/vpd-parser/isdimm_vpd_parser.hpp
+++ b/vpd-parser/isdimm_vpd_parser.hpp
@@ -84,9 +84,11 @@
      * @brief This function allocates FRU number based on part number
      *
      * @param[in] partNumber - part number of the DIMM
+     * @param[in] iterator - iterator to buffer containing SPD
      * @return allocated FRU number.
      */
-    auto getDDR4FruNumber(const std::string& partNumber);
+    auto getDDR4FruNumber(const std::string& partNumber,
+                          Binary::const_iterator& iterator);
 
     /**
      * @brief This function allocates CCIN based on part number
diff --git a/vpdecc/vpdecc.h b/vpdecc/vpdecc.h
index bf8bc0e..9995192 100644
--- a/vpdecc/vpdecc.h
+++ b/vpdecc/vpdecc.h
@@ -1,19 +1,3 @@
-/******************************************************************************
- *
- * IBM Confidential
- *
- * Licensed Internal Code Source Materials
- *
- * IBM Flexible Support Processor Licensed Internal Code
- *
- * (c) Copyright IBM Corp. 2004
- *
- * The source code is for this program is not published or otherwise divested
- * of its trade secrets, irrespective of what has been deposited with the
- * U.S. Copyright Office.
- *
- *****************************************************************************/
-
 #ifndef _VPDECC_H_
 #define _VPDECC_H_
 
