The use of so many positional arguments is pretty confusing. Why not use a plist/alist/map instead?