call cb on completion