diff --git a/include/rive/animation/animation_state.hpp b/include/rive/animation/animation_state.hpp
index f1a71b8..aff5c3d 100644
--- a/include/rive/animation/animation_state.hpp
+++ b/include/rive/animation/animation_state.hpp
@@ -4,7 +4,7 @@
 #include <stdio.h>
 namespace rive {
     class LinearAnimation;
-    class Artboard;
+    class ArtboardInstance;
     class StateMachineLayerImporter;
 
     class AnimationState : public AnimationStateBase {
@@ -15,7 +15,7 @@
 
     public:
         const LinearAnimation* animation() const { return m_Animation; }
-        StateInstance* makeInstance(Artboard*) const override;
+        StateInstance* makeInstance(ArtboardInstance*) const override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/animation_state_instance.hpp b/include/rive/animation/animation_state_instance.hpp
index 64d25bf..d75cca9 100644
--- a/include/rive/animation/animation_state_instance.hpp
+++ b/include/rive/animation/animation_state_instance.hpp
@@ -15,7 +15,7 @@
         bool m_KeepGoing;
 
     public:
-        AnimationStateInstance(const AnimationState* animationState, Artboard* instance);
+        AnimationStateInstance(const AnimationState*, ArtboardInstance*);
 
         void advance(float seconds, SMIInput** inputs) override;
         void apply(float mix) override;
diff --git a/include/rive/animation/blend_state_1d.hpp b/include/rive/animation/blend_state_1d.hpp
index 8ffa1e4..83d0695 100644
--- a/include/rive/animation/blend_state_1d.hpp
+++ b/include/rive/animation/blend_state_1d.hpp
@@ -12,7 +12,7 @@
 
         StatusCode import(ImportStack& importStack) override;
 
-        StateInstance* makeInstance(Artboard*) const override;
+        StateInstance* makeInstance(ArtboardInstance*) const override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/blend_state_1d_instance.hpp b/include/rive/animation/blend_state_1d_instance.hpp
index db7e7a6..866b524 100644
--- a/include/rive/animation/blend_state_1d_instance.hpp
+++ b/include/rive/animation/blend_state_1d_instance.hpp
@@ -13,7 +13,7 @@
         int animationIndex(float value);
 
     public:
-        BlendState1DInstance(const BlendState1D* blendState, Artboard* instance);
+        BlendState1DInstance(const BlendState1D*, ArtboardInstance*);
         void advance(float seconds, SMIInput** inputs) override;
     };
 } // namespace rive
