Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 640)
@@ -1,2 +1,2 @@
 appname=AE Installer 2
-appversion=0.96
+appversion=0.97
Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 640)
@@ -40,6 +40,6 @@
 	private static ResourceBundle basicBundle = ResourceBundle
 			.getBundle("net.oni2.aeinstaller.AEInstaller");
-	private static ResourceBundle startupBundle = ResourceBundle
-			.getBundle("net.oni2.aeinstaller.localization.Startup");
+	private static ResourceBundle globalBundle = ResourceBundle
+			.getBundle("net.oni2.aeinstaller.localization.Global");
 
 	private static Application app = null;
@@ -93,5 +93,5 @@
 		SwingJavaBuilder.getConfig().addResourceBundle(imagesBundle);
 		SwingJavaBuilder.getConfig().addResourceBundle(basicBundle);
-		SwingJavaBuilder.getConfig().addResourceBundle(startupBundle);
+		SwingJavaBuilder.getConfig().addResourceBundle(globalBundle);
 		SwingJavaBuilder.getConfig().setMarkInvalidResourceBundleKeys(true);
 		SwingJavaBuilder.getConfig().addType("JToolBarSeparator",
@@ -164,5 +164,5 @@
 					dlUrl = "http://www.go-mono.com/mono-downloads/download.html";
 			}
