Final project for CMPS121 (Spring 2014)