diff --git a/include/ipmi_to_redfish_hooks.hpp b/include/ipmi_to_redfish_hooks.hpp
index 91cf82e..265e672 100644
--- a/include/ipmi_to_redfish_hooks.hpp
+++ b/include/ipmi_to_redfish_hooks.hpp
@@ -19,7 +19,11 @@
 
 namespace intel_oem::ipmi::sel
 {
-bool checkRedfishHooks(AddSELRequest* selRequest);
+bool checkRedfishHooks(uint16_t recordID, uint8_t recordType,
+                       uint32_t timestamp, uint16_t generatorID, uint8_t evmRev,
+                       uint8_t sensorType, uint8_t sensorNum, uint8_t eventType,
+                       uint8_t eventData1, uint8_t eventData2,
+                       uint8_t eventData3);
 bool checkRedfishHooks(uint8_t generatorID, uint8_t evmRev, uint8_t sensorType,
                        uint8_t sensorNum, uint8_t eventType, uint8_t eventData1,
                        uint8_t eventData2, uint8_t eventData3);
diff --git a/include/storagecommands.hpp b/include/storagecommands.hpp
index 3b2fda9..48cfeef 100644
--- a/include/storagecommands.hpp
+++ b/include/storagecommands.hpp
@@ -101,34 +101,6 @@
     uint16_t fruInventoryOffset;
     uint8_t data[];
 };
-
-struct AddSELRequest
-{
-    uint16_t recordID;
-    uint8_t recordType;
-    union
-    {
-        struct
-        {
-            uint32_t timestamp;
-            uint16_t generatorID;
-            uint8_t eventMsgRevision;
-            uint8_t sensorType;
-            uint8_t sensorNum;
-            uint8_t eventType;
-            uint8_t eventData[intel_oem::ipmi::sel::systemEventSize];
-        } system;
-        struct
-        {
-            uint32_t timestamp;
-            uint8_t eventData[intel_oem::ipmi::sel::oemTsEventSize];
-        } oemTs;
-        struct
-        {
-            uint8_t eventData[intel_oem::ipmi::sel::oemEventSize];
-        } oem;
-    } record;
-};
 #pragma pack(pop)
 
 enum class GetFRUAreaAccessType : uint8_t
@@ -156,7 +128,6 @@
     ipmiCmdGetSDRAllocationInfo = 0x21,
     ipmiCmdReserveSDR = 0x22,
     ipmiCmdGetSDR = 0x23,
-    ipmiCmdAddSEL = 0x44,
 };
 
 #pragma pack(push, 1)
diff --git a/src/ipmi_to_redfish_hooks.cpp b/src/ipmi_to_redfish_hooks.cpp
index ff85081..be4dd3a 100644
--- a/src/ipmi_to_redfish_hooks.cpp
+++ b/src/ipmi_to_redfish_hooks.cpp
@@ -40,6 +40,29 @@
     hexStr = stream.str();
 }
 
+static bool defaultMessageHook(const std::string& ipmiRaw)
+{
+    // Log the record as a default Redfish message instead of a SEL record
+
+    static const std::string openBMCMessageRegistryVersion("0.1");
+    std::string messageID =
+        "OpenBMC." + openBMCMessageRegistryVersion + ".SELEntryAdded";
+
+    std::vector<std::string> messageArgs;
+    messageArgs.push_back(ipmiRaw);
+
+    // Log the Redfish message to the journal with the appropriate metadata
+    std::string journalMsg = "SEL Entry Added: " + ipmiRaw;
+    std::string messageArgsString = boost::algorithm::join(messageArgs, ",");
+    phosphor::logging::log<phosphor::logging::level::INFO>(
+        journalMsg.c_str(),
+        phosphor::logging::entry("REDFISH_MESSAGE_ID=%s", messageID.c_str()),
+        phosphor::logging::entry("REDFISH_MESSAGE_ARGS=%s",
+                                 messageArgsString.c_str()));
+
+    return true;
+}
+
 // Record a BIOS message as a Redfish message instead of a SEL record
 static bool biosMessageHook(const SELData& selData, const std::string& ipmiRaw)
 {
@@ -70,8 +93,7 @@
                             messageID += ".MemoryRASConfigurationEnabled";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -117,8 +139,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -133,8 +154,7 @@
                             messageID += ".BIOSPOSTError";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -153,8 +173,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -172,8 +191,7 @@
                             messageID += ".IntelUPILinkWidthReducedToQuarter";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2
@@ -187,8 +205,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -206,8 +223,7 @@
                             messageID += ".MemoryRASModeEnabled";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -259,8 +275,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -275,21 +290,18 @@
                             messageID += ".BIOSBoot";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
         default:
-            messageID += ".Unknown";
-            messageArgs.push_back(ipmiRaw);
+            return defaultMessageHook(ipmiRaw);
             break;
     }
 
