diff --git a/lib/src/asset_list.dart b/lib/src/asset_list.dart
new file mode 100644
index 0000000..d442088
--- /dev/null
+++ b/lib/src/asset_list.dart
@@ -0,0 +1,20 @@
+import 'dart:collection';
+import 'package:rive/src/rive_core/asset.dart';
+
+// List of assets used by the backboard.
+class AssetList extends ListBase<Asset> {
+  final List<Asset?> _values = [];
+  List<Asset> get values => _values.cast<Asset>();
+
+  @override
+  int get length => _values.length;
+
+  @override
+  set length(int value) => _values.length = value;
+
+  @override
+  Asset operator [](int index) => _values[index]!;
+
+  @override
+  void operator []=(int index, Asset value) => _values[index] = value;
+}
diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart
index efa7fd8..a12d881 100644
--- a/lib/src/core/core.dart
+++ b/lib/src/core/core.dart
@@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart';
 import 'package:rive/src/rive_core/runtime/exceptions/rive_format_error_exception.dart';
 
 export 'package:rive/src/animation_list.dart';
+export 'package:rive/src/asset_list.dart';
 export 'package:rive/src/blend_animations.dart';
 export 'package:rive/src/container_children.dart';
 export 'package:rive/src/core/importers/artboard_importer.dart';
diff --git a/lib/src/generated/asset_base.dart b/lib/src/generated/asset_base.dart
new file mode 100644
index 0000000..b8e34d5
--- /dev/null
+++ b/lib/src/generated/asset_base.dart
@@ -0,0 +1,12 @@
+/// Core automatically generated lib/src/generated/asset_base.dart.
+/// Do not modify manually.
+
+import 'package:rive/src/core/core.dart';
+
+abstract class AssetBase<T extends CoreContext> extends Core<T> {
+  static const int typeKey = 99;
+  @override
+  int get coreType => AssetBase.typeKey;
+  @override
+  Set<int> get coreTypes => {AssetBase.typeKey};
+}
diff --git a/lib/src/generated/rive_core_context.dart b/lib/src/generated/rive_core_context.dart
index 1989b9a..b15f918 100644
--- a/lib/src/generated/rive_core_context.dart
+++ b/lib/src/generated/rive_core_context.dart
@@ -42,6 +42,7 @@ import 'package:rive/src/generated/animation/transition_number_condition_base.da
 import 'package:rive/src/generated/animation/transition_trigger_condition_base.dart';
 import 'package:rive/src/generated/animation/transition_value_condition_base.dart';
 import 'package:rive/src/generated/artboard_base.dart';
+import 'package:rive/src/generated/asset_base.dart';
 import 'package:rive/src/generated/backboard_base.dart';
 import 'package:rive/src/generated/bones/bone_base.dart';
 import 'package:rive/src/generated/bones/cubic_weight_base.dart';
@@ -123,6 +124,7 @@ import 'package:rive/src/rive_core/animation/transition_bool_condition.dart';
 import 'package:rive/src/rive_core/animation/transition_number_condition.dart';
 import 'package:rive/src/rive_core/animation/transition_trigger_condition.dart';
 import 'package:rive/src/rive_core/artboard.dart';
+import 'package:rive/src/rive_core/asset.dart';
 import 'package:rive/src/rive_core/backboard.dart';
 import 'package:rive/src/rive_core/bones/bone.dart';
 import 'package:rive/src/rive_core/bones/cubic_weight.dart';
@@ -298,6 +300,8 @@ class RiveCoreContext {
         return Skin();
       case TendonBase.typeKey:
         return Tendon();
+      case AssetBase.typeKey:
+        return Asset();
       default:
         return null;
     }
