Index: AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 594)
+++ AE/installer2/src/net/oni2/aeinstaller/AEInstaller2.java	(revision 596)
@@ -17,9 +17,11 @@
 import javax.swing.UIManager.LookAndFeelInfo;
 
-import net.oni2.aeinstaller.backend.OniSplit;
+import net.oni2.aeinstaller.backend.Paths;
 import net.oni2.aeinstaller.backend.Settings;
 import net.oni2.aeinstaller.backend.Settings.Platform;
 import net.oni2.aeinstaller.backend.StuffToRefactorLater;
 import net.oni2.aeinstaller.backend.depot.DepotManager;
+import net.oni2.aeinstaller.backend.oni.Installer;
+import net.oni2.aeinstaller.backend.oni.OniSplit;
 import net.oni2.aeinstaller.gui.MainWin;
 
@@ -62,6 +64,6 @@
 	 */
 	public static void main(String[] args) {
-		new File(Settings.getPrefsPath()).mkdirs();
-		new File(Settings.getDownloadPath()).mkdirs();
+		Paths.getPrefsPath().mkdirs();
+		Paths.getDownloadPath().mkdirs();
 
 		boolean debug = false;
@@ -71,8 +73,8 @@
 		if (!debug) {
 			try {
-				System.setOut(new PrintStream(Settings.getPrefsPath()
-						+ "aei_output.log"));
-				System.setErr(new PrintStream(Settings.getPrefsPath()
-						+ "aei_error.log"));
+				System.setOut(new PrintStream(new File(Paths.getPrefsPath(),
+						"aei_output.log")));
+				System.setErr(new PrintStream(new File(Paths.getPrefsPath(),
+						"aei_error.log")));
 			} catch (FileNotFoundException e1) {
 				e1.printStackTrace();
@@ -86,5 +88,5 @@
 		Settings.setDebug(debug);
 		DepotManager.getInstance().loadFromFile(
-				new File(Settings.getDepotCacheFilename()));
+				Settings.getDepotCacheFilename());
 
 		SwingJavaBuilder.getConfig().addResourceBundle(imagesBundle);
@@ -96,5 +98,5 @@
 		System.setProperty("networkaddress.cache.ttl", "5");
 		System.setProperty("networkaddress.cache.negative.ttl", "1");
-		
+
 		try {
 			String laf = Settings.getInstance().get("lookandfeel",
@@ -120,9 +122,9 @@
 
 		// TODO
-		System.out.println("JarPath:   " + Settings.getJarPath());
-		System.out.println("PrefsPath: " + Settings.getPrefsPath());
-		System.out.println("DataPath:  " + Settings.getDataPath());
-		System.out.println("DownPath:  " + Settings.getDownloadPath());
-		System.out.println("TempPath:  " + Settings.getTempPath());
+		System.out.println("JarPath:   " + Paths.getInstallerPath());
+		System.out.println("PrefsPath: " + Paths.getPrefsPath());
+		System.out.println("DataPath:  " + Paths.getModsPath());
+		System.out.println("DownPath:  " + Paths.getDownloadPath());
+		System.out.println("TempPath:  " + Paths.getTempPath());
 		System.out.println("ValidPath: "
 				+ StuffToRefactorLater.verifyRunningDirectory());
@@ -130,4 +132,5 @@
 		System.out.println("Architect: " + Settings.getArchitecture());
 		System.out.println(".NET:      " + OniSplit.isDotNETInstalled());
+		System.out.println("Globalized:" + Installer.isEditionInitialized());
 
 		if (!StuffToRefactorLater.verifyRunningDirectory()) {
@@ -139,4 +142,6 @@
 				return;
 			}
+		} else {
+			Installer.initializeEdition();
 		}
 
Index: AE/installer2/src/net/oni2/aeinstaller/backend/OniSplit.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/OniSplit.java	(revision 594)
+++ 	(revision )
@@ -1,72 +1,0 @@
-package net.oni2.aeinstaller.backend;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Map;
-import java.util.Vector;
-
-import net.oni2.aeinstaller.backend.Settings.Architecture;
-import net.oni2.aeinstaller.backend.app_launcher.QuickAppExecution;
-
-/**
- * @author Christian Illy
- */
-public class OniSplit {
-
-	/**
-	 * @return is a .NET implementation installed?
-	 */
-	public static boolean isDotNETInstalled() {
-		switch (Settings.getPlatform()) {
-			case WIN:
-				try {
-					int view = WinRegistry.KEY_WOW64_32KEY;
-					if (Settings.getArchitecture() == Architecture.AMD64)
-						view = WinRegistry.KEY_WOW64_64KEY;
-
-					Map<String, String> m = WinRegistry
-							.readStringValues(
-									WinRegistry.HKEY_LOCAL_MACHINE,
-									"Software\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727",
-									view);
-					return m != null;
-				} catch (IllegalArgumentException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (IllegalAccessException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (InvocationTargetException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (Exception e) {
-					if (!e.getMessage()
-							.equals("Registry access not supported (not a Windows OS?)."))
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-				}
-				return false;
-			case MACOS:
-			case LINUX:
-				Vector<String> cmd = new Vector<String>();
-				cmd.add("which");
-				cmd.add("mono");
-				Vector<String> res = null;
-				try {
-					res = QuickAppExecution.execute(cmd);
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-				if (res != null) {
-					if (res.get(0).startsWith("/")
-							&& res.get(0).endsWith("mono")) {
-						return true;
-					}
-				}
-				return false;
-			default:
-				return false;
-		}
-	}
-}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/Paths.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/Paths.java	(revision 596)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/Paths.java	(revision 596)
@@ -0,0 +1,110 @@
+package net.oni2.aeinstaller.backend;
+
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
+/**
+ * @author Christian Illy
+ */
+public class Paths {
+
+	/**
+	 * Get the Jar path
+	 * 
+	 * @return Path
+	 */
+	public static File getInstallerPath() {
+		String jarPath = Settings.class.getProtectionDomain().getCodeSource()
+				.getLocation().getPath();
+		String decodedPath = null;
+		try {
+			decodedPath = URLDecoder.decode(jarPath, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		return new File(decodedPath).getParentFile();
+	}
+
+	/**
+	 * Get the preferences path
+	 * 
+	 * @return Path
+	 */
+	public static File getPrefsPath() {
+		return getInstallerPath();
+	}
+
+	/**
+	 * Get the path to store downloaded files
+	 * 
+	 * @return Download path
+	 */
+	public static File getDownloadPath() {
+		return new File(getTempPath(), "downloads");
+	}
+
+	/**
+	 * Get the path to store mods
+	 * 
+	 * @return Data path
+	 */
+	public static File getModsPath() {
+		return new File(getInstallerPath(), "mods");
+	}
+
+	/**
+	 * Get the path where vanilla .oni-files are stored
+	 * 
+	 * @return Vanilla .oni's path
+	 */
+	public static File getVanillaOnisPath() {
+		return new File(getInstallerPath(), "vanilla");
+	}
+
+	/**
+	 * Get the base path of Oni
+	 * 
+	 * @return Vanilla Oni path
+	 */
+	public static File getOniBasePath() {
+		return getInstallerPath().getParentFile().getParentFile();
+	}
+
+	/**
+	 * Get the base path of the Edition
+	 * 
+	 * @return Edition path
+	 */
+	public static File getEditionBasePath() {
+		return getInstallerPath().getParentFile();
+	}
+
+	/**
+	 * Get the path where the vanilla Oni GDF is located
+	 * 
+	 * @return Vanilla Oni GDF
+	 */
+	public static File getVanillaGDF() {
+		return new File(getOniBasePath(), "GameDataFolder");
+	}
+
+	/**
+	 * Get the path where the Edition GDF is located
+	 * 
+	 * @return Edition GDF
+	 */
+	public static File getEditionGDF() {
+		return new File(getEditionBasePath(), "GameDataFolder");
+	}
+
+	/**
+	 * Get the systems temp-path
+	 * 
+	 * @return Path
+	 */
+	public static File getTempPath() {
+		return new File(System.getProperty("java.io.tmpdir"), "oni_aei");
+	}
+
+}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java	(revision 594)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/Settings.java	(revision 596)
@@ -7,6 +7,4 @@
 import java.io.IOException;
 import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.util.HashMap;
 import java.util.Vector;
@@ -142,65 +140,12 @@
 
 	/**
-	 * Get the Jar path
-	 * 
-	 * @return Path
-	 */
-	public static String getJarPath() {
-		String jarPath = Settings.class.getProtectionDomain().getCodeSource()
-				.getLocation().getPath();
-		String decodedPath = null;
-		try {
-			decodedPath = URLDecoder.decode(jarPath, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		return new File(decodedPath).getParentFile().getPath() + "/";
-	}
-
-	/**
-	 * Get the preferences path
-	 * 
-	 * @return Path
-	 */
-	public static String getPrefsPath() {
-		return getJarPath();
-	}
-
-	/**
-	 * Get the path to store downloaded files
-	 * 
-	 * @return Download path
-	 */
-	public static String getDownloadPath() {
-		return getTempPath() + "oni_aei/";
-	}
-
-	/**
-	 * Get the path to store game information data
-	 * 
-	 * @return Data path
-	 */
-	public static String getDataPath() {
-		return getJarPath() + "mods/";
-	}
-
-	/**
-	 * Get the systems temp-path
-	 * 
-	 * @return Path
-	 */
-	public static String getTempPath() {
-		return new File(System.getProperty("java.io.tmpdir")).getPath() + "/";
-	}
-
-	/**
 	 * @return Mod Depot cache filename
 	 */
-	public static String getDepotCacheFilename() {
-		return Settings.getPrefsPath() + "ModDepotCache.xml";
-	}
-
-	private static String getSettingsFilename() {
-		return Settings.getPrefsPath() + "AEI-Settings.xml";
+	public static File getDepotCacheFilename() {
+		return new File(Paths.getPrefsPath(), "ModDepotCache.xml");
+	}
+
+	private static File getSettingsFilename() {
+		return new File(Paths.getPrefsPath(), "AEI-Settings.xml");
 	}
 
Index: AE/installer2/src/net/oni2/aeinstaller/backend/StuffToRefactorLater.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/StuffToRefactorLater.java	(revision 594)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/StuffToRefactorLater.java	(revision 596)
@@ -1,5 +1,4 @@
 package net.oni2.aeinstaller.backend;
 
-import java.io.File;
 
 public class StuffToRefactorLater {
@@ -9,8 +8,5 @@
 	 */
 	public static boolean verifyRunningDirectory() {
-		File jarPath = new File(Settings.getJarPath());
-		File parentPath = jarPath.getParentFile().getParentFile();
-		File gdf = new File(parentPath, "GameDataFolder");
-		return gdf.exists() && gdf.isDirectory();
+		return Paths.getVanillaGDF().exists() && Paths.getVanillaGDF().isDirectory();
 	}
 }
Index: AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java	(revision 596)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java	(revision 596)
@@ -0,0 +1,65 @@
+package net.oni2.aeinstaller.backend.oni;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.Scanner;
+
+import net.oni2.aeinstaller.backend.Paths;
+
+import org.apache.commons.io.FileUtils;
+
+/**
+ * @author Christian Illy
+ */
+public class Installer {
+	/**
+	 * @return Is Edition Core initialized
+	 */
+	public static boolean isEditionInitialized() {
+		File editionGDF = Paths.getEditionGDF();
+		File vanillaDats = Paths.getVanillaGDF();
+		return editionGDF.exists() && vanillaDats.exists();
+	}
+
+	private static void createEmptyPath(File path) throws IOException {
+		if (path.exists())
+			FileUtils.deleteDirectory(path);
+		path.mkdirs();
+	}
+
+	/**
+	 * Initializes the Edition core
+	 */
+	public static void initializeEdition() {
+		File init = new File(Paths.getTempPath(), "init");
+		try {
+			createEmptyPath(Paths.getEditionGDF());
+			createEmptyPath(Paths.getVanillaOnisPath());
+			createEmptyPath(init);
+
+			for (File f : Paths.getVanillaGDF().listFiles(new FilenameFilter() {
+				@Override
+				public boolean accept(File dir, String name) {
+					return name.endsWith(".dat");
+				}
+			})) {
+				String levelName = f.getName().substring(0,
+						f.getName().indexOf('.'));
+				int levelNumber = -1;
+
+				Scanner fi = new Scanner(levelName);
+				fi.useDelimiter("[^\\p{Alnum}]");
+				while (fi.hasNextInt()) {
+					levelNumber = fi.nextInt();
+				}
+
+				OniSplit.export(new File(init, levelName), f);
+			}
+
+			// TODO: FileUtils.deleteDirectory(Paths.getEditionGDF());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
Index: AE/installer2/src/net/oni2/aeinstaller/backend/oni/OniSplit.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/backend/oni/OniSplit.java	(revision 596)
+++ AE/installer2/src/net/oni2/aeinstaller/backend/oni/OniSplit.java	(revision 596)
@@ -0,0 +1,125 @@
+package net.oni2.aeinstaller.backend.oni;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+import java.util.Vector;
+
+import net.oni2.aeinstaller.backend.Paths;
+import net.oni2.aeinstaller.backend.Settings;
+import net.oni2.aeinstaller.backend.Settings.Architecture;
+import net.oni2.aeinstaller.backend.Settings.Platform;
+import net.oni2.aeinstaller.backend.WinRegistry;
+import net.oni2.aeinstaller.backend.app_launcher.QuickAppExecution;
+
+/**
+ * @author Christian Illy
+ */
+public class OniSplit {
+
+	/**
+	 * @return is a .NET implementation installed?
+	 */
+	public static boolean isDotNETInstalled() {
+		switch (Settings.getPlatform()) {
+			case WIN:
+				try {
+					int view = WinRegistry.KEY_WOW64_32KEY;
+					if (Settings.getArchitecture() == Architecture.AMD64)
+						view = WinRegistry.KEY_WOW64_64KEY;
+
+					Map<String, String> m = WinRegistry
+							.readStringValues(
+									WinRegistry.HKEY_LOCAL_MACHINE,
+									"Software\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727",
+									view);
+					return m != null;
+				} catch (IllegalArgumentException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				} catch (IllegalAccessException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				} catch (InvocationTargetException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				} catch (Exception e) {
+					if (!e.getMessage()
+							.equals("Registry access not supported (not a Windows OS?)."))
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+				}
+				return false;
+			case MACOS:
+			case LINUX:
+				Vector<String> cmd = new Vector<String>();
+				cmd.add("which");
+				cmd.add("mono");
+				Vector<String> res = null;
+				try {
+					res = QuickAppExecution.execute(cmd);
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+				if (res != null) {
+					if (res.get(0).startsWith("/")
+							&& res.get(0).endsWith("mono")) {
+						return true;
+					}
+				}
+				return false;
+			default:
+				return false;
+		}
+	}
+
+	/**
+	 * Export given dat-file to target folder
+	 * 
+	 * @param targetFolder
+	 *            Target folder
+	 * @param input
+	 *            Dat file
+	 */
+	public static void export(File targetFolder, File input) {
+		if (!targetFolder.exists())
+			targetFolder.mkdir();
+
+		Vector<String> cmdLine = getProgramInvocation();
+		cmdLine.add("-export");
+		cmdLine.add(targetFolder.getPath());
+		cmdLine.add(input.getPath());
+		System.out.println(cmdLine.toString());
+		Vector<String> res = null;
+		try {
+			res = QuickAppExecution.execute(cmdLine);
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		if (res != null) {
+			System.out.println(res.toString());
+		}
+	}
+
+	public static void importLevel() {
+		getImportParam();
+	}
+
+	private static String getImportParam() {
+		if (Settings.getPlatform() == Platform.MACOS)
+			return "-import:sep";
+		else
+			return "-import:nosep";
+	}
+
+	private static Vector<String> getProgramInvocation() {
+		Vector<String> res = new Vector<String>();
+		if (Settings.getPlatform() != Platform.WIN)
+			res.add("mono");
+		res.add(new File(Paths.getInstallerPath(), "Onisplit.exe").getPath());
+		return res;
+	}
+}
Index: AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java
===================================================================
--- AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 594)
+++ AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java	(revision 596)
@@ -2,5 +2,4 @@
 
 import java.awt.Frame;
-import java.io.File;
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -190,6 +189,5 @@
 	private void saveLocalData() {
 		Settings.getInstance().serializeToFile();
-		DepotManager.getInstance().saveToFile(
-				new File(Settings.getDepotCacheFilename()));
+		DepotManager.getInstance().saveToFile(Settings.getDepotCacheFilename());
 	}
 
@@ -264,5 +262,5 @@
 				JOptionPane.INFORMATION_MESSAGE);
 	}
-	
+
 	@SuppressWarnings("unused")
 	private void revertSelection() {
@@ -271,6 +269,4 @@
 				JOptionPane.INFORMATION_MESSAGE);
 	}
-	
-	
 
 	private void modSelection(NodeMod n) {
