internal caching works (but doesn't do anything due to the candidate map)