when possible, we should pass raw pointers in public api