Index: java/installer2/src/net/oni2/aeinstaller/backend/oni/management/Installer.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/backend/oni/management/Installer.java	(revision 809)
+++ java/installer2/src/net/oni2/aeinstaller/backend/oni/management/Installer.java	(revision 810)
@@ -113,5 +113,4 @@
 		}
 		HashSet<String> levelsAffectedNow = new HashSet<String>();
-		// TODO: fill set
 
 		File IGMD = new File(Paths.getEditionGDF(), "IGMD");
@@ -234,7 +233,11 @@
 		applyPatches(levels, foldersPatches, listener, log);
 
-		TreeSet<String> levelsAffectedBoth = new TreeSet<String>();
-		levelsAffectedBoth.addAll(levelsAffectedBefore);
-		levelsAffectedBoth.addAll(levelsAffectedNow);
+		TreeSet<String> levelsAffectedBoth = null;
+		if (levelsAffectedBefore != null) {
+			levelsAffectedBoth = new TreeSet<String>();
+			levelsAffectedBoth.addAll(levelsAffectedBefore);
+			levelsAffectedBoth.addAll(levelsAffectedNow);
+		}
+
 		combineBinaryFiles(levels, levelsAffectedBoth, listener, log);
 		combineBSLFolders(mods, listener, log);
@@ -539,5 +542,6 @@
 					"Installing level " + l);
 
-			if (levelsUpdated.contains(l.toLowerCase())) {
+			if ((levelsUpdated == null)
+					|| levelsUpdated.contains(l.toLowerCase())) {
 				ApplicationInvocationResult res = OniSplit.packLevel(
 						oniLevelFolders.get(l), new File(Paths.getEditionGDF(),
Index: java/installer2/src/net/oni2/aeinstaller/backend/oni/management/ModInstallationList.java
===================================================================
--- java/installer2/src/net/oni2/aeinstaller/backend/oni/management/ModInstallationList.java	(revision 809)
+++ java/installer2/src/net/oni2/aeinstaller/backend/oni/management/ModInstallationList.java	(revision 810)
@@ -30,25 +30,57 @@
 		return instance;
 	}
-	
+
+	/**
+	 * @return Currently installed mods
+	 */
 	public TreeSet<Integer> getInstalledMods() {
 		return mods;
 	}
-	
+
+	/**
+	 * Check if given mod is installed
+	 * 
+	 * @param packageId
+	 *            Package Id to check for
+	 * @return Is mod installed?
+	 */
 	public boolean isInstalled(int packageId) {
 		return mods.contains(packageId);
 	}
-	
+
+	/**
+	 * Set the mods that are installed by a new installation
+	 * 
+	 * @param mods
+	 *            List of installed mods
+	 */
 	public void setInstalledMods(TreeSet<Integer> mods) {
 		this.mods = mods;
 	}
-	
+
+	/**
+	 * @return List of affected levels by current installation
+	 */
 	public HashSet<String> getAffectedLevels() {
 		return affectedLevels;
 	}
-	
+
+	/**
+	 * Check if given level is affected by current mod installation
+	 * 
+	 * @param level
+	 *            Level name (e.g. level1_Final)
+	 * @return Is level affected?
+	 */
 	public boolean isLevelAffected(String level) {
 		return affectedLevels.contains(level.toLowerCase());
 	}
-	
+
+	/**
+	 * Set the levels that are affected by a new mod installation
+	 * 
+	 * @param levels
+	 *            List of affected level
+	 */
 	public void setAffectedLevels(HashSet<String> levels) {
 		affectedLevels.clear();
@@ -57,5 +89,11 @@
 		}
 	}
-	
+
+	/**
+	 * Check if the current state of the ModInstallationList was loaded from the
+	 * mod_installation.xml
+	 * 
+	 * @return Loaded from file?
+	 */
 	public boolean isLoadedFromFile() {
 		return isLoaded;
