public final 
	void downloadPage(ProgressReporter reporter) throws ProblemsReadingDocumentException, InterruptedException {
		Main.log(Level.FINE, String.format("Downloading %s from network...%n", url.toString()));
		
		org.jdom2.Document doc = null;
		try {
			XMLReaderSAX2Factory saxConverter = new XMLReaderSAX2Factory(false, "org.ccil.cowan.tagsoup.Parser");
			SAXBuilder builder = new SAXBuilder(saxConverter);
			URLConnection connection = url.openConnection();
			
			
			if (!WebDownloader.checkHttpResponseOK(connection))		
				throw new ProblemsReadingDocumentException("Error response from server");
			if (Thread.interrupted())
				throw new InterruptedException();
			doc = builder.build(connection.getInputStream());
//		} catch (IOException|JDOMException e) {
		} catch (InterruptedException e) {
			throw e;
		} catch (Exception e) {//XXX: some glitch in JDOM2 lets other random exceptions bubble up. So need to catch 'em all.
			throw new ProblemsReadingDocumentException(e);
		}
	
		synchronized (this) {
			// discover info about this page
			parseSelf(doc);  
				
			// discover info about children pages
			childPages.clear();
			Collection<Element> result = queryXPathList(getChildNodesXPath(), doc);
			List<AbstractPage> newChildren = new LinkedList<>();
			for (Element el: result) 
				try {
					newChildren.add(parseChild(el));
				} catch (ProblemsReadingDocumentException e) {
					Main.log(Level.WARNING, "unable to parse child data", e);
				} // skip this child to next one

			childPages.addAll(newChildren);
		}
		Main.log(Level.FINE, String.format("...finished %s.%n", url.toString()));
	}