public final 
	boolean updateFromNet(ProgressReporter reporter) throws ProblemsReadingDocumentException, InterruptedException {
		AbstractPage tempPage;
		try {
			tempPage = createSameClassPage();
		} catch (Exception e) {
			throw new ProblemsReadingDocumentException(e);
		}
		tempPage.downloadPage(reporter);
		
		synchronized (this) {
			if (isSame(tempPage)) return false;
			setTitle(tempPage.getTitle());
			// somewhat awkward way to copy custom object data from temp object
			readCacheSelf(tempPage.getSpecificDataXML()); 

			// modifying child without locking because child pages are not published yet. 
			for (AbstractPage child: tempPage.childPages)
				child.parent = this;

			// lets try to save some existing children for performance 
			mergeNewChildren(new LinkedList<>(childPages), tempPage.childPages);
		}
		return true;
	}