diff --git a/sol_module.cpp b/sol_module.cpp
index e055817..8200e74 100644
--- a/sol_module.cpp
+++ b/sol_module.cpp
@@ -1,5 +1,5 @@
-#include "command/sol_cmds.hpp"
 #include "command/payload_cmds.hpp"
+#include "command/sol_cmds.hpp"
 #include "command_table.hpp"
 #include "main.hpp"
 #include "session.hpp"
@@ -12,69 +12,57 @@
 
 void registerCommands()
 {
-    static const ::command::CmdDetails commands[] =
-    {
+    static const ::command::CmdDetails commands[] = {
         // SOL Payload Handler
-        {
-            {(static_cast<uint32_t>(message::PayloadType::SOL) << 16)},
-            &payloadHandler, session::Privilege::HIGHEST_MATCHING,
-            false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::SOL) << 16)},
+         &payloadHandler,
+         session::Privilege::HIGHEST_MATCHING,
+         false},
         // Activate Payload Command
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(::command::NetFns::APP) | 0x48
-            },
-            &activatePayload, session::Privilege::USER, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(::command::NetFns::APP) | 0x48},
+         &activatePayload,
+         session::Privilege::USER,
+         false},
         // Deactivate Payload Command
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(::command::NetFns::APP) | 0x49
-            },
-            &deactivatePayload, session::Privilege::USER, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(::command::NetFns::APP) | 0x49},
+         &deactivatePayload,
+         session::Privilege::USER,
+         false},
         // Get Payload Activation Status
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(::command::NetFns::APP) | 0x4A
-            },
-            &getPayloadStatus, session::Privilege::USER, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(::command::NetFns::APP) | 0x4A},
+         &getPayloadStatus,
+         session::Privilege::USER,
+         false},
         // Get Payload Instance Info Command
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(::command::NetFns::APP) | 0x4B
-            },
-            &getPayloadInfo, session::Privilege::USER, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(::command::NetFns::APP) | 0x4B},
+         &getPayloadInfo,
+         session::Privilege::USER,
+         false},
         // Set SOL Configuration Parameters
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(::command::NetFns::TRANSPORT) | 0x21
-            },
-            &setConfParams, session::Privilege::ADMIN, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(::command::NetFns::TRANSPORT) | 0x21},
+         &setConfParams,
+         session::Privilege::ADMIN,
+         false},
         // Get SOL Configuration Parameters
-        {
-            {
-                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-                static_cast<uint16_t>(::command::NetFns::TRANSPORT) | 0x22
-            },
-            &getConfParams, session::Privilege::USER, false
-        },
+        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+          static_cast<uint16_t>(::command::NetFns::TRANSPORT) | 0x22},
+         &getConfParams,
+         session::Privilege::USER,
+         false},
     };
 
     for (const 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));
     }
 }
 
