UPD: рефакторинг по #528

очередные правки