Index: java/installer2/src/net/oni2/aeinstaller/AEInstaller2.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 850)
+++ java/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 852)
@@ -21,7 +21,9 @@
 import javax.swing.UIManager.LookAndFeelInfo;
 
+import net.oni2.ProxySettings;
 import net.oni2.SettingsManager;
 import net.oni2.aeinstaller.backend.CaseInsensitiveFile;
 import net.oni2.aeinstaller.backend.Paths;
+import net.oni2.aeinstaller.backend.RuntimeOptions;
 import net.oni2.aeinstaller.backend.SizeFormatter;
 import net.oni2.aeinstaller.backend.oni.OniSplit;
@@ -47,6 +49,8 @@
 public class AEInstaller2 {
 
-	private static ResourceBundle imagesBundle;
-	private static ResourceBundle basicBundle;
+	private static ResourceBundle imagesBundle = ResourceBundle
+			.getBundle("net.oni2.aeinstaller.Images");
+	private static ResourceBundle basicBundle = ResourceBundle
+			.getBundle("net.oni2.aeinstaller.AEInstaller");
 	private static ResourceBundle globalBundle;
 
@@ -82,7 +86,4 @@
 			}
 		}
-		imagesBundle = ResourceBundle.getBundle("net.oni2.aeinstaller.Images");
-		basicBundle = ResourceBundle
-				.getBundle("net.oni2.aeinstaller.AEInstaller");
 		globalBundle = UTF8ResourceBundleLoader
 				.getBundle("net.oni2.aeinstaller.localization.Global");
@@ -116,19 +117,15 @@
 		Paths.getDownloadPath().mkdirs();
 
