diff --git a/src/register/hei_hardware_register.cpp b/src/register/hei_hardware_register.cpp
index 35883d2..6b66eb9 100755
--- a/src/register/hei_hardware_register.cpp
+++ b/src/register/hei_hardware_register.cpp
@@ -149,7 +149,7 @@
 
 //------------------------------------------------------------------------------
 
-HardwareRegister::Cache HardwareRegister::cv_cache {};
+HardwareRegister::Cache HardwareRegister::cv_cache{};
 
 //------------------------------------------------------------------------------
 
@@ -176,12 +176,12 @@
 //------------------------------------------------------------------------------
 
 BitString& HardwareRegister::Cache::access(const Chip& i_chip,
-                                           const HardwareRegister * i_hwReg)
+                                           const HardwareRegister* i_hwReg)
 {
     // If the entry does not exist, create a new entry.
     if (!query(i_chip, i_hwReg))
     {
-        BitString* bs = new BitStringBuffer { i_hwReg->getSize() * 8 };
+        BitString* bs = new BitStringBuffer{i_hwReg->getSize() * 8};
         iv_cache[i_chip][i_hwReg] = bs;
     }
 
diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index 6d2efe5..914e0f8 100755
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -37,12 +37,10 @@
 class HardwareRegister : public Register
 {
   public:
-
     /** @brief Pure virtual destructor. */
     virtual ~HardwareRegister() = 0;
 
   protected:
-
     /**
      * @brief Constructor from components.
      * @param i_chipType    Type of chip associated with this register.
@@ -59,7 +57,6 @@
     {}
 
   private: // Instance variables
-
     /** The type of chip associated with register. */
     const ChipType_t iv_chipType;
 
@@ -76,7 +73,6 @@
     const RegisterAccessLevel_t iv_accessLevel;
 
   public: // Accessor functions
-
     /** @return The type of chip associated with this register. */
     ChipType_t getChipType() const
     {
@@ -113,7 +109,6 @@
     virtual size_t getSize() const = 0;
 
   public: // Operators
-
     /** @brief Equals operator. */
     bool operator==(const HardwareRegister& i_r) const
     {
@@ -147,7 +142,6 @@
     }
 
   public:
-
     /** Function overloaded from parent Register class. */
     const BitString* getBitString(const Chip& i_chip) const;
 
@@ -185,7 +179,6 @@
 #endif // __HEI_READ_ONLY
 
   protected:
-
     /**
      * @brief  Provides access to this register's BitString.
      *
@@ -198,7 +191,6 @@
     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
     {
@@ -206,7 +198,6 @@
     }
 
   private: // Register cache class variable
-
     /**
      * @brief Caches the contents of registers read from hardware.
      *
@@ -217,7 +208,6 @@
     class Cache
     {
       public:
-
         /** @brief Default constructor. */
         Cache() = default;
 
@@ -259,7 +249,6 @@
         void flush(const Chip& i_chip, const HardwareRegister* i_hwReg);
 
       private:
-
         /**
          * @brief Stores a BitStringBuffer for each HardwareRegister per Chip.
          *
@@ -282,7 +271,6 @@
     static Cache cv_cache;
 
   public: // Register cache management functions.
-
     /** @brief Flushes the entire register cache. */
     static void flushAll()
     {
@@ -299,7 +287,6 @@
     }
 
   private: // Register cache management functions.
-
     /**
      * @param  i_chip  The target chip in which this register belongs.
      * @return True if an entry for this register exist in this cache.
diff --git a/src/register/hei_register.hpp b/src/register/hei_register.hpp
index 4b5c5fe..5246a5a 100755
--- a/src/register/hei_register.hpp
+++ b/src/register/hei_register.hpp
@@ -28,7 +28,6 @@
 class Register
 {
   public:
-
     /** @brief Pure virtual destructor. */
     virtual ~Register() = 0;
 
diff --git a/src/register/hei_scom_register.hpp b/src/register/hei_scom_register.hpp
index 9e04b0a..3723a58 100644
--- a/src/register/hei_scom_register.hpp
+++ b/src/register/hei_scom_register.hpp
@@ -16,7 +16,6 @@
 class ScomRegister : public HardwareRegister
 {
   public: // Constructor, destructors, assignment, etc.
-
     /**
      * @brief Constructor from components.
      * @param i_chipType    Type of chip associated with this register.
@@ -36,7 +35,6 @@
     ~ScomRegister() = 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<ScomRegister>;
@@ -58,7 +56,6 @@
     ScomRegister& operator=(const ScomRegister&) = delete;
 
   public: // Accessor functions
-
     /** Function overloaded from parent HardwareRegister class. */
     RegisterType_t getRegisterType() const
     {
@@ -78,7 +75,6 @@
     }
 
   private: // Instance variables
-
     /** This register's address. */
     const uint32_t iv_address;
 
@@ -101,7 +97,6 @@
 class IdScomRegister : public HardwareRegister
 {
   public: // Constructor, destructors, assignment, etc.
-
     /**
      * @brief Constructor from components.
      * @param i_chipType    Type of chip associated with this register.
@@ -121,7 +116,6 @@
     ~IdScomRegister() = 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<IdScomRegister>;
@@ -143,7 +137,6 @@
     IdScomRegister& operator=(const IdScomRegister&) = delete;
 
   public: // Accessor functions
-
     /** Function overloaded from parent HardwareRegister class. */
     RegisterType_t getRegisterType() const
     {
@@ -163,7 +156,6 @@
     }
 
   private: // Instance variables
-
     /** This register's address. */
     const uint64_t iv_address;
 
