The model classes are now purely functional; also the model uses our own hashmap class, only again because we wanted something pure