private void readPage(final String uri) {
		synchronized (lock) {
			// this disables the SaveReminder when the file is in the "/cache/tmpzip/" zone
			if (!isRemote()) {
				if (runOnCD) {
					if (saveReminder != null)
						saveReminder.setEnabled(false);
				} else {
					if (saveReminder != null)
						saveReminder.setEnabled(uri.indexOf(TMPZIP) == -1);
				}
			} else {
				if (runOnCD) {
					EventQueue.invokeLater(new Runnable() {
						public void run() {
							showErrorMessage(new CdModeException(uri));
						}
					});
					return;
				}
			}
			EventQueue.invokeLater(new Runnable() {
				public void run() {
					if (urlDisplay != null)
						urlDisplay.setText("Loading...");
					if (decoder.getProgressBar() != null) {
						decoder.getProgressBar().setString(null);
						decoder.getProgressBar().setIndeterminate(true);
					}
				}
			});
			try {
				loadPage(uri);
			} catch (final Exception e) {
				e.printStackTrace();
				EventQueue.invokeLater(new Runnable() {
					public void run() {
						showErrorMessage(e);
					}
				});
			} finally {
				if (saveReminder != null)
					saveReminder.setChanged(false);
			}
		}
	}