diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index 59a0d85..faf035d 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -68,6 +68,7 @@
 constexpr auto invMotherboard =
     "xyz.openbmc_project.Inventory.Item.Board.Motherboard";
 constexpr auto viniRecordVPD = "com.ibm.ipzvpd.VINI";
+constexpr auto vsbpRecordVPD = "com.ibm.ipzvpd.VSBP";
 constexpr auto locCode = "com.ibm.ipzvpd.Location";
 constexpr auto compatible =
     "xyz.openbmc_project.Configuration.IBMCompatibleSystem";
@@ -324,6 +325,35 @@
     return ccin;
 }
 
+std::vector<uint8_t> DataInterface::getSystemIMKeyword() const
+{
+    std::vector<uint8_t> systemIM;
+
+    try
+    {
+        auto service =
+            getService(object_path::motherBoardInv, interface::vsbpRecordVPD);
+        if (!service.empty())
+        {
+            DBusValue value;
+            getProperty(service, object_path::motherBoardInv,
+                        interface::vsbpRecordVPD, "IM", value);
+
+            systemIM = std::get<std::vector<uint8_t>>(value);
+        }
+    }
+    catch (const std::exception& e)
+    {
+        log<level::WARNING>(
+            fmt::format("Failed reading System IM property from "
+                        "Interface: {} exception: {}",
+                        interface::vsbpRecordVPD, e.what())
+                .c_str());
+    }
+
+    return systemIM;
+}
+
 void DataInterface::getHWCalloutFields(const std::string& inventoryPath,
                                        std::string& fruPartNumber,
                                        std::string& ccin,
diff --git a/extensions/openpower-pels/data_interface.hpp b/extensions/openpower-pels/data_interface.hpp
index 9894684..3bfb5dc 100644
--- a/extensions/openpower-pels/data_interface.hpp
+++ b/extensions/openpower-pels/data_interface.hpp
@@ -202,6 +202,13 @@
     virtual std::string getMotherboardCCIN() const = 0;
 
     /**
+     * @brief Returns the system IM
+     *
+     * @return std::string The system IM
+     */
+    virtual std::vector<uint8_t> getSystemIMKeyword() const = 0;
+
+    /**
      * @brief Get the fields from the inventory necessary for doing
      *        a callout on an inventory path.
      *
@@ -453,6 +460,13 @@
     std::string getMotherboardCCIN() const override;
 
     /**
+     * @brief Returns the system IM
+     *
+     * @return std::vector The system IM keyword in 4 byte vector
+     */
+    std::vector<uint8_t> getSystemIMKeyword() const override;
+
+    /**
      * @brief Get the fields from the inventory necessary for doing
      *        a callout on an inventory path.
      *
diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index a53f8f6..1add587 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -28,6 +28,7 @@
 #include "stream.hpp"
 #include "user_data_formats.hpp"
 
+#include <fmt/format.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
@@ -624,6 +625,19 @@
     return data;
 }
 
+void addIMKeyword(nlohmann::json& json, const DataInterfaceBase& dataIface)
+{
+    auto keyword = dataIface.getSystemIMKeyword();
+
+    std::string value{};
+
+    std::for_each(keyword.begin(), keyword.end(), [&](const auto& byte) {
+        value += fmt::format("{:02X}", byte);
+    });
+
+    json["System IM"] = value;
+}
+
 void addStatesToJSON(nlohmann::json& json, const DataInterfaceBase& dataIface)
 {
     json["BMCState"] = lastSegment('.', dataIface.getBMCState());
@@ -639,6 +653,7 @@
 
     addProcessNameToJSON(json, ad.getValue("_PID"), dataIface);
     addBMCFWVersionIDToJSON(json, dataIface);
+    addIMKeyword(json, dataIface);
     addStatesToJSON(json, dataIface);
 
     return makeJSONUserDataSection(json);
