В нескольких местах этот алгоритм написан... Полезно вынести в класс отдельный.