private byte[] receiveBlockTarget() {
		byte[] resultBuffer;
		try {
			resultBuffer = receiveCommand();
			if (NFCIPUtils.isNullBlock(resultBuffer))
				throw new NFCIPException("empty block");
		} catch (NFCIPException e) {
			logMessage(1, e.getMessage());
			resetMode();
			return receiveBlockTarget();
		}
		if (NFCIPUtils.isEmptyBlock(resultBuffer)) {
			/*
			 * this is from an empty IN_DATA_EXCHANGE request from the initiator
			 * when requesting more data when chaining is triggered
			 */
			return EMPTY_BLOCK;
		} else if (NFCIPUtils.isEndBlock(resultBuffer)) {
			logMessage(3, "end block received");
			sendBlock(END_BLOCK);
			return receiveBlockTarget();
		} else if (NFCIPUtils.getBlockNumber(resultBuffer) == expectedBlockNumber) {
			return resultBuffer;
		} else if (resultBuffer != null && resultBuffer.length != 0) {
			logMessage(2, "unexpected block received");
			sendBlock(oldData);
			return receiveBlockTarget();
		} else {
			logMessage(0, "we received an empty message here, impossible");
			return null;
		}
	}