Index: AE/installer2/.classpath
===================================================================
--- AE/installer2/.classpath	(revision 592)
+++ AE/installer2/.classpath	(revision 593)
@@ -19,4 +19,5 @@
 	<classpathentry kind="lib" path="lib/httpclient/commons-logging-1.1.1.jar"/>
 	<classpathentry kind="lib" path="lib/xstream-1.4.3.jar"/>
+	<classpathentry kind="lib" path="lib/macify.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: AE/installer2/doc/AEI1-stuff_onisplit-commands.txt
===================================================================
--- AE/installer2/doc/AEI1-stuff_onisplit-commands.txt	(revision 593)
+++ AE/installer2/doc/AEI1-stuff_onisplit-commands.txt	(revision 593)
@@ -0,0 +1,111 @@
+save current installed config
+
+install
+select all (only of current type?)
+revert - select mods that are currently installed
+
+
+globalization:
+
+installation:
+- remove current .dat/.raw/.sep from GDF
+- remove current BSL-folders?
+- combine vanilla+default-mods+selected-mods
+- combine BSL
+
+
+orig:
+globalization: installer.cpp/h - globalizeData() in #31
+installation: installer.cpp/h - recompileAll() in #500
+
+#ifdef WIN32
+	bool splitInstances = false;
+	string strImportOption = "-import:nosep";
+	string strOniSplit = "Onisplit.exe";
+#else
+	bool splitInstances = false;
+	string strImportOption = "-import:sep";
+	string strOniSplit = "mono Onisplit.exe";
+#endif
+
+
+
+
+check .net>2.0:
+bool CheckForRequiredSoftware(void)
+{
+#ifdef WIN32
+	// test for .NET 2.0 or higher
+	HKEY hKey;
+	if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\policy\\v2.0", 0L, KEY_READ , &hKey) == ERROR_SUCCESS)
+	{
+		string dotnetMsg = "You don't have .NET 2.0 installed! .NET is a framework required by the Edition.\n";
+		dotnetMsg = dotnetMsg + "You can download it from:\n" +
+								"http://gumby.oni2.net/dotnet\n" +
+								"Please install .NET 2.0, then open this Installer again.\n\n" +
+								"Would you like to open the download webpage?";
+		wxMessageDialog* DotNetDialogOfDeath = new wxMessageDialog(TheWindow, dotnetMsg.c_str(), "AE Installer Alert",
+																 wxYES_NO | wxICON_EXCLAMATION	, wxDefaultPosition);
+		if (DotNetDialogOfDeath->ShowModal() == wxID_YES)
+			system("start http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5");
+		RegCloseKey(hKey);
+		return false;
+	}
+#else // on Mac...
+	// test for the third-party "mono" framework, because without it, we are up a creek
+	FILE *fWhichMono = NULL;
+	char chrWhichMono[32];
+	fWhichMono = popen("which mono", "r");
+	fgets(chrWhichMono, sizeof(chrWhichMono), fWhichMono);
+	pclose(fWhichMono);
+	string strWhichMono = (string)chrWhichMono;
+	string::size_type loc = strWhichMono.find("mono", 0);
+	
+	if (loc == string::npos) // this means that "which mono" did not return a path leading to the mono binary -- abort! abort! abort!
+	{
+		string monoMsg = "You don't have 'mono' installed! 'mono' is a command-line tool required by the Edition.\n";
+		monoMsg = monoMsg + "You can download it from: http://www.go-mono.com/mono-downloads/download.html (OS X 10.4+)\n" +
+							"or http://edt.oni2.net/AE/MonoFramework10.3.dmg (OS X 10.3)\n\n" +
+							"Please install 'mono', then open this Installer again.";
+		wxMessageDialog* MonoDialogOfDeath = new wxMessageDialog(TheWindow, monoMsg.c_str(), "AE Installer Alert", wxOK | wxICON_EXCLAMATION, wxDefaultPosition);
+		MonoDialogOfDeath->ShowModal();
+		return false; // it's quittin' time, Joe
+	}
+#endif
+	return true;
+}
+
+
+
+check globalization:
+bool CheckForGlobalization(bool justDoIt)
+{
+	if (!exists("../GameDataFolder"))
+	{
+		string globMsg = "You haven't globalized yet!\n";
+		globMsg = globMsg + "You must globalize to use the Anniversary Edition framework.\n" +
+							"Would you like to globalize now? (This could take a while...)\n" +
+							"(Selecting \"No\" will exit this program...)";
+		wxMessageDialog* YesNoDialog = new wxMessageDialog(TheWindow, globMsg.c_str(), "AE Installer Alert", wxYES_NO | wxICON_EXCLAMATION, wxDefaultPosition);
+		
+		if (YesNoDialog->ShowModal() == wxID_NO) // if the user said no...
+		{
+			TheWindow->Close();
+			return true;
+		}
+	}
+	else if (!justDoIt)
+		return false;
+	// Code below this point runs if user clicks "Yes" or if they are never asked but justDoIt is true
+#ifdef WIN32
+	boost::thread thrd3(globalize2);
+#else // cannot use multi-threading in Mac build
+	TheWindow->InstallButton->Disable();
+	TheWindow->ReglobalizeButton->Disable();
+	globalizeData();
+	TheWindow->InstallButton->Enable();
+	TheWindow->ReglobalizeButton->Enable();
+#endif
+	
+	return true;
+}
Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties	(revision 593)
@@ -1,2 +1,5 @@
+appname=AE Installer 2
+appversion=0.32
+
 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
Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 593)
@@ -1,9 +1,13 @@
 package net.oni2.aeinstaller;
 
