refactors, pushing logic to user model