Created this for a class, still in process of trying to update it and make it better.