diff --git a/src/isolator/hei_isolation_chip.cpp b/src/isolator/hei_isolation_chip.cpp
index ef40564..69bc643 100644
--- a/src/isolator/hei_isolation_chip.cpp
+++ b/src/isolator/hei_isolation_chip.cpp
@@ -27,4 +27,72 @@
 
 //------------------------------------------------------------------------------
 
+void IsolationChip::addHardwareRegister(HardwareRegisterPtr i_hwReg)
+{
+    HEI_ASSERT(i_hwReg); // should not be null
+
+    RegisterKey_t key = {i_hwReg->getId(), i_hwReg->getInstance()};
+
+    auto ret = iv_regs.emplace(key, i_hwReg);
+
+    // If an entry already exists, it should point to the same object.
+    HEI_ASSERT(ret.second || (ret.first->second == i_hwReg));
+}
+
+//------------------------------------------------------------------------------
+
+void IsolationChip::addIsolationNode(IsolationNodePtr i_isoNode)
+{
+    HEI_ASSERT(i_isoNode); // should not be null
+
+    NodeKey_t key = {i_isoNode->getId(), i_isoNode->getInstance()};
+
+    auto ret = iv_nodes.emplace(key, i_isoNode);
+
+    // If an entry already exists, it should point to the same object.
+    HEI_ASSERT(ret.second || (ret.first->second == i_isoNode));
+}
+
+//------------------------------------------------------------------------------
+
+void IsolationChip::addRootNode(AttentionType_t i_attnType,
+                                IsolationNodePtr i_rootNode)
+{
+    HEI_ASSERT(i_rootNode); // should not be null
+
+    auto ret = iv_rootNodes.emplace(i_attnType, i_rootNode);
+
+    // If an entry already exists, it should point to the same object.
+    HEI_ASSERT(ret.second || (ret.first->second == i_rootNode));
+}
+
+//------------------------------------------------------------------------------
+
+HardwareRegisterPtr
+    IsolationChip::getHardwareRegister(RegisterId_t i_regId,
+                                       Instance_t i_regInst) const
+{
+    RegisterKey_t key = {i_regId, i_regInst};
+
+    auto itr = iv_regs.find(key);
+    HEI_ASSERT(iv_regs.end() != itr); // The register should exist.
+
+    return itr->second;
+}
+
+//------------------------------------------------------------------------------
+
+IsolationNodePtr IsolationChip::getIsolationNode(NodeId_t i_nodeId,
+                                                 Instance_t i_nodeInst) const
+{
+    NodeKey_t key = {i_nodeId, i_nodeInst};
+
+    auto itr = iv_nodes.find(key);
+    HEI_ASSERT(iv_nodes.end() != itr); // The node should exist.
+
+    return itr->second;
+}
+
+//------------------------------------------------------------------------------
+
 } // end namespace libhei
diff --git a/src/isolator/hei_isolation_chip.hpp b/src/isolator/hei_isolation_chip.hpp
index 4fabea1..cb41353 100644
--- a/src/isolator/hei_isolation_chip.hpp
+++ b/src/isolator/hei_isolation_chip.hpp
@@ -2,6 +2,7 @@
 
 #include <hei_isolation_data.hpp>
 #include <isolator/hei_isolation_node.hpp>
+#include <register/hei_hardware_register.hpp>
 
 namespace libhei
 {
@@ -46,6 +47,14 @@
     /** This chip's type. */
     const ChipType_t iv_chipType;
 
+    /** All hardware registers for this chip type. */
+    using RegisterKey_t = std::pair<RegisterId_t, Instance_t>;
+    std::map<RegisterKey_t, const HardwareRegisterPtr> iv_regs;
+
+    /** All isolation nodes for this chip type. */
+    using NodeKey_t = std::pair<NodeId_t, Instance_t>;
+    std::map<NodeKey_t, const IsolationNodePtr> iv_nodes;
+
     /** Root nodes for this chip type. */
     std::map<AttentionType_t, const IsolationNodePtr> iv_rootNodes;
 
@@ -68,16 +77,46 @@
     }
 
     /**
+     * @brief Adds a hardware register to this chip.
+     * @param i_hwReg The target hardware register. Will assert that a different
+     *                register with the same ID and instance does not exist.
+     */
+    void addHardwareRegister(HardwareRegisterPtr i_hwReg);
+
+    /**
+     * @brief Adds an isolation node to this chip.
+     * @param i_isoNode The target isolation node. Will assert that a different
+     *                  node with the same ID and instance does not exist.
+     */
+    void addIsolationNode(IsolationNodePtr i_isoNode);
+
+    /**
      * @brief Adds a root node to this chip.
      * @param i_attnType The target attention type. Will assert this type does
      *                   not already exist in iv_rootNodes.
-     * @param i_node     The target isolation node for this attention type.
+     * @param i_rootNode The target isolation node for this attention type.
      */
-    void addRootNode(AttentionType_t i_attnType, IsolationNodePtr i_node)
-    {
-        auto ret = iv_rootNodes.emplace(i_attnType, i_node);
-        HEI_ASSERT(ret.second); // Should have not already existed.
-    }
+    void addRootNode(AttentionType_t i_attnType, IsolationNodePtr i_rootNode);
+
+    /**
+     * @brief  Retrieves a hardware register from this chip, if it exists.
+     * @param  i_regId   The register ID.
+     * @param  i_regInst The register instance.
+     * @return The target hardware register. Will assert that the target
+     *         register exists in iv_regs.
+     */
+    HardwareRegisterPtr getHardwareRegister(RegisterId_t i_regId,
+                                            Instance_t i_regInst) const;
+
+    /**
+     * @brief  Retrieves an isolation node from this chip, if it exists.
+     * @param  i_nodeId   The node ID.
+     * @param  i_nodeInst The node instance.
+     * @return The target isolation node. Will assert that the target node
+     *         exists in iv_nodes.
+     */
+    IsolationNodePtr getIsolationNode(NodeId_t i_nodeId,
+                                      Instance_t i_nodeInst) const;
 };
 
 /** A simple map to ensure only one IsolationChip exists per chip type. */
diff --git a/src/register/hei_hardware_register.hpp b/src/register/hei_hardware_register.hpp
index 0f5ac61..f69e8a7 100644
--- a/src/register/hei_hardware_register.hpp
+++ b/src/register/hei_hardware_register.hpp
@@ -293,4 +293,7 @@
     }
 };
 
+/** Pointer management for hardware registers. */
+using HardwareRegisterPtr = std::shared_ptr<const HardwareRegister>;
+
 } // end namespace libhei
