public MathModel checkCurrentAnswer(MathModel model) {
		
		// did they provide a valid answer?
		if (model.getCurrentAnswer() == NO_ANSWER) {
			// no they didn't...
			return model;
		}
		
		// record the current answer in the grid
		log.info("Checking the current answer...");
		int x = model.getQuestionFirstNumber();
		int y = model.getQuestionSecondNumber();
		setGivenAnswer(model, x, y);
		
		// what is the right answer?
		int correctAnswer;
		switch (model.getOperationType()) {
		case Addition:
			correctAnswer = model.getQuestionFirstNumber() + model.getQuestionSecondNumber();
			break;
		case Subtraction:
			correctAnswer = model.getQuestionFirstNumber() - model.getQuestionSecondNumber();
			break;
		case Multiplication:
			correctAnswer = model.getQuestionFirstNumber() * model.getQuestionSecondNumber();
			break;
		case Division:
			correctAnswer = model.getQuestionFirstNumber() / model.getQuestionSecondNumber();
			break;
		default:
			log.error("Unexpected operator!");
			correctAnswer = NO_ANSWER;
			model.setGameState(SystemError);
			return model;
		}
		log.info("The correct answer is " + correctAnswer);

		// did they get the answer right?
		if (model.getCurrentAnswer() != correctAnswer) {
			log.info("The given answer (" + model.getCurrentAnswer() + ") was incorrect.");
			model.setGameState(BadAnswer);
			setResponseTime(model, x, y, WRONG_ANSWER);
		} else {
			// the answer was right - how long did they take to provide it?
			log.info("The given answer was correct.");
			long startTime = model.getLastStartTimeInMillis();
			long endTime = System.currentTimeMillis();
			long elapsedTimeInSeconds = (endTime - startTime) / 1000;
			int responseTimeInSeconds = (int) (elapsedTimeInSeconds - TIME_LAG_IN_SECONDS);
			responseTimeInSeconds = responseTimeInSeconds < 0 ? 0 : responseTimeInSeconds;
			log.info("The response time was " + responseTimeInSeconds + " second(s).");
			model.setGameState(rateGoodResponseTime(responseTimeInSeconds));
			setResponseTime(model, x, y, responseTimeInSeconds);
		}
		return model;
	}