Hi Christophe, Did you consider adding build-in multi-thread support? (via policies maybe?) For example, I can guaranteed that all access to sub-fsm within its handlers (process_event()) will be synchronized. The problem is, sub-fsm "knows" about its parent and internally communicates with it (forwarding events etc). I can't control it from my side. typical scenario: an action from sub-fsm struct A_Init { template <typename Evt, typename FSM, typename SourceState, typename TargetState> void operator()(Evt&, FSM& fsm, SourceState&, TargetState&) const { std::thread([=]() mutable { std::lock_guard<std::mutex> l(access); fsm.process_event(some_event()); }).detach(); } }; locking proccess_event() in sub-fsm doesn't help if it alters the root.