building recursive
update