Index: java/AEInstaller2-Updater/.classpath
===================================================================
--- java/AEInstaller2-Updater/.classpath	(revision 851)
+++ java/AEInstaller2-Updater/.classpath	(revision 852)
@@ -5,4 +5,5 @@
 	<classpathentry combineaccessrules="false" kind="src" path="/SVNAccess"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/PlatformTools"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/ProxySettings"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: java/AEInstaller2-Updater/src/net/oni2/aeinstaller/updater/AEInstaller2Updater.java
===================================================================
--- java/AEInstaller2-Updater/src/net/oni2/aeinstaller/updater/AEInstaller2Updater.java	(revision 851)
+++ java/AEInstaller2-Updater/src/net/oni2/aeinstaller/updater/AEInstaller2Updater.java	(revision 852)
@@ -9,4 +9,5 @@
 import javax.swing.UIManager;
 
+import net.oni2.ProxySettings;
 import net.oni2.aeinstaller.updater.backend.Paths;
 import net.oni2.aeinstaller.updater.gui.MainWin;
@@ -41,4 +42,8 @@
 		}
 
+		if (Paths.getProxySettingsFilename().exists()) {
+			ProxySettings.deserializeFromFile(Paths.getProxySettingsFilename());
+		}
+
 		System.setProperty("networkaddress.cache.ttl", "5");
 		System.setProperty("networkaddress.cache.negative.ttl", "1");
