Index: /AE/installer2/locales/net/oni2/aeinstaller/localization/MainWin_de.properties
===================================================================
--- /AE/installer2/locales/net/oni2/aeinstaller/localization/MainWin_de.properties	(revision 656)
+++ /AE/installer2/locales/net/oni2/aeinstaller/localization/MainWin_de.properties	(revision 657)
@@ -33,4 +33,5 @@
 menu.manageToolsTooltip=Installiere/Entferne Tools
 
+btnUnSelectAll.text=Alle an/abwählen
 btnRevertSelection.text=Auswahl zurücksetzen
 btnRevertSelection.tooltip=Wähle Mods, die zur Zeit installiert sind
Index: /AE/installer2/locales/net/oni2/aeinstaller/localization/ModTable_de.properties
===================================================================
--- /AE/installer2/locales/net/oni2/aeinstaller/localization/ModTable_de.properties	(revision 656)
+++ /AE/installer2/locales/net/oni2/aeinstaller/localization/ModTable_de.properties	(revision 657)
@@ -4,4 +4,5 @@
 mod.creator=Entwickler
 mod.state=Status
+mod.added=Hinzugefügt
 mod.date=Letzte Änderung
 
@@ -14,2 +15,9 @@
 openModFolder.text=Ordner des Mods öffnen
 openDepotPage.text=Depot-Seite des Mods im Browser öffnen
+deletePackage.text=Lösche lokales Paket
+
+deletePackageLocalOnly.title=Nur lokal vorhandenes Paket
+deletePackageLocalOnly.text=Dieses Paket scheint nicht im Depot zu existieren.\nLöschen dieses Paketes im AEI ist aus Sicherheitsgründen verboten.
+
+deletePackageConfirm.title=Paketverzeichnis löschen
+deletePackageConfirm.text=Willst du das heruntergeladene Paket wirklich löschen?
Index: /AE/installer2/setup_win/AEI_no_jre.iss
===================================================================
--- /AE/installer2/setup_win/AEI_no_jre.iss	(revision 656)
+++ /AE/installer2/setup_win/AEI_no_jre.iss	(revision 657)
@@ -1,4 +1,4 @@
 #define AppId "{{B67333BB-1CF9-4EFD-A40B-E25B5CB4C8A7}}"
-#define AppVersion "0.99f"
+#define AppVersion "0.99h"
 #define AppLongName "Anniversary Edition of Oni"
 #define AppShortName "AEInstaller"
Index: /AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 657)
@@ -1,2 +1,2 @@
 appname=AE Installer 2
-appversion=0.99h
+appversion=0.99i
Index: /AE/installer2/src/net/oni2/aeinstaller/Images.properties
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/Images.properties	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/Images.properties	(revision 657)
@@ -15,4 +15,5 @@
 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.unSelect16=/net/oni2/aeinstaller/images/open_icon_library/select-2.png
 
 img.ae=/net/oni2/aeinstaller/images/AElogo.png
Index: /AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java	(revision 657)
@@ -267,4 +267,5 @@
 			}
 		}
+		
 		combineBinaryFiles(foldersOni, listener, log);
 		combineBSLFolders(mods, listener, log);
Index: /AE/installer2/src/net/oni2/aeinstaller/backend/packages/Package.java
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/backend/packages/Package.java	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/backend/packages/Package.java	(revision 657)
@@ -11,4 +11,6 @@
 import java.net.URISyntaxException;
 import java.util.HashSet;
+
+import org.apache.commons.io.FileUtils;
 
 import net.oni2.aeinstaller.backend.Paths;
@@ -82,4 +84,17 @@
 	}
 
+	private void clearLocalOnlyInfo() {
+		aeVersion = 0;
+		bslInstallType = EBSLInstallType.NORMAL;
+
+		dependencies = new HashSet<Integer>();
+		incompatibilities = new HashSet<Integer>();
+		unlockLevel = new HashSet<Integer>();
+
+		exeFile = null;
+		workingDir = null;
+		iconFile = null;
+	}
+
 	/**
 	 * Update information for local package existence
@@ -109,4 +124,5 @@
 			iconFile = mi.getIconFile();
 		} else {
+			clearLocalOnlyInfo();
 			System.err.println("No config found for mod folder: "
 					+ getLocalPath().getPath());
@@ -311,4 +327,11 @@
 
 	/**
+	 * @return Get the depot Node
+	 */
+	public NodeMod getNode() {
+		return node;
+	}
+
+	/**
 	 * @return Depot page URI
 	 */