@@ -348,8 +360,7 @@
                             messageID += ".MirroringRedundancyDegraded";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -378,8 +389,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -397,8 +407,7 @@
                             messageID += ".MemoryECCUncorrectable";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -424,8 +433,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -443,8 +451,7 @@
                             messageID += ".LegacyPCISERR";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -464,8 +471,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -527,8 +533,7 @@
                             messageID += ".PCIeFatalMCBlockedTLP";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -548,8 +553,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -591,8 +595,7 @@
                             messageID += ".PCIeCorrectableUnspecifiedAERError";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -612,8 +615,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -631,8 +633,7 @@
                             messageID += ".SparingRedundancyDegraded";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -663,8 +664,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -689,15 +689,13 @@
                                         ".MemoryParityCommandAndAddress";
                                     break;
                                 default:
-                                    messageID += ".Unknown";
-                                    messageArgs.push_back(ipmiRaw);
+                                    return defaultMessageHook(ipmiRaw);
                                     break;
                             }
                             break;
                         }
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -726,8 +724,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -749,8 +746,7 @@
                                 ".PCIeFatalUnspecifiedNonAERFatalError";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     // Get the message data from eventData2 and eventData3
@@ -770,8 +766,7 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -786,8 +781,7 @@
                             messageID += ".BIOSRecoveryStart";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     break;
@@ -800,15 +794,13 @@
                             messageID += ".BIOSRecoveryComplete";
                             break;
                         default:
-                            messageID += ".Unknown";
-                            messageArgs.push_back(ipmiRaw);
+                            return defaultMessageHook(ipmiRaw);
                             break;
                     }
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
@@ -842,14 +834,12 @@
                     break;
                 }
                 default:
-                    messageID += ".Unknown";
-                    messageArgs.push_back(ipmiRaw);
+                    return defaultMessageHook(ipmiRaw);
                     break;
             }
             break;
         default:
-            messageID += ".Unknown";
-            messageArgs.push_back(ipmiRaw);
+            return defaultMessageHook(ipmiRaw);
             break;
     }
 
@@ -880,35 +870,52 @@
             break;
     }
 
-    // No hooks handled the request, so let it go to the SEL
-    return false;
+    // No hooks handled the request, so let it go to default
+    return defaultMessageHook(ipmiRaw);
 }
 } // namespace redfish_hooks
 
-bool checkRedfishHooks(AddSELRequest* selRequest)
+bool checkRedfishHooks(uint16_t recordID, uint8_t recordType,
+                       uint32_t timestamp, uint16_t generatorID, uint8_t evmRev,
+                       uint8_t sensorType, uint8_t sensorNum, uint8_t eventType,
+                       uint8_t eventData1, uint8_t eventData2,
+                       uint8_t eventData3)
 {
-    // First check that this is a system event record type since that
-    // determines the definition of the rest of the data
-    if (selRequest->recordType != ipmi::sel::systemEvent)
-    {
-        // OEM record type, so let it go to the SEL
-        return false;
-    }
-
     // Save the raw IPMI string of the request
     std::string ipmiRaw;
-    const boost::beast::span<uint8_t> selBytes(
-        reinterpret_cast<uint8_t*>(selRequest), sizeof(AddSELRequest));
-    redfish_hooks::toHexStr(selBytes, ipmiRaw);
+    std::array selBytes = {static_cast<uint8_t>(recordID),
+                           static_cast<uint8_t>(recordID >> 8),
+                           recordType,
+                           static_cast<uint8_t>(timestamp),
+                           static_cast<uint8_t>(timestamp >> 8),
+                           static_cast<uint8_t>(timestamp >> 16),
+                           static_cast<uint8_t>(timestamp >> 24),
+                           static_cast<uint8_t>(generatorID),
+                           static_cast<uint8_t>(generatorID >> 8),
+                           evmRev,
+                           sensorType,
+                           sensorNum,
+                           eventType,
+                           eventData1,
+                           eventData2,
+                           eventData3};
+    redfish_hooks::toHexStr(boost::beast::span<uint8_t>(selBytes), ipmiRaw);
+
+    // First check that this is a system event record type since that
+    // determines the definition of the rest of the data
+    if (recordType != ipmi::sel::systemEvent)
+    {
+        // OEM record type, so let it go to the SEL
+        return redfish_hooks::defaultMessageHook(ipmiRaw);
+    }
 
     // Extract the SEL data for the hook
-    redfish_hooks::SELData selData = {
-        .generatorID = selRequest->record.system.generatorID,
-        .sensorNum = selRequest->record.system.sensorNum,
-        .eventType = selRequest->record.system.eventType,
-        .offset = selRequest->record.system.eventData[0] & 0x0F,
-        .eventData2 = selRequest->record.system.eventData[1],
-        .eventData3 = selRequest->record.system.eventData[2]};
+    redfish_hooks::SELData selData = {.generatorID = generatorID,
+                                      .sensorNum = sensorNum,
+                                      .eventType = eventType,
+                                      .offset = eventData1 & 0x0F,
+                                      .eventData2 = eventData2,
+                                      .eventData3 = eventData3};
 
     return redfish_hooks::startRedfishHook(selData, ipmiRaw);
 }
