The remove argument's a little confusing.  It might be a bit clearer if there was something like an invalidateCache function which did the first part and was called from remove?