diff --git a/src/main.cpp b/src/main.cpp
index 9be4581..c0564e5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -14,12 +14,14 @@
 // limitations under the License.
 */
 #include "srvcfg_manager.hpp"
+
 #include <boost/algorithm/string/replace.hpp>
-#include <sdbusplus/bus/match.hpp>
-#include <filesystem>
 #include <cereal/archives/json.hpp>
 #include <cereal/types/tuple.hpp>
 #include <cereal/types/unordered_map.hpp>
+#include <sdbusplus/bus/match.hpp>
+
+#include <filesystem>
 #include <fstream>
 
 std::unique_ptr<boost::asio::steady_timer> timer = nullptr;
diff --git a/src/srvcfg_manager.cpp b/src/srvcfg_manager.cpp
index 7f397d0..1818bd7 100644
--- a/src/srvcfg_manager.cpp
+++ b/src/srvcfg_manager.cpp
@@ -13,10 +13,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 */
+#include "srvcfg_manager.hpp"
+
+#include <boost/asio/spawn.hpp>
+
 #include <fstream>
 #include <regex>
-#include <boost/asio/spawn.hpp>
-#include "srvcfg_manager.hpp"
 
 extern std::unique_ptr<boost::asio::steady_timer> timer;
 extern std::map<std::string, std::shared_ptr<phosphor::service::ServiceConfig>>
