this can be done faster, but it's cached anyway.