model modification logic is separated