more flexible API