You may wanna add comment telling why this function returns same promise over and over. It's not obvious. I think we'll have to revisit whole tree algorithm later. Maybe you could submit a bug for that too and put a pointer in the tree module.