public List<Request> getAllBlocksLeft(){
		//count blocks.
		if(complete){return null;}
		List<Request> list =new ArrayList<Request>();
		SubPiece last=null;
		//TODO: simplify? bit incomprehensible 
		int i = 0;
		Iterator<SubPiece> itor = data.iterator();
		while (itor.hasNext()) {
			SubPiece sp = itor.next();
			if (sp.begin != i) {
				// we missing stuff add
				int bytes = sp.begin-i;
				for (int z = 0; z < bytes; z += idealSize) {
					if (z + idealSize > bytes) {
						list.add(new Request(pieceIndex, i + z, bytes - z));
					} else {
						list.add(new Request(pieceIndex, i + z, idealSize));
					}
				}
			}
			last = sp;
			i += sp.data.length;
		}
		// now we have to go from last
		// to end.
		if(last==null){
			last = new SubPiece(0,new byte[0]);
		}
		for(i=last.data.length+last.begin;i<finalPiece.length;i+=idealSize){
			if (i + idealSize > finalPiece.length) {
				list.add(new Request(pieceIndex, i, finalPiece.length-i));
			} else {
				list.add(new Request(pieceIndex, i, idealSize));
			}
		}
			
		return list;
	}