diff --git a/dev/defs/animation/listener_action.json b/dev/defs/animation/listener_action.json
new file mode 100644
index 0000000..a1f0b1c
--- /dev/null
+++ b/dev/defs/animation/listener_action.json
@@ -0,0 +1,33 @@
+{
+  "name": "ListenerAction",
+  "key": {
+    "int": 125,
+    "string": "listener_action"
+  },
+  "abstract": true,
+  "properties": {
+    "listenerId": {
+      "type": "Id",
+      "typeRuntime": "uint",
+      "initialValue": "Core.missingId",
+      "initialValueRuntime": "0",
+      "key": {
+        "int": 226,
+        "string": "listenerId"
+      },
+      "description": "Identifier used to track the StateMachineListener this result belongs to.",
+      "runtime": false
+    },
+    "order": {
+      "type": "FractionalIndex",
+      "initialValue": "FractionalIndex.invalid",
+      "initialValueRuntime": "0",
+      "key": {
+        "int": 230,
+        "string": "order"
+      },
+      "description": "Order value for condition in a transition.",
+      "runtime": false
+    }
+  }
+}
\ No newline at end of file
diff --git a/dev/defs/animation/listener_align_target.json b/dev/defs/animation/listener_align_target.json
new file mode 100644
index 0000000..b34168f
--- /dev/null
+++ b/dev/defs/animation/listener_align_target.json
@@ -0,0 +1,21 @@
+{
+  "name": "ListenerAlignTarget",
+  "key": {
+    "int": 126,
+    "string": "listeneraligntarget"
+  },
+  "extends": "animation/listener_action.json",
+  "properties": {
+    "targetId": {
+      "type": "Id",
+      "typeRuntime": "uint",
+      "initialValue": "Core.missingId",
+      "initialValueRuntime": "0",
+      "key": {
+        "int": 240,
+        "string": "targetid"
+      },
+      "description": "Identifier used to track the object use as a target fo this listener action."
+    }
+  }
+}
\ No newline at end of file
diff --git a/dev/defs/animation/listener_input_change.json b/dev/defs/animation/listener_input_change.json
index df4cd3b..445b3e4 100644
--- a/dev/defs/animation/listener_input_change.json
+++ b/dev/defs/animation/listener_input_change.json
@@ -5,19 +5,8 @@
     "string": "listener_input_change"
   },
   "abstract": true,
+  "extends": "animation/listener_action.json",
   "properties": {
-    "listenerId": {
-      "type": "Id",
-      "typeRuntime": "uint",
-      "initialValue": "Core.missingId",
-      "initialValueRuntime": "0",
-      "key": {
-        "int": 226,
-        "string": "listenerId"
-      },
-      "description": "Identifier used to track the StateMachineListener this result belongs to.",
-      "runtime": false
-    },
     "inputId": {
       "type": "Id",
       "typeRuntime": "uint",
@@ -28,17 +17,6 @@
         "string": "inputid"
       },
       "description": "Id of the StateMachineInput referenced."
-    },
-    "order": {
-      "type": "FractionalIndex",
-      "initialValue": "FractionalIndex.invalid",
-      "initialValueRuntime": "0",
-      "key": {
-        "int": 230,
-        "string": "order"
-      },
-      "description": "Order value for condition in a transition.",
-      "runtime": false
     }
   }
 }
