The TaskOptions and its sub-classes can be passed around and have certain members variables changed. Right now that leads to custom copying code wherever they are being accessed.
Instead of this custom copying code, the different options should all be able to take an instance of themselves and copy/update the appropriate fields.