diff --git a/.clang-format b/.clang-format
index 37469de..ef6f54e 100644
--- a/.clang-format
+++ b/.clang-format
@@ -5,7 +5,7 @@
 AlignAfterOpenBracket: Align
 AlignConsecutiveAssignments: false
 AlignConsecutiveDeclarations: false
-AlignEscapedNewlinesLeft: false
+AlignEscapedNewlines: Right
 AlignOperands:   true
 AlignTrailingComments: true
 AllowAllParametersOfDeclarationOnNextLine: true
@@ -14,13 +14,13 @@
 AllowShortFunctionsOnASingleLine: None
 AllowShortIfStatementsOnASingleLine: false
 AllowShortLoopsOnASingleLine: false
-AlwaysBreakAfterDefinitionReturnType: None
 AlwaysBreakAfterReturnType: None
 AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: false
+AlwaysBreakTemplateDeclarations: Yes
 BinPackArguments: true
 BinPackParameters: true
 BraceWrapping:
+  AfterCaseLabel:  true
   AfterClass:      true
   AfterControlStatement: true
   AfterEnum:       true
@@ -29,25 +29,50 @@
   AfterObjCDeclaration: true
   AfterStruct:     true
   AfterUnion:      true
+  AfterExternBlock: true
   BeforeCatch:     true
   BeforeElse:      true
   IndentBraces:    false
+  SplitEmptyFunction:   false
+  SplitEmptyRecord:     false
+  SplitEmptyNamespace:  false
 BreakBeforeBinaryOperators: None
 BreakBeforeBraces: Custom
 BreakBeforeTernaryOperators: true
 BreakConstructorInitializers: AfterColon
+BreakInheritanceList: AfterColon
+BreakStringLiterals: true
 ColumnLimit:     80
 CommentPragmas:  '^ IWYU pragma:'
+CompactNamespaces: false
 ConstructorInitializerAllOnOneLineOrOnePerLine: false
 ConstructorInitializerIndentWidth: 4
 ContinuationIndentWidth: 4
 Cpp11BracedListStyle: true
-DerivePointerAlignment: true
+DerivePointerAlignment: false
 PointerAlignment: Left
 DisableFormat:   false
 ExperimentalAutoDetectBinPacking: false
 FixNamespaceComments: true
 ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeBlocks: Regroup
+IncludeCategories:
+  - Regex:           '^[<"](gtest|gmock)'
+    Priority:        7
+  - Regex:           '^"config.h"'
+    Priority:        -1
+  - Regex:           '^".*\.h"'
+    Priority:        1
+  - Regex:           '^".*\.hpp"'
+    Priority:        2
+  - Regex:           '^<.*\.h>'
+    Priority:        3
+  - Regex:           '^<.*\.hpp>'
+    Priority:        4
+  - Regex:           '^<.*'
+    Priority:        5
+  - Regex:           '.*'
+    Priority:        6
 IndentCaseLabels: true
 IndentWidth:     4
 IndentWrappedFunctionNames: true
@@ -65,12 +90,17 @@
 PenaltyBreakString: 1000
 PenaltyExcessCharacter: 1000000
 PenaltyReturnTypeOnItsOwnLine: 60
-PointerAlignment: Right
 ReflowComments:  true
-SortIncludes:    false
+SortIncludes:    true
+SortUsingDeclarations: true
 SpaceAfterCStyleCast: false
+SpaceAfterTemplateKeyword: true
 SpaceBeforeAssignmentOperators: true
+SpaceBeforeCpp11BracedList: false
+SpaceBeforeCtorInitializerColon: true
+SpaceBeforeInheritanceColon: true
 SpaceBeforeParens: ControlStatements
+SpaceBeforeRangeBasedForLoopColon: true
 SpaceInEmptyParentheses: false
 SpacesBeforeTrailingComments: 1
 SpacesInAngles:  false
@@ -82,3 +112,4 @@
 TabWidth:        4
 UseTab:          Never
 ...
+
diff --git a/inc/srvcfg_manager.hpp b/inc/srvcfg_manager.hpp
index 8974b29..cd453b0 100644
--- a/inc/srvcfg_manager.hpp
+++ b/inc/srvcfg_manager.hpp
@@ -14,24 +14,25 @@
 // limitations under the License.
 */
 #pragma once
-#include <sdbusplus/timer.hpp>
 #include "utils.hpp"
 
