Почти полностью замененный код функции