private void getTimeMapPrefixes() throws Exception {
		//
		this.timeMapPrefixes = new ArrayList<String>();
		this.timeGates = new ArrayList<String>();
		this.icons = new HashMap<String,String>();
		//
		DocumentBuilderFactory domFactory = DocumentBuilderFactory
				.newInstance();
		domFactory.setNamespaceAware(true);
		DocumentBuilder builder = domFactory.newDocumentBuilder();
		Document doc = builder
				.parse(new URL(
				"http://labs.mementoweb.org/aggregator_config/archivelist.xml")
				.openStream());
		XPath xpath = XPathFactory.newInstance().newXPath();
		// XPath Query for iterating through link objects:
		//XPathExpression expr = xpath.compile("(//links/link/timegate|//links/link/timemap)");
		XPathExpression expr = xpath.compile("//links/link");

		// Go through the link entries:
		Object result = expr.evaluate(doc, XPathConstants.NODESET);
		NodeList nodes = (NodeList) result;
		for (int i = 0; i < nodes.getLength(); i++) {
			Node n = nodes.item(i);
			// Look for timegate and timemap:
			String timeMap = xpath.evaluate("./timemap[1]/@uri", n);
			if(timeMap != null && ! timeMap.trim().isEmpty() ) {
				timeMapPrefixes.add(timeMap);
				log.info("Got TM: "+timeMap);
			}
			String timeGate = xpath.evaluate("./timegate[1]/@uri", n);
			if(timeGate != null && ! timeGate.trim().isEmpty() ) {
				timeGates.add(timeGate);
				log.info("Got TG: "+timeGate);
			}
			// Icon
			String icon = xpath.evaluate("./icon/@uri", n);
			if( icon != null && ! icon.trim().isEmpty() ) {
				String uri = timeGate;
				if( uri.endsWith("/timegate/")) {
					uri = uri.substring(0, uri.length() - 9);
				}
				this.icons.put(uri,icon);
				log.info("Got icon: "+uri+" > "+icon);
			}
		}
	}