Refactor. Includes breaking changes.