use options objects to reduce arity