total overhaul in order to rewrite with ReactiveCocoa and StateMachine