Add callback-based version, as a starting point.