diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ChartController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ChartController.java
index f6149de7ca9c251099db96221f959ec1979f3b9a..438092c0968b2bfecaf8abb643c0d0ca39571fae 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ChartController.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ChartController.java
@@ -21,7 +21,7 @@ import de.deadlocker8.budgetmaster.logic.utils.Helpers;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
 import de.deadlocker8.budgetmasterclient.ui.Refreshable;
 import de.deadlocker8.budgetmasterclient.ui.Styleable;
-import de.deadlocker8.budgetmasterclient.utils.UIHelpers;
+import de.deadlocker8.budgetmasterclient.utils.LoadingModal;
 import fontAwesome.FontIcon;
 import fontAwesome.FontIconType;
 import javafx.application.Platform;
@@ -39,7 +39,6 @@ import javafx.scene.layout.AnchorPane;
 import javafx.scene.layout.Priority;
 import javafx.scene.layout.VBox;
 import javafx.scene.paint.Color;
-import javafx.stage.Stage;
 import logger.Logger;
 import tools.AlertGenerator;
 import tools.ConvertTo;
@@ -249,7 +248,7 @@ public class ChartController implements Refreshable, Styleable
 	@Override
 	public void refresh()
 	{
-		Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_CHARTS), controller.getStage(), controller.getIcon());
+		LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_CHARTS), controller.getStage(), controller.getIcon());
 
 		// prepare chart categories
 		LocalDate startDate = LocalDate.parse(controller.getCurrentDate().withDayOfMonth(1).toString("yyyy-MM-dd"));
@@ -270,10 +269,7 @@ public class ChartController implements Refreshable, Styleable
 			chartMonthShow();
 
 			Platform.runLater(() -> {
-				if(modalStage != null)
-				{
-					modalStage.close();
-				}
+				LoadingModal.closeModal();
 			});
 		});
 	}
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java
index f27efd179b5bef763882fe3eece03f01e20a1509..10642b8d4253316d7e111b72dcf5cdddbe5c7d1d 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java
@@ -31,7 +31,7 @@ import de.deadlocker8.budgetmaster.logic.utils.Colors;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
 import de.deadlocker8.budgetmasterclient.ui.commandLine.CommandBundle;
 import de.deadlocker8.budgetmasterclient.ui.commandLine.CommandLine;
-import de.deadlocker8.budgetmasterclient.utils.UIHelpers;
+import de.deadlocker8.budgetmasterclient.utils.LoadingModal;
 import fontAwesome.FontIcon;
 import fontAwesome.FontIconType;
 import javafx.animation.FadeTransition;
@@ -132,26 +132,36 @@ public class Controller extends BaseController
 		stage.getScene().getStylesheets().add("/de/deadlocker8/budgetmaster/ui/style.css");
 	}
 	
+	public void shutdown()
+	{
+		Logger.debug("Stopping local BudgetMasterServer...");
+		try
+		{
+			ServerConnection connection = new ServerConnection(settings);
+			connection.shutdownServer();
+		}
+		catch(Exception e)
+		{
+			Logger.error(e);
+		}
+			
+		Worker.shutdown();		
+		System.exit(0);
+	}
+	
 	@Override
 	public void init()
 	{		
+		Thread shutdownThread = new Thread(() -> {
+			shutdown();
+		});		
+		
 		getStage().setOnCloseRequest((event)->{
-			Worker.shutdown();
+			Runtime.getRuntime().removeShutdownHook(shutdownThread);
+			shutdown();
 		});
 		
-		Runtime.getRuntime().addShutdownHook(new Thread(() -> {
-			Logger.debug("Stopping local BudgetMasterServer...");
-			try
-			{
-				ServerConnection connection = new ServerConnection(settings);
-				connection.shutdownServer();
-			}
-			catch(Exception e)
-			{
-				Logger.error(e);
-			}
-			System.exit(0);
-		}));
+		Runtime.getRuntime().addShutdownHook(shutdownThread);
 		
 		if(settings.getServerType() == null)
 		{
@@ -614,32 +624,26 @@ public class Controller extends BaseController
 		Optional<ButtonType> result = alert.showAndWait();						
 		if (result.get() == buttonTypeOne)
 		{					
-			Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_UPDATE), getStage(), icon);
+			LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_UPDATE), getStage(), icon);
 			
 			Worker.runLater(() -> {
 				try 
 				{
 					updater.downloadLatestVersion();
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}							
+						LoadingModal.closeModal();						
 					});
 				}
 				catch(Exception ex)
 				{
 					Logger.error(ex);
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-							AlertGenerator.showAlert(AlertType.ERROR, 
-													Localization.getString(Strings.TITLE_ERROR),
-													"", 
-													Localization.getString(Strings.ERROR_UPDATER_DOWNLOAD_LATEST_VERSION, ex.getMessage()), 
-													icon, getStage(), null, true);
-						}							
+						LoadingModal.closeModal();
+						AlertGenerator.showAlert(AlertType.ERROR, 
+												Localization.getString(Strings.TITLE_ERROR),
+												"", 
+												Localization.getString(Strings.ERROR_UPDATER_DOWNLOAD_LATEST_VERSION, ex.getMessage()), 
+												icon, getStage(), null, true);													
 					});
 				}
 			});
