Added state abstraction