modifyed by xq