+import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.io.PrintStream;
+import java.net.URL;
 import java.util.ResourceBundle;
 
+import javax.imageio.ImageIO;
 import javax.swing.JFrame;
 import javax.swing.JOptionPane;
@@ -14,4 +18,5 @@
 
 import net.oni2.aeinstaller.backend.Settings;
+import net.oni2.aeinstaller.backend.Settings.Platform;
 import net.oni2.aeinstaller.backend.StuffToRefactorLater;
 import net.oni2.aeinstaller.backend.depot.DepotManager;
@@ -19,10 +24,35 @@
 
 import org.javabuilders.swing.SwingJavaBuilder;
+import org.simplericity.macify.eawt.Application;
+import org.simplericity.macify.eawt.DefaultApplication;
 
 /**
  * @author Christian Illy
- * @version 0.1
  */
 public class AEInstaller2 {
+
+	private static ResourceBundle imagesBundle = ResourceBundle
+			.getBundle(AEInstaller2.class.getPackage().getName() + ".Images");
+	private static ResourceBundle basicBundle = ResourceBundle
+			.getBundle(AEInstaller2.class.getPackage().getName()
+					+ ".AEInstaller");
+
+	private static Application app = null;
+
+	private static void initMacOS() {
+		System.setProperty("apple.laf.useScreenMenuBar", "true");
+		System.setProperty("com.apple.mrj.application.apple.menu.about.name",
+				basicBundle.getString("appname"));
+		app = new DefaultApplication();
+
+		URL icon = AEInstaller2.class.getResource("images/AElogo.png");
+		try {
+			BufferedImage img = ImageIO.read(icon);
+			app.setApplicationIconImage(img);
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
 
 	/**
@@ -49,15 +79,11 @@
 		}
 
+		if (Settings.getPlatform() == Platform.MACOS)
+			initMacOS();
+
 		Settings.deserializeFromFile();
 		Settings.setDebug(debug);
 		DepotManager.getInstance().loadFromFile(
 				new File(Settings.getDepotCacheFilename()));
-
-		ResourceBundle imagesBundle = ResourceBundle
-				.getBundle(AEInstaller2.class.getPackage().getName()
-						+ ".Images");
-		ResourceBundle basicBundle = ResourceBundle
-				.getBundle(AEInstaller2.class.getPackage().getName()
-						+ ".AEInstaller");
 
 		SwingJavaBuilder.getConfig().addResourceBundle(imagesBundle);
@@ -66,20 +92,20 @@
 		SwingJavaBuilder.getConfig().addType("JToolBarSeparator",
 				JToolBar.Separator.class);
-		// SwingJavaBuilder.getConfig().addType("ScreenshotBrowser",
-		// ScreenshotBrowser.class);
-		// SwingJavaBuilder.getConfig().addType("HTMLLinkLabel",
-		// HTMLLinkLabel.class);
 
 		System.setProperty("networkaddress.cache.ttl", "5");
 		System.setProperty("networkaddress.cache.negative.ttl", "1");
-
+		
 		try {
 			String laf = Settings.getInstance().get("lookandfeel",
 					(String) null);
 			if (laf == null) {
-				for (LookAndFeelInfo lafInfo : UIManager
-						.getInstalledLookAndFeels()) {
-					if (lafInfo.getName().equals("Nimbus"))
-						laf = lafInfo.getClassName();
+				if (Settings.getPlatform() == Platform.MACOS) {
+					laf = UIManager.getSystemLookAndFeelClassName();
+				} else {
+					for (LookAndFeelInfo lafInfo : UIManager
+							.getInstalledLookAndFeels()) {
+						if (lafInfo.getName().equals("Nimbus"))
+							laf = lafInfo.getClassName();
+					}
 				}
 			}
@@ -115,5 +141,13 @@
 			public void run() {
 				try {
-					new MainWin().setVisible(true);
+					MainWin mw = new MainWin();
+					if (app != null) {
+						app.addAboutMenuItem();
+						app.setEnabledAboutMenu(true);
+						app.addPreferencesMenuItem();
+						app.setEnabledPreferencesMenu(true);
+						app.addApplicationListener(mw);
+					}
+					mw.setVisible(true);
 				} catch (Exception e) {
 					e.printStackTrace();
Index: AE/installer2/src/net/oni2/aeinstaller/Images.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/Images.properties	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/Images.properties	(revision 593)
@@ -1,9 +1,6 @@
 img.connect=/net/oni2/aeinstaller/images/tango/network-idle.png
 img.disconnect=/net/oni2/aeinstaller/images/tango/network-offline.png
-img.exit=/net/oni2/aeinstaller/images/tango/system-log-out.png
 img.manageExams=/net/oni2/aeinstaller/images/tango/document-open.png
 img.manageMembers=/net/oni2/aeinstaller/images/tango/contact-new.png
-img.updatesvn=/net/oni2/aeinstaller/images/tango/view-refresh.png
-img.settings=/net/oni2/aeinstaller/images/tango/preferences-system.png
 img.print=/net/oni2/aeinstaller/images/tango/document-print.png
 img.edit=/net/oni2/aeinstaller/images/tango/text-editor.png
@@ -11,5 +8,4 @@
 img.add=/net/oni2/aeinstaller/images/tango/list-add.png
 img.refresh=/net/oni2/aeinstaller/images/tango/go-jump.png
-img.openFile=/net/oni2/aeinstaller/images/tango/document-open.png
 img.sale=/net/oni2/aeinstaller/images/tango/accessories-calculator.png
 img.orders=/net/oni2/aeinstaller/images/tango/bookmark-new.png
@@ -20,3 +16,13 @@
 img.downloadFolder=/net/oni2/aeinstaller/images/open_icon_library/folder-games.png
 
-img.kdt=/net/oni2/aeinstaller/images/kdt.png
+img.openFile=/net/oni2/aeinstaller/images/tango/document-open.png
+img.saveFile=/net/oni2/aeinstaller/images/tango/document-save-as.png
+img.settings=/net/oni2/aeinstaller/images/tango/preferences-system.png
+img.about=/net/oni2/aeinstaller/images/open_icon_library/help-about-3.png
+img.exit=/net/oni2/aeinstaller/images/tango/system-log-out.png
+img.undo=/net/oni2/aeinstaller/images/tango/edit-undo.png
+img.undo16=/net/oni2/aeinstaller/images/tango/edit-undo16.png
+img.redo=/net/oni2/aeinstaller/images/tango/edit-redo.png
+img.refresh=/net/oni2/aeinstaller/images/tango/view-refresh.png
+
+img.ae=/net/oni2/aeinstaller/images/AElogo.png
Index: AE/installer2/src/net/oni2/aeinstaller/gui/HTMLLinkLabel.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/HTMLLinkLabel.java	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/HTMLLinkLabel.java	(revision 593)
@@ -77,3 +77,4 @@
 		super.setText(prefix + t + suffix);
 	}
+
 }
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 593)
@@ -10,6 +10,9 @@
 
 import javax.swing.JComboBox;
+import javax.swing.JComponent;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JOptionPane;
 import javax.swing.JSplitPane;
 import javax.swing.JTable;
@@ -23,4 +26,5 @@
 
 import net.oni2.aeinstaller.backend.Settings;
+import net.oni2.aeinstaller.backend.Settings.Platform;
 import net.oni2.aeinstaller.backend.depot.DepotCacheUpdateProgressListener;
 import net.oni2.aeinstaller.backend.depot.DepotConfig;
@@ -29,4 +33,5 @@
 import net.oni2.aeinstaller.backend.depot.model.TaxonomyTerm;
 import net.oni2.aeinstaller.backend.depot.model.TaxonomyVocabulary;
+import net.oni2.aeinstaller.gui.about.AboutDialog;
 import net.oni2.aeinstaller.gui.modtable.ModTableFilter;
 import net.oni2.aeinstaller.gui.modtable.ModTableModel;
@@ -37,9 +42,11 @@
 import org.javabuilders.event.BackgroundEvent;
 import org.javabuilders.swing.SwingJavaBuilder;
+import org.simplericity.macify.eawt.ApplicationEvent;
+import org.simplericity.macify.eawt.ApplicationListener;
 
 /**
  * @author Christian Illy
  */
-public class MainWin extends JFrame {
+public class MainWin extends JFrame implements ApplicationListener {
 	private static final long serialVersionUID = -4027395051382659650L;
 
@@ -48,4 +55,6 @@
 	@SuppressWarnings("unused")
 	private BuildResult result = SwingJavaBuilder.build(this, bundle);
+
+	private JMenu mainMenu;
 
 	private JSplitPane contents;
@@ -66,10 +75,15 @@
 	 */
 	public MainWin() {
-		this.setTitle(bundle.getString("frame.title") + " - v"
-				+ bundle.getString("version"));
+		this.setTitle(SwingJavaBuilder.getConfig().getResource("appname")
+				+ " - v"
+				+ SwingJavaBuilder.getConfig().getResource("appversion"));
 
 		contents.setDividerLocation(400);
 		initTable();
 		initModTypeBox();
+
+		if (Settings.getPlatform() == Platform.MACOS) {
+			mainMenu.setVisible(false);
+		}
 	}
 
@@ -115,4 +129,8 @@
 				});
 
+		// To get checkbox-cells with background of row
+		((JComponent) tblMods.getDefaultRenderer(Boolean.class))
+				.setOpaque(true);
+
 		model = new ModTableModel();
 
@@ -148,5 +166,12 @@
 	}
 
-	@SuppressWarnings("unused")
+	private boolean askClose() {
+		int res = JOptionPane.showConfirmDialog(this,
+				bundle.getString("askClose.text"),
+				bundle.getString("askClose.title"), JOptionPane.YES_NO_OPTION,
+				JOptionPane.QUESTION_MESSAGE);
+		return res == JOptionPane.YES_OPTION;
+	}
+
 	private boolean closeFrames() {
 		System.gc();
@@ -158,5 +183,4 @@
 	}
 
-	@SuppressWarnings("unused")
 	private void exit() {
 		setVisible(false);
@@ -164,5 +188,4 @@
 	}
 
-	@SuppressWarnings("unused")
 	private void saveLocalData() {
 		Settings.getInstance().serializeToFile();
@@ -213,8 +236,41 @@
 	}
 
-	@SuppressWarnings("unused")
 	private void showSettings() {
-		SettingsDialog.openWindow();
-	}
+		new SettingsDialog().setVisible(true);
+	}
+
+	private void showAbout() {
+		new AboutDialog().setVisible(true);
+	}
+
+	@SuppressWarnings("unused")
+	private void loadConfig() {
+		// TODO Auto-generated method stub
+		JOptionPane.showMessageDialog(this, "loadConfig", "todo",
+				JOptionPane.INFORMATION_MESSAGE);
+	}
+
+	@SuppressWarnings("unused")
+	private void saveConfig() {
+		// TODO Auto-generated method stub
+		JOptionPane.showMessageDialog(this, "saveConfig", "todo",
+				JOptionPane.INFORMATION_MESSAGE);
+	}
+
+	@SuppressWarnings("unused")
+	private void reglobalize() {
+		// TODO Auto-generated method stub
+		JOptionPane.showMessageDialog(this, "reglobalize", "todo",
+				JOptionPane.INFORMATION_MESSAGE);
+	}
+	
+	@SuppressWarnings("unused")
+	private void revertSelection() {
+		// TODO Auto-generated method stub
+		JOptionPane.showMessageDialog(this, "revertSelection", "todo",
+				JOptionPane.INFORMATION_MESSAGE);
+	}
+	
+	
 
 	private void modSelection(NodeMod n) {
@@ -243,3 +299,42 @@
 			sorter.setRowFilter(new ModTableFilter(-1));
 	}
+
+	@Override
+	public void handleAbout(ApplicationEvent event) {
+		event.setHandled(true);
+		showAbout();
+	}
+
+	@Override
+	public void handleOpenApplication(ApplicationEvent event) {
+	}
+
+	@Override
+	public void handleOpenFile(ApplicationEvent event) {
+	}
+
+	@Override
+	public void handlePreferences(ApplicationEvent event) {
+		showSettings();
+	}
+
+	@Override
+	public void handlePrintFile(ApplicationEvent event) {
+	}
+
+	@Override
+	public void handleQuit(ApplicationEvent event) {
+		if (askClose()) {
+			event.setHandled(true);
+			closeFrames();
+			saveLocalData();
+			exit();
+		} else {
+			event.setHandled(false);
+		}
+	}
+
+	@Override
+	public void handleReOpenApplication(ApplicationEvent event) {
+	}
 }
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.properties	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.properties	(revision 593)
@@ -1,13 +1,24 @@
 # Main Frame