\ No newline at end of file
diff --git a/dev/defs/animation/nested_bool.json b/dev/defs/animation/nested_bool.json
new file mode 100644
index 0000000..b55c59a
--- /dev/null
+++ b/dev/defs/animation/nested_bool.json
@@ -0,0 +1,19 @@
+{
+  "name": "NestedBool",
+  "key": {
+    "int": 123,
+    "string": "nestedBool"
+  },
+  "extends": "animation/nested_input.json",
+  "properties": {
+    "nestedValue": {
+      "type": "bool",
+      "initialValue": "false",
+      "animates": true,
+      "key": {
+        "int": 238,
+        "string": "value"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/dev/defs/animation/nested_input.json b/dev/defs/animation/nested_input.json
new file mode 100644
index 0000000..4fd8fe1
--- /dev/null
+++ b/dev/defs/animation/nested_input.json
@@ -0,0 +1,22 @@
+{
+  "name": "NestedInput",
+  "key": {
+    "int": 121,
+    "string": "nestedinput"
+  },
+  "abstract": true,
+  "extends": "component.json",
+  "properties": {
+    "inputId": {
+      "type": "Id",
+      "typeRuntime": "uint",
+      "initialValue": "Core.missingId",
+      "initialValueRuntime": "-1",
+      "key": {
+        "int": 237,
+        "string": "inputid"
+      },
+      "description": "Identifier used to track the actual backing state machine input."
+    }
+  }
+}
\ No newline at end of file
diff --git a/dev/defs/animation/nested_number.json b/dev/defs/animation/nested_number.json
new file mode 100644
index 0000000..7315cf1
--- /dev/null
+++ b/dev/defs/animation/nested_number.json
@@ -0,0 +1,19 @@
+{
+  "name": "NestedNumber",
+  "key": {
+    "int": 124,
+    "string": "nestedNumber"
+  },
+  "extends": "animation/nested_input.json",
+  "properties": {
+    "nestedValue": {
+      "type": "double",
+      "initialValue": "0",
+      "animates": true,
+      "key": {
+        "int": 239,
+        "string": "nestedValue"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/dev/defs/animation/nested_trigger.json b/dev/defs/animation/nested_trigger.json
new file mode 100644
index 0000000..ea7f077
--- /dev/null
+++ b/dev/defs/animation/nested_trigger.json
@@ -0,0 +1,8 @@
+{
+  "name": "NestedTrigger",
+  "key": {
+    "int": 122,
+    "string": "nestedTrigger"
+  },
+  "extends": "animation/nested_input.json"
+}
\ No newline at end of file
diff --git a/dev/defs/assets/layered_asset.json b/dev/defs/assets/layered_asset.json
index 042381f..09a1713 100644
--- a/dev/defs/assets/layered_asset.json
+++ b/dev/defs/assets/layered_asset.json
@@ -4,6 +4,6 @@
     "int": 119,
     "string": "layeredasset"
   },
-  "runtime": false,
-  "extends": "assets/drawable_asset.json"
+  "extends": "assets/drawable_asset.json",
+  "runtime": false
 }
\ No newline at end of file
diff --git a/dev/defs/nested_animation.json b/dev/defs/nested_animation.json
index 2d89627..db6cbfb 100644
--- a/dev/defs/nested_animation.json
+++ b/dev/defs/nested_animation.json
@@ -5,7 +5,7 @@
     "string": "nestedanimation"
   },
   "abstract": true,
-  "extends": "component.json",
+  "extends": "container_component.json",
   "properties": {
     "animationId": {
       "type": "Id",
diff --git a/include/rive/animation/listener_action.hpp b/include/rive/animation/listener_action.hpp
new file mode 100644
index 0000000..1b78659
--- /dev/null
+++ b/include/rive/animation/listener_action.hpp
@@ -0,0 +1,15 @@
+#ifndef _RIVE_LISTENER_ACTION_HPP_
+#define _RIVE_LISTENER_ACTION_HPP_
+#include "rive/generated/animation/listener_action_base.hpp"
+#include "rive/math/vec2d.hpp"
+
+namespace rive {
+    class StateMachineInstance;
+    class ListenerAction : public ListenerActionBase {
+    public:
+        StatusCode import(ImportStack& importStack) override;
+        virtual void perform(StateMachineInstance* stateMachineInstance, Vec2D position) const = 0;
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/listener_align_target.hpp b/include/rive/animation/listener_align_target.hpp
new file mode 100644
index 0000000..aec3c89
--- /dev/null
+++ b/include/rive/animation/listener_align_target.hpp
@@ -0,0 +1,12 @@
+#ifndef _RIVE_LISTENER_ALIGN_TARGET_HPP_
+#define _RIVE_LISTENER_ALIGN_TARGET_HPP_
+#include "rive/generated/animation/listener_align_target_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class ListenerAlignTarget : public ListenerAlignTargetBase {
+    public:
+        void perform(StateMachineInstance* stateMachineInstance, Vec2D position) const override;
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/listener_bool_change.hpp b/include/rive/animation/listener_bool_change.hpp
index 2bc6efb..d821ae1 100644
--- a/include/rive/animation/listener_bool_change.hpp
+++ b/include/rive/animation/listener_bool_change.hpp
@@ -6,7 +6,7 @@
     class ListenerBoolChange : public ListenerBoolChangeBase {
     public:
         bool validateInputType(const StateMachineInput* input) const override;
-        void perform(StateMachineInstance* stateMachineInstance) const override;
+        void perform(StateMachineInstance* stateMachineInstance, Vec2D position) const override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/listener_input_change.hpp b/include/rive/animation/listener_input_change.hpp
index c7ccc04..c71047f 100644
--- a/include/rive/animation/listener_input_change.hpp
+++ b/include/rive/animation/listener_input_change.hpp
@@ -3,12 +3,10 @@
 #include "rive/generated/animation/listener_input_change_base.hpp"
 
 namespace rive {
-    class StateMachineInstance;
     class StateMachineInput;
     class ListenerInputChange : public ListenerInputChangeBase {
     public:
         StatusCode import(ImportStack& importStack) override;
-        virtual void perform(StateMachineInstance* stateMachineInstance) const = 0;
         virtual bool validateInputType(const StateMachineInput* input) const { return true; }
     };
 } // namespace rive
diff --git a/include/rive/animation/listener_number_change.hpp b/include/rive/animation/listener_number_change.hpp
index a20c911..9f933d9 100644
--- a/include/rive/animation/listener_number_change.hpp
+++ b/include/rive/animation/listener_number_change.hpp
@@ -6,7 +6,7 @@
     class ListenerNumberChange : public ListenerNumberChangeBase {
     public:
         bool validateInputType(const StateMachineInput* input) const override;
-        void perform(StateMachineInstance* stateMachineInstance) const override;
+        void perform(StateMachineInstance* stateMachineInstance, Vec2D position) const override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/listener_trigger_change.hpp b/include/rive/animation/listener_trigger_change.hpp
index ab89e1f..cc98376 100644
--- a/include/rive/animation/listener_trigger_change.hpp
+++ b/include/rive/animation/listener_trigger_change.hpp
@@ -6,7 +6,7 @@
     class ListenerTriggerChange : public ListenerTriggerChangeBase {
     public:
         bool validateInputType(const StateMachineInput* input) const override;
-        void perform(StateMachineInstance* stateMachineInstance) const override;
+        void perform(StateMachineInstance* stateMachineInstance, Vec2D position) const override;
     };
 } // namespace rive
 
diff --git a/include/rive/animation/nested_bool.hpp b/include/rive/animation/nested_bool.hpp
new file mode 100644
index 0000000..6b084ae
--- /dev/null
+++ b/include/rive/animation/nested_bool.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_NESTED_BOOL_HPP_
+#define _RIVE_NESTED_BOOL_HPP_
+#include "rive/generated/animation/nested_bool_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class NestedBool : public NestedBoolBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/nested_input.hpp b/include/rive/animation/nested_input.hpp
new file mode 100644
index 0000000..94c2b69
--- /dev/null
+++ b/include/rive/animation/nested_input.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_NESTED_INPUT_HPP_
+#define _RIVE_NESTED_INPUT_HPP_
+#include "rive/generated/animation/nested_input_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class NestedInput : public NestedInputBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/nested_number.hpp b/include/rive/animation/nested_number.hpp
new file mode 100644
index 0000000..f4c2f12
--- /dev/null
+++ b/include/rive/animation/nested_number.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_NESTED_NUMBER_HPP_
+#define _RIVE_NESTED_NUMBER_HPP_
+#include "rive/generated/animation/nested_number_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class NestedNumber : public NestedNumberBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/nested_trigger.hpp b/include/rive/animation/nested_trigger.hpp
new file mode 100644
index 0000000..2fc040b
--- /dev/null
+++ b/include/rive/animation/nested_trigger.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_NESTED_TRIGGER_HPP_
+#define _RIVE_NESTED_TRIGGER_HPP_
+#include "rive/generated/animation/nested_trigger_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class NestedTrigger : public NestedTriggerBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/state_machine_instance.hpp b/include/rive/animation/state_machine_instance.hpp
index fa8fe6f..c189b81 100644
--- a/include/rive/animation/state_machine_instance.hpp
+++ b/include/rive/animation/state_machine_instance.hpp
@@ -39,7 +39,7 @@
 
         /// Provide a hitListener if you want to process a down or an up for the pointer position
         /// too.
-        void updateListeners(Vec2D position, ListenerType hitListener = ListenerType::updateHover);
+        void updateListeners(Vec2D position, ListenerType hitListener);
 
         template <typename SMType, typename InstType>
         InstType* getNamedInput(const std::string& name) const;
@@ -85,6 +85,10 @@
         float durationSeconds() const override { return -1; }
         Loop loop() const override { return Loop::oneShot; }
         bool isTranslucent() const override { return true; }
+
+        /// Allow anything referencing a concrete StateMachineInstace access to
+        /// the backing artboard (explicitly not allowed on Scenes).
+        Artboard* artboard() { return m_ArtboardInstance; }
     };
 } // namespace rive
 #endif
diff --git a/include/rive/animation/state_machine_listener.hpp b/include/rive/animation/state_machine_listener.hpp
index 14bd60b..bea2763 100644
--- a/include/rive/animation/state_machine_listener.hpp
+++ b/include/rive/animation/state_machine_listener.hpp
@@ -2,29 +2,31 @@
 #define _RIVE_STATE_MACHINE_LISTENER_HPP_
 #include "rive/generated/animation/state_machine_listener_base.hpp"
 #include "rive/listener_type.hpp"
+#include "rive/math/vec2d.hpp"
 
 namespace rive {
     class Shape;
     class StateMachineListenerImporter;
-    class ListenerInputChange;
+    class ListenerAction;
     class StateMachineInstance;
     class StateMachineListener : public StateMachineListenerBase {
         friend class StateMachineListenerImporter;
 
     private:
         std::vector<uint32_t> m_HitShapesIds;
-        std::vector<ListenerInputChange*> m_InputChanges;
-        void addInputChange(ListenerInputChange* inputChange);
+        std::vector<ListenerAction*> m_Actions;
+        void addAction(ListenerAction* action);
 
     public:
         ListenerType listenerType() const { return (ListenerType)listenerTypeValue(); }
-        size_t inputChangeCount() const { return m_InputChanges.size(); }
-        const ListenerInputChange* inputChange(size_t index) const;
+        size_t actionCount() const { return m_Actions.size(); }
+
+        const ListenerAction* action(size_t index) const;
         StatusCode import(ImportStack& importStack) override;
         StatusCode onAddedClean(CoreContext* context) override;
 
         const std::vector<uint32_t>& hitShapeIds() const { return m_HitShapesIds; }
-        void performChanges(StateMachineInstance* stateMachineInstance) const;
+        void performChanges(StateMachineInstance* stateMachineInstance, Vec2D position) const;
     };
 } // namespace rive
 
diff --git a/include/rive/generated/animation/listener_action_base.hpp b/include/rive/generated/animation/listener_action_base.hpp
new file mode 100644
index 0000000..e73cb1c
--- /dev/null
+++ b/include/rive/generated/animation/listener_action_base.hpp
@@ -0,0 +1,33 @@
+#ifndef _RIVE_LISTENER_ACTION_BASE_HPP_
+#define _RIVE_LISTENER_ACTION_BASE_HPP_
+#include "rive/core.hpp"
+namespace rive {
+    class ListenerActionBase : public Core {
+    protected:
+        typedef Core Super;
+
+    public:
+        static const uint16_t typeKey = 125;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case ListenerActionBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        void copy(const ListenerActionBase& object) {}
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override { return false; }
+
+    protected:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/listener_align_target_base.hpp b/include/rive/generated/animation/listener_align_target_base.hpp
new file mode 100644
index 0000000..d7e8c86
--- /dev/null
+++ b/include/rive/generated/animation/listener_align_target_base.hpp
@@ -0,0 +1,62 @@
+#ifndef _RIVE_LISTENER_ALIGN_TARGET_BASE_HPP_
+#define _RIVE_LISTENER_ALIGN_TARGET_BASE_HPP_
+#include "rive/animation/listener_action.hpp"
+#include "rive/core/field_types/core_uint_type.hpp"
+namespace rive {
+    class ListenerAlignTargetBase : public ListenerAction {
+    protected:
+        typedef ListenerAction Super;
+
+    public:
+        static const uint16_t typeKey = 126;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case ListenerAlignTargetBase::typeKey:
+                case ListenerActionBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t targetIdPropertyKey = 240;
+
+    private:
+        uint32_t m_TargetId = 0;
+
+    public:
+        inline uint32_t targetId() const { return m_TargetId; }
+        void targetId(uint32_t value) {
+            if (m_TargetId == value) {
+                return;
+            }
+            m_TargetId = value;
+            targetIdChanged();
+        }
+
+        Core* clone() const override;
+        void copy(const ListenerAlignTargetBase& object) {
+            m_TargetId = object.m_TargetId;
+            ListenerAction::copy(object);
+        }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case targetIdPropertyKey:
+                    m_TargetId = CoreUintType::deserialize(reader);
+                    return true;
+            }
+            return ListenerAction::deserialize(propertyKey, reader);
+        }
+
+    protected:
+        virtual void targetIdChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/listener_bool_change_base.hpp b/include/rive/generated/animation/listener_bool_change_base.hpp
index e4e667b..c7d87c8 100644
--- a/include/rive/generated/animation/listener_bool_change_base.hpp
+++ b/include/rive/generated/animation/listener_bool_change_base.hpp
@@ -16,6 +16,7 @@
             switch (typeKey) {
                 case ListenerBoolChangeBase::typeKey:
                 case ListenerInputChangeBase::typeKey:
+                case ListenerActionBase::typeKey:
                     return true;
                 default:
                     return false;
diff --git a/include/rive/generated/animation/listener_input_change_base.hpp b/include/rive/generated/animation/listener_input_change_base.hpp
index f4dca8a..ef82552 100644
--- a/include/rive/generated/animation/listener_input_change_base.hpp
+++ b/include/rive/generated/animation/listener_input_change_base.hpp
@@ -1,11 +1,11 @@
 #ifndef _RIVE_LISTENER_INPUT_CHANGE_BASE_HPP_
 #define _RIVE_LISTENER_INPUT_CHANGE_BASE_HPP_
-#include "rive/core.hpp"
+#include "rive/animation/listener_action.hpp"
 #include "rive/core/field_types/core_uint_type.hpp"
 namespace rive {
-    class ListenerInputChangeBase : public Core {
+    class ListenerInputChangeBase : public ListenerAction {
     protected:
-        typedef Core Super;
+        typedef ListenerAction Super;
 
     public:
         static const uint16_t typeKey = 116;
@@ -15,6 +15,7 @@
         bool isTypeOf(uint16_t typeKey) const override {
             switch (typeKey) {
                 case ListenerInputChangeBase::typeKey:
+                case ListenerActionBase::typeKey:
                     return true;
                 default:
                     return false;
@@ -38,7 +39,10 @@
             inputIdChanged();
         }
 
-        void copy(const ListenerInputChangeBase& object) { m_InputId = object.m_InputId; }
+        void copy(const ListenerInputChangeBase& object) {
+            m_InputId = object.m_InputId;
+            ListenerAction::copy(object);
+        }
 
         bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
             switch (propertyKey) {
@@ -46,7 +50,7 @@
                     m_InputId = CoreUintType::deserialize(reader);
                     return true;
             }
-            return false;
+            return ListenerAction::deserialize(propertyKey, reader);
         }
 
     protected:
diff --git a/include/rive/generated/animation/listener_number_change_base.hpp b/include/rive/generated/animation/listener_number_change_base.hpp
index 54a7209..8106d29 100644
--- a/include/rive/generated/animation/listener_number_change_base.hpp
+++ b/include/rive/generated/animation/listener_number_change_base.hpp
@@ -16,6 +16,7 @@
             switch (typeKey) {
                 case ListenerNumberChangeBase::typeKey:
                 case ListenerInputChangeBase::typeKey:
+                case ListenerActionBase::typeKey:
                     return true;
                 default:
                     return false;
diff --git a/include/rive/generated/animation/listener_trigger_change_base.hpp b/include/rive/generated/animation/listener_trigger_change_base.hpp
index 14985b3..7e82832 100644
--- a/include/rive/generated/animation/listener_trigger_change_base.hpp
+++ b/include/rive/generated/animation/listener_trigger_change_base.hpp
@@ -15,6 +15,7 @@
             switch (typeKey) {
                 case ListenerTriggerChangeBase::typeKey:
                 case ListenerInputChangeBase::typeKey:
+                case ListenerActionBase::typeKey:
                     return true;
                 default:
                     return false;
diff --git a/include/rive/generated/animation/nested_bool_base.hpp b/include/rive/generated/animation/nested_bool_base.hpp
new file mode 100644
index 0000000..781fcfc
--- /dev/null
+++ b/include/rive/generated/animation/nested_bool_base.hpp
@@ -0,0 +1,63 @@
+#ifndef _RIVE_NESTED_BOOL_BASE_HPP_
+#define _RIVE_NESTED_BOOL_BASE_HPP_
+#include "rive/animation/nested_input.hpp"
+#include "rive/core/field_types/core_bool_type.hpp"
+namespace rive {
+    class NestedBoolBase : public NestedInput {
+    protected:
+        typedef NestedInput Super;
+
+    public:
+        static const uint16_t typeKey = 123;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case NestedBoolBase::typeKey:
+                case NestedInputBase::typeKey:
+                case ComponentBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t nestedValuePropertyKey = 238;
+
+    private:
+        bool m_NestedValue = false;
+
+    public:
+        inline bool nestedValue() const { return m_NestedValue; }
+        void nestedValue(bool value) {
+            if (m_NestedValue == value) {
+                return;
+            }
+            m_NestedValue = value;
+            nestedValueChanged();
+        }
+
+        Core* clone() const override;
+        void copy(const NestedBoolBase& object) {
+            m_NestedValue = object.m_NestedValue;
+            NestedInput::copy(object);
+        }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case nestedValuePropertyKey:
+                    m_NestedValue = CoreBoolType::deserialize(reader);
+                    return true;
+            }
+            return NestedInput::deserialize(propertyKey, reader);
+        }
+
+    protected:
+        virtual void nestedValueChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/nested_input_base.hpp b/include/rive/generated/animation/nested_input_base.hpp
new file mode 100644
index 0000000..df1fa05
--- /dev/null
+++ b/include/rive/generated/animation/nested_input_base.hpp
@@ -0,0 +1,61 @@
+#ifndef _RIVE_NESTED_INPUT_BASE_HPP_
+#define _RIVE_NESTED_INPUT_BASE_HPP_
+#include "rive/component.hpp"
+#include "rive/core/field_types/core_uint_type.hpp"
+namespace rive {
+    class NestedInputBase : public Component {
+    protected:
+        typedef Component Super;
+
+    public:
+        static const uint16_t typeKey = 121;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case NestedInputBase::typeKey:
+                case ComponentBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t inputIdPropertyKey = 237;
+
+    private:
+        uint32_t m_InputId = -1;
+
+    public:
+        inline uint32_t inputId() const { return m_InputId; }
+        void inputId(uint32_t value) {
+            if (m_InputId == value) {
+                return;
+            }
+            m_InputId = value;
+            inputIdChanged();
+        }
+
+        void copy(const NestedInputBase& object) {
+            m_InputId = object.m_InputId;
+            Component::copy(object);
+        }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case inputIdPropertyKey:
+                    m_InputId = CoreUintType::deserialize(reader);
+                    return true;
+            }
+            return Component::deserialize(propertyKey, reader);
+        }
+
+    protected:
+        virtual void inputIdChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/nested_linear_animation_base.hpp b/include/rive/generated/animation/nested_linear_animation_base.hpp
index 766a335..a749818 100644
--- a/include/rive/generated/animation/nested_linear_animation_base.hpp
+++ b/include/rive/generated/animation/nested_linear_animation_base.hpp
@@ -16,6 +16,7 @@
             switch (typeKey) {
                 case NestedLinearAnimationBase::typeKey:
                 case NestedAnimationBase::typeKey:
+                case ContainerComponentBase::typeKey:
                 case ComponentBase::typeKey:
                     return true;
                 default:
diff --git a/include/rive/generated/animation/nested_number_base.hpp b/include/rive/generated/animation/nested_number_base.hpp
new file mode 100644
index 0000000..3847b20
--- /dev/null
+++ b/include/rive/generated/animation/nested_number_base.hpp
@@ -0,0 +1,63 @@
+#ifndef _RIVE_NESTED_NUMBER_BASE_HPP_
+#define _RIVE_NESTED_NUMBER_BASE_HPP_
+#include "rive/animation/nested_input.hpp"
+#include "rive/core/field_types/core_double_type.hpp"
+namespace rive {
+    class NestedNumberBase : public NestedInput {
+    protected:
+        typedef NestedInput Super;
+
+    public:
+        static const uint16_t typeKey = 124;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case NestedNumberBase::typeKey:
+                case NestedInputBase::typeKey:
+                case ComponentBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t nestedValuePropertyKey = 239;
+
+    private:
+        float m_NestedValue = 0.0f;
+
+    public:
+        inline float nestedValue() const { return m_NestedValue; }
+        void nestedValue(float value) {
+            if (m_NestedValue == value) {
+                return;
+            }
+            m_NestedValue = value;
+            nestedValueChanged();
+        }
+
+        Core* clone() const override;
+        void copy(const NestedNumberBase& object) {
+            m_NestedValue = object.m_NestedValue;
+            NestedInput::copy(object);
+        }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case nestedValuePropertyKey:
+                    m_NestedValue = CoreDoubleType::deserialize(reader);
+                    return true;
+            }
+            return NestedInput::deserialize(propertyKey, reader);
+        }
+
+    protected:
+        virtual void nestedValueChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/nested_remap_animation_base.hpp b/include/rive/generated/animation/nested_remap_animation_base.hpp
index f8eadcb..a743a90 100644
--- a/include/rive/generated/animation/nested_remap_animation_base.hpp
+++ b/include/rive/generated/animation/nested_remap_animation_base.hpp
@@ -17,6 +17,7 @@
                 case NestedRemapAnimationBase::typeKey:
                 case NestedLinearAnimationBase::typeKey:
                 case NestedAnimationBase::typeKey:
+                case ContainerComponentBase::typeKey:
                 case ComponentBase::typeKey:
                     return true;
                 default:
diff --git a/include/rive/generated/animation/nested_simple_animation_base.hpp b/include/rive/generated/animation/nested_simple_animation_base.hpp
index 9c6e357..d51e941 100644
--- a/include/rive/generated/animation/nested_simple_animation_base.hpp
+++ b/include/rive/generated/animation/nested_simple_animation_base.hpp
@@ -18,6 +18,7 @@
                 case NestedSimpleAnimationBase::typeKey:
                 case NestedLinearAnimationBase::typeKey:
                 case NestedAnimationBase::typeKey:
+                case ContainerComponentBase::typeKey:
                 case ComponentBase::typeKey:
                     return true;
                 default:
diff --git a/include/rive/generated/animation/nested_state_machine_base.hpp b/include/rive/generated/animation/nested_state_machine_base.hpp
index b6708a5..407de9d 100644
--- a/include/rive/generated/animation/nested_state_machine_base.hpp
+++ b/include/rive/generated/animation/nested_state_machine_base.hpp
@@ -15,6 +15,7 @@
             switch (typeKey) {
                 case NestedStateMachineBase::typeKey:
                 case NestedAnimationBase::typeKey:
+                case ContainerComponentBase::typeKey:
                 case ComponentBase::typeKey:
                     return true;
                 default:
diff --git a/include/rive/generated/animation/nested_trigger_base.hpp b/include/rive/generated/animation/nested_trigger_base.hpp
new file mode 100644
index 0000000..61a9c32
--- /dev/null
+++ b/include/rive/generated/animation/nested_trigger_base.hpp
@@ -0,0 +1,33 @@
+#ifndef _RIVE_NESTED_TRIGGER_BASE_HPP_
+#define _RIVE_NESTED_TRIGGER_BASE_HPP_
+#include "rive/animation/nested_input.hpp"
+namespace rive {
+    class NestedTriggerBase : public NestedInput {
+    protected:
+        typedef NestedInput Super;
+
+    public:
+        static const uint16_t typeKey = 122;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case NestedTriggerBase::typeKey:
+                case NestedInputBase::typeKey:
+                case ComponentBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        Core* clone() const override;
+
+    protected:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/core_registry.hpp b/include/rive/generated/core_registry.hpp
index ed1a0f7..ad48ce9 100644
--- a/include/rive/generated/core_registry.hpp
+++ b/include/rive/generated/core_registry.hpp
@@ -22,14 +22,20 @@
 #include "rive/animation/keyframe_id.hpp"
 #include "rive/animation/layer_state.hpp"
 #include "rive/animation/linear_animation.hpp"
+#include "rive/animation/listener_action.hpp"
+#include "rive/animation/listener_align_target.hpp"
 #include "rive/animation/listener_bool_change.hpp"
 #include "rive/animation/listener_input_change.hpp"
 #include "rive/animation/listener_number_change.hpp"
 #include "rive/animation/listener_trigger_change.hpp"
+#include "rive/animation/nested_bool.hpp"
+#include "rive/animation/nested_input.hpp"
 #include "rive/animation/nested_linear_animation.hpp"
+#include "rive/animation/nested_number.hpp"
 #include "rive/animation/nested_remap_animation.hpp"
 #include "rive/animation/nested_simple_animation.hpp"
 #include "rive/animation/nested_state_machine.hpp"
+#include "rive/animation/nested_trigger.hpp"
 #include "rive/animation/state_machine.hpp"
 #include "rive/animation/state_machine_bool.hpp"
 #include "rive/animation/state_machine_component.hpp"
@@ -137,6 +143,8 @@
                     return new NestedSimpleAnimation();
                 case AnimationStateBase::typeKey:
                     return new AnimationState();
+                case NestedTriggerBase::typeKey:
+                    return new NestedTrigger();
                 case KeyedObjectBase::typeKey:
                     return new KeyedObject();
                 case BlendAnimationDirectBase::typeKey:
@@ -155,6 +163,8 @@
                     return new KeyFrameBool();
                 case ListenerBoolChangeBase::typeKey:
                     return new ListenerBoolChange();
+                case ListenerAlignTargetBase::typeKey:
+                    return new ListenerAlignTarget();
                 case TransitionNumberConditionBase::typeKey:
                     return new TransitionNumberCondition();
                 case AnyStateBase::typeKey:
@@ -169,6 +179,8 @@
                     return new CubicInterpolator();
                 case StateTransitionBase::typeKey:
                     return new StateTransition();
+                case NestedBoolBase::typeKey:
+                    return new NestedBool();
                 case KeyFrameDoubleBase::typeKey:
                     return new KeyFrameDouble();
                 case KeyFrameColorBase::typeKey:
@@ -189,6 +201,8 @@
                     return new NestedStateMachine();
                 case ExitStateBase::typeKey:
                     return new ExitState();
+                case NestedNumberBase::typeKey:
+                    return new NestedNumber();
                 case BlendState1DBase::typeKey:
                     return new BlendState1D();
                 case NestedRemapAnimationBase::typeKey:
@@ -337,6 +351,9 @@
                 case AnimationStateBase::animationIdPropertyKey:
                     object->as<AnimationStateBase>()->animationId(value);
                     break;
+                case NestedInputBase::inputIdPropertyKey:
+                    object->as<NestedInputBase>()->inputId(value);
+                    break;
                 case KeyedObjectBase::objectIdPropertyKey:
                     object->as<KeyedObjectBase>()->objectId(value);
                     break;
@@ -373,6 +390,9 @@
                 case ListenerBoolChangeBase::valuePropertyKey:
                     object->as<ListenerBoolChangeBase>()->value(value);
                     break;
+                case ListenerAlignTargetBase::targetIdPropertyKey:
+                    object->as<ListenerAlignTargetBase>()->targetId(value);
+                    break;
                 case TransitionValueConditionBase::opValuePropertyKey:
                     object->as<TransitionValueConditionBase>()->opValue(value);
                     break;
@@ -545,6 +565,9 @@
                 case LinearAnimationBase::speedPropertyKey:
                     object->as<LinearAnimationBase>()->speed(value);
                     break;
+                case NestedNumberBase::nestedValuePropertyKey:
+                    object->as<NestedNumberBase>()->nestedValue(value);
+                    break;
                 case NestedRemapAnimationBase::timePropertyKey:
                     object->as<NestedRemapAnimationBase>()->time(value);
                     break;
@@ -756,6 +779,9 @@
                 case KeyFrameBoolBase::valuePropertyKey:
                     object->as<KeyFrameBoolBase>()->value(value);
                     break;
+                case NestedBoolBase::nestedValuePropertyKey:
+                    object->as<NestedBoolBase>()->nestedValue(value);
+                    break;
                 case LinearAnimationBase::enableWorkAreaPropertyKey:
                     object->as<LinearAnimationBase>()->enableWorkArea(value);
                     break;
@@ -840,6 +866,8 @@
                     return object->as<ListenerInputChangeBase>()->inputId();
                 case AnimationStateBase::animationIdPropertyKey:
                     return object->as<AnimationStateBase>()->animationId();
+                case NestedInputBase::inputIdPropertyKey:
+                    return object->as<NestedInputBase>()->inputId();
                 case KeyedObjectBase::objectIdPropertyKey:
                     return object->as<KeyedObjectBase>()->objectId();
                 case BlendAnimationBase::animationIdPropertyKey:
@@ -864,6 +892,8 @@
                     return object->as<KeyFrameIdBase>()->value();
                 case ListenerBoolChangeBase::valuePropertyKey:
                     return object->as<ListenerBoolChangeBase>()->value();
+                case ListenerAlignTargetBase::targetIdPropertyKey:
+                    return object->as<ListenerAlignTargetBase>()->targetId();
                 case TransitionValueConditionBase::opValuePropertyKey:
                     return object->as<TransitionValueConditionBase>()->opValue();
                 case StateTransitionBase::stateToIdPropertyKey:
@@ -981,6 +1011,8 @@
                     return object->as<KeyFrameDoubleBase>()->value();
                 case LinearAnimationBase::speedPropertyKey:
                     return object->as<LinearAnimationBase>()->speed();
+                case NestedNumberBase::nestedValuePropertyKey:
+                    return object->as<NestedNumberBase>()->nestedValue();
                 case NestedRemapAnimationBase::timePropertyKey:
                     return object->as<NestedRemapAnimationBase>()->time();
                 case BlendAnimation1DBase::valuePropertyKey:
@@ -1124,6 +1156,8 @@
                     return object->as<NestedSimpleAnimationBase>()->isPlaying();
                 case KeyFrameBoolBase::valuePropertyKey:
                     return object->as<KeyFrameBoolBase>()->value();
+                case NestedBoolBase::nestedValuePropertyKey:
+                    return object->as<NestedBoolBase>()->nestedValue();
                 case LinearAnimationBase::enableWorkAreaPropertyKey:
                     return object->as<LinearAnimationBase>()->enableWorkArea();
                 case StateMachineBoolBase::valuePropertyKey:
@@ -1176,6 +1210,7 @@
                 case NestedAnimationBase::animationIdPropertyKey:
                 case ListenerInputChangeBase::inputIdPropertyKey:
                 case AnimationStateBase::animationIdPropertyKey:
+                case NestedInputBase::inputIdPropertyKey:
                 case KeyedObjectBase::objectIdPropertyKey:
                 case BlendAnimationBase::animationIdPropertyKey:
                 case BlendAnimationDirectBase::inputIdPropertyKey:
@@ -1188,6 +1223,7 @@
                 case KeyFrameBase::interpolatorIdPropertyKey:
                 case KeyFrameIdBase::valuePropertyKey:
                 case ListenerBoolChangeBase::valuePropertyKey:
+                case ListenerAlignTargetBase::targetIdPropertyKey:
                 case TransitionValueConditionBase::opValuePropertyKey:
                 case StateTransitionBase::stateToIdPropertyKey:
                 case StateTransitionBase::flagsPropertyKey:
@@ -1245,6 +1281,7 @@
                 case CubicInterpolatorBase::y2PropertyKey:
                 case KeyFrameDoubleBase::valuePropertyKey:
                 case LinearAnimationBase::speedPropertyKey:
+                case NestedNumberBase::nestedValuePropertyKey:
                 case NestedRemapAnimationBase::timePropertyKey:
                 case BlendAnimation1DBase::valuePropertyKey:
                 case LinearGradientBase::startXPropertyKey:
@@ -1315,6 +1352,7 @@
                 case IKConstraintBase::invertDirectionPropertyKey:
                 case NestedSimpleAnimationBase::isPlayingPropertyKey:
                 case KeyFrameBoolBase::valuePropertyKey:
+                case NestedBoolBase::nestedValuePropertyKey:
                 case LinearAnimationBase::enableWorkAreaPropertyKey:
                 case StateMachineBoolBase::valuePropertyKey:
                 case ShapePaintBase::isVisiblePropertyKey:
diff --git a/include/rive/generated/nested_animation_base.hpp b/include/rive/generated/nested_animation_base.hpp
index cb31c68..6d33c29 100644
--- a/include/rive/generated/nested_animation_base.hpp
+++ b/include/rive/generated/nested_animation_base.hpp
@@ -1,11 +1,11 @@
 #ifndef _RIVE_NESTED_ANIMATION_BASE_HPP_
 #define _RIVE_NESTED_ANIMATION_BASE_HPP_
-#include "rive/component.hpp"
+#include "rive/container_component.hpp"
 #include "rive/core/field_types/core_uint_type.hpp"
 namespace rive {
-    class NestedAnimationBase : public Component {
+    class NestedAnimationBase : public ContainerComponent {
     protected:
-        typedef Component Super;
+        typedef ContainerComponent Super;
 
     public:
         static const uint16_t typeKey = 93;
@@ -15,6 +15,7 @@
         bool isTypeOf(uint16_t typeKey) const override {
             switch (typeKey) {
                 case NestedAnimationBase::typeKey:
+                case ContainerComponentBase::typeKey:
                 case ComponentBase::typeKey:
                     return true;
                 default:
@@ -41,7 +42,7 @@
 
         void copy(const NestedAnimationBase& object) {
             m_AnimationId = object.m_AnimationId;
-            Component::copy(object);
+            ContainerComponent::copy(object);
         }
 
         bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
@@ -50,7 +51,7 @@
                     m_AnimationId = CoreUintType::deserialize(reader);
                     return true;
             }
-            return Component::deserialize(propertyKey, reader);
+            return ContainerComponent::deserialize(propertyKey, reader);
         }
 
     protected:
diff --git a/include/rive/importers/state_machine_listener_importer.hpp b/include/rive/importers/state_machine_listener_importer.hpp
index 6702e44..d936ea5 100644
--- a/include/rive/importers/state_machine_listener_importer.hpp
+++ b/include/rive/importers/state_machine_listener_importer.hpp
@@ -6,7 +6,7 @@
 namespace rive {
     class StateMachineListener;
     class StateMachine;
-    class ListenerInputChange;
+    class ListenerAction;
     class StateMachineListenerImporter : public ImportStackObject {
     private:
         StateMachineListener* m_StateMachineListener;
@@ -14,7 +14,7 @@
     public:
         StateMachineListenerImporter(StateMachineListener* listener);
         const StateMachineListener* stateMachineListener() const { return m_StateMachineListener; }
-        void addInputChange(ListenerInputChange* change);
+        void addAction(ListenerAction* action);
         StatusCode resolve() override;
     };
 } // namespace rive
diff --git a/include/rive/listener_type.hpp b/include/rive/listener_type.hpp
index a2c8471..8617e4f 100644
--- a/include/rive/listener_type.hpp
+++ b/include/rive/listener_type.hpp
@@ -2,11 +2,11 @@
 #define _RIVE_LISTENER_TYPE_HPP_
 namespace rive {
     enum class ListenerType : int {
-        updateHover = -1,
         enter = 0,
         exit = 1,
         down = 2,
         up = 3,
+        move = 4,
     };
 }
 #endif
\ No newline at end of file
diff --git a/src/animation/listener_action.cpp b/src/animation/listener_action.cpp
new file mode 100644
index 0000000..46b2ab0
--- /dev/null
+++ b/src/animation/listener_action.cpp
@@ -0,0 +1,19 @@
+#include "rive/animation/state_machine_listener.hpp"
+#include "rive/importers/import_stack.hpp"
+#include "rive/importers/state_machine_listener_importer.hpp"
+#include "rive/importers/state_machine_importer.hpp"
+#include "rive/animation/listener_input_change.hpp"
+#include "rive/animation/state_machine.hpp"
+
+using namespace rive;
+
+StatusCode ListenerAction::import(ImportStack& importStack) {
+    auto stateMachineListenerImporter =
+        importStack.latest<StateMachineListenerImporter>(StateMachineListenerBase::typeKey);
+    if (stateMachineListenerImporter == nullptr) {
+        return StatusCode::MissingObject;
+    }
+
+    stateMachineListenerImporter->addAction(this);
+    return Super::import(importStack);
+}
diff --git a/src/animation/listener_align_target.cpp b/src/animation/listener_align_target.cpp
new file mode 100644
index 0000000..f2f90d0
--- /dev/null
+++ b/src/animation/listener_align_target.cpp
@@ -0,0 +1,26 @@
+#include "rive/animation/listener_align_target.hpp"
+#include "rive/animation/state_machine_instance.hpp"
+// #include "rive/animation/state_machine_number.hpp"
+// #include "rive/animation/state_machine_input_instance.hpp"
+#include "rive/node.hpp"
+#include "rive/constraints/constraint.hpp"
+
+using namespace rive;
+
+void ListenerAlignTarget::perform(StateMachineInstance* stateMachineInstance,
+                                  Vec2D position) const {
+    auto coreTarget = stateMachineInstance->artboard()->resolve(targetId());
+    if (coreTarget == nullptr || !coreTarget->is<Node>()) {
+        return;
+    }
+    auto target = coreTarget->as<Node>();
+    Mat2D targetParentWorld = getParentWorld(*target);
+    Mat2D inverse;
+    if (!targetParentWorld.invert(&inverse)) {
+        return;
+    }
+
+    auto localPosition = inverse * position;
+    target->x(localPosition.x);
+    target->y(localPosition.y);
+}
diff --git a/src/animation/listener_bool_change.cpp b/src/animation/listener_bool_change.cpp
index a930b28..0745b6b 100644
--- a/src/animation/listener_bool_change.cpp
+++ b/src/animation/listener_bool_change.cpp
@@ -11,7 +11,7 @@
     return input == nullptr || input->is<StateMachineBool>();
 }
 
-void ListenerBoolChange::perform(StateMachineInstance* stateMachineInstance) const {
+void ListenerBoolChange::perform(StateMachineInstance* stateMachineInstance, Vec2D position) const {
     auto inputInstance = stateMachineInstance->input(inputId());
     if (inputInstance == nullptr) {
         return;
diff --git a/src/animation/listener_input_change.cpp b/src/animation/listener_input_change.cpp
index a3e3e54..79c0489 100644
--- a/src/animation/listener_input_change.cpp
+++ b/src/animation/listener_input_change.cpp
@@ -13,15 +13,8 @@
         return StatusCode::MissingObject;
     }
 
-    auto stateMachineListenerImporter =
-        importStack.latest<StateMachineListenerImporter>(StateMachineListenerBase::typeKey);
-    if (stateMachineListenerImporter == nullptr) {
-        return StatusCode::MissingObject;
-    }
-
     if (!validateInputType(stateMachineImporter->stateMachine()->input((size_t)inputId()))) {
         return StatusCode::InvalidObject;
     }
-    stateMachineListenerImporter->addInputChange(this);
     return Super::import(importStack);
 }
diff --git a/src/animation/listener_number_change.cpp b/src/animation/listener_number_change.cpp
index 33c8316..91d9268 100644
--- a/src/animation/listener_number_change.cpp
+++ b/src/animation/listener_number_change.cpp
@@ -12,7 +12,8 @@
     return input == nullptr || input->is<StateMachineNumber>();
 }
 
-void ListenerNumberChange::perform(StateMachineInstance* stateMachineInstance) const {
+void ListenerNumberChange::perform(StateMachineInstance* stateMachineInstance,
+                                   Vec2D position) const {
     auto inputInstance = stateMachineInstance->input(inputId());
     if (inputInstance == nullptr) {
         return;
diff --git a/src/animation/listener_trigger_change.cpp b/src/animation/listener_trigger_change.cpp
index f1939e0..b601f04 100644
--- a/src/animation/listener_trigger_change.cpp
+++ b/src/animation/listener_trigger_change.cpp
@@ -12,7 +12,8 @@
     return input == nullptr || input->is<StateMachineTrigger>();
 }
 
-void ListenerTriggerChange::perform(StateMachineInstance* stateMachineInstance) const {
+void ListenerTriggerChange::perform(StateMachineInstance* stateMachineInstance,
+                                    Vec2D position) const {
     auto inputInstance = stateMachineInstance->input(inputId());
     if (inputInstance == nullptr) {
         return;
diff --git a/src/animation/state_machine_instance.cpp b/src/animation/state_machine_instance.cpp
index d7bbe98..20625a1 100644
--- a/src/animation/state_machine_instance.cpp
+++ b/src/animation/state_machine_instance.cpp
@@ -267,15 +267,15 @@
             // we're trying to trigger.
             if (hoverChange) {
                 if (isOver && listener->listenerType() == ListenerType::enter) {
-                    listener->performChanges(this);
+                    listener->performChanges(this, position);
                     markNeedsAdvance();
                 } else if (!isOver && listener->listenerType() == ListenerType::exit) {
-                    listener->performChanges(this);
+                    listener->performChanges(this, position);
                     markNeedsAdvance();
                 }
             }
             if (isOver && hitType == listener->listenerType()) {
-                listener->performChanges(this);
+                listener->performChanges(this, position);
                 markNeedsAdvance();
             }
         }
@@ -302,7 +302,7 @@
                     case ListenerType::up:
                         nestedStateMachine->pointerUp(nestedPosition);
                         break;
-                    case ListenerType::updateHover:
+                    case ListenerType::move:
                         nestedStateMachine->pointerMove(nestedPosition);
                         break;
                     default:
@@ -314,7 +314,7 @@
 }
 
 void StateMachineInstance::pointerMove(Vec2D position) {
-    updateListeners(position, ListenerType::updateHover);
+    updateListeners(position, ListenerType::move);
 }
 void StateMachineInstance::pointerDown(Vec2D position) {
     updateListeners(position, ListenerType::down);
diff --git a/src/animation/state_machine_listenable.cpp b/src/animation/state_machine_listener.cpp
similarity index 81%
rename from src/animation/state_machine_listenable.cpp
rename to src/animation/state_machine_listener.cpp
index 36e54b5..294143d 100644
--- a/src/animation/state_machine_listenable.cpp
+++ b/src/animation/state_machine_listener.cpp
@@ -9,9 +9,7 @@
 
 using namespace rive;
 
-void StateMachineListener::addInputChange(ListenerInputChange* inputChange) {
-    m_InputChanges.push_back(inputChange);
-}
+void StateMachineListener::addAction(ListenerAction* action) { m_Actions.push_back(action); }
 
 StatusCode StateMachineListener::import(ImportStack& importStack) {
     auto stateMachineImporter = importStack.latest<StateMachineImporter>(StateMachineBase::typeKey);
@@ -23,9 +21,9 @@
     return Super::import(importStack);
 }
 
-const ListenerInputChange* StateMachineListener::inputChange(size_t index) const {
-    if (index < m_InputChanges.size()) {
-        return m_InputChanges[index];
+const ListenerAction* StateMachineListener::action(size_t index) const {
+    if (index < m_Actions.size()) {
+        return m_Actions[index];
     }
     return nullptr;
 }
@@ -59,8 +57,9 @@
     return Super::onAddedClean(context);
 }
 
-void StateMachineListener::performChanges(StateMachineInstance* stateMachineInstance) const {
-    for (auto inputChange : m_InputChanges) {
-        inputChange->perform(stateMachineInstance);
+void StateMachineListener::performChanges(StateMachineInstance* stateMachineInstance,
+                                          Vec2D position) const {
+    for (auto action : m_Actions) {
+        action->perform(stateMachineInstance, position);
     }
 }
\ No newline at end of file
diff --git a/src/generated/animation/listener_align_target_base.cpp b/src/generated/animation/listener_align_target_base.cpp
new file mode 100644
index 0000000..9da8b5b
--- /dev/null
+++ b/src/generated/animation/listener_align_target_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/listener_align_target_base.hpp"
+#include "rive/animation/listener_align_target.hpp"
+
+using namespace rive;
+
+Core* ListenerAlignTargetBase::clone() const {
+    auto cloned = new ListenerAlignTarget();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/generated/animation/nested_bool_base.cpp b/src/generated/animation/nested_bool_base.cpp
new file mode 100644
index 0000000..315ebbd
--- /dev/null
+++ b/src/generated/animation/nested_bool_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/nested_bool_base.hpp"
+#include "rive/animation/nested_bool.hpp"
+
+using namespace rive;
+
+Core* NestedBoolBase::clone() const {
+    auto cloned = new NestedBool();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/generated/animation/nested_number_base.cpp b/src/generated/animation/nested_number_base.cpp
new file mode 100644
index 0000000..4a7fa1d
--- /dev/null
+++ b/src/generated/animation/nested_number_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/nested_number_base.hpp"
+#include "rive/animation/nested_number.hpp"
+
+using namespace rive;
+
+Core* NestedNumberBase::clone() const {
+    auto cloned = new NestedNumber();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/generated/animation/nested_trigger_base.cpp b/src/generated/animation/nested_trigger_base.cpp
new file mode 100644
index 0000000..44bb423
--- /dev/null
+++ b/src/generated/animation/nested_trigger_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/nested_trigger_base.hpp"
+#include "rive/animation/nested_trigger.hpp"
+
+using namespace rive;
+
+Core* NestedTriggerBase::clone() const {
+    auto cloned = new NestedTrigger();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/importers/state_machine_listener_importer.cpp b/src/importers/state_machine_listener_importer.cpp
index bf403af..e8ac8fc 100644
--- a/src/importers/state_machine_listener_importer.cpp
+++ b/src/importers/state_machine_listener_importer.cpp
@@ -6,8 +6,8 @@
 StateMachineListenerImporter::StateMachineListenerImporter(StateMachineListener* listener) :
     m_StateMachineListener(listener) {}
 
-void StateMachineListenerImporter::addInputChange(ListenerInputChange* change) {
-    m_StateMachineListener->addInputChange(change);
+void StateMachineListenerImporter::addAction(ListenerAction* action) {
+    m_StateMachineListener->addAction(action);
 }
 
 StatusCode StateMachineListenerImporter::resolve() { return StatusCode::Ok; }
\ No newline at end of file
diff --git a/test/state_machine_event_test.cpp b/test/state_machine_event_test.cpp
index 5e9b462..01e77ae 100644
--- a/test/state_machine_event_test.cpp
+++ b/test/state_machine_event_test.cpp
@@ -36,28 +36,31 @@
     auto target1 = artboard->resolve(listener1->targetId());
     REQUIRE(target1->is<rive::Node>());
     REQUIRE(target1->as<rive::Node>()->name() == "HandWickHit");
-    REQUIRE(listener1->inputChangeCount() == 1);
-    auto inputChange1 = listener1->inputChange(0);
+    REQUIRE(listener1->actionCount() == 1);
+    auto inputChange1 = listener1->action(0);
     REQUIRE(inputChange1 != nullptr);
-    REQUIRE(inputChange1->inputId() == 0);
+    REQUIRE(inputChange1->is<rive::ListenerInputChange>());
+    REQUIRE(inputChange1->as<rive::ListenerInputChange>()->inputId() == 0);
 
     auto listener2 = stateMachine->listener(1);
     auto target2 = artboard->resolve(listener2->targetId());
     REQUIRE(target2->is<rive::Node>());
     REQUIRE(target2->as<rive::Node>()->name() == "HandCannonHit");
-    REQUIRE(listener2->inputChangeCount() == 1);
-    auto inputChange2 = listener2->inputChange(0);
+    REQUIRE(listener2->actionCount() == 1);
+    auto inputChange2 = listener2->action(0);
     REQUIRE(inputChange2 != nullptr);
-    REQUIRE(inputChange2->inputId() == 1);
+    REQUIRE(inputChange2->is<rive::ListenerInputChange>());
+    REQUIRE(inputChange2->as<rive::ListenerInputChange>()->inputId() == 1);
 
     auto listener3 = stateMachine->listener(2);
     auto target3 = artboard->resolve(listener3->targetId());
     REQUIRE(target3->is<rive::Node>());
     REQUIRE(target3->as<rive::Node>()->name() == "HandHelmetHit");
-    REQUIRE(listener3->inputChangeCount() == 1);
-    auto inputChange3 = listener3->inputChange(0);
+    REQUIRE(listener3->actionCount() == 1);
+    auto inputChange3 = listener3->action(0);
     REQUIRE(inputChange3 != nullptr);
-    REQUIRE(inputChange3->inputId() == 2);
+    REQUIRE(inputChange3->is<rive::ListenerInputChange>());
+    REQUIRE(inputChange3->as<rive::ListenerInputChange>()->inputId() == 2);
 }
 
 TEST_CASE("hit testing via a state machine works", "[file]") {
