Upenn IPD 500 Final Project