diff --git a/src/sensorcommands.cpp b/src/sensorcommands.cpp
index ba64fe4..ab654f7 100644
--- a/src/sensorcommands.cpp
+++ b/src/sensorcommands.cpp
@@ -312,38 +312,11 @@
         return ipmi::responseReqDataLenInvalid();
     }
 
-    // Send this request to the Redfish hooks to see if it should be a
-    // Redfish message instead.  If so, no need to add it to the SEL, so
-    // just return success.
-    if (intel_oem::ipmi::sel::checkRedfishHooks(
-            generatorID, evmRev, sensorType, sensorNum, eventType, eventData1,
-            eventData2.value_or(0xFF), eventData3.value_or(0xFF)))
-    {
-        return ipmi::responseSuccess();
-    }
-
-    bool assert = eventType & directionMask ? false : true;
-    std::vector<uint8_t> eventData;
-    eventData.push_back(eventData1);
-    eventData.push_back(eventData2.value_or(0xFF));
-    eventData.push_back(eventData3.value_or(0xFF));
-
-    std::string sensorPath = getPathFromSensorNumber(sensorNum);
-    std::string service =
-        ipmi::getService(dbus, ipmiSELAddInterface, ipmiSELPath);
-    sdbusplus::message::message writeSEL = dbus.new_method_call(
-        service.c_str(), ipmiSELPath, ipmiSELAddInterface, "IpmiSelAdd");
-    writeSEL.append(ipmiSELAddMessage, sensorPath, eventData, assert,
-                    static_cast<uint16_t>(generatorID));
-    try
-    {
-        dbus.call(writeSEL);
-    }
-    catch (sdbusplus::exception_t &e)
-    {
-        phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
-        return ipmi::responseUnspecifiedError();
-    }
+    // Send this request to the Redfish hooks to log it as a Redfish message
+    // instead.  There is no need to add it to the SEL, so just return success.
+    intel_oem::ipmi::sel::checkRedfishHooks(
+        generatorID, evmRev, sensorType, sensorNum, eventType, eventData1,
+        eventData2.value_or(0xFF), eventData3.value_or(0xFF));
 
     return ipmi::responseSuccess();
 }
diff --git a/src/storagecommands.cpp b/src/storagecommands.cpp
index 7aa8950..1ae2002 100644
--- a/src/storagecommands.cpp
+++ b/src/storagecommands.cpp
@@ -895,111 +895,24 @@
     return ipmi::responseUnspecifiedError();
 }
 
