improved argument catch and user function call