TODO document why things have been done when entering a state provide the old state as parameter async in between state leave state, lock ui ,fetch data, enter new state