@@ -398,4 +421,18 @@
 	}
 
+	/**
+	 * Delete the local package folder
+	 */
+	public void deleteLocalPackage() {
+		if (getLocalPath().exists()) {
+			try {
+				FileUtils.deleteDirectory(getLocalPath());
+				updateLocalData();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
 	@Override
 	public int compareTo(Package o) {
Index: /AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 657)
@@ -145,5 +145,5 @@
 		tblMods.addModSelectionListener(this);
 		tblMods.addDownloadSizeListener(this);
-		
+
 		lblDescriptionVal.setMargin(new Insets(-15, 0, 0, 0));
 	}
@@ -174,5 +174,6 @@
 	@DoInBackground(progressMessage = "updateDepot.title", cancelable = false, indeterminateProgress = false)
 	private void execDepotUpdate(final BackgroundEvent evt) {
-		if (!Settings.getInstance().isOfflineMode() && !Settings.getInstance().isNoCacheUpdateMode()) {
+		if (!Settings.getInstance().isOfflineMode()
+				&& !Settings.getInstance().isNoCacheUpdateMode()) {
 			long start = new Date().getTime();
 
@@ -200,11 +201,15 @@
 			if (Settings.getInstance().isOfflineMode()) {
 				if (evtSource != this) {
-					JOptionPane.showMessageDialog(this,
-							bundle.getString("offlineMode.text"),
-							bundle.getString("offlineMode.title"),
+					JOptionPane.showMessageDialog(
+							this,
+							SwingJavaBuilder.getConfig().getResource(
+									"offlineMode.text"),
+							SwingJavaBuilder.getConfig().getResource(
+									"offlineMode.title"),
 							JOptionPane.WARNING_MESSAGE);
 				}
 			} else {
-				TreeSet<Package> mods = PackageManager.getInstance().getUpdatableMods();
+				TreeSet<Package> mods = PackageManager.getInstance()
+						.getUpdatableMods();
 				TreeSet<Package> tools = PackageManager.getInstance()
 						.getUpdatableTools();
@@ -447,4 +452,9 @@
 		tblMods.revertSelection();
 	}
+	
+	@SuppressWarnings("unused")
+	private void unSelectAll() {
+		tblMods.unSelectAll();
+	}
 
 	@DoInBackground(progressMessage = "checkCorePackages.title", cancelable = false, indeterminateProgress = false)
@@ -482,8 +492,6 @@
 				}
 			}
-			evt.setProgressMessage(bundle
-					.getString("coreToolsInstall.title"));
-			Installer
-					.installTools(PackageManager.getInstance().getCoreTools());
+			evt.setProgressMessage(bundle.getString("coreToolsInstall.title"));
+			Installer.installTools(PackageManager.getInstance().getCoreTools());
 		}
 	}
@@ -520,5 +528,5 @@
 					toDownload.add(m);
 			}
-			if (Settings.getInstance().isOfflineMode()) {
+			if (toDownload.size() > 0 && Settings.getInstance().isOfflineMode()) {
 				installState = EInstallState.OFFLINE;
 				break;
@@ -536,6 +544,6 @@
 				}
 			}
-			HashMap<Package, HashSet<Package>> dependencies = PackageManager.getInstance()
-					.checkDependencies(mods);
+			HashMap<Package, HashSet<Package>> dependencies = PackageManager
+					.getInstance().checkDependencies(mods);
 			if (dependencies.size() > 0) {
 				for (HashSet<Package> hm : dependencies.values()) {
@@ -681,7 +689,10 @@
 				break;
 			case OFFLINE:
-				JOptionPane.showMessageDialog(this,
-						bundle.getString("offlineMode.text"),
-						bundle.getString("offlineMode.title"),
+				JOptionPane.showMessageDialog(
+						this,
+						SwingJavaBuilder.getConfig().getResource(
+								"offlineMode.text"),
+						SwingJavaBuilder.getConfig().getResource(
+								"offlineMode.title"),
 						JOptionPane.WARNING_MESSAGE);
 				break;
Index: /AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 657)
@@ -59,4 +59,5 @@
             - JScrollPane(name=scrollMods, vScrollBar=always, hScrollBar=never):
                 ModTable(name=tblMods, visible=false)
+            - JButton(name=btnUnSelectAll, icon=img.unSelect16, text=btnUnSelectAll.text, onAction=[unSelectAll])
             - 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,installExec,installDone])
@@ -65,9 +66,9 @@
             - MigLayout: |
                  [grow]
-                 lblModTypes<,cmbModTypes               [min]
-                 lblShowOnly<,radAll,radOnline,radLocal [min]
-                 scrollMods                             [grow]
-                 >btnRevertSelection,btnInstall         [min]
-                 lblDownloadSize,lblDownloadSizeVal     [min]
+                 lblModTypes<,cmbModTypes                        [min]
+                 lblShowOnly<,radAll,radOnline,radLocal          [min]
+                 scrollMods                                      [grow]
+                 >btnUnSelectAll,>btnRevertSelection,btnInstall  [min]
+                 lblDownloadSize,lblDownloadSizeVal              [min]
         - JPanel(name=panInfo):
             - JLabel(name=lblTitle, text=lblTitle.text)
Index: /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 657)
@@ -19,4 +19,5 @@
 import javax.swing.JComponent;
 import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
 import javax.swing.JPopupMenu;
 import javax.swing.JTable;
