private void doQueryRound(int n, int range)
	{
		Future<RPCMessage> futureReply;
		int i=0;
		int rangeCounter=1;
		Iterator<Contact> it = shortList.iterator(); 
		Contact c;
		
		while (it.hasNext() && rangeCounter <= range && i < n)
		{
			c = it.next();
			
			//if c is unprobed and it is not the local node then query it
			if (!markedList.contains(c) && !(node.getNodeId().equals(c.getNodeId())))
			{
				try
				{
					futureReply = node.findValue(c, key, type, owner, recent, true);
					replies.add(new Couple<Contact,Future<RPCMessage>>(c,futureReply));
					i++;
				}
				catch (Exception e)
				{
					//If something went wrong, discard the node from  the list
					shortList.remove(c);
				}
			}
			rangeCounter++;
		}
		
		FindValueResponse reply;
		Contact contact;
		for (Couple<Contact,Future<RPCMessage>> replyCouple : replies)
		{
			contact = replyCouple.first();
			futureReply = replyCouple.second();
			try
			{
				//waits the FIND_NODE responses for a short time
				reply = (FindValueResponse)(futureReply.get(TIME_OUT, Settings.DEFAULT_TIME_UNIT).getRPC());
				
				if (reply.getCounters() != null)
				{
					result.add(reply.getCounters());
				}
				markedList.add(contact);
			}
			catch (Exception e)
			{
				//contacts that fail to respond quickly are removed from consideration
				shortList.remove(contact);
				System.err.println("IterativeFindVaue" + contact + " failed to respond. Removedfrom shortlist.");
			}
		}
		replies.clear();
	}