diff --git a/src/isolator/hei_isolation_node.cpp b/src/isolator/hei_isolation_node.cpp
index 7d52344..8d67094 100644
--- a/src/isolator/hei_isolation_node.cpp
+++ b/src/isolator/hei_isolation_node.cpp
@@ -54,18 +54,18 @@
                 // io_isoData. If there are no other active attentions, the user
                 // application could use this signature to help determine, and
                 // circumvent, the isolation problem.
-                io_isoData.addSignature(Signature { i_chip, iv_hwReg.getId(),
-                                                    iv_hwReg.getInstance(),
-                                                    bit, i_attnType });
+                io_isoData.addSignature(Signature{i_chip, iv_hwReg.getId(),
+                                                  iv_hwReg.getInstance(), bit,
+                                                  i_attnType});
             }
         }
         else
         {
             // We have reached a leaf in the isolation tree. Add this bit's
             // signature to io_isoData.
-            io_isoData.addSignature(Signature { i_chip, iv_hwReg.getId(),
-                                                iv_hwReg.getInstance(),
-                                                bit, i_attnType });
+            io_isoData.addSignature(Signature{i_chip, iv_hwReg.getId(),
+                                              iv_hwReg.getInstance(), bit,
+                                              i_attnType});
         }
     }
 
@@ -105,7 +105,7 @@
 
 //------------------------------------------------------------------------------
 
-std::vector<const IsolationNode*> IsolationNode::cv_isolationStack {};
+std::vector<const IsolationNode*> IsolationNode::cv_isolationStack{};
 
 //------------------------------------------------------------------------------
 
diff --git a/src/isolator/hei_isolation_node.hpp b/src/isolator/hei_isolation_node.hpp
index a92e48e..86098fc 100644
--- a/src/isolator/hei_isolation_node.hpp
+++ b/src/isolator/hei_isolation_node.hpp
@@ -36,7 +36,6 @@
 class IsolationNode
 {
   public: // Constructors, destructor, assignment
-
     /**
      * @brief Constructor from components.
      * @param i_hwReg A reference to the HardwareRegister targeted for
@@ -49,7 +48,6 @@
     ~IsolationNode() = default;
 
   private:
-
     // This is needed to allow the flyweights to use the copy constructor, but
     // not allow it to be used in general.
     friend class Flyweight<IsolationNode>;
@@ -71,7 +69,6 @@
     IsolationNode& operator=(const IsolationNode&) = delete;
 
   private: // Instance variables
-
     /**
      * This is a reference to the HardwareRegister targeted for isolation by
      * this instance of the class. The reference is required to maintain
@@ -95,7 +92,6 @@
     std::map<RegisterBit_t, const IsolationNode*> iv_children;
 
   public: // Member functions
-
     /**
      * @brief  Finds all active attentions on this register. If an active bit is
      *         a leaf in the isolation tree, the bit's signature is added to the
@@ -143,7 +139,6 @@
     void addChild(RegisterBit_t i_bit, const IsolationNode* i_child);
 
   public: // Operators
-
     /** @brief Equals operator. */
     bool operator==(const IsolationNode& i_r) const
     {
@@ -159,7 +154,6 @@
     }
 
   private: // Isolation stack and supporting functions.
-
     /** When analyze() is called at the tree root, all recursive calls to
      *  analyze() will target the same chip and attention type. So we only need
      *  to keep track of the nodes that have been analyzed to avoid cyclic
diff --git a/src/isolator/hei_isolator.cpp b/src/isolator/hei_isolator.cpp
index d3cb5f2..a4c032d 100644
--- a/src/isolator/hei_isolator.cpp
+++ b/src/isolator/hei_isolator.cpp
@@ -23,17 +23,15 @@
     Flyweight<ScomRegister>&   sfw = Flyweight<ScomRegister>::getSingleton();
     Flyweight<IdScomRegister>& ifw = Flyweight<IdScomRegister>::getSingleton();
 
-    sfw.get(ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                           REG_INST_DEFAULT, REG_ACCESS_RW, 0x01234567 });
-    sfw.get(ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                           REG_INST_DEFAULT, REG_ACCESS_RW, 0x00112233 });
+    sfw.get(ScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
+                         REG_ACCESS_RW, 0x01234567});
+    sfw.get(ScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
+                         REG_ACCESS_RW, 0x00112233});
 
-    ifw.get(IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                             REG_INST_DEFAULT, REG_ACCESS_RW,
-                             0x0123456789abcdef });
-    ifw.get(IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                             REG_INST_DEFAULT, REG_ACCESS_RW,
-                             0x0011223344556677 });
+    ifw.get(IdScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
+                           REG_ACCESS_RW, 0x0123456789abcdef});
+    ifw.get(IdScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
+                           REG_ACCESS_RW, 0x0011223344556677});
     // END temporary code
 
     return rc;
diff --git a/src/isolator/hei_isolator.hpp b/src/isolator/hei_isolator.hpp
index e832514..d779b7b 100644
--- a/src/isolator/hei_isolator.hpp
+++ b/src/isolator/hei_isolator.hpp
@@ -29,7 +29,6 @@
 class Isolator
 {
   private: // This class cannot be instantiated. Use getSingleton() instead.
-
     /** @brief Default constructor. */
     Isolator() = default;
 
@@ -47,7 +46,6 @@
     Isolator& operator=(const Isolator&) = delete;
 
   public:
-
     /** @brief Provides access to a singleton instance of this object. */
     static Isolator& getSingleton()
     {
@@ -70,9 +68,6 @@
     /** @brief See API wrapper description in hei_main.hpp. */
     ReturnCode isolate(const std::vector<Chip>& i_chipList,
                        IsolationData& o_isoData) const;
-
-  private:
-
 }; // end class Isolator
 
 } // end namespace libhei
diff --git a/src/isolator/hei_signature.hpp b/src/isolator/hei_signature.hpp
index 23b3f7c..fbacfc4 100644
--- a/src/isolator/hei_signature.hpp
+++ b/src/isolator/hei_signature.hpp
@@ -16,7 +16,6 @@
 class Signature
 {
   public: // Constructors, destructor, assignment, etc.
-
     /**
      * @brief Constructor from components.
      * @param i_chip     The chip containing this register.
@@ -43,7 +42,6 @@
     Signature& operator=(const Signature&) = default;
 
   private: // Instance variables.
-
     Chip               iv_chip;     ///< Chip containing this register.
     RegisterId_t       iv_id;       ///< Register ID.
     RegisterInstance_t iv_instance; ///< Instance of this register.
@@ -51,7 +49,6 @@
     AttentionType_t    iv_attnType; ///< Attention type reported by this bit.
 
   public: // Member functions
-
     /** @return The chip containing this register. */
     const Chip& getChip() const
     {
