REFACTOR: use an options hash instead of multiple nil-able parameters