diff --git a/src/register/prdfScomRegister.C b/src/register/hei_hardware_register.cpp
similarity index 81%
rename from src/register/prdfScomRegister.C
rename to src/register/hei_hardware_register.cpp
index 7e4cce8..3dcddde 100755
--- a/src/register/prdfScomRegister.C
+++ b/src/register/hei_hardware_register.cpp
@@ -1,28 +1,3 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/prdfScomRegister.C $ */
-/*                                                                        */
-/* 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                                                     */
-
 // Module Description **************************************************
 //
 // Description: This module provides the implementation for the PRD Scan
@@ -70,7 +45,7 @@
 //---------------------------------------------------------------------
 
 // --------------------------------------------------------------------
-namespace PRDF
+namespace libhei
 {
 
 // ---------------------------------------------------------------------
@@ -298,4 +273,6 @@
 {
     return !( *this < i_rightRegister );
 }
-}//namespace PRDF ends
+
+} // end namespace libhei
+
diff --git a/src/register/prdfScomRegister.H b/src/register/hei_hardware_register.hpp
similarity index 78%
rename from src/register/prdfScomRegister.H
rename to src/register/hei_hardware_register.hpp
index 655f4d5..7be76f5 100755
--- a/src/register/prdfScomRegister.H
+++ b/src/register/hei_hardware_register.hpp
@@ -1,30 +1,4 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/prdfScomRegister.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 iipScomRegister_h
-#define iipScomRegister_h
+#pragma once
 
 /**
  * @brief Models register.It does not contain target.
@@ -41,7 +15,7 @@
 #include <iipMopRegisterAccess.h>
 #include <prdfTrace.H>
 
-namespace PRDF
+namespace libhei
 {
 
 // Forward References
@@ -239,6 +213,5 @@
 
 };
 
-}//namespace PRDF ends
+} // end namespace libhei
 
-#endif
diff --git a/src/register/prdfOperatorRegister.H b/src/register/hei_operator_register.hpp
similarity index 90%
rename from src/register/prdfOperatorRegister.H
rename to src/register/hei_operator_register.hpp
index 00f39fd..14875b4 100755
--- a/src/register/prdfOperatorRegister.H
+++ b/src/register/hei_operator_register.hpp
@@ -1,37 +1,11 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/prdfOperatorRegister.H $ */
-/*                                                                        */
-/* OpenPOWER HostBoot Project                                             */
-/*                                                                        */
-/* Contributors Listed Below - COPYRIGHT 2012,2018                        */
-/* [+] 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 __PRDFOPERATORREGISTER_H
-#define __PRDFOPERATORREGISTER_H
+#pragma once
 
 #include <algorithm>
 
 #include <iipscr.h>
 #include <prdrCommon.H>
 
-namespace PRDF
+namespace libhei
 {
 
 class NotRegister : public SCAN_COMM_REGISTER_CLASS
@@ -693,6 +667,5 @@
     BitStringBuffer iv_iBS;
 };
 
-} // end namespace PRDF
+} // end namespace libhei
 
-#endif
diff --git a/src/register/iipscr.C b/src/register/hei_register.cpp
similarity index 80%
rename from src/register/iipscr.C
rename to src/register/hei_register.cpp
index d4d7017..3e28a86 100755
--- a/src/register/iipscr.C
+++ b/src/register/hei_register.cpp
@@ -1,29 +1,3 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/iipscr.C $        */
-/*                                                                        */
-/* OpenPOWER HostBoot Project                                             */
-/*                                                                        */
-/* Contributors Listed Below - COPYRIGHT 1997,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                                                     */
-
-#define IIPSCR_C
 
 /* Module Description *************************************************/
 /*                                                                    */
@@ -47,8 +21,9 @@
 
 #include <prdfAssert.h>
 
-namespace PRDF
+namespace libhei
 {
+
 /*--------------------------------------------------------------------*/
 /*  User Types                                                        */
 /*--------------------------------------------------------------------*/
@@ -268,7 +243,5 @@
     }
 }
 
-} // end namespace PRDF
-
-#undef IIPSCR_C
+} // end namespace libhei
 
diff --git a/src/register/iipscr.h b/src/register/hei_register.hpp
similarity index 87%
rename from src/register/iipscr.h
rename to src/register/hei_register.hpp
index 53c9bfa..e03e819 100755
--- a/src/register/iipscr.h
+++ b/src/register/hei_register.hpp
@@ -1,30 +1,4 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/framework/register/iipscr.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 IIPSCR_H
-#define IIPSCR_H
+#pragma once
 
 // Module Description **************************************************
 //
