diff --git a/comm_module.cpp b/comm_module.cpp
index d780e21..a58ca5d 100644
--- a/comm_module.cpp
+++ b/comm_module.cpp
@@ -1,10 +1,5 @@
 #include "comm_module.hpp"
 
-#include <algorithm>
-#include <cstring>
-#include <iomanip>
-#include <iostream>
-
 #include "command/channel_auth.hpp"
 #include "command/open_session.hpp"
 #include "command/rakp12.hpp"
@@ -14,63 +9,60 @@
 #include "main.hpp"
 #include "session.hpp"
 
+#include <algorithm>
+#include <cstring>
+#include <iomanip>
+#include <iostream>
+
 namespace command
 {
 
 void sessionSetupCommands()
 {
-    static const command::CmdDetails commands[] =
-    {
+    static const command::CmdDetails commands[] = {
         // Open Session Request/Response
-        {
-            {
-                (static_cast<uint32_t>
-                (message::PayloadType::OPEN_SESSION_REQUEST) << 16)
-            },
-            &openSession, session::Privilege::HIGHEST_MATCHING,  true
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::OPEN_SESSION_REQUEST)
+           << 16)},
+         &openSession,
+         session::Privilege::HIGHEST_MATCHING,
+         true},
         // RAKP1 & RAKP2 Message
-        {
-            {(static_cast<uint32_t>(message::PayloadType::RAKP1) << 16)},
-            &RAKP12, session::Privilege::HIGHEST_MATCHING, true
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::RAKP1) << 16)},
+         &RAKP12,
+         session::Privilege::HIGHEST_MATCHING,
+         true},
         // RAKP3 & RAKP4 Message
-        {
-            {(static_cast<uint32_t>(message::PayloadType::RAKP3) << 16)},
-            &RAKP34, session::Privilege::HIGHEST_MATCHING, true
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::RAKP3) << 16)},
+         &RAKP34,
+         session::Privilege::HIGHEST_MATCHING,
+         true},
         // Get Channel Authentication Capabilities Command
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(command::NetFns::APP) | 0x38
-            },
-            &GetChannelCapabilities,
-            session::Privilege::HIGHEST_MATCHING, true
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(command::NetFns::APP) | 0x38},
+         &GetChannelCapabilities,
+         session::Privilege::HIGHEST_MATCHING,
+         true},
         // Set Session Privilege Command
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(command::NetFns::APP) | 0x3B
-            },
-            &setSessionPrivilegeLevel, session::Privilege::USER, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(command::NetFns::APP) | 0x3B},
+         &setSessionPrivilegeLevel,
+         session::Privilege::USER,
+         false},
         // Close Session Command
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(command::NetFns::APP) | 0x3C
-            },
-            &closeSession, session::Privilege::CALLBACK, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(command::NetFns::APP) | 0x3C},
+         &closeSession,
+         session::Privilege::CALLBACK,
+         false},
     };
 
     for (auto& iter : commands)
     {
-        std::get<command::Table&>(singletonPool).registerCommand(
-            iter.command, std::make_unique<command::NetIpmidEntry>
-            (iter.command, iter.functor, iter.privilege, iter.sessionless));
+        std::get<command::Table&>(singletonPool)
+            .registerCommand(iter.command,
+                             std::make_unique<command::NetIpmidEntry>(
+                                 iter.command, iter.functor, iter.privilege,
+                                 iter.sessionless));
     }
 }
 