+#include <sdbusplus/timer.hpp>
+
 namespace phosphor
 {
 namespace service
 {
 
-static constexpr const char *serviceConfigSrvName =
+static constexpr const char* serviceConfigSrvName =
     "xyz.openbmc_project.Control.Service.Manager";
-static constexpr const char *serviceConfigIntfName =
+static constexpr const char* serviceConfigIntfName =
     "xyz.openbmc_project.Control.Service.Attributes";
-static constexpr const char *srcCfgMgrBasePath =
+static constexpr const char* srcCfgMgrBasePath =
     "/xyz/openbmc_project/control/service";
-static constexpr const char *srvCfgPropPort = "Port";
-static constexpr const char *srvCfgPropMasked = "Masked";
-static constexpr const char *srvCfgPropEnabled = "Enabled";
-static constexpr const char *srvCfgPropRunning = "Running";
+static constexpr const char* srvCfgPropPort = "Port";
+static constexpr const char* srvCfgPropMasked = "Masked";
+static constexpr const char* srvCfgPropEnabled = "Enabled";
+static constexpr const char* srvCfgPropRunning = "Running";
 
 enum class UpdatedProp
 {
@@ -49,12 +50,12 @@
 class ServiceConfig
 {
   public:
-    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);
+    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);
     ~ServiceConfig() = default;
 
     std::shared_ptr<sdbusplus::asio::connection> conn;
@@ -65,7 +66,7 @@
     void startServiceRestartTimer();
 
   private:
-    sdbusplus::asio::object_server &server;
+    sdbusplus::asio::object_server& server;
     std::shared_ptr<sdbusplus::asio::dbus_interface> iface;
     bool internalSet = false;
     std::string objPath;
@@ -93,11 +94,11 @@
     void queryAndUpdateProperties();
     void createSocketOverrideConf();
     void updateServiceProperties(
-        const boost::container::flat_map<std::string, VariantType>
-            &propertyMap);
+        const boost::container::flat_map<std::string, VariantType>&
+            propertyMap);
     void updateSocketProperties(
-        const boost::container::flat_map<std::string, VariantType>
-            &propertyMap);
+        const boost::container::flat_map<std::string, VariantType>&
+            propertyMap);
     std::string getSocketUnitName();
     std::string getServiceUnitName();
 };
diff --git a/inc/utils.hpp b/inc/utils.hpp
index 5f01d44..9a1ff02 100644
--- a/inc/utils.hpp
+++ b/inc/utils.hpp
@@ -14,50 +14,51 @@
 // limitations under the License.
 */
 #pragma once
-#include <ctime>
-#include <chrono>
-#include <string>
-#include <sdbusplus/asio/object_server.hpp>
-#include <phosphor-logging/elog-errors.hpp>
-#include <xyz/openbmc_project/Common/error.hpp>
-#include <experimental/filesystem>
 #include <boost/asio.hpp>
+#include <phosphor-logging/elog-errors.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+#include <xyz/openbmc_project/Common/error.hpp>
 
-static constexpr const char *sysdStartUnit = "StartUnit";
-static constexpr const char *sysdStopUnit = "StopUnit";
-static constexpr const char *sysdRestartUnit = "RestartUnit";
-static constexpr const char *sysdReloadMethod = "Reload";
-static constexpr const char *sysdGetJobMethod = "GetJob";
-static constexpr const char *sysdReplaceMode = "replace";
-static constexpr const char *dBusGetAllMethod = "GetAll";
-static constexpr const char *dBusGetMethod = "Get";
-static constexpr const char *sysdService = "org.freedesktop.systemd1";
-static constexpr const char *sysdObjPath = "/org/freedesktop/systemd1";
-static constexpr const char *sysdMgrIntf = "org.freedesktop.systemd1.Manager";
-static constexpr const char *sysdUnitIntf = "org.freedesktop.systemd1.Unit";
-static constexpr const char *sysdSocketIntf = "org.freedesktop.systemd1.Socket";
-static constexpr const char *dBusPropIntf = "org.freedesktop.DBus.Properties";
-static constexpr const char *stateMasked = "masked";
-static constexpr const char *stateEnabled = "enabled";
-static constexpr const char *stateDisabled = "disabled";
-static constexpr const char *subStateRunning = "running";
+#include <chrono>
+#include <ctime>
+#include <experimental/filesystem>
+#include <string>
 
-static inline std::string addInstanceName(const std::string &instanceName,
-                                          const std::string &suffix)
+static constexpr const char* sysdStartUnit = "StartUnit";
+static constexpr const char* sysdStopUnit = "StopUnit";
+static constexpr const char* sysdRestartUnit = "RestartUnit";
+static constexpr const char* sysdReloadMethod = "Reload";
+static constexpr const char* sysdGetJobMethod = "GetJob";
+static constexpr const char* sysdReplaceMode = "replace";
+static constexpr const char* dBusGetAllMethod = "GetAll";
+static constexpr const char* dBusGetMethod = "Get";
+static constexpr const char* sysdService = "org.freedesktop.systemd1";
+static constexpr const char* sysdObjPath = "/org/freedesktop/systemd1";
+static constexpr const char* sysdMgrIntf = "org.freedesktop.systemd1.Manager";
+static constexpr const char* sysdUnitIntf = "org.freedesktop.systemd1.Unit";
+static constexpr const char* sysdSocketIntf = "org.freedesktop.systemd1.Socket";
+static constexpr const char* dBusPropIntf = "org.freedesktop.DBus.Properties";
+static constexpr const char* stateMasked = "masked";
+static constexpr const char* stateEnabled = "enabled";
+static constexpr const char* stateDisabled = "disabled";
+static constexpr const char* subStateRunning = "running";
+
+static inline std::string addInstanceName(const std::string& instanceName,
+                                          const std::string& suffix)
 {
     return (instanceName.empty() ? "" : suffix + instanceName);
 }
 
 void systemdDaemonReload(
-    const std::shared_ptr<sdbusplus::asio::connection> &conn,
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
     boost::asio::yield_context yield);
 
-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);
 
 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);
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;
 
