WIP refactoring into an implementation specific API