public synchronized void downloadPiece(Piece piece)
		throws IllegalStateException {
		if (this.isDownloading()) {
			IllegalStateException up = new IllegalStateException(
					"Trying to download a piece while previous " +
					"download not completed!");
			logger.warn(up.getMessage());
			throw up; // ah ah.
		}

		this.requests = new LinkedBlockingQueue<Message.RequestMessage>(
				SharingPeer.MAX_PIPELINED_REQUESTS);
		this.requestedPiece = piece;
		this.lastRequestedOffset = 0;
		this.requestNextBlocks();
	}