Refactor the models around the use of self