diff --git a/lib/src/rive_core/asset.dart b/lib/src/rive_core/asset.dart
new file mode 100644
index 0000000..56cc3c3
--- /dev/null
+++ b/lib/src/rive_core/asset.dart
@@ -0,0 +1,25 @@
+import 'package:rive/src/core/core.dart';
+import 'package:rive/src/generated/asset_base.dart';
+import 'package:rive/src/rive_core/backboard.dart';
+
+class Asset extends AssetBase {
+  Backboard? _backboard;
+  Backboard? get backboard => _backboard;
+  set backboard(Backboard? value) {
+    if (_backboard == value) {
+      return;
+    }
+    _backboard = value;
+  }
+
+  @override
+  void onAdded() {}
+
+  @override
+  void onAddedDirty() {}
+
+  @override
+  bool import(ImportStack stack) {
+    return super.import(stack);
+  }
+}
diff --git a/lib/src/rive_core/backboard.dart b/lib/src/rive_core/backboard.dart
index 5b3607a..a90f220 100644
--- a/lib/src/rive_core/backboard.dart
+++ b/lib/src/rive_core/backboard.dart
@@ -1,9 +1,30 @@
+import 'package:rive/src/core/core.dart';
 import 'package:rive/src/generated/backboard_base.dart';
+import 'package:rive/src/rive_core/asset.dart';
+
 export 'package:rive/src/generated/backboard_base.dart';
 
 class Backboard extends BackboardBase {
   static final Backboard unknown = Backboard();
 
+  final AssetList _assets = AssetList();
+  AssetList get assets => _assets;
+
+  bool internalAddAsset(Asset asset) {
+    if (_assets.contains(asset)) {
+      return false;
+    }
+    _assets.add(asset);
+
+    return true;
+  }
+
+  bool internalRemoveAsset(Asset asset) {
+    bool removed = _assets.remove(asset);
+
+    return removed;
+  }
+
   @override
   void onAdded() {}
 
diff --git a/lib/src/rive_core/nested_animation.dart b/lib/src/rive_core/nested_animation.dart
index cca682d..417d9bd 100644
--- a/lib/src/rive_core/nested_animation.dart
+++ b/lib/src/rive_core/nested_animation.dart
@@ -16,18 +16,6 @@ abstract class NestedAnimation<T extends Animation>
   bool get isEnabled;
   void advance(double elapsedSeconds, MountedArtboard mountedArtboard);
 
-  // @override
-  // bool import(ImportStack stack) {
-  //   var backboardImporter =
-  //       stack.latest<BackboardImporter>(BackboardBase.typeKey);
-  //   if (backboardImporter == null) {
-  //     return false;
-  //   }
-  //   backboardImporter.addNestedArtboard(this);
-
-  //   return super.import(stack);
-  // }
-
   @override
   void update(int dirt) {}
 }
diff --git a/lib/src/rive_core/nested_artboard.dart b/lib/src/rive_core/nested_artboard.dart
index 4255d2c..307764e 100644
--- a/lib/src/rive_core/nested_artboard.dart
+++ b/lib/src/rive_core/nested_artboard.dart
@@ -22,6 +22,7 @@ abstract class MountedArtboard {
   AABB get bounds;
   double get renderOpacity;
   set renderOpacity(double value);
+  void advance(double seconds);
 }
 
 class NestedArtboard extends NestedArtboardBase {
@@ -83,6 +84,7 @@ class NestedArtboard extends NestedArtboardBase {
         animation.advance(elapsedSeconds, mountedArtboard!);
       }
     }
+    mountedArtboard!.advance(elapsedSeconds);
   }
 
   @override
diff --git a/lib/src/rive_core/state_machine_controller.dart b/lib/src/rive_core/state_machine_controller.dart
index 2cd63b4..dfaa82d 100644
--- a/lib/src/rive_core/state_machine_controller.dart
+++ b/lib/src/rive_core/state_machine_controller.dart
@@ -220,7 +220,6 @@ class StateMachineController extends RiveAnimationController<CoreContext> {
   void _onStateChange(LayerState layerState) =>
       SchedulerBinding.instance?.addPostFrameCallback((_) {
         String stateName = 'unknown';
-        print('Layer state type ${layerState.runtimeType}');
         if (layerState is AnimationState && layerState.animation != null) {
           stateName = layerState.animation!.name;
         } else if (layerState is EntryState) {
diff --git a/lib/src/runtime_nested_artboard.dart b/lib/src/runtime_nested_artboard.dart
index f469624..7a49682 100644
--- a/lib/src/runtime_nested_artboard.dart
+++ b/lib/src/runtime_nested_artboard.dart
@@ -116,4 +116,8 @@ class RuntimeMountedArtboard extends MountedArtboard {
   set renderOpacity(double value) {
     artboardInstance.opacity = value;
   }
+
+  @override
+  void advance(double seconds) =>
+      artboardInstance.advance(seconds, nested: true);
 }