Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/DownloadSizeListener.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/DownloadSizeListener.java	(revision 660)
+++ 	(revision )
@@ -1,12 +1,0 @@
-package net.oni2.aeinstaller.gui.modtable;
-
-/**
- * @author Christian Illy
- */
-public interface DownloadSizeListener {
-	/**
-	 * @param newSize
-	 *            New size of files to download
-	 */
-	public void downloadSizeChanged(int newSize);
-}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModInstallSelectionListener.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModInstallSelectionListener.java	(revision 673)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModInstallSelectionListener.java	(revision 673)
@@ -0,0 +1,14 @@
+package net.oni2.aeinstaller.gui.modtable;
+
+/**
+ * @author Christian Illy
+ */
+public interface ModInstallSelectionListener {
+	/**
+	 * @param newSize
+	 *            New size of files to download
+	 * @param newCount
+	 *            New number of mods selected for installation
+	 */
+	public void modInstallSelectionChanged(int newSize, int newCount);
+}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 660)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 673)
@@ -38,4 +38,5 @@
 import net.oni2.aeinstaller.backend.packages.Package;
 import net.oni2.aeinstaller.backend.packages.Type;
+import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
 
 /**
@@ -173,5 +174,5 @@
 	 *            Listener to add
 	 */
-	public void addDownloadSizeListener(DownloadSizeListener listener) {
+	public void addDownloadSizeListener(ModInstallSelectionListener listener) {
 		model.addDownloadSizeListener(listener);
 	}
@@ -181,5 +182,5 @@
 	 *            Listener to remove
 	 */
-	public void removeDownloadSizeListener(DownloadSizeListener listener) {
+	public void removeDownloadSizeListener(ModInstallSelectionListener listener) {
 		model.removeDownloadSizeListener(listener);
 	}
@@ -332,4 +333,27 @@
 						});
 						popup.add(openDepotPage);
+					}
+
+					if (mod.getFile() != null) {
+						// Download package
+						JMenuItem downloadPackage = new JMenuItem(
+								bundle.getString("downloadPackage.text"));
+						downloadPackage.addActionListener(new ActionListener() {
+							@Override
+							public void actionPerformed(ActionEvent arg0) {
+								TreeSet<Package> toDo = new TreeSet<Package>();
+								TreeSet<Package> deps = new TreeSet<Package>();
+								toDo.add(mod);
+								Downloader dl = new Downloader(toDo, deps);
+								try {
+									dl.setVisible(true);
+								} finally {
+									dl.dispose();
+								}
+								invalidate();
+								repaint();
+							}
+						});
+						popup.add(downloadPackage);
 					}
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 660)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 673)
@@ -29,5 +29,5 @@
 	private Vector<Boolean> install = new Vector<Boolean>();
 
-	private HashSet<DownloadSizeListener> listeners = new HashSet<DownloadSizeListener>();
+	private HashSet<ModInstallSelectionListener> listeners = new HashSet<ModInstallSelectionListener>();
 
 	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -210,8 +210,12 @@
 	public void revertSelection() {
 		install.clear();
+		int count = 0;
 		for (int i = 0; i < items.size(); i++) {
-			install.add(i, items.get(i).isInstalled());
-		}
-		notifyDownloadSize(0);
+			boolean installed = items.get(i).isInstalled();
+			install.add(i, installed);
+			if (installed)
+				count++;
+		}
+		notifyDownloadSize(0, count);
 		fireTableDataChanged();
 	}
@@ -262,7 +266,7 @@
 	}
 
-	private void notifyDownloadSize(int size) {
-		for (DownloadSizeListener dsl : listeners)
-			dsl.downloadSizeChanged(size);
+	private void notifyDownloadSize(int size, int count) {
+		for (ModInstallSelectionListener dsl : listeners)
+			dsl.modInstallSelectionChanged(size, count);
 	}
 
@@ -274,6 +278,8 @@
 
 			int size = 0;
+			int count = 0;
 			for (int i = 0; i < items.size(); i++) {
 				if (install.get(i)) {
+					count++;
 					Package m = items.get(i);
 					if (!m.isLocalAvailable())
@@ -281,5 +287,5 @@
 				}
 			}
-			notifyDownloadSize(size);
+			notifyDownloadSize(size, count);
 		}
 	}
@@ -289,5 +295,5 @@
 	 *            Listener to receive download size changed events
 	 */
-	public void addDownloadSizeListener(DownloadSizeListener lis) {
+	public void addDownloadSizeListener(ModInstallSelectionListener lis) {
 		listeners.add(lis);
 	}
@@ -297,5 +303,5 @@
 	 *            Listener to no longer receive download size changed events
 	 */
-	public void removeDownloadSizeListener(DownloadSizeListener lis) {
+	public void removeDownloadSizeListener(ModInstallSelectionListener lis) {
 		listeners.remove(lis);
 	}