@@ -784,7 +788,7 @@ public class Controller extends BaseController
 	
 	public void refresh(FilterSettings newFilterSettings)
 	{
-		Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATA), getStage(), icon);
+		LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATA), getStage(), icon);
 
 		Worker.runLater(() -> {
 			try
@@ -804,10 +808,7 @@ public class Controller extends BaseController
 													Localization.getString(Strings.WARNING_SERVER_VERSION, serverVersion.getVersionName(), Localization.getString(Strings.VERSION_NAME)), 
 													icon, getStage(), null, false);				
 						
-							if(modalStage != null)
-							{
-								modalStage.close();
-							};
+							LoadingModal.closeModal();
 							categoryHandler = new CategoryHandler(null);				
 							toggleAllTabsExceptSettings(true);
 							tabPane.getSelectionModel().select(tabSettings);	
@@ -819,10 +820,7 @@ public class Controller extends BaseController
 				{
 					Logger.error(e1);
 					Platform.runLater(()->{
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}
+						LoadingModal.closeModal();
 					});
 					
 					if(e1.getMessage().contains("404"))
@@ -865,10 +863,7 @@ public class Controller extends BaseController
 				paymentHandler.filter(newFilterSettings, new TagHandler(settings));
 
 				Platform.runLater(() -> {
-					if(modalStage != null)
-					{
-						modalStage.close();
-					}
+					LoadingModal.closeModal();
 					toggleAllTabsExceptSettings(false);
 					refreshAllTabs();
 				});
@@ -877,11 +872,7 @@ public class Controller extends BaseController
 			{
 				Logger.error(e);
 				Platform.runLater(() -> {
-					if(modalStage != null)
-					{
-						modalStage.close();
-					}
-					Logger.error(e);
+					LoadingModal.closeModal();
 					categoryHandler = new CategoryHandler(null);	
 					showConnectionErrorAlert(ExceptionHandler.getMessageForException(e));
 					refreshAllTabs();
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java
index 0429ffb17eb32eb8e2ca2fc32ad34843164c2e2f..7494734c76e5c329780be2fa74e1767e79415c5e 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java
@@ -16,6 +16,8 @@ import de.deadlocker8.budgetmaster.logic.utils.LanguageType;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
 import de.deadlocker8.budgetmasterclient.ui.RestartHandler;
 import de.deadlocker8.budgetmasterclient.ui.cells.LanguageCell;
+import de.deadlocker8.budgetmasterclient.utils.LoadingModal;
+import javafx.application.Platform;
 import javafx.fxml.FXML;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
@@ -34,6 +36,7 @@ import tools.AlertGenerator;
 import tools.ConvertTo;
 import tools.HashUtils;
 import tools.Localization;
+import tools.Worker;
 
 public class LocalServerSettingsController extends SettingsController
 {
@@ -88,8 +91,6 @@ public class LocalServerSettingsController extends SettingsController
 		previousLanguage = LanguageType.ENGLISH;
 		checkboxEnableAutoUpdate.setSelected(true);
 
-		prefill();
-
 		applyStyle();
 
 		textFieldCurrency.setPromptText(Localization.getString(Strings.CURRENCY_PLACEHOLDER));
@@ -101,15 +102,13 @@ public class LocalServerSettingsController extends SettingsController
 		hboxSettings.prefWidthProperty().bind(scrollPane.widthProperty().subtract(25));
 
 		refreshLabelsUpdate();
-
-		save();
+		
+		prefill();
 	}
 
 	@Override
 	public void prefill()
 	{
-		checkServerStatus();
-
 		textFieldCurrency.setText(controller.getSettings().getCurrency());
 
 		if(controller.getSettings().isRestActivated())
@@ -129,6 +128,8 @@ public class LocalServerSettingsController extends SettingsController
 		}
 
 		checkboxEnableAutoUpdate.setSelected(controller.getSettings().isAutoUpdateCheckEnabled());
+		
+		checkServerStatus();
 	}
 
 	private void checkServerStatus()
@@ -143,40 +144,57 @@ public class LocalServerSettingsController extends SettingsController
 				RestartHandler restartHandler = new RestartHandler(controller);
 				restartHandler.handleRestart(controller.getSettings().getLanguage());
 				refreshLabelsUpdate();
+				save();
 				break;
 			case INACTIVE:
+				LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_LOCAL_SERVER), controller.getStage(), controller.getIcon());
 				labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_STARTED));
 				buttonLocalServerAction.setVisible(false);
