new approach, caller based instead of proto