Created model implementation, turned the base model class into an iterator and created data types base class