modify by cbuu