diff --git a/src/chip_data/hei_chip_data.cpp b/src/chip_data/hei_chip_data.cpp
index b37eb58..6a2508e 100644
--- a/src/chip_data/hei_chip_data.cpp
+++ b/src/chip_data/hei_chip_data.cpp
@@ -284,8 +284,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++)
@@ -340,8 +340,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
         }
 
diff --git a/src/hei_isolation_data.hpp b/src/hei_isolation_data.hpp
index e062e6d..2c30e0c 100644
--- a/src/hei_isolation_data.hpp
+++ b/src/hei_isolation_data.hpp
@@ -38,8 +38,7 @@
     {
         RegDumpEntry(RegisterId_t i_regId, Instance_t i_regInst,
                      std::shared_ptr<BitStringBuffer> i_data) :
-            regId(i_regId),
-            regInst(i_regInst), data(i_data)
+            regId(i_regId), regInst(i_regInst), data(i_data)
         {}
 
         RegisterId_t regId;                    ///< 3-byte register ID
diff --git a/src/hei_signature.hpp b/src/hei_signature.hpp
index 2e8ca41..1ce045d 100644
--- a/src/hei_signature.hpp
+++ b/src/hei_signature.hpp
@@ -35,8 +35,7 @@
      */
     Signature(const Chip& i_chip, NodeId_t i_id, Instance_t i_instance,
               BitPosition_t i_bit, AttentionType_t i_attnType) :
-        iv_chip(i_chip),
-        iv_id(i_id), iv_instance(i_instance), iv_bit(i_bit),
+        iv_chip(i_chip), iv_id(i_id), iv_instance(i_instance), iv_bit(i_bit),
         iv_attnType(i_attnType)
     {}
 
diff --git a/src/isolator/hei_isolation_node.cpp b/src/isolator/hei_isolation_node.cpp
index 099a955..9fe0ba5 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.
@@ -178,8 +178,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.
@@ -188,9 +188,8 @@
 
 //------------------------------------------------------------------------------
 
-void IsolationNode::captureRegisters(const Chip& i_chip,
-                                     IsolationData& io_isoData,
-                                     BitPosition_t i_bit) const
+void IsolationNode::captureRegisters(
+    const Chip& i_chip, IsolationData& io_isoData, BitPosition_t i_bit) const
 {
     auto itr = iv_capRegs.find(i_bit);
     if (iv_capRegs.end() != itr)
diff --git a/src/isolator/hei_isolation_node.hpp b/src/isolator/hei_isolation_node.hpp
index 5c5f8ed..1462093 100644
--- a/src/isolator/hei_isolation_node.hpp
+++ b/src/isolator/hei_isolation_node.hpp
@@ -53,8 +53,7 @@
      */
     IsolationNode(NodeId_t i_id, Instance_t i_instance,
                   RegisterType_t i_regType) :
-        iv_id(i_id),
-        iv_instance(i_instance), iv_regType(i_regType)
+        iv_id(i_id), iv_instance(i_instance), iv_regType(i_regType)
     {}
 
     /** @brief Destructor. */
diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index d75960c..bda6780 100644
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -55,8 +55,7 @@
      */
     HardwareRegister(RegisterId_t i_id, Instance_t i_instance,
                      RegisterAttributeFlags_t i_flags) :
-        Register(),
-        iv_id(i_id), iv_instance(i_instance), iv_flags(i_flags)
+        Register(), iv_id(i_id), iv_instance(i_instance), iv_flags(i_flags)
     {}
 
   private: // Instance variables
diff --git a/src/register/hei_scom_register.hpp b/src/register/hei_scom_register.hpp
index da0eee9..6eb5c6b 100644
--- a/src/register/hei_scom_register.hpp
+++ b/src/register/hei_scom_register.hpp
@@ -25,8 +25,7 @@
      */
     ScomRegister(RegisterId_t i_id, Instance_t i_instance,
                  RegisterAttributeFlags_t i_flags, uint32_t i_address) :
-        HardwareRegister(i_id, i_instance, i_flags),
-        iv_address(i_address)
+        HardwareRegister(i_id, i_instance, i_flags), iv_address(i_address)
     {}
 
     /** @brief Destructor. */
@@ -90,8 +89,7 @@
      */
     IdScomRegister(RegisterId_t i_id, Instance_t i_instance,
                    RegisterAttributeFlags_t i_flags, uint64_t i_address) :
-        HardwareRegister(i_id, i_instance, i_flags),
-        iv_address(i_address)
+        HardwareRegister(i_id, i_instance, i_flags), iv_address(i_address)
     {}
 
     /** @brief Destructor. */
diff --git a/src/util/hei_flyweight.hpp b/src/util/hei_flyweight.hpp
index 9ba9263..a81fe30 100644
--- a/src/util/hei_flyweight.hpp
+++ b/src/util/hei_flyweight.hpp
@@ -56,8 +56,8 @@
         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
         // compare less than newEntry. So if an element is found, we must make
