+ refactored like controller (State pattern implemented)