diff --git a/src/isolator/hei_isolation_node.cpp b/src/isolator/hei_isolation_node.cpp
index b30a678..398960f 100644
--- a/src/isolator/hei_isolation_node.cpp
+++ b/src/isolator/hei_isolation_node.cpp
@@ -5,8 +5,8 @@
 
 //------------------------------------------------------------------------------
 
-bool IsolationNode::analyze(const Chip & i_chip, AttentionType_t i_attnType,
-                            IsolationData & io_isoData) const
+bool IsolationNode::analyze(const Chip& i_chip, AttentionType_t i_attnType,
+                            IsolationData& io_isoData) const
 {
     bool o_activeAttn = false; // Initially, assume no active attentions.
 
@@ -18,7 +18,7 @@
     HEI_ASSERT(iv_rules.end() != rule_itr);
 
     // Get the returned BitString for this rule.
-    const BitString * bs = rule_itr->second->getBitString(i_chip);
+    const BitString* bs = rule_itr->second->getBitString(i_chip);
 
     // Ensure this BitString is not longer than the maximum bit field.
     HEI_ASSERT(bs->getBitLen() <= sizeof(RegisterBit_t) * 8);
@@ -76,7 +76,7 @@
 
 //------------------------------------------------------------------------------
 
-void IsolationNode::addRule(AttentionType_t i_attnType, const Register * i_rule)
+void IsolationNode::addRule(AttentionType_t i_attnType, const Register* i_rule)
 {
     // A rule for this attention type should not already exist.
     HEI_ASSERT(iv_rules.end() == iv_rules.find(i_attnType));
@@ -90,7 +90,7 @@
 
 //------------------------------------------------------------------------------
 
-void IsolationNode::addChild(uint8_t i_bit, const IsolationNode * i_child)
+void IsolationNode::addChild(uint8_t i_bit, const IsolationNode* i_child)
 {
     // An entry for this bit should not already exist.
     HEI_ASSERT(iv_children.end() == iv_children.find(i_bit));
@@ -104,7 +104,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 e2ab485..68e2389 100644
--- a/src/isolator/hei_isolation_node.hpp
+++ b/src/isolator/hei_isolation_node.hpp
@@ -42,7 +42,7 @@
      * @param i_hwReg A reference to the HardwareRegister targeted for
      *                isolation.
      */
-    explicit IsolationNode(const HardwareRegister & i_hwReg) :
+    explicit IsolationNode(const HardwareRegister& i_hwReg) :
         iv_hwReg(i_hwReg)
     {}
 
@@ -60,7 +60,7 @@
      *
      * Needed by Flyweight class, but should not be allowed in general.
      */
-    IsolationNode(const IsolationNode &) = default;
+    IsolationNode(const IsolationNode&) = default;
 
     /**
      * @brief Explicitly disables assignment operator.
@@ -69,7 +69,7 @@
      * of the constant instance variables, but helps communicate it is not
      * allowed.
      */
-    IsolationNode & operator=(const IsolationNode &) = delete;
+    IsolationNode& operator=(const IsolationNode&) = delete;
 
   private: // Instance variables
 
@@ -78,7 +78,7 @@
      * this instance of the class. The reference is required to maintain
      * polymorphism.
      */
-    const HardwareRegister & iv_hwReg;
+    const HardwareRegister& iv_hwReg;
 
     /**
      * This register could report multiple types of attentions. We can use a
@@ -87,13 +87,13 @@
      * HardwareRegister objects and virtual operator registers (all children
      * of the Register class).
      */
-    std::map<AttentionType_t, const Register *> iv_rules;
+    std::map<AttentionType_t, const Register*> iv_rules;
 
     /**
      * Each bit (key) in this map indicates that an attention was driven from
      * another register (value).
      */
-    std::map<RegisterBit_t, const IsolationNode *> iv_children;
+    std::map<RegisterBit_t, const IsolationNode*> iv_children;
 
   public: // Member functions
 
@@ -111,8 +111,8 @@
      * @return True, if any active attentions found on this register.
      *         False, otherwise.
      */
-    bool analyze(const Chip & i_chip, AttentionType_t i_attnType,
-                 IsolationData & io_isoData) const;
+    bool analyze(const Chip& i_chip, AttentionType_t i_attnType,
+                 IsolationData& io_isoData) const;
 
     // TODO: The next two functions are only intended to be used during
     //       initialization of the isolator. Consider, making them private and
@@ -129,7 +129,7 @@
      * @param The target attention type.
      * @param The rule for this attention type.
      */
-    void addRule(AttentionType_t i_attnType, const Register * i_rule);
+    void addRule(AttentionType_t i_attnType, const Register* i_rule);
 
     /**
      * @brief Adds a child register to analyze for the given bit in this
@@ -141,19 +141,19 @@
      * @param The target bit on this register.
      * @param The child register to analyze for the given bit.
      */
-    void addChild(RegisterBit_t i_bit, const IsolationNode * i_child);
+    void addChild(RegisterBit_t i_bit, const IsolationNode* i_child);
 
   public: // Operators
 
     /** @brief Equals operator. */
-    bool operator==(const IsolationNode & i_r) const
+    bool operator==(const IsolationNode& i_r) const
     {
         // iv_hwReg should be unique per IsolationNode.
         return (iv_hwReg == i_r.iv_hwReg);
     }
 
     /** @brief Less than operator. */
-    bool operator<(const IsolationNode & i_r) const
+    bool operator<(const IsolationNode& i_r) const
     {
         // iv_hwReg should be unique per IsolationNode.
         return (iv_hwReg < i_r.iv_hwReg);
@@ -173,7 +173,7 @@
      *  this node can be popped off the top of the stack. Once all the recursive
      *  calls have returned back to the root node the stack should be empty.
      */
-    static std::vector<const IsolationNode *> cv_isolationStack;
+    static std::vector<const IsolationNode*> cv_isolationStack;
 
     /**
      * @brief Pushes this node to the top of the stack. Will assert that this
diff --git a/src/isolator/hei_isolator.cpp b/src/isolator/hei_isolator.cpp
index 75dfb96..d3cb5f2 100644
--- a/src/isolator/hei_isolator.cpp
+++ b/src/isolator/hei_isolator.cpp
@@ -11,7 +11,7 @@
 namespace libhei
 {
 
-ReturnCode Isolator::initialize(void * i_buffer, size_t i_bufferSize,
+ReturnCode Isolator::initialize(void* i_buffer, size_t i_bufferSize,
                                 bool i_forceInit)
 {
     ReturnCode rc;
@@ -20,8 +20,8 @@
     HEI_INF("Isolator::initialize(%p,%lu,%d)", i_buffer, i_bufferSize,
             i_forceInit);
 
-    Flyweight<ScomRegister>   & sfw = Flyweight<ScomRegister>::getSingleton();
-    Flyweight<IdScomRegister> & ifw = Flyweight<IdScomRegister>::getSingleton();
+    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 });
@@ -54,8 +54,8 @@
     Flyweight<IdScomRegister>::getSingleton().clear();
 }
 
-ReturnCode Isolator::isolate(const std::vector<Chip> & i_chipList,
-                             IsolationData & o_isoData) const
+ReturnCode Isolator::isolate(const std::vector<Chip>& i_chipList,
+                             IsolationData& o_isoData) const
 {
     ReturnCode rc;
 
@@ -66,7 +66,7 @@
     HardwareRegister::flushAll();
 
     // Analyze active error on each chip.
-    for (auto const & chip : i_chipList)
+    for (const auto& chip : i_chipList)
     {
         // BEGIN temporary code
         HEI_INF("Isolator::isolate(%p,%u)", chip.getChip(), chip.getType());
diff --git a/src/isolator/hei_isolator.hpp b/src/isolator/hei_isolator.hpp
index 3c4a589..e832514 100644
--- a/src/isolator/hei_isolator.hpp
+++ b/src/isolator/hei_isolator.hpp
@@ -41,22 +41,22 @@
     }
 
     /** @brief Copy constructor. */
-    Isolator(const Isolator &) = delete;
+    Isolator(const Isolator&) = delete;
 
     /** @brief Assignment operator. */
-    Isolator & operator=(const Isolator &) = delete;
+    Isolator& operator=(const Isolator&) = delete;
 
   public:
 
     /** @brief Provides access to a singleton instance of this object. */
-    static Isolator & getSingleton()
+    static Isolator& getSingleton()
     {
         static Isolator theIsolator;
         return theIsolator;
     }
 
     /** @brief See API wrapper description in hei_main.hpp. */
-    ReturnCode initialize(void * i_buffer, size_t i_bufferSize,
+    ReturnCode initialize(void* i_buffer, size_t i_bufferSize,
                           bool i_forceInit = false);
 
     /**
@@ -68,8 +68,8 @@
     void uninitialize();
 
     /** @brief See API wrapper description in hei_main.hpp. */
-    ReturnCode isolate(const std::vector<Chip> & i_chipList,
-                       IsolationData & o_isoData) const;
+    ReturnCode isolate(const std::vector<Chip>& i_chipList,
+                       IsolationData& o_isoData) const;
 
   private:
 
diff --git a/src/isolator/hei_signature.hpp b/src/isolator/hei_signature.hpp
index 4be04b3..79d4ed3 100644
--- a/src/isolator/hei_signature.hpp
+++ b/src/isolator/hei_signature.hpp
@@ -25,7 +25,7 @@
      * @param i_bit      The target bit within this register.
      * @param i_attnType The attention type reported by this bit.
      */
-    Signature(const Chip & i_chip, RegisterId_t i_id,
+    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),
@@ -36,10 +36,10 @@
     ~Signature() = default;
 
     /** @brief Copy constructor. */
-    Signature(const Signature &) = default;
+    Signature(const Signature&) = default;
 
     /** @brief Assignment operator. */
-    Signature & operator=(const Signature &) = default;
+    Signature& operator=(const Signature&) = default;
 
   private: // Instance variables.
 
@@ -52,7 +52,7 @@
   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; }
