Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 641)
@@ -1,2 +1,2 @@
 appname=AE Installer 2
-appversion=0.97
+appversion=0.98
Index: AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java	(revision 641)
@@ -27,5 +27,5 @@
 
 import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpHead;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.impl.client.DefaultHttpClient;
@@ -196,5 +196,5 @@
 		try {
 			DefaultHttpClient httpclient = new DefaultHttpClient();
-			httpQuery = new HttpGet(DepotConfig.getDepotUrl());
+			httpQuery = new HttpHead(DepotConfig.getDepotUrl());
 
 			HttpResponse response = httpclient.execute(httpQuery);
Index: AE/installer2/src/net/oni2/aeinstaller/backend/network/FileDownloader.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/network/FileDownloader.java	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/network/FileDownloader.java	(revision 641)
@@ -48,5 +48,5 @@
 	private URL url = null;
 	private File target = null;
-	private int size = -1;
+	private int fileLength = Integer.MAX_VALUE;
 	private int downloaded = 0;
 
@@ -64,8 +64,4 @@
 		this.url = new URL(url);
 		this.target = target;
-
-		URLConnection connection = this.url.openConnection();
-		connection.connect();
-		size = connection.getContentLength();
 	}
 
@@ -94,5 +90,4 @@
 			t.start();
 			state = EState.RUNNING;
-			updateStatus(downloaded, size);
 		}
 	}
@@ -108,5 +103,5 @@
 			else
 				state = EState.RUNNING;
-			updateStatus(downloaded, size);
+			updateStatus(downloaded, fileLength);
 		}
 	}
