use better arg parser