diff --git a/src/register/hei_hardware_register.cpp b/src/register/hei_hardware_register.cpp
index 3dcddde..a582cae 100755
--- a/src/register/hei_hardware_register.cpp
+++ b/src/register/hei_hardware_register.cpp
@@ -130,7 +130,7 @@
         }
 
         // Read hardware.
-        o_rc = Access( readCache(), MopRegisterAccess::READ );
+        o_rc = Access( readCache(), RegisterAccess::READ );
         if ( SUCCESS != o_rc )
         {
             // The read failed. Remove the entry from the cache so a subsequent
@@ -176,7 +176,7 @@
         }
 
         // Write hardware.
-        o_rc = Access( readCache(), MopRegisterAccess::WRITE );
+        o_rc = Access( readCache(), RegisterAccess::WRITE );
 
     } while (0);
 
@@ -188,7 +188,7 @@
 //------------------------------------------------------------------------------
 
 uint32_t ScomRegister::Access( BitString & bs,
-                               MopRegisterAccess::Operation op ) const
+                               RegisterAccess::Operation op ) const
 {
     int32_t l_rc = SCR_ACCESS_FAILED;
     TARGETING::TargetHandle_t i_pchipTarget = getChip()->GetChipHandle();
diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index 7be76f5..74e3fa2 100755
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -12,7 +12,7 @@
 
 #include <iipscr.h>
 #include <iipbits.h>
-#include <iipMopRegisterAccess.h>
+#include <prdfHomRegisterAccess.H>
 #include <prdfTrace.H>
 
 namespace libhei
@@ -175,7 +175,7 @@
      * @return    [SUCCESS|FAIL]
      */
     uint32_t Access( BitString & bs,
-                     MopRegisterAccess::Operation op )const;
+                     RegisterAccess::Operation op )const;
 
     /**
      * @brief  Returns rulechip pointer associated with the register
diff --git a/src/register/iipMopRegisterAccess.h b/src/register/iipMopRegisterAccess.h
deleted file mode 100755
index 1e7ad59..0000000
--- a/src/register/iipMopRegisterAccess.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/iipMopRegisterAccess.h $ */
-/*                                                                        */
-/* OpenPOWER HostBoot Project                                             */
-/*                                                                        */
-/* Contributors Listed Below - COPYRIGHT 2012,2017                        */
-/* [+] International Business Machines Corp.                              */
-/*                                                                        */
-/*                                                                        */
-/* Licensed under the Apache License, Version 2.0 (the "License");        */
-/* you may not use this file except in compliance with the License.       */
-/* You may obtain a copy of the License at                                */
-/*                                                                        */
-/*     http://www.apache.org/licenses/LICENSE-2.0                         */
-/*                                                                        */
-/* Unless required by applicable law or agreed to in writing, software    */
-/* distributed under the License is distributed on an "AS IS" BASIS,      */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
-/* implied. See the License for the specific language governing           */
-/* permissions and limitations under the License.                         */
-/*                                                                        */
-/* IBM_PROLOG_END_TAG                                                     */
-
-#ifndef iipMopRegisterAccess_h
-#define iipMopRegisterAccess_h
-
-// Class Specification *************************************************
-//
-// Class name:   MopRegisterAccess
-// Parent class: None.
-//
-// Summary: This class provides access to hardware register via
-//          a MOP routine.  A single pure virtual function Access()
-//          is declared for this purpose.
-//
-// Cardinality: 0
-//
-// Performance/Implementation:
-//   Space Complexity: Constant
-//   Time Complexity:  All member functions constant unless otherwise
-//                     stated.
-//
-// Usage Examples:
-//
-//
-//   void foo(MopRegisterAccess & mra)
-//   {
-//     BitStringBuffer bitString(80);  // 80 bits
-//
-//     mra.Access(bitString, READ);
-//     ...
-//
-//   }
-//
-//
-// End Class Specification *********************************************
-
-// Includes
-#if !defined(IIPCONST_H)
-#include <iipconst.h>
-#endif
-#include <prdfPlatServices.H>
-
-namespace PRDF
-{
-// Forward References
-class BitString;
-
-class MopRegisterAccess
-{
-public:
-
-  enum Operation
-  {
-    READ = 0,
-    WRITE = 1
-  };
-
-  //  MopRegisterAccess(void);
-  // Function Specification ********************************************
-  //
-  // Purpose:      Initialization
-  // Parameters:   None.
-  // Returns:      No value returned.
-  // Requirements: None.
-  // Promises:     All data members are initialized.
-  // Exceptions:   None.
-  // Concurrency:  N/A
-  // Notes:  This constructor is not declared.  This compiler generated
-  //         default definition is sufficient.
-  //
-  // End Function Specification //////////////////////////////////////
-
-  //  MopRegisterAccess(const MopRegisterAccess & scr);
-  // Function Specification ********************************************
-  //
-  // Purpose:      Copy
-  // Parameters:   scr: Reference to instance to copy
-  // Returns:      No value returned.
-  // Requirements: None.
-  // Promises:     All data members will be copied (Deep copy).
-  // Exceptions:   None.
-  // Concurrency:  N/A.
-  // Notes:  This constructor is not declared.  This compiler generated
-  //         default definition is sufficient.
-  //
-  // End Function Specification ****************************************
-
-  virtual ~MopRegisterAccess() {}
-
-  // Function Specification ********************************************
-  //
-  // Purpose:      Destruction
-  // Parameters:   None.
-  // Returns:      No value returned
-  // Requirements: None.
-  // Promises:     None.
-  // Exceptions:   None.
-  // Concurrency:  N/A
-  //
-  // End Function Specification ****************************************
-
-  //  MopRegisterAccess & operator=(const MopRegisterAccess & scr);
-  // Function Specification ********************************************
-  //
-  // Purpose:      Assigment
-  // Parameters:   d: Reference to instance to assign from
-  // Returns:      Reference to this instance
-  // Requirements: None.
-  // Promises:     All data members are assigned to
-  // Exceptions:   None.
-  // Concurrency:  N/A.
-  // Notes:  This assingment operator is not declared.  The compiler
-  //         generated default definition is sufficient.
-  //
-  // End Function Specification ****************************************
-
-  virtual uint32_t Access(BitString & bs,
-                       uint64_t registerId,
-                       Operation operation) const = 0;
-  // Function Specification ********************************************
-  //
-  // Purpose:      This function reads or writes the hardware according
-  //               to the specified operation.
-  // Parameters:   bs: Bit string to retrieve(for write) or store data
-  //               (from read)
-  //               registerId: SCR Address or scan offset
-  //               operation: Indicates either read or write operation
-  // Returns:      Hardware OPs return code
-  // Requirements: bs.Length() == long enough
-  // Promises:     For read operation, bs is modified to reflect hardware
-  //               register state
-  // Exceptions:   None.
-  // Concurrency:  Nonreentrant.
-  // Note:         The first bs.Length() bits from the Hardware OPs read
-  //               are set/reset in bs (from left to right)
-  //               For a write, the first bs.Length() bits are written
-  //               to the hardware register with right padded 0's if
-  //               needed
-  //
-  // End Function Specification ****************************************
-  //Get Ids and count
-  virtual const TARGETING::TargetHandle_t * GetChipIds(int & count) const = 0;
-  // Function Specification ********************************************
-  //
-  // Purpose:      Access Chip Ids and # of chips to access
-  // Parameters:   count: Var to return chip count of valid IDs
-  // Returns:      ptr to Chip ids
-  // Requirements: None
-  // Promises:     None
-  // Exceptions:   None.
-  // Concurrency:  Reentrant.
-  //
-  // End Function Specification ****************************************
-
-  private:
-
-  };
-
-} // end namespace PRDF
-
-#endif
diff --git a/src/register/iipMopRegisterAccessScanComm.h b/src/register/iipMopRegisterAccessScanComm.h
deleted file mode 100755
index e87d702..0000000
--- a/src/register/iipMopRegisterAccessScanComm.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/iipMopRegisterAccessScanComm.h $ */
-/*                                                                        */
-/* OpenPOWER HostBoot Project                                             */
-/*                                                                        */
-/* Contributors Listed Below - COPYRIGHT 1996,2017                        */
-/* [+] International Business Machines Corp.                              */
-/*                                                                        */
-/*                                                                        */
-/* Licensed under the Apache License, Version 2.0 (the "License");        */
-/* you may not use this file except in compliance with the License.       */
-/* You may obtain a copy of the License at                                */
-/*                                                                        */
-/*     http://www.apache.org/licenses/LICENSE-2.0                         */
-/*                                                                        */
-/* Unless required by applicable law or agreed to in writing, software    */
-/* distributed under the License is distributed on an "AS IS" BASIS,      */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
-/* implied. See the License for the specific language governing           */
-/* permissions and limitations under the License.                         */
-/*                                                                        */
-/* IBM_PROLOG_END_TAG                                                     */
-
-#ifndef iipMopRegisterAccessScanComm_h
-#define iipMopRegisterAccessScanComm_h
-
-// Class Specification *************************************************
-//
-// Class name:   MopRegisterAccessScanComm
-// Parent class: MopRegisterAccess.
-//
-// Summary: This class provides access to hardware register data via
-//          a MOP Scan Comm routine.
-//
-// Cardinality: 0
-//
-// Performance/Implementation:
-//   Space Complexity: Constant
-//   Time Complexity:  All member functions constant unless otherwise
-//                     stated.
-//
-// Usage Examples:
-//
-//
-//
-// End Class Specification *********************************************
-
-// Includes
-
-#pragma interface
-
-#ifndef iipMopRegisterAccess_h
-#include <iipMopRegisterAccess.h>
-#endif
-
-namespace PRDF
-{
-
-// Forward References
-class MopRegisterAccessScanComm : public MopRegisterAccess
-{
-public:
-
-  // Function Specification ********************************************
-  //
-  // Purpose:      CTOR
-  // Parameters:   None
-  // Returns:      No value returned.
-  // Requirements: None.
-  // Promises:     All data members are initialized.
-  // Exceptions:   None.
-  // Concurrency:  N/A
-  // Note:         Multiple chip IDs are for chips that MOPs must
-  //               access at the same time when performing a Scan
-  //               Comm operation (ie STINGER & ARROW chips)
-  //
-  // End Function Specification //////////////////////////////////////
-
-  //  MopRegisterAccessScanComm(const MopRegisterAccessScanComm & scr);
-  // Function Specification ********************************************
-  //
-  // Purpose:      Copy
-  // Parameters:   scr: Reference to instance to copy
-  // Returns:      No value returned.
-  // Requirements: None.
-  // Promises:     All data members will be copied (Deep copy).
-  // Exceptions:   None.
-  // Concurrency:  N/A.
-  // Notes:  This constructor is not declared.  This compiler generated
-  //         default definition is sufficient.
-  //
-  // End Function Specification ****************************************
-
-  //   virtual ~MopRegisterAccessScanComm(void);
-  // Function Specification ********************************************
-  //
-  // Purpose:      Destruction
-  // Parameters:   None.
-  // Returns:      No value returned
-  // Requirements: None.
-  // Promises:     None.
-  // Exceptions:   None.
-  // Concurrency:  N/A
-  // Notes:  This destructor is not declared.  This compiler generated
-  //         default definition is sufficient.
-  //
-  // End Function Specification ****************************************
-
-  //  MopRegisterAccessScanComm & operator=(const MopRegisterAccessScanComm & scr);
-  // Function Specification ********************************************
-  //
-  // Purpose:      Assigment
-  // Parameters:   d: Reference to instance to assign from
-  // Returns:      Reference to this instance
-  // Requirements: None.
-  // Promises:     All data members are assigned to
-  // Exceptions:   None.
-  // Concurrency:  N/A.
-  // Notes:  This assingment operator is not declared.  The compiler
-  //         generated default definition is sufficient.
-  //
-  // End Function Specification ****************************************
-
-  virtual uint32_t Access(BitString & bs,
-                          uint32_t registerId,
-                          Operation operation) const;
-  // Function Specification ********************************************
-  //
-  // Purpose:      This function reads or writes the hardware according
-  //               to the specified operation.
-  // Parameters:   bs: Bit string to retrieve(for write) or store data
-  //               (from read)
-  //               registerId: ScanComm register address
-  //               operation: Indicates either read or write operation
-  // Returns:      Hardware OPs return code
-  // Requirements: bs.Length() == long enough
-  // Promises:     For read operation, bs is modified to reflect hardware
-  //               register state
-  // Exceptions:   None.
-  // Concurrency:  Nonreentrant.
-  // Note:         The first bs.Length() bits from the Hardware OPs read
-  //               are set/reset in bs (from left to right)
-  //               For a write, the first bs.Length() bits are written
-  //               to the hardware register with right padded 0's if
-  //               needed
-  //
-  // End Function Specification ****************************************
-
-
-private: // DATA
-
-};
-
-} // end namespace PRDF
-
-#endif
diff --git a/src/register/iipMopRegisterAccessScanComm.inl b/src/register/iipMopRegisterAccessScanComm.inl
deleted file mode 100755
index ad08084..0000000
--- a/src/register/iipMopRegisterAccessScanComm.inl
+++ /dev/null
@@ -1,67 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/iipMopRegisterAccessScanComm.inl $ */
-/*                                                                        */
-/* OpenPOWER HostBoot Project                                             */
-/*                                                                        */
-/* COPYRIGHT International Business Machines Corp. 1996,2014              */
-/*                                                                        */
-/* Licensed under the Apache License, Version 2.0 (the "License");        */
-/* you may not use this file except in compliance with the License.       */
-/* You may obtain a copy of the License at                                */
-/*                                                                        */
-/*     http://www.apache.org/licenses/LICENSE-2.0                         */
-/*                                                                        */
-/* Unless required by applicable law or agreed to in writing, software    */
-/* distributed under the License is distributed on an "AS IS" BASIS,      */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
-/* implied. See the License for the specific language governing           */
-/* permissions and limitations under the License.                         */
-/*                                                                        */
-/* IBM_PROLOG_END_TAG                                                     */
-
-// Module Description **************************************************
-//
-// Description: This module provides the inline implementation for the
-//              PRD MOP Register Access Scan Comm class.
-//
-// End Module Description **********************************************
-
-namespace PRDF
-{
-
-//----------------------------------------------------------------------
-//  Includes
-//----------------------------------------------------------------------
-
-//----------------------------------------------------------------------
-//  User Types
-//----------------------------------------------------------------------
-
-//----------------------------------------------------------------------
-//  Constants
-//----------------------------------------------------------------------
-
-//----------------------------------------------------------------------
-//  Macros
-//----------------------------------------------------------------------
-
-//----------------------------------------------------------------------
-//  Internal Function Prototypes
-//----------------------------------------------------------------------
-
-//----------------------------------------------------------------------
-//  Global Variables
-//----------------------------------------------------------------------
-
-//---------------------------------------------------------------------
-// Member Function Specifications
-//---------------------------------------------------------------------
-
-inline
-MopRegisterAccessScanComm::MopRegisterAccessScanComm(void)
-  {
-  }
-
-} // end namespace PRDF
diff --git a/src/register/prdfHomRegisterAccess.C b/src/register/prdfHomRegisterAccess.C
index a9d2a61..8b6f811 100755
--- a/src/register/prdfHomRegisterAccess.C
+++ b/src/register/prdfHomRegisterAccess.C
@@ -117,7 +117,7 @@
 uint32_t ScomService::Access(TargetHandle_t i_target,
                              BitString & bs,
                              uint64_t registerId,
-                             MopRegisterAccess::Operation operation) const
+                             RegisterAccess::Operation operation) const
 {
     PRDF_DENTER("ScomService::Access()");
     uint32_t rc = SUCCESS;
@@ -136,7 +136,7 @@
 uint32_t ScomAccessor::Access(TargetHandle_t i_target,
                                 BitString & bs,
                                 uint64_t registerId,
-                                MopRegisterAccess::Operation operation) const
+                                RegisterAccess::Operation operation) const
 {
     PRDF_DENTER("ScomAccessor::Access()");
 
@@ -146,7 +146,7 @@
     {
         switch (operation)
         {
-            case MopRegisterAccess::WRITE:
+            case RegisterAccess::WRITE:
             {
                 rc = PRDF::PlatServices::putScom(i_target, bs, registerId);
 
@@ -198,7 +198,7 @@
                 break;
             }
 
-            case MopRegisterAccess::READ:
+            case RegisterAccess::READ:
                 bs.clearAll(); // clear all bits
 
                 rc = PRDF::PlatServices::getScom(i_target, bs, registerId);
diff --git a/src/register/prdfHomRegisterAccess.H b/src/register/prdfHomRegisterAccess.H
index 6426b4a..fe794ce 100755
--- a/src/register/prdfHomRegisterAccess.H
+++ b/src/register/prdfHomRegisterAccess.H
@@ -35,7 +35,6 @@
 // Includes
 //--------------------------------------------------------------------
 
-#include <iipMopRegisterAccess.h>
 #include <vector>
 #include <prdfPlatServices.H>
 #include <prdfErrlUtil.H>
@@ -47,6 +46,15 @@
 namespace PRDF
 {
 
+namespace RegisterAccess
+{
+    enum Operation
+    {
+        READ  = 0,
+        WRITE = 1,
+    };
+}
+
 class ScomAccessor
 {
   public:
@@ -75,7 +83,7 @@
     virtual uint32_t Access( TARGETING::TargetHandle_t i_target,
                              BitString & bs,
                              uint64_t registerId,
-                             MopRegisterAccess::Operation operation) const;
+                             RegisterAccess::Operation operation) const;
 
   private:
 
@@ -142,7 +150,7 @@
     virtual uint32_t Access(TARGETING::TargetHandle_t i_target,
                             BitString & bs,
                             uint64_t registerId,
-                            MopRegisterAccess::Operation operation) const;
+                            RegisterAccess::Operation operation) const;
 
   private:
 
