diff --git a/src/isolator/hei_isolation_node.cpp b/src/isolator/hei_isolation_node.cpp
index 398960f..7d52344 100644
--- a/src/isolator/hei_isolation_node.cpp
+++ b/src/isolator/hei_isolation_node.cpp
@@ -27,7 +27,8 @@
     for (RegisterBit_t bit = 0; bit < bs->getBitLen(); bit++)
     {
         // Continue to the next bit if not active.
-        if (!bs->isBitSet(bit)) continue;
+        if (!bs->isBitSet(bit))
+            continue;
 
         // At least one active bit was found.
         o_activeAttn = true;
@@ -39,8 +40,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)
             {
                 // Something went wrong. There should have been an active
@@ -111,8 +112,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 68e2389..a92e48e 100644
--- a/src/isolator/hei_isolation_node.hpp
+++ b/src/isolator/hei_isolation_node.hpp
@@ -42,8 +42,7 @@
      * @param i_hwReg A reference to the HardwareRegister targeted for
      *                isolation.
      */
-    explicit IsolationNode(const HardwareRegister& i_hwReg) :
-        iv_hwReg(i_hwReg)
+    explicit IsolationNode(const HardwareRegister& i_hwReg) : iv_hwReg(i_hwReg)
     {}
 
     /** @brief Destructor. */
@@ -182,8 +181,10 @@
     void pushIsolationStack() const;
 
     /** @brief Pops the top node off of cv_isolationStack. */
-    void popIsolationStack() const { cv_isolationStack.pop_back(); }
-
+    void popIsolationStack() const
+    {
+        cv_isolationStack.pop_back();
+    }
 };
 
 } // end namespace libhei
diff --git a/src/isolator/hei_signature.hpp b/src/isolator/hei_signature.hpp
index 79d4ed3..23b3f7c 100644
--- a/src/isolator/hei_signature.hpp
+++ b/src/isolator/hei_signature.hpp
@@ -28,8 +28,9 @@
     Signature(const Chip& i_chip, RegisterId_t i_id,
               RegisterInstance_t i_instance, RegisterBit_t i_bit,
               AttentionType_t i_attnType) :
-        iv_chip(i_chip), iv_id(i_id), iv_instance(i_instance),
-        iv_bit(i_bit), iv_attnType(i_attnType)
+        iv_chip(i_chip),
+        iv_id(i_id), iv_instance(i_instance), iv_bit(i_bit),
+        iv_attnType(i_attnType)
     {}
 
     /** @brief Destructor. */
@@ -52,19 +53,34 @@
   public: // Member functions
 
     /** @return The chip containing this register. */
-    const Chip& getChip() const { return iv_chip; }
+    const Chip& getChip() const
+    {
+        return iv_chip;
+    }
 
     /** @return The register ID. */
-    RegisterId_t getId() const { return iv_id; }
+    RegisterId_t getId() const
+    {
+        return iv_id;
+    }
 
     /** @return The instance of this register. */
-    RegisterInstance_t getInstance() const { return iv_instance; }
+    RegisterInstance_t getInstance() const
+    {
+        return iv_instance;
+    }
 
     /** @return The target bit within this register. */
-    RegisterBit_t getBit() const { return iv_bit; }
+    RegisterBit_t getBit() const
+    {
+        return iv_bit;
+    }
 
     /** @return The attention type reported by this bit. */
-    AttentionType_t getAttnType() const { return iv_attnType; }
+    AttentionType_t getAttnType() const
+    {
+        return iv_attnType;
+    }
 };
 
 } // end namespace libhei
