improve argument parsing