Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 708)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 720)
@@ -10,4 +10,5 @@
 import java.awt.event.KeyEvent;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.net.URL;
 import java.util.Date;
@@ -39,12 +40,13 @@
 import javax.swing.filechooser.FileFilter;
 
+import net.oni2.SettingsManager;
 import net.oni2.aeinstaller.AEInstaller2;
 import net.oni2.aeinstaller.backend.ImageResizer;
 import net.oni2.aeinstaller.backend.Paths;
-import net.oni2.aeinstaller.backend.ToolLauncher;
 import net.oni2.aeinstaller.backend.SizeFormatter;
 import net.oni2.aeinstaller.backend.depot.DepotManager;
 import net.oni2.aeinstaller.backend.oni.InstallProgressListener;
 import net.oni2.aeinstaller.backend.oni.Installer;
+import net.oni2.aeinstaller.backend.oni.OniLauncher;
 import net.oni2.aeinstaller.backend.oni.OniSplit;
 import net.oni2.aeinstaller.backend.packages.Package;
@@ -57,6 +59,6 @@
 import net.oni2.aeinstaller.gui.corepackages.CorePackagesDialog;
 import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
+import net.oni2.aeinstaller.gui.modtable.EApplyFilterTo;
 import net.oni2.aeinstaller.gui.modtable.ModInstallSelectionListener;
-import net.oni2.aeinstaller.gui.modtable.EApplyFilterTo;
 import net.oni2.aeinstaller.gui.modtable.ModSelectionListener;
 import net.oni2.aeinstaller.gui.modtable.ModTable;
@@ -65,7 +67,8 @@
 import net.oni2.aeinstaller.gui.settings.SettingsDialog;
 import net.oni2.aeinstaller.gui.toolmanager.ToolManager;
-import net.oni2.applicationinvoker.AppExecution;
-import net.oni2.settingsmanager.Settings;
-import net.oni2.settingsmanager.Settings.Platform;
+import net.oni2.platformtools.PlatformInformation;
+import net.oni2.platformtools.PlatformInformation.Platform;
+import net.oni2.platformtools.applicationinvoker.ApplicationInvoker;
+import net.oni2.platformtools.applicationinvoker.ERuntimeNotInstalledException;
 
 import org.javabuilders.BuildResult;
@@ -138,8 +141,9 @@
 		scrollMods.setViewportView(tblMods);
 
-		contents.setDividerLocation(Settings.getInstance().get("win_main_divloc", 550));
+		contents.setDividerLocation(SettingsManager.getInstance().get(
+				"win_main_divloc", 550));
 		contents.setResizeWeight(0.4);
 
-		if (Settings.getPlatform() == Platform.MACOS) {
+		if (PlatformInformation.getPlatform() == Platform.MACOS) {
 			mainMenu.setVisible(false);
 		}
@@ -165,6 +169,7 @@
 		tblMods.addModSelectionListener(this);
 		tblMods.addDownloadSizeListener(this);
-		
-		setSize(Settings.getInstance().get("win_main_width", 950), Settings.getInstance().get("win_main_height", 600));
+
+		setSize(SettingsManager.getInstance().get("win_main_width", 950),
+				SettingsManager.getInstance().get("win_main_height", 600));
 		setLocationRelativeTo(null);
 	}