-frame.title=AE Installer 2
 buttonExit.title=Exit
-version=0.1
 
-menu.file=&Menu
+menu.main=&Main
 menu.settings=&Settings
 menu.settingsTooltip=Settings
+menu.about=&About
+menu.aboutTooltip=About
 menu.exit=&Exit\tCtrl+Q
 menu.exitTooltip=Exit
 
+menu.file=&File
+menu.loadConfig=&Load configuration...
+menu.loadConfigTooltip=Load configuration
+menu.saveConfig=&Save configuration...
+menu.saveConfigTooltip=Save configuration
+
+menu.reglobalize=&Rebuild Core Data
+menu.reglobalizeTooltip=Rebuild Core Data
+
+btnRevertSelection.text=Revert selection
+btnRevertSelection.tooltip=Select mods which are currently installed
 lblModTypes.text=Mod types: 
 
@@ -22,2 +33,5 @@
 updatesAvailable.title=Updates available
 updatesAvailable.text=Some mods have newer versions available.
+
+askClose.title=Confirm close request
+askClose.text=Are you sure you want to close the program?
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml	(revision 593)
@@ -1,5 +1,5 @@
 JFrame:
   name: frame
-  title: frame.title
+  title: appname
   size: 800x600
   minimumSize: 400x300
@@ -7,19 +7,31 @@
   defaultCloseOperation: doNothingOnClose
   onWindowOpened: [execDepotUpdate,checkUpdates,focus]
