private synchronized void processQ() {
	synchronized (toDownload) {
	    for (Download d : toDownload) {
		if (d.state == State.QUEUED) {
		    File t = new File(d.getTempPath());
		    if (t.exists()) {
			d.due.start(t.length());
			d.due.len(d.totalLen - t.length());
			if (d.due.os() instanceof OutputEntityStream)
			    ((OutputEntityStream) d.due.os()).setTotalStreamLength(d.due.len());
		    }
		    do {
			User u = d.getNextUser();
			if (u != null) {
			    try {
				d.downloadingFrom = u;
				u.download(d.due);
				break;
			    } catch (BotException e) {
				if (isRecoverableException(e.getError()))
				    logger.warn("Exception (" + e.getMessage()
					    + ")by DownloadManager. Anyway this is not serious, continuing.", e);
				else {
				    logger.error("Un-recoverable exception: " + e.getMessage() + ". Removing this source.", e);
				    d.removeSrc(new Src(u, boi));
				}
			    }
			}
		    } while (!d.isAllSrcsTried());
		}
	    }
	}
    }