diff --git a/command/channel_auth.cpp b/command/channel_auth.cpp
index 44d5cad..3308bf6 100644
--- a/command/channel_auth.cpp
+++ b/command/channel_auth.cpp
@@ -225,8 +225,8 @@
     static std::vector<uint8_t> supportedAlgorithms;
     static bool recordInit = false;
 
-    uint8_t rspChannel =
-        ipmi::convertCurrentChannelNum(channelNumber, getInterfaceIndex());
+    uint8_t rspChannel = ipmi::convertCurrentChannelNum(channelNumber,
+                                                        getInterfaceIndex());
 
     if (!ipmi::isValidChannel(rspChannel))
     {
@@ -253,8 +253,8 @@
         }
     }
 
-    const std::vector<uint8_t>& records =
-        algoSelectBit ? cipherRecords : supportedAlgorithms;
+    const std::vector<uint8_t>& records = algoSelectBit ? cipherRecords
+                                                        : supportedAlgorithms;
     static constexpr auto respSize = 16;
 
     // Session support is available in active LAN channels.
@@ -271,8 +271,8 @@
     // set of 16 and so on.
 
     // Calculate the number of record data bytes to be returned.
-    auto start =
-        std::min(static_cast<size_t>(listIndex) * respSize, records.size());
+    auto start = std::min(static_cast<size_t>(listIndex) * respSize,
+                          records.size());
     auto end = std::min((static_cast<size_t>(listIndex) * respSize) + respSize,
                         records.size());
     auto size = end - start;
diff --git a/command/channel_auth.hpp b/command/channel_auth.hpp
index c518ba7..a1f9af7 100644
--- a/command/channel_auth.hpp
+++ b/command/channel_auth.hpp
@@ -27,7 +27,7 @@
 {
     uint8_t completionCode; // Completion Code
 
-    uint8_t channelNumber; // Channel number that the request was
+    uint8_t channelNumber;  // Channel number that the request was
     // received on
 
 #if BYTE_ORDER == LITTLE_ENDIAN
diff --git a/command/guid.cpp b/command/guid.cpp
index 253a2dc..5d6c07a 100644
--- a/command/guid.cpp
+++ b/command/guid.cpp
@@ -73,8 +73,8 @@
         for (size_t iter = 0, inc = 0; iter < len && inc < BMC_GUID_LEN;
              iter += 2, inc++)
         {
-            uint8_t hexVal =
-                std::strtoul(readUUID.substr(iter, 2).c_str(), NULL, 16);
+            uint8_t hexVal = std::strtoul(readUUID.substr(iter, 2).c_str(),
+                                          NULL, 16);
             guid[inc] = hexVal;
         }
     } while (0);
diff --git a/command/payload_cmds.hpp b/command/payload_cmds.hpp
index 8778786..bbd220a 100644
--- a/command/payload_cmds.hpp
+++ b/command/payload_cmds.hpp
@@ -194,7 +194,7 @@
 {
     uint8_t completionCode; //!< Completion code.
 
-    uint8_t capacity; //!< Instance capacity.
+    uint8_t capacity;       //!< Instance capacity.
 
     /* @brief Activation Status. */
 #if BYTE_ORDER == LITTLE_ENDIAN
diff --git a/command/rakp12.cpp b/command/rakp12.cpp
index bcdcc35..a6b4f85 100644
--- a/command/rakp12.cpp
+++ b/command/rakp12.cpp
@@ -75,8 +75,8 @@
         return outPayload;
     }
 
-    auto rakp1Size =
-        sizeof(RAKP1request) - (userNameMaxLen - request->user_name_len);
+    auto rakp1Size = sizeof(RAKP1request) -
+                     (userNameMaxLen - request->user_name_len);
 
     std::string message = "Invalid login attempted via RCMPP interface ";
     // Validate user name length in the message
diff --git a/command/session_cmds.cpp b/command/session_cmds.cpp
index 1405b6b..1a7c266 100644
--- a/command/session_cmds.cpp
+++ b/command/session_cmds.cpp
@@ -153,10 +153,10 @@
 
                 auto itr = serviceMap.begin();
                 const std::string service = itr->first;
-                uint8_t closeSessionPriv =
-                    std::get<uint8_t>(ipmi::getDbusProperty(
-                        *busp, service, obj, session::sessionIntf,
-                        "CurrentPrivilege"));
+                uint8_t closeSessionPriv = std::get<uint8_t>(
+                    ipmi::getDbusProperty(*busp, service, obj,
+                                          session::sessionIntf,
+                                          "CurrentPrivilege"));
 
                 if (currentSessionPriv < closeSessionPriv)
                 {
