uses OptionParser for inputs