separate actual model code into concerns