@@ -42,8 +43,28 @@
 			.getBundle("net.oni2.aeinstaller.localization.ModTable");
 
+	/**
+	 * @author Christian Illy
+	 */
+	public enum ETableContentType {
+		/**
+		 * Table showing mods
+		 */
+		MODS,
+		/**
+		 * Table showing tools
+		 */
+		TOOLS,
+		/**
+		 * Table showing core packages
+		 */
+		CORE
+	};
+
 	private HashSet<ModSelectionListener> modSelListeners = new HashSet<ModSelectionListener>();
 
 	private ModTableModel model;
 	private TableRowSorter<ModTableModel> sorter;
+
+	private ETableContentType contentType = ETableContentType.MODS;
 
 	/**
@@ -186,5 +207,6 @@
 	 */
 	public void setFilter(Type type, int downloadState) {
-		sorter.setRowFilter(new ModTableFilter(type, downloadState));
+		sorter.setRowFilter(new ModTableFilter(type, downloadState,
+				contentType == ETableContentType.CORE, false));
 	}
 
@@ -203,4 +225,27 @@
 			}
 		}
+	}
+
+	/**
+	 * Select/Unselect all currently visible items depending on the current
+	 * state of selection
+	 */
+	public void unSelectAll() {
+		boolean isAll = true;
+		for (int i = 0; i < getRowCount(); i++) {
+			int modRow = convertRowIndexToModel(i);
+			boolean inst = (Boolean) model.getValueAt(modRow, 0);
+			if (!inst) {
+				isAll = false;
+				break;
+			}
+		}
+
+		for (int i = 0; i < getRowCount(); i++) {
+			int modRow = convertRowIndexToModel(i);
+			model.setValueAt(!isAll, modRow, 0);
+		}
+		invalidate();
+		repaint();
 	}
 
@@ -267,4 +312,36 @@
 					}
 
+					if (mod.isLocalAvailable()
+							&& contentType != ETableContentType.CORE) {
+						// Delete package folder item
+						JMenuItem deleteModFolder = new JMenuItem(
+								bundle.getString("deletePackage.text"));
+						deleteModFolder.addActionListener(new ActionListener() {
+							@Override
+							public void actionPerformed(ActionEvent arg0) {
+								if (mod.getNode() == null) {
+									JOptionPane.showMessageDialog(
+											null,
+											bundle.getString("deletePackageLocalOnly.text"),
+											bundle.getString("deletePackageLocalOnly.title"),
+											JOptionPane.INFORMATION_MESSAGE);
+								} else {
+									int res = JOptionPane.showConfirmDialog(
+											null,
+											bundle.getString("deletePackageConfirm.text"),
+											bundle.getString("deletePackageConfirm.title"),
+											JOptionPane.YES_NO_OPTION,
+											JOptionPane.WARNING_MESSAGE);
+									if (res == JOptionPane.YES_OPTION) {
+										mod.deleteLocalPackage();
+										invalidate();
+										repaint();
+									}
+								}
+							}
+						});
+						popup.add(deleteModFolder);
+					}
+
 					if (popup.getSubElements().length > 0)
 						popup.show(e.getComponent(), e.getX(), e.getY());
