Functioning program. Still needs improvements.