refactored question model