Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 655)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 658)
@@ -1,16 +1,10 @@
 package net.oni2.aeinstaller.gui.toolmanager;
 
-import java.awt.Dimension;
-import java.awt.Insets;
 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;
 import java.util.TreeSet;
 
 import javax.swing.AbstractAction;
-import javax.swing.DefaultListModel;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
@@ -18,20 +12,17 @@
 import javax.swing.JComponent;
 import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JList;
 import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
 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.Settings;
-import net.oni2.aeinstaller.backend.SizeFormatter;
+import net.oni2.aeinstaller.backend.oni.Installer;
 import net.oni2.aeinstaller.backend.packages.Package;
-import net.oni2.aeinstaller.backend.packages.PackageManager;
-import net.oni2.aeinstaller.backend.oni.Installer;
-import net.oni2.aeinstaller.gui.HTMLLinkLabel;
 import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
+import net.oni2.aeinstaller.gui.modtable.ModSelectionListener;
+import net.oni2.aeinstaller.gui.modtable.ModTable;
+import net.oni2.aeinstaller.gui.modtable.ModTable.ETableContentType;
+import net.oni2.aeinstaller.gui.packageinfobox.PackageInfoBox;
 
 import org.javabuilders.BuildResult;
@@ -41,5 +32,5 @@
  * @author Christian Illy
  */
