Working version, hopefully with grading. Needs styling