protocol; target callback/event id separately