so many ways to invoke a function