diff --git a/include/rive/animation/blend_state_direct.hpp b/include/rive/animation/blend_state_direct.hpp
index 5562221..fd8f120 100644
--- a/include/rive/animation/blend_state_direct.hpp
+++ b/include/rive/animation/blend_state_direct.hpp
@@ -5,7 +5,7 @@
 namespace rive {
     class BlendStateDirect : public BlendStateDirectBase {
     public:
-        StateInstance* makeInstance(Artboard*) const override;
+        StateInstance* makeInstance(ArtboardInstance*) const override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/blend_state_direct_instance.hpp b/include/rive/animation/blend_state_direct_instance.hpp
index fd90681..d85dc5c 100644
--- a/include/rive/animation/blend_state_direct_instance.hpp
+++ b/include/rive/animation/blend_state_direct_instance.hpp
@@ -9,7 +9,7 @@
     class BlendStateDirectInstance
         : public BlendStateInstance<BlendStateDirect, BlendAnimationDirect> {
     public:
-        BlendStateDirectInstance(const BlendStateDirect* blendState, Artboard* instance);
+        BlendStateDirectInstance(const BlendStateDirect*, ArtboardInstance*);
         void advance(float seconds, SMIInput** inputs) override;
     };
 } // namespace rive
diff --git a/include/rive/animation/blend_state_instance.hpp b/include/rive/animation/blend_state_instance.hpp
index fe43e18..f011ab5 100644
--- a/include/rive/animation/blend_state_instance.hpp
+++ b/include/rive/animation/blend_state_instance.hpp
@@ -23,9 +23,9 @@
         const T* blendAnimation() const { return m_BlendAnimation; }
         const LinearAnimationInstance* animationInstance() const { return &m_AnimationInstance; }
 
-        BlendStateAnimationInstance(const T* blendAnimation, Artboard* instance) :
+        BlendStateAnimationInstance(const T* blendAnimation, ArtboardInstance* artboard) :
             m_BlendAnimation(blendAnimation),
-            m_AnimationInstance(blendAnimation->animation(), instance)
+            m_AnimationInstance(blendAnimation->animation(), artboard)
         {}
 
         void mix(float value) { m_Mix = value; }
@@ -37,10 +37,10 @@
         bool m_KeepGoing = true;
 
     public:
-        BlendStateInstance(const K* blendState, Artboard* instance) : StateInstance(blendState) {
+        BlendStateInstance(const K* blendState, ArtboardInstance* artboard) : StateInstance(blendState) {
             for (auto blendAnimation : blendState->animations()) {
                 m_AnimationInstances.emplace_back(
-                    BlendStateAnimationInstance<T>(static_cast<T*>(blendAnimation), instance));
+                    BlendStateAnimationInstance<T>(static_cast<T*>(blendAnimation), artboard));
             }
         }
 
diff --git a/include/rive/animation/layer_state.hpp b/include/rive/animation/layer_state.hpp
index 793947a..f2086f0 100644
--- a/include/rive/animation/layer_state.hpp
+++ b/include/rive/animation/layer_state.hpp
@@ -5,7 +5,7 @@
 #include <vector>
 
 namespace rive {
-    class Artboard;
+    class ArtboardInstance;
     class StateTransition;
     class LayerStateImporter;
     class StateMachineLayerImporter;
@@ -36,7 +36,7 @@
 
         /// Make an instance of this state that can be advanced and applied by
         /// the state machine when it is active or being transitioned from.
-        virtual StateInstance* makeInstance(Artboard* instance) const;
+        virtual StateInstance* makeInstance(ArtboardInstance*) const;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/linear_animation_instance.hpp b/include/rive/animation/linear_animation_instance.hpp
index a1ec2ab..8eefb87 100644
--- a/include/rive/animation/linear_animation_instance.hpp
+++ b/include/rive/animation/linear_animation_instance.hpp
@@ -8,7 +8,7 @@
     class LinearAnimationInstance {
     private:
         const LinearAnimation* m_Animation = nullptr;
-        Artboard* m_ArtboardInstance;
+        ArtboardInstance* m_ArtboardInstance;
         float m_Time;
         float m_TotalTime;
         float m_LastTotalTime;
@@ -18,7 +18,7 @@
         int m_LoopValue = -1;
 
     public:
-        LinearAnimationInstance(const LinearAnimation*, Artboard* instance);
+        LinearAnimationInstance(const LinearAnimation*, ArtboardInstance*);
 
         // Advance the animation by the specified time. Returns true if the
         // animation will continue to animate after this advance.
diff --git a/include/rive/animation/nested_linear_animation.hpp b/include/rive/animation/nested_linear_animation.hpp
index 7940c51..9481350 100644
--- a/include/rive/animation/nested_linear_animation.hpp
+++ b/include/rive/animation/nested_linear_animation.hpp
@@ -3,6 +3,7 @@
 #include "rive/generated/animation/nested_linear_animation_base.hpp"
 #include <stdio.h>
 namespace rive {
+    class ArtboardInstance;
     class LinearAnimationInstance;
     class NestedLinearAnimation : public NestedLinearAnimationBase {
     protected:
@@ -11,7 +12,7 @@
     public:
         ~NestedLinearAnimation();
 
-        void initializeAnimation(Artboard* artboard) override;
+        void initializeAnimation(ArtboardInstance*) override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/nested_remap_animation.hpp b/include/rive/animation/nested_remap_animation.hpp
index 9303572..f71c229 100644
--- a/include/rive/animation/nested_remap_animation.hpp
+++ b/include/rive/animation/nested_remap_animation.hpp
@@ -7,7 +7,7 @@
     public:
         void timeChanged() override;
         void advance(float elapsedSeconds) override;
-        void initializeAnimation(Artboard* artboard) override;
+        void initializeAnimation(ArtboardInstance*) override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/nested_state_machine.hpp b/include/rive/animation/nested_state_machine.hpp
index d96c07b..5e7caf6 100644
--- a/include/rive/animation/nested_state_machine.hpp
+++ b/include/rive/animation/nested_state_machine.hpp
@@ -6,7 +6,7 @@
     class NestedStateMachine : public NestedStateMachineBase {
     public:
         void advance(float elapsedSeconds) override;
-        void initializeAnimation(Artboard* artboard) override;
+        void initializeAnimation(ArtboardInstance*) override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/state_machine_instance.hpp b/include/rive/animation/state_machine_instance.hpp
index 7e48cbb..5c7f1bc 100644
--- a/include/rive/animation/state_machine_instance.hpp
+++ b/include/rive/animation/state_machine_instance.hpp
@@ -21,7 +21,7 @@
 
     private:
         const StateMachine* m_Machine;
-        Artboard* m_ArtboardInstance;
+        ArtboardInstance* m_ArtboardInstance;
         bool m_NeedsAdvance = false;
 
         size_t m_InputCount;
@@ -32,7 +32,7 @@
         void markNeedsAdvance();
 
     public:
-        StateMachineInstance(const StateMachine* machine, Artboard* instance);
+        StateMachineInstance(const StateMachine* machine, ArtboardInstance*);
         ~StateMachineInstance();
 
         // Advance the state machine by the specified time. Returns true if the
diff --git a/include/rive/animation/system_state_instance.hpp b/include/rive/animation/system_state_instance.hpp
index 2cc70ef..d72f844 100644
--- a/include/rive/animation/system_state_instance.hpp
+++ b/include/rive/animation/system_state_instance.hpp
@@ -5,12 +5,14 @@
 #include "rive/animation/state_instance.hpp"
 
 namespace rive {
+    class ArtboardInstance;
+
     /// Represents an instance of a system state machine. Basically a
     /// placeholder that may have meaning to the state machine itself, or is
     /// just a no-op state (perhaps an unknown to this runtime state-type).
     class SystemStateInstance : public StateInstance {
     public:
-        SystemStateInstance(const LayerState* layerState, Artboard* instance);
+        SystemStateInstance(const LayerState*, ArtboardInstance*);
 
         void advance(float seconds, SMIInput** inputs) override;
         void apply(float mix) override;
diff --git a/include/rive/nested_animation.hpp b/include/rive/nested_animation.hpp
index bbc0a87..1f4491b 100644
--- a/include/rive/nested_animation.hpp
+++ b/include/rive/nested_animation.hpp
@@ -3,6 +3,8 @@
 #include "rive/generated/nested_animation_base.hpp"
 #include <stdio.h>
 namespace rive {
+    class ArtboardInstance;
+
     class NestedAnimation : public NestedAnimationBase {
     public:
         StatusCode onAddedDirty(CoreContext* context) override;
@@ -12,7 +14,7 @@
 
         // Initialize the animation (make instances as necessary) from the
         // source artboard.
-        virtual void initializeAnimation(Artboard* artboard) = 0;
+        virtual void initializeAnimation(ArtboardInstance*) = 0;
     };
 } // namespace rive
 
diff --git a/src/animation/animation_state.cpp b/src/animation/animation_state.cpp
index ceb701d..ee60a9c 100644
--- a/src/animation/animation_state.cpp
+++ b/src/animation/animation_state.cpp
@@ -7,10 +7,10 @@
 
 using namespace rive;
 
-StateInstance* AnimationState::makeInstance(Artboard* instance) const {
+StateInstance* AnimationState::makeInstance(ArtboardInstance* artboard) const {
     if (animation() == nullptr) {
         // Failed to load at runtime/some new type we don't understand.
-        return new SystemStateInstance(this, instance);
+        return new SystemStateInstance(this, artboard);
     }
-    return new AnimationStateInstance(this, instance);
+    return new AnimationStateInstance(this, artboard);
 }
\ No newline at end of file
diff --git a/src/animation/animation_state_instance.cpp b/src/animation/animation_state_instance.cpp
index 3303d4f..32fa598 100644
--- a/src/animation/animation_state_instance.cpp
+++ b/src/animation/animation_state_instance.cpp
@@ -4,9 +4,9 @@
 using namespace rive;
 
 AnimationStateInstance::AnimationStateInstance(const AnimationState* state,
-                                               Artboard* instance) :
+                                               ArtboardInstance* artboard) :
     StateInstance(state),
-    m_AnimationInstance(state->animation(), instance),
+    m_AnimationInstance(state->animation(), artboard),
     m_KeepGoing(true)
 {}
 
diff --git a/src/animation/blend_state_1d.cpp b/src/animation/blend_state_1d.cpp
index 778fe9b..0f0043f 100644
--- a/src/animation/blend_state_1d.cpp
+++ b/src/animation/blend_state_1d.cpp
@@ -6,8 +6,8 @@
 
 using namespace rive;
 
-StateInstance* BlendState1D::makeInstance(Artboard* instance) const {
-    return new BlendState1DInstance(this, instance);
+StateInstance* BlendState1D::makeInstance(ArtboardInstance* artboard) const {
+    return new BlendState1DInstance(this, artboard);
 }
 
 StatusCode BlendState1D::import(ImportStack& importStack) {
diff --git a/src/animation/blend_state_1d_instance.cpp b/src/animation/blend_state_1d_instance.cpp
index 4bb4408..d0ac304 100644
--- a/src/animation/blend_state_1d_instance.cpp
+++ b/src/animation/blend_state_1d_instance.cpp
@@ -3,8 +3,8 @@
 
 using namespace rive;
 
-BlendState1DInstance::BlendState1DInstance(const BlendState1D* blendState, Artboard* instance) :
-    BlendStateInstance<BlendState1D, BlendAnimation1D>(blendState, instance) {}
+BlendState1DInstance::BlendState1DInstance(const BlendState1D* blendState, ArtboardInstance* artboard) :
+    BlendStateInstance<BlendState1D, BlendAnimation1D>(blendState, artboard) {}
 
 int BlendState1DInstance::animationIndex(float value) {
     int idx = 0;
diff --git a/src/animation/blend_state_direct.cpp b/src/animation/blend_state_direct.cpp
index 2879b4c..9830c83 100644
--- a/src/animation/blend_state_direct.cpp
+++ b/src/animation/blend_state_direct.cpp
@@ -6,6 +6,6 @@
 
 using namespace rive;
 
-StateInstance* BlendStateDirect::makeInstance(Artboard* instance) const {
-    return new BlendStateDirectInstance(this, instance);
+StateInstance* BlendStateDirect::makeInstance(ArtboardInstance* artboard) const {
+    return new BlendStateDirectInstance(this, artboard);
 }
\ No newline at end of file
diff --git a/src/animation/blend_state_direct_instance.cpp b/src/animation/blend_state_direct_instance.cpp
index 77c1c2f..062698e 100644
--- a/src/animation/blend_state_direct_instance.cpp
+++ b/src/animation/blend_state_direct_instance.cpp
@@ -3,8 +3,8 @@
 
 using namespace rive;
 
-BlendStateDirectInstance::BlendStateDirectInstance(const BlendStateDirect* blendState, Artboard* instance) :
-    BlendStateInstance<BlendStateDirect, BlendAnimationDirect>(blendState, instance) {}
+BlendStateDirectInstance::BlendStateDirectInstance(const BlendStateDirect* blendState, ArtboardInstance* artboard) :
+    BlendStateInstance<BlendStateDirect, BlendAnimationDirect>(blendState, artboard) {}
 
 void BlendStateDirectInstance::advance(float seconds, SMIInput** inputs) {
     BlendStateInstance<BlendStateDirect, BlendAnimationDirect>::advance(seconds, inputs);
diff --git a/src/animation/layer_state.cpp b/src/animation/layer_state.cpp
index 7fce2d8..e6e9d9a 100644
--- a/src/animation/layer_state.cpp
+++ b/src/animation/layer_state.cpp
@@ -46,6 +46,6 @@
 
 void LayerState::addTransition(StateTransition* transition) { m_Transitions.push_back(transition); }
 
-StateInstance* LayerState::makeInstance(Artboard* instance) const {
-    return new SystemStateInstance(this, instance);
+StateInstance* LayerState::makeInstance(ArtboardInstance* artboard) const {
+    return new SystemStateInstance(this, artboard);
 }
\ No newline at end of file
diff --git a/src/animation/linear_animation_instance.cpp b/src/animation/linear_animation_instance.cpp
index f781cc2..a754993 100644
--- a/src/animation/linear_animation_instance.cpp
+++ b/src/animation/linear_animation_instance.cpp
@@ -6,9 +6,9 @@
 using namespace rive;
 
 LinearAnimationInstance::LinearAnimationInstance(const LinearAnimation* animation,
-                                                 Artboard* instance) :
+                                                 ArtboardInstance* artboard) :
     m_Animation(animation),
-    m_ArtboardInstance(instance),
+    m_ArtboardInstance(artboard),
     m_Time(animation->enableWorkArea() ? (float)animation->workStart() / animation->fps() : 0),
     m_TotalTime(0.0f),
     m_LastTotalTime(0.0f),
diff --git a/src/animation/nested_linear_animation.cpp b/src/animation/nested_linear_animation.cpp
index 2d418d1..7bfefd4 100644
--- a/src/animation/nested_linear_animation.cpp
+++ b/src/animation/nested_linear_animation.cpp
@@ -5,7 +5,7 @@
 
 NestedLinearAnimation::~NestedLinearAnimation() { delete m_AnimationInstance; }
 
-void NestedLinearAnimation::initializeAnimation(Artboard* artboard) {
+void NestedLinearAnimation::initializeAnimation(ArtboardInstance* artboard) {
     assert(m_AnimationInstance == nullptr);
     m_AnimationInstance = new LinearAnimationInstance(artboard->animation(animationId()), artboard);
 }
\ No newline at end of file
diff --git a/src/animation/nested_remap_animation.cpp b/src/animation/nested_remap_animation.cpp
index fd146eb..2af1522 100644
--- a/src/animation/nested_remap_animation.cpp
+++ b/src/animation/nested_remap_animation.cpp
@@ -10,7 +10,7 @@
     }
 }
 
-void NestedRemapAnimation::initializeAnimation(Artboard* artboard) {
+void NestedRemapAnimation::initializeAnimation(ArtboardInstance* artboard) {
     Super::initializeAnimation(artboard);
     timeChanged();
 }
diff --git a/src/animation/nested_state_machine.cpp b/src/animation/nested_state_machine.cpp
index 2b3ad7c..139572a 100644
--- a/src/animation/nested_state_machine.cpp
+++ b/src/animation/nested_state_machine.cpp
@@ -4,4 +4,4 @@
 
 void NestedStateMachine::advance(float elapsedSeconds) {}
 
-void NestedStateMachine::initializeAnimation(Artboard* artboard) {}
\ No newline at end of file
+void NestedStateMachine::initializeAnimation(ArtboardInstance*) {}
\ No newline at end of file
diff --git a/src/animation/state_machine_instance.cpp b/src/animation/state_machine_instance.cpp
index 6ece00f..1239044 100644
--- a/src/animation/state_machine_instance.cpp
+++ b/src/animation/state_machine_instance.cpp
@@ -20,7 +20,7 @@
     private:
         static const int maxIterations = 100;
         const StateMachineLayer* m_Layer = nullptr;
-        Artboard* m_ArtboardInstance = nullptr;
+        ArtboardInstance* m_ArtboardInstance = nullptr;
 
         StateInstance* m_AnyStateInstance = nullptr;
         StateInstance* m_CurrentState = nullptr;
@@ -49,10 +49,10 @@
             delete m_StateFrom;
         }
 
-        void init(const StateMachineLayer* layer, Artboard* instance) {
-            m_ArtboardInstance = instance;
+        void init(const StateMachineLayer* layer, ArtboardInstance* artboard) {
+            m_ArtboardInstance = artboard;
             assert(m_Layer == nullptr);
-            m_AnyStateInstance = layer->anyState()->makeInstance(instance);
+            m_AnyStateInstance = layer->anyState()->makeInstance(artboard);
             m_Layer = layer;
             changeState(m_Layer->entryState());
         }
@@ -215,11 +215,11 @@
     };
 } // namespace rive
 
-StateMachineInstance::StateMachineInstance(const StateMachine* machine, Artboard* instance)
+StateMachineInstance::StateMachineInstance(const StateMachine* machine, ArtboardInstance* artboard)
         : m_Machine(machine)
-        , m_ArtboardInstance(instance)
+        , m_ArtboardInstance(artboard)
 {
-    assert(instance->isInstance());
+    assert(artboard->isInstance());
     m_InputCount = machine->inputCount();
     m_InputInstances = new SMIInput*[m_InputCount];
     for (size_t i = 0; i < m_InputCount; i++) {
diff --git a/src/animation/system_state_instance.cpp b/src/animation/system_state_instance.cpp
index 957ac18..0d97784 100644
--- a/src/animation/system_state_instance.cpp
+++ b/src/animation/system_state_instance.cpp
@@ -1,7 +1,7 @@
 #include "rive/animation/system_state_instance.hpp"
 using namespace rive;
 
-SystemStateInstance::SystemStateInstance(const LayerState* layerState, Artboard* instance) :
+SystemStateInstance::SystemStateInstance(const LayerState* layerState, ArtboardInstance*) :
     StateInstance(layerState) {}
 
 void SystemStateInstance::advance(float seconds, SMIInput** inputs) {}