Index: /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableFilter.java
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableFilter.java	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableFilter.java	(revision 657)
@@ -13,4 +13,7 @@
 	private int downloadState = 0;
 
+	private boolean showCorePackages = false;
+	private boolean showInvalidPlatform = false;
+
 	/**
 	 * @param type
@@ -18,9 +21,16 @@
 	 * @param downloadState
 	 *            Show only: 0 = all, 1 = online, 2 = downloaded
+	 * @param showCorePackages
+	 *            Show core packages in table
+	 * @param showInvalidPlatform
+	 *            Show packages not valid on this platform
 	 */
-	public ModTableFilter(Type type, int downloadState) {
+	public ModTableFilter(Type type, int downloadState,
+			boolean showCorePackages, boolean showInvalidPlatform) {
 		super();
 		this.type = type;
 		this.downloadState = downloadState;
+		this.showCorePackages = showCorePackages;
+		this.showInvalidPlatform = showInvalidPlatform;
 	}
 
@@ -28,10 +38,11 @@
 	public boolean include(
 			RowFilter.Entry<? extends ModTableModel, ? extends Integer> entry) {
-		Package mod = (Package) entry.getModel().getValueAt(entry.getIdentifier(), -1);
-		
-		if (mod.isCorePackage())
+		Package mod = (Package) entry.getModel().getValueAt(
+				entry.getIdentifier(), -1);
+
+		if (mod.isCorePackage() && !showCorePackages)
 			return false;
 
-		if (!mod.isValidOnPlatform())
+		if (!mod.isValidOnPlatform() && !showInvalidPlatform)
 			return false;
 
@@ -47,5 +58,5 @@
 				break;
 		}
-		
+
 		return result;
 	}
Index: /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 657)
@@ -60,4 +60,10 @@
 				return res;
 			case 5:
+				if (mod.getNode() != null)
+					return sdf.format(new Date(
+							mod.getNode().getCreated() * 1000));
+				else
+					return null;
+			case 6:
 				if (mod.getFile() != null)
 					return sdf.format(new Date(
@@ -83,4 +89,6 @@
 				return bundle.getString("mod.state");
 			case 5:
+				return bundle.getString("mod.added");
+			case 6:
 				return bundle.getString("mod.date");
 		}
@@ -95,5 +103,5 @@
 	@Override
 	public int getColumnCount() {
-		return 6;
+		return 7;
 	}
 
@@ -112,4 +120,6 @@
 				return String.class;
 			case 5:
+				return String.class;
+			case 6:
 				return String.class;
 		}
@@ -153,5 +163,11 @@
 				break;
 			case 5:
-				w = 115;
+				w = 100;
+				col.setPreferredWidth(w);
+				col.setMinWidth(w);
+				col.setMaxWidth(w);
+				break;
+			case 6:
+				w = 100;
 				col.setPreferredWidth(w);
 				col.setMinWidth(w);
Index: /AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 657)
@@ -33,4 +33,5 @@
 menu.manageToolsTooltip=Install/Remove Tools
 
+btnUnSelectAll.text=(Un)select all
 btnRevertSelection.text=Revert selection
 btnRevertSelection.tooltip=Select mods which are currently installed
Index: /AE/installer2/src/net/oni2/aeinstaller/localization/ModTable.properties
===================================================================
--- /AE/installer2/src/net/oni2/aeinstaller/localization/ModTable.properties	(revision 656)
+++ /AE/installer2/src/net/oni2/aeinstaller/localization/ModTable.properties	(revision 657)
@@ -4,4 +4,5 @@
 mod.creator=Creator
 mod.state=State
+mod.added=Added
 mod.date=Last change
 
@@ -14,2 +15,9 @@
 openModFolder.text=Open mod folder
 openDepotPage.text=Open Depot page in browser
+deletePackage.text=Delete package locally
+
+deletePackageLocalOnly.title=Local only package
+deletePackageLocalOnly.text=This package seems not to be on the Depot.\nFor security reasons deleting this package through the AEI is forbidden.
+
+deletePackageConfirm.title=Delete package folder
+deletePackageConfirm.text=Do you really want to delete the downloaded package?
