diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index ab1c66e..059a9cf 100755
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -102,7 +102,7 @@
   public: // Operators
 
     /** @brief Equals operator. */
-    bool operator==(const HardwareRegister & i_r) const
+    bool operator==(const HardwareRegister& i_r) const
     {
         // Comparing register type, chip type, and address should be sufficient.
         return (getRegisterType() == i_r.getRegisterType()) &&
@@ -111,7 +111,7 @@
     }
 
     /** @brief Less than operator. */
-    bool operator<(const HardwareRegister & i_r) const
+    bool operator<(const HardwareRegister& i_r) const
     {
         // Comparing register type, chip type, and address should be sufficient.
         if (getRegisterType() < i_r.getRegisterType())
@@ -136,7 +136,7 @@
   public:
 
     /** Function overloaded from parent Register class. */
-    const BitString * getBitString(const Chip & i_chip) const;
+    const BitString* getBitString(const Chip& i_chip) const;
 
 #if 0
     /**
@@ -157,7 +157,7 @@
      *                 read from hardware and update the cache.
      * @return See the return code from the registerRead() user interface API.
      */
-    ReturnCode read(const Chip & i_chip, bool i_force = false) const;
+    ReturnCode read(const Chip& i_chip, bool i_force = false) const;
 
 #ifndef __HEI_READ_ONLY
 
@@ -167,7 +167,7 @@
      * @param  i_chip  The target chip in which this register belongs.
      * @return See the return code from the registerWrite() user interface API.
      */
-    ReturnCode write(const Chip & i_chip) const;
+    ReturnCode write(const Chip& i_chip) const;
 
 #endif // __HEI_READ_ONLY
 
@@ -182,12 +182,12 @@
      * @param  i_chip  The target chip in which this register belongs.
      * @return A reference to the BitString.
      */
-    BitString & accessBitString(const Chip & i_chip);
+    BitString& accessBitString(const Chip& i_chip);
 
   private: // Hardware accessor management functions.
 
     /** @brief Asserts this register belongs on the target accessor chip. */
-    void verifyAccessorChip(const Chip & i_chip) const
+    void verifyAccessorChip(const Chip& i_chip) const
     {
         HEI_ASSERT(getChipType() == i_chip.getType());
     }
@@ -212,10 +212,10 @@
         ~Cache() = default;
 
         /** @brief Copy constructor. */
-        Cache(const Cache &) = delete;
+        Cache(const Cache&) = delete;
 
         /** @brief Assignment operator. */
-        Cache & operator=(const Cache &) = delete;
+        Cache& operator=(const Cache&) = delete;
 
         /**
          * @brief  Queries if a specific entry exists in the cache.
@@ -223,8 +223,8 @@
          * @param  i_hwReg The target register.
          * @return True if the entry exists, false otherwise.
          */
-        bool query(const Chip & i_chip,
-                   const HardwareRegister * i_hwReg) const;
+        bool query(const Chip& i_chip,
+                   const HardwareRegister* i_hwReg) const;
 
         /**
          * @brief  Returns the data buffer for the given chip and register.
@@ -234,8 +234,8 @@
          * @note   If an entry does not exist in the cache, an entry will be
          *         created and the BitString will be initialized to 0.
          */
-        BitString & access(const Chip & i_chip,
-                           const HardwareRegister * i_hwReg);
+        BitString& access(const Chip& i_chip,
+                           const HardwareRegister* i_hwReg);
 
         /** @brief Flushes entire contents from cache. */
         void flush();
@@ -245,7 +245,7 @@
          * @param i_chip  The target chip.
          * @param i_hwReg The target register.
          */
-        void flush(const Chip & i_chip, const HardwareRegister * i_hwReg);
+        void flush(const Chip& i_chip, const HardwareRegister* i_hwReg);
 
       private:
 
@@ -279,7 +279,7 @@
      * @brief Flushes this register from the cache.
      * @param  i_chip  The target chip in which this register belongs.
      */
-    void flush(const Chip & i_chip) const
+    void flush(const Chip& i_chip) const
     {
         cv_cache.flush(i_chip, this);
     }
@@ -290,7 +290,7 @@
      * @param  i_chip  The target chip in which this register belongs.
      * @return True if an entry for this register exist in this cache.
      */
-    bool queryCache(const Chip & i_chip) const
+    bool queryCache(const Chip& i_chip) const
     {
         return cv_cache.query(i_chip, this);
     }
@@ -299,7 +299,7 @@
      * @param  i_chip  The target chip in which this register belongs.
      * @return A reference to this register's BitString in cache.
      */
-    BitString & accessCache(const Chip & i_chip) const
+    BitString& accessCache(const Chip& i_chip) const
     {
         return cv_cache.access(i_chip, this);
     }
