diff --git a/selutility.hpp b/selutility.hpp
index 06fc453..91c4eaf 100644
--- a/selutility.hpp
+++ b/selutility.hpp
@@ -2,8 +2,11 @@
 
 #include <chrono>
 #include <cstdint>
+#include <iomanip>
+#include <iostream>
 #include <ipmid/types.hpp>
 #include <sdbusplus/server.hpp>
+#include <sstream>
 
 namespace ipmi
 {
@@ -167,6 +170,17 @@
  */
 void readLoggingObjectPaths(ObjectPaths& paths);
 
+template <typename T>
+std::string toHexStr(const T& data)
+{
+    std::stringstream stream;
+    stream << std::hex << std::uppercase << std::setfill('0');
+    for (const auto& v : data)
+    {
+        stream << std::setw(2) << static_cast<int>(v);
+    }
+    return stream.str();
+}
 namespace internal
 {
 
diff --git a/storagehandler.cpp b/storagehandler.cpp
index 0bc842c..18a42e2 100644
--- a/storagehandler.cpp
+++ b/storagehandler.cpp
@@ -19,11 +19,13 @@
 #include <ipmid/utils.hpp>
 #include <optional>
 #include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/server.hpp>
 #include <string>
 #include <variant>
 #include <xyz/openbmc_project/Common/error.hpp>
+#include <xyz/openbmc_project/Logging/SEL/error.hpp>
 
 void register_netfn_storage_functions() __attribute__((constructor));
 
@@ -35,7 +37,7 @@
 extern const IdInfoMap sensors;
 } // namespace sensor
 } // namespace ipmi
-
+extern const ipmi::sensor::InvObjectIDMap invSensors;
 extern const FruMap frus;
 constexpr uint8_t eventDataSize = 3;
 namespace
@@ -55,6 +57,9 @@
     sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
 using namespace phosphor::logging;
 using namespace ipmi::fru;
+using namespace xyz::openbmc_project::Logging::SEL;
+using SELCreated =
+    sdbusplus::xyz::openbmc_project::Logging::SEL::Error::Created;
 
 using SELRecordID = uint16_t;
 using SELEntry = ipmi::sel::SELEventRecordFormat;
@@ -699,13 +704,34 @@
                       uint8_t sensorNumber, uint8_t eventDir,
                       std::array<uint8_t, eventDataSize> eventData)
 {
-    // Per the IPMI spec, need to cancel the reservation when a SEL entry is
-    // added
-    cancelSELReservation();
+    std::string objpath;
+    static constexpr auto systemRecordType = 0x02;
     // Hostboot sends SEL with OEM record type 0xDE to indicate that there is
     // a maintenance procedure associated with eSEL record.
     static constexpr auto procedureType = 0xDE;
-    if (recordType == procedureType)
+    cancelSELReservation();
+    if (recordType == systemRecordType)
+    {
+
+        for (const auto& it : invSensors)
+        {
+            if (it.second.sensorID == sensorNumber)
+            {
+                objpath = it.first;
+                break;
+            }
+        }
+        auto selDataStr = ipmi::sel::toHexStr(eventData);
+
+        bool assert = (eventDir & 0x80) ? false : true;
+
+        recordID = report<SELCreated>(Created::RECORD_TYPE(recordType),
+                                      Created::GENERATOR_ID(generatorID),
+                                      Created::SENSOR_DATA(selDataStr.c_str()),
+                                      Created::EVENT_DIR(assert),
+                                      Created::SENSOR_PATH(objpath.c_str()));
+    }
+    else if (recordType == procedureType)
     {
         // In the OEM record type 0xDE, byte 11 in the SEL record indicate the
         // procedure number.
