refactored the command line argument handling system