support for default and required arguments