BaseStateMachine - renamed from AbstractStateMachine to maintain convention