now supporting callback, unit tested