Глобальный рефакторинг

Постарался учесть главные замечания