better argument processing