diff --git a/PlayWall/pom.xml b/PlayWall/pom.xml
index 27eb4dac3bfd7ce6ba6a491a8de05d78b14e2b40..60dad96caaea7bc7f3a0996b0d6a63b66d87286f 100644
--- a/PlayWall/pom.xml
+++ b/PlayWall/pom.xml
@@ -53,8 +53,33 @@
             <artifactId>spring-expression</artifactId>
             <version>5.1.2.RELEASE</version>
         </dependency>
-    </dependencies>
 
+        <!--Testing-->
+        <dependency>
+            <groupId>org.testfx</groupId>
+            <artifactId>testfx-junit</artifactId>
+            <version>4.0.15-alpha</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <version>3.11.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testfx</groupId>
+            <artifactId>openjfx-monocle</artifactId>
+            <version>8u76-b04</version> <!-- jdk-9+181 for Java 9, jdk-11+26 for Java 11 -->
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 
     <build>
         <plugins>
diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
index 1d1bb173c459a7988765091cc943ee3353619968..dd7c4b284f2ec8552615a770415affa7f64bc2c8 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java
@@ -260,7 +260,7 @@ public class PlayPadImpl implements PlayPad {
 			try {
 				server.connect(session.getKey());
 			} catch (IOException | WebSocketException e) {
-				e.printStackTrace();
+				Logger.error(e);
 			} catch (SessionNotExisitsException ignored) {
 
 			}
diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java
index e18eb14424175d7ca90e15b7bfb36c2389bf1543..c61d5559d6145adc2e0e54e0a6c74e44004b39f5 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java
@@ -141,6 +141,12 @@ public class PlayPadMain extends Application implements LocalizationDelegate {
 		PlayPadPlugin.setRegistryCollection(new RegistryCollectionImpl());
 		PlayPadPlugin.setServerHandler(new ServerHandlerImpl());
 		PlayPadPlugin.setCommandExecutorHandler(new CommandExecutorHandlerImpl());
+
+		/*
+		 * Setup
+		 */
+
+		impl.startup(Localization.getBundle(), new LoginViewController());
 	}
 
 	@Override
@@ -151,12 +157,6 @@ public class PlayPadMain extends Application implements LocalizationDelegate {
 			PlayPadMain.stageIcon = Optional.of(stageIcon);
 			Alerts.getInstance().setDefaultIcon(stageIcon);
 
-			/*
-			 * Setup
-			 */
-
-			impl.startup(Localization.getBundle(), new LoginViewController());
-
 			// App Setup
 			NativeApplication.sharedInstance().setDockIcon(new Image("gfx/Logo-large.png"));
 			NativeApplication.sharedInstance().setAppearance(true);
diff --git a/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java b/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java
index fa0f568e3182f86684455fbdedf0fadc31001678..2adfc1041bb582c0e12a6c79fade32c8966eee0e 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java
@@ -24,9 +24,11 @@ public class ServerHandlerImpl implements ServerHandler {
 			PlayPadImpl impl = PlayPadMain.getProgramInstance();
 			Application.Parameters parameters = impl.getParameters();
 
-			Map<String, String> named = parameters.getNamed();
-			if (named.containsKey(SERVER_PARAM)) {
-				url = named.get(SERVER_PARAM);
+			if (parameters != null) {
+				Map<String, String> named = parameters.getNamed();
+				if (named.containsKey(SERVER_PARAM)) {
+					url = named.get(SERVER_PARAM);
+				}
 			}
 
 			server = new ServerImpl(url);
diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java
index f0433d760d52adc33a0ededea9c690785efce813..a0af515d98d066291f7fab3b8269e5993779236d 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java
@@ -57,28 +57,28 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 	static final String IMAGE = "gfx/Logo-large.png";
 
 	@FXML
-	private Label infoLabel;
+	Label infoLabel;
 	@FXML
-	private ImageView imageView;
+	ImageView imageView;
 
 	@FXML
-	private ListView<ProjectReference> projectListView;
+	ListView<ProjectReference> projectListView;
 
 	@FXML
-	private Button newProjectButton;
+	Button newProjectButton;
 	@FXML
-	private Button importProjectButton;
+	Button importProjectButton;
 	@FXML
-	private Button convertProjectButton;
+	Button convertProjectButton;
 
 	@FXML
-	private Button openButton;
+	Button openButton;
 	@FXML
-	private Button deleteButton;
+	Button deleteButton;
 
 	@FXML
-	private Label cloudLabel;
-	private FontIcon cloudIcon;
+	Label cloudLabel;
+	FontIcon cloudIcon;
 
 	public LaunchDialog(Stage stage) {
 		load("view/dialog", "LaunchDialog", PlayPadMain.getUiResourceBundle());
@@ -172,13 +172,14 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 	}
 
 	@FXML
-	private void newProjectButtonHandler(ActionEvent event) {
+	void newProjectButtonHandler(ActionEvent event) {
+		Logger.info("einfo");
 		ProjectNewDialog dialog = new ProjectNewDialog(getContainingWindow());
 		dialog.showAndWait().ifPresent(this::launchProject);
 	}
 
 	@FXML
-	private void importProjectButtonHandler(ActionEvent event) {
+	void importProjectButtonHandler(ActionEvent event) {
 		FileChooser chooser = new FileChooser();
 
 		String extensionName = Localization.getString(Strings.File_Filter_ZIP);
@@ -199,7 +200,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 	}
 
 	@FXML
-	private void convertProjectButtonHandler(ActionEvent event) {
+	void convertProjectButtonHandler(ActionEvent event) {
 		try {
 			List<ProjectReference> projects = ConverterV6.loadProjectReferences();
 			ChoiceDialog<ProjectReference> dialog = new ChoiceDialog<>(null, projects);
@@ -230,12 +231,12 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 	}
 
 	@FXML
-	private void openButtonHandler(ActionEvent event) {
+	void openButtonHandler(ActionEvent event) {
 		launchProject(getSelectedProject());
 	}
 
 	@FXML
-	private void deleteButtonHandler(ActionEvent event) {
+	void deleteButtonHandler(ActionEvent event) {
 		if (getSelectedProject() != null) {
 			ProjectReference ref = getSelectedProject();
 
@@ -260,7 +261,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 	}
 
 	@FXML
-	private void cloudIconClicked(MouseEvent event) {
+	void cloudIconClicked(MouseEvent event) {
 		Server server = PlayPadPlugin.getServerHandler().getServer();
 		if (server.getConnectionState() == ConnectionState.DISCONNECTED) {
 			SessionDelegate sessionDelegate = new LoginViewController();
@@ -268,7 +269,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 			try {
 				server.connect(session.getKey());
 			} catch (IOException | WebSocketException e) {
-				e.printStackTrace();
+				Logger.error(e);
 			} catch (SessionNotExisitsException ignored) {
 				Logger.warning("Session not exists");
 			}
@@ -310,7 +311,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 			Project project = loader.load();
 			PlayPadMain.getProgramInstance().openProject(project, e -> getStageContainer().ifPresent(NVCStage::close));
 		} catch (ProfileNotFoundException e) {
-			e.printStackTrace();
+			Logger.error(e);
 			showErrorMessage(getString(Strings.Error_Profile_NotFound, ref.getProfileReference(), e.getLocalizedMessage()));
 
 			// Choose new profile
@@ -322,10 +323,10 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState>
 			ref.setProfileReference(profile);
 		} catch (ProjectReader.ProjectReaderDelegate.ProfileAbortException ignored) {
 		} catch (ProjectNotFoundException e) {
-			e.printStackTrace();
+			Logger.error(e);
 			showErrorMessage(getString(Strings.Error_Project_NotFound, ref, e.getLocalizedMessage()));
 		} catch (Exception e) {
-			e.printStackTrace();
+			Logger.error(e);
 			showErrorMessage(getString(Strings.Error_Project_Open, ref, e.getLocalizedMessage()));
 		}
 	}
diff --git a/PlayWall/src/test/java/de/tobias/playpad/viewcontroller/LaunchDialogTest.java b/PlayWall/src/test/java/de/tobias/playpad/viewcontroller/LaunchDialogTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0c6cd130d60b3a91b07231ae7357f80333470d8
--- /dev/null
+++ b/PlayWall/src/test/java/de/tobias/playpad/viewcontroller/LaunchDialogTest.java
@@ -0,0 +1,42 @@
+package de.tobias.playpad.viewcontroller;
+
+import de.thecodelabs.logger.LogLevelFilter;
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.application.App;
+import de.thecodelabs.utils.application.ApplicationUtils;
+import de.thecodelabs.utils.application.container.PathType;
+import de.tobias.playpad.PlayPadMain;
+import de.tobias.playpad.update.VersionUpdater;
+import javafx.stage.Stage;
+import org.junit.Before;
+import org.junit.Test;
+import org.testfx.framework.junit.ApplicationTest;
+
+import static org.testfx.assertions.api.Assertions.assertThat;
+
+public class LaunchDialogTest extends ApplicationTest {
+
+	private LaunchDialog launchDialog;
+
+	@Before
+	public void init() {
+		App app = ApplicationUtils.registerMainApplication(PlayPadMain.class);
+		ApplicationUtils.registerUpdateSercive(new VersionUpdater());
+
+		Logger.init(app.getPath(PathType.LOG));
+		Logger.setLevelFilter(LogLevelFilter.DEBUG);
+
+		PlayPadMain playPadMain = new PlayPadMain();
+		playPadMain.init();
+	}
+
+	@Override
+	public void start(Stage stage) {
+		launchDialog = new LaunchDialog(stage);
+	}
+
+	@Test
+	public void testNewDialogTest() {
+		assertThat(lookup("#newProjectButton").queryButton()).isNotNull();
+	}
+}
diff --git a/PlayWall/src/test/resources/config/application.yml b/PlayWall/src/test/resources/config/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e4577d54ca36b96e489d83296d47c773d25174d1
--- /dev/null
+++ b/PlayWall/src/test/resources/config/application.yml
@@ -0,0 +1,19 @@
+name: "PlayWall"
+version: "6.2.0"
+build: 40
+identifier: "de.tobias.playpad.v7.test"
+date: "2019-02-04"
+
+main: "de.tobias.playpad.PlayPadMain"
+author: "Tobias Ullerich"
+
+basePath: "PlayWall"
+
+serverBaseURL: "https://playwall.thecodelabs.de/files"
+
+userInfo:
+  Website: "https://playwall.thecodelabs.de/"
+  Repository: "https://thecodelabs.de/PlayWall/PlayWallDesktop"
+  ChangelogURL: "https://playwall.thecodelabs.de/php/roadmap/index.php?id=4"
+  Server: "playwall.thecodelabs.de:8090"
+  AccountRegister: "https://playwall.thecodelabs.de/php/index.php"
diff --git a/PlayWall/src/test/resources/config/libLogger.yml b/PlayWall/src/test/resources/config/libLogger.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3c309583f9c0021ad159f12e2b777c4e1aa4ccac
--- /dev/null
+++ b/PlayWall/src/test/resources/config/libLogger.yml
@@ -0,0 +1,20 @@
+color:
+  enable: true
+  info: "GREEN"
+  warn: "YELLOW"
+  error: "RED"
+  time: "BLUE"
+  detail: "CYAN"
+  message: "RESET"
+
+dateFormatterPattern: "dd.MM.YY HH:mm:ss"
+
+defaultOutLevel: "DEBUG"
+defaultErrLevel: "ERROR"
+
+showShortPackageName: true
+showClassName: true
+showMethodName: true
+showLineNumber: true
+
+ignoreStandardStream: false
\ No newline at end of file
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java
index 8af34df2f31297cddcda024c415939141232c0ce..839ad9c7e91e42e2a45affd1cd60b57722df0cdf 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java
@@ -1,5 +1,6 @@
 package de.tobias.playpad.project.ref;
 
+import de.thecodelabs.logger.Logger;
 import de.thecodelabs.storage.xml.XMLHandler;
 import de.thecodelabs.utils.application.ApplicationUtils;
 import de.thecodelabs.utils.application.container.PathType;
@@ -144,8 +145,8 @@ public final class ProjectReferenceManager {
 		if (!loadedProjectOverview)
 			try {
 				loadProjects();
-			} catch (DocumentException | IOException e) {
-				e.printStackTrace();
+			} catch (IOException e) {
+				Logger.error(e);
 			}
 		return projects;
 	}
@@ -155,46 +156,50 @@ public final class ProjectReferenceManager {
 	public static final String PROJECT_ELEMENT = "Project";
 	private static final String ROOT_ELEMENT = "Settings";
 
-	public static void loadProjects() throws DocumentException, IOException {
-		Path path = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, FILE_NAME);
-		if (Files.exists(path)) {
-			XMLHandler<ProjectReference> loader = new XMLHandler<>(path);
-			projects = loader.loadElements(PROJECT_ELEMENT, new ProjectReferenceSerializer());
-		}
-
-		Server server = PlayPadPlugin.getServerHandler().getServer();
+	public static void loadProjects() throws IOException {
 		try {
-			List<ProjectReference> syncedProjects = server.getSyncedProjects();
-
-			// Add new synced projects in client
-			for (ProjectReference project : syncedProjects) {
-				if (projects.contains(project)) {
-					project.setSync(true);
-				} else {
-					projects.add(project);
-				}
+			Path path = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, FILE_NAME);
+			if (Files.exists(path)) {
+				XMLHandler<ProjectReference> loader = new XMLHandler<>(path);
+				projects = loader.loadElements(PROJECT_ELEMENT, new ProjectReferenceSerializer());
 			}
 
-			// Remove old projects from client
-			List<ProjectReference> removeProjects = new ArrayList<>();
+			Server server = PlayPadPlugin.getServerHandler().getServer();
+			try {
+				List<ProjectReference> syncedProjects = server.getSyncedProjects();
+
+				// Add new synced projects in client
+				for (ProjectReference project : syncedProjects) {
+					if (projects.contains(project)) {
+						project.setSync(true);
+					} else {
+						projects.add(project);
+					}
+				}
+
+				// Remove old projects from client
+				List<ProjectReference> removeProjects = new ArrayList<>();
 
-			for (ProjectReference project : projects) {
-				if (project.isSync()) {
-					if (!syncedProjects.contains(project)) {
-						removeProjects.add(project);
+				for (ProjectReference project : projects) {
+					if (project.isSync()) {
+						if (!syncedProjects.contains(project)) {
+							removeProjects.add(project);
+						}
 					}
 				}
-			}
-			for (ProjectReference project : removeProjects) {
-				removeProject(project);
+				for (ProjectReference project : removeProjects) {
+					removeProject(project);
+				}
+
+			} catch (IOException | LoginException e) {
+				Logger.error(e);
 			}
 
-		} catch (IOException | LoginException e) {
-			e.printStackTrace();
+			saveProjects();
+			loadedProjectOverview = true;
+		} catch (DocumentException ex) {
+			throw new RuntimeException(ex);
 		}
-
-		saveProjects();
-		loadedProjectOverview = true;
 	}
 
 	public static void saveProjects() throws IOException {
@@ -216,12 +221,11 @@ public final class ProjectReferenceManager {
 		if (!loadedProjectOverview)
 			try {
 				loadProjects();
-			} catch (DocumentException | IOException e) {
-				e.printStackTrace();
+			} catch (IOException e) {
+				Logger.error(e);
 			}
 
-		List<ProjectReference> items = new ArrayList<>();
-		items.addAll(projects);
+		List<ProjectReference> items = new ArrayList<>(projects);
 		items.sort((o1, o2) -> Long.compare(o2.getLastModified(), o1.getLastModified()));
 		return items;
 	}