Небольшей рефакторинг. Робочая версия.