improved arguments parser