Index: AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java	(revision 625)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java	(revision 631)
@@ -8,4 +8,5 @@
 import java.io.FilenameFilter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.PrintWriter;
 import java.text.SimpleDateFormat;
@@ -19,4 +20,5 @@
 import java.util.Vector;
 
+import net.oni2.aeinstaller.AEInstaller2;
 import net.oni2.aeinstaller.backend.Paths;
 import net.oni2.aeinstaller.backend.Settings;
@@ -244,36 +246,8 @@
 		combineBSLFolders(mods, listener);
 
-		if (Settings.getInstance().get("copyintro", false)) {
-			File src = new File(Paths.getVanillaGDF(), "intro.bik");
-			if (src.exists()) {
-				try {
-					FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
-			}
-		}
-		if (Settings.getInstance().get("copyoutro", true)) {
-			File src = new File(Paths.getVanillaGDF(), "outro.bik");
-			if (src.exists()) {
-				try {
-					FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
-			}
-		}
+		copyVideos();
 
 		if (unlockLevels.size() > 0) {
-			File dat = new File(Paths.getEditionBasePath(), "persist.dat");
-			if (dat.exists()) {
-				PersistDat save = new PersistDat(dat);
-				HashSet<Integer> currentlyUnlocked = save.getUnlockedLevels();
-				currentlyUnlocked.addAll(unlockLevels);
-				save.setUnlockedLevels(currentlyUnlocked);
-				save.close();
-			} else {
-				// TODO: what if persist.dat does not exist?
-			}
+			unlockLevels(unlockLevels);
 		}
 	}
@@ -445,4 +419,45 @@
 	}
 
+	private static void copyVideos() {
+		if (Settings.getInstance().get("copyintro", false)) {
+			File src = new File(Paths.getVanillaGDF(), "intro.bik");
+			if (src.exists()) {
+				try {
+					FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		if (Settings.getInstance().get("copyoutro", true)) {
+			File src = new File(Paths.getVanillaGDF(), "outro.bik");
+			if (src.exists()) {
+				try {
+					FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+
+	private static void unlockLevels(HashSet<Integer> unlockLevels) {
+		File dat = new File(Paths.getEditionBasePath(), "persist.dat");
+		if (!dat.exists()) {
+			InputStream is = AEInstaller2.class.getResourceAsStream("/net/oni2/aeinstaller/resources/persist.dat");
+			try {
+				FileUtils.copyInputStreamToFile(is, dat);
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		PersistDat save = new PersistDat(dat);
+		HashSet<Integer> currentlyUnlocked = save.getUnlockedLevels();
+		currentlyUnlocked.addAll(unlockLevels);
+		save.setUnlockedLevels(currentlyUnlocked);
+		save.close();
+	}
+
 	/**
 	 * Initializes the Edition core
