public synchronized final
	boolean loadFromCache () {
		
		Main.log(Level.FINE, String.format("Reading %s from cache...%n",url.toString()));
		try {
			Element e = getCache().getElementForPage(url.toString());
			if (null == e) return false;
			String t = e.getAttributeValue("title");
			if (t == null) return false;
			setTitle(t);  
			readCacheSelf(e);
			
			Collection<AbstractPage> newChildren = new LinkedList<>();
			Collection<Element> l = e.getContent(new ElementFilter("childref"));
			for (Element el: l) 
				newChildren.add(readCacheChild(el));
			
			mergeNewChildren(new LinkedList<>(childPages), newChildren);
			
			Main.log(Level.FINE, String.format("\t...Finished reading %s.%n",url.toString()));
			return true;
		} catch (ProblemsReadingDocumentException|NullPointerException e) {
			// If ANY problem, quit with a fail code
			childPages.clear();
			setTitle(null);
			return false;
		}
	}