Index: AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java	(revision 619)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java	(revision 621)
@@ -65,4 +65,6 @@
 
 	private boolean printNamesNotInMap = false;
+
+	private boolean offlineMode = false;
 
 	/**
@@ -161,4 +163,19 @@
 
 	/**
+	 * @return Is offline?
+	 */
+	public boolean isOfflineMode() {
+		return offlineMode;
+	}
+
+	/**
+	 * @param offline
+	 *            Is offline?
+	 */
+	public void setOfflineMode(boolean offline) {
+		this.offlineMode = offline;
+	}
+
+	/**
 	 * @return Mod Depot cache filename
 	 */
Index: AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotConfig.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotConfig.java	(revision 619)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotConfig.java	(revision 621)
@@ -1,3 +1,5 @@
 package net.oni2.aeinstaller.backend.depot;
+
+import net.oni2.aeinstaller.backend.Settings;
 
 /**
@@ -76,3 +78,18 @@
 		return 8000;
 	}
+
+	/**
+	 * @return URL of Depot
+	 */
+	public static String getDepotUrl() {
+		return Settings.getInstance().get("depot_url", "http://mods.oni2.net/");
+	}
+
+	/**
+	 * @return URL of Depot API
+	 */
+	public static String getDepotApiUrl() {
+		return Settings.getInstance().get("depot_api_url",
+				"http://mods.oni2.net/?q=api/");
+	}
 }
Index: AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java	(revision 619)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/depot/DepotManager.java	(revision 621)
@@ -5,4 +5,6 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -21,4 +23,8 @@
 import net.oni2.aeinstaller.backend.network.DrupalJSONQuery;
 
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.impl.client.DefaultHttpClient;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -221,4 +227,31 @@
 
 	/**
+	 * @return Can we connect to the Depot?
+	 */
+	public boolean checkConnection() {
+		HttpRequestBase httpQuery = null;
+
+		try {
+			DefaultHttpClient httpclient = new DefaultHttpClient();
+			httpQuery = new HttpGet(DepotConfig.getDepotUrl());
+
+			HttpResponse response = httpclient.execute(httpQuery);
+
+			int code = response.getStatusLine().getStatusCode();
+
+			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;
+	}
+
+	/**
 	 * @return All TaxVocabs
 	 */
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java	(revision 619)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java	(revision 621)
@@ -182,4 +182,28 @@
 
 	/**
+	 * @return Mods which are already locally available
+	 */
+	public TreeSet<Mod> getLocalAvailableMods() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : mods.values()) {
+			if (m.isLocalAvailable())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
+	 * @return Mods which can be updated
+	 */
+	public TreeSet<Mod> getUpdatableMods() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : getLocalAvailableMods()) {
+			if (m.isNewerAvailable())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
 	 * @return Collection of tools valid on this platform and not mandatory
 	 */
@@ -199,4 +223,28 @@
 		for (Mod m : tools.values()) {
 			if (m.isValidOnPlatform() && m.isMandatoryMod())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
+	 * @return Tools which are already locally available
+	 */
+	public TreeSet<Mod> getLocalAvailableTools() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : tools.values()) {
+			if (m.isLocalAvailable())
+				res.add(m);
+		}
+		return res;
+	}
+
+	/**
+	 * @return Tools which can be updated
+	 */
+	public TreeSet<Mod> getUpdatableTools() {
+		TreeSet<Mod> res = new TreeSet<Mod>();
+		for (Mod m : getLocalAvailableTools()) {
+			if (m.isNewerAvailable())
 				res.add(m);
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownload.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownload.java	(revision 619)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/mods/download/ModDownload.java	(revision 621)
@@ -80,5 +80,4 @@
 			unpacker = new Unpacker(zipFile, targetFolder, this);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/network/DrupalJSONQuery.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/network/DrupalJSONQuery.java	(revision 619)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/network/DrupalJSONQuery.java	(revision 621)
@@ -9,5 +9,5 @@
 import java.util.List;
 
-import net.oni2.aeinstaller.backend.Settings;
+import net.oni2.aeinstaller.backend.depot.DepotConfig;
 
 import org.apache.http.HttpEntity;
@@ -29,9 +29,4 @@
  */
 public class DrupalJSONQuery {
-
-	private static String getDepotUrl() {
-		return Settings.getInstance().get("depot_api_url",
-				"http://mods.oni2.net/?q=api/");
-	}
 
 	/**
@@ -56,5 +51,5 @@
 			}
 			HttpEntity data = new UrlEncodedFormEntity(nvps);
-			return executeQuery(getDepotUrl() + resource + "/" + action
+			return executeQuery(DepotConfig.getDepotApiUrl() + resource + "/" + action
 					+ ".json", data);
 		} catch (UnsupportedEncodingException e) {
@@ -80,5 +75,5 @@
 			String refName) throws Exception {
 		return executeQuery(
-				getDepotUrl() + resource + "/" + Integer.toString(index) + "/"
+				DepotConfig.getDepotApiUrl() + resource + "/" + Integer.toString(index) + "/"
 						+ refName + ".json", null);
 	}
@@ -100,5 +95,5 @@
 			String parameters) throws Exception {
 		return executeQuery(
-				getDepotUrl() + resource + "/" + Integer.toString(index)
+				DepotConfig.getDepotApiUrl() + resource + "/" + Integer.toString(index)
 						+ ".json" + parameters, null);
 	}
@@ -126,5 +121,5 @@
 		if (pagesize >= 0)
 			pagesizeN = "&pagesize=" + Integer.toString(pagesize);
-		return executeQuery(getDepotUrl() + resource + ".json" + pageN
+		return executeQuery(DepotConfig.getDepotApiUrl() + resource + ".json" + pageN
 				+ pagesizeN, null);
 	}
