recursive pull