implement 4 args dispatcher