diff --git a/.clang-format b/.clang-format
index cab3139..82c0e2c 100644
--- a/.clang-format
+++ b/.clang-format
@@ -6,12 +6,12 @@
 AlignConsecutiveAssignments: false
 AlignConsecutiveDeclarations: false
 AlignEscapedNewlines: Right
-AlignOperands:   true
+AlignOperands:  Align
 AlignTrailingComments: true
 AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: false
+AllowShortBlocksOnASingleLine: Empty
 AllowShortCaseLabelsOnASingleLine: false
-AllowShortFunctionsOnASingleLine: None
+AllowShortFunctionsOnASingleLine: Empty
 AllowShortIfStatementsOnASingleLine: false
 AllowShortLoopsOnASingleLine: false
 AlwaysBreakAfterReturnType: None
@@ -49,6 +49,7 @@
 ConstructorInitializerIndentWidth: 4
 ContinuationIndentWidth: 4
 Cpp11BracedListStyle: true
+DeriveLineEnding: false
 DerivePointerAlignment: false
 PointerAlignment: Left
 DisableFormat:   false
@@ -74,9 +75,11 @@
   - Regex:           '.*'
     Priority:        6
 IndentCaseLabels: true
+IndentRequiresClause: true
 IndentWidth:     4
 IndentWrappedFunctionNames: true
-KeepEmptyLinesAtTheStartOfBlocks: true
+KeepEmptyLinesAtTheStartOfBlocks: false
+LambdaBodyIndentation: OuterScope
 MacroBlockBegin: ''
 MacroBlockEnd:   ''
 MaxEmptyLinesToKeep: 1
@@ -84,13 +87,18 @@
 ObjCBlockIndentWidth: 2
 ObjCSpaceAfterProperty: false
 ObjCSpaceBeforeProtocolList: true
+PenaltyBreakAssignment: 25
 PenaltyBreakBeforeFirstCallParameter: 19
 PenaltyBreakComment: 300
 PenaltyBreakFirstLessLess: 120
 PenaltyBreakString: 1000
 PenaltyExcessCharacter: 1000000
 PenaltyReturnTypeOnItsOwnLine: 60
+PenaltyIndentedWhitespace: 0
+QualifierAlignment: Left
+ReferenceAlignment: Left
 ReflowComments:  true
+RequiresClausePosition: OwnLine
 SortIncludes:    true
 SortUsingDeclarations: true
 SpaceAfterCStyleCast: false
@@ -110,6 +118,7 @@
 SpacesInSquareBrackets: false
 Standard:        Latest
 TabWidth:        4
+UseCRLF: false
 UseTab:          Never
 ...
 
diff --git a/slp_message_handler.cpp b/slp_message_handler.cpp
index a9b6ff0..a99cd54 100644
--- a/slp_message_handler.cpp
+++ b/slp_message_handler.cpp
@@ -63,7 +63,6 @@
 
 std::tuple<int, buffer> processSrvTypeRequest(const Message& req)
 {
-
     /*
        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
@@ -92,17 +91,17 @@
     bool firstIteration = true;
     for_each(svcList.cbegin(), svcList.cend(),
              [&service, &firstIteration](const auto& svc) {
-                 if (firstIteration == true)
-                 {
-                     service = svc.first;
-                     firstIteration = false;
-                 }
-                 else
-                 {
-                     service += ",";
-                     service += svc.first;
-                 }
-             });
+        if (firstIteration == true)
+        {
+            service = svc.first;
+            firstIteration = false;
+        }
+        else
+        {
+            service += ",";
+            service += svc.first;
+        }
+    });
 
     buff = prepareHeader(req);
 
@@ -138,7 +137,6 @@
 
 std::tuple<int, buffer> processSrvRequest(const Message& req)
 {
-
     /*
           Service Reply
           0                   1                   2                   3
@@ -213,8 +211,8 @@
     auto pos = slp::response::OFFSET_URL_ENTRY + slp::response::SIZE_URL_COUNT;
     for (const auto& addr : ifaddrList)
     {
-        std::string url =
-            svc.name + ':' + svc.type + "//" + addr + ',' + svc.port;
+        std::string url = svc.name + ':' + svc.type + "//" + addr + ',' +
+                          svc.port;
 
         buff.resize(buff.size() + slp::response::SIZE_URL_ENTRY + url.length());
 
@@ -345,8 +343,8 @@
     switch (msg.header.functionID)
     {
         case (uint8_t)slp::FunctionType::SRVTYPERQST:
-            std::tie(rc, resp) =
-                slp::handler::internal::processSrvTypeRequest(msg);
+            std::tie(rc,
+                     resp) = slp::handler::internal::processSrvTypeRequest(msg);
             break;
         case (uint8_t)slp::FunctionType::SRVRQST:
             std::tie(rc, resp) = slp::handler::internal::processSrvRequest(msg);
diff --git a/slp_parser.cpp b/slp_parser.cpp
index 9b4119b..f6f85db 100644
--- a/slp_parser.cpp
+++ b/slp_parser.cpp
@@ -76,7 +76,6 @@
 
 int parseSrvTypeRqst(const buffer& buff, Message& req)
 {
-
     /*  0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
diff --git a/slp_server.hpp b/slp_server.hpp
index c890ced..dd96cfe 100644
--- a/slp_server.hpp
+++ b/slp_server.hpp
@@ -23,7 +23,6 @@
  */
 class Server
 {
-
   public:
     Server() : Server(slp::PORT, nullptr){};
 
diff --git a/slp_service_info.hpp b/slp_service_info.hpp
index de7ec45..a67fde6 100644
--- a/slp_service_info.hpp
+++ b/slp_service_info.hpp
@@ -27,8 +27,8 @@
         delimtrPos = line.find(DELIMITER, delimtrPrevPos);
         while (delimtrPos != std::string::npos)
         {
-            tokens[count] =
-                line.substr(delimtrPrevPos, (delimtrPos - delimtrPrevPos));
+            tokens[count] = line.substr(delimtrPrevPos,
+                                        (delimtrPos - delimtrPrevPos));
             delimtrPrevPos = delimtrPos + 1;
 
             delimtrPos = line.find(DELIMITER, delimtrPrevPos);
