Add better error hirearchy, add intellegent arg proccessing