-  onWindowClosing: [$confirm,closeFrames,saveLocalData,exit]
-  iconImage: img.kdt
+  onWindowClosing: [askClose,closeFrames,saveLocalData,exit]
+  iconImage: img.ae
   content:
-    - Action(name=exitAction, text=menu.exit, toolTipText=menu.exitTooltip, icon=img.exit, onAction=[$confirm,closeFrames,saveLocalData,exit])
+    - Action(name=exitAction, text=menu.exit, toolTipText=menu.exitTooltip, icon=img.exit, onAction=[askClose,closeFrames,saveLocalData,exit])
     - Action(name=settings, text=menu.settings, toolTipText=menu.settingsTooltip, icon=img.settings, onAction=[showSettings])
+    - Action(name=about, text=menu.about, toolTipText=menu.aboutTooltip, icon=img.about, onAction=[showAbout])
+    - Action(name=loadConfig, text=menu.loadConfig, toolTipText=menu.loadConfigTooltip, icon=img.openFile, onAction=[loadConfig])
+    - Action(name=saveConfig, text=menu.saveConfig, toolTipText=menu.saveConfigTooltip, icon=img.saveFile, onAction=[saveConfig])
+    - Action(name=reglobalize, text=menu.reglobalize, toolTipText=menu.reglobalizeTooltip, icon=img.refresh, onAction=[reglobalize])
     - JMenuBar:
