modify by fanglf