Author: Xuesong (Andy) Gao