diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java
index a6232e848d8c1e6cbb825eef9520d4b5aa472196..9e2d8e98ef4f194d57f2f44688834281fea19347 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java
+++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java
@@ -54,6 +54,7 @@ import de.tobias.playpad.settings.ProfileReference;
 import de.tobias.playpad.tigger.TriggerRegistry;
 import de.tobias.playpad.trigger.CartTriggerItemConnect;
 import de.tobias.playpad.trigger.VolumeTriggerItemConnect;
+import de.tobias.playpad.update.PlayPadUpdater;
 import de.tobias.playpad.update.Updatable;
 import de.tobias.playpad.update.UpdateRegistery;
 import de.tobias.playpad.view.MapperOverviewViewController;
diff --git a/PlayWall/src/de/tobias/playpad/PlayPadUpdater.java b/PlayWall/src/de/tobias/playpad/update/PlayPadUpdater.java
similarity index 98%
rename from PlayWall/src/de/tobias/playpad/PlayPadUpdater.java
rename to PlayWall/src/de/tobias/playpad/update/PlayPadUpdater.java
index fa3d66a15807d4d178b1ba4f8a89d09c309ace16..f7d3c16f59e26a6e2b604215d50327333c54c2db 100644
--- a/PlayWall/src/de/tobias/playpad/PlayPadUpdater.java
+++ b/PlayWall/src/de/tobias/playpad/update/PlayPadUpdater.java
@@ -1,4 +1,4 @@
-package de.tobias.playpad;
+package de.tobias.playpad.update;
 
 import java.io.IOException;
 import java.net.URISyntaxException;
diff --git a/PlayWall/src/de/tobias/playpad/update/Updates.java b/PlayWall/src/de/tobias/playpad/update/Updates.java
new file mode 100644
index 0000000000000000000000000000000000000000..91bbbc849f1589ea0bb955e5b65d25397e62922a
--- /dev/null
+++ b/PlayWall/src/de/tobias/playpad/update/Updates.java
@@ -0,0 +1,121 @@
+package de.tobias.playpad.update;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import de.tobias.playpad.AppUserInfoStrings;
+import de.tobias.utils.application.App;
+import de.tobias.utils.application.ApplicationUtils;
+import de.tobias.utils.application.NativeLauncher;
+import de.tobias.utils.application.container.PathType;
+import de.tobias.utils.util.IOUtils;
+import de.tobias.utils.util.OS;
+import javafx.application.Platform;
+
+public class Updates {
+
+	// Ornder im App-Folder wo Updates zwischengespeichert werden sollen.
+	private static final String CACHE_FOLER = "Updates";
+
+	// Name der Updater Datei
+	private static String JAR_NAME = "Updater.jar";
+	private static String EXE_NAME = "Updater.exe";
+
+	/**
+	 * Sollte in einem Extra Thread gemacht werden, da der Updater gedownloaded wird.
+	 * 
+	 * @throws IOException
+	 */
+	public static void update() throws IOException {
+		App app = ApplicationUtils.getApplication();
+		String downloadPath = app.getPath(PathType.DOWNLOAD, CACHE_FOLER).toString();
+		String updateParameter = UpdateRegistery.buildParamaterString(downloadPath);
+
+		boolean successfulStartUpdate = false;
+
+		// Start des Update Prozesses
+		if (OS.isWindows()) {
+			successfulStartUpdate = updateWindows(updateParameter, UpdateRegistery.needsAdminPermission());
+		} else if (OS.isMacOS()) {
+			successfulStartUpdate = updateMacOS(updateParameter);
+		}
+
+		if (successfulStartUpdate) {
+			// Kill the program
+			Platform.exit();
+			System.exit(0);
+		}
+	}
+
+	private static boolean updateWindows(String parameter, boolean needAdminPermission) throws IOException {
+		Path path = searchForFile(EXE_NAME);
+		if (path == null) {
+			App app = ApplicationUtils.getApplication();
+
+			String updaterURL = app.getInfo().getUserInfo().get(AppUserInfoStrings.UPDATER_PROGRAM) + EXE_NAME;
+			Path downloadUpdaterFile = ApplicationUtils.getApplication().getPath(PathType.DOWNLOAD, EXE_NAME);
+
+			downloadUpdater(updaterURL, downloadUpdaterFile);
+		}
+		startExeFile(parameter, path, needAdminPermission);
+		return false;
+	}
+
+	private static boolean updateMacOS(String parameter) throws IOException {
+		Path path = searchForFile(JAR_NAME);
+		if (path == null) {
+			App app = ApplicationUtils.getApplication();
+
+			String updaterURL = app.getInfo().getUserInfo().get(AppUserInfoStrings.UPDATER_PROGRAM) + JAR_NAME;
+			Path downloadUpdaterFile = ApplicationUtils.getApplication().getPath(PathType.DOWNLOAD, JAR_NAME);
+
+			downloadUpdater(updaterURL, downloadUpdaterFile);
+		}
+		startJarFile(parameter, path);
+		return false;
+	}
+
+	private static void downloadUpdater(String updaterURL, Path path) throws IOException, MalformedURLException {
+		URL url = new URL(updaterURL);
+		InputStream iStr = url.openStream();
+
+		IOUtils.copy(iStr, path);
+
+		iStr.close();
+	}
+
+	private static void startExeFile(String parameter, Path fileExe, boolean needAdminPermission) throws IOException {
+		if (needAdminPermission) {
+			NativeLauncher.executeAsAdministrator(fileExe.toAbsolutePath().toString(), parameter);
+		} else {
+			ProcessBuilder builder = new ProcessBuilder(fileExe.toAbsolutePath().toString(), parameter);
+			builder.start();
+		}
+
+		System.exit(0);
+	}
+
+	private static Path searchForFile(String name) {
+		Path file = Paths.get(name);
+		Path fileFolder = ApplicationUtils.getApplication().getPath(PathType.DOWNLOAD, name);
+
+		if (Files.exists(file)) {
+			return file;
+		} else if (Files.exists(fileFolder)) {
+			return fileFolder;
+		}
+		return null;
+	}
+
+	private static void startJarFile(String parameter, Path fileJar) throws IOException {
+		ProcessBuilder builder = new ProcessBuilder("java", "-jar", fileJar.toAbsolutePath().toString(), parameter);
+		builder.start();
+		System.exit(0);
+	}
+
+}
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java b/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java
index 41830f8e77e9468b342a5172ae78f63bd5366cbd..c33fffdfd7df206c1edeff9ee6a14c09e93a8b25 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java
@@ -1,7 +1,7 @@
 package de.tobias.playpad.viewcontroller.cell;
 
