more standardized, and move some logic from controller to models