Еще один большой коммит, в основном рефакторил.