NB: Simpler, more flexible API