refactoring to use a block API due to NSInvocation issues with different numbers of arguements