diff --git a/src/register/hei_hardware_register.cpp b/src/register/hei_hardware_register.cpp
index a1de684..d3c5dd0 100755
--- a/src/register/hei_hardware_register.cpp
+++ b/src/register/hei_hardware_register.cpp
@@ -22,72 +22,81 @@
 
 //------------------------------------------------------------------------------
 
-const BitString * HardwareRegister::getBitString() const
+const BitString * HardwareRegister::getBitString( const Chip & i_chip ) const
 {
+    // Verify this register belongs on i_chip.
+    verifyAccessorChip( i_chip );
+
     // Calling read() will ensure that an entry exists in the cache and the
     // entry has at been synched with hardware at least once. Note that we
     // cannot read hardware for write-only registers. In this case, an entry
     // will be created in the cache, if it does not exist, when the cache is
-    // read below.
+    // accessed below.
 
     if ( ( REG_ACCESS_NONE != getAccessLevel() ) &&
          ( REG_ACCESS_WO   != getAccessLevel() ) )
     {
-        read();
+        read( i_chip );
     }
 
-    return &( accessCache() );
+    return &( accessCache(i_chip) );
 }
 
 //------------------------------------------------------------------------------
 
 #if 0
-BitString & HardwareRegister::accessBitString()
+BitString & HardwareRegister::accessBitString( const Chip & i_chip )
 {
+    // Verify this register belongs on i_chip.
+    verifyAccessorChip( i_chip );
+
     // Calling read() will ensure that an entry exists in the cache and the
     // entry has at been synched with hardware at least once. Note that we
     // cannot read hardware for write-only registers. In this case, an entry
     // will be created in the cache, if it does not exist, when the cache is
-    // read below.
+    // accessed below.
 
     if ( ( REG_ACCESS_NONE != getAccessLevel() ) &&
          ( REG_ACCESS_WO   != getAccessLevel() ) )
     {
-        read();
+        read( i_chip );
     }
 
-    return accessCache();
+    return accessCache( i_chip );
 }
 #endif
 
 //------------------------------------------------------------------------------
 
-ReturnCode HardwareRegister::read( bool i_force ) const
+ReturnCode HardwareRegister::read( const Chip & i_chip, bool i_force ) const
 {
     ReturnCode rc;
 
+    // Verify this register belongs on i_chip.
+    verifyAccessorChip( i_chip );
+
     // Read from hardware only if the read is forced or the entry for this
     // instance does not exist in the cache.
-    if ( i_force || !queryCache() )
+    if ( i_force || !queryCache(i_chip) )
     {
         // This register must be readable.
         HEI_ASSERT( ( REG_ACCESS_NONE != getAccessLevel() ) &&
                     ( REG_ACCESS_WO   != getAccessLevel() ) );
 
         // Get the buffer from the register cache.
-        BitString & bs = accessCache();
+        BitString & bs = accessCache( i_chip );
 
         // Get the byte size of the buffer.
         size_t sz_buffer = BitString::getMinBytes( bs.getBitLen() );
 
         // Read this register from hardware.
-        rc = registerRead( getAccessorChip().getChip(), bs.getBufAddr(),
+        rc = registerRead( i_chip.getChip(), bs.getBufAddr(),
                            sz_buffer, getRegisterType(), getAddress() );
         if ( RC_SUCCESS != rc )
         {
             // The read failed and we can't trust what was put in the register
             // cache. So remove this instance's entry from the cache.
-            cv_cache.flush( getAccessorChip(), this );
+            flush( i_chip );
         }
         else
         {
@@ -104,25 +113,28 @@
 
 #ifndef __HEI_READ_ONLY
 
-ReturnCode HardwareRegister::write() const
+ReturnCode HardwareRegister::write( const Chip & i_chip ) const
 {
     ReturnCode rc;
 
+    // Verify this register belongs on i_chip.
+    verifyAccessorChip( i_chip );
+
     // This register must be writable.
     HEI_ASSERT( ( REG_ACCESS_NONE != getAccessLevel() ) &&
                 ( REG_ACCESS_RO   != getAccessLevel() ) );
 
     // An entry for this register must exist in the cache.
-    HEI_ASSERT( queryCache() );
+    HEI_ASSERT( queryCache(i_chip) );
 
     // Get the buffer from the register cache.
-    BitString & bs = accessCache();
+    BitString & bs = accessCache( i_chip );
 
     // Get the byte size of the buffer.
     size_t sz_buffer = BitString::getMinBytes( bs.getBitLen() );
 
     // Write to this register to hardware.
-    rc = registerWrite( getAccessorChip().getChip(), bs.getBufAddr(),
+    rc = registerWrite( i_chip.getChip(), bs.getBufAddr(),
                         sz_buffer, getRegisterType(), getAddress() );
 
     if ( RC_SUCCESS == rc )
@@ -139,10 +151,6 @@
 
 //------------------------------------------------------------------------------
 
-HardwareRegister::Accessor * HardwareRegister::cv_accessor = nullptr;
-
-//------------------------------------------------------------------------------
-
 HardwareRegister::Cache HardwareRegister::cv_cache {};
 
 //------------------------------------------------------------------------------
