public boolean executeMove(Move move) {
		boolean success = false;
		
		//Check whether column is valid
		if ((move.getPlayer() != this.turn) || 
				this.winner != Counter.EMPTY || 
				this.draw) {
			success = false;
		} else {	
			success = move.executeMove(this.board);	
			if (!success) {
				System.err.println("Invalid movement try again!!");
			}
			//A complete and correct movement is pushed
			this.undoStack.push(move);	
			//Update the winner
			this.winner = this.rules.winningMove(move, this.board);
			//Check if the game has ended in a draw
			this.draw = this.rules.isDraw(move.getPlayer(), this.board);
			if (this.draw) {					
				this.winner = Counter.EMPTY;
				this.finished = true;
			} else if (this.winner != Counter.EMPTY) {
				this.finished = true;
			}			
			if (this.winner == Counter.EMPTY && success && !this.finished) {
				this.turn = this.rules.nextTurn(this.turn, this.board);
			}		
		}		
		return success;
	}