-public class ToolManager extends JDialog implements ListSelectionListener {
+public class ToolManager extends JDialog implements ModSelectionListener {
 	private static final long serialVersionUID = 343221630538866384L;
 
@@ -52,15 +43,8 @@
 	private JSplitPane contents;
 
-	private JList lstTools;
+	private JScrollPane scrollTools;
+	private ModTable tblTools;
 
-	private JLabel lblTitleVal;
-	private JLabel lblCreatorVal;
-	private JLabel lblPlatformVal;
-	private JLabel lblPackageNumberVal;
-	private JLabel lblVersionNumberVal;
-	private JLabel lblLastChangeVal;
-	private HTMLLinkLabel lblDescriptionVal;
-	private JLabel lblDownloadSizeVal;
-
+	private PackageInfoBox pkgInfo;
 	private JButton btnInstall;
 
@@ -68,5 +52,5 @@
 	private Icon icoUninstall = null;
 
-	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+	private Package selectedPackage = null;
 
 	/**
@@ -74,6 +58,4 @@
 	 */
 	public ToolManager() {
-		setMinimumSize(new Dimension(getWidth() + 100, getHeight() + 100));
-
 		AbstractAction closeAction = new AbstractAction() {
 
@@ -91,15 +73,12 @@
 		getRootPane().getActionMap().put("close", closeAction);
 
-		contents.setDividerLocation(200);
+		contents.setDividerLocation(550);
 		contents.setResizeWeight(0.4);
 
-		lstTools.addListSelectionListener(this);
-		lstTools.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		tblTools = new ModTable(ETableContentType.TOOLS);
+		tblTools.reloadData();
+		scrollTools.setViewportView(tblTools);
 
-		DefaultListModel dlm = new DefaultListModel();
-		TreeMap<String, Package> tools = PackageManager.getInstance().getTools();
-		for (String name : tools.keySet())
-			dlm.addElement(tools.get(name));
-		lstTools.setModel(dlm);
+		tblTools.addModSelectionListener(this);
 
 		icoInstall = new ImageIcon(getClass().getResource(
@@ -109,19 +88,15 @@
 
 		setLocationRelativeTo(null);
-		lblDescriptionVal.setMargin(new Insets(-15, 0, 0, 0));
 	}
 
 	@SuppressWarnings("unused")
 	private void install() {
-		Object o = lstTools.getSelectedValue();
-		if (o instanceof Package) {
-			Package theMod = (Package) o;
-
-			if (theMod.isInstalled()) {
+		if (selectedPackage != null) {
+			if (selectedPackage.isInstalled()) {
 				TreeSet<Package> tools = new TreeSet<Package>();
-				tools.add(theMod);
+				tools.add(selectedPackage);
 				Installer.uninstallTools(tools);
 			} else {
-				if (!theMod.isLocalAvailable()) {
+				if (!selectedPackage.isLocalAvailable()) {
 					if (Settings.getInstance().isOfflineMode()) {
 						JOptionPane.showMessageDialog(this,
@@ -133,5 +108,5 @@
 
 					TreeSet<Package> toDownload = new TreeSet<Package>();
-					toDownload.add(theMod);
+					toDownload.add(selectedPackage);
 
 					Downloader dl = new Downloader(toDownload, null);
@@ -146,38 +121,19 @@
 
 				TreeSet<Package> tools = new TreeSet<Package>();
-				tools.add(theMod);
+				tools.add(selectedPackage);
 				Installer.installTools(tools);
 			}
 		}
-		valueChanged(null);
+		modSelectionChanged(tblTools, selectedPackage);
 	}
 
 	@Override
-	public void valueChanged(ListSelectionEvent evt) {
-		lblTitleVal.setText("");
-		lblCreatorVal.setText("");
-		lblDescriptionVal.setText("");
-		lblPlatformVal.setText("");
-		lblPackageNumberVal.setText("");
-		lblVersionNumberVal.setText("");
-		lblLastChangeVal.setText("");
-		lblDownloadSizeVal.setText("");
-		btnInstall.setEnabled(false);
-		btnInstall.setIcon(icoInstall);
+	public void modSelectionChanged(ModTable source, Package mod) {
+		selectedPackage = mod;
 
-		if (lstTools.getSelectedValue() instanceof Package) {
-			Package m = (Package) lstTools.getSelectedValue();
-			lblTitleVal.setText(m.getName());
-			lblCreatorVal.setText(m.getCreator());
-			lblDescriptionVal.setText(m.getDescription());
-			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));
+		pkgInfo.updateInfo(mod);
+		if (mod != null) {
 			btnInstall.setEnabled(true);
-			if (m.isInstalled()) {
+			if (mod.isInstalled()) {
 				btnInstall.setText(bundle.getString("btnInstall.un.text"));
 				btnInstall.setToolTipText(bundle
@@ -188,4 +144,5 @@
 				btnInstall.setToolTipText(bundle
 						.getString("btnInstall.tooltip"));
+				btnInstall.setIcon(icoInstall);
 			}
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 655)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.yml	(revision 658)
@@ -2,5 +2,5 @@
   name: frame
   title: frame.title
-  size: packed
+  size: 950x600
   locationRelativeTo: null
   defaultCloseOperation: disposeOnClose
@@ -10,39 +10,15 @@
     - JSplitPane(name=contents, orientation=horizontalSplit, continuousLayout=true):
         - JPanel(name=panTools):
-            - JScrollPane(name=scrollTools, vScrollBar=always, hScrollBar=asNeeded):
-                JList(name=lstTools)
+            - JScrollPane(name=scrollTools, vScrollBar=always, hScrollBar=never)
             - 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=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)
+            - PackageInfoBox(name=pkgInfo)
             - JButton(name=btnInstall, icon=img.install, text=btnInstall.text, toolTipText=btnInstall.tooltip, enabled=false, onAction=[install])
             - MigLayout: |
-                 [min]             [grow]
-                 >lblTitle         lblTitleVal         [min]
-                 >lblCreator       lblCreatorVal       [min]
-                 >lblPlatform      lblPlatformVal      [min]
-                 >lblPackageNumber lblPackageNumberVal [min]
-                 >lblVersionNumber lblVersionNumberVal [min]
-                 >lblLastChange    lblLastChangeVal    [min]
-                 >^lblDescription  scrollDescription   [grow]
-                 >lblDownloadSize  lblDownloadSizeVal  [min]
-                 >btnInstall+*<                        [min]
+                 [grow]
+                 pkgInfo        [grow]
+                 >btnInstall<   [min]
     - MigLayout: |
          [grow]
