heavy refactoring in progress with breaking changes