diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index 4c0fe01..f649ce7 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -552,50 +552,52 @@
     return rc;
 }
 
-ipmi_ret_t ipmi_sen_get_sdr_info(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)
+/** @brief implements the get SDR Info command
+ *  @param count - Operation
+ *
+ *  @returns IPMI completion code plus response data
+ *   - sdrCount - sensor/SDR count
+ *   - lunsAndDynamicPopulation - static/Dynamic sensor population flag
+ */
+ipmi::RspType<uint8_t, // respcount
+              uint8_t  // dynamic population flags
+              >
+    ipmiSensorGetDeviceSdrInfo(std::optional<uint8_t> count)
 {
-    auto resp = static_cast<get_sdr_info::GetSdrInfoResp*>(response);
-    if (request == nullptr ||
-        get_sdr_info::request::get_count(request) == false)
+    uint8_t sdrCount;
+    // multiple LUNs not supported.
+    constexpr uint8_t lunsAndDynamicPopulation = 1;
+    constexpr uint8_t getSdrCount = 0x01;
+    constexpr uint8_t getSensorCount = 0x00;
+
+    if (count.value_or(0) == getSdrCount)
     {
-        // Get Sensor Count
-        resp->count = sensors.size() + frus.size() + entities.size();
+        // Get SDR count. This returns the total number of SDRs in the device.
+        sdrCount = sensors.size() + frus.size() + entities.size();
+    }
+    else if (count.value_or(0) == getSensorCount)
+    {
+        // Get Sensor count. This returns the number of sensors
+        sdrCount = sensors.size();
     }
     else
     {
-        resp->count = 1;
+        return ipmi::responseInvalidCommandOnLun();
     }
 
-    // Multiple LUNs not supported.
-    namespace response = get_sdr_info::response;
-    response::set_lun_present(0, &(resp->luns_and_dynamic_population));
-    response::set_lun_not_present(1, &(resp->luns_and_dynamic_population));
-    response::set_lun_not_present(2, &(resp->luns_and_dynamic_population));
-    response::set_lun_not_present(3, &(resp->luns_and_dynamic_population));
-    response::set_static_population(&(resp->luns_and_dynamic_population));
-
-    *data_len = SDR_INFO_RESP_SIZE;
-
-    return IPMI_CC_OK;
+    return ipmi::responseSuccess(sdrCount, lunsAndDynamicPopulation);
 }
 
-ipmi_ret_t ipmi_sen_reserve_sdr(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)
+/** @brief implements the reserve SDR command
+ *  @returns IPMI completion code plus response data
+ *   - reservationID - reservation ID
+ */
+ipmi::RspType<uint16_t> ipmiSensorReserveSdr()
 {
     // A constant reservation ID is okay until we implement add/remove SDR.
-    const uint16_t reservation_id = 1;
-    *(uint16_t*)response = reservation_id;
-    *data_len = sizeof(uint16_t);
+    constexpr uint16_t reservationID = 1;
 
-    printf("Created new IPMI SDR reservation ID %d\n", *(uint16_t*)response);
-    return IPMI_CC_OK;
+    return ipmi::responseSuccess(reservationID);
 }
 
 void setUnitFieldsForObject(const ipmi::sensor::Info* info,
@@ -1055,12 +1057,14 @@
                            ipmi_sen_get_sensor_reading, PRIVILEGE_USER);
 
     // <Reserve Device SDR Repository>
-    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_RESERVE_DEVICE_SDR_REPO,
-                           nullptr, ipmi_sen_reserve_sdr, PRIVILEGE_USER);
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnSensor,
+                          ipmi::sensor_event::cmdReserveDeviceSdrRepository,
+                          ipmi::Privilege::User, ipmiSensorReserveSdr);
 
     // <Get Device SDR Info>
-    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_DEVICE_SDR_INFO, nullptr,
-                           ipmi_sen_get_sdr_info, PRIVILEGE_USER);
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnSensor,
+                          ipmi::sensor_event::cmdGetDeviceSdrInfo,
+                          ipmi::Privilege::User, ipmiSensorGetDeviceSdrInfo);
 
     // <Get Device SDR>
     ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_DEVICE_SDR, nullptr,
diff --git a/sensorhandler.hpp b/sensorhandler.hpp
index 64cfa0e..56a7021 100644
--- a/sensorhandler.hpp
+++ b/sensorhandler.hpp
@@ -79,11 +79,7 @@
                             ipmi_request_t request, ipmi_response_t response,
                             ipmi_data_len_t data_len, ipmi_context_t context);
 
-ipmi_ret_t ipmi_sen_reserve_sdr(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> ipmiSensorReserveSdr();
 
 static const uint16_t FRU_RECORD_ID_START = 256;
 static const uint16_t ENTITY_RECORD_ID_START = 512;
@@ -106,34 +102,6 @@
     return (bool)((uint64_t)(req)&1);
 }
 } // namespace request
-
-namespace response
-{
-#define SDR_INFO_RESP_SIZE 2
-inline void set_lun_present(int lun, uint8_t* resp)
-{
-    *resp |= 1 << lun;
-}
-inline void set_lun_not_present(int lun, uint8_t* resp)
-{
-    *resp &= ~(1 << lun);
-}
-inline void set_dynamic_population(uint8_t* resp)
-{
-    *resp |= 1 << 7;
-}
-inline void set_static_population(uint8_t* resp)
-{
-    *resp &= ~(1 << 7);
-}
-} // namespace response
-
-struct GetSdrInfoResp
-{
-    uint8_t count;
-    uint8_t luns_and_dynamic_population;
-};
-
 } // namespace get_sdr_info
 
 /**
diff --git a/storagehandler.cpp b/storagehandler.cpp
index 8bfde05..0932f72 100644
--- a/storagehandler.cpp
+++ b/storagehandler.cpp
@@ -791,8 +791,9 @@
                           ipmi::Privilege::User, ipmiGetRepositoryInfo);
 
     // <Reserve SDR Repository>
-    ipmi_register_callback(NETFUN_STORAGE, IPMI_CMD_RESERVE_SDR, nullptr,
-                           ipmi_sen_reserve_sdr, PRIVILEGE_USER);
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnStorage,
+                          ipmi::storage::cmdReserveSdrRepository,
+                          ipmi::Privilege::User, ipmiSensorReserveSdr);
 
     // <Get SDR>
     ipmi_register_callback(NETFUN_STORAGE, IPMI_CMD_GET_SDR, nullptr,
