call() doesn't need to know the payload type