cater both argument and function