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. */
