use inject rather than multiple assignments
make the compile method thread safe
only dup the options once, the Callback object does not mutate them