Implemented functional from article http://suvitruf.ru/2012/12/22/2764/