+template<typename T>
+inline void Sequencer::register_action_type(const std::string &n)
+{
+ if(action_types.count(n))
+ throw Msp::key_error(n);
+
+ action_types[n] = new RegisteredActionType<T>;
+}
+
+template<typename T>
+Sequencer::RegisteredAction::LoaderFunc Sequencer::RegisteredActionType<T>::get_loader_func() const
+{
+ return &ActionDefLoader::action_def<T>;
+}
+
+template<typename T>
+void Sequencer::ActionDefLoader::action_def()
+{
+ if(action)
+ throw std::runtime_error("Only one action per definition is allowed");
+
+ Msp::RefPtr<T> act = new T;
+ load_sub(*act, demo);
+ action = act;
+}
+