first modified by zhang ya nan