-		boolean debug = false;
-		boolean useWd = false;
-		boolean noCacheUpdate = false;
-		boolean offline = false;
 		for (String a : args) {
 			if (a.equalsIgnoreCase("-debug"))
-				debug = true;
+				RuntimeOptions.setDebug(true);
 			if (a.equalsIgnoreCase("-nocacheupdate"))
-				noCacheUpdate = true;
+				RuntimeOptions.setNoCacheUpdateMode(true);
 			if (a.equalsIgnoreCase("-offline"))
-				offline = true;
+				RuntimeOptions.setOfflineMode(true);
 			if (a.equalsIgnoreCase("-usewd"))
-				useWd = true;
-		}
-		if (!debug) {
+				RuntimeOptions.setUseWorkingDir(true);
+		}
+		if (!RuntimeOptions.isDebug()) {
 			try {
 				PrintStream ps = new PrintStream(new File(Paths.getPrefsPath(),
@@ -141,14 +138,14 @@
 		}
 
-		SettingsManager.setDebug(debug);
-		SettingsManager.deserializeFromFile(Paths.getSettingsFilename());
-		SettingsManager.setDebug(debug);
-		SettingsManager.setUseWorkingDir(useWd);
-		SettingsManager.getInstance().setNoCacheUpdateMode(noCacheUpdate);
-
-		initBundles();
-
 		if (PlatformInformation.getPlatform() == Platform.MACOS)
 			initMacOS();
+
+		SettingsManager.deserializeFromFile(Paths.getSettingsFilename());
+		
+		if (Paths.getProxySettingsFilename().exists()) {
+			ProxySettings.deserializeFromFile(Paths.getProxySettingsFilename());
+		}
+
+		initBundles();
 
 		SwingJavaBuilder.getConfig().addResourceBundle(imagesBundle);
@@ -242,13 +239,14 @@
 					globalBundle.getString("invalidPath.title"),
 					JOptionPane.ERROR_MESSAGE);
-			if (!SettingsManager.isDebug()) {
+			if (!RuntimeOptions.isDebug()) {
 				return;
 			}
 		}
 
-		if (!offline) {
-			offline = !DepotManager.getInstance().checkConnection();
-		}
-		if (offline) {
+		if (!RuntimeOptions.isOfflineMode()) {
+			RuntimeOptions.setOfflineMode(!DepotManager.getInstance()
+					.checkConnection());
+		}
+		if (RuntimeOptions.isOfflineMode()) {
 			JOptionPane.showMessageDialog(null,
 					globalBundle.getString("offlineModeStartup.text"),
@@ -256,7 +254,6 @@
 					JOptionPane.INFORMATION_MESSAGE);
 		}
-		SettingsManager.getInstance().setOfflineMode(offline);
-
-		if (!offline) {
+
+		if (!RuntimeOptions.isOfflineMode()) {
 			SVN svn = new SVN();
 			try {
Index: java/installer2/src/net/oni2/aeinstaller/backend/Paths.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/backend/Paths.java	(revision 850)
+++ java/installer2/src/net/oni2/aeinstaller/backend/Paths.java	(revision 852)
@@ -4,6 +4,4 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-
-import net.oni2.SettingsManager;
 
 /**
@@ -27,4 +25,11 @@
 
 	/**
+	 * @return Proxy settings filename of AEI
+	 */
+	public static File getProxySettingsFilename() {
+		return new File(getPrefsPath(), "AEI-ProxySettings.xml");
+	}
+
+	/**
 	 * Get the Jar path
 	 * 
@@ -32,5 +37,5 @@
 	 */
 	public static File getInstallerPath() {
-		if (SettingsManager.isDebug() || SettingsManager.getUseWorkingDir()) {
+		if (RuntimeOptions.isDebug() || RuntimeOptions.getUseWorkingDir()) {
 			String wd = System.getProperty("user.dir");
 			return new File(wd);
Index: java/installer2/src/net/oni2/aeinstaller/backend/RuntimeOptions.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/backend/RuntimeOptions.java	(revision 852)
+++ java/installer2/src/net/oni2/aeinstaller/backend/RuntimeOptions.java	(revision 852)
@@ -0,0 +1,73 @@
+package net.oni2.aeinstaller.backend;
+
+
+/**
+ * @author Christian Illy
+ */
+public class RuntimeOptions {
+	private static boolean debugRun = false;
+	private static boolean useWorkingDir = false;
+	private static boolean offlineMode = false;
+	private static boolean noCacheUpdate = false;
+
+	/**
+	 * @param debug
+	 *            Debug mode
+	 */
+	public static void setDebug(boolean debug) {
+		debugRun = debug;
+	}
+
+	/**
+	 * @return Is debug run
+	 */
+	public static boolean isDebug() {
+		return debugRun;
+	}
+
+	/**
+	 * @param useWd
+	 *            Use working directory instead of jar path
+	 */
+	public static void setUseWorkingDir(boolean useWd) {
+		useWorkingDir = useWd;
+	}
+
+	/**
+	 * @return Do we want to use working directory
+	 */
+	public static boolean getUseWorkingDir() {
+		return useWorkingDir;
+	}
+
+	/**
+	 * @return Is offline?
+	 */
+	public static boolean isOfflineMode() {
+		return offlineMode;
+	}
+
+	/**
+	 * @param offline
+	 *            Is offline?
+	 */
+	public static void setOfflineMode(boolean offline) {
+		offlineMode = offline;
+	}
+
+	/**
+	 * @return Is in noCacheUpdate mode?
+	 */
+	public static boolean isNoCacheUpdateMode() {
+		return noCacheUpdate;
+	}
+
+	/**
+	 * @param noCacheUpd
+	 *            Is in noCacheUpdate mode?
+	 */
+	public static void setNoCacheUpdateMode(boolean noCacheUpd) {
+		noCacheUpdate = noCacheUpd;
+	}
+
+}
Index: java/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 850)
+++ java/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 852)
@@ -50,4 +50,5 @@
 import net.oni2.aeinstaller.backend.ImageResizer;
 import net.oni2.aeinstaller.backend.Paths;
+import net.oni2.aeinstaller.backend.RuntimeOptions;
 import net.oni2.aeinstaller.backend.SizeFormatter;
 import net.oni2.aeinstaller.backend.oni.OniLauncher;
@@ -217,6 +218,6 @@
 		DepotManager.loadFromCacheFile(Paths.getDepotCacheFilename());
 
-		if (!SettingsManager.getInstance().isOfflineMode()
-				&& !SettingsManager.getInstance().isNoCacheUpdateMode()) {
+		if (!RuntimeOptions.isOfflineMode()
+				&& !RuntimeOptions.isNoCacheUpdateMode()) {
 			long start = new Date().getTime();
 
@@ -240,5 +241,5 @@
 		if ((evtSource != this)
 				|| SettingsManager.getInstance().get("notifyupdates", true)) {
-			if (SettingsManager.getInstance().isOfflineMode()) {
+			if (RuntimeOptions.isOfflineMode()) {
 				if (evtSource != this) {
 					JOptionPane.showMessageDialog(
@@ -584,5 +585,5 @@
 	@SuppressWarnings("unused")
 	private void checkCorePackages() {
-		if (!SettingsManager.getInstance().isOfflineMode()) {
+		if (!RuntimeOptions.isOfflineMode()) {
 			TreeSet<Package> tools = new TreeSet<Package>();
 			for (Package m : PackageManager.getInstance().getCoreTools()) {
@@ -649,6 +650,5 @@
 			}
 
-			if (toDownload.size() > 0
-					&& SettingsManager.getInstance().isOfflineMode()) {
+			if (toDownload.size() > 0 && RuntimeOptions.isOfflineMode()) {
 				installState = EInstallState.OFFLINE;
 				break;
Index: java/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 850)
+++ java/installer2/src/net/oni2/aeinstaller/gui/settings/SettingsDialog.java	(revision 852)
@@ -14,5 +14,7 @@
 import javax.swing.UIManager;
 
+import net.oni2.ProxySettings;
 import net.oni2.SettingsManager;
+import net.oni2.aeinstaller.backend.Paths;
 import net.oni2.resourcebundle.UTF8ResourceBundleLoader;
 
@@ -100,4 +102,7 @@
 					JOptionPane.INFORMATION_MESSAGE);
 		}
+		
+		ProxySettings prox = ProxySettings.getInstance();
+		prox.serializeToFile(Paths.getProxySettingsFilename());
 
 		return true;
Index: java/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 850)
+++ java/installer2/src/net/oni2/aeinstaller/gui/toolmanager/ToolManager.java	(revision 852)
@@ -18,4 +18,5 @@
 
 import net.oni2.SettingsManager;
+import net.oni2.aeinstaller.backend.RuntimeOptions;
 import net.oni2.aeinstaller.backend.oni.management.tools.ToolsManager;
 import net.oni2.aeinstaller.backend.packages.Package;
@@ -103,5 +104,5 @@
 			} else {
 				if (!selectedPackage.isLocalAvailable()) {
-					if (SettingsManager.getInstance().isOfflineMode()) {
+					if (RuntimeOptions.isOfflineMode()) {
 						JOptionPane.showMessageDialog(this,
 								bundle.getString("offlineMode.text"),
