nicer API (with automatically better perf)