@@ -49,7 +23,7 @@
 #include <prdfMain.H>
 #include <prdfTrace.H>
 
-namespace PRDF
+namespace libhei
 {
 
 /*--------------------------------------------------------------------*/
@@ -426,6 +400,5 @@
 
 };
 
-}//namespace PRDF
+} // end namespace libhei
 
-#endif
diff --git a/src/util/prdfBitString.C b/src/util/hei_bit_string.cpp
similarity index 82%
rename from src/util/prdfBitString.C
rename to src/util/hei_bit_string.cpp
index b4e7f9b..bdc8694 100755
--- a/src/util/prdfBitString.C
+++ b/src/util/hei_bit_string.cpp
@@ -1,31 +1,3 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/util/prdfBitString.C $               */
-/*                                                                        */
-/* 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                                                     */
-
-/** @file BitString.C
- *  @brief BitString and BitStringBuffer class Definitions
- */
 
 #include <prdfBitString.H>
 
@@ -33,16 +5,8 @@
 
 #include <algorithm>
 
-namespace PRDF
+namespace libhei
 {
-#if defined(PRDF_HOSTBOOT_ERRL_PLUGIN)
-namespace HOSTBOOT
-{
-#elif defined(PRDF_FSP_ERRL_PLUGIN)
-namespace FSP
-{
-#endif
-
 
 //##############################################################################
 //                             BitString class
@@ -478,32 +442,5 @@
     if ( !isZero() ) clearAll();
 }
 
-/*--------------------------------------------------------------------*/
-/*  IO Stream Conditional Support                                     */
-/*--------------------------------------------------------------------*/
-
-#ifdef _USE_IOSTREAMS_
-
-std::ostream & operator<<(std::ostream & out,
-                          const BitString & bit_string )
-{
-  const uint32_t bit_field_length = BitString::CPU_WORD_BIT_LEN;
-  out << std::hex;
-  for(uint32_t pos = 0; pos < bit_string.getBitLen(); pos += bit_field_length)
-  {
-    uint32_t len = bit_string.getBitLen() - pos;
-    len = std::min(len,bit_field_length);
-    CPU_WORD value = bit_string.getField(pos,len);
-    out << std::setw(bit_field_length/4) << std::setfill('0') << value << " ";
-  }
-
-  return(out);
-}
-
-#endif
-
-#if defined(PRDF_HOSTBOOT_ERRL_PLUGIN) || defined(PRDF_FSP_ERRL_PLUGIN)
-} // end namespace FSP/HOSTBOOT
-#endif
-} // end namespace PRDF
+} // end namespace libhei
 
diff --git a/src/util/prdfBitString.H b/src/util/hei_bit_string.hpp
similarity index 85%
rename from src/util/prdfBitString.H
rename to src/util/hei_bit_string.hpp
index 130d379..cc1c073 100755
--- a/src/util/prdfBitString.H
+++ b/src/util/hei_bit_string.hpp
@@ -1,56 +1,9 @@
-/* IBM_PROLOG_BEGIN_TAG                                                   */
-/* This is an automatically generated prolog.                             */
-/*                                                                        */
-/* $Source: src/usr/diag/prdf/common/util/prdfBitString.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 PRDFBITSTRING_H
-#define PRDFBITSTRING_H
-
-/** @file prdBitString.H
- *  @brief BitString and BitStringBuffer class declarations
- */
+#pragma once
 
 #include <prdf_types.h>
 
-#if defined(ESW_SIM_COMPILE)
-#define _USE_IOSTREAMS_
-#endif
-
-#ifdef _USE_IOSTREAMS_
-  #include <iostream>
-  #include <iomanip>
-#endif
-
-namespace PRDF
+namespace libhei
 {
-#if defined(PRDF_HOSTBOOT_ERRL_PLUGIN)
-namespace HOSTBOOT
-{
-#elif defined(PRDF_FSP_ERRL_PLUGIN)
-namespace FSP
-{
-#endif
-
 
 class BitStringBuffer;
 
@@ -449,21 +402,5 @@
     void initBuffer();
 };
 
-/*--------------------------------------------------------------------*/
-/*  IO Stream Conditional Support                                     */
-/*--------------------------------------------------------------------*/
+} // end namespace libhei
 
-#ifdef _USE_IOSTREAMS_
-
-
-std::ostream & operator<<( std::ostream & out,
-                      const BitString & bit_string);
-
-#endif
-
-#if defined(PRDF_HOSTBOOT_ERRL_PLUGIN) || defined(PRDF_FSP_ERRL_PLUGIN)
-} // end namespace FSP/HOSTBOOT
-#endif
-} // end namespace PRDF
-
-#endif
