needs work, but gets the job done to the minimum requirements