Some refactoring and changes

4 месяца назад чё-то нахерачил, принимай пулл реквест.