-			hll.setText(startupBundle
+			hll.setText(globalBundle
 					.getString("dotNetMissing.text")
 					.replaceAll(
@@ -170,5 +170,5 @@
 							String.format("<a href=\"%s\">%s</a>", dlUrl, dlUrl)));
 			JOptionPane.showMessageDialog(null, hll,
-					startupBundle.getString("dotNetMissing.title"),
+					globalBundle.getString("dotNetMissing.title"),
 					JOptionPane.ERROR_MESSAGE);
 			return;
@@ -177,6 +177,6 @@
 		if (!Installer.verifyRunningDirectory()) {
 			JOptionPane.showMessageDialog(null,
-					startupBundle.getString("invalidPath.text"),
-					startupBundle.getString("invalidPath.title"),
+					globalBundle.getString("invalidPath.text"),
+					globalBundle.getString("invalidPath.title"),
 					JOptionPane.ERROR_MESSAGE);
 			if (!Settings.isDebug()) {
@@ -188,6 +188,6 @@
 		if (offline) {
 			JOptionPane.showMessageDialog(null,
-					startupBundle.getString("offlineMode.text"),
-					startupBundle.getString("offlineMode.title"),
+					globalBundle.getString("offlineMode.text"),
+					globalBundle.getString("offlineMode.title"),
 					JOptionPane.INFORMATION_MESSAGE);
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/Mod.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/Mod.java	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/Mod.java	(revision 640)
@@ -19,4 +19,5 @@
 import net.oni2.aeinstaller.backend.depot.model.NodeMod;
 import net.oni2.aeinstaller.backend.depot.model.TaxonomyTerm;
+import net.oni2.aeinstaller.backend.oni.Installer;
 
 /**
@@ -205,5 +206,8 @@
 	 */
 	public boolean isInstalled() {
-		return ModManager.getInstance().isModInstalled(this);
+		if (tool)
+			return Installer.getInstalledTools().contains(packageNumber);
+		else
+			return ModManager.getInstance().isModInstalled(this);
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java	(revision 640)
@@ -126,5 +126,8 @@
 				m.getTypes().add(localType);
 			}
-			mods.put(m.getPackageNumber(), m);
+			if (m.isTool())
+				tools.put(m.getPackageNumber(), m);
+			else
+				mods.put(m.getPackageNumber(), m);
 		}
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 640)
@@ -122,5 +122,5 @@
 				+ SwingJavaBuilder.getConfig().getResource("appversion"));
 
-		setSize(getWidth()+150, getHeight());
+		setSize(getWidth() + 150, getHeight());
 		contents.setDividerLocation(500);
 		contents.setResizeWeight(0.4);
@@ -384,8 +384,20 @@
 		toolsMenuItems.clear();
 		for (Mod m : ModManager.getInstance().getInstalledTools()) {
-			if (m.getExeFile() != null && m.getExeFile().exists()) {
+			File exe = m.getExeFile();
+			if (exe != null && exe.exists()) {
 				JMenuItem item = new JMenuItem();
 				final Vector<String> params = new Vector<String>();
-				params.add(m.getExeFile().getPath());
+				if (exe.getName().toLowerCase().endsWith(".jar")) {
+					File jre = null;
+					if (Settings.getPlatform() == Platform.WIN)
+						jre = new File(System.getProperties().getProperty(
+								"java.home"), "bin/javaw.exe");
+					else
+						jre = new File(System.getProperties().getProperty(
+								"java.home"), "bin/java");
+					params.add(jre.getPath());
+					params.add("-jar");
+				}
+				params.add(exe.getPath());
 				final File wd = m.getWorkingDir();
 				Icon ico = null;
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 640)
@@ -6,4 +6,5 @@
 import java.util.ResourceBundle;
 import java.util.TreeMap;
+import java.util.TreeSet;
 
 import javax.swing.AbstractAction;
@@ -23,4 +24,5 @@
 import javax.swing.event.ListSelectionListener;
 
+import net.oni2.aeinstaller.backend.Settings;
 import net.oni2.aeinstaller.backend.SizeFormatter;
 import net.oni2.aeinstaller.backend.mods.Mod;
@@ -28,4 +30,5 @@
 import net.oni2.aeinstaller.backend.oni.Installer;
 import net.oni2.aeinstaller.gui.HTMLLinkLabel;
+import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
 
 import org.javabuilders.BuildResult;
@@ -45,7 +48,8 @@
 
 	private JSplitPane contents;
-	
+
 	private JList lstTools;
 
+	private JLabel lblTitleVal;
 	private JLabel lblSubmitterVal;
 	private JLabel lblCreatorVal;
@@ -101,15 +105,46 @@
 	@SuppressWarnings("unused")
 	private void install() {
-		// TODO: care for offline mode
-		JOptionPane.showMessageDialog(this, "install", "todo",
-				JOptionPane.INFORMATION_MESSAGE);
-	}
+		Object o = lstTools.getSelectedValue();
+		if (o instanceof Mod) {
+			Mod theMod = (Mod) o;
 
-	@SuppressWarnings("unused")
-	private void installDone() {
+			if (theMod.isInstalled()) {
+				TreeSet<Mod> tools = new TreeSet<Mod>();
+				tools.add(theMod);
+				Installer.uninstallTools(tools);
+			} else {
+				if (!theMod.isLocalAvailable()) {
+					if (Settings.getInstance().isOfflineMode()) {
+						JOptionPane.showMessageDialog(this,
+								bundle.getString("offlineMode.text"),
+								bundle.getString("offlineMode.title"),
+								JOptionPane.WARNING_MESSAGE);
+						return;
+					}
+
+					TreeSet<Mod> toDownload = new TreeSet<Mod>();
+					toDownload.add(theMod);
+
+					Downloader dl = new Downloader(toDownload);
+					try {
+						dl.setVisible(true);
+						if (!dl.isFinished())
+							return;
+					} finally {
+						dl.dispose();
+					}
+				}
+
+				TreeSet<Mod> tools = new TreeSet<Mod>();
+				tools.add(theMod);
+				Installer.installTools(tools);
+			}
+		}
+		valueChanged(null);
 	}
 
 	@Override
 	public void valueChanged(ListSelectionEvent evt) {
+		lblTitleVal.setText("");
 		lblSubmitterVal.setText("");
 		lblCreatorVal.setText("");
@@ -123,5 +158,6 @@
 		if (lstTools.getSelectedValue() instanceof Mod) {
 			Mod m = (Mod) lstTools.getSelectedValue();
-			lblSubmitterVal.setText(m.getName());
+			lblTitleVal.setText(m.getName());
+			lblSubmitterVal.setText(m.getSubmitter());
 			lblCreatorVal.setText(m.getCreator());
 			lblDescriptionVal.setText(m.getDescription());
@@ -130,5 +166,5 @@
 			lblDownloadSizeVal.setText(SizeFormatter.format(m.getZipSize(), 3));
 			btnInstall.setEnabled(true);
-			if (Installer.getInstalledTools().contains(m.getPackageNumber())) {
+			if (m.isInstalled()) {
 				btnInstall.setText(bundle.getString("btnInstall.un.text"));
 				btnInstall.setToolTipText(bundle
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 640)
@@ -16,4 +16,6 @@
                  scrollTools   [grow]
         - JPanel(name=panInfo):
+            - JLabel(name=lblTitle, text=lblTitle.text)
+            - JLabel(name=lblTitleVal)
             - JLabel(name=lblSubmitter, text=lblSubmitter.text)
             - JLabel(name=lblSubmitterVal)
@@ -29,7 +31,8 @@
             - JLabel(name=lblDownloadSize, text=lblDownloadSize.text)
             - JLabel(name=lblDownloadSizeVal)
-            - JButton(name=btnInstall, icon=img.install, text=btnInstall.text, toolTipText=btnInstall.tooltip, enabled=false, onAction=[install,installDone])
+            - JButton(name=btnInstall, icon=img.install, text=btnInstall.text, toolTipText=btnInstall.tooltip, enabled=false, onAction=[install])
             - MigLayout: |
                  [min]             [grow]
+                 >lblTitle         lblTitleVal         [min]
                  >lblSubmitter     lblSubmitterVal     [min]
                  >lblCreator       lblCreatorVal       [min]
Index: AE/installer2/src/net/oni2/aeinstaller/localization/Global.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/Global.properties	(revision 640)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/Global.properties	(revision 640)
@@ -0,0 +1,11 @@
+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.
+
+invalidPath.title=Wrong directory
+invalidPath.text=This program has to be placed in the subfolder Edition/AEInstaller inside a vanilla Oni folder.\nThe full path of the .jar-file has to be:\nOniFolder/Edition/AEInstaller/AEInstaller2.jar
+
+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/localization/MainWin.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties	(revision 640)
@@ -57,6 +57,4 @@
 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=The following mods and tools have newer versions on the Depot.<br>Check the packages you want to be updated.
Index: AE/installer2/src/net/oni2/aeinstaller/localization/Startup.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/Startup.properties	(revision 639)
+++ 	(revision )
@@ -1,8 +1,0 @@
-invalidPath.title=Wrong directory
-invalidPath.text=This program has to be placed in the subfolder Edition/AEInstaller inside a vanilla Oni folder.\nThe full path of the .jar-file has to be:\nOniFolder/Edition/AEInstaller/AEInstaller2.jar
-
-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/localization/ToolManager.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties	(revision 639)
+++ AE/installer2/src/net/oni2/aeinstaller/localization/ToolManager.properties	(revision 640)
@@ -6,4 +6,5 @@
 btnInstall.un.tooltip=Uninstall this tool
 
+lblTitle.text=Name:
 lblSubmitter.text=Submitter:
 lblCreator.text=Creator:
