roll() is now appropriately private