diff --git a/ipmi/control.hpp b/ipmi/control.hpp
index 4f1f0ad..2f57e99 100644
--- a/ipmi/control.hpp
+++ b/ipmi/control.hpp
@@ -3,9 +3,7 @@
 #include <cstdint>
 #include <string>
 
-namespace pid_control
-{
-namespace ipmi
+namespace pid_control::ipmi
 {
 
 // Implement this interface to control a zone's mode or read back its status.
@@ -25,5 +23,4 @@
                                        const std::string& property) = 0;
 };
 
-} // namespace ipmi
-} // namespace pid_control
+} // namespace pid_control::ipmi
diff --git a/ipmi/dbus_mode.cpp b/ipmi/dbus_mode.cpp
index 85427a8..e2dfc50 100644
--- a/ipmi/dbus_mode.cpp
+++ b/ipmi/dbus_mode.cpp
@@ -16,8 +16,7 @@
 
 #include "dbus_mode.hpp"
 
-#include <ipmid/api.h>
-
+#include <ipmid/api-types.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/exception.hpp>
 #include <sdbusplus/message.hpp>
@@ -27,9 +26,7 @@
 #include <string>
 #include <variant>
 
-namespace pid_control
-{
-namespace ipmi
+namespace pid_control::ipmi
 {
 
 static constexpr auto objectPath = "/xyz/openbmc_project/settings/fanctrl/zone";
@@ -70,10 +67,10 @@
     }
     catch (const sdbusplus::exception_t& ex)
     {
-        return IPMI_CC_INVALID;
+        return ::ipmi::ccInvalidCommand;
     }
 
-    return IPMI_CC_OK;
+    return ::ipmi::ccSuccess;
 }
 
 uint8_t DbusZoneControl::setFanCtrlProperty(uint8_t zoneId, bool value,
@@ -97,12 +94,11 @@
     }
     catch (const sdbusplus::exception_t& ex)
     {
-        return IPMI_CC_INVALID;
+        return ::ipmi::ccInvalidCommand;
     }
 
     /* TODO(venture): Should sanity check the result. */
-    return IPMI_CC_OK;
+    return ::ipmi::ccSuccess;
 }
 
-} // namespace ipmi
-} // namespace pid_control
+} // namespace pid_control::ipmi
diff --git a/ipmi/dbus_mode.hpp b/ipmi/dbus_mode.hpp
index c073162..7a23e52 100644
--- a/ipmi/dbus_mode.hpp
+++ b/ipmi/dbus_mode.hpp
@@ -5,9 +5,7 @@
 #include <cstdint>
 #include <string>
 
-namespace pid_control
-{
-namespace ipmi
+namespace pid_control::ipmi
 {
 
 class DbusZoneControl : public ZoneControlInterface
@@ -36,5 +34,4 @@
                                const std::string& property) override;
 };
 
-} // namespace ipmi
-} // namespace pid_control
+} // namespace pid_control::ipmi
diff --git a/ipmi/main_ipmi.cpp b/ipmi/main_ipmi.cpp
index d867dd5..93eee63 100644
--- a/ipmi/main_ipmi.cpp
+++ b/ipmi/main_ipmi.cpp
@@ -25,15 +25,12 @@
 #include <functional>
 #include <memory>
 
-namespace pid_control
-{
-namespace ipmi
+namespace pid_control::ipmi
 {
 
 ZoneControlIpmiHandler handler(std::make_unique<DbusZoneControl>());
 
-}
-} // namespace pid_control
+} // namespace pid_control::ipmi
 
 void setupGlobalOemFanControl() __attribute__((constructor));
 
diff --git a/ipmi/manual_messages.hpp b/ipmi/manual_messages.hpp
index 5418d60..86edd31 100644
--- a/ipmi/manual_messages.hpp
+++ b/ipmi/manual_messages.hpp
@@ -2,9 +2,7 @@
 
 #include <cstdint>
 
-namespace pid_control
-{
-namespace ipmi
+namespace pid_control::ipmi
 {
 
 enum ManualSubCmd
@@ -27,5 +25,4 @@
     uint8_t value;
 } __attribute__((packed));
 
-} // namespace ipmi
-} // namespace pid_control
+} // namespace pid_control::ipmi
diff --git a/ipmi/manualcmds.cpp b/ipmi/manualcmds.cpp
index 69817b2..60ecebf 100644
--- a/ipmi/manualcmds.cpp
+++ b/ipmi/manualcmds.cpp
@@ -19,35 +19,33 @@
 #include "control.hpp"
 #include "manual_messages.hpp"
 
-#include <ipmid/api.h>
+#include <ipmid/api-types.hpp>
 
 #include <cstddef>
 #include <cstdint>
 #include <memory>
 #include <string>
 
