третья версия, методы реализованы корректнее