+        - JMenu(name=mainMenu, text=menu.main):
+            - JMenuItem(action=settings)
+            - JMenuItem(action=about)
+            - JMenuItem(action=exitAction)
         - JMenu(name=fileMenu, text=menu.file):
-            - JMenuItem(action=settings)
-            - JMenuItem(action=exitAction)
+            - JMenuItem(action=loadConfig)
+            - JMenuItem(action=saveConfig)
+            - JSeparator()
+            - JMenuItem(action=reglobalize)
     - JToolBar(name=tools, floatable=false, orientation=0):
         - JButton(action=exitAction, hideActionText=true)
         - JToolBarSeparator()
         - JButton(action=settings, hideActionText=true)
+        - JButton(action=about, hideActionText=true)
     - JSplitPane(name=contents, orientation=horizontalSplit, continuousLayout=true):
         - JPanel(name=panMods):
+            - JButton(name=btnRevertSelection, icon=img.undo16, text=btnRevertSelection.text, toolTipText=btnRevertSelection.tooltip, onAction=[revertSelection])
             - JLabel(name=lblModTypes, text=lblModTypes.text)
             - JComboBox(name=cmbModTypes, onAction=modTypeSelection)
@@ -28,4 +40,5 @@
             - MigLayout: |
                  [grow]
