use workflow(events) and FSM, #5