Небольшой рефакторинг. Не знаю, как еще улучшить. Как-то все разное и нагромаждено.