+                 btnRevertSelection                 [min]
                  lblModTypes<,cmbModTypes           [min]
                  scrollMods                         [grow]
Index: AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.java	(revision 593)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.java	(revision 593)
@@ -0,0 +1,59 @@
+package net.oni2.aeinstaller.gui.about;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.util.ResourceBundle;
+
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.KeyStroke;
+
+import net.oni2.aeinstaller.gui.HTMLLinkLabel;
+
+import org.javabuilders.BuildResult;
+import org.javabuilders.swing.SwingJavaBuilder;
+
+/**
+ * @author Christian Illy
+ */
+public class AboutDialog extends JDialog {
+	private static final long serialVersionUID = 1632257865019785612L;
+
+	private ResourceBundle bundle = ResourceBundle.getBundle(getClass()
+			.getName());
+	@SuppressWarnings("unused")
+	private BuildResult result = SwingJavaBuilder.build(this, bundle);
+
+	private JLabel lblAppversion;
+	private HTMLLinkLabel txtLinks;
+
+	/**
+	 * Open the dialog
+	 */
+	public AboutDialog() {
+		lblAppversion.setText("v"
+				+ SwingJavaBuilder.getConfig().getResource("appversion"));
+
+		txtLinks.setText(bundle.getString("Links"));
+
+		pack();
+
+		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);
+	}
+
+}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.properties	(revision 593)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.properties	(revision 593)
@@ -0,0 +1,11 @@
+frame.title=AE Installer: About
+btnClose=Close
+
+AEIBy=by Alloc, Iritscen and Gumby
+
+panAE=AE Credits:
+AENames=<html>Demos_Kratos:<br>EdT:<br>Geyser:<br>Gumby:<br>Iritscen:<br>Loser:<br>Neo:<br>Paradox:<br>RossyMiles:<br>SFeLi:<br>SSG:</html>
+AEWork=<html>OniSplit GUI (Win)<br>OniSplit GUI (Mac)<br>Original creator of the Edition<br>AE Framework<br>Project management<br>Documenting Oni's game data<br>OniSplit, documenting Oni, tech support<br>Documenting Oni's game data<br>Daodan DLL port to C<br>Original Daodan DLL<br>Documenting Oni's game data</html>
+
+panLinks=Links:
+Links=<a href="http://oni.bungie.org/">Oni Community Portal</a> (oni.bungie.org)<br><a href="http://mods.oni2.net/">Oni Mod Depot</a> (mods.oni2.net)<br><a href="http://wiki.oni2.net/">Oni Galore Wiki</a> (wiki.oni2.net)
Index: AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.yml	(revision 593)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/about/AboutDialog.yml	(revision 593)
@@ -0,0 +1,35 @@
+JDialog:
+  name: frame
+  title: frame.title
+  resizable: false
+  locationRelativeTo: null
+  defaultCloseOperation: disposeOnClose
+  iconImage: img.ae
+  modalityType: applicationModal
+  content:
+    - JButton(name=btnClose, text=btnClose, onAction=[dispose])
+    - JPanel(name=panAEI):
+      - JLabel(name=lblAppname, text=appname)
+      - JLabel(name=lblAppversion)
+      - JLabel(name=lblAEIBy, text=AEIBy)
+      - MigLayout: |
+           [grow]
+           lblAppname<,lblAppversion<   [min]
+           lblAEIBy                     [min]
+    - JPanel(name=panAE, groupTitle=panAE):
+      - JLabel(name=lblNames, text=AENames, horizontalAlignment=right)
+      - JLabel(name=lblWork, text=AEWork)
+      - MigLayout: |
+           [min]      [grow]
+           >lblNames  lblWork [min]
+    - JPanel(name=panLinks, groupTitle=panLinks):
+      - HTMLLinkLabel(name=txtLinks)
+      - MigLayout: |
+           [grow]
+           txtLinks [pref]
+    - MigLayout: |
+         [grow]
+         panAEI     [pref]
+         panAE      [pref]
+         panLinks   [pref]
+         |btnClose  [min]
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java	(revision 593)
@@ -22,4 +22,5 @@
 
 	private Vector<NodeMod> items;
