Project for PGM708 @ CMU, spring 2013.