fix FSM vicious cycle
cleanup and shortcuts
async callbacks