+	private Vector<Boolean> install;
 	private int vocabModTypeID = -1;
 	private int vocabPlatformID = -1;
@@ -45,6 +46,9 @@
 				String type = "";
 				if (vocabModTypeID < 0) {
-					vocabModTypeID = DepotManager.getInstance()
-							.getVocabulary(DepotConfig.getVocabularyName_ModType()).getVid();
+					vocabModTypeID = DepotManager
+							.getInstance()
+							.getVocabulary(
+									DepotConfig.getVocabularyName_ModType())
+							.getVid();
 				}
 				for (int tid : node.getTaxonomyTerms().get(vocabModTypeID)) {
@@ -57,6 +61,9 @@
 			case 3:
 				if (vocabPlatformID < 0) {
-					vocabPlatformID = DepotManager.getInstance()
-							.getVocabulary(DepotConfig.getVocabularyName_Platform()).getVid();
+					vocabPlatformID = DepotManager
+							.getInstance()
+							.getVocabulary(
+									DepotConfig.getVocabularyName_Platform())
+							.getVid();
 				}
 				int tid = node.getTaxonomyTerms().get(vocabPlatformID)
@@ -64,4 +71,6 @@
 				return DepotManager.getInstance().getTaxonomyTerm(tid)
 						.getName();
+			case 4:
+				return install.get(row);
 		}
 		return null;
