recursive add source