diff --git a/.clang-format b/.clang-format
index 1313ec8..d92a3f1 100644
--- a/.clang-format
+++ b/.clang-format
@@ -3,13 +3,15 @@
 # BasedOnStyle:  LLVM
 AccessModifierOffset: -2
 AlignAfterOpenBracket: Align
-AlignConsecutiveAssignments: true
+AlignConsecutiveAssignments: false
 AlignConsecutiveDeclarations: false
 AlignEscapedNewlines: Right
-AlignOperands:   true
-AlignTrailingComments: true
+AlignOperands:  Align
+AlignTrailingComments:
+  Kind: Always
+  OverEmptyLines: 1
 AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: false
+AllowShortBlocksOnASingleLine: Empty
 AllowShortCaseLabelsOnASingleLine: false
 AllowShortFunctionsOnASingleLine: Empty
 AllowShortIfStatementsOnASingleLine: false
@@ -36,12 +38,13 @@
   SplitEmptyFunction:   false
   SplitEmptyRecord:     false
   SplitEmptyNamespace:  false
+BreakAfterAttributes: Never
 BreakBeforeBinaryOperators: None
 BreakBeforeBraces: Custom
 BreakBeforeTernaryOperators: true
 BreakConstructorInitializers: AfterColon
 BreakInheritanceList: AfterColon
-BreakStringLiterals: true
+BreakStringLiterals: false
 ColumnLimit:     80
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
@@ -75,9 +78,13 @@
   - Regex:           '.*'
     Priority:        6
 IndentCaseLabels: true
+IndentRequiresClause: true
 IndentWidth:     4
 IndentWrappedFunctionNames: true
+InsertNewlineAtEOF: true
 KeepEmptyLinesAtTheStartOfBlocks: false
+LambdaBodyIndentation: OuterScope
+LineEnding: LF
 MacroBlockBegin: ''
 MacroBlockEnd:   ''
 MaxEmptyLinesToKeep: 1
@@ -85,13 +92,19 @@
 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
+RequiresExpressionIndentation: Keyword
 SortIncludes:    true
 SortUsingDeclarations: true
 SpaceAfterCStyleCast: false
@@ -111,7 +124,6 @@
 SpacesInSquareBrackets: false
 Standard:        Latest
 TabWidth:        4
-UseCRLF: false
 UseTab:          Never
 ...
 
diff --git a/src/chip_data/hei_chip_data.cpp b/src/chip_data/hei_chip_data.cpp
index 847c0a5..c5506aa 100644
--- a/src/chip_data/hei_chip_data.cpp
+++ b/src/chip_data/hei_chip_data.cpp
@@ -47,7 +47,7 @@
 
             // Get this register from the flyweight factory.
             auto& factory = Flyweight<const ScomRegister>::getSingleton();
-            auto hwReg    = factory.get(id, inst, attr, addr);
+            auto hwReg = factory.get(id, inst, attr, addr);
 
             // Add this register to the isolation chip.
             io_isoChip->addHardwareRegister(hwReg);
@@ -59,7 +59,7 @@
 
             // Get this register from the flyweight factory.
             auto& factory = Flyweight<const IdScomRegister>::getSingleton();
-            auto hwReg    = factory.get(id, inst, attr, addr);
+            auto hwReg = factory.get(id, inst, attr, addr);
 
             // Add this register to the isolation chip.
             io_isoChip->addHardwareRegister(hwReg);
@@ -239,8 +239,8 @@
 //------------------------------------------------------------------------------
 
 using TmpChildNodeMap = std::map<BitPosition_t, IsolationNode::Key>;
-using TmpNodeData     = std::pair<IsolationNode::Ptr, TmpChildNodeMap>;
-using TmpNodeMap      = std::map<IsolationNode::Key, TmpNodeData>;
+using TmpNodeData = std::pair<IsolationNode::Ptr, TmpChildNodeMap>;
+using TmpNodeMap = std::map<IsolationNode::Key, TmpNodeData>;
 
 void __readNode(ChipDataStream& io_stream, const IsolationChip::Ptr& i_isoChip,
                 TmpNodeMap& io_tmpNodeMap, Version_t i_version)
