Use callback.call instead of callback() to preserve scope.