refactor, generate UUID for missing IDs, DRY, add First() method