@@ -190,14 +195,16 @@
 
 	private void saveLocalData() {
-		Settings.getInstance().put("win_main_divloc", contents.getDividerLocation());
-		Settings.getInstance().put("win_main_width", getWidth());
-		Settings.getInstance().put("win_main_height", getHeight());
-		Settings.getInstance().serializeToFile(Paths.getSettingsFilename());
+		SettingsManager.getInstance().put("win_main_divloc",
+				contents.getDividerLocation());
+		SettingsManager.getInstance().put("win_main_width", getWidth());
+		SettingsManager.getInstance().put("win_main_height", getHeight());
+		SettingsManager.getInstance().serializeToFile(
+				Paths.getSettingsFilename());
 	}
 
 	@DoInBackground(progressMessage = "updateDepot.title", cancelable = false, indeterminateProgress = false)
 	private void execDepotUpdate(final BackgroundEvent evt) {
-		if (!Settings.getInstance().isOfflineMode()
-				&& !Settings.getInstance().isNoCacheUpdateMode()) {
+		if (!SettingsManager.getInstance().isOfflineMode()
+				&& !SettingsManager.getInstance().isNoCacheUpdateMode()) {
 			long start = new Date().getTime();
 
@@ -222,6 +229,6 @@
 	private void checkUpdates(Object evtSource) {
 		if ((evtSource != this)
-				|| Settings.getInstance().get("notifyupdates", true)) {
-			if (Settings.getInstance().isOfflineMode()) {
+				|| SettingsManager.getInstance().get("notifyupdates", true)) {
+			if (SettingsManager.getInstance().isOfflineMode()) {
 				if (evtSource != this) {
 					JOptionPane.showMessageDialog(
@@ -250,5 +257,6 @@
 					size += m.getZipSize();
 					JCheckBox check = new JCheckBox("Mod: " + m.getName()
-							+ " (" + SizeFormatter.format(m.getZipSize(), 1) + ")");
+							+ " (" + SizeFormatter.format(m.getZipSize(), 1)
+							+ ")");
 					check.setSelected(true);
 					check.addItemListener(new ItemListener() {
@@ -274,5 +282,6 @@
 					size += m.getZipSize();
 					JCheckBox check = new JCheckBox("Tool: " + m.getName()
-							+ " (" + SizeFormatter.format(m.getZipSize(), 1) + ")");
+							+ " (" + SizeFormatter.format(m.getZipSize(), 1)
+							+ ")");
 					check.setSelected(true);
 					check.addItemListener(new ItemListener() {
@@ -313,10 +322,10 @@
 					JCheckBox checkFutureUpdates = new JCheckBox(
 							bundle.getString("checkOnStartup.text"));
-					checkFutureUpdates.setSelected(Settings.getInstance().get(
-							"notifyupdates", true));
+					checkFutureUpdates.setSelected(SettingsManager
+							.getInstance().get("notifyupdates", true));
 					checkFutureUpdates.addItemListener(new ItemListener() {
 						@Override
 						public void itemStateChanged(ItemEvent evt) {
-							Settings.getInstance().put("notifyupdates",
+							SettingsManager.getInstance().put("notifyupdates",
 									evt.getStateChange() == ItemEvent.SELECTED);
 						}
@@ -492,12 +501,19 @@
 					public void actionPerformed(ActionEvent evt) {
 						try {
-							ToolLauncher.launch(m);
-						} catch (Exception ex) {
-							if (ex.getMessage().contains("JRE"))
+							ApplicationInvoker.execute(m.getExeType(),
+									m.getWorkingDir(), m.getExeFile(), null);
+						} catch (ERuntimeNotInstalledException e) {
+							JOptionPane.showMessageDialog(null,
+									bundle.getString("exeNotFound.text"),
+									bundle.getString("exeNotFound.title"),
+									JOptionPane.ERROR_MESSAGE);
+							e.printStackTrace();
+						} catch (FileNotFoundException e) {
+							if (e.getMessage().contains("JRE"))
 								JOptionPane.showMessageDialog(null,
 										bundle.getString("jreNotFound.text"),
 										bundle.getString("jreNotFound.title"),
 										JOptionPane.ERROR_MESSAGE);
-							if (ex.getMessage().contains(".NET"))
+							if (e.getMessage().contains(".NET"))
 								JOptionPane.showMessageDialog(
 										null,
@@ -505,4 +521,10 @@
 										bundle.getString("dotNetNotFound.title"),
 										JOptionPane.ERROR_MESSAGE);
+							if (e.getMessage().contains("Wine"))
+								JOptionPane.showMessageDialog(null,
+										bundle.getString("wineNotFound.text"),
+										bundle.getString("wineNotFound.title"),
+										JOptionPane.ERROR_MESSAGE);
+							e.printStackTrace();
 						}
 					}
@@ -525,5 +547,5 @@
 	@DoInBackground(progressMessage = "checkCorePackages.title", cancelable = false, indeterminateProgress = false)
 	private void checkCorePackages(final BackgroundEvent evt) {
-		if (!Settings.getInstance().isOfflineMode()) {
+		if (!SettingsManager.getInstance().isOfflineMode()) {
 			for (Package m : PackageManager.getInstance().getCoreTools()) {
 				if (m.isNewerAvailable()) {
@@ -558,5 +580,6 @@
 			}
 			evt.setProgressMessage(bundle.getString("coreToolsInstall.title"));
-			Installer.installTools(PackageManager.getInstance().getCoreTools(), false);
+			Installer.installTools(PackageManager.getInstance().getCoreTools(),
+					false);
 		}
 	}
@@ -594,5 +617,6 @@
 			}
 
-			if (toDownload.size() > 0 && Settings.getInstance().isOfflineMode()) {
+			if (toDownload.size() > 0
+					&& SettingsManager.getInstance().isOfflineMode()) {
 				installState = EInstallState.OFFLINE;
 				break;
@@ -647,6 +671,6 @@
 							.getString("installDependencies.none");
 
-				if (!Settings.getInstance()
-						.get("notifyDepsAfterInstall", false)) {
+				if (!SettingsManager.getInstance().get(
+						"notifyDepsAfterInstall", false)) {
 					int res = JOptionPane.showConfirmDialog(this, String
 							.format(bundle
@@ -736,6 +760,6 @@
 				revertSelection();
 				if (installDeps.size() > 0
-						&& Settings.getInstance().get("notifyDepsAfterInstall",
-								false)) {
+						&& SettingsManager.getInstance().get(
+								"notifyDepsAfterInstall", false)) {
 					String installedDeps = "";
 					for (Package m : installDeps) {
@@ -835,52 +859,30 @@
 	}
 
-	private Vector<String> getBasicOniLaunchParams() {
-		Vector<String> params = new Vector<String>();
-		File exe = null;
-		switch (Settings.getPlatform()) {
-			case WIN:
-				exe = new File(Paths.getEditionBasePath(), "Oni.exe");
-				if (exe.exists())
-					params.add(exe.getPath());
-				break;
-			case MACOS:
-				exe = new File(Paths.getEditionBasePath(),
-						"Oni.app/Contents/MacOS/Oni");
-				if (exe.exists())
-					params.add(exe.getPath());
-				break;
-			case LINUX:
-				String wine = Settings.getWinePath();
-				exe = new File(Paths.getEditionBasePath(), "Oni.exe");
-				if (exe.exists()) {
-					if (wine != null) {
-						params.add(wine);
-						params.add(exe.getPath());
-					}
-				}
-				break;
-			default:
-		}
-		if (params.size() > 0) {
-			params.add("-debugfiles");
-		}
-		return params;
+	private void oni(boolean windowed) {
+		try {
+			OniLauncher.launch(windowed);
+		} catch (FileNotFoundException e) {
+			JOptionPane.showMessageDialog(this,
+					bundle.getString("oniExeNotFound.text"),
+					bundle.getString("oniExeNotFound.title"),
+					JOptionPane.ERROR_MESSAGE);
+			e.printStackTrace();
+		} catch (ERuntimeNotInstalledException e) {
+			JOptionPane.showMessageDialog(this,
+					bundle.getString("wineNotFound.text"),
+					bundle.getString("wineNotFound.title"),
+					JOptionPane.ERROR_MESSAGE);
+			e.printStackTrace();
+		}
 	}
 
 	@SuppressWarnings("unused")
 	private void oniFull() {
-		Vector<String> params = getBasicOniLaunchParams();
-		if (params.size() > 0) {
-			AppExecution.execute(params, Paths.getEditionBasePath());
-		}
+		oni(false);
 	}
 
 	@SuppressWarnings("unused")
 	private void oniWin() {
-		Vector<String> params = getBasicOniLaunchParams();
-		if (params.size() > 0) {
-			params.add("-noswitch");
-			AppExecution.execute(params, Paths.getEditionBasePath());
-		}
+		oni(true);
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/corepackages/CorePackagesDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/corepackages/CorePackagesDialog.java	(revision 708)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/corepackages/CorePackagesDialog.java	(revision 720)
@@ -12,4 +12,5 @@
 import javax.swing.KeyStroke;
 
+import net.oni2.SettingsManager;
 import net.oni2.aeinstaller.backend.packages.Package;
 import net.oni2.aeinstaller.gui.modtable.ModSelectionListener;
@@ -17,5 +18,4 @@
 import net.oni2.aeinstaller.gui.modtable.ModTable.ETableContentType;
 import net.oni2.aeinstaller.gui.packageinfobox.PackageInfoBox;
-import net.oni2.settingsmanager.Settings;
 
 import org.javabuilders.BuildResult;
@@ -60,5 +60,5 @@
 		getRootPane().getActionMap().put("close", closeAction);
 
-		contents.setDividerLocation(Settings.getInstance().get("win_core_divloc", 550));
+		contents.setDividerLocation(SettingsManager.getInstance().get("win_core_divloc", 550));
 		contents.setResizeWeight(0.4);
 
@@ -69,5 +69,5 @@
 		tblTools.addModSelectionListener(this);
 
-		setSize(Settings.getInstance().get("win_core_width", 950), Settings.getInstance().get("win_core_height", 600));
+		setSize(SettingsManager.getInstance().get("win_core_width", 950), SettingsManager.getInstance().get("win_core_height", 600));
 		setLocationRelativeTo(null);
 	}
@@ -80,7 +80,7 @@
 	@SuppressWarnings("unused")
 	private void closing() {
-		Settings.getInstance().put("win_core_divloc", contents.getDividerLocation());
-		Settings.getInstance().put("win_core_width", getWidth());
-		Settings.getInstance().put("win_core_height", getHeight());
+		SettingsManager.getInstance().put("win_core_divloc", contents.getDividerLocation());
+		SettingsManager.getInstance().put("win_core_width", getWidth());
+		SettingsManager.getInstance().put("win_core_height", getHeight());
 	}
 }
Index: AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 708)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java	(revision 720)
@@ -35,8 +35,8 @@
 import javax.swing.table.TableRowSorter;
 
+import net.oni2.SettingsManager;
 import net.oni2.aeinstaller.backend.packages.Package;
 import net.oni2.aeinstaller.backend.packages.Type;
 import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
-import net.oni2.settingsmanager.Settings;
 
 /**
@@ -103,6 +103,6 @@
 		List<RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>();
 
-		int sortCol = Settings.getInstance().get("modSortColumn", 1);
-		SortOrder sortOrder = SortOrder.valueOf(Settings.getInstance().get(
+		int sortCol = SettingsManager.getInstance().get("modSortColumn", 1);
+		SortOrder sortOrder = SortOrder.valueOf(SettingsManager.getInstance().get(
 				"modSortOrder", "ASCENDING"));
 
@@ -244,6 +244,6 @@
 				int col = keys.get(0).getColumn();
 				SortOrder so = keys.get(0).getSortOrder();
-				Settings.getInstance().put("modSortColumn", col);
-				Settings.getInstance().put("modSortOrder", so.toString());
+				SettingsManager.getInstance().put("modSortColumn", col);
+				SettingsManager.getInstance().put("modSortOrder", so.toString());
 			}
 		}
@@ -459,5 +459,5 @@
 			for (int i = 1; i < columns.size(); i++) {
 				TableColumn tc = columns.get(i);
-				if (!Settings.getInstance().get(
+				if (!SettingsManager.getInstance().get(
 						String.format("modShowColumn%02d", tc.getModelIndex()),
 						true))
@@ -506,5 +506,5 @@
 							tcm.removeColumn(col);
 						}
-						Settings.getInstance().put(
+						SettingsManager.getInstance().put(
 								String.format("modShowColumn%02d",
 										col.getModelIndex()), itm.isSelected());
Index: AE/installer2/src/net/oni2/aeinstaller/gui/settings/LaFComboModel.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/settings/LaFComboModel.java	(revision 708)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/settings/LaFComboModel.java	(revision 720)
@@ -9,5 +9,5 @@
 import javax.swing.event.ListDataListener;
 
-import net.oni2.settingsmanager.Settings;
+import net.oni2.SettingsManager;
 
 /**
@@ -32,5 +32,5 @@
 
 		
-		String laf = Settings.getInstance().get("lookandfeel",
+		String laf = SettingsManager.getInstance().get("lookandfeel",
 				UIManager.getLookAndFeel().getClass().getName());
 
Index: AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 708)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 720)
@@ -14,5 +14,5 @@
 import javax.swing.UIManager;
 
-import net.oni2.settingsmanager.Settings;
+import net.oni2.SettingsManager;
 
 import org.javabuilders.BuildResult;
@@ -66,5 +66,5 @@
 
 	private void initValues() {
-		Settings set = Settings.getInstance();
+		SettingsManager set = SettingsManager.getInstance();
 
 		laFModel = new LaFComboModel();
@@ -79,5 +79,5 @@
 	@SuppressWarnings("unused")
 	private boolean save() {
-		Settings set = Settings.getInstance();
+		SettingsManager set = SettingsManager.getInstance();
 
 		set.put("notifyupdates", chkNotifyOnStart.isSelected());
Index: AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 708)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 720)
@@ -17,4 +17,5 @@
 import javax.swing.KeyStroke;
 
+import net.oni2.SettingsManager;
 import net.oni2.aeinstaller.backend.oni.Installer;
 import net.oni2.aeinstaller.backend.packages.Package;
@@ -24,5 +25,4 @@
 import net.oni2.aeinstaller.gui.modtable.ModTable.ETableContentType;
 import net.oni2.aeinstaller.gui.packageinfobox.PackageInfoBox;
-import net.oni2.settingsmanager.Settings;
 
 import org.javabuilders.BuildResult;
@@ -73,5 +73,5 @@
 		getRootPane().getActionMap().put("close", closeAction);
 
-		contents.setDividerLocation(Settings.getInstance().get("win_tools_divloc", 550));
+		contents.setDividerLocation(SettingsManager.getInstance().get("win_tools_divloc", 550));
 		contents.setResizeWeight(0.4);
 
@@ -87,5 +87,5 @@
 				SwingJavaBuilder.getConfig().getResource("img.uninstall")));
 
-		setSize(Settings.getInstance().get("win_tools_width", 950), Settings.getInstance().get("win_tools_height", 600));
+		setSize(SettingsManager.getInstance().get("win_tools_width", 950), SettingsManager.getInstance().get("win_tools_height", 600));
 		setLocationRelativeTo(null);
 	}
@@ -100,5 +100,5 @@
 			} else {
 				if (!selectedPackage.isLocalAvailable()) {
-					if (Settings.getInstance().isOfflineMode()) {
+					if (SettingsManager.getInstance().isOfflineMode()) {
 						JOptionPane.showMessageDialog(this,
 								bundle.getString("offlineMode.text"),
@@ -152,7 +152,7 @@
 	@SuppressWarnings("unused")
 	private void closing() {
-		Settings.getInstance().put("win_tools_divloc", contents.getDividerLocation());
-		Settings.getInstance().put("win_tools_width", getWidth());
-		Settings.getInstance().put("win_tools_height", getHeight());
+		SettingsManager.getInstance().put("win_tools_divloc", contents.getDividerLocation());
+		SettingsManager.getInstance().put("win_tools_width", getWidth());
+		SettingsManager.getInstance().put("win_tools_height", getHeight());
 	}
 }
