Final Project for CMSC773 Spring 2013.