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 10642b8d4253316d7e111b72dcf5cdddbe5c7d1d..1d3bef002f2e3bc46be27605a5e5469de2a894f5 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
@@ -134,17 +134,19 @@ public class Controller extends BaseController
 	
 	public void shutdown()
 	{
-		Logger.debug("Stopping local BudgetMasterServer...");
-		try
+		if(settings.getServerType().equals(ServerType.LOCAL))
 		{
-			ServerConnection connection = new ServerConnection(settings);
-			connection.shutdownServer();
-		}
-		catch(Exception e)
-		{
-			Logger.error(e);
+			Logger.debug("Stopping local BudgetMasterServer...");
+			try
+			{
+				ServerConnection connection = new ServerConnection(settings);
+				connection.shutdownServer();
+			}
+			catch(Exception e)
+			{
+				Logger.error(e);
+			}
 		}
-			
 		Worker.shutdown();		
 		System.exit(0);
 	}
@@ -293,10 +295,6 @@ public class Controller extends BaseController
 				AlertGenerator.showAlert(AlertType.INFORMATION, Localization.getString(Strings.TITLE_INFO), "", Localization.getString(Strings.INFO_FIRST_START), icon, getStage(), null, false);
 			});
 		}
-		else
-		{
-			refresh(filterSettings);			
-		}
 	}
 	
 	public void loadSettingsTab()
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 7494734c76e5c329780be2fa74e1767e79415c5e..e6cfa96db17d40a04010d544dafee6dbbe2bba6c 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
@@ -65,6 +65,9 @@ public class LocalServerSettingsController extends SettingsController
 	@FXML private Label labelLatestVersion;
 
 	private LanguageType previousLanguage;
+	
+	private final int MILLIS_UNTIL_NEXT_RETRY = 2000;
+	private final int MAX_NUMBER_OF_RETRIES = 5;
 
 	@Override
 	public void init(Controller controller)
@@ -139,10 +142,7 @@ public class LocalServerSettingsController extends SettingsController
 		{
 			case ACTIVE:
 				labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_OK));
-				buttonLocalServerAction.setVisible(false);
-
-				RestartHandler restartHandler = new RestartHandler(controller);
-				restartHandler.handleRestart(controller.getSettings().getLanguage());
+				buttonLocalServerAction.setVisible(false);				
 				refreshLabelsUpdate();
 				save();
 				break;
@@ -156,21 +156,38 @@ public class LocalServerSettingsController extends SettingsController
 						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))
+						Logger.debug("Trying to connect to local server...");
+						Platform.runLater(()->{LoadingModal.setMessage(Localization.getString(Strings.LOAD_LOCAL_SERVER_CONNECT));});
+						int retryCount = 1;
+						while(retryCount <= MAX_NUMBER_OF_RETRIES)
 						{
-							throw new LocalServerException("");
+							final int retries = retryCount;
+							boolean isActive = serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE);
+							if(isActive)
+							{
+								Logger.debug("Connected to local server");
+								break;
+							}
+								
+							if(retryCount == MAX_NUMBER_OF_RETRIES)
+							{
+								Logger.debug("Couldn't connect to local server. Giving up after " + retryCount + " retries.");
+								throw new LocalServerException("");
+							}
+							else
+							{
+								Logger.debug("Couldn't connect to local server. Retry " + retryCount + "/" + MAX_NUMBER_OF_RETRIES + ". Next Retry in " + MILLIS_UNTIL_NEXT_RETRY/1000 + " Seconds...");							
+								Platform.runLater(()->{LoadingModal.setMessage(Localization.getString(Strings.LOAD_LOCAL_SERVER_RETRY, retries, MAX_NUMBER_OF_RETRIES));});
+								retryCount++;
+								try
+								{
+									Thread.sleep(MILLIS_UNTIL_NEXT_RETRY);
+								}
+								catch(InterruptedException e)
+								{
+								}
+							}							
 						}
 					}
 					catch(IOException e)
@@ -180,7 +197,9 @@ public class LocalServerSettingsController extends SettingsController
 						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);
+							controller.refresh(controller.getFilterSettings());
 						});
+						return;
 					}
 					catch(LocalServerException ex)
 					{
@@ -188,8 +207,19 @@ public class LocalServerSettingsController extends SettingsController
 						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);
+							controller.refresh(controller.getFilterSettings());
+							buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_STARTED));
+							buttonLocalServerAction.setVisible(true);
+							buttonLocalServerAction.setDisable(false);
+
+							buttonLocalServerAction.setOnAction((event) -> {
+								buttonLocalServerAction.setDisable(true);
+								checkServerStatus();
+							});						
 						});
+						return;
 					}
+					
 					Platform.runLater(()->{
 						checkServerStatus();
 						LoadingModal.closeModal();
@@ -204,7 +234,7 @@ public class LocalServerSettingsController extends SettingsController
 
 				buttonLocalServerAction.setOnAction((event) -> {
 					buttonLocalServerAction.setDisable(true);
-					LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_LOCAL_SERVER), controller.getStage(), controller.getIcon());
+					LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DOWNLOAD_LOCAL_SERVER), controller.getStage(), controller.getIcon());
 
 					Worker.runLater(() -> {
 						try
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java
index b173d805b38430363d7c586fb8ad6380c3347408..1497da495769c9df7a64ec507eb0a360c8f9e264 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java
@@ -15,4 +15,9 @@ public class ModalController
 			e.consume();
 		});
 	}
