arguments are passed as struct