make callback optional
simplified