diff --git a/include/appcommands.hpp b/include/appcommands.hpp
index d350139..f4cd0d6 100644
--- a/include/appcommands.hpp
+++ b/include/appcommands.hpp
@@ -31,13 +31,13 @@
 } MetaRevision;
 #pragma pack(pop)
 
-static constexpr const char *versionPurposeBMC =
+static constexpr const char* versionPurposeBMC =
     "xyz.openbmc_project.Software.Version.VersionPurpose.BMC";
-static constexpr const char *versionPurposeME =
+static constexpr const char* versionPurposeME =
     "xyz.openbmc_project.Software.Version.VersionPurpose.ME";
 
 extern int getActiveSoftwareVersionInfo(ipmi::Context::ptr ctx,
-                                        const std::string &reqVersionPurpose,
-                                        std::string &version);
-extern std::optional<MetaRevision> convertIntelVersion(std::string &s);
+                                        const std::string& reqVersionPurpose,
+                                        std::string& version);
+extern std::optional<MetaRevision> convertIntelVersion(std::string& s);
 } // namespace ipmi
diff --git a/include/bridgingcommands.hpp b/include/bridgingcommands.hpp
index e8be693..545d24a 100644
--- a/include/bridgingcommands.hpp
+++ b/include/bridgingcommands.hpp
@@ -151,9 +151,9 @@
     uint8_t cmd;
     std::vector<uint8_t> data;
 
-    IpmbRequest(const ipmbHeader *ipmbBuffer, size_t bufferLength);
+    IpmbRequest(const ipmbHeader* ipmbBuffer, size_t bufferLength);
 
-    void prepareRequest(sdbusplus::message::message &mesg);
+    void prepareRequest(sdbusplus::message::message& mesg);
 };
 
 struct IpmbResponse
@@ -170,9 +170,9 @@
 
     IpmbResponse(uint8_t address, uint8_t netFn, uint8_t rqLun, uint8_t rsSA,
                  uint8_t seq, uint8_t rsLun, uint8_t cmd,
-                 uint8_t completionCode, std::vector<uint8_t> &inputData);
+                 uint8_t completionCode, std::vector<uint8_t>& inputData);
 