Index: java/AEInstaller2-Updater/src/net/oni2/aeinstaller/updater/backend/Paths.java
===================================================================
--- java/AEInstaller2-Updater/src/net/oni2/aeinstaller/updater/backend/Paths.java	(revision 851)
+++ java/AEInstaller2-Updater/src/net/oni2/aeinstaller/updater/backend/Paths.java	(revision 852)
@@ -33,4 +33,11 @@
 
 	/**
+	 * @return Proxy settings filename of AEI
+	 */
+	public static File getProxySettingsFilename() {
+		return new File(getPrefsPath(), "AEI-ProxySettings.xml");
+	}
+
+	/**
 	 * Get the preferences path
 	 * 
Index: java/HTTPFileDownloader/.classpath
===================================================================
--- java/HTTPFileDownloader/.classpath	(revision 851)
+++ java/HTTPFileDownloader/.classpath	(revision 852)
@@ -3,4 +3,5 @@
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/ProxySettings"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: java/HTTPFileDownloader/src/net/oni2/httpfiledownloader/FileDownloader.java
===================================================================
--- java/HTTPFileDownloader/src/net/oni2/httpfiledownloader/FileDownloader.java	(revision 851)
+++ java/HTTPFileDownloader/src/net/oni2/httpfiledownloader/FileDownloader.java	(revision 852)
@@ -9,4 +9,6 @@
 import java.net.URLConnection;
 import java.util.HashSet;
+
+import net.oni2.ProxySettings;
 
 /**
@@ -147,4 +149,5 @@
 		String strEtag = null;
 		RandomAccessFile outFile = null;
+
 		try {
 			outFile = new RandomAccessFile(target, "rw");
@@ -174,6 +177,9 @@
 						BufferedInputStream input = null;
 						try {
-							URLConnection connection = url.openConnection();
-							connection.setRequestProperty("Cache-Control", "no-cache");
+							URLConnection connection = url
+									.openConnection(ProxySettings.getInstance()
+											.getProxy());
+							connection.setRequestProperty("Cache-Control",
+									"no-cache");
 							if (downloaded == 0) {
 								connection.connect();
Index: java/ModDepotAccess/.classpath
===================================================================
--- java/ModDepotAccess/.classpath	(revision 851)
+++ java/ModDepotAccess/.classpath	(revision 852)
@@ -3,10 +3,8 @@
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-	<classpathentry kind="lib" path="/_ThirdPartyLibs/httpclient/commons-logging-1.1.1.jar"/>
-	<classpathentry kind="lib" path="/_ThirdPartyLibs/httpclient/httpclient-4.2.2.jar"/>
-	<classpathentry kind="lib" path="/_ThirdPartyLibs/httpclient/httpcore-4.2.2.jar"/>
 	<classpathentry kind="lib" path="/_ThirdPartyLibs/JSON-java.jar"/>
 	<classpathentry kind="lib" path="/_ThirdPartyLibs/xstream-1.4.3.jar"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/HTTPFileDownloader"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/ProxySettings"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: java/ModDepotAccess/src/net/oni2/moddepot/DepotManager.java
===================================================================
--- java/ModDepotAccess/src/net/oni2/moddepot/DepotManager.java	(revision 851)
+++ java/ModDepotAccess/src/net/oni2/moddepot/DepotManager.java	(revision 852)
@@ -7,6 +7,6 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.net.UnknownHostException;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.Date;
 import java.util.Enumeration;
@@ -16,4 +16,6 @@
 import java.util.zip.ZipFile;
 
+import net.oni2.ProxySettings;
+import net.oni2.httpfiledownloader.FileDownloader;
 import net.oni2.moddepot.model.File;
 import net.oni2.moddepot.model.Node;
@@ -23,10 +25,5 @@
 import net.oni2.moddepot.model.TaxonomyTerm;
 import net.oni2.moddepot.model.TaxonomyVocabulary;
-import net.oni2.httpfiledownloader.FileDownloader;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpHead;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.apache.http.impl.client.DefaultHttpClient;
+
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -214,20 +211,13 @@
 	 */
 	public boolean checkConnection() {
-		HttpRequestBase httpQuery = null;
-
 		try {
-			DefaultHttpClient httpclient = new DefaultHttpClient();
-			httpQuery = new HttpHead(DepotConfig.depotUrl);
-			HttpResponse response = httpclient.execute(httpQuery);
-			int code = response.getStatusLine().getStatusCode();
+			HttpURLConnection con = (HttpURLConnection) new URL(
+					DepotConfig.depotUrl).openConnection(ProxySettings
+					.getInstance().getProxy());
+			con.setRequestMethod("HEAD");
+			int code = con.getResponseCode();
 			return (code >= 200) && (code <= 299);
-		} catch (UnknownHostException e) {
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
 		} catch (IOException e) {
 			e.printStackTrace();
-		} finally {
-			if (httpQuery != null)
-				httpQuery.releaseConnection();
 		}
 		return false;
Index: java/ProgramSettings/src/net/oni2/SettingsManager.java
===================================================================
--- java/ProgramSettings/src/net/oni2/SettingsManager.java	(revision 851)
+++ java/ProgramSettings/src/net/oni2/SettingsManager.java	(revision 852)
@@ -23,13 +23,12 @@
 	private static SettingsManager instance = new SettingsManager();
 
-	private static boolean debugRun = false;
-	private static boolean useWorkingDir = false;
-
 	private HashMap<String, Object> prefs = new HashMap<String, Object>();
 
 	private boolean printNamesNotInMap = false;
 
-	private boolean offlineMode = false;
-	private boolean noCacheUpdate = false;
+	@SuppressWarnings("unused")
+	private transient boolean offlineMode = false;
+	@SuppressWarnings("unused")
+	private transient boolean noCacheUpdate = false;
 
 	/**
@@ -40,64 +39,4 @@
 	public static SettingsManager getInstance() {
 		return instance;
-	}
-
-	/**
-	 * @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 boolean isOfflineMode() {
-		return offlineMode;
-	}
-
-	/**
-	 * @param offline
-	 *            Is offline?
-	 */
-	public void setOfflineMode(boolean offline) {
-		this.offlineMode = offline;
-	}
-
-	/**
-	 * @return Is in noCacheUpdate mode?
-	 */
-	public boolean isNoCacheUpdateMode() {
-		return noCacheUpdate;
-	}
-
-	/**
-	 * @param noCacheUpdate
-	 *            Is in noCacheUpdate mode?
-	 */
-	public void setNoCacheUpdateMode(boolean noCacheUpdate) {
-		this.noCacheUpdate = noCacheUpdate;
 	}
 
Index: java/ProxySettings/.classpath
===================================================================
--- java/ProxySettings/.classpath	(revision 852)
+++ java/ProxySettings/.classpath	(revision 852)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="lib" path="/_ThirdPartyLibs/xstream-1.4.3.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
Index: java/ProxySettings/.project
===================================================================
--- java/ProxySettings/.project	(revision 852)
+++ java/ProxySettings/.project	(revision 852)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>ProxySettings</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
Index: java/ProxySettings/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- java/ProxySettings/.settings/org.eclipse.jdt.core.prefs	(revision 852)
+++ java/ProxySettings/.settings/org.eclipse.jdt.core.prefs	(revision 852)
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
Index: java/ProxySettings/src/net/oni2/ProxySettings.java
===================================================================
--- java/ProxySettings/src/net/oni2/ProxySettings.java	(revision 852)
+++ java/ProxySettings/src/net/oni2/ProxySettings.java	(revision 852)
@@ -0,0 +1,190 @@
+package net.oni2;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.InetSocketAddress;
+import java.net.MalformedURLException;
+import java.net.Proxy;
+import java.net.Proxy.Type;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.StaxDriver;
+
+/**
+ * @author Christian Illy
+ */
+public class ProxySettings implements Serializable {
+	private static final long serialVersionUID = 7764207071836441954L;
+
+	private static ProxySettings instance = new ProxySettings();
+
+	private boolean useProxy = false;
+	private String hostOrIp = null;
+	private int port = -1;
+
+	private transient boolean validated = false;
+	private transient boolean validatedOk = false;
+
+	/**
+	 * Get the proxy for URL connections. Validates connection first if not
+	 * validated yet
+	 * 
+	 * @return Proxy
+	 */
+	public Proxy getProxy() {
+		if (!useProxy)
+			return Proxy.NO_PROXY;
+		if (!validated)
+			validate();
+		if (!validatedOk)
+			return Proxy.NO_PROXY;
+
+		return new Proxy(Type.HTTP, new InetSocketAddress(hostOrIp, port));
+	}
+
+	/**
+	 * Check if a connection to the given proxy can be established
+	 * 
+	 * @return Data entered and connection Ok?
+	 */
+	public boolean validate() {
+		if (validated) {
+			return validatedOk;
+		} else {
+			validated = true;
+			if (isValid()) {
+				try {
+					URLConnection con = new URL(String.format("http://%s:%d",
+							hostOrIp, port)).openConnection();
+					con.setConnectTimeout(1000);
+					con.connect();
+					validatedOk = true;
+					return true;
+				} catch (MalformedURLException e) {
+					e.printStackTrace();
+				} catch (SocketTimeoutException e) {
+					e.printStackTrace();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			validatedOk = false;
+			return false;
+		}
+	}
+
+	/**
+	 * @return Is data for both host and port entered?
+	 */
+	public boolean isValid() {
+		return (hostOrIp != null) && (port > 0);
+	}
+
+	/**
+	 * @return Should a proxy be used for connections?
+	 */
+	public boolean isUseProxy() {
+		return useProxy;
+	}
+
+	/**
+	 * @param use
+	 *            Should a proxy be used for connections?
+	 */
+	public void setUseProxy(boolean use) {
+		this.useProxy = use;
+	}
+
+	/**
+	 * @return Hostname or IP of host to use as proxy
+	 */
+	public String getHostOrIp() {
+		return hostOrIp;
+	}
+
+	/**
+	 * @param hoi
+	 *            Hostname or IP of host to use as proxy
+	 */
+	public void setHostOrIp(String hoi) {
+		validated = false;
+		this.hostOrIp = hoi;
+	}
+
+	/**
+	 * @return Port number proxy is listening on
+	 */
+	public int getPort() {
+		return port;
+	}
+
+	/**
+	 * @param port
+	 *            Port number proxy is listening on
+	 */
+	public void setPort(int port) {
+		validated = false;
+		this.port = port;
+	}
+
+	/**
+	 * Get the singleton instance
+	 * 
+	 * @return Singleton instance
+	 */
+	public static ProxySettings getInstance() {
+		return instance;
+	}
+
+	private static XStream getXStream() {
+		XStream xs = new XStream(new StaxDriver());
+		xs.alias("Proxy", ProxySettings.class);
+		return xs;
+	}
+
+	/**
+	 * Serializes the settings to disk
+	 * 
+	 * @param settingsFile
+	 *            File to write to
+	 */
+	public void serializeToFile(File settingsFile) {
+		try {
+			FileOutputStream fos = new FileOutputStream(settingsFile);
+			XStream xs = getXStream();
+			xs.toXML(this, fos);
+			fos.close();
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Deserializes the settings from disk
+	 * 
+	 * @param settingsFile
+	 *            File to read from
+	 */
+	public static void deserializeFromFile(File settingsFile) {
+		try {
+			FileInputStream fis = new FileInputStream(settingsFile);
+			XStream xs = getXStream();
+			Object obj = xs.fromXML(fis);
+			if (obj instanceof ProxySettings)
+				instance = (ProxySettings) obj;
+			fis.close();
+		} catch (FileNotFoundException e) {
+		} catch (IOException e) {
+		}
+	}
+
+}
Index: java/SVNAccess/.classpath
===================================================================
--- java/SVNAccess/.classpath	(revision 851)
+++ java/SVNAccess/.classpath	(revision 852)
@@ -7,4 +7,5 @@
 	<classpathentry exported="true" kind="lib" path="/_ThirdPartyLibs/svnkit/sqljet-1.1.6.jar"/>
 	<classpathentry exported="true" kind="lib" path="/_ThirdPartyLibs/svnkit/svnkit-1.7.8.jar" sourcepath="/home/ci/.m2/repository/org/tmatesoft/svnkit/svnkit/1.7.8/svnkit-1.7.8-sources.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/ProxySettings"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: java/SVNAccess/src/net/oni2/svnaccess/SVN.java
===================================================================
--- java/SVNAccess/src/net/oni2/svnaccess/SVN.java	(revision 851)
+++ java/SVNAccess/src/net/oni2/svnaccess/SVN.java	(revision 852)
@@ -5,4 +5,6 @@
 import java.io.File;
 import java.util.Vector;
+
+import net.oni2.ProxySettings;
 
 import org.tmatesoft.svn.core.SVNDepth;
@@ -10,4 +12,6 @@
 import org.tmatesoft.svn.core.SVNException;
 import org.tmatesoft.svn.core.SVNURL;
+import org.tmatesoft.svn.core.auth.BasicAuthenticationManager;
+import org.tmatesoft.svn.core.auth.SVNAuthentication;
 import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
 import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
@@ -30,8 +34,5 @@
 	SVNClientManager svnCManager = null;
 
-	/**
-	 * Constructor
-	 */
-	public SVN() {
+	private void setup() {
 		// For using over http:// and https://
 		DAVRepositoryFactory.setup();
@@ -40,7 +41,36 @@
 		// For using over file:///
 		FSRepositoryFactory.setup();
-
-		svnCManager = SVNClientManager.newInstance(SVNWCUtil
-				.createDefaultOptions(true));
+	}
+
+	private void setProxy(BasicAuthenticationManager authMan) {
+		ProxySettings prox = ProxySettings.getInstance();
+		if (prox.validate()) {
+			authMan.setProxy(prox.getHostOrIp(), prox.getPort(), null, null);
+		}
+	}
+
+	private BasicAuthenticationManager getAuthManager() {
+		BasicAuthenticationManager auth = new BasicAuthenticationManager(
+				new SVNAuthentication[0]);
+		setProxy(auth);
+		return auth;
+	}
+
+	private BasicAuthenticationManager getAuthManager(String username,
+			String password) {
+		BasicAuthenticationManager auth = new BasicAuthenticationManager(
+				username, password);
+		setProxy(auth);
+		return auth;
+	}
+
+	/**
+	 * Constructor
+	 */
+	public SVN() {
+		setup();
+
+		svnCManager = SVNClientManager.newInstance(
+				SVNWCUtil.createDefaultOptions(true), getAuthManager());
 	}
 
@@ -54,13 +84,9 @@
 	 */
 	public SVN(String username, String password) {
-		// For using over http:// and https://
-		DAVRepositoryFactory.setup();
-		// For using over svn:// and svn+xxx://
-		SVNRepositoryFactoryImpl.setup();
-		// For using over file:///
-		FSRepositoryFactory.setup();
+		setup();
 
 		svnCManager = SVNClientManager.newInstance(
-				SVNWCUtil.createDefaultOptions(true), username, password);
+				SVNWCUtil.createDefaultOptions(true),
+				getAuthManager(username, password));
 	}
 
Index: java/installer2/.classpath
===================================================================
--- java/installer2/.classpath	(revision 851)
+++ java/installer2/.classpath	(revision 852)
@@ -28,4 +28,5 @@
 	<classpathentry combineaccessrules="false" kind="src" path="/SwingComponents"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/NaturalOrderComparator"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/ProxySettings"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: java/installer2/src/net/oni2/aeinstaller/AEInstaller2.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 851)
+++ 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 851)
+++ 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 851)
+++ 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 851)
+++ 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 851)
+++ 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"),
