Fully object oriented with tests passing.