refactor to expose some methods for inheritance