private synchronized List<KeyRegistrationRecord> getVPNList(final String inBase64Key) {
		
		Set<KeyRegistrationRecord> out = new HashSet<KeyRegistrationRecord>();
		
		/**
		 * If this key is an infrastructure peer, the nearest (total clients / 1/2total servers). 
		 * Otherwise, return just the 
		 * registered infrastructure peers. 
		 */
		for( String infraKey : mVPN_ids ) {
			if( infraKey.equals(inBase64Key) == false &&
				key_to_record.containsKey(infraKey) ) 
			{
				out.add(key_to_record.get(infraKey));
				logger.finest("Adding infrastructure peer " + key_to_record.get(infraKey).getNickname() + " / " + infraKey);
			} else { 
				logger.finest("Skipping own or unregistered infrastructure key: " + infraKey);
			}
		}
		
		logger.finest("Added " + out.size() + " infrastructure peers to the VPN-response for: " + inBase64Key);
		updateRefreshTime(inBase64Key);
		
		/**
		 * Unlike ordinary operation, we want _all_ the peers to be covered. 
		 * Divide things up so that each registered peer is covered by ~2 infrastructure peers 
		 */
		if( mVPN_ids.contains(inBase64Key) ) {
			int number = key_to_record.size() / (int)Math.round(0.5 * mVPN_ids.size());
			logger.finest("For infrastructure peer, giving: " + number + " / " + key_to_record.size() + " -- " + inBase64Key);
			
			/**
			 * We've already updated the refresh time above
			 */
			out.addAll(getNearestPeers(inBase64Key, number, false));
		}
		
		return Arrays.asList(out.toArray(new KeyRegistrationRecord[0]));
	}