Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 646)
@@ -1,2 +1,2 @@
 appname=AE Installer 2
-appversion=0.99b
+appversion=0.99c
Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 646)
@@ -188,6 +188,6 @@
 		if (offline) {
 			JOptionPane.showMessageDialog(null,
-					globalBundle.getString("offlineMode.text"),
-					globalBundle.getString("offlineMode.title"),
+					globalBundle.getString("offlineModeStartup.text"),
+					globalBundle.getString("offlineModeStartup.title"),
 					JOptionPane.INFORMATION_MESSAGE);
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownloader.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownloader.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownloader.java	(revision 646)
@@ -73,5 +73,5 @@
 		if ((state == State.RUNNING) && (currentDownload < downloads.size())) {
 			downloads.get(currentDownload).start();
-		}else if (state == State.RUNNING) {
+		} else if (state == State.RUNNING) {
 			state = State.LAST_FILE_DOWNLOADED;
 			notifyListener();
@@ -102,7 +102,16 @@
 
 	private void notifyListener() {
-		listener.updateStatus(this, state, unpacked, downloads.size(),
-				downloadedComplete + downloadedCurrent, totalSize,
-				getTimeElapsed(), getTimeRemaining(), getDownloadSpeed());
+		if (currentDownload < downloads.size()) {
+			listener.updateStatus(this,
+					downloads.get(currentDownload).getMod(), state, unpacked,
+					downloads.size(), downloadedComplete + downloadedCurrent,
+					totalSize, getTimeElapsed(), getTimeRemaining(),
+					getDownloadSpeed());
+		} else {
+			listener.updateStatus(this, null, state, unpacked,
+					downloads.size(), downloadedComplete + downloadedCurrent,
+					totalSize, getTimeElapsed(), getTimeRemaining(),
+					getDownloadSpeed());
+		}
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownloaderListener.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownloaderListener.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownloaderListener.java	(revision 646)
@@ -1,4 +1,5 @@
 package net.oni2.aeinstaller.backend.mods.download;
 
+import net.oni2.aeinstaller.backend.mods.Mod;
 import net.oni2.aeinstaller.backend.mods.download.ModDownloader.State;
 
@@ -12,4 +13,6 @@
 	 * @param source
 	 *            Event source
+	 * @param currentDownload
+	 *            Currently downloading mod
 	 * @param state
 	 *            Current state
@@ -29,6 +32,6 @@
 	 *            Average download speed in B/s
 	 */
-	public void updateStatus(ModDownloader source, State state, int filesDown,
-			int filesTotal, int bytesDown, int bytesTotal, int duration,
-			int remaining, int speed);
+	public void updateStatus(ModDownloader source, Mod currentDownload,
+			State state, int filesDown, int filesTotal, int bytesDown,
+			int bytesTotal, int duration, int remaining, int speed);
 }
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 646)
@@ -54,4 +54,5 @@
 import net.oni2.aeinstaller.gui.about.AboutDialog;
 import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
+import net.oni2.aeinstaller.gui.mandatorypackages.MandatoryPackagesDialog;
 import net.oni2.aeinstaller.gui.modtable.DownloadSizeListener;
 import net.oni2.aeinstaller.gui.modtable.ModSelectionListener;
@@ -117,4 +118,5 @@
 	private EInstallState installState = EInstallState.DONE;
 	private TreeSet<Mod> installMods = null;
+	private TreeSet<Mod> installDeps = null;
 
 	/**
@@ -275,5 +277,5 @@
 	private void doUpdate() {
 		if (execUpdates != null && execUpdates.size() > 0) {
-			Downloader dl = new Downloader(execUpdates);
+			Downloader dl = new Downloader(execUpdates, null);
 			try {
 				dl.setVisible(true);
@@ -308,8 +310,8 @@
 
 	}
-	
+
 	@SuppressWarnings("unused")
 	private void showMandatoryPackagesDialog() {
-		// TODO: open mand-pack-dialog
+		new MandatoryPackagesDialog().setVisible(true);
 	}
 
@@ -454,5 +456,6 @@
 							@Override
 							public void updateStatus(ModDownloader source,
-									State state, int filesDown, int filesTotal,
+									Mod currentDownload, State state,
+									int filesDown, int filesTotal,
 									int bytesDown, int bytesTotal,
 									int duration, int remaining, int speed) {
@@ -497,4 +500,6 @@
 		mods.addAll(tblMods.getSelectedMods());
 
+		installDeps = new TreeSet<Mod>();
+
 		installState = EInstallState.CHECKING;
 
@@ -510,5 +515,5 @@
 			}
 			if (toDownload.size() > 0) {
-				Downloader dl = new Downloader(toDownload);
+				Downloader dl = new Downloader(toDownload, installDeps);
 				try {
 					dl.setVisible(true);
@@ -524,41 +529,54 @@
 					.checkDependencies(mods);
 			if (dependencies.size() > 0) {
-				int size = 0;
-				String depsLocalString = "";
-				String depsDownloadString = "";
-				for (Mod m : dependencies.keySet()) {
-					for (Mod mDep : dependencies.get(m)) {
-						if (!mods.contains(mDep)) {
+				for (HashSet<Mod> hm : dependencies.values()) {
+					installDeps.addAll(hm);
+					for (Mod mDep : hm) {
+						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 (!Settings.getInstance()
+						.get("notifyDepsAfterInstall", false)) {
+					int size = 0;
+					String depsLocalString = "";
+					String depsDownloadString = "";
+					for (Mod m : dependencies.keySet()) {
+						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;
+					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 {
@@ -635,8 +653,24 @@
 			case DONE:
 				revertSelection();
-				JOptionPane.showMessageDialog(this,
-						bundle.getString("installDone.text"),
-						bundle.getString("installDone.title"),
-						JOptionPane.INFORMATION_MESSAGE);
+				if (installDeps.size() > 0
+						&& Settings.getInstance().get("notifyDepsAfterInstall",
+								false)) {
+					String installedDeps = "";
+					for (Mod m : installDeps) {
+						if (installedDeps.length() > 0)
+							installedDeps += "\n";
+						installedDeps += " - " + m.getName();
+					}
+					JOptionPane.showMessageDialog(this, String.format(
+							bundle.getString("installDoneDeps.text"),
+							installedDeps), bundle
+							.getString("installDone.title"),
+							JOptionPane.INFORMATION_MESSAGE);
+				} else {
+					JOptionPane.showMessageDialog(this,
+							bundle.getString("installDone.text"),
+							bundle.getString("installDone.title"),
+							JOptionPane.INFORMATION_MESSAGE);
+				}
 				break;
 			case OFFLINE:
@@ -649,4 +683,5 @@
 				break;
 		}
+		installDeps = null;
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/downloadwindow/Downloader.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/downloadwindow/Downloader.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/downloadwindow/Downloader.java	(revision 646)
@@ -31,4 +31,6 @@
 	private BuildResult result = SwingJavaBuilder.build(this, bundle);
 
+	private JLabel lblNameVal;
+	private JLabel lblIsDep;
 	private JLabel lblElapsedVal;
 	private JLabel lblRemainingVal;
@@ -37,18 +39,24 @@
 	private JLabel lblRateVal;
 	private JProgressBar progress;
-	
+
 	private JButton btnAbort;
 
 	private ModDownloader downloader;
+	private TreeSet<Mod> dependencies = new TreeSet<Mod>();
 
 	/**
 	 * @param mods
 	 *            Mods to download
+	 * @param dependencies
+	 *            List of mods that only are auto-resolved dependencies
 	 */
-	public Downloader(TreeSet<Mod> mods) {
+	public Downloader(TreeSet<Mod> mods, TreeSet<Mod> dependencies) {
 		super();
 
 		setResizable(false);
 		setSize(500, (int) getSize().getHeight());
+
+		if (dependencies != null)
+			this.dependencies = dependencies;
 
 		downloader = new ModDownloader(mods, this);
@@ -84,7 +92,7 @@
 
 	@Override
-	public void updateStatus(ModDownloader source, State state, int filesDown,
-			int filesTotal, int bytesDown, int bytesTotal, int duration,
-			int remaining, int speed) {
+	public void updateStatus(ModDownloader source, Mod currentDownload,
+			State state, int filesDown, int filesTotal, int bytesDown,
+			int bytesTotal, int duration, int remaining, int speed) {
 		if (state == ModDownloader.State.FINISHED) {
 			close();
@@ -92,8 +100,16 @@
 			if (state == State.LAST_FILE_DOWNLOADED)
 				btnAbort.setEnabled(false);
-			
+
 			progress.setValue(bytesDown);
 			progress.setToolTipText(String.format("%d / %d files downloaded",
 					filesDown, filesTotal));
+
+			if (currentDownload != null) {
+				lblNameVal.setText(currentDownload.getName());
+				lblIsDep.setVisible(dependencies.contains(currentDownload));
+			} else {
+				lblNameVal.setText(bundle.getString("unpacking"));
+				lblIsDep.setVisible(false);
+			}
 
 			lblElapsedVal.setText(formatTime(duration));
Index: AE/installer2/src/net/oni2/aeinstaller/gui/downloadwindow/Downloader.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/downloadwindow/Downloader.yml	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/downloadwindow/Downloader.yml	(revision 646)
@@ -10,4 +10,7 @@
   content:
     - JButton(name=btnAbort, text=btnAbort.title, icon=img.stop, onAction=[confirm,close])
+    - JLabel(name=lblName, text=lblName.title)
+    - JLabel(name=lblNameVal, font=14pt)
+    - JLabel(name=lblIsDep, text=lblIsDep.title, foreground=darkred, visible=false)
     - JLabel(name=lblElapsed, text=lblElapsed.title)
     - JLabel(name=lblElapsedVal)
@@ -23,4 +26,5 @@
     - MigLayout: |
          [grow]
+         lblName<,lblNameVal<,lblIsDep<                                  [min]
          lblElapsed=1,lblElapsedVal=2,lblRemaining=1,lblRemainingVal=2   [min]
          lblDownloaded=1,lblDownloadedVal=2,lblTotal=1,lblTotalVal=2     [min]
Index: AE/installer2/src/net/oni2/aeinstaller/gui/mandatorypackages/MandatoryPackagesDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/mandatorypackages/MandatoryPackagesDialog.java	(revision 646)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/mandatorypackages/MandatoryPackagesDialog.java	(revision 646)
@@ -0,0 +1,134 @@
+package net.oni2.aeinstaller.gui.mandatorypackages;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.ResourceBundle;
+import java.util.TreeSet;
+
+import javax.swing.AbstractAction;
+import javax.swing.DefaultListModel;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JSplitPane;
+import javax.swing.KeyStroke;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import net.oni2.aeinstaller.backend.SizeFormatter;
+import net.oni2.aeinstaller.backend.mods.Mod;
+import net.oni2.aeinstaller.backend.mods.ModManager;
+import net.oni2.aeinstaller.backend.mods.Type;
+import net.oni2.aeinstaller.gui.HTMLLinkLabel;
+
+import org.javabuilders.BuildResult;
+import org.javabuilders.swing.SwingJavaBuilder;
+
+/**
+ * @author Christian Illy
+ */
+public class MandatoryPackagesDialog extends JDialog implements
+		ListSelectionListener {
+	private static final long serialVersionUID = -5444213842599816301L;
+
+	private ResourceBundle bundle = ResourceBundle
+			.getBundle("net.oni2.aeinstaller.localization."
+					+ getClass().getSimpleName());
+	@SuppressWarnings("unused")
+	private BuildResult result = SwingJavaBuilder.build(this, bundle);
+
+	private JSplitPane contents;
+
+	private JList lstTools;
+
+	private JLabel lblTitleVal;
+	private JLabel lblCreatorVal;
+	private JLabel lblTypesVal;
+	private JLabel lblPlatformVal;
+	private JLabel lblPackageNumberVal;
+	private JLabel lblVersionNumberVal;
+	private JLabel lblLastChangeVal;
+	private HTMLLinkLabel lblDescriptionVal;
+	private JLabel lblDownloadSizeVal;
+
+	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+	/**
+	 * Open the dialog
+	 */
+	public MandatoryPackagesDialog() {
+		setMinimumSize(new Dimension(getWidth() + 100, getHeight() + 100));
+
+		AbstractAction closeAction = new AbstractAction() {
+
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(ActionEvent arg0) {
+				dispose();
+			}
+		};
+		KeyStroke ksCtrlW = KeyStroke
+				.getKeyStroke('W', KeyEvent.CTRL_DOWN_MASK);
+		getRootPane()
+				.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+				.put(ksCtrlW, "close");
+		getRootPane().getActionMap().put("close", closeAction);
+
+		contents.setDividerLocation(200);
+		contents.setResizeWeight(0.4);
+
+		lstTools.addListSelectionListener(this);
+		lstTools.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+		DefaultListModel dlm = new DefaultListModel();
+		TreeSet<Mod> tools = ModManager.getInstance().getMandatoryTools();
+		for (Mod m : tools)
+			dlm.addElement(m);
+		TreeSet<Mod> mods = ModManager.getInstance().getMandatoryMods();
+		for (Mod m : mods)
+			dlm.addElement(m);
+		lstTools.setModel(dlm);
+
+		setLocationRelativeTo(null);
+	}
+
+	@Override
+	public void valueChanged(ListSelectionEvent evt) {
+		lblTitleVal.setText("");
+		lblCreatorVal.setText("");
+		lblDescriptionVal.setText("");
+		lblTypesVal.setText("");
+		lblPlatformVal.setText("");
+		lblPackageNumberVal.setText("");
+		lblVersionNumberVal.setText("");
+		lblLastChangeVal.setText("");
+		lblDownloadSizeVal.setText("");
+
+		if (lstTools.getSelectedValue() instanceof Mod) {
+			Mod m = (Mod) lstTools.getSelectedValue();
+			lblTitleVal.setText(m.getName());
+			lblCreatorVal.setText(m.getCreator());
+			lblDescriptionVal.setText(m.getDescription());
+
+			String types = "";
+			for (Type t : m.getTypes()) {
+				if (types.length() > 0)
+					types += ", ";
+				types += t.getName();
+			}
+			lblTypesVal.setText(types);
+			lblPlatformVal.setText(m.getPlatform().toString());
+			lblPackageNumberVal.setText(m.getPackageNumberString());
+			lblVersionNumberVal.setText(m.getVersion());
+			if (m.getFile() != null)
+				lblLastChangeVal.setText(sdf.format(new Date(m.getFile()
+						.getTimestamp() * 1000)));
+			lblDownloadSizeVal.setText(SizeFormatter.format(m.getZipSize(), 3));
+		}
+	}
+}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/mandatorypackages/MandatoryPackagesDialog.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/mandatorypackages/MandatoryPackagesDialog.yml	(revision 646)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/mandatorypackages/MandatoryPackagesDialog.yml	(revision 646)
@@ -0,0 +1,51 @@
+JDialog:
+  name: frame
+  title: frame.title
+  size: packed
+  locationRelativeTo: null
+  defaultCloseOperation: disposeOnClose
+  iconImage: img.ae
+  modalityType: applicationModal
+  content:
+    - JSplitPane(name=contents, orientation=horizontalSplit, continuousLayout=true):
+        - JPanel(name=panTools):
+            - JScrollPane(name=scrollTools, vScrollBar=always, hScrollBar=asNeeded):
+                JList(name=lstTools)
+            - MigLayout: |
+                 [grow]
+                 scrollTools   [grow]
+        - JPanel(name=panInfo):
+            - JLabel(name=lblTitle, text=lblTitle.text)
+            - JLabel(name=lblTitleVal)
+            - JLabel(name=lblCreator, text=lblCreator.text)
+            - JLabel(name=lblCreatorVal)
+            - JLabel(name=lblTypes, text=lblTypes.text)
+            - JLabel(name=lblTypesVal)
+            - JLabel(name=lblPlatform, text=lblPlatform.text)
+            - JLabel(name=lblPlatformVal)
+            - JLabel(name=lblPackageNumber, text=lblPackageNumber.text)
+            - JLabel(name=lblPackageNumberVal)
+            - JLabel(name=lblVersionNumber, text=lblVersionNumber.text)
+            - JLabel(name=lblVersionNumberVal)
+            - JLabel(name=lblLastChange, text=lblLastChange.text)
+            - JLabel(name=lblLastChangeVal)
+            - JLabel(name=lblDescription, text=lblDescription.text)
+            - JScrollPane(name=scrollDescription, vScrollBar=always, hScrollBar=asNeeded):
+                HTMLLinkLabel(name=lblDescriptionVal)
+            - JLabel(name=lblDownloadSize, text=lblDownloadSize.text)
+            - JLabel(name=lblDownloadSizeVal)
+            - MigLayout: |
+                 [min]             [grow]
+                 >lblTitle         lblTitleVal         [min]
+                 >lblCreator       lblCreatorVal       [min]
+                 >lblTypes         lblTypesVal         [min]
+                 >lblPlatform      lblPlatformVal      [min]
+                 >lblPackageNumber lblPackageNumberVal [min]
+                 >lblVersionNumber lblVersionNumberVal [min]
+                 >lblLastChange    lblLastChangeVal    [min]
+                 >^lblDescription  scrollDescription   [grow]
+                 >lblDownloadSize  lblDownloadSizeVal  [min]
+    - MigLayout: |
+         [grow]
+         contents [grow]
+  
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 646)
@@ -30,4 +30,6 @@
 	private HashSet<DownloadSizeListener> listeners = new HashSet<DownloadSizeListener>();
 
+	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
 	/**
 	 * Create a new model
@@ -58,5 +60,4 @@
 				return res;
 			case 5:
-				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 				if (mod.getFile() != null)
 					return sdf.format(new Date(
@@ -177,4 +178,5 @@
 			install.add(i, items.get(i).isInstalled());
 		}
+		notifyDownloadSize(0);
 		fireTableDataChanged();
 	}
@@ -220,4 +222,9 @@
 	public boolean isCellEditable(int rowIndex, int columnIndex) {
 		return columnIndex == 0;
+	}
+	
+	private void notifyDownloadSize(int size) {
+		for (DownloadSizeListener dsl : listeners)
+			dsl.downloadSizeChanged(size);
 	}
 
@@ -236,6 +243,5 @@
 				}
 			}
-			for (DownloadSizeListener dsl : listeners)
-				dsl.downloadSizeChanged(size);
+			notifyDownloadSize(size);
 		}
 	}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 646)
@@ -35,4 +35,5 @@
 
 	private JCheckBox chkNotifyOnStart;
+	private JCheckBox chkNotifyDepsAfterInstall;
 	private JCheckBox chkCopyIntro;
 	private JCheckBox chkCopyOutro;
@@ -71,4 +72,5 @@
 
 		chkNotifyOnStart.setSelected(set.get("notifyupdates", true));
+		chkNotifyDepsAfterInstall.setSelected(set.get("notifyDepsAfterInstall", false));
 		chkCopyIntro.setSelected(set.get("copyintro", false));
 		chkCopyOutro.setSelected(set.get("copyoutro", true));
@@ -80,4 +82,5 @@
 
 		set.put("notifyupdates", chkNotifyOnStart.isSelected());
+		set.put("notifyDepsAfterInstall", chkNotifyDepsAfterInstall.isSelected());
 		set.put("copyintro", chkCopyIntro.isSelected());
 		set.put("copyoutro", chkCopyOutro.isSelected());
Index: AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.yml	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.yml	(revision 646)
@@ -13,4 +13,6 @@
       - JLabel(name=lblNotifyOnStart, text=lblNotifyOnStart)
       - JCheckBox(name=chkNotifyOnStart)
+      - JLabel(name=lblNotifyDepsAfterInstall, text=lblNotifyDepsAfterInstall, toolTipText=lblNotifyDepsAfterInstall.tooltip)
+      - JCheckBox(name=chkNotifyDepsAfterInstall, toolTipText=lblNotifyDepsAfterInstall.tooltip)
       - JLabel(name=lblCopyIntro, text=lblCopyIntro)
       - JCheckBox(name=chkCopyIntro)
@@ -18,8 +20,9 @@
       - JCheckBox(name=chkCopyOutro)
       - MigLayout: |
-           [min]                [grow]
-           >lblNotifyOnStart    chkNotifyOnStart         [pref]
-           >lblCopyIntro        chkCopyIntro             [pref]
-           >lblCopyOutro        chkCopyOutro             [pref]
+           [min]                       [grow]
+           >lblNotifyOnStart           chkNotifyOnStart           [pref]
+           >lblNotifyDepsAfterInstall  chkNotifyDepsAfterInstall  [pref]
+           >lblCopyIntro               chkCopyIntro               [pref]
+           >lblCopyOutro               chkCopyOutro               [pref]
     - JPanel(name=panUI, groupTitle=panUI):
       - JLabel(name=lblLaF, text=lblLaF)
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 646)
@@ -4,4 +4,6 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.ResourceBundle;
 import java.util.TreeMap;
@@ -55,4 +57,6 @@
 	private JLabel lblPlatformVal;
 	private JLabel lblPackageNumberVal;
+	private JLabel lblVersionNumberVal;
+	private JLabel lblLastChangeVal;
 	private HTMLLinkLabel lblDescriptionVal;
 	private JLabel lblDownloadSizeVal;
@@ -62,4 +66,6 @@
 	private Icon icoInstall = null;
 	private Icon icoUninstall = null;
+
+	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
 	/**
@@ -100,5 +106,5 @@
 		icoUninstall = new ImageIcon(getClass().getResource(
 				SwingJavaBuilder.getConfig().getResource("img.uninstall")));
-		
+
 		setLocationRelativeTo(null);
 	}
@@ -127,5 +133,5 @@
 					toDownload.add(theMod);
 
-					Downloader dl = new Downloader(toDownload);
+					Downloader dl = new Downloader(toDownload, null);
 					try {
 						dl.setVisible(true);
@@ -152,4 +158,6 @@
 		lblPlatformVal.setText("");
 		lblPackageNumberVal.setText("");
+		lblVersionNumberVal.setText("");
+		lblLastChangeVal.setText("");
 		lblDownloadSizeVal.setText("");
 		btnInstall.setEnabled(false);
@@ -163,4 +171,8 @@
 			lblPlatformVal.setText(m.getPlatform().toString());
 			lblPackageNumberVal.setText(m.getPackageNumberString());
+			lblVersionNumberVal.setText(m.getVersion());
+			if (m.getFile() != null)
+				lblLastChangeVal.setText(sdf.format(new Date(m.getFile()
+						.getTimestamp() * 1000)));
 			lblDownloadSizeVal.setText(SizeFormatter.format(m.getZipSize(), 3));
 			btnInstall.setEnabled(true);
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 646)
@@ -24,4 +24,8 @@
             - JLabel(name=lblPackageNumber, text=lblPackageNumber.text)
             - JLabel(name=lblPackageNumberVal)
+            - JLabel(name=lblVersionNumber, text=lblVersionNumber.text)
+            - JLabel(name=lblVersionNumberVal)
+            - JLabel(name=lblLastChange, text=lblLastChange.text)
+            - JLabel(name=lblLastChangeVal)
             - JLabel(name=lblDescription, text=lblDescription.text)
             - JScrollPane(name=scrollDescription, vScrollBar=always, hScrollBar=asNeeded):
@@ -36,4 +40,6 @@
                  >lblPlatform      lblPlatformVal      [min]
                  >lblPackageNumber lblPackageNumberVal [min]
+                 >lblVersionNumber lblVersionNumberVal [min]
+                 >lblLastChange    lblLastChangeVal    [min]
                  >^lblDescription  scrollDescription   [grow]
                  >lblDownloadSize  lblDownloadSizeVal  [min]
Index: AE/installer2/src/net/oni2/aeinstaller/localization/Downloader.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/Downloader.properties	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/Downloader.properties	(revision 646)
@@ -2,5 +2,7 @@
 
 btnAbort.title=Abort
-lblElapsed.title=Elpased:
+lblName.title=Currently downloading:
+lblIsDep.title= (dependency)
+lblElapsed.title=Elapsed:
 lblRemaining.title=Remaining:
 lblDownloaded.title=Downloaded:
@@ -10,2 +12,4 @@
 abort.text=If you abort the download now the installation of mods will also be aborted.\nDo you want to abort now?
 abort.title=Really abort?
+
+unpacking=none - unpacking files
Index: AE/installer2/src/net/oni2/aeinstaller/localization/Global.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/Global.properties	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/Global.properties	(revision 646)
@@ -8,4 +8,4 @@
 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.
+offlineModeStartup.title=Offline mode
+offlineModeStartup.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/localization/MainWin.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 646)
@@ -65,4 +65,5 @@
 installDone.title=Installation done
 installDone.text=You can now play AE Oni.
+installDoneDeps.text=In addition to the manually selected mods the following\nwere installed because they were depended upon:\n%s\n\nYou can now play AE Oni.
 
 updatesAvailable.title=Updates available
Index: AE/installer2/src/net/oni2/aeinstaller/localization/MandatoryPackagesDialog.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/MandatoryPackagesDialog.properties	(revision 646)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/MandatoryPackagesDialog.properties	(revision 646)
@@ -0,0 +1,11 @@
+frame.title=AE Installer: Mandatory packages
+
+lblTitle.text=Name:
+lblCreator.text=Creator:
+lblTypes.text=Types:
+lblPlatform.text=Platform:
+lblPackageNumber.text=Package number:
+lblVersionNumber.text=Version number:
+lblLastChange.text=Last change:
+lblDescription.text=Description:
+lblDownloadSize.text=Download size of this package:
Index: AE/installer2/src/net/oni2/aeinstaller/localization/SettingsDialog.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/SettingsDialog.properties	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/SettingsDialog.properties	(revision 646)
@@ -8,4 +8,12 @@
 panCommon=Common settings
 lblNotifyOnStart=Notify about updates on startup:
+lblNotifyDepsAfterInstall=Only notify about dependencies after installation:
+lblNotifyDepsAfterInstall.tooltip=<html>\
+Normally you are notified about unmet dependencies <b>before</b><br>\
+the installation continues so you can choose not to download<br>\
+these packages. If you select this option the installation<br>\
+process is not interrupted until it is finished and you are<br>\
+informed on what additional mods were installed to meet<br>\
+dependencies <b>afterwards</b>.</html>
 lblCopyIntro=Enable starting video on installation:
 lblCopyOutro=Enable ending video on installation:
Index: AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties	(revision 645)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties	(revision 646)
@@ -10,4 +10,6 @@
 lblPlatform.text=Platform:
 lblPackageNumber.text=Package number:
+lblVersionNumber.text=Version number:
+lblLastChange.text=Last change:
 lblDescription.text=Description:
-lblDownloadSize.text=Downloadsize of this package: 
+lblDownloadSize.text=Download size of this package: 
