Move coercions into core to be shared with caching
More tests and option scrubbing