diff --git a/sol/sol_context.cpp b/sol/sol_context.cpp
index 06dabcc..08a717a 100644
--- a/sol/sol_context.cpp
+++ b/sol/sol_context.cpp
@@ -46,12 +46,12 @@
         std::weak_ptr<Context> weakRef = weak_from_this();
         accumulateTimer.async_wait(
             [weakRef](const boost::system::error_code& ec) {
-                std::shared_ptr<Context> self = weakRef.lock();
-                if (!ec && self)
-                {
-                    self->charAccTimerHandler();
-                }
-            });
+            std::shared_ptr<Context> self = weakRef.lock();
+            if (!ec && self)
+            {
+                self->charAccTimerHandler();
+            }
+        });
     }
     else
     {
diff --git a/sol/sol_manager.cpp b/sol/sol_manager.cpp
index 8fabeeb..fd5ad2f 100644
--- a/sol/sol_manager.cpp
+++ b/sol/sol_manager.cpp
@@ -56,8 +56,8 @@
     }
     std::vector<uint8_t> buffer(readSize);
     ec.clear();
-    size_t readDataLen =
-        consoleSocket->read_some(boost::asio::buffer(buffer), ec);
+    size_t readDataLen = consoleSocket->read_some(boost::asio::buffer(buffer),
+                                                  ec);
     if (ec)
     {
         lg2::error("Reading from host console socket failed: {ERROR}", "ERROR",
@@ -101,12 +101,12 @@
 
     consoleSocket->async_wait(boost::asio::socket_base::wait_read,
                               [this](const boost::system::error_code& ec) {
-                                  if (!ec)
-                                  {
-                                      consoleInputHandler();
-                                      startHostConsole();
-                                  }
-                              });
+        if (!ec)
+        {
+            consoleInputHandler();
+            startHostConsole();
+        }
+    });
 } // namespace sol
 
 void Manager::stopHostConsole()
@@ -130,8 +130,8 @@
     {
         try
         {
-            solService =
-                ipmi::getService(dbus, solInterface, solPathWitheEthName);
+            solService = ipmi::getService(dbus, solInterface,
+                                          solPathWitheEthName);
         }
         catch (const std::runtime_error& e)
         {
@@ -251,21 +251,21 @@
                     type::signal() + member("PropertiesChanged") +
                     interface("org.freedesktop.DBus.Properties"),
                 [](sdbusplus::message_t& msg) {
-                    std::string intfName;
-                    std::map<std::string, std::variant<bool>> properties;
-                    msg.read(intfName, properties);
+                std::string intfName;
+                std::map<std::string, std::variant<bool>> properties;
+                msg.read(intfName, properties);
 
-                    const auto it = properties.find("Enabled");
-                    if (it != properties.end())
+                const auto it = properties.find("Enabled");
+                if (it != properties.end())
+                {
+                    const bool* state = std::get_if<bool>(&it->second);
+
+                    if (state != nullptr && *state == false)
                     {
-                        const bool* state = std::get_if<bool>(&it->second);
-
-                        if (state != nullptr && *state == false)
-                        {
-                            // Stop all the payload session.
-                            sol::Manager::get().stopAllPayloadInstance();
-                        }
+                        // Stop all the payload session.
+                        sol::Manager::get().stopAllPayloadInstance();
                     }
+                }
                 });
         }
     }
@@ -335,8 +335,8 @@
         }
         else if (prop.first == "RetryIntervalMS")
         {
-            sol::Manager::get().retryInterval =
-                std::get<uint8_t>(prop.second) * sol::retryIntervalFactor * 1ms;
+            sol::Manager::get().retryInterval = std::get<uint8_t>(prop.second) *
+                                                sol::retryIntervalFactor * 1ms;
         }
     }
 }
