diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index 8ff876a..f3b7b28 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 SCAN_COMM_REGISTER_CLASS
+class ScomRegister : public Register
 {
   public:
 
@@ -36,7 +36,7 @@
      */
     ScomRegister( uint64_t i_address, uint32_t i_bitLength,
                   TARGETING::TYPE i_targetType, AccessLevel i_access ) :
-        SCAN_COMM_REGISTER_CLASS(),
+        Register(),
         iv_bitLength( i_bitLength ),
         iv_chipType( i_targetType ),
         iv_scomAddress( i_address ),
@@ -48,7 +48,7 @@
      * @          FlyweightS
      */
     ScomRegister():
-        SCAN_COMM_REGISTER_CLASS(),
+        Register(),
         iv_bitLength( 0 ),
         iv_chipType( TARGETING::TYPE_NA ),
         iv_scomAddress( 0 ),
@@ -154,8 +154,8 @@
      * @brief     copy constructor
      * @param     i_scomRegister   scomRegister instance to be copied
      */
-    ScomRegister( const SCAN_COMM_REGISTER_CLASS & i_scomRegister ):
-        SCAN_COMM_REGISTER_CLASS(),
+    ScomRegister( const Register & i_scomRegister ):
+        Register(),
         iv_bitLength(     i_scomRegister.GetBitLength()   ),
         iv_shortId(       i_scomRegister.GetId()          ),
         iv_chipType(      i_scomRegister.getChipType()    ),
diff --git a/src/register/hei_operator_register.hpp b/src/register/hei_operator_register.hpp
index 748280c..15764b1 100755
--- a/src/register/hei_operator_register.hpp
+++ b/src/register/hei_operator_register.hpp
@@ -9,17 +9,17 @@
 namespace libhei
 {
 
-class NotRegister : public SCAN_COMM_REGISTER_CLASS
+class NotRegister : public Register
 {
   public:
     NotRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(NULL), iv_iBS(0)
+        Register( ), iv_child(NULL), iv_iBS(0)
     {
         iv_bs = &iv_iBS;
     }
 
-    NotRegister(SCAN_COMM_REGISTER_CLASS & i_arg) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(&i_arg),
+    NotRegister(Register & i_arg) :
+        Register( ), iv_child(&i_arg),
         iv_iBS(i_arg.GetBitLength())
     {
         iv_bs = &iv_iBS;
@@ -60,23 +60,23 @@
     void SetBitString(const BitString *) {}
 
   private:
-    SCAN_COMM_REGISTER_CLASS * iv_child;
+    Register * iv_child;
 
     BitStringBuffer * iv_bs;
     BitStringBuffer iv_iBS;
 };
 
-class SummaryRegister : public SCAN_COMM_REGISTER_CLASS
+class SummaryRegister : public Register
 {
   public:
     SummaryRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(NULL), iv_amount(0), iv_iBS(0)
+        Register( ), iv_child(NULL), iv_amount(0), iv_iBS(0)
     {
         iv_bs = &iv_iBS;
     }
 
-    SummaryRegister(SCAN_COMM_REGISTER_CLASS & i_arg, uint16_t i_amount) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(&i_arg), iv_amount(i_amount),
+    SummaryRegister(Register & i_arg, uint16_t i_amount) :
+        Register( ), iv_child(&i_arg), iv_amount(i_amount),
         iv_iBS(i_arg.GetBitLength())
     {
         iv_bs = &iv_iBS;
@@ -152,24 +152,24 @@
     void SetBitString(const BitString *) {}
 
   private:
-    SCAN_COMM_REGISTER_CLASS * iv_child;
+    Register * iv_child;
     uint16_t iv_amount;
 
     BitStringBuffer * iv_bs;
     BitStringBuffer iv_iBS;
 };
 
-class LeftShiftRegister : public SCAN_COMM_REGISTER_CLASS
+class LeftShiftRegister : public Register
 {
   public:
     LeftShiftRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(NULL), iv_amount(0), iv_iBS(0)
+        Register( ), iv_child(NULL), iv_amount(0), iv_iBS(0)
     {
         iv_bs = &iv_iBS;
     }
 
-    LeftShiftRegister(SCAN_COMM_REGISTER_CLASS & i_arg, uint16_t i_amount) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(&i_arg), iv_amount(i_amount),
+    LeftShiftRegister(Register & i_arg, uint16_t i_amount) :
+        Register( ), iv_child(&i_arg), iv_amount(i_amount),
         iv_iBS(i_arg.GetBitLength())
     {
         iv_bs = &iv_iBS;
@@ -219,24 +219,24 @@
     void SetBitString(const BitString *) {}
 
   private:
-    SCAN_COMM_REGISTER_CLASS * iv_child;
+    Register * iv_child;
     uint16_t iv_amount;
 
     BitStringBuffer * iv_bs;
     BitStringBuffer iv_iBS;
 };
 
-class RightShiftRegister : public SCAN_COMM_REGISTER_CLASS
+class RightShiftRegister : public Register
 {
   public:
     RightShiftRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(NULL), iv_amount(0), iv_iBS(0)
+        Register( ), iv_child(NULL), iv_amount(0), iv_iBS(0)
     {
         iv_bs = &iv_iBS;
     }
 
-    RightShiftRegister(SCAN_COMM_REGISTER_CLASS & i_arg, uint16_t i_amount) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_child(&i_arg), iv_amount(i_amount),
+    RightShiftRegister(Register & i_arg, uint16_t i_amount) :
+        Register( ), iv_child(&i_arg), iv_amount(i_amount),
         iv_iBS(i_arg.GetBitLength())
     {
         iv_bs = &iv_iBS;
@@ -286,7 +286,7 @@
     void SetBitString(const BitString *) {}
 
   private:
-    SCAN_COMM_REGISTER_CLASS * iv_child;
+    Register * iv_child;
     uint16_t iv_amount;
 
     BitStringBuffer * iv_bs;
@@ -294,18 +294,18 @@
 };
 
 
-class AndRegister : public SCAN_COMM_REGISTER_CLASS
+class AndRegister : public Register
 {
   public:
     AndRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_left(NULL), iv_right(NULL), iv_iBS(0)
+        Register( ), iv_left(NULL), iv_right(NULL), iv_iBS(0)
     {
         iv_bs = &iv_iBS;
     }
 
-    AndRegister( SCAN_COMM_REGISTER_CLASS & i_left,
-                 SCAN_COMM_REGISTER_CLASS & i_right ) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_left(&i_left), iv_right(&i_right),
+    AndRegister( Register & i_left,
+                 Register & i_right ) :
+        Register( ), iv_left(&i_left), iv_right(&i_right),
         iv_iBS(std::min(i_left.GetBitLength(),
                         i_right.GetBitLength()))
     {
@@ -368,26 +368,26 @@
     void SetBitString(const BitString *) {}
 
   private:
-    SCAN_COMM_REGISTER_CLASS * iv_left;
-    SCAN_COMM_REGISTER_CLASS * iv_right;
+    Register * iv_left;
+    Register * iv_right;
 
     BitStringBuffer * iv_bs;
     BitStringBuffer iv_iBS;
 };
 
-class OrRegister : public SCAN_COMM_REGISTER_CLASS
+class OrRegister : public Register
 {
   public:
 
     OrRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_left(NULL), iv_right(NULL), iv_iBS(0)
+        Register( ), iv_left(NULL), iv_right(NULL), iv_iBS(0)
     {
         iv_bs = &iv_iBS;
     }
 
-    OrRegister( SCAN_COMM_REGISTER_CLASS & i_left,
-                SCAN_COMM_REGISTER_CLASS & i_right ) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_left(&i_left), iv_right(&i_right),
+    OrRegister( Register & i_left,
+                Register & i_right ) :
+        Register( ), iv_left(&i_left), iv_right(&i_right),
         iv_iBS(std::min(i_left.GetBitLength(),
                         i_right.GetBitLength()))
     {
@@ -451,18 +451,18 @@
     void SetBitString(const BitString *) {}
 
   private:
-    SCAN_COMM_REGISTER_CLASS * iv_left;
-    SCAN_COMM_REGISTER_CLASS * iv_right;
+    Register * iv_left;
+    Register * iv_right;
 
     BitStringBuffer * iv_bs;
     BitStringBuffer iv_iBS;
 };
 
-class NullRegister : public SCAN_COMM_REGISTER_CLASS
+class NullRegister : public Register
 {
   public:
     NullRegister(int size) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_iBS(size)
+        Register( ), iv_iBS(size)
     {}
 
     NullRegister & operator=(const NullRegister & r)
@@ -494,23 +494,23 @@
 
 };
 
-class AttnTypeRegister : public SCAN_COMM_REGISTER_CLASS
+class AttnTypeRegister : public Register
 {
   public:
     AttnTypeRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_check(&cv_null), iv_recov(&cv_null),
+        Register( ), iv_check(&cv_null), iv_recov(&cv_null),
         iv_special(&cv_null), iv_proccs(&cv_null), iv_hostattn(&cv_null),
         iv_iBS(0)
     {
         iv_bs = &iv_iBS;
     }
 
-    AttnTypeRegister( SCAN_COMM_REGISTER_CLASS *i_check,
-                      SCAN_COMM_REGISTER_CLASS *i_recov,
-                      SCAN_COMM_REGISTER_CLASS *i_special,
-                      SCAN_COMM_REGISTER_CLASS *i_proccs,
-                      SCAN_COMM_REGISTER_CLASS *i_hostattn ) :
-        SCAN_COMM_REGISTER_CLASS( ),
+    AttnTypeRegister( Register *i_check,
+                      Register *i_recov,
+                      Register *i_special,
+                      Register *i_proccs,
+                      Register *i_hostattn ) :
+        Register( ),
         iv_check(    NULL == i_check    ? &cv_null : i_check),
         iv_recov(    NULL == i_recov    ? &cv_null : i_recov),
         iv_special(  NULL == i_special  ? &cv_null : i_special),
@@ -616,25 +616,25 @@
   private:
     static NullRegister cv_null;
 
-    SCAN_COMM_REGISTER_CLASS * iv_check;
-    SCAN_COMM_REGISTER_CLASS * iv_recov;
-    SCAN_COMM_REGISTER_CLASS * iv_special;
-    SCAN_COMM_REGISTER_CLASS * iv_proccs;
-    SCAN_COMM_REGISTER_CLASS * iv_hostattn;
+    Register * iv_check;
+    Register * iv_recov;
+    Register * iv_special;
+    Register * iv_proccs;
+    Register * iv_hostattn;
 
     BitStringBuffer * iv_bs;
     BitStringBuffer iv_iBS;
 };
 
-class ConstantRegister : public SCAN_COMM_REGISTER_CLASS
+class ConstantRegister : public Register
 {
   public:
     ConstantRegister() :
-        SCAN_COMM_REGISTER_CLASS( ), iv_iBS(0)
+        Register( ), iv_iBS(0)
     {}
 
     ConstantRegister( const BitStringBuffer & i_arg ) :
-        SCAN_COMM_REGISTER_CLASS( ), iv_iBS(i_arg)
+        Register( ), iv_iBS(i_arg)
     {}
 
     ConstantRegister & operator=(const ConstantRegister & r)
diff --git a/src/register/iipCaptureData.h b/src/register/iipCaptureData.h
index 7f2d7a0..0a0b4db 100755
--- a/src/register/iipCaptureData.h
+++ b/src/register/iipCaptureData.h
@@ -113,7 +113,7 @@
 {
 
 // Forward Declarations
-class SCAN_COMM_REGISTER_CLASS;
+class Register;
 class ScanCommRegisterAccess;
 class BitString;
 
@@ -194,7 +194,7 @@
    </ul><br>
    */
   void Add( TARGETING::TargetHandle_t i_pchipHandle, int scomId,
-            SCAN_COMM_REGISTER_CLASS & scr, Place place = BACK,
+            Register & scr, Place place = BACK,
             RegType type = PRIMARY);  // @jl04 c. Changed this to add the type to the end of the parms.
   // dg00 end
 
@@ -210,7 +210,7 @@
    <br><b>Notes:     This is the required Add() method for pre-Regatta
    </ul><br>
 
-  void Add(TARGETING::TargetHandle_t chipId, SCAN_COMM_REGISTER_CLASS & scr,
+  void Add(TARGETING::TargetHandle_t chipId, Register & scr,
       Place place = BACK);
 */
 
diff --git a/src/register/prdfCaptureData.C b/src/register/prdfCaptureData.C
index 6078347..69de4e6 100755
--- a/src/register/prdfCaptureData.C
+++ b/src/register/prdfCaptureData.C
@@ -121,7 +121,7 @@
 //------------------------------------------------------------------------------
 
 void CaptureData::Add( TargetHandle_t i_trgt, int32_t i_scomId,
-                       SCAN_COMM_REGISTER_CLASS & io_scr,
+                       Register & io_scr,
                        Place i_place, RegType i_type )
 {
     if ( SUCCESS == io_scr.Read() )
diff --git a/src/register/prdfRegisterCache.C b/src/register/prdfRegisterCache.C
index b0fae57..4fb0949 100644
--- a/src/register/prdfRegisterCache.C
+++ b/src/register/prdfRegisterCache.C
@@ -47,7 +47,7 @@
 //------------------------------------------------------------------------------
 
 BitString & RegDataCache::read( ExtensibleChip * i_chip,
-                                       const SCAN_COMM_REGISTER_CLASS * i_reg )
+                                       const Register * i_reg )
 {
     ScomRegisterAccess l_scomAccessKey ( *i_reg, i_chip );
     BitString * l_pBitString = queryCache( l_scomAccessKey );
@@ -81,7 +81,7 @@
 //------------------------------------------------------------------------------
 
 void RegDataCache::flush( ExtensibleChip* i_pChip,
-                          const SCAN_COMM_REGISTER_CLASS * i_pRegister )
+                          const Register * i_pRegister )
 {
     ScomRegisterAccess l_scomAccessKey ( *i_pRegister,i_pChip );
     // Find the entries associated with the given target in the map
@@ -99,7 +99,7 @@
 
 BitString * RegDataCache::queryCache(
                             ExtensibleChip* i_pChip,
-                            const SCAN_COMM_REGISTER_CLASS * i_pRegister )const
+                            const Register * i_pRegister )const
 {
     ScomRegisterAccess l_scomAccessKey ( *i_pRegister,i_pChip );
     return queryCache( l_scomAccessKey );
diff --git a/src/register/prdfRegisterCache.H b/src/register/prdfRegisterCache.H
index 995ab03..052bb5c 100644
--- a/src/register/prdfRegisterCache.H
+++ b/src/register/prdfRegisterCache.H
@@ -79,7 +79,7 @@
      * @return A reference to the data buffer associated with the register.
      */
     BitString & read( ExtensibleChip * i_chip,
-                             const SCAN_COMM_REGISTER_CLASS * i_reg );
+                             const Register * i_reg );
 
     /**
      * @brief Flushes entire contents from cache.
@@ -92,7 +92,7 @@
      * @param i_pRegister   points to the register to be flushed from cache.
      */
     void flush( ExtensibleChip* i_pChip,
-                const SCAN_COMM_REGISTER_CLASS * i_pRegister );
+                const Register * i_pRegister );
     /**
      * @brief Queries if a specific entry exist in cache.
      * @param i_pChip       The rulechip  associated with the register.
@@ -100,7 +100,7 @@
      * @return pointer to cache entry associated with a given register
      */
      BitString * queryCache( ExtensibleChip* i_pChip,
-                            const SCAN_COMM_REGISTER_CLASS * i_pRegister )const;
+                            const Register * i_pRegister )const;
     /**
      * @brief Queries if a specific entry exist in cache.
      * @param i_scomAccessKey Reference to register to be queried.
diff --git a/src/register/prdfScanFacility.C b/src/register/prdfScanFacility.C
index 547377f..1b966dd 100755
--- a/src/register/prdfScanFacility.C
+++ b/src/register/prdfScanFacility.C
@@ -70,9 +70,9 @@
   return sf;
 }
 //-----------------------------------------------------------------------------
-SCAN_COMM_REGISTER_CLASS & ScanFacility::GetScanCommRegister( uint64_t address,
+Register & ScanFacility::GetScanCommRegister( uint64_t address,
                                 uint32_t i_scomLength, TARGETING::TYPE i_type,
-                                SCAN_COMM_REGISTER_CLASS::AccessLevel i_regOp )
+                                Register::AccessLevel i_regOp )
 {
     /* i_regOp is not used to determine uniqueness of the object for following
       reason -
@@ -91,8 +91,8 @@
 
 //------------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetNotRegister(
-                                        SCAN_COMM_REGISTER_CLASS & i_arg )
+Register &  ScanFacility::GetNotRegister(
+                                        Register & i_arg )
 {
   NotRegister r(i_arg);
   return iv_notRegFw.get(r);
@@ -100,8 +100,8 @@
 
 //-----------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetLeftShiftRegister(
-                                    SCAN_COMM_REGISTER_CLASS & i_arg,
+Register &  ScanFacility::GetLeftShiftRegister(
+                                    Register & i_arg,
                                      uint16_t i_amount )
 {
   LeftShiftRegister r(i_arg, i_amount);
@@ -110,8 +110,8 @@
 
 //-----------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetSummaryRegister(
-                                    SCAN_COMM_REGISTER_CLASS & i_arg,
+Register &  ScanFacility::GetSummaryRegister(
+                                    Register & i_arg,
                                      uint16_t i_bit )
 {
   SummaryRegister r(i_arg, i_bit);
@@ -120,8 +120,8 @@
 
 //------------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetRightShiftRegister(
-                                SCAN_COMM_REGISTER_CLASS & i_arg,
+Register &  ScanFacility::GetRightShiftRegister(
+                                Register & i_arg,
                                 uint16_t i_amount )
 {
   RightShiftRegister r(i_arg, i_amount);
@@ -131,9 +131,9 @@
 
 //------------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetAndRegister(
-                                            SCAN_COMM_REGISTER_CLASS & i_left,
-                                            SCAN_COMM_REGISTER_CLASS & i_right )
+Register &  ScanFacility::GetAndRegister(
+                                            Register & i_left,
+                                            Register & i_right )
 {
   AndRegister r(i_left,i_right);
   return iv_andRegFw.get(r);
@@ -141,9 +141,9 @@
 
 //------------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetOrRegister(
-                                            SCAN_COMM_REGISTER_CLASS & i_left,
-                                            SCAN_COMM_REGISTER_CLASS & i_right )
+Register &  ScanFacility::GetOrRegister(
+                                            Register & i_left,
+                                            Register & i_right )
 {
   OrRegister r(i_left,i_right);
   return iv_orRegFw.get(r);
@@ -151,12 +151,12 @@
 
 //-----------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetAttnTypeRegister(
-                                        SCAN_COMM_REGISTER_CLASS * i_check,
-                                        SCAN_COMM_REGISTER_CLASS * i_recov,
-                                        SCAN_COMM_REGISTER_CLASS * i_special,
-                                        SCAN_COMM_REGISTER_CLASS * i_proccs,
-                                        SCAN_COMM_REGISTER_CLASS * i_hostattn )
+Register &  ScanFacility::GetAttnTypeRegister(
+                                        Register * i_check,
+                                        Register * i_recov,
+                                        Register * i_special,
+                                        Register * i_proccs,
+                                        Register * i_hostattn )
 {
   AttnTypeRegister r(i_check, i_recov, i_special, i_proccs, i_hostattn);
   return iv_attnRegFw.get(r);
@@ -164,15 +164,15 @@
 
 //------------------------------------------------------------------------------
 
-SCAN_COMM_REGISTER_CLASS & ScanFacility::GetConstantRegister(
+Register & ScanFacility::GetConstantRegister(
                                                 const BitStringBuffer & i_val )
 {
   ConstantRegister r(i_val);
   return iv_constRegFw.get(r);
 }
 //------------------------------------------------------------------------------
-SCAN_COMM_REGISTER_CLASS &  ScanFacility::GetPluginRegister(
-                                        SCAN_COMM_REGISTER_CLASS & i_flyweight,
+Register &  ScanFacility::GetPluginRegister(
+                                        Register & i_flyweight,
                                         ExtensibleChip & i_RuleChip )
 {
   ScomRegisterAccess l_regKey ( i_flyweight,&i_RuleChip );
diff --git a/src/register/prdfScanFacility.H b/src/register/prdfScanFacility.H
index 3dc333c..331fe9b 100755
--- a/src/register/prdfScanFacility.H
+++ b/src/register/prdfScanFacility.H
@@ -75,48 +75,48 @@
     * @param     i_regOp          operations supported for given register
     * @return   returns reference to flyweight object from factory
     */
-   SCAN_COMM_REGISTER_CLASS & GetScanCommRegister( uint64_t address,
+   Register & GetScanCommRegister( uint64_t address,
                                 uint32_t i_scomLength, TARGETING::TYPE i_type,
-                                SCAN_COMM_REGISTER_CLASS::AccessLevel i_regOp );
+                                Register::AccessLevel i_regOp );
 
   /**
    * @brief  Get a register that bitwise inverts the bitstring of a register
    *         when read or written to
-   * @param  SCAN_COMM_REGISTER_CLASS source
+   * @param  Register source
    * @post   Only one instance of the register with this SCR parameter will
    *         exist
    */
-  SCAN_COMM_REGISTER_CLASS & GetNotRegister(SCAN_COMM_REGISTER_CLASS & i_arg);
+  Register & GetNotRegister(Register & i_arg);
 
   /**
    * @brief  Get a register that bitwise left shift the bitstring of a register
    *         when read or written to
-   * @param  SCAN_COMM_REGISTER_CLASS source
+   * @param  Register source
    * @post   Only one instance of the register with this SCR parameter and
    *         amount will exist
    */
-  SCAN_COMM_REGISTER_CLASS & GetLeftShiftRegister(
-                        SCAN_COMM_REGISTER_CLASS & i_arg, uint16_t i_amount);
+  Register & GetLeftShiftRegister(
+                        Register & i_arg, uint16_t i_amount);
 
   /**
    * @brief Get a register that bitwise right shift the bitstring of a register
    *        when read or written to
-   * @param SCAN_COMM_REGISTER_CLASS source
+   * @param Register source
    * @post  Only one instance of the register with this SCR parameter and amount
    * @      will exist
    */
-  SCAN_COMM_REGISTER_CLASS & GetRightShiftRegister(
-                        SCAN_COMM_REGISTER_CLASS & i_arg, uint16_t i_amount);
+  Register & GetRightShiftRegister(
+                        Register & i_arg, uint16_t i_amount);
 
   /**
    * @brief  Get a register for the summary construct
-   * @param  SCAN_COMM_REGISTER_CLASS source
+   * @param  Register source
    * @param  uint16_t i_bit  bit to set if any attentions found in i_arg
    * @post   Only one instance of the register with this SCR parameter and
    *         amount will exist
    */
-  SCAN_COMM_REGISTER_CLASS & GetSummaryRegister(
-                        SCAN_COMM_REGISTER_CLASS & i_arg, uint16_t i_bit);
+  Register & GetSummaryRegister(
+                        Register & i_arg, uint16_t i_bit);
 
   /**
    * @brief  Get a register that bit-wise ANDs the bitstring of two register
@@ -124,8 +124,8 @@
    * @param  The 2 SCR 's to AND
    * @posrt  Only one instance of the register with these SCRs will exist
    */
-  SCAN_COMM_REGISTER_CLASS & GetAndRegister(SCAN_COMM_REGISTER_CLASS & i_left,
-                                            SCAN_COMM_REGISTER_CLASS & i_right);
+  Register & GetAndRegister(Register & i_left,
+                                            Register & i_right);
 
   /**
    * @brief  Get a register that bitwise ORs the bitstrings of two register when
@@ -133,20 +133,20 @@
    * @param  the 2 SCR's to OR
    * @post   Only one instance of the register with these SCR's will exist
    */
-  SCAN_COMM_REGISTER_CLASS & GetOrRegister(SCAN_COMM_REGISTER_CLASS & i_left,
-                                           SCAN_COMM_REGISTER_CLASS & i_right);
+  Register & GetOrRegister(Register & i_left,
+                                           Register & i_right);
 
   /**
    * @brief  Get a AttnTypeRegister
    * @params 5 pointers to scr Registers
    * @post only one instance of the register with these SCR's will exist
    */
-  SCAN_COMM_REGISTER_CLASS & GetAttnTypeRegister(
-                                    SCAN_COMM_REGISTER_CLASS * i_check,
-                                    SCAN_COMM_REGISTER_CLASS * i_recov,
-                                    SCAN_COMM_REGISTER_CLASS * i_special,
-                                    SCAN_COMM_REGISTER_CLASS * i_proccs,
-                                    SCAN_COMM_REGISTER_CLASS * i_hostattn );
+  Register & GetAttnTypeRegister(
+                                    Register * i_check,
+                                    Register * i_recov,
+                                    Register * i_special,
+                                    Register * i_proccs,
+                                    Register * i_hostattn );
 
   /**
    * @brief Get a PrdfConstantRegister
@@ -154,7 +154,7 @@
    * @post only one instance of the register with this BIT_STRING value will
    * exist.
    */
-  SCAN_COMM_REGISTER_CLASS & GetConstantRegister(const BitStringBuffer & i_val);
+  Register & GetConstantRegister(const BitStringBuffer & i_val);
   /**
    * @brief Get a plugin  register
    * @param Reference to target less flyweight object
@@ -162,8 +162,8 @@
    * @post only one instance of the register with this BIT_STRING value will
    * exist.
    */
-  SCAN_COMM_REGISTER_CLASS & GetPluginRegister(
-                                SCAN_COMM_REGISTER_CLASS & i_flyweight,
+  Register & GetPluginRegister(
+                                Register & i_flyweight,
                                 ExtensibleChip & i_RuleChip );
   /**
    * @brief Delete all the plugin  register
diff --git a/src/register/prdfScomRegisterAccess.C b/src/register/prdfScomRegisterAccess.C
index a185d63..86487a4 100644
--- a/src/register/prdfScomRegisterAccess.C
+++ b/src/register/prdfScomRegisterAccess.C
@@ -29,7 +29,7 @@
 {
 
 ScomRegisterAccess::ScomRegisterAccess(
-                    const SCAN_COMM_REGISTER_CLASS & i_pRegister,
+                    const Register & i_pRegister,
                     ExtensibleChip * i_pRuleChip ) :
     ScomRegister( i_pRegister ),
     iv_containerChip( i_pRuleChip )
diff --git a/src/register/prdfScomRegisterAccess.H b/src/register/prdfScomRegisterAccess.H
index a2b6a69..d3a3a23 100644
--- a/src/register/prdfScomRegisterAccess.H
+++ b/src/register/prdfScomRegisterAccess.H
@@ -60,7 +60,7 @@
      * @param     i_Register     Reference to flyweight register
      * @param     i_pchip        RuleChip associated with register
      */
-    ScomRegisterAccess( const SCAN_COMM_REGISTER_CLASS & i_Register,
+    ScomRegisterAccess( const Register & i_Register,
                         ExtensibleChip* i_pchip );
     /**
      * @brief     constructor
