callback has tree arguments