Update has() to cache results and not repeat tests