-    void ipmbToi2cConstruct(uint8_t *buffer, size_t *bufferLength);
+    void ipmbToi2cConstruct(uint8_t* buffer, size_t* bufferLength);
 };
 
 /**
@@ -198,8 +198,8 @@
     void clearResponseQueue();
 
     ipmi::Cc handleIpmbChannel(ipmi::Context::ptr ctx, const uint8_t tracking,
-                               const std::vector<uint8_t> &msgData,
-                               std::vector<uint8_t> &rspData);
+                               const std::vector<uint8_t>& msgData,
+                               std::vector<uint8_t>& rspData);
 
     void insertMessageInQueue(IpmbResponse msg);
 
diff --git a/include/commandutils.hpp b/include/commandutils.hpp
index 3bd23f8..7898be3 100644
--- a/include/commandutils.hpp
+++ b/include/commandutils.hpp
@@ -16,10 +16,11 @@
 
 #pragma once
 
-#include <iostream>
 #include <ipmid/api.hpp>
-#include <map>
 #include <sdbusplus/bus.hpp>
+
+#include <iostream>
+#include <map>
 #include <string>
 #include <tuple>
 #include <utility>
diff --git a/include/manufacturingcommands.hpp b/include/manufacturingcommands.hpp
index 3594abb..e46d195 100644
--- a/include/manufacturingcommands.hpp
+++ b/include/manufacturingcommands.hpp
@@ -23,6 +23,7 @@
 #include <sdbusplus/message.hpp>
 #include <sdbusplus/timer.hpp>
 #include <variantvisitors.hpp>
+
 #include <vector>
 
 #define FAN_SENSOR_NOT_PRESENT (0 << 0)
@@ -167,8 +168,7 @@
   public:
     LedProperty(SmSignalSet signal_, std::string name_) :
         signal(signal_), name(name_), prevState(""), isLocked(false)
-    {
-    }
+    {}
 
     LedProperty() = delete;
 
diff --git a/include/sdrutils.hpp b/include/sdrutils.hpp
index 206f6af..055043a 100644
--- a/include/sdrutils.hpp
+++ b/include/sdrutils.hpp
@@ -19,13 +19,14 @@
 #include <boost/algorithm/string.hpp>
 #include <boost/bimap.hpp>
 #include <boost/container/flat_map.hpp>
+#include <phosphor-logging/log.hpp>
+#include <sdbusplus/bus/match.hpp>
+
 #include <cstdio>
 #include <cstring>
 #include <exception>
 #include <filesystem>
 #include <map>
-#include <phosphor-logging/log.hpp>
-#include <sdbusplus/bus/match.hpp>
 #include <string>
 #include <vector>
 
diff --git a/include/sensorcommands.hpp b/include/sensorcommands.hpp
index 820c746..c0d7853 100644
--- a/include/sensorcommands.hpp
+++ b/include/sensorcommands.hpp
@@ -17,9 +17,10 @@
 #pragma once
 #include "sdrutils.hpp"
 
-#include <cstdint>
 #include <ipmid/api.hpp>
 
+#include <cstdint>
+
 #pragma pack(push, 1)
 
 struct SensorThresholdResp
@@ -120,8 +121,8 @@
 namespace ipmi
 {
 extern SensorSubTree sensorTree;
-static ipmi_ret_t getSensorConnection(uint8_t sensnum, std::string &connection,
-                                      std::string &path)
+static ipmi_ret_t getSensorConnection(uint8_t sensnum, std::string& connection,
+                                      std::string& path)
 {
     if (sensorTree.empty() && !getSensorSubtree(sensorTree))
     {
@@ -134,7 +135,7 @@
     }
 
     uint8_t sensorIndex = sensnum;
-    for (const auto &sensor : sensorTree)
+    for (const auto& sensor : sensorTree)
     {
         if (sensorIndex-- == 0)
         {
diff --git a/include/smbioshandler.hpp b/include/smbioshandler.hpp
index 4e403ca..97ecbb7 100644
--- a/include/smbioshandler.hpp
+++ b/include/smbioshandler.hpp
@@ -15,11 +15,12 @@
 */
 
 #pragma once
-#include <cstddef>
-#include <cstdint>
+#include "ipmid/api.h"
+
 #include <oemcommands.hpp>
 
-#include "ipmid/api.h"
+#include <cstddef>
+#include <cstdint>
 
 constexpr uint16_t msgPayloadSize = 1024 * 60;
 
diff --git a/include/smbiosmdrv2handler.hpp b/include/smbiosmdrv2handler.hpp
index 3d9b627..71f3677 100644
--- a/include/smbiosmdrv2handler.hpp
+++ b/include/smbiosmdrv2handler.hpp
@@ -21,8 +21,8 @@
 #include <oemcommands.hpp>
 #include <sdbusplus/timer.hpp>
 
-static constexpr const char *mdrType2File = "/var/lib/smbios/smbios2";
-static constexpr const char *smbiosPath = "/var/lib/smbios";
+static constexpr const char* mdrType2File = "/var/lib/smbios/smbios2";
+static constexpr const char* smbiosPath = "/var/lib/smbios";
 static constexpr const size_t msgPayloadSize =
     1024 * 60; // Total size will transfer for smbios table
 static constexpr const size_t mdriiSMSize = 0x00100000;
@@ -62,9 +62,9 @@
 static constexpr const int lastAgentIndex = -1;
 static constexpr const uint16_t lastAgentId = 0xFFFF;
 constexpr const uint32_t invalidChecksum = 0xffffffff;
