Outsourced all item generation logic to Item class