back to square one, except with a slightly nicer api for tiles