private void initTransferLNLW(Query currQuery) {

		currQuery.nodesVisited.get(currQuery.nodesVisited.size()-1).transferFile(currQuery.requester, currQuery.requestedFile, true); // passive replication

		File mostAccessed = files.get(0);
		int totalFileWeight = 0;
		int totalRequestedFiles = 0;
		int fileWeight = 0;
		for (File file : files) {
			if (file.requests.containsKey(cycleCount)){
				fileWeight = file.getFileWeight(cycleCount);
				totalRequestedFiles++;
				totalFileWeight += fileWeight;
				if (mostAccessed.getFileWeight(cycleCount) < fileWeight) {
					mostAccessed = file;
				}
			}
		}
		for (File file : replicas) {
			if (file.requests.containsKey(cycleCount)){
				fileWeight = file.getFileWeight(cycleCount);
				totalRequestedFiles++;
				totalFileWeight += fileWeight;
				if (mostAccessed.getFileWeight(cycleCount) < fileWeight) {
					mostAccessed = file;
				}
			}
		}

		double avgPopFileWeight = (double) mostAccessed.getFileWeight(cycleCount) / cycleCount;
		double avgTotalWeight = (double)totalFileWeight/ (totalRequestedFiles *cycleCount);
		double numReplicas = Math.floor(avgPopFileWeight / avgTotalWeight);

		Collections.sort(neighbors, new Comparator<Node>() {
			public int compare(Node n1, Node n2) {
				return (int)n1.getLoad().compareTo(n2.getLoad());
			}
		}); 

		int replicasNeeded = ((int)numReplicas > neighbors.size()) ? neighbors.size() : (int)numReplicas;

		for (int i = 0; i <  replicasNeeded; i++) {
			if (!neighbors.get(i).hasFile(mostAccessed))
				transferFile(neighbors.get(i), mostAccessed, false);
		}
	}