Add State Pattern