prepare for an important refactor