Окончательный рефакторинг.