clean up public API to expose less implementation details