refactored to use _has_whatever