extended named argument handling to be more complete; I'm pretty happy with it now