-				try
-				{
-					Logger.debug("Starting local Server...");
-					serverHandler.createServerSettingsIfNotExists();
-					serverHandler.startServer();
+				Worker.runLater(() -> {
 					try
 					{
-						//DEBUG magic number
-						Thread.sleep(2000);
+						Logger.debug("Starting local Server...");
+						serverHandler.createServerSettingsIfNotExists();
+						serverHandler.startServer();
+						try
+						{
+							//DEBUG magic number
+							//TODO retry reconnecting
+							System.out.println("Start sleep");
+							Thread.sleep(2000);
+							System.out.println("End sleep");
+						}
+						catch(InterruptedException e)
+						{
+						}
+						
+						if(!serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE))
+						{
+							throw new LocalServerException("");
+						}
 					}
-					catch(InterruptedException e)
+					catch(IOException e)
 					{
+						Logger.debug("Error while starting local server");
+						Logger.error(e);
+						Platform.runLater(()->{
+							LoadingModal.closeModal();
+							AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()), controller.getIcon(), controller.getStage(), null, false);
+						});
 					}
-					
-					if(!serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE))
+					catch(LocalServerException ex)
 					{
-						throw new LocalServerException("");
+						Logger.debug("Error while starting local server");
+						Platform.runLater(()->{
+							LoadingModal.closeModal();
+							AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, ""), controller.getIcon(), controller.getStage(), null, false);
+						});
 					}
-				}
-				catch(IOException e)
-				{
-					Logger.debug("Error while starting local server");
-					Logger.error(e);
-					AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()), controller.getIcon(), controller.getStage(), null, false);
-				}
-				catch(LocalServerException ex)
-				{
-					Logger.debug("Error while starting local server");
-					AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, ""), controller.getIcon(), controller.getStage(), null, false);
-				}
+					Platform.runLater(()->{
+						checkServerStatus();
+						LoadingModal.closeModal();
+					});
+				});
 				break;
 			case MISSING:
 				labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT));
@@ -185,19 +203,29 @@ public class LocalServerSettingsController extends SettingsController
 				buttonLocalServerAction.setDisable(false);
 
 				buttonLocalServerAction.setOnAction((event) -> {
-					try
-					{
-						buttonLocalServerAction.setDisable(true);
-						serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME));
-						serverHandler.createServerSettingsIfNotExists();
-						checkServerStatus();
-					}
-					catch(Exception e)
-					{
-						Logger.error(e);
-						AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_DOWNLOAD, e.getMessage()), controller.getIcon(), controller.getStage(), null, false);
-						buttonLocalServerAction.setDisable(false);
-					}
+					buttonLocalServerAction.setDisable(true);
+					LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_LOCAL_SERVER), controller.getStage(), controller.getIcon());
+
+					Worker.runLater(() -> {
+						try
+						{							
+							serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME));
+							serverHandler.createServerSettingsIfNotExists();
+							Platform.runLater(()->{
+								checkServerStatus();
+								LoadingModal.closeModal();
+							});
+						}
+						catch(Exception e)
+						{
+							Logger.error(e);
+							Platform.runLater(()->{
+								LoadingModal.closeModal();
+								AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_DOWNLOAD, e.getMessage()), controller.getIcon(), controller.getStage(), null, false);
+								buttonLocalServerAction.setDisable(false);
+							});
+						}
+					});
 				});
 				break;
 		}
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java
index 60e77dd17d55ea750cb1f38850768dd6432b804e..2442ef3037439f8d39068adacf09da61e5cb8574 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java
@@ -34,7 +34,7 @@ import de.deadlocker8.budgetmasterclient.ui.Refreshable;
 import de.deadlocker8.budgetmasterclient.ui.Styleable;
 import de.deadlocker8.budgetmasterclient.ui.cells.report.table.ReportTableRatingCell;
 import de.deadlocker8.budgetmasterclient.ui.cells.report.table.ReportTableRepeatingCell;