@@ -79,4 +88,6 @@
 			case 3:
 				return bundle.getString("mod.platform");
+			case 4:
+				return bundle.getString("mod.install");
 		}
 		return null;
@@ -90,5 +101,5 @@
 	@Override
 	public int getColumnCount() {
-		return 4;
+		return 5;
 	}
 
@@ -104,4 +115,6 @@
 			case 3:
 				return String.class;
+			case 4:
+				return Boolean.class;
 		}
 		return null;
@@ -137,4 +150,10 @@
 				col.setMaxWidth(w);
 				break;
+			case 4:
+				w = 60;
+				col.setPreferredWidth(w);
+				col.setMinWidth(w);
+				col.setMaxWidth(w);
+				break;
 		}
 	}
@@ -145,4 +164,9 @@
 	public void reloadData() {
 		items = DepotManager.getInstance().getModPackageNodes();
+		install = new Vector<Boolean>();
+		// TODO check installed
+		for (int i = 0; i < items.size(); i++) {
+			install.add(i, false);
+		}
 	}
 
@@ -156,3 +180,16 @@
 	}
 
+	@Override
+	public boolean isCellEditable(int rowIndex, int columnIndex) {
+		return columnIndex == 4;
+	}
+
+	@Override
+	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+		super.setValueAt(aValue, rowIndex, columnIndex);
+		if (columnIndex == 4) {
+			install.set(rowIndex, (Boolean) aValue);
+		}
+	}
+
 }
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.properties
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.properties	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.properties	(revision 593)
@@ -3,2 +3,3 @@
 mod.package_number=Pkg#
 mod.platform=Platform
+mod.install=Install?
Index: AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 593)
@@ -9,8 +9,7 @@
 import javax.swing.JComboBox;
 import javax.swing.JComponent;
-import javax.swing.JFrame;
+import javax.swing.JDialog;
 import javax.swing.JOptionPane;
 import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 
@@ -23,5 +22,5 @@
  * @author Christian Illy
  */
-public class SettingsDialog extends JFrame {
+public class SettingsDialog extends JDialog {
 	private static final long serialVersionUID = -5719515325671846620L;
 
@@ -31,30 +30,11 @@
 	private BuildResult result = SwingJavaBuilder.build(this, bundle);
 
-	private static SettingsDialog openWindow = null;
-
 	private JComboBox cmbLaF;
 	private LaFComboModel laFModel;
 
 	/**
-	 * Open the Settings dialog if not currently opened or brings the existing
-	 * one to front
+	 * Open the settings
 	 */
-	public static void openWindow() {
-		if (openWindow != null) {
-			SwingUtilities.invokeLater(new Runnable() {
-
-				@Override
-				public void run() {
-					openWindow.toFront();
-					openWindow.repaint();
-				}
-			});
-		} else {
-			new SettingsDialog().setVisible(true);
-		}
-	}
-
-	private SettingsDialog() {
-		openWindow = this;
+	public SettingsDialog() {
 		setMinimumSize(new Dimension(500, (int) getSize().getHeight() + 0));
 
@@ -85,9 +65,4 @@
 
 	@SuppressWarnings("unused")
-	private void close() {
-		openWindow = null;
-	}
-
-	@SuppressWarnings("unused")
 	private boolean save() {
 		Settings set = Settings.getInstance();
Index: AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.yml
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.yml	(revision 592)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.yml	(revision 593)
@@ -1,3 +1,3 @@
-JFrame:
+JDialog:
   name: frame
   title: frame.title
@@ -5,6 +5,6 @@
   locationRelativeTo: null
   defaultCloseOperation: disposeOnClose
-  onWindowClosed: [close]
-  iconImage: img.kdt
+  iconImage: img.ae
+  modalityType: applicationModal
   content:
     - JButton(name=btnOk, text=btnOk, onAction=[save,dispose])
