modified by hejian