-constexpr const char *dbusProperties = "org.freedesktop.DBus.Properties";
-constexpr const char *mdrv2Path = "/xyz/openbmc_project/Smbios/MDR_V2";
-constexpr const char *mdrv2Interface = "xyz.openbmc_project.Smbios.MDR_V2";
+constexpr const char* dbusProperties = "org.freedesktop.DBus.Properties";
+constexpr const char* mdrv2Path = "/xyz/openbmc_project/Smbios/MDR_V2";
+constexpr const char* mdrv2Interface = "xyz.openbmc_project.Smbios.MDR_V2";
 
 enum class MDR2SMBIOSStatusEnum
 {
@@ -120,7 +120,7 @@
     uint32_t xferBuff;
     uint32_t xferSize;
     uint32_t maxDataSize;
-    uint8_t *dataStorage;
+    uint8_t* dataStorage;
 };
 
 struct Mdr2DirStruct
@@ -240,7 +240,7 @@
         }
     }
 
-    void *vPtr;
+    void* vPtr;
 
   private:
     uint32_t physicalAddr;
@@ -258,23 +258,23 @@
             std::make_unique<phosphor::Timer>([&](void) { timeoutHandler(); });
     }
 
-    int agentLookup(const uint16_t &agentId);
-    int findLockHandle(const uint16_t &lockHandle);
+    int agentLookup(const uint16_t& agentId);
+    int findLockHandle(const uint16_t& lockHandle);
     int syncDirCommonData(uint8_t idIndex, uint32_t size,
-                          const std::string &service);
-    int findDataId(const uint8_t *dataInfo, const size_t &len,
-                   const std::string &service);
-    uint16_t getSessionHandle(Mdr2DirStruct *dir);
+                          const std::string& service);
+    int findDataId(const uint8_t* dataInfo, const size_t& len,
+                   const std::string& service);
+    uint16_t getSessionHandle(Mdr2DirStruct* dir);
     bool smbiosIsUpdating(uint8_t index);
-    uint32_t calcChecksum32(uint8_t *buf, uint32_t len);
-    bool storeDatatoFlash(MDRSMBIOSHeader *mdrHdr, uint8_t *data);
+    uint32_t calcChecksum32(uint8_t* buf, uint32_t len);
+    bool storeDatatoFlash(MDRSMBIOSHeader* mdrHdr, uint8_t* data);
     bool smbiosUnlock(uint8_t index);
     void timeoutHandler();
-    bool smbiosTryLock(uint8_t flag, uint8_t index, uint16_t *session,
+    bool smbiosTryLock(uint8_t flag, uint8_t index, uint16_t* session,
                        uint16_t timeout);
-    int sdplusMdrv2GetProperty(const std::string &name,
-                               std::variant<uint8_t> &value,
-                               const std::string &service);
+    int sdplusMdrv2GetProperty(const std::string& name,
+                               std::variant<uint8_t>& value,
+                               const std::string& service);
 
     Mdr2DirStruct smbiosDir{smbiosAgentVersion,
                             1,
diff --git a/include/storagecommands.hpp b/include/storagecommands.hpp
index 2055bd0..c9e2bd2 100644
--- a/include/storagecommands.hpp
+++ b/include/storagecommands.hpp
@@ -15,9 +15,10 @@
 */
 
 #pragma once
-#include <cstdint>
 #include <phosphor-ipmi-host/sensorhandler.hpp>
 
+#include <cstdint>
+
 static constexpr uint8_t ipmiSdrVersion = 0x51;
 
 namespace intel_oem::ipmi::sel
diff --git a/include/variantvisitors.hpp b/include/variantvisitors.hpp
index a440bfc..b24481c 100644
--- a/include/variantvisitors.hpp
+++ b/include/variantvisitors.hpp
@@ -15,9 +15,10 @@
 */
 
 #pragma once
+#include <sdbusplus/bus.hpp>
+
 #include <cstdint>
 #include <limits>
-#include <sdbusplus/bus.hpp>
 namespace ipmi
 {
 
