recursive clone