Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 621)
@@ -1,4 +1,4 @@
 appname=AE Installer 2
-appversion=0.80
+appversion=0.81
 
 invalidPath.title=Wrong directory
@@ -7,2 +7,5 @@
 dotNetMissing.title=.NET is not installed
 dotNetMissing.text=.NET, which is required to use this tool, is not installed on this machine.<br>Please download and install it:<br>%1
+
+offlineMode.title=Offline mode
+offlineMode.text=Connection to the ModDepot could not be established.\nAEI will run in offline mode.\nUpdates or installation of mods not already downloaded will not be possible.
Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 621)
@@ -177,4 +177,13 @@
 		}
 
+		boolean offline = !DepotManager.getInstance().checkConnection();
+		if (offline) {
+			JOptionPane.showMessageDialog(null,
+					basicBundle.getString("offlineMode.text"),
+					basicBundle.getString("offlineMode.title"),
+					JOptionPane.INFORMATION_MESSAGE);
+		}
+		Settings.getInstance().setOfflineMode(offline);
+
 		SwingUtilities.invokeLater(new Runnable() {
 			public void run() {
Index: AE/installer2/src/net/oni2/aeinstaller/Images.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/Images.properties	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/Images.properties	(revision 621)
@@ -28,4 +28,5 @@
 img.install=/net/oni2/aeinstaller/images/open_icon_library/run-build-install-root.png
 img.folder=/net/oni2/aeinstaller/images/open_icon_library/folder-open-3.png
+img.update=/net/oni2/aeinstaller/images/open_icon_library/system-software-update-2.png
 
 img.ae=/net/oni2/aeinstaller/images/AElogo.png
Index: AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java	(revision 621)
@@ -65,4 +65,6 @@
 
 	private boolean printNamesNotInMap = false;
+
+	private boolean offlineMode = false;
 
 	/**
@@ -161,4 +163,19 @@
 
 	/**
+	 * @return Is offline?
+	 */
+	public boolean isOfflineMode() {
+		return offlineMode;
+	}
+
+	/**
+	 * @param offline
+	 *            Is offline?
+	 */
+	public void setOfflineMode(boolean offline) {
+		this.offlineMode = offline;
+	}
+
+	/**
 	 * @return Mod Depot cache filename
 	 */
Index: AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotConfig.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotConfig.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotConfig.java	(revision 621)
@@ -1,3 +1,5 @@
 package net.oni2.aeinstaller.backend.depot;
+
+import net.oni2.aeinstaller.backend.Settings;
 
 /**
@@ -76,3 +78,18 @@
 		return 8000;
 	}
+
+	/**
+	 * @return URL of Depot
+	 */
+	public static String getDepotUrl() {
+		return Settings.getInstance().get("depot_url", "http://mods.oni2.net/");
+	}
+
+	/**
+	 * @return URL of Depot API
+	 */
+	public static String getDepotApiUrl() {
+		return Settings.getInstance().get("depot_api_url",
+				"http://mods.oni2.net/?q=api/");
+	}
 }
Index: AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java	(revision 621)
@@ -5,4 +5,6 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -21,4 +23,8 @@
 import net.oni2.aeinstaller.backend.network.DrupalJSONQuery;
 
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.impl.client.DefaultHttpClient;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -221,4 +227,31 @@
 
 	/**
+	 * @return Can we connect to the Depot?
+	 */
+	public boolean checkConnection() {
+		HttpRequestBase httpQuery = null;
+
+		try {
+			DefaultHttpClient httpclient = new DefaultHttpClient();
+			httpQuery = new HttpGet(DepotConfig.getDepotUrl());
+
+			HttpResponse response = httpclient.execute(httpQuery);
+
+			int code = response.getStatusLine().getStatusCode();
+
+			return (code >= 200) && (code <= 299);
+		} catch (UnknownHostException e) {
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			if (httpQuery != null)
+				httpQuery.releaseConnection();
+		}
+		return false;
+	}
+
+	/**
 	 * @return All TaxVocabs
 	 */
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java	(revision 621)
@@ -182,4 +182,28 @@
 
 	/**
+	 * @return Mods which are already locally available
+	 */
+	public TreeSet<Mod> getLocalAvailableMods() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : mods.values()) {
+			if (m.isLocalAvailable())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
+	 * @return Mods which can be updated
+	 */
+	public TreeSet<Mod> getUpdatableMods() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : getLocalAvailableMods()) {
+			if (m.isNewerAvailable())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
 	 * @return Collection of tools valid on this platform and not mandatory
 	 */
@@ -199,4 +223,28 @@
 		for (Mod m : tools.values()) {
 			if (m.isValidOnPlatform() && m.isMandatoryMod())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
+	 * @return Tools which are already locally available
+	 */
+	public TreeSet<Mod> getLocalAvailableTools() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : tools.values()) {
+			if (m.isLocalAvailable())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
+	 * @return Tools which can be updated
+	 */
+	public TreeSet<Mod> getUpdatableTools() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : getLocalAvailableTools()) {
+			if (m.isNewerAvailable())
 				res.add(m);
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownload.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownload.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownload.java	(revision 621)
@@ -80,5 +80,4 @@
 			unpacker = new Unpacker(zipFile, targetFolder, this);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/network/DrupalJSONQuery.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/network/DrupalJSONQuery.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/network/DrupalJSONQuery.java	(revision 621)
@@ -9,5 +9,5 @@
 import java.util.List;
 
-import net.oni2.aeinstaller.backend.Settings;
+import net.oni2.aeinstaller.backend.depot.DepotConfig;
 
 import org.apache.http.HttpEntity;
@@ -29,9 +29,4 @@
  */
 public class DrupalJSONQuery {
-
-	private static String getDepotUrl() {
-		return Settings.getInstance().get("depot_api_url",
-				"http://mods.oni2.net/?q=api/");
-	}
 
 	/**
@@ -56,5 +51,5 @@
 			}
 			HttpEntity data = new UrlEncodedFormEntity(nvps);
-			return executeQuery(getDepotUrl() + resource + "/" + action
+			return executeQuery(DepotConfig.getDepotApiUrl() + resource + "/" + action
 					+ ".json", data);
 		} catch (UnsupportedEncodingException e) {
@@ -80,5 +75,5 @@
 			String refName) throws Exception {
 		return executeQuery(
-				getDepotUrl() + resource + "/" + Integer.toString(index) + "/"
+				DepotConfig.getDepotApiUrl() + resource + "/" + Integer.toString(index) + "/"
 						+ refName + ".json", null);
 	}
@@ -100,5 +95,5 @@
 			String parameters) throws Exception {
 		return executeQuery(
-				getDepotUrl() + resource + "/" + Integer.toString(index)
+				DepotConfig.getDepotApiUrl() + resource + "/" + Integer.toString(index)
 						+ ".json" + parameters, null);
 	}
@@ -126,5 +121,5 @@
 		if (pagesize >= 0)
 			pagesizeN = "&pagesize=" + Integer.toString(pagesize);
-		return executeQuery(getDepotUrl() + resource + ".json" + pageN
+		return executeQuery(DepotConfig.getDepotApiUrl() + resource + ".json" + pageN
 				+ pagesizeN, null);
 	}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 621)
@@ -52,4 +52,5 @@
 import net.oni2.aeinstaller.backend.oni.InstallProgressListener;
 import net.oni2.aeinstaller.backend.oni.Installer;
+import net.oni2.aeinstaller.backend.oni.OniSplit;
 import net.oni2.aeinstaller.gui.about.AboutDialog;
 import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
@@ -92,7 +93,18 @@
 	private JLabel lblTypesVal;
 	private JLabel lblPlatformVal;
+	private JLabel lblPackageNumberVal;
 	private HTMLLinkLabel lblDescriptionVal;
 
 	private JButton btnInstall;
+
+	private TreeSet<Mod> execUpdates = null;
+
+	private enum EInstallResult {
+		DONE,
+		OFFLINE,
+		INCOMPATIBLE
+	};
+
+	private EInstallResult installDone = EInstallResult.DONE;
 
 	/**
@@ -228,31 +240,85 @@
 	@DoInBackground(progressMessage = "updateDepot.title", cancelable = false, indeterminateProgress = false)
 	private void execDepotUpdate(final BackgroundEvent evt) {
-		try {
-			DepotManager.getInstance().updateInformation(false,
-					new DepotCacheUpdateProgressListener() {
-
-						@Override
-						public void cacheUpdateProgress(String stepName,
-								int current, int total) {
-							evt.setProgressEnd(total);
-							evt.setProgressValue(current);
-							evt.setProgressMessage(stepName);
-						}
-					});
-			ModManager.getInstance().init();
-			initTable();
-			initModTypeBox();
-
-			tblMods.setVisible(true);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-	@SuppressWarnings("unused")
-	private void checkUpdates() {
-		if (Settings.getInstance().get("notifyupdates", true)) {
+		if (!Settings.getInstance().isOfflineMode()) {
+			try {
+				DepotManager.getInstance().updateInformation(false,
+						new DepotCacheUpdateProgressListener() {
+
+							@Override
+							public void cacheUpdateProgress(String stepName,
+									int current, int total) {
+								evt.setProgressEnd(total);
+								evt.setProgressValue(current);
+								evt.setProgressMessage(stepName);
+							}
+						});
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		ModManager.getInstance().init();
+		initTable();
+		initModTypeBox();
+
+		tblMods.setVisible(true);
+	}
+
+	@SuppressWarnings("unused")
+	private void checkUpdates(Object evtSource) {
+		if ((evtSource != this)
+				|| Settings.getInstance().get("notifyupdates", true)) {
+			if (Settings.getInstance().isOfflineMode()) {
+				if (evtSource != this) {
+					JOptionPane.showMessageDialog(this,
+							bundle.getString("offlineMode.text"),
+							bundle.getString("offlineMode.title"),
+							JOptionPane.WARNING_MESSAGE);
+				}
+			} else {
+				TreeSet<Mod> mods = ModManager.getInstance().getUpdatableMods();
+				TreeSet<Mod> tools = ModManager.getInstance()
+						.getUpdatableTools();
+				int size = 0;
+				String strMods = "";
+				for (Mod m : mods) {
+					size += m.getZipSize();
+					if (strMods.length() > 0)
+						strMods += "<br>";
+					strMods += " - " + m.getName();
+				}
+				String strTools = "";
+				for (Mod m : tools) {
+					size += m.getZipSize();
+					if (strTools.length() > 0)
+						strTools += "<br>";
+					strTools += " - " + m.getName();
+				}
+				String message = "<html>";
+				message += String.format(
+						bundle.getString("updatesAvailable.text"), strMods,
+						strTools, SizeFormatter.format(size, 3));
+				message += "</html>";
+				int res = JOptionPane
+						.showConfirmDialog(this, message,
+								bundle.getString("updatesAvailable.title"),
+								JOptionPane.YES_NO_OPTION,
+								JOptionPane.QUESTION_MESSAGE);
+				if (res == JOptionPane.YES_OPTION) {
+					execUpdates = new TreeSet<Mod>();
+					execUpdates.addAll(mods);
+					execUpdates.addAll(tools);
+				}
+			}
+		}
+	}
+
+	@DoInBackground(progressMessage = "doUpdate.title", cancelable = false, indeterminateProgress = false)
+	private void doUpdate(final BackgroundEvent evt) {
+		if (execUpdates != null) {
 			// TODO
-		}
+			System.out.println("Update: " + execUpdates.toString());
+			// TODO: install new tools if previously installed
+		}
+		execUpdates = null;
 	}
 
@@ -351,41 +417,45 @@
 	@DoInBackground(progressMessage = "mandatoryFiles.title", cancelable = false, indeterminateProgress = false)
 	private void checkMandatoryFiles(final BackgroundEvent evt) {
-		TreeSet<Mod> mand = new TreeSet<Mod>();
-		for (Mod m : ModManager.getInstance().getMandatoryTools()) {
-			if (m.isNewerAvailable()) {
-				mand.add(m);
-			}
-		}
-		for (Mod m : ModManager.getInstance().getMandatoryMods()) {
-			if (m.isNewerAvailable()) {
-				mand.add(m);
-			}
-		}
-		if (mand.size() > 0) {
-			ModDownloader m = new ModDownloader(mand,
-					new ModDownloaderListener() {
-						@Override
-						public void updateStatus(ModDownloader source,
-								State state, int filesDown, int filesTotal,
-								int bytesDown, int bytesTotal, int duration,
-								int remaining, int speed) {
-							evt.setProgressEnd(filesTotal);
-							evt.setProgressValue(filesDown);
-						}
-					});
-			while (!m.isFinished()) {
-				try {
-					Thread.sleep(10);
-				} catch (InterruptedException e) {
-					e.printStackTrace();
-				}
-			}
-		}
-		evt.setProgressMessage(bundle.getString("mandatoryToolsInstall.title"));
-		Installer.installTools(ModManager.getInstance().getMandatoryTools());
+		if (!Settings.getInstance().isOfflineMode()) {
+			TreeSet<Mod> mand = new TreeSet<Mod>();
+			for (Mod m : ModManager.getInstance().getMandatoryTools()) {
+				if (m.isNewerAvailable()) {
+					mand.add(m);
+				}
+			}
+			for (Mod m : ModManager.getInstance().getMandatoryMods()) {
+				if (m.isNewerAvailable()) {
+					mand.add(m);
+				}
+			}
+			if (mand.size() > 0) {
+				ModDownloader m = new ModDownloader(mand,
+						new ModDownloaderListener() {
+							@Override
+							public void updateStatus(ModDownloader source,
+									State state, int filesDown, int filesTotal,
+									int bytesDown, int bytesTotal,
+									int duration, int remaining, int speed) {
+								evt.setProgressEnd(filesTotal);
+								evt.setProgressValue(filesDown);
+							}
+						});
+				while (!m.isFinished()) {
+					try {
+						Thread.sleep(10);
+					} catch (InterruptedException e) {
+						e.printStackTrace();
+					}
+				}
+			}
+			evt.setProgressMessage(bundle
+					.getString("mandatoryToolsInstall.title"));
+			Installer
+					.installTools(ModManager.getInstance().getMandatoryTools());
+		}
 	}
 
 	@DoInBackground(progressMessage = "installing.title", cancelable = false, indeterminateProgress = false)
-	private boolean install(final BackgroundEvent evt) {
+	private void install(final BackgroundEvent evt) {
 		TreeSet<Mod> mods = new TreeSet<Mod>();
 		mods.addAll(ModManager.getInstance().getMandatoryMods());
@@ -393,7 +463,7 @@
 
 		boolean instReady = false;
+		installDone = EInstallResult.DONE;
 
 		while (!instReady) {
-			System.out.println("Checking downloads:");
 			TreeSet<Mod> toDownload = new TreeSet<Mod>();
 			for (Mod m : mods) {
@@ -401,6 +471,9 @@
 					toDownload.add(m);
 			}
+			if (Settings.getInstance().isOfflineMode()) {
+				installDone = EInstallResult.OFFLINE;
+				break;
+			}
 			if (toDownload.size() > 0) {
-				System.out.println("Download files: " + toDownload.toString());
 				Downloader dl = new Downloader(toDownload);
 				try {
@@ -425,4 +498,5 @@
 						.checkIncompabitilites(mods);
 				if (conflicts.size() > 0) {
+					installDone = EInstallResult.INCOMPATIBLE;
 					System.err.println("Incompatible mods: "
 							+ conflicts.toString());
@@ -435,6 +509,4 @@
 
 		if (instReady) {
-			System.out.println("Install mods: " + mods.toString());
-
 			Installer.install(mods, new InstallProgressListener() {
 				@Override
@@ -446,15 +518,26 @@
 				}
 			});
-			return true;
-		}
-		return false;
+			installDone = EInstallResult.DONE;
+		}
 	}
 
 	@SuppressWarnings("unused")
 	private void installDone() {
-		JOptionPane.showMessageDialog(this,
-				bundle.getString("installDone.text"),
-				bundle.getString("installDone.title"),
-				JOptionPane.INFORMATION_MESSAGE);
+		switch (installDone) {
+			case DONE:
+				JOptionPane.showMessageDialog(this,
+						bundle.getString("installDone.text"),
+						bundle.getString("installDone.title"),
+						JOptionPane.INFORMATION_MESSAGE);
+				break;
+			case OFFLINE:
+				JOptionPane.showMessageDialog(this,
+						bundle.getString("offlineMode.text"),
+						bundle.getString("offlineMode.title"),
+						JOptionPane.WARNING_MESSAGE);
+				break;
+			case INCOMPATIBLE:
+				break;
+		}
 	}
 
@@ -465,4 +548,5 @@
 		lblTypesVal.setText("");
 		lblPlatformVal.setText("");
+		lblPackageNumberVal.setText("");
 		if (m != null) {
 			lblSubmitterVal.setText(m.getName());
@@ -478,6 +562,6 @@
 			lblTypesVal.setText(types);
 			lblPlatformVal.setText(m.getPlatform().toString());
-		}
-		// TODO
+			lblPackageNumberVal.setText(m.getPackageNumberString());
+		}
 	}
 
@@ -499,11 +583,21 @@
 	private void checkInitialize() {
 		if (!Installer.isEditionInitialized()) {
-			int res = JOptionPane.showConfirmDialog(this,
-					bundle.getString("askInitialize.text"),
-					bundle.getString("askInitialize.title"),
-					JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
-			if (res == JOptionPane.NO_OPTION) {
-				saveLocalData();
+			if (!OniSplit.isOniSplitInstalled()) {
+				JOptionPane.showMessageDialog(this,
+						bundle.getString("noOniSplit.text"),
+						bundle.getString("noOniSplit.title"),
+						JOptionPane.ERROR_MESSAGE);
 				exit();
+			} else {
+				int res = JOptionPane
+						.showConfirmDialog(this,
+								bundle.getString("askInitialize.text"),
+								bundle.getString("askInitialize.title"),
+								JOptionPane.YES_NO_OPTION,
+								JOptionPane.QUESTION_MESSAGE);
+				if (res == JOptionPane.NO_OPTION) {
+					saveLocalData();
+					exit();
+				}
 			}
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.properties	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.properties	(revision 621)
@@ -26,4 +26,6 @@
 menu.tools=&Manage Tools
 menu.toolsTooltip=Install/Remove Tools
+menu.update=&Check for updates
+menu.updateTooltip=Check for updates to already downloaded packages on the Depot
 
 btnRevertSelection.text=Revert selection
@@ -40,4 +42,5 @@
 lblTypes.text=Types:
 lblPlatform.text=Platform:
+lblPackageNumber.text=Package number:
 lblFiles.text=Number of files:
 lblDescription.text=Description:
@@ -48,7 +51,11 @@
 installDone.text=You can now play AE Oni.
 
+offlineMode.title=Offline mode
+offlineMode.text=AEI is running in offline mode.\nNo updates or downloads of new mods are possible.\nPlease restart AEI when you have internet connection to update or download new packages.
 updatesAvailable.title=Updates available
-updatesAvailable.text=Some mods have newer versions available.
+updatesAvailable.text=The following mods and tools have newer versions on the Depot.<br>Mods:<br>%s<br>Tools:<br>%s<br><br>Size of files to download is %s.<br>Update now?
 
+noOniSplit.title=OniSplit not available
+noOniSplit.text=The Edition is not yet initialized and OniSplit is missing (offline mode?).\nCan not resume from here, exiting!
 askInitialize.title=Initialize Edition
 askInitialize.text=The Edition is not yet initialized.\nIf you do not initialize now the installer will exit.\nInitialize Edition core now?
@@ -59,2 +66,4 @@
 mandatoryToolsInstall.title=Installing mandatory tools
 
+doUpdate.title=Updating packages
+
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 620)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 621)
@@ -6,5 +6,5 @@
   locationRelativeTo: null
   defaultCloseOperation: doNothingOnClose
-  onWindowOpened: [execDepotUpdate,checkMandatoryFiles,checkInitialize,initialize,checkUpdates,focus]
+  onWindowOpened: [execDepotUpdate,checkMandatoryFiles,checkInitialize,initialize,checkUpdates,doUpdate]
   onWindowClosing: [saveLocalData,exit]
   iconImage: img.ae
@@ -20,4 +20,5 @@
     - Action(name=reglobalize, text=menu.reglobalize, toolTipText=menu.reglobalizeTooltip, icon=img.refresh, onAction=[reglobalize])
     - Action(name=tools, text=menu.tools, toolTipText=menu.toolsTooltip, icon=img.tools, onAction=[tools])
+    - Action(name=update, text=menu.update, toolTipText=menu.updateTooltip, icon=img.update, onAction=[checkUpdates,doUpdate])
     - JMenuBar:
         - JMenu(name=mainMenu, text=menu.main):
@@ -37,4 +38,6 @@
             - JSeparator()
             - JMenuItem(action=tools)
+            - JSeparator()
+            - JMenuItem(action=update)
     - JToolBar(name=toolbar, floatable=false, orientation=0):
         - JButton(action=exitAction, hideActionText=true)
@@ -67,4 +70,6 @@
             - JLabel(name=lblPlatform, text=lblPlatform.text)
             - JLabel(name=lblPlatformVal)
+            - JLabel(name=lblPackageNumber, text=lblPackageNumber.text)
+            - JLabel(name=lblPackageNumberVal)
             - JLabel(name=lblDescription, text=lblDescription.text)
             - JScrollPane(name=scrollDescription, vScrollBar=always, hScrollBar=asNeeded):
@@ -72,9 +77,10 @@
             - MigLayout: |
                  [min]             [grow]
-                 >lblSubmitter     lblSubmitterVal    [min]
-                 >lblCreator       lblCreatorVal      [min]
-                 >lblTypes         lblTypesVal        [min]
-                 >lblPlatform      lblPlatformVal     [min]
-                 >^lblDescription  scrollDescription  [grow]
+                 >lblSubmitter     lblSubmitterVal     [min]
+                 >lblCreator       lblCreatorVal       [min]
+                 >lblTypes         lblTypesVal         [min]
+                 >lblPlatform      lblPlatformVal      [min]
+                 >lblPackageNumber lblPackageNumberVal [min]
+                 >^lblDescription  scrollDescription   [grow]
     - MigLayout:
         layoutConstraints: wrap 1
