Stricter Input Check, Require options, and refactored into functions