@@ -264,8 +264,8 @@
         HEI_ASSERT(0 != numIsoRules || 0 == numChildNodes);
 
         // Allocate memory for this isolation node.
-        auto isoNode =
-            std::make_shared<IsolationNode>(nodeId, nodeInst, regType);
+        auto isoNode = std::make_shared<IsolationNode>(nodeId, nodeInst,
+                                                       regType);
 
         // Add capture registers.
         for (unsigned int j = 0; j < numCapRegs; j++)
@@ -320,8 +320,8 @@
             Instance_t childInst;
             io_stream >> bit >> childId >> childInst;
 
-            auto ret =
-                cMap.emplace(bit, IsolationNode::Key{childId, childInst});
+            auto ret = cMap.emplace(bit,
+                                    IsolationNode::Key{childId, childInst});
             HEI_ASSERT(ret.second); // Should not have duplicate entries
         }
 
@@ -340,13 +340,13 @@
 {
     for (const auto& n : i_tmpNodeMap)
     {
-        const IsolationNode::Ptr& node  = n.second.first;
+        const IsolationNode::Ptr& node = n.second.first;
         const TmpChildNodeMap& childMap = n.second.second;
 
         // Link the child nodes, if they exist.
         for (const auto& c : childMap)
         {
-            const BitPosition_t& bit           = c.first;
+            const BitPosition_t& bit = c.first;
             const IsolationNode::Key& childKey = c.second;
 
             // Find the child node in the temporary map.
diff --git a/src/hei_signature.hpp b/src/hei_signature.hpp
index 0cb0444..2e8ca41 100644
--- a/src/hei_signature.hpp
+++ b/src/hei_signature.hpp
@@ -51,9 +51,9 @@
 
   private:
     Chip iv_chip;               ///< Chip containing this register.
-    NodeId_t iv_id         = 0; ///< Node ID.
+    NodeId_t iv_id = 0;         ///< Node ID.
     Instance_t iv_instance = 0; ///< Instance of this register.
-    BitPosition_t iv_bit   = 0; ///< Target bit within this register.
+    BitPosition_t iv_bit = 0;   ///< Target bit within this register.
 
     /** Attention type reported by this bit. */
     AttentionType_t iv_attnType = ATTN_TYPE_CHIP_CS;
diff --git a/src/hei_types.hpp b/src/hei_types.hpp
index bdbbffb..80f5ef8 100644
--- a/src/hei_types.hpp
+++ b/src/hei_types.hpp
@@ -63,7 +63,7 @@
  */
 enum RegisterType_t : uint8_t
 {
-    REG_TYPE_SCOM    = 0x01, ///< Power Systems SCOM register.
+    REG_TYPE_SCOM = 0x01,    ///< Power Systems SCOM register.
     REG_TYPE_ID_SCOM = 0x02, ///< Power Systems Indirect SCOM register.
 };
 
@@ -145,9 +145,9 @@
  */
 enum RegisterAttributeFlags_t : uint8_t
 {
-    REG_ATTR_ACCESS_READ  = 0x80, ///< Register read access access
+    REG_ATTR_ACCESS_READ = 0x80,  ///< Register read access access
     REG_ATTR_ACCESS_WRITE = 0x40, ///< Register write access access
-    REG_ATTR_RESERVED     = 0x3f, ///< Reserved/unused bits
+    REG_ATTR_RESERVED = 0x3f,     ///< Reserved/unused bits
 };
 
 /**
diff --git a/src/isolator/hei_isolation_chip.hpp b/src/isolator/hei_isolation_chip.hpp
index 7ba7346..7f13b47 100644
--- a/src/isolator/hei_isolation_chip.hpp
+++ b/src/isolator/hei_isolation_chip.hpp
@@ -31,7 +31,7 @@
 class IsolationChip
 {
   public: // Aliases
-    using Ptr      = std::shared_ptr<IsolationChip>;
+    using Ptr = std::shared_ptr<IsolationChip>;
     using ConstPtr = std::shared_ptr<const IsolationChip>;
 
     using Map = std::map<ChipType_t, const ConstPtr>;
diff --git a/src/isolator/hei_isolation_node.cpp b/src/isolator/hei_isolation_node.cpp
index 119c5ae..78c5b65 100644
--- a/src/isolator/hei_isolation_node.cpp
+++ b/src/isolator/hei_isolation_node.cpp
@@ -51,8 +51,8 @@
             {
                 // This bit was driven from an attention from another register.
                 // Continue down the isolation tree to look for more attentions.
-                bool attnFound =
-                    child_itr->second->analyze(i_chip, i_attnType, io_isoData);
+                bool attnFound = child_itr->second->analyze(i_chip, i_attnType,
+                                                            io_isoData);
                 if (!attnFound)
                 {
                     // It is possible the child node is only intended for FFDC.
@@ -152,8 +152,8 @@
 void IsolationNode::pushIsolationStack() const
 {
     // Ensure this node does not already exist in cv_isolationStack.
-    auto itr =
-        std::find(cv_isolationStack.begin(), cv_isolationStack.end(), this);
+    auto itr = std::find(cv_isolationStack.begin(), cv_isolationStack.end(),
+                         this);
     HEI_ASSERT(cv_isolationStack.end() == itr);
 
     // Push to node to the stack.
diff --git a/src/isolator/hei_isolation_node.hpp b/src/isolator/hei_isolation_node.hpp
index 858a8c1..d88ad02 100644
--- a/src/isolator/hei_isolation_node.hpp
+++ b/src/isolator/hei_isolation_node.hpp
@@ -40,7 +40,7 @@
 class IsolationNode
 {
   public: // Aliases
-    using Ptr      = std::shared_ptr<IsolationNode>;
+    using Ptr = std::shared_ptr<IsolationNode>;
     using ConstPtr = std::shared_ptr<const IsolationNode>;
 
     using Key = std::pair<NodeId_t, Instance_t>;
diff --git a/src/register/hei_hardware_register.cpp b/src/register/hei_hardware_register.cpp
index b6a2d12..0aa2342 100644
--- a/src/register/hei_hardware_register.cpp
+++ b/src/register/hei_hardware_register.cpp
@@ -60,7 +60,7 @@
     if (i_force || !queryCache(i_chip))
     {
         // Read this register from hardware.
-        uint64_t val  = 0;
+        uint64_t val = 0;
         accessFailure = registerRead(i_chip, getType(), getAddress(), val);
         if (!accessFailure)
         {
diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index be9fdc1..85d87ff 100644
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -37,7 +37,7 @@
 class HardwareRegister : public Register
 {
   public: // Aliases
-    using Ptr      = std::shared_ptr<HardwareRegister>;
+    using Ptr = std::shared_ptr<HardwareRegister>;
     using ConstPtr = std::shared_ptr<const HardwareRegister>;
 
     using Key = std::pair<RegisterId_t, Instance_t>;
diff --git a/src/register/hei_register.hpp b/src/register/hei_register.hpp
index 1f69cb2..6c1f1a9 100644
--- a/src/register/hei_register.hpp
+++ b/src/register/hei_register.hpp
@@ -27,7 +27,7 @@
 class Register
 {
   public: // Aliases
-    using Ptr      = std::shared_ptr<Register>;
+    using Ptr = std::shared_ptr<Register>;
     using ConstPtr = std::shared_ptr<const Register>;
 
   public:
diff --git a/src/util/hei_bit_string.cpp b/src/util/hei_bit_string.cpp
index 5313d7a..d5c9b83 100644
--- a/src/util/hei_bit_string.cpp
+++ b/src/util/hei_bit_string.cpp
@@ -30,18 +30,18 @@
 
     // Get the relative address of this byte and the relative starting position
     // within the byte.
-    uint64_t relPos  = 0;
+    uint64_t relPos = 0;
     uint8_t* relAddr = getRelativePosition(relPos, i_pos);
 
     // Get the length of the target bit field within this byte and the length of
     // the bit field for any remaining bits.
-    uint64_t bf_len     = i_len;
+    uint64_t bf_len = i_len;
     uint64_t remain_len = 0;
     if (UINT8_BIT_LEN < relPos + i_len)
     {
         // The target bit field crosses a byte boundary. So truncate the bit
         // length for this byte and update the remaining length.
-        bf_len     = UINT8_BIT_LEN - relPos;
+        bf_len = UINT8_BIT_LEN - relPos;
         remain_len = i_len - bf_len;
     }
 
@@ -74,18 +74,18 @@
 
     // Get the relative address of this byte and the relative starting position
     // within the byte.
-    uint64_t relPos  = 0;
+    uint64_t relPos = 0;
     uint8_t* relAddr = getRelativePosition(relPos, i_pos);
 
     // Get the length of the target bit field within this byte and the length of
     // the bit field for any remaining bits.
-    uint64_t bf_len     = i_len;
+    uint64_t bf_len = i_len;
     uint64_t remain_len = 0;
     if (UINT8_BIT_LEN < relPos + i_len)
     {
         // The target bit field crosses a byte boundary. So truncate the bit
         // length for this byte and update the remaining length.
-        bf_len     = UINT8_BIT_LEN - relPos;
+        bf_len = UINT8_BIT_LEN - relPos;
         remain_len = i_len - bf_len;
     }
 
@@ -204,7 +204,7 @@
         // Start with the last chunk and work backwards.
         for (int32_t pos = lastPos; 0 <= pos; pos -= UINT64_BIT_LEN)
         {
-            uint64_t len   = std::min(actLen - pos, UINT64_BIT_LEN);
+            uint64_t len = std::min(actLen - pos, UINT64_BIT_LEN);
             uint64_t value = i_sStr.getFieldRight(i_sPos + pos, len);
             setFieldRight(i_dPos + pos, len, value);
         }
diff --git a/src/util/hei_flyweight.hpp b/src/util/hei_flyweight.hpp
index a81fe30..a4c063d 100644
--- a/src/util/hei_flyweight.hpp
+++ b/src/util/hei_flyweight.hpp
@@ -56,7 +56,7 @@
         auto itr = std::lower_bound(
             iv_index.begin(), iv_index.end(), newEntry,
             [](const std::shared_ptr<T> a, const std::shared_ptr<T> b) {
-                return *a < *b;
+            return *a < *b;
             });
 
         // std::lower_bound() will return the first element that does not
diff --git a/test/bit_string_test.cpp b/test/bit_string_test.cpp
index 1c7290c..98bab7d 100644
--- a/test/bit_string_test.cpp
+++ b/test/bit_string_test.cpp
@@ -4,7 +4,7 @@
 
 using namespace libhei;
 
-static constexpr uint32_t UINT8_BIT_LEN  = (sizeof(uint8_t) * 8);
+static constexpr uint32_t UINT8_BIT_LEN = (sizeof(uint8_t) * 8);
 static constexpr uint32_t UINT64_BIT_LEN = (sizeof(uint64_t) * 8);
 
 // setBit()
diff --git a/test/flyweight_test.cpp b/test/flyweight_test.cpp
index 9ed9eb6..0b629a9 100644
--- a/test/flyweight_test.cpp
+++ b/test/flyweight_test.cpp
@@ -31,8 +31,8 @@
     auto f2 = foo_factory.get(2);
     auto f3 = foo_factory.get(1); // same as f1
 
-    ASSERT_NE(f1, f2); // Pointing to different objects
-    ASSERT_EQ(f1, f3); // Pointing to the same object
+    ASSERT_NE(f1, f2);            // Pointing to different objects
+    ASSERT_EQ(f1, f3);            // Pointing to the same object
 
     ASSERT_EQ(size_t(2),
               foo_factory.size()); // Only two entries in the flyweight
diff --git a/test/operator_register_test.cpp b/test/operator_register_test.cpp
index 227a566..2f79ba7 100644
--- a/test/operator_register_test.cpp
+++ b/test/operator_register_test.cpp
@@ -48,9 +48,9 @@
 TEST(OperatorRegisterTest, BasicOperationsWithFlyweights)
 {
     auto& const_factory = Flyweight<const ConstantRegister>::getSingleton();
-    auto& and_factory   = Flyweight<const AndRegister>::getSingleton();
-    auto& or_factory    = Flyweight<const OrRegister>::getSingleton();
-    auto& not_factory   = Flyweight<const NotRegister>::getSingleton();
+    auto& and_factory = Flyweight<const AndRegister>::getSingleton();
+    auto& or_factory = Flyweight<const OrRegister>::getSingleton();
+    auto& not_factory = Flyweight<const NotRegister>::getSingleton();
 
     auto const1 = const_factory.get(CONST1);
     auto const2 = const_factory.get(CONST2);
@@ -70,7 +70,7 @@
 
 TEST(OperatorRegisterTest, ShiftOperations)
 {
-    auto& const_factory  = Flyweight<const ConstantRegister>::getSingleton();
+    auto& const_factory = Flyweight<const ConstantRegister>::getSingleton();
     auto& lshift_factory = Flyweight<const LeftShiftRegister>::getSingleton();
     auto& rshift_factory = Flyweight<const RightShiftRegister>::getSingleton();
 
@@ -96,10 +96,10 @@
     // Something seemingly complex:
     //   ~(((CONST1 & CONST2) << 12) | ((CONST1 | CONST2) >> 4)))
 
-    auto& const_factory  = Flyweight<const ConstantRegister>::getSingleton();
-    auto& and_factory    = Flyweight<const AndRegister>::getSingleton();
-    auto& or_factory     = Flyweight<const OrRegister>::getSingleton();
-    auto& not_factory    = Flyweight<const NotRegister>::getSingleton();
+    auto& const_factory = Flyweight<const ConstantRegister>::getSingleton();
+    auto& and_factory = Flyweight<const AndRegister>::getSingleton();
+    auto& or_factory = Flyweight<const OrRegister>::getSingleton();
+    auto& not_factory = Flyweight<const NotRegister>::getSingleton();
     auto& lshift_factory = Flyweight<const LeftShiftRegister>::getSingleton();
     auto& rshift_factory = Flyweight<const RightShiftRegister>::getSingleton();
 
@@ -125,7 +125,7 @@
 TEST(OperatorRegisterTest, ConstRegConstructor)
 {
     auto& const_factory = Flyweight<const ConstantRegister>::getSingleton();
-    auto& and_factory   = Flyweight<const AndRegister>::getSingleton();
+    auto& and_factory = Flyweight<const AndRegister>::getSingleton();
 
     // The ConstRegister constructor is a template that requires some integer
     // type.
diff --git a/test/simulator/simulator.hpp b/test/simulator/simulator.hpp
index 085c5ff..4f81508 100644
--- a/test/simulator/simulator.hpp
+++ b/test/simulator/simulator.hpp
@@ -43,11 +43,11 @@
     /** The list of supported chip types for the simulator. */
     enum SimChipType
     {
-        SAMPLE      = 0xdeadbeef,
+        SAMPLE = 0xdeadbeef,
         EXPLORER_11 = 0x60d20011,
         EXPLORER_20 = 0x60d20020,
-        P10_10      = 0x20da0010,
-        P10_20      = 0x20da0020,
+        P10_10 = 0x20da0010,
+        P10_20 = 0x20da0020,
     };
 
   private:
@@ -125,8 +125,8 @@
     void addSignature(const Signature& i_signature)
     {
         // First check if this entry already exists.
-        auto itr =
-            std::find(iv_expSigList.begin(), iv_expSigList.end(), i_signature);
+        auto itr = std::find(iv_expSigList.begin(), iv_expSigList.end(),
+                             i_signature);
         ASSERT_EQ(iv_expSigList.end(), itr);
 
         // Add the new entry.
diff --git a/test/test-util-hash.cpp b/test/test-util-hash.cpp
index ba35625..bec7505 100644
--- a/test/test-util-hash.cpp
+++ b/test/test-util-hash.cpp
@@ -8,11 +8,11 @@
 {
     std::string s{"SOME_RANDOM_STRING"};
 
-    uint8_t h1      = 0xBE;
-    uint16_t h2     = 0xF2DD;
-    uint32_t h3     = 0xDFB31440;
-    uint64_t h4     = 0xD0D3828Ec49F687C;
-    NodeId_t h5     = 0xF2DD;                              // 2-byte field
+    uint8_t h1 = 0xBE;
+    uint16_t h2 = 0xF2DD;
+    uint32_t h3 = 0xDFB31440;
+    uint64_t h4 = 0xD0D3828Ec49F687C;
+    NodeId_t h5 = 0xF2DD;                                  // 2-byte field
     RegisterId_t h6 = static_cast<RegisterId_t>(0x31D080); // 3-byte field
 
     EXPECT_EQ(h1, hash<uint8_t>(s));
