diff --git a/impl.cpp b/impl.cpp
index a0a45d9..9447ca9 100644
--- a/impl.cpp
+++ b/impl.cpp
@@ -511,6 +511,57 @@
     checkHeader();
 }
 
+std::string Impl::readKwFromHw(const std::string& record,
+                               const std::string& keyword)
+{
+    // Check if the VHDR record is present
+    checkHeader();
+
+    auto iterator = vpd.cbegin();
+
+    // Read the table of contents record
+    std::size_t ptLen = readTOC(iterator);
+
+    // Read the table of contents record, to get offsets
+    // to other records.
+    auto offsets = readPT(iterator, ptLen);
+    for (const auto& offset : offsets)
+    {
+        // Jump to record name
+        auto nameOffset = offset + sizeof(RecordId) + sizeof(RecordSize) +
+                          // Skip past the RT keyword, which contains
+                          // the record name.
+                          lengths::KW_NAME + sizeof(KwSize);
+        // Get record name
+        auto iterator = vpd.cbegin();
+        std::advance(iterator, nameOffset);
+
+        std::string name(iterator, iterator + lengths::RECORD_NAME);
+        if (name != record)
+        {
+            continue;
+        }
+        else
+        {
+            processRecord(offset);
+            const auto& itr = out.find(record);
+            if (itr != out.end())
+            {
+                const auto& kwValItr = (itr->second).find(keyword);
+                if (kwValItr != (itr->second).end())
+                {
+                    return kwValItr->second;
+                }
+                else
+                {
+                    return "";
+                }
+            }
+        }
+    }
+    return "";
+}
+
 } // namespace parser
 } // namespace vpd
-} // namespace openpower
+} // namespace openpower
\ No newline at end of file
diff --git a/impl.hpp b/impl.hpp
index dff6aa7..75f5452 100644
--- a/impl.hpp
+++ b/impl.hpp
@@ -82,6 +82,15 @@
      */
     void checkVPDHeader();
 
+    /** @brief Read a specific VPD keyword from hardware.
+     * This api is to read a specific VPD keyword directly from hardware.
+     * @param[in] record - record name.
+     * @param[in] keyword - keyword name.
+     * @return keyword value.
+     */
+    std::string readKwFromHw(const std::string& record,
+                             const std::string& keyword);
+
   private:
     /** @brief Process the table of contents record
      *
@@ -165,4 +174,4 @@
 
 } // namespace parser
 } // namespace vpd
-} // namespace openpower
+} // namespace openpower
\ No newline at end of file
