diff --git a/src/register/hei_hardware_register.cpp b/src/register/hei_hardware_register.cpp
index c8cc1dc..3ee4297 100755
--- a/src/register/hei_hardware_register.cpp
+++ b/src/register/hei_hardware_register.cpp
@@ -51,7 +51,7 @@
 
 // ---------------------------------------------------------------------
 
-void ScomRegister::SetBitString( const BitString *bs )
+void HardwareRegister::SetBitString( const BitString *bs )
 {
     BitString & l_string  = AccessBitString();
     l_string.setString(*bs);
@@ -60,7 +60,7 @@
 
 //------------------------------------------------------------------------------
 
-const BitString * ScomRegister::GetBitString(ATTENTION_TYPE i_type) const
+const BitString * HardwareRegister::GetBitString(ATTENTION_TYPE i_type) const
 {
     // 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
@@ -77,7 +77,7 @@
 
 //------------------------------------------------------------------------------
 
-BitString & ScomRegister::AccessBitString()
+BitString & HardwareRegister::AccessBitString()
 {
     // 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
@@ -95,7 +95,7 @@
 
 //------------------------------------------------------------------------------
 
-uint32_t ScomRegister::Read() const
+uint32_t HardwareRegister::Read() const
 {
     uint32_t o_rc = SUCCESS;
 
@@ -112,9 +112,9 @@
 
 //------------------------------------------------------------------------------
 
-uint32_t ScomRegister::ForceRead() const
+uint32_t HardwareRegister::ForceRead() const
 {
-    #define PRDF_FUNC "[ScomRegister::ForceRead] "
+    #define PRDF_FUNC "[HardwareRegister::ForceRead] "
 
     uint32_t o_rc = FAIL;
 
@@ -148,9 +148,9 @@
 
 //------------------------------------------------------------------------------
 
-uint32_t ScomRegister::Write()
+uint32_t HardwareRegister::Write()
 {
-    #define PRDF_FUNC "[ScomRegister::Write] "
+    #define PRDF_FUNC "[HardwareRegister::Write] "
 
     uint32_t o_rc = FAIL;
 
@@ -188,7 +188,7 @@
 
 //------------------------------------------------------------------------------
 
-uint32_t ScomRegister::Access( BitString & bs,
+uint32_t HardwareRegister::Access( BitString & bs,
                                RegisterAccess::Operation op ) const
 {
     int32_t l_rc = SCR_ACCESS_FAILED;
@@ -198,7 +198,7 @@
     return(l_rc);
 }
 //-----------------------------------------------------------------------------
-ExtensibleChip* ScomRegister::getChip( )const
+ExtensibleChip* HardwareRegister::getChip( )const
 {
     ExtensibleChip* l_pchip = NULL;
     l_pchip = ServiceDataCollector::getChipAnalyzed();
@@ -210,7 +210,7 @@
 
 //------------------------------------------------------------------------------
 
-bool ScomRegister::queryCache() const
+bool HardwareRegister::queryCache() const
 {
     RegDataCache & cache = RegDataCache::getCachedRegisters();
     BitString * bs = cache.queryCache( getChip(), this );
@@ -219,7 +219,7 @@
 
 //------------------------------------------------------------------------------
 
-BitString & ScomRegister::readCache() const
+BitString & HardwareRegister::readCache() const
 {
     RegDataCache & cache = RegDataCache::getCachedRegisters();
     return cache.read( getChip(), this );
@@ -227,7 +227,7 @@
 
 //------------------------------------------------------------------------------
 
-void ScomRegister::flushCache( ExtensibleChip *i_pChip ) const
+void HardwareRegister::flushCache( ExtensibleChip *i_pChip ) const
 {
      RegDataCache & regDump = RegDataCache::getCachedRegisters();
     if( NULL == i_pChip )
@@ -242,7 +242,7 @@
 
 //-----------------------------------------------------------------------------
 
-bool ScomRegister::operator == ( const ScomRegister & i_rightRegister ) const
+bool HardwareRegister::operator == ( const HardwareRegister & i_rightRegister ) const
 {
     if( iv_scomAddress == i_rightRegister.GetAddress() )
     {
@@ -256,7 +256,7 @@
 }
 
 //-----------------------------------------------------------------------------
-bool ScomRegister::operator < ( const ScomRegister & i_rightRegister  ) const
+bool HardwareRegister::operator < ( const HardwareRegister & i_rightRegister  ) const
 {
     if( iv_scomAddress == i_rightRegister.GetAddress() )
     {
@@ -270,7 +270,7 @@
 
 }
 //-----------------------------------------------------------------------------
-bool ScomRegister::operator >= ( const ScomRegister & i_rightRegister  ) const
+bool HardwareRegister::operator >= ( const HardwareRegister & i_rightRegister  ) const
 {
     return !( *this < i_rightRegister );
 }
diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index f3b7b28..ddea721 100755
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -24,7 +24,7 @@
 class MopsRegisterAccess;
 class ExtensibleChip;
 
-class ScomRegister : public Register
+class HardwareRegister : public Register
 {
   public:
 
@@ -34,7 +34,7 @@
      * @param     i_bitLength      bit length of register
      * @param     i_targetType     target type associated with register
      */
-    ScomRegister( uint64_t i_address, uint32_t i_bitLength,
+    HardwareRegister( uint64_t i_address, uint32_t i_bitLength,
                   TARGETING::TYPE i_targetType, AccessLevel i_access ) :
         Register(),
         iv_bitLength( i_bitLength ),
@@ -47,7 +47,7 @@
      * @brief     constructor .Added this because we save object of this type in
      * @          FlyweightS
      */
-    ScomRegister():
+    HardwareRegister():
         Register(),
         iv_bitLength( 0 ),
         iv_chipType( TARGETING::TYPE_NA ),
@@ -127,20 +127,20 @@
     * @param     i_rightRegister   register to be compared against
     * @return    Returns true if registers are equal false otherwise
     */
-   bool operator == ( const ScomRegister & i_rightRegister ) const ;
+   bool operator == ( const HardwareRegister & i_rightRegister ) const ;
    /**
     * @brief     defines < operation for ScomRegisterAccess
     * @param     i_rightRegister   register to be compared against
     * @return    Returns false if i_rightRegisters is less and true otherwise
     */
-   bool operator < ( const ScomRegister & i_rightRegister  ) const ;
+   bool operator < ( const HardwareRegister & i_rightRegister  ) const ;
    /**
     * @brief     defines >= operation for ScomRegisterAccess
     * @param     i_rightRegister   register to be compared against
     * @return    Returns true if registers is >= i_rightRegister false
     *            otherwise
     */
-   bool operator >= ( const ScomRegister & i_rightRegister  ) const;
+   bool operator >= ( const HardwareRegister & i_rightRegister  ) const;
 
     /** @return The register access level (see enum AccessLevel). */
     virtual AccessLevel getAccessLevel() const { return iv_operationType; }
@@ -154,7 +154,7 @@
      * @brief     copy constructor
      * @param     i_scomRegister   scomRegister instance to be copied
      */
-    ScomRegister( const Register & i_scomRegister ):
+    HardwareRegister( const Register & i_scomRegister ):
         Register(),
         iv_bitLength(     i_scomRegister.GetBitLength()   ),
         iv_shortId(       i_scomRegister.GetId()          ),
diff --git a/src/register/prdfScanFacility.C b/src/register/prdfScanFacility.C
index 1b966dd..9175471 100755
--- a/src/register/prdfScanFacility.C
+++ b/src/register/prdfScanFacility.C
@@ -81,10 +81,10 @@
       other both read and write.
       */
 
-    ScomRegister scrKey( address, i_scomLength, i_type, i_regOp );
+    HardwareRegister scrKey( address, i_scomLength, i_type, i_regOp );
     // in case we get a object with different default operation, we shall reset
     // it to what it should be as per rule file.
-    ScomRegister &regCreated = iv_scomRegFw.get(scrKey);
+    HardwareRegister &regCreated = iv_scomRegFw.get(scrKey);
     regCreated.setAccessLevel( i_regOp );
     return regCreated;
 }
@@ -207,7 +207,7 @@
 #ifdef FLYWEIGHT_PROFILING
 void ScanFacility::printStats()
 {
-    PRDF_TRAC("ScomRegister");
+    PRDF_TRAC("HardwareRegister");
     iv_scomRegFw.printStats();
     PRDF_TRAC("Not Register");
     iv_notRegFw.printStats();
diff --git a/src/register/prdfScanFacility.H b/src/register/prdfScanFacility.H
index 331fe9b..9a423dd 100755
--- a/src/register/prdfScanFacility.H
+++ b/src/register/prdfScanFacility.H
@@ -65,7 +65,7 @@
   static ScanFacility & Access(void);
 
     /**
-    * @brief     Returns reference to flyweight object of type ScomRegister.
+    * @brief     Returns reference to flyweight object of type HardwareRegister.
     *            An object of given address is first searched in flyweight.
     *            If object exist, reference to existing object is returned
     *            else a new one is created.
@@ -206,7 +206,7 @@
 
 
 private:  // Data
-  typedef FlyWeightS<ScomRegister,50>           ScanCommRegisters;
+  typedef FlyWeightS<HardwareRegister,50>           ScanCommRegisters;
   //FIXME RTC 64345 Investigate benefit of changing below from FlyWeight to
   //FlyWeightS
   typedef FlyWeight<AttnTypeRegister,50>        AttnTypeRegisters;
diff --git a/src/register/prdfScomRegisterAccess.C b/src/register/prdfScomRegisterAccess.C
index 86487a4..608feeb 100644
--- a/src/register/prdfScomRegisterAccess.C
+++ b/src/register/prdfScomRegisterAccess.C
@@ -31,7 +31,7 @@
 ScomRegisterAccess::ScomRegisterAccess(
                     const Register & i_pRegister,
                     ExtensibleChip * i_pRuleChip ) :
-    ScomRegister( i_pRegister ),
+    HardwareRegister( i_pRegister ),
     iv_containerChip( i_pRuleChip )
 {}
 
diff --git a/src/register/prdfScomRegisterAccess.H b/src/register/prdfScomRegisterAccess.H
index d3a3a23..672ddc3 100644
--- a/src/register/prdfScomRegisterAccess.H
+++ b/src/register/prdfScomRegisterAccess.H
@@ -52,7 +52,7 @@
 
 namespace PRDF
 {
-class ScomRegisterAccess : public ScomRegister
+class ScomRegisterAccess : public HardwareRegister
 {
     public :
     /**
@@ -65,7 +65,7 @@
     /**
      * @brief     constructor
      */
-    ScomRegisterAccess():ScomRegister( ),iv_containerChip ( NULL ){ };
+    ScomRegisterAccess():HardwareRegister( ),iv_containerChip ( NULL ){ };
 
     /**
      * @brief Destructor