+	
+	public void setMessage(String message)
+	{
+		labelMessage.setText(message);
+	}
 }
\ No newline at end of file
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java
index 365a45b53ebf37094a32d15b0264722e7f6715e5..022835cc1ff5cb43fa9058d126457b921f338cf2 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java
@@ -103,6 +103,8 @@ public class OnlineServerSettingsController extends SettingsController
 		hboxSettings.prefWidthProperty().bind(scrollPane.widthProperty().subtract(25));
 		
 		refreshLabelsUpdate();
+		
+		controller.refresh(controller.getFilterSettings());
 	}
 	
 	@Override
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java
index 42a6edf03c2d29c0c37a0c1278cd5afe87d2b4dc..9c413bbe85e19e849b6c5af25076713ddda4d6e0 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java
@@ -16,20 +16,29 @@ import tools.Localization;
 public class LoadingModal
 {
 	private static Stage modalStage;
+	private static ModalController modalController;
 	
 	public static void showModal(String title, String message, Stage owner, Image icon)
 	{
 		closeModal();
 		modalStage = createModal(title, message, owner, icon);
-	}	
+	}
+	
+	public static void setMessage(String message)
+	{
+		if(modalController != null)
+		{
+			modalController.setMessage(message);
+		}
+	}
 	
 	public static void closeModal()
 	{
-		System.out.println(Thread.currentThread().getStackTrace()[2]);
 		if(modalStage != null)
 		{
 			modalStage.close();
 			modalStage = null;
+			modalController = null;
 		}
 	}
 	
@@ -52,8 +61,9 @@ public class LoadingModal
 			newStage.setScene(new Scene(root));
 			newStage.getIcons().add(icon);
 			newStage.setResizable(false);
-			ModalController newController = fxmlLoader.getController();
-			newController.init(newStage, message);
+			newStage.setAlwaysOnTop(true);
+			modalController = fxmlLoader.getController();
+			modalController.init(newStage, message);
 			newStage.show();
 
 			return newStage;
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 cb57ced7af0a4f0df38b86a4a5abd890ea607b47..11f0afcddf392cd7654f3b993bde9d1cbcb14509 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
@@ -49,6 +49,8 @@ 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...
+load.local.server.connect=Verbinde mit lokalem Server, bitte warten...
+load.local.server.retry=Verbinde mit lokalem Server... (Versuch {0}/{1})
 
 # MISC
 category.none=Keine Kategorie
@@ -71,6 +73,7 @@ tagfield.placeholder=Neuen Tag hier eingeben
 shortcut.dev.console=F12
 local.server.status.ok=Server ist gestartet.
 local.server.status.not.started=Server konnte nicht gestartet werden.
+local.server.action.not.started=Starten
 local.server.status.not.present=Server nicht gefunden.
 local.server.action.not.present=Herunterladen
 
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 a17ec01f1722c18448710d456679d94750b6543e..188ddef0567129c86f11353b250dc112f8be4a49 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
@@ -49,6 +49,8 @@ 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...
+load.local.server.connect=Connecting to local server...
+load.local.server.retry=Connecting to local server... (Retry {0}/{1})
 
 # MISC
 category.none=No Category
@@ -71,6 +73,7 @@ tagfield.placeholder=Enter new Tag here
 shortcut.dev.console=F12
 local.server.status.ok=Server is running.
 local.server.status.not.started=Server couldn't be started.
+local.server.action.not.started=Start
 local.server.status.not.present=Server not found.
 local.server.action.not.present=Download
 
diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml
index b696f8b9d89c171d2d0c746dec9757a10b5cf3cb..3763df344257f0d45c5725acb8863a8a0e13e0d2 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml
@@ -90,6 +90,9 @@
                                  <HBox.margin>
                                     <Insets right="25.0" />
                                  </HBox.margin>
+                                 <padding>
+                                    <Insets top="3.0" />
+                                 </padding>
                               </VBox>
                               <VBox alignment="CENTER_LEFT" prefHeight="200.0" prefWidth="100.0" spacing="15.0" HBox.hgrow="ALWAYS">
                                  <children>
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 950b24b67191e3bd89da234864066f9eeed34a17..706a31d75a1f484e0006917c63b0332e963b2ff1 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
@@ -51,6 +51,9 @@ public class Strings
     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";
+    public static final String LOAD_LOCAL_SERVER_CONNECT = "load.local.server.connect";
+    public static final String LOAD_LOCAL_SERVER_RETRY = "load.local.server.retry";
+    
     
     //MISC
     public static final String CATEGORY_NONE = "category.none";
@@ -74,6 +77,7 @@ public class Strings
     public static final String SHORTCUT_DEV_CONSOLE = "shortcut.dev.console";
     public static final String LOCAL_SERVER_STATUS_OK = "local.server.status.ok";
     public static final String LOCAL_SERVER_STATUS_NOT_STARTED = "local.server.status.not.started";
+    public static final String LOCAL_SERVER_ACTION_NOT_STARTED = "local.server.action.not.started";
     public static final String LOCAL_SERVER_STATUS_NOT_PRESENT = "local.server.status.not.present";
     public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present";