don't call directly into the low level API