-namespace pid_control
-{
-namespace ipmi
+namespace pid_control::ipmi
 {
 
 static constexpr auto manualProperty = "Manual";
 static constexpr auto failsafeProperty = "FailSafe";
 
-ipmi_ret_t ZoneControlIpmiHandler::getFailsafeModeState(
+::ipmi::Cc ZoneControlIpmiHandler::getFailsafeModeState(
     const uint8_t* reqBuf, uint8_t* replyBuf, size_t* dataLen)
 {
     bool current;
 
     if (*dataLen < sizeof(struct FanCtrlRequest))
     {
-        return IPMI_CC_INVALID;
+        return ::ipmi::ccInvalidCommand;
     }
 
     const auto request =
         reinterpret_cast<const struct FanCtrlRequest*>(&reqBuf[0]);
 
-    ipmi_ret_t rc =
+    ::ipmi::Cc rc =
         _control->getFanCtrlProperty(request->zone, &current, failsafeProperty);
     if (rc)
     {
@@ -56,7 +54,7 @@
 
     *replyBuf = (uint8_t)current;
     *dataLen = sizeof(uint8_t);
-    return IPMI_CC_OK;
+    return ::ipmi::ccSuccess;
 }
 
 /*
@@ -65,20 +63,20 @@
  *   <arg name="properties" direction="out" type="a{sv}"/>
  * </method>
  */
-ipmi_ret_t ZoneControlIpmiHandler::getManualModeState(
+::ipmi::Cc ZoneControlIpmiHandler::getManualModeState(
     const uint8_t* reqBuf, uint8_t* replyBuf, size_t* dataLen)
 {
     bool current;
 
     if (*dataLen < sizeof(struct FanCtrlRequest))
     {
-        return IPMI_CC_INVALID;
+        return ::ipmi::ccInvalidCommand;
     }
 
     const auto request =
         reinterpret_cast<const struct FanCtrlRequest*>(&reqBuf[0]);
 
-    ipmi_ret_t rc =
+    ::ipmi::Cc rc =
         _control->getFanCtrlProperty(request->zone, &current, manualProperty);
     if (rc)
     {
@@ -87,7 +85,7 @@
 
     *replyBuf = (uint8_t)current;
     *dataLen = sizeof(uint8_t);
-    return IPMI_CC_OK;
+    return ::ipmi::ccSuccess;
 }
 
 /*
@@ -97,39 +95,39 @@
  *   <arg name="value" direction="in" type="v"/>
  * </method>
  */
-ipmi_ret_t ZoneControlIpmiHandler::setManualModeState(
+::ipmi::Cc ZoneControlIpmiHandler::setManualModeState(
     const uint8_t* reqBuf, [[maybe_unused]] uint8_t* replyBuf,
     const size_t* dataLen)
 {
     if (*dataLen < sizeof(struct FanCtrlRequestSet))
     {
-        return IPMI_CC_INVALID;
+        return ::ipmi::ccInvalidCommand;
     }
 
     const auto request =
         reinterpret_cast<const struct FanCtrlRequestSet*>(&reqBuf[0]);
 
     /* 0 is false, 1 is true */
-    ipmi_ret_t rc = _control->setFanCtrlProperty(
+    ::ipmi::Cc rc = _control->setFanCtrlProperty(
         request->zone, static_cast<bool>(request->value), manualProperty);
     return rc;
 }
 
 /* Three command packages: get, set true, set false */
-ipmi_ret_t manualModeControl(
-    ZoneControlIpmiHandler* handler, [[maybe_unused]] ipmi_cmd_t cmd,
+::ipmi::Cc manualModeControl(
+    ZoneControlIpmiHandler* handler, [[maybe_unused]] uint8_t cmd,
     const uint8_t* reqBuf, uint8_t* replyCmdBuf, size_t* dataLen)
 {
     // FanCtrlRequest is the smaller of the requests, so it's at a minimum.
     if (*dataLen < sizeof(struct FanCtrlRequest))
     {
-        return IPMI_CC_INVALID;
+        return ::ipmi::ccInvalidCommand;
     }
 
     const auto request =
         reinterpret_cast<const struct FanCtrlRequest*>(&reqBuf[0]);
 
-    ipmi_ret_t rc = IPMI_CC_OK;
+    ::ipmi::Cc rc = ::ipmi::ccSuccess;
 
     switch (request->command)
     {
@@ -140,11 +138,10 @@
         case getFailsafeState:
             return handler->getFailsafeModeState(reqBuf, replyCmdBuf, dataLen);
         default:
-            rc = IPMI_CC_INVALID;
+            rc = ::ipmi::ccInvalidCommand;
     }
 
     return rc;
 }
 
-} // namespace ipmi
-} // namespace pid_control
+} // namespace pid_control::ipmi
diff --git a/ipmi/manualcmds.hpp b/ipmi/manualcmds.hpp
index 3f4d6d4..44c1c96 100644
--- a/ipmi/manualcmds.hpp
+++ b/ipmi/manualcmds.hpp
@@ -2,16 +2,14 @@
 
 #include "control.hpp"
 
-#include <ipmid/api.h>
+#include <ipmid/api-types.hpp>
 
 #include <cstddef>
 #include <cstdint>
 #include <memory>
 #include <utility>
 
-namespace pid_control
-{
-namespace ipmi
+namespace pid_control::ipmi
 {
 
 // Implements validation of IPMI commands and handles sending back the
@@ -24,22 +22,21 @@
         _control(std::move(control))
     {}
 
-    ipmi_ret_t getFailsafeModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
+    ::ipmi::Cc getFailsafeModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
                                     size_t* dataLen);
 
-    ipmi_ret_t getManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
+    ::ipmi::Cc getManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
                                   size_t* dataLen);
 
-    ipmi_ret_t setManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
+    ::ipmi::Cc setManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
                                   const size_t* dataLen);
 
   private:
     std::unique_ptr<ZoneControlInterface> _control;
 };
 
-ipmi_ret_t manualModeControl(ZoneControlIpmiHandler* handler, ipmi_cmd_t cmd,
+::ipmi::Cc manualModeControl(ZoneControlIpmiHandler* handler, uint8_t cmd,
                              const uint8_t* reqBuf, uint8_t* replyCmdBuf,
                              size_t* dataLen);
 
-} // namespace ipmi
-} // namespace pid_control
+} // namespace pid_control::ipmi
