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