Intermediate refactoring
Continue refactor (broken)