refactor to let the catalog implementation determine the item subtotals