updated by Ningxin