-import de.deadlocker8.budgetmasterclient.utils.UIHelpers;
+import de.deadlocker8.budgetmasterclient.utils.LoadingModal;
 import fontAwesome.FontIcon;
 import fontAwesome.FontIconType;
 import javafx.application.Platform;
@@ -653,7 +653,7 @@ public class ReportController implements Refreshable, Styleable
 																controller.getCurrentDate(),
 																budget);
 			
-			Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_REPORT), controller.getStage(), controller.getIcon());
+			LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_REPORT), controller.getStage(), controller.getIcon());
 
 			Worker.runLater(() -> {
 				try
@@ -661,10 +661,7 @@ public class ReportController implements Refreshable, Styleable
 					reportGenerator.generate();					
 
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}
+						LoadingModal.closeModal();
 						
 						controller.showNotification(Localization.getString(Strings.NOTIFICATION_REPORT_SAVE));	
 						
@@ -738,10 +735,7 @@ public class ReportController implements Refreshable, Styleable
 				{
 					Logger.error(e);
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}
+						LoadingModal.closeModal();
 						AlertGenerator.showAlert(AlertType.ERROR, 
 												Localization.getString(Strings.TITLE_ERROR), 
 												"", 
@@ -764,7 +758,7 @@ public class ReportController implements Refreshable, Styleable
 	@Override
 	public void refresh()
 	{
-		Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_REPORT_TAB), controller.getStage(), controller.getIcon());
+		LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_REPORT_TAB), controller.getStage(), controller.getIcon());
 		
 		if(controller.getFilterSettings().equals(new FilterSettings()))
 		{
@@ -788,11 +782,7 @@ public class ReportController implements Refreshable, Styleable
 			refreshTableView();
 
 			Platform.runLater(() -> {
-				if(modalStage != null)
-				{
-					modalStage.close();
-				}
-				
+				LoadingModal.closeModal();				
 				applyReportPreferences();
 				tableView.refresh();
 			});
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SearchController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SearchController.java
index dee576ff899eaa083561734589a8627ed11f23c4..358adb7ca1c3c8d150ee4fc106a1cd0784fa7e59 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SearchController.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SearchController.java
@@ -12,7 +12,7 @@ import de.deadlocker8.budgetmaster.logic.utils.Colors;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
 import de.deadlocker8.budgetmasterclient.ui.Styleable;
 import de.deadlocker8.budgetmasterclient.ui.cells.SearchCell;
-import de.deadlocker8.budgetmasterclient.utils.UIHelpers;
+import de.deadlocker8.budgetmasterclient.utils.LoadingModal;
 import fontAwesome.FontIcon;
 import fontAwesome.FontIconType;
 import javafx.application.Platform;
@@ -262,7 +262,7 @@ public class SearchController extends BaseController implements Styleable
 		searchPreferences.setMinAmount((int)rangeSlider.getLowValue());
 		searchPreferences.setMaxAmount((int)rangeSlider.getHighValue());
 		
-		Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_SEARCH), getStage(), controller.getIcon());
+		LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_SEARCH), getStage(), controller.getIcon());
 		
 		Worker.runLater(() -> {
 			try 
@@ -284,20 +284,14 @@ public class SearchController extends BaseController implements Styleable
 						listView.getItems().setAll(payments);
 					}
 				
-					if(modalStage != null)
-					{
-						modalStage.close();
-					}							
+					LoadingModal.closeModal();							
 				});
 			}
 			catch(Exception e)
 			{
 				Logger.error(e);
 				Platform.runLater(() -> {
-					if(modalStage != null)
-					{
-						modalStage.close();
-					}
+					LoadingModal.closeModal();
 					controller.showConnectionErrorAlert(ExceptionHandler.getMessageForException(e));
 				});
 			}
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseDeleter.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseDeleter.java
index b750a8bf09a5f29f61907fe00da10f0fbee5c48e..8d17b1817bc8e4913aeebfe70d27294c0ba00c65 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseDeleter.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseDeleter.java
@@ -44,7 +44,7 @@ public class DatabaseDeleter
 		{
 			if(result.get().equals(verificationCode))
 			{
-				Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATABASE_DELETE), controller.getStage(), controller.getIcon());
+				LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATABASE_DELETE), controller.getStage(), controller.getIcon());
 
 				Worker.runLater(() -> {
 					try
@@ -52,18 +52,15 @@ public class DatabaseDeleter
 						ServerConnection connection = new ServerConnection(controller.getSettings());
 						connection.deleteDatabase();
 						Platform.runLater(() -> {							
-							if(modalStage != null)
+							LoadingModal.closeModal();
+							if(importPending)
 							{
-								modalStage.close();
-								if(importPending)
-								{
-									DatabaseImporter importer = new DatabaseImporter(controller);
-									importer.importDatabase();
-								}
-								else
-								{
-									controller.refresh(controller.getFilterSettings());
-								}
+								DatabaseImporter importer = new DatabaseImporter(controller);
+								importer.importDatabase();
+							}
+							else
+							{
+								controller.refresh(controller.getFilterSettings());
 							}
 						});
 					}
@@ -71,10 +68,7 @@ public class DatabaseDeleter
 					{
 						Logger.error(e);
 						Platform.runLater(() -> {
-							if(modalStage != null)
-							{
-								modalStage.close();
-							}
+							LoadingModal.closeModal();
 							controller.showConnectionErrorAlert(ExceptionHandler.getMessageForException(e));
 						});
 					}
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseExporter.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseExporter.java
index 43ebbd852b68b0bf033de21d0633db13a707a02e..59904cd95c2094df5f75cf6cedf0f6198b595664 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseExporter.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseExporter.java
@@ -7,11 +7,9 @@ import de.deadlocker8.budgetmaster.logic.serverconnection.ServerConnection;
 import de.deadlocker8.budgetmaster.logic.utils.FileHelper;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
 import de.deadlocker8.budgetmasterclient.ui.controller.Controller;
-import de.deadlocker8.budgetmasterclient.utils.UIHelpers;
 import javafx.application.Platform;
 import javafx.scene.control.Alert.AlertType;
 import javafx.stage.FileChooser;
-import javafx.stage.Stage;
 import logger.Logger;
 import tools.AlertGenerator;
 import tools.Localization;
@@ -35,7 +33,7 @@ public class DatabaseExporter
 		File file = fileChooser.showSaveDialog(controller.getStage());
 		if(file != null)
 		{
-			Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATABASE_EXPORT), controller.getStage(), controller.getIcon());
+			LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATABASE_EXPORT), controller.getStage(), controller.getIcon());
 
 			Worker.runLater(() -> {
 				try
@@ -45,10 +43,7 @@ public class DatabaseExporter
 					FileHelper.saveDatabaseJSON(file, databaseJSON);
 
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}
+						LoadingModal.closeModal();
 						AlertGenerator.showAlert(AlertType.INFORMATION, 
 												Localization.getString(Strings.INFO_TITLE_DATABASE_EXPORT), 
 												"", 
@@ -63,10 +58,7 @@ public class DatabaseExporter
 				{
 					Logger.error(e);
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}
+						LoadingModal.closeModal();
 						controller.showConnectionErrorAlert(ExceptionHandler.getMessageForException(e));						
 					});
 				}
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseImporter.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseImporter.java
index 1213adb50e9fba4bc99c8afc311ac54282192763..bfbca38196c60c51b653f13268b42b83c7c60442 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseImporter.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/DatabaseImporter.java
@@ -10,14 +10,13 @@ import de.deadlocker8.budgetmaster.logic.serverconnection.ServerConnection;
 import de.deadlocker8.budgetmaster.logic.utils.FileHelper;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
 import de.deadlocker8.budgetmasterclient.ui.controller.Controller;
