refactor for better use of models/concerns