@Override public final String toString() {
		if (is(Special.CASTLE_K))
			return "O-O";
		if (is(Special.CASTLE_Q))
			return "O-O-O";
		
		final StringBuilder builder = new StringBuilder();
		
		if (!(sourcePiece instanceof ChessPawn)) {
			builder.append(sourcePiece.toString().toUpperCase());
		}
		
		builder.append(from).append(attackedPiece != null ? 'x' : '-').append(to);
		
		if (is(Special.CHECK)) {
			builder.append('+');
		}
		if (is(Special.MATE)) {
			builder.append('+');
		}
		
		return builder.toString();
	}