-ipmi_ret_t ipmiStorageAddSELEntry(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
-                                  ipmi_request_t request,
-                                  ipmi_response_t response,
-                                  ipmi_data_len_t data_len,
-                                  ipmi_context_t context)
+ipmi::RspType<uint16_t> ipmiStorageAddSELEntry(
+    uint16_t recordID, uint8_t recordType, uint32_t timestamp,
+    uint16_t generatorID, uint8_t evmRev, uint8_t sensorType, uint8_t sensorNum,
+    uint8_t eventType, uint8_t eventData1, uint8_t eventData2,
+    uint8_t eventData3)
 {
-    static constexpr char const* ipmiSELObject =
-        "xyz.openbmc_project.Logging.IPMI";
-    static constexpr char const* ipmiSELPath =
-        "/xyz/openbmc_project/Logging/IPMI";
-    static constexpr char const* ipmiSELAddInterface =
-        "xyz.openbmc_project.Logging.IPMI";
-    static const std::string ipmiSELAddMessage =
-        "IPMI SEL entry logged using IPMI Add SEL Entry command.";
-    uint16_t recordID = 0;
-    sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
-
-    if (*data_len != sizeof(AddSELRequest))
-    {
-        *data_len = 0;
-        return IPMI_CC_REQ_DATA_LEN_INVALID;
-    }
-    AddSELRequest* req = static_cast<AddSELRequest*>(request);
-
     // Per the IPMI spec, need to cancel any reservation when a SEL entry is
     // added
     cancelSELReservation();
 
-    // Send this request to the Redfish hooks to see if it should be a Redfish
-    // message instead.  If so, no need to add it to the SEL, so just return
-    // success.
-    if (intel_oem::ipmi::sel::checkRedfishHooks(req))
-    {
-        *static_cast<uint16_t*>(response) = 0xFFFF;
-        *data_len = sizeof(recordID);
-        return IPMI_CC_OK;
-    }
+    // Send this request to the Redfish hooks to log it as a Redfish message
+    // instead.  There is no need to add it to the SEL, so just return success.
+    intel_oem::ipmi::sel::checkRedfishHooks(
+        recordID, recordType, timestamp, generatorID, evmRev, sensorType,
+        sensorNum, eventType, eventData1, eventData2, eventData3);
 
-    if (req->recordType == intel_oem::ipmi::sel::systemEvent)
-    {
-        std::string sensorPath =
-            getPathFromSensorNumber(req->record.system.sensorNum);
-        std::vector<uint8_t> eventData(
-            req->record.system.eventData,
-            req->record.system.eventData +
-                intel_oem::ipmi::sel::systemEventSize);
-        bool assert = !(req->record.system.eventType & deassertionEvent);
-        uint16_t genId = req->record.system.generatorID;
-        sdbusplus::message::message writeSEL = bus.new_method_call(
-            ipmiSELObject, ipmiSELPath, ipmiSELAddInterface, "IpmiSelAdd");
-        writeSEL.append(ipmiSELAddMessage, sensorPath, eventData, assert,
-                        genId);
-        try
-        {
-            sdbusplus::message::message writeSELResp = bus.call(writeSEL);
-            writeSELResp.read(recordID);
-        }
-        catch (sdbusplus::exception_t& e)
-        {
-            phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
-            *data_len = 0;
-            return IPMI_CC_UNSPECIFIED_ERROR;
-        }
-    }
-    else if (req->recordType >= intel_oem::ipmi::sel::oemTsEventFirst &&
-             req->recordType <= intel_oem::ipmi::sel::oemEventLast)
-    {
-        std::vector<uint8_t> eventData;
-        if (req->recordType <= intel_oem::ipmi::sel::oemTsEventLast)
-        {
-            eventData =
-                std::vector<uint8_t>(req->record.oemTs.eventData,
-                                     req->record.oemTs.eventData +
-                                         intel_oem::ipmi::sel::oemTsEventSize);
-        }
-        else
-        {
-            eventData = std::vector<uint8_t>(
-                req->record.oem.eventData,
-                req->record.oem.eventData + intel_oem::ipmi::sel::oemEventSize);
-        }
-        sdbusplus::message::message writeSEL = bus.new_method_call(
-            ipmiSELObject, ipmiSELPath, ipmiSELAddInterface, "IpmiSelAddOem");
-        writeSEL.append(ipmiSELAddMessage, eventData, req->recordType);
-        try
-        {
-            sdbusplus::message::message writeSELResp = bus.call(writeSEL);
-            writeSELResp.read(recordID);
-        }
-        catch (sdbusplus::exception_t& e)
-        {
-            phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
-            *data_len = 0;
-            return IPMI_CC_UNSPECIFIED_ERROR;
-        }
-    }
-    else
-    {
-        *data_len = 0;
-        return IPMI_CC_PARM_OUT_OF_RANGE;
-    }
-
-    *static_cast<uint16_t*>(response) = recordID;
-    *data_len = sizeof(recordID);
-    return IPMI_CC_OK;
+    uint16_t responseID = 0xFFFF;
+    return ipmi::responseSuccess(responseID);
 }
 
 ipmi::RspType<uint8_t> ipmiStorageClearSEL(ipmi::Context::ptr ctx,
@@ -1103,10 +1016,9 @@
                           ipmi::Privilege::Operator, ipmiStorageGetSELEntry);
 
     // <Add SEL Entry>
-    ipmiPrintAndRegister(
-        NETFUN_STORAGE,
-        static_cast<ipmi_cmd_t>(IPMINetfnStorageCmds::ipmiCmdAddSEL), NULL,
-        ipmiStorageAddSELEntry, PRIVILEGE_OPERATOR);
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage,
+                          static_cast<ipmi::Cmd>(ipmi::storage::cmdAddSelEntry),
+                          ipmi::Privilege::Operator, ipmiStorageAddSELEntry);
 
     // <Clear SEL>
     ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage,