-import de.tobias.playpad.PlayPadUpdater;
 import de.tobias.playpad.Strings;
+import de.tobias.playpad.update.PlayPadUpdater;
 import de.tobias.playpad.update.Updatable;
 import de.tobias.utils.util.Localization;
 import javafx.scene.control.ListCell;
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java
index 998f8b5f6b3e052a89d90f89988963bc682c64e0..6c967a0dc9a2c08bf659f42ad2222a50b4753cd5 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java
@@ -53,7 +53,7 @@ import javafx.stage.Window;
 
 public class UpdateTabViewController extends SettingsTabViewController {
 
-	private static final String DOWNLOAD_FOLDER = "Updates";
+	@Deprecated private static final String DOWNLOAD_FOLDER = "Updates";
 	private static final String UPDATER_JAR = "Updater.jar";
 	private static final String UPDATER_EXE = "Updater.exe";
 
@@ -268,6 +268,7 @@ public class UpdateTabViewController extends SettingsTabViewController {
 		oStr.close();
 	}
 
+	@Deprecated
 	private static void startExeFile(String parameter, Path fileExe, boolean admin) throws IOException {
 		if (admin) {
 			NativeLauncher.executeAsAdministrator(fileExe.toAbsolutePath().toString(), parameter);
@@ -279,6 +280,7 @@ public class UpdateTabViewController extends SettingsTabViewController {
 		System.exit(0);
 	}
 
+	@Deprecated
 	private static void startJarFile(String parameter, Path fileJar) throws IOException {
 		ProcessBuilder builder = new ProcessBuilder("java", "-jar", fileJar.toAbsolutePath().toString(), parameter);
 		builder.start();