add State Pattern