diff --git a/src/hei_includes.hpp b/src/hei_includes.hpp
index c2675c0..3c29a95 100644
--- a/src/hei_includes.hpp
+++ b/src/hei_includes.hpp
@@ -1,17 +1,27 @@
 #pragma once
 
 /**
-@file hei_includes.hpp
-@brief The purpose of this file is to include common headers that will be used
-throughout this library.
-*/
+ * @file  hei_includes.hpp
+ * @brief The purpose of this file is to include common headers that will be
+ *        used throughout this library.
+ */
 
 // Standard library includes
+#include <stdlib.h>
 #include <stdint.h>
 #include <vector>
 
-// External includes
-#include <hei_user_defines.hpp> // For HEI_ASSERT, HEI_INF, and HEI_ERR
+// The user application must define "hei_user_defines.hpp" with the following
+// macros:
+//
+//   Tracing (inputs same as printf() from <cstdio>):
+//      HEI_INF( ... ) // Generic informational trace
+//      HEI_ERR( ... ) // Error path trace
+//
+//  Assertion (at a minimum should work like assert() from <cassert>):
+//      HEI_ASSERT( expression )
+//
+#include <hei_user_defines.hpp>
 
 // Internal includes
 #include <hei_chip.hpp>
diff --git a/src/hei_main.hpp b/src/hei_main.hpp
index b0e5210..21aebd2 100644
--- a/src/hei_main.hpp
+++ b/src/hei_main.hpp
@@ -61,7 +61,7 @@
  *                      - true, the function will delete the previous isolation
  *                        objects for this chip type and reinitialize.
  *
- * @return RC_SUCCESS or RC_CDF_INVALID or RC_CDF_INITIALIZED
+ * @return RC_SUCCESS or RC_CHIP_DATA_INVALID or RC_CHIP_DATA_INITIALIZED
  */
 inline ReturnCode initialize( void * i_buffer, size_t i_bufferSize,
                               bool i_forceInit = false )
diff --git a/src/hei_return_code.hpp b/src/hei_return_code.hpp
index ce32468..5d0526e 100644
--- a/src/hei_return_code.hpp
+++ b/src/hei_return_code.hpp
@@ -55,7 +55,7 @@
 
   private:
 
-    const uint32_t iv_rc; ///< return code value
+    uint32_t iv_rc; ///< return code value
 };
 
 /** Function returned successfully. */
@@ -71,5 +71,9 @@
 /** The given chip type has not been initialized. */
 static constexpr ReturnCode RC_CHIP_DATA_MISSING       = ReturnCode(0x00000003);
 
+/** Generic return code indicating something along the hardware register access
+ *  path failed and the returned data is undefined and should not be used. */
+static constexpr ReturnCode RC_REG_ACCESS_FAILURE      = ReturnCode(0x00000004);
+
 } // end namespace libhei
 
diff --git a/src/hei_user_interface.hpp b/src/hei_user_interface.hpp
index 1d3b5d3..fbfe92c 100644
--- a/src/hei_user_interface.hpp
+++ b/src/hei_user_interface.hpp
@@ -1,40 +1,87 @@
 #pragma once
 
-// The user application must define this header file with the following macros:
-//
-//   Tracing (inputs same as printf() from <cstdio>):
-//      HEI_INF( ... ) // Generic informational trace
-//      HEI_ERR( ... ) // Error path trace
-//
-//  Assertion (at a minimum should work like assert() from <cassert>):
-//      HEI_ASSERT( expression )
-//
-#include <hei_user_defines.hpp>
+/**
+ * @file hei_user_interface.hpp
+ *
+ * The method for actions like hardware register access will vary per user
+ * application. Therefore, the user application must define all of the APIs
+ * listed below.
+ */
+
+#include <hei_includes.hpp>
 
 namespace libhei
 {
 
 /**
- * @brief Perform a hardware read operation.
- * @param i_chip This is a pointer to a user application object that represents
- *               the target chip. The isolator does not know anything about this
- *               object or how to use it. It is provide by the user application
- *               via the Isolator APIs. The user application is responsible for
- *               knowing what to do with this parameter.
+ * @brief Performs a hardware register read operation.
+ *
+ * @param i_chip     This is a pointer to a user application object that
+ *                   represents the target chip. It is provided to the isolator
+ *                   by the user application via the isolator main APIs. The
+ *                   isolator does not know anything about this object nor how
+ *                   to use it. The user application is responsible for knowing
+ *                   what to do with this parameter.
+ *
+ * @param o_buffer   Allocated memory space for the returned contents of the
+ *                   register.
+ *
+ * @param io_bufSize The input parameter is the maximum size of the allocated
+ *                   o_buffer. The return value is the number of bytes actually
+ *                   written to the buffer.
+ *
+ * @param i_regType  The user application may support different types of
+ *                   registers. This value is provided to the isolator by the
+ *                   user application via the Chip Data Files. The user
+ *                   application is responsible for knowing what to do with this
+ *                   parameter.
+ *
+ * @param i_address  The register address. The values is a 1, 2, 4, or 8 byte
+ *                   address (right justified), which is provided to the
+ *                   isolator by the user application via the Chip Data Files.
+ *
+ * @return RC_SUCCESS or RC_REG_ACCESS_FAILURE. Note that in the case of a
+ *         failure the user application is responsible for reporting why the
+ *         register access failed.
  */
-ReturnCode deviceRead( void * i_chip );
+ReturnCode registerRead( void * i_chip, void * o_buffer, size_t & io_bufSize,
+                         uint64_t i_regType, uint64_t i_address );
 
 #ifndef __HEI_READ_ONLY
 
 /**
- * @brief Perform a hardware write operation.
- * @param i_chip This is a pointer to a user application object that represents
- *               the target chip. The isolator does not know anything about this
- *               object or how to use it. It is provide by the user application
- *               via the Isolator APIs. The user application is responsible for
- *               knowing what to do with this parameter.
+ * @brief Performs a hardware register write operation.
+ *
+ * @param i_chip     This is a pointer to a user application object that
+ *                   represents the target chip. It is provided to the isolator
+ *                   by the user application via the isolator main APIs. The
+ *                   isolator does not know anything about this object nor how
+ *                   to use it. The user application is responsible for knowing
+ *                   what to do with this parameter.
+ *
+ * @param i_buffer   Allocated memory space containing the register contents to
+ *                   write to hardware.
+ *
+ * @param io_bufSize The input parameter is the number of byte from i_buffer to
+ *                   write to the hardware register. The return value is the
+ *                   actual number of bytes written to the hardware register.
+ *
+ * @param i_regType  The user application may support different types of
+ *                   registers. This value is provided to the isolator by the
+ *                   user application via the Chip Data Files. The user
+ *                   application is responsible for knowing what to do with this
+ *                   parameter.
+ *
+ * @param i_address  The register address. The values is a 1, 2, 4, or 8 byte
+ *                   address (right justified), which is provided to the
+ *                   isolator by the user application via the Chip Data Files.
+ *
+ * @return RC_SUCCESS or RC_REG_ACCESS_FAILURE. Note that in the case of a
+ *         failure the user application is responsible for reporting why the
+ *         register access failed.
  */
-ReturnCode deviceWrite( void * i_chip );
+ReturnCode registerWrite( void * i_chip, void * i_buffer, size_t & io_bufSize,
+                          uint64_t i_regType, uint64_t i_address );
 
 #endif
 
