diff --git a/include/biosxml.hpp b/include/biosxml.hpp
index ffc20ba..68e6f67 100644
--- a/include/biosxml.hpp
+++ b/include/biosxml.hpp
@@ -92,12 +92,13 @@
          std::string descriptionStr, std::string defaultStr,
          std::string promptStr, std::string depexStr,
          std::string& setupTypeStr) :
-        nameStr(std::move(nameStr)),
-        currentValStr(std::move(currentValStr)), currentVal(currentVal),
+        depex(false),
+        readOnly(("ReadOnly" == setupTypeStr) ? true : false),
+        currentVal(currentVal), nameStr(std::move(nameStr)),
+        currentValStr(std::move(currentValStr)),
         descriptionStr(std::move(descriptionStr)),
         defaultStr(std::move(defaultStr)), promptStr(std::move(promptStr)),
-        depexStr(std::move(depexStr)), depex(false),
-        readOnly(("ReadOnly" == setupTypeStr) ? true : false)
+        depexStr(std::move(depexStr))
     {}
 
     bool depex;
diff --git a/include/bridgingcommands.hpp b/include/bridgingcommands.hpp
index 73b4486..9123174 100644
--- a/include/bridgingcommands.hpp
+++ b/include/bridgingcommands.hpp
@@ -197,7 +197,7 @@
 
     void clearResponseQueue();
 
-    ipmi::Cc handleIpmbChannel(ipmi::Context::ptr ctx, const uint8_t tracking,
+    ipmi::Cc handleIpmbChannel(ipmi::Context::ptr& ctx, const uint8_t tracking,
                                const std::vector<uint8_t>& msgData,
                                std::vector<uint8_t>& rspData);
 
diff --git a/include/me_to_redfish_hooks.hpp b/include/me_to_redfish_hooks.hpp
index 1f80a1a..0ce26e7 100644
--- a/include/me_to_redfish_hooks.hpp
+++ b/include/me_to_redfish_hooks.hpp
@@ -104,7 +104,7 @@
 
 template <int idx>
 static inline bool
-    logByte(const SELData& selData, std::string& unused,
+    logByte(const SELData& selData, std::string& /* unused */,
             std::vector<std::string>& args,
             std::function<std::string(uint8_t)> conversion = nullptr)
 {
diff --git a/include/sdrutils.hpp b/include/sdrutils.hpp
index 8f1e4d5..9ec1611 100644
--- a/include/sdrutils.hpp
+++ b/include/sdrutils.hpp
@@ -233,13 +233,13 @@
         dbus,
         "type='signal',member='InterfacesAdded',arg0path='/xyz/openbmc_project/"
         "sensors/'",
-        [](sdbusplus::message_t& m) { sensorTreePtr.reset(); });
+        [](sdbusplus::message_t&) { sensorTreePtr.reset(); });
 
     static sdbusplus::bus::match_t sensorRemoved(
         dbus,
         "type='signal',member='InterfacesRemoved',arg0path='/xyz/"
         "openbmc_project/sensors/'",
-        [](sdbusplus::message_t& m) { sensorTreePtr.reset(); });
+        [](sdbusplus::message_t&) { sensorTreePtr.reset(); });
 
     if (sensorTreePtr)
     {
@@ -418,7 +418,7 @@
     }
 }
 
-inline static uint8_t getSensorEventTypeFromPath(const std::string& path)
+inline static uint8_t getSensorEventTypeFromPath(const std::string& /* path */)
 {
     // TODO: Add support for additional reading types as needed
     return 0x1; // reading type = threshold
diff --git a/include/spiDev.hpp b/include/spiDev.hpp
index 0ebe6e5..cbe9282 100644
--- a/include/spiDev.hpp
+++ b/include/spiDev.hpp
@@ -48,8 +48,7 @@
         }
     }
 
-    void spiReadData(const uint32_t startAddr, const size_t dataLen,
-                     void* dataRes)
+    void spiReadData(uint32_t startAddr, size_t dataLen, void* dataRes)
     {
         if (lseek(fd, startAddr, SEEK_SET) < 0)
         {
@@ -58,7 +57,7 @@
             throw std::runtime_error(msg);
         }
 
-        if (read(fd, dataRes, dataLen) != dataLen)
+        if (read(fd, dataRes, dataLen) != static_cast<ssize_t>(dataLen))
         {
             std::string msg = "Failed to read on mtd device. errno=" +
                               std::string(std::strerror(errno));
diff --git a/include/storagecommands.hpp b/include/storagecommands.hpp
index 7fb5ce7..4a78a10 100644
--- a/include/storagecommands.hpp
+++ b/include/storagecommands.hpp
@@ -73,14 +73,6 @@
     rpm = 0x12,
 };
 
-enum class IPMINetfnStorageCmds : ipmi_cmd_t
-{
-    ipmiCmdGetRepositoryInfo = 0x20,
-    ipmiCmdGetSDRAllocationInfo = 0x21,
-    ipmiCmdReserveSDR = 0x22,
-    ipmiCmdGetSDR = 0x23,
-};
-
 #pragma pack(push, 1)
 struct FRUHeader
 {
@@ -159,10 +151,10 @@
 
 constexpr const size_t nmDiscoverySDRCount = 1;
 constexpr const size_t type12Count = 2;
-ipmi_ret_t getFruSdrs(ipmi::Context::ptr ctx, size_t index,
-                      get_sdr::SensorDataFruRecord& resp);
+ipmi::Cc getFruSdrs(ipmi::Context::ptr& ctx, size_t index,
+                    get_sdr::SensorDataFruRecord& resp);
 
-ipmi_ret_t getFruSdrCount(ipmi::Context::ptr ctx, size_t& count);
+ipmi::Cc getFruSdrCount(ipmi::Context::ptr& ctx, size_t& count);
 
 std::vector<uint8_t> getType12SDRs(uint16_t index, uint16_t recordId);
 std::vector<uint8_t> getNMDiscoverySDR(uint16_t index, uint16_t recordId);
