Why do all these need to be passed separately? Can't `check_item` just retrieve them from `self` itself?