public boolean move(Location from, Location to) { 
	  	 
	  ///If from BearOff During Configure call, allow
	  if(isConfigureMove(from, to)){
		  moveDuringConfigure(from, to);
		  return true;
	  }

		//ADDED
		  //If move is the reverse of a move previously made during this turn, allow.
		  Move m = new Move(from,to);
		  if(isMoveBack(m)){
			  executeMoveBack(m);
			  return true;
		  }
		  //ADDED
		  

	  //Check for Valid Moves, if none, set movesLeft to 0.
	  if(!validMovesExist()){
		  movesLeft = 0;
		//Notify Observers
		  notifyObserversOfCheckerMove(from, from);
		  notifyObserversOfNewStatus(getPlayerInTurn().toString() + " has no valid moves left...");
		//
		  return false;
	  }
	  
	  ///
	  if (movesLeft == 0){
		//Notify Observers
		  notifyObserversOfCheckerMove(from, from);
		  notifyObserversOfNewStatus("Invalid Move: " + getPlayerInTurn().toString() + " has 0 moves left...");
		//
		  return false;
	  }
	  if (moveValidator.isValid(from, to)){
		  
		  if(gameBoard.getCountAt(to) == 1 && gameBoard.getColorAt(to) != playerInTurn){
			  moveOpponentToBar(to);
		  }
		  boolean moveValue = gameBoard.move(from, to, playerInTurn);
		  
		  if(moveValue == true){
			  movesLeft--;
			  
			  removeDiceValueUsed(from, to);
			  
			  //Notify Observers
			  notifyObserversOfCheckerMove(from, to);
			  notifyObserversOfNewStatus("Valid Move: " + getPlayerInTurn().toString() + " has "+ getNumberOfMovesLeft() +" moves left...");
			  //
			  
			  //ADDED
			  
			  this.turnMoves.get(this.turnMovesIdx).setMove(new Move(from,to));
			  this.turnMovesIdx++;
			  
			  //
		  }
		  else{
				//Notify Observers
				  notifyObserversOfCheckerMove(from, from);
				  notifyObserversOfNewStatus("Invalid Move on GameBoard: " + from.toString() + " to " + to.toString() + ". " + getPlayerInTurn().toString() + " has "+ getNumberOfMovesLeft() +" moves left...");
		  }
		  return moveValue;
	  }

		//Notify Observers
		  for( GameObserver gO : this.observers ){
			  gO.checkerMove(from, from);
		  }
		  notifyObserversOfCheckerMove(from, from);
		//
	  return false;
	  
  }