simplified internal API