other -- impl the State Design Pattern