protected static final ChessPiece fromString(final ChessBoard board, final char input) {
		checkNotNull(board);
		
		final ChessColor color = Character.isUpperCase(input) ? ChessColor.WHITE : ChessColor.BLACK;
		
		switch (Character.toUpperCase(input)) {
		case 'K':
			return new ChessKing(color);
		case 'Q':
			return new ChessQueen(color);
		case 'B':
			return new ChessBishop(color);
		case 'N':
			return new ChessKnight(color);
		case 'R':
			return new ChessRook(color);
		case 'P':
			return new ChessPawn(color);
		default:
			throw new IllegalArgumentException("Unknown chess piece " + input);
		}
	}