make CancellationToken an optional parameter