-import de.deadlocker8.budgetmasterclient.utils.UIHelpers;
 import javafx.application.Platform;
 import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
+import javafx.scene.control.ButtonBar.ButtonData;
 import javafx.scene.control.ButtonType;
 import javafx.scene.control.DialogPane;
-import javafx.scene.control.Alert.AlertType;
-import javafx.scene.control.ButtonBar.ButtonData;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyEvent;
 import javafx.stage.FileChooser;
@@ -115,7 +114,7 @@ public class DatabaseImporter
 				return;
 			}
 
-			Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATABASE_IMPORT), controller.getStage(), controller.getIcon());
+			LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DATABASE_IMPORT), controller.getStage(), controller.getIcon());
 
 			Worker.runLater(() -> {
 				try
@@ -124,10 +123,7 @@ public class DatabaseImporter
 					connection.importDatabase(database);
 
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}						
+						LoadingModal.closeModal();					
 						
 						AlertGenerator.showAlert(AlertType.INFORMATION, 
 												Localization.getString(Strings.INFO_TITLE_DATABASE_IMPORT), 
@@ -145,10 +141,7 @@ public class DatabaseImporter
 				{
 					Logger.error(e);
 					Platform.runLater(() -> {
-						if(modalStage != null)
-						{
-							modalStage.close();
-						}
+						LoadingModal.closeModal();	
 						controller.showConnectionErrorAlert(ExceptionHandler.getMessageForException(e));
 					});
 				}
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/UIHelpers.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java
similarity index 65%
rename from BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/UIHelpers.java
rename to BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java
index 88035fcb1da69d55f23adf6570343466f034dc26..42a6edf03c2d29c0c37a0c1278cd5afe87d2b4dc 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/UIHelpers.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java
@@ -13,9 +13,32 @@ import javafx.stage.Stage;
 import logger.Logger;
 import tools.Localization;
 
-public class UIHelpers
+public class LoadingModal
 {
-	public static Stage showModal(String title, String message, Stage owner, Image icon)
+	private static Stage modalStage;
+	
+	public static void showModal(String title, String message, Stage owner, Image icon)
+	{
+		closeModal();
+		modalStage = createModal(title, message, owner, icon);
+	}	
+	
+	public static void closeModal()
+	{
+		System.out.println(Thread.currentThread().getStackTrace()[2]);
+		if(modalStage != null)
+		{
+			modalStage.close();
+			modalStage = null;
+		}
+	}
+	
+	public static boolean isShowing()
+	{
+		return modalStage != null && modalStage.isShowing();
+	}
+	
+	private static Stage createModal(String title, String message, Stage owner, Image icon)
 	{
 		try
 		{
@@ -41,4 +64,4 @@ public class UIHelpers
 			return null;
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
index 60a51f2f1c95696a0896f898be9b115cadb95d5f..cb57ced7af0a4f0df38b86a4a5abd890ea607b47 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
@@ -47,6 +47,8 @@ load.database.import=Die Datenbank wird importiert, bitte warten...
 load.database.delete=Die Datenbank wird gel�scht, bitte warten...
 load.update=Update wird heruntergeladen, bitte warten...
 load.search=Buchungen werden gesucht, bitte warten...
+load.local.server=Der lokale Server wird gestartet, bitte warten...
+load.download.local.server=Der lokale Server wird heruntergeladen, bitte warten...
 
 # MISC
 category.none=Keine Kategorie
diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
index 2601c54fa92fc323089391423d7eccd2fa1ca988..a17ec01f1722c18448710d456679d94750b6543e 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
@@ -47,6 +47,8 @@ load.database.import=Please wait while the database is being imported...
 load.database.delete=Please wait while the database is being deleted...
 load.update=Please wait while the update is being downloaded...
 load.search=Please wait while payments are being searched...
+load.local.server=Please wait while the local server is being started...
+load.download.local.server=Please wait while the local server is being downloaded...
 
 # MISC
 category.none=No Category
diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
index 4f8cd1db24fa7baa7168dcbe0f388a5ebc3086da..950b24b67191e3bd89da234864066f9eeed34a17 100644
--- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
+++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
@@ -49,6 +49,8 @@ public class Strings
     public static final String LOAD_DATABASE_DELETE = "load.database.delete";
     public static final String LOAD_UPDATE = "load.update";
     public static final String LOAD_SEARCH = "load.search";
+    public static final String LOAD_LOCAL_SERVER = "load.local.server";
+    public static final String LOAD_DOWNLOAD_LOCAL_SERVER = "load.download.local.server";
     
     //MISC
     public static final String CATEGORY_NONE = "category.none";