abstracted #set_options