diff --git a/include/rive/animation/blend_state_instance.hpp b/include/rive/animation/blend_state_instance.hpp
index 38c5083..9b1a120 100644
--- a/include/rive/animation/blend_state_instance.hpp
+++ b/include/rive/animation/blend_state_instance.hpp
@@ -23,7 +23,7 @@
         const T* blendAnimation() const { return m_BlendAnimation; }
         const LinearAnimationInstance* animationInstance() const { return &m_AnimationInstance; }
 
-        BlendStateAnimationInstance(const T* blendAnimation, ArtboardInstance* instance) :
+        BlendStateAnimationInstance(const T* blendAnimation, Artboard* instance) :
             m_BlendAnimation(blendAnimation),
             m_AnimationInstance(blendAnimation->animation(), instance)
         {}
diff --git a/include/rive/animation/linear_animation_instance.hpp b/include/rive/animation/linear_animation_instance.hpp
index dcbdc67..d03b8db 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;
-        ArtboardInstance* m_ArtboardInstance;
+        Artboard* m_ArtboardInstance;
         float m_Time;
         float m_TotalTime;
         float m_LastTotalTime;
@@ -18,7 +18,7 @@
         int m_LoopValue = -1;
 
     public:
-        LinearAnimationInstance(const LinearAnimation*, ArtboardInstance* instance);
+        LinearAnimationInstance(const LinearAnimation*, Artboard* instance);
 
         // 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 e96df87..7940c51 100644
--- a/include/rive/animation/nested_linear_animation.hpp
+++ b/include/rive/animation/nested_linear_animation.hpp
@@ -6,13 +6,12 @@
     class LinearAnimationInstance;
     class NestedLinearAnimation : public NestedLinearAnimationBase {
     protected:
-        std::unique_ptr<LinearAnimationInstance> m_AnimationInstance;
+        LinearAnimationInstance* m_AnimationInstance = nullptr;
 
     public:
-        NestedLinearAnimation();
-        ~NestedLinearAnimation() override;
+        ~NestedLinearAnimation();
 
-        void initializeAnimation(ArtboardInstance*) override;
+        void initializeAnimation(Artboard* artboard) override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/nested_remap_animation.hpp b/include/rive/animation/nested_remap_animation.hpp
index f71c229..9303572 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(ArtboardInstance*) override;
+        void initializeAnimation(Artboard* artboard) override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/nested_state_machine.hpp b/include/rive/animation/nested_state_machine.hpp
index aa30f02..d96c07b 100644
--- a/include/rive/animation/nested_state_machine.hpp
+++ b/include/rive/animation/nested_state_machine.hpp
@@ -3,12 +3,10 @@
 #include "rive/generated/animation/nested_state_machine_base.hpp"
 #include <stdio.h>
 namespace rive {
-    class ArtboardInstance;
-
     class NestedStateMachine : public NestedStateMachineBase {
     public:
         void advance(float elapsedSeconds) override;
-        void initializeAnimation(ArtboardInstance*) override;
+        void initializeAnimation(Artboard* artboard) override;
     };
 } // namespace rive
 
diff --git a/include/rive/nested_animation.hpp b/include/rive/nested_animation.hpp
index 1f4491b..bbc0a87 100644
--- a/include/rive/nested_animation.hpp
+++ b/include/rive/nested_animation.hpp
@@ -3,8 +3,6 @@
 #include "rive/generated/nested_animation_base.hpp"
 #include <stdio.h>
 namespace rive {
-    class ArtboardInstance;
-
     class NestedAnimation : public NestedAnimationBase {
     public:
         StatusCode onAddedDirty(CoreContext* context) override;
@@ -14,7 +12,7 @@
 
         // Initialize the animation (make instances as necessary) from the
         // source artboard.
-        virtual void initializeAnimation(ArtboardInstance*) = 0;
+        virtual void initializeAnimation(Artboard* artboard) = 0;
     };
 } // namespace rive
 
diff --git a/src/animation/linear_animation_instance.cpp b/src/animation/linear_animation_instance.cpp
index 1c8badb..4e6e987 100644
--- a/src/animation/linear_animation_instance.cpp
+++ b/src/animation/linear_animation_instance.cpp
@@ -6,7 +6,7 @@
 using namespace rive;
 
 LinearAnimationInstance::LinearAnimationInstance(const LinearAnimation* animation,
-                                                 ArtboardInstance* instance) :
+                                                 Artboard* instance) :
     m_Animation(animation),
     m_ArtboardInstance(instance),
     m_Time(animation->enableWorkArea() ? (float)animation->workStart() / animation->fps() : 0),
diff --git a/src/animation/nested_linear_animation.cpp b/src/animation/nested_linear_animation.cpp
index e425c4f..2d418d1 100644
--- a/src/animation/nested_linear_animation.cpp
+++ b/src/animation/nested_linear_animation.cpp
@@ -3,10 +3,9 @@
 
 using namespace rive;
 
-NestedLinearAnimation::NestedLinearAnimation() {}
-NestedLinearAnimation::~NestedLinearAnimation() {}
+NestedLinearAnimation::~NestedLinearAnimation() { delete m_AnimationInstance; }
 
-void NestedLinearAnimation::initializeAnimation(ArtboardInstance* artboard) {
-    m_AnimationInstance = std::make_unique<LinearAnimationInstance>(artboard->animation(animationId()),
-                                                                    artboard);
+void NestedLinearAnimation::initializeAnimation(Artboard* 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 2af1522..fd146eb 100644
--- a/src/animation/nested_remap_animation.cpp
+++ b/src/animation/nested_remap_animation.cpp
@@ -10,7 +10,7 @@
     }
 }
 
-void NestedRemapAnimation::initializeAnimation(ArtboardInstance* artboard) {
+void NestedRemapAnimation::initializeAnimation(Artboard* artboard) {
     Super::initializeAnimation(artboard);
     timeChanged();
 }
diff --git a/src/animation/nested_state_machine.cpp b/src/animation/nested_state_machine.cpp
index 139572a..2b3ad7c 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(ArtboardInstance*) {}
\ No newline at end of file
+void NestedStateMachine::initializeAnimation(Artboard* artboard) {}
\ No newline at end of file
diff --git a/src/nested_artboard.cpp b/src/nested_artboard.cpp
index 5eec148..156a9fd 100644
--- a/src/nested_artboard.cpp
+++ b/src/nested_artboard.cpp
@@ -82,12 +82,9 @@
     // does require that we always use an artboard instance (not just the source
     // artboard) when working with nested artboards, but in general this is good
     // practice for any loaded Rive file.
-    assert(m_NestedInstance == nullptr || m_NestedInstance->isInstance());
-
-    if (m_NestedInstance != nullptr && m_NestedInstance->isInstance()) {
-        auto abi = static_cast<ArtboardInstance*>(m_NestedInstance);
+    if (m_NestedInstance != nullptr) {
         for (auto animation : m_NestedAnimations) {
-            animation->initializeAnimation(abi);
+            animation->initializeAnimation(m_NestedInstance);
         }
     }
     return Super::onAddedClean(context);
