Переписал, не тестировал, наверно еще не работает, тесты не на писал
Написал тестк