@@ -149,5 +144,4 @@
 	public void run() {
 		int downloaded = 0;
-		int fileLength = Integer.MAX_VALUE;
 		String strLastModified = null;
 		String strEtag = null;
@@ -181,4 +175,5 @@
 						try {
 							URLConnection connection = url.openConnection();
+							connection.setRequestProperty("Cache-Control", "no-cache");
 							if (downloaded == 0) {
 								connection.connect();
@@ -257,11 +252,4 @@
 
 	/**
-	 * @return the size
-	 */
-	public int getSize() {
-		return size;
-	}
-
-	/**
 	 * @return the downloaded size
 	 */
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 641)
@@ -82,5 +82,5 @@
 	private JMenu mainMenu;
 	private JMenu toolsMenu;
-	private TreeSet<JMenuItem> toolsMenuItems = new TreeSet<JMenuItem>();
+	private Vector<JMenuItem> toolsMenuItems = new Vector<JMenuItem>();
 
 	private JSplitPane contents;
@@ -94,5 +94,4 @@
 
 	private JLabel lblTitleVal;
-	private JLabel lblSubmitterVal;
 	private JLabel lblCreatorVal;
 	private JLabel lblTypesVal;
@@ -106,11 +105,15 @@
 	private TreeSet<Mod> execUpdates = null;
 
-	private enum EInstallResult {
+	private enum EInstallState {
 		DONE,
+		READY,
+		ABORTED,
 		OFFLINE,
-		INCOMPATIBLE
+		INCOMPATIBLE,
+		CHECKING
 	};
 
-	private EInstallResult installDone = EInstallResult.DONE;
+	private EInstallState installState = EInstallState.DONE;
+	private TreeSet<Mod> installMods = null;
 
 	/**
@@ -468,14 +471,13 @@
 	}
 
-	@DoInBackground(progressMessage = "installing.title", cancelable = false, indeterminateProgress = false)
-	private void install(final BackgroundEvent evt) {
+	@SuppressWarnings("unused")
+	private void install() {
 		TreeSet<Mod> mods = new TreeSet<Mod>();
 		mods.addAll(ModManager.getInstance().getMandatoryMods());
 		mods.addAll(tblMods.getSelectedMods());
 
-		boolean instReady = false;
-		installDone = EInstallResult.DONE;
-
-		while (!instReady) {
+		installState = EInstallState.CHECKING;
+
+		while (installState == EInstallState.CHECKING) {
 			TreeSet<Mod> toDownload = new TreeSet<Mod>();
 			for (Mod m : mods) {
@@ -484,5 +486,5 @@
 			}
 			if (Settings.getInstance().isOfflineMode()) {
-				installDone = EInstallResult.OFFLINE;
+				installState = EInstallState.OFFLINE;
 				break;
 			}
@@ -491,6 +493,8 @@
 				try {
 					dl.setVisible(true);
-					if (!dl.isFinished())
+					if (!dl.isFinished()) {
+						installState = EInstallState.ABORTED;
 						break;
+					}
 				} finally {
 					dl.dispose();
@@ -500,9 +504,39 @@
 					.checkDependencies(mods);
 			if (dependencies.size() > 0) {
-				System.out.println("Unmet dependencies: "
-						+ dependencies.toString());
+				int size = 0;
+				String depsLocalString = "";
+				String depsDownloadString = "";
 				for (Mod m : dependencies.keySet()) {
-					for (Mod mDep : dependencies.get(m))
-						mods.add(mDep);
+					for (Mod mDep : dependencies.get(m)) {
+						if (!mods.contains(mDep)) {
+							mods.add(mDep);
+							if (!mDep.isLocalAvailable()) {
+								size += mDep.getZipSize();
+								if (depsDownloadString.length() > 0)
+									depsDownloadString += "\n";
+								depsDownloadString += " - " + mDep.getName();
+							} else {
+								if (depsLocalString.length() > 0)
+									depsLocalString += "\n";
+								depsLocalString += " - " + mDep.getName();
+							}
+						}
+					}
+				}
+				if (depsLocalString.length() == 0)
+					depsLocalString = bundle.getString("installDependencies.none");
+				if (depsDownloadString.length() == 0)
+					depsDownloadString = bundle.getString("installDependencies.none");
+
+				int res = JOptionPane.showConfirmDialog(this, String.format(
+						bundle.getString("installDependencies.text"),
+						depsLocalString, depsDownloadString,
+						SizeFormatter.format(size, 3)), bundle
+						.getString("installDependencies.title"),
+						JOptionPane.YES_NO_OPTION,
+						JOptionPane.INFORMATION_MESSAGE);
+				if (res == JOptionPane.NO_OPTION) {
+					installState = EInstallState.ABORTED;
+					break;
 				}
 			} else {
@@ -510,16 +544,17 @@
 						.checkIncompabitilites(mods);
 				if (conflicts.size() > 0) {
-					installDone = EInstallResult.INCOMPATIBLE;
+					installState = EInstallState.INCOMPATIBLE;
 					System.err.println("Incompatible mods: "
 							+ conflicts.toString());
+					// TODO: Message window with incompatibilities
 					break;
 				} else {
-					instReady = true;
-				}
-			}
-		}
-
-		if (instReady) {
-			TreeSet<Mod> actuallyMods = new TreeSet<Mod>();
+					installState = EInstallState.READY;
+				}
+			}
+		}
+
+		if (installState == EInstallState.READY) {
+			installMods = new TreeSet<Mod>();
 			TreeSet<Mod> actuallyTools = new TreeSet<Mod>();
 
@@ -528,5 +563,5 @@
 					actuallyTools.add(m);
 				else
-					actuallyMods.add(m);
+					installMods.add(m);
 			}
 
@@ -534,6 +569,12 @@
 				Installer.installTools(actuallyTools);
 			}
-
-			Installer.install(actuallyMods, new InstallProgressListener() {
+		}
+
+	}
+
+	@DoInBackground(progressMessage = "installing.title", cancelable = false, indeterminateProgress = false)
+	private void installExec(final BackgroundEvent evt) {
+		if (installState == EInstallState.READY) {
+			Installer.install(installMods, new InstallProgressListener() {
 				@Override
 				public void installProgressUpdate(int done, int total,
@@ -544,6 +585,7 @@
 				}
 			});
-			installDone = EInstallResult.DONE;
-		}
+			installState = EInstallState.DONE;
+		}
+		installMods = null;
 	}
 
@@ -551,7 +593,7 @@
 	private void installDone() {
 		ModManager.getInstance().updateInstalledMods();
-		revertSelection();
-		switch (installDone) {
+		switch (installState) {
 			case DONE:
+				revertSelection();
 				JOptionPane.showMessageDialog(this,
 						bundle.getString("installDone.text"),
@@ -565,5 +607,5 @@
 						JOptionPane.WARNING_MESSAGE);
 				break;
-			case INCOMPATIBLE:
+			default:
 				break;
 		}
@@ -573,5 +615,4 @@
 	public void modSelectionChanged(ModTable source, Mod m) {
 		lblTitleVal.setText("");
-		lblSubmitterVal.setText("");
 		lblCreatorVal.setText("");
 		lblDescriptionVal.setText("");
@@ -582,5 +623,4 @@
 		if (m != null) {
 			lblTitleVal.setText(m.getName());
-			lblSubmitterVal.setText(m.getSubmitter());
 			lblCreatorVal.setText(m.getCreator());
 			lblDescriptionVal.setText(m.getDescription());
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 641)
@@ -58,5 +58,5 @@
                 ModTable(name=tblMods, visible=false)
             - JButton(name=btnRevertSelection, icon=img.undo16, text=btnRevertSelection.text, toolTipText=btnRevertSelection.tooltip, onAction=[revertSelection])
-            - JButton(name=btnInstall, icon=img.install, text=btnInstall.text, toolTipText=btnInstall.tooltip, onAction=[install,installDone])
+            - JButton(name=btnInstall, icon=img.install, text=btnInstall.text, toolTipText=btnInstall.tooltip, onAction=[install,installExec,installDone])
             - JLabel(name=lblDownloadSize, text=lblDownloadSize.text)
             - JLabel(name=lblDownloadSizeVal)
@@ -71,6 +71,4 @@
             - JLabel(name=lblTitle, text=lblTitle.text)
             - JLabel(name=lblTitleVal)
-            - JLabel(name=lblSubmitter, text=lblSubmitter.text)
-            - JLabel(name=lblSubmitterVal)
             - JLabel(name=lblCreator, text=lblCreator.text)
             - JLabel(name=lblCreatorVal)
@@ -89,5 +87,4 @@
                  [min]             [grow]
                  >lblTitle         lblTitleVal         [min]
-                 >lblSubmitter     lblSubmitterVal     [min]
                  >lblCreator       lblCreatorVal       [min]
                  >lblTypes         lblTypesVal         [min]
Index: AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.java	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.java	(revision 641)
@@ -55,4 +55,6 @@
 				.put(ksCtrlW, "close");
 		getRootPane().getActionMap().put("close", closeAction);
+
+		setLocationRelativeTo(null);
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 641)
@@ -60,4 +60,6 @@
 
 		initValues();
+
+		setLocationRelativeTo(null);
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 641)
@@ -52,5 +52,4 @@
 
 	private JLabel lblTitleVal;
-	private JLabel lblSubmitterVal;
 	private JLabel lblCreatorVal;
 	private JLabel lblPlatformVal;
@@ -101,4 +100,6 @@
 		icoUninstall = new ImageIcon(getClass().getResource(
 				SwingJavaBuilder.getConfig().getResource("img.uninstall")));
+		
+		setLocationRelativeTo(null);
 	}
 
@@ -147,5 +148,4 @@
 	public void valueChanged(ListSelectionEvent evt) {
 		lblTitleVal.setText("");
-		lblSubmitterVal.setText("");
 		lblCreatorVal.setText("");
 		lblDescriptionVal.setText("");
@@ -159,5 +159,4 @@
 			Mod m = (Mod) lstTools.getSelectedValue();
 			lblTitleVal.setText(m.getName());
-			lblSubmitterVal.setText(m.getSubmitter());
 			lblCreatorVal.setText(m.getCreator());
 			lblDescriptionVal.setText(m.getDescription());
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 641)
@@ -18,6 +18,4 @@
             - JLabel(name=lblTitle, text=lblTitle.text)
             - JLabel(name=lblTitleVal)
-            - JLabel(name=lblSubmitter, text=lblSubmitter.text)
-            - JLabel(name=lblSubmitterVal)
             - JLabel(name=lblCreator, text=lblCreator.text)
             - JLabel(name=lblCreatorVal)
@@ -35,5 +33,4 @@
                  [min]             [grow]
                  >lblTitle         lblTitleVal         [min]
-                 >lblSubmitter     lblSubmitterVal     [min]
                  >lblCreator       lblCreatorVal       [min]
                  >lblPlatform      lblPlatformVal      [min]
Index: AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 641)
@@ -43,5 +43,4 @@
 
 lblTitle.text=Name:
-lblSubmitter.text=Submitter:
 lblCreator.text=Creator:
 lblTypes.text=Types:
@@ -54,4 +53,10 @@
 updateDepot.title=Updating Mod Depot cache
 
+installDependencies.title=Unmet dependencies
+installDependencies.text=There are unmet dependencies for some mods.\n\n\
+Following mods are already downloaded and will be selected:\n%s\n\n\
+These mods will have to be additionally downloaded:\n%s\n\n\
+Size of files to be downloaded: %s.\n\nContinue?
+installDependencies.none=<None>
 installDone.title=Installation done
 installDone.text=You can now play AE Oni.
Index: AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties	(revision 641)
@@ -7,5 +7,4 @@
 
 lblTitle.text=Name:
-lblSubmitter.text=Submitter:
 lblCreator.text=Creator:
 lblPlatform.text=Platform:
