This could be faster (by looping over chunks explicitly (as I did before) and invalidating ASAP), but I don't see any reason to speed up the negative case ATM; better to have DRYer code for us.