Written by Cyrill Gorcunov <gclion@mail.ru>.