@@ -28,16 +30,16 @@
 namespace service
 {
 
-static constexpr const char *overrideConfFileName = "override.conf";
+static constexpr const char* overrideConfFileName = "override.conf";
 static constexpr const size_t restartTimeout = 15; // seconds
 
-static constexpr const char *systemd1UnitBasePath =
+static constexpr const char* systemd1UnitBasePath =
     "/org/freedesktop/systemd1/unit/";
-static constexpr const char *systemdOverrideUnitBasePath =
+static constexpr const char* systemdOverrideUnitBasePath =
     "/etc/systemd/system/";
 
 void ServiceConfig::updateSocketProperties(
-    const boost::container::flat_map<std::string, VariantType> &propertyMap)
+    const boost::container::flat_map<std::string, VariantType>& propertyMap)
 {
     auto listenIt = propertyMap.find("Listen");
     if (listenIt != propertyMap.end())
@@ -67,7 +69,7 @@
 }
 
 void ServiceConfig::updateServiceProperties(
-    const boost::container::flat_map<std::string, VariantType> &propertyMap)
+    const boost::container::flat_map<std::string, VariantType>& propertyMap)
 {
     auto stateIt = propertyMap.find("UnitFileState");
     if (stateIt != propertyMap.end())
@@ -111,8 +113,8 @@
 {
     conn->async_method_call(
         [this](boost::system::error_code ec,
-               const boost::container::flat_map<std::string, VariantType>
-                   &propertyMap) {
+               const boost::container::flat_map<std::string, VariantType>&
+                   propertyMap) {
             if (ec)
             {
                 phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -128,7 +130,7 @@
                     conn->async_method_call(
                         [this](boost::system::error_code ec,
                                const boost::container::flat_map<
-                                   std::string, VariantType> &propertyMap) {
+                                   std::string, VariantType>& propertyMap) {
                             if (ec)
                             {
                                 phosphor::logging::log<
@@ -145,7 +147,7 @@
                                     registerProperties();
                                 }
                             }
-                            catch (const std::exception &e)
+                            catch (const std::exception& e)
                             {
                                 phosphor::logging::log<
                                     phosphor::logging::level::ERR>(
@@ -163,7 +165,7 @@
                     registerProperties();
                 }
             }
-            catch (const std::exception &e)
+            catch (const std::exception& e)
             {
                 phosphor::logging::log<phosphor::logging::level::ERR>(
                     "Exception in getting socket properties",
@@ -203,11 +205,11 @@
 }
 
 ServiceConfig::ServiceConfig(
-    sdbusplus::asio::object_server &srv_,
-    std::shared_ptr<sdbusplus::asio::connection> &conn_,
-    const std::string &objPath_, const std::string &baseUnitName_,
-    const std::string &instanceName_, const std::string &serviceObjPath_,
-    const std::string &socketObjPath_) :
+    sdbusplus::asio::object_server& srv_,
+    std::shared_ptr<sdbusplus::asio::connection>& conn_,
+    const std::string& objPath_, const std::string& baseUnitName_,
+    const std::string& instanceName_, const std::string& serviceObjPath_,
+    const std::string& socketObjPath_) :
     server(srv_),
     conn(conn_), objPath(objPath_), baseUnitName(baseUnitName_),
     instanceName(instanceName_), serviceObjectPath(serviceObjPath_),
@@ -338,7 +340,7 @@
 void ServiceConfig::startServiceRestartTimer()
 {
     timer->expires_after(std::chrono::seconds(restartTimeout));
-    timer->async_wait([this](const boost::system::error_code &ec) {
+    timer->async_wait([this](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
         {
             // Timer reset.
@@ -354,9 +356,9 @@
         boost::asio::spawn(conn->get_io_context(),
                            [this](boost::asio::yield_context yield) {
                                // Stop and apply configuration for all objects
-                               for (auto &srvMgrObj : srvMgrObjects)
+                               for (auto& srvMgrObj : srvMgrObjects)
                                {
-                                   auto &srvObj = srvMgrObj.second;
+                                   auto& srvObj = srvMgrObj.second;
                                    if (srvObj->updatedFlag)
                                    {
                                        srvObj->stopAndApplyUnitConfig(yield);
@@ -365,9 +367,9 @@
                                // Do system reload
                                systemdDaemonReload(conn, yield);
                                // restart unit config.
-                               for (auto &srvMgrObj : srvMgrObjects)
+                               for (auto& srvMgrObj : srvMgrObjects)
                                {
-                                   auto &srvObj = srvMgrObj.second;
+                                   auto& srvObj = srvMgrObj.second;
                                    if (srvObj->updatedFlag)
                                    {
                                        srvObj->restartUnitConfig(yield);
@@ -386,7 +388,7 @@
     {
         iface->register_property(
             srvCfgPropPort, portNum,
-            [this](const uint16_t &req, uint16_t &res) {
+            [this](const uint16_t& req, uint16_t& res) {
                 if (!internalSet)
                 {
                     if (req == res)
@@ -408,7 +410,7 @@
     }
 
     iface->register_property(
-        srvCfgPropMasked, unitMaskedState, [this](const bool &req, bool &res) {
+        srvCfgPropMasked, unitMaskedState, [this](const bool& req, bool& res) {
             if (!internalSet)
             {
                 if (req == res)
@@ -438,7 +440,7 @@
 
     iface->register_property(
         srvCfgPropEnabled, unitEnabledState,
-        [this](const bool &req, bool &res) {
+        [this](const bool& req, bool& res) {
             if (!internalSet)
             {
                 if (req == res)
@@ -466,7 +468,7 @@
 
     iface->register_property(
         srvCfgPropRunning, unitRunningState,
-        [this](const bool &req, bool &res) {
+        [this](const bool& req, bool& res) {
             if (!internalSet)
             {
                 if (req == res)
diff --git a/src/utils.cpp b/src/utils.cpp
index 80ccdc5..775c39e 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -15,8 +15,8 @@
 */
 #include "utils.hpp"
 
-static inline void checkAndThrowInternalFailure(boost::system::error_code &ec,
-                                                const std::string &msg)
+static inline void checkAndThrowInternalFailure(boost::system::error_code& ec,
+                                                const std::string& msg)
 {
     if (ec)
     {
@@ -29,7 +29,7 @@
 }
 
 void systemdDaemonReload(
-    const std::shared_ptr<sdbusplus::asio::connection> &conn,
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
     boost::asio::yield_context yield)
 {
     boost::system::error_code ec;
@@ -39,7 +39,7 @@
     return;
 }
 
-static inline uint32_t getJobId(const std::string &path)
+static inline uint32_t getJobId(const std::string& path)
 {
     auto pos = path.rfind("/");
     if (pos == std::string::npos)
@@ -52,10 +52,10 @@
     return static_cast<uint32_t>(std::stoul(path.substr(pos + 1)));
 }
 
-void systemdUnitAction(const std::shared_ptr<sdbusplus::asio::connection> &conn,
+void systemdUnitAction(const std::shared_ptr<sdbusplus::asio::connection>& conn,
                        boost::asio::yield_context yield,
-                       const std::string &unitName,
-                       const std::string &actionMethod)
+                       const std::string& unitName,
+                       const std::string& actionMethod)
 {
     boost::system::error_code ec;
     auto jobPath = conn->yield_method_call<sdbusplus::message::object_path>(
@@ -95,9 +95,9 @@
 }
 
 void systemdUnitFilesStateChange(
-    const std::shared_ptr<sdbusplus::asio::connection> &conn,
-    boost::asio::yield_context yield, const std::vector<std::string> &unitFiles,
-    const std::string &unitState, bool maskedState, bool enabledState)
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
+    boost::asio::yield_context yield, const std::vector<std::string>& unitFiles,
+    const std::string& unitState, bool maskedState, bool enabledState)
 {
     boost::system::error_code ec;
 
