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 6c6824cac14ab639b9b221fcee994fae7cf35c0a..83594f13ce7df8fbc9ceb29181e61f59e38b032d 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
@@ -146,6 +146,15 @@ public class Controller extends BaseController
 			System.exit(0);
 		});
 		
+		Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+			Logger.debug("Received shutdown hook");
+			if(localServerProcess != null) 
+			{
+				Logger.debug("Stopping local BudgetMasterServer...");
+				localServerProcess.destroy();
+			}
+		}));
+		
 		if(settings.getServerType() == null)
 		{
 			settings.setServerType(ServerType.ONLINE);
@@ -278,7 +287,7 @@ public class Controller extends BaseController
 		}
 		else
 		{
-			refresh(filterSettings);
+			refresh(filterSettings);			
 		}
 	}
 	
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 d15e8952c7b79013996010d8135b1985f887ec52..75c5d854168185552390b233058d22a35950640f 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
@@ -3,7 +3,9 @@ package de.deadlocker8.budgetmasterclient.ui.controller;
 import java.io.IOException;
 import java.util.ArrayList;
 
+import de.deadlocker8.budgetmaster.logic.LocalServerException;
 import de.deadlocker8.budgetmaster.logic.LocalServerHandler;
+import de.deadlocker8.budgetmaster.logic.LocalServerStatus;
 import de.deadlocker8.budgetmaster.logic.ServerType;
 import de.deadlocker8.budgetmaster.logic.Settings;
 import de.deadlocker8.budgetmaster.logic.updater.Updater;
@@ -65,29 +67,29 @@ public class LocalServerSettingsController extends SettingsController
 	public void init(Controller controller)
 	{
 		super.controller = controller;
-		
+
 		ToggleGroup toggleGroupServerType = new ToggleGroup();
 		toggleButtonOnline.setToggleGroup(toggleGroupServerType);
 		toggleButtonLocal.setToggleGroup(toggleGroupServerType);
-		toggleButtonOnline.setOnAction((event)->{
+		toggleButtonOnline.setOnAction((event) -> {
 			controller.getSettings().setServerType(ServerType.ONLINE);
 			controller.loadSettingsTab();
 		});
-		
-		textFieldClientSecret.setText("******");	
-		
+
+		textFieldClientSecret.setText("******");
+
 		comboBoxLanguage.setCellFactory((view) -> {
 			return new LanguageCell(true);
-		});		
-		
-		comboBoxLanguage.getItems().addAll(LanguageType.values());		
+		});
+
+		comboBoxLanguage.getItems().addAll(LanguageType.values());
 		comboBoxLanguage.setButtonCell(new LanguageCell(false));
 		comboBoxLanguage.setValue(LanguageType.ENGLISH);
 		previousLanguage = LanguageType.ENGLISH;
 		checkboxEnableAutoUpdate.setSelected(true);
-		
+
 		prefill();
-		
+
 		applyStyle();
 
 		textFieldCurrency.setPromptText(Localization.getString(Strings.CURRENCY_PLACEHOLDER));
@@ -95,21 +97,21 @@ public class LocalServerSettingsController extends SettingsController
 		ToggleGroup toggleGroup = new ToggleGroup();
 		radioButtonRestActivated.setToggleGroup(toggleGroup);
 		radioButtonRestDeactivated.setToggleGroup(toggleGroup);
-		
+
 		hboxSettings.prefWidthProperty().bind(scrollPane.widthProperty().subtract(25));
-		
+
 		refreshLabelsUpdate();
-		
+
 		save();
 	}
-	
+
 	@Override
 	public void prefill()
 	{
 		checkServerStatus();
-		
+
 		textFieldCurrency.setText(controller.getSettings().getCurrency());
-		
+
 		if(controller.getSettings().isRestActivated())
 		{
 			radioButtonRestActivated.setSelected(true);
@@ -118,93 +120,92 @@ public class LocalServerSettingsController extends SettingsController
 		{
 			radioButtonRestDeactivated.setSelected(true);
 		}
-		
+
 		if(controller.getSettings().getLanguage() != null)
 		{
 			LanguageType language = controller.getSettings().getLanguage();
 			comboBoxLanguage.setValue(language);
 			previousLanguage = language;
 		}
-		
+
 		checkboxEnableAutoUpdate.setSelected(controller.getSettings().isAutoUpdateCheckEnabled());
 	}
-	
+
 	private void checkServerStatus()
 	{
 		LocalServerHandler serverHandler = new LocalServerHandler();
-		if(serverHandler.isServerPresent())
+		switch(serverHandler.getServerStatus())
 		{
-			if(serverHandler.isServerRunning())
-			{
+			case ACTIVE:
 				labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_OK));
 				buttonLocalServerAction.setVisible(false);
-			}
-			else
-			{
+
+				RestartHandler restartHandler = new RestartHandler(controller);
+				restartHandler.handleRestart(controller.getSettings().getLanguage());
+				refreshLabelsUpdate();
+				break;
+			case INACTIVE:
 				labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_STARTED));
-				buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_STARTED));
+				buttonLocalServerAction.setVisible(false);
+				try
+				{
+					Logger.debug("Starting local Server...");
+					serverHandler.createServerSettingsIfNotExists();
+					controller.setLocalServerProcess(serverHandler.startServer());
+					try
+					{
+						Thread.sleep(2000);
+					}
+					catch(InterruptedException e)
+					{
+					}
+					
+					if(!serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE))
+					{
+						throw new LocalServerException("");
+					}
+
+					// TODO modals for download and start of server
+					// TODO what happens after update of client?
+					// --> TODO check compatibility of server and client
+				}
+				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);
+				}
+				break;
+			case MISSING:
+				labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT));
+				buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_PRESENT));
 				buttonLocalServerAction.setVisible(true);
 				buttonLocalServerAction.setDisable(false);
-				buttonLocalServerAction.setOnAction((event)->{
-					buttonLocalServerAction.setDisable(true);
+
+				buttonLocalServerAction.setOnAction((event) -> {
 					try
 					{
-						controller.setLocalServerProcess(serverHandler.startServer());
-						try
-						{
-							Thread.sleep(2000);
-						}
-						catch(InterruptedException e)
-						{							
-						}
+						buttonLocalServerAction.setDisable(true);
+						serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME));
+						serverHandler.createServerSettingsIfNotExists();
 						checkServerStatus();
-						
-						//TODO refresh all data
-						//TODO modals for download and start of server
-						//TODO autostart server on startup if serverType = local and server is present
 					}
-					catch(IOException e)
+					catch(Exception e)
 					{
 						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);
+						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;
 		}
-		else
-		{
-			labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT));
-			buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_PRESENT));
-			buttonLocalServerAction.setVisible(true);
-			buttonLocalServerAction.setDisable(false);
-			
-			buttonLocalServerAction.setOnAction((event)->{
-				try
-				{
-					buttonLocalServerAction.setDisable(true);
-					serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME));
-					serverHandler.createServerSettings();
-					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);
-				}
-			});
-		}		
 	}
-	
+
 	@Override
 	void refreshLabelsUpdate()
 	{
@@ -218,30 +219,16 @@ public class LocalServerSettingsController extends SettingsController
 	{
 		String clientSecret = textFieldClientSecret.getText().trim();
 		String currency = textFieldCurrency.getText().trim();
-		
+
 		if(clientSecret == null || clientSecret.equals(""))
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, 
-									Localization.getString(Strings.TITLE_WARNING), 
-									"",
-									Localization.getString(Strings.WARNING_EMPTY_SECRET_CLIENT),
-									controller.getIcon(), 
-									controller.getStage(), 
-									null, 
-									false);
+			AlertGenerator.showAlert(AlertType.WARNING, Localization.getString(Strings.TITLE_WARNING), "", Localization.getString(Strings.WARNING_EMPTY_SECRET_CLIENT), controller.getIcon(), controller.getStage(), null, false);
 			return;
 		}
 
 		if(currency == null || currency.equals(""))
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, 
-									Localization.getString(Strings.TITLE_WARNING), 
-									"", 
-									Localization.getString(Strings.WARNING_EMPTY_CURRENCY),
-									controller.getIcon(), 
-									controller.getStage(), 
-									null, 
-									false);
+			AlertGenerator.showAlert(AlertType.WARNING, Localization.getString(Strings.TITLE_WARNING), "", Localization.getString(Strings.WARNING_EMPTY_CURRENCY), controller.getIcon(), controller.getStage(), null, false);
 			return;
 		}
 
@@ -251,7 +238,7 @@ public class LocalServerSettingsController extends SettingsController
 			{
 				controller.getSettings().setClientSecret(HashUtils.hash(clientSecret, Helpers.SALT));
 			}
-			
+
 			controller.getSettings().setCurrency(currency);
 			controller.getSettings().setRestActivated(radioButtonRestActivated.isSelected());
 			controller.getSettings().setLanguage(comboBoxLanguage.getValue());
@@ -260,7 +247,7 @@ public class LocalServerSettingsController extends SettingsController
 		else
 		{
 			Settings settings = new Settings();
-			
+
 			if(!clientSecret.equals("******"))
 			{
 				settings.setClientSecret(HashUtils.hash(clientSecret, Helpers.SALT));
@@ -268,15 +255,15 @@ public class LocalServerSettingsController extends SettingsController
 			else
 			{
 				settings.setClientSecret(controller.getSettings().getClientSecret());
-			}			
-		
+			}
+
 			settings.setCurrency(currency);
 			settings.setRestActivated(radioButtonRestActivated.isSelected());
 			settings.setLanguage(comboBoxLanguage.getValue());
 			settings.setAutoUpdateCheckEnabled(checkboxEnableAutoUpdate.isSelected());
 			controller.setSettings(settings);
 		}
-		
+
 		controller.getSettings().setSecret(HashUtils.hash("BudgetMaster", Helpers.SALT));
 		controller.getSettings().setUrl("https://localhost:9000");
 		ArrayList<String> trustedHosts = new ArrayList<>();
@@ -290,14 +277,7 @@ public class LocalServerSettingsController extends SettingsController
 		catch(IOException e)
 		{
 			Logger.error(e);
-			AlertGenerator.showAlert(AlertType.ERROR, 
-									Localization.getString(Strings.TITLE_ERROR), 
-									"", 
-									Localization.getString(Strings.ERROR_SETTINGS_SAVE),
-									controller.getIcon(), 
-									controller.getStage(), 
-									null, 
-									false);
+			AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_SETTINGS_SAVE), controller.getIcon(), controller.getStage(), null, false);
 		}
 
 		textFieldClientSecret.setText("******");
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 7441d6681d9ec491f6c9f1bad57deb79ac708836..fc68d4ae1fd95c4dc7e10462c5ad17c4e81c58d8 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
@@ -1,7 +1,7 @@
 # DEFAULT
 app.name=BudgetMaster
 version.code=13
-version.name=1.7.0
+version.name=1.6.0
 version.date=07.11.17
 author=Robert Goldmann
 credits=L�nderflaggen von Freepik auf https://www.flaticon.com\nVerwendete Schriftarten: OpenSans\nVerwendete Bibliotheken:\ngson 2.8.1\njoda-time 2.9.7\nitextpdf 5.0.6\nlaunch4j-maven-plugin 1.7.21\nspark-core 2.5.4\nslf4j 1.7.21\nmysql-connector 6.0.5\njunit 4.12\nsqlite-jdbc 3.21.0
@@ -68,8 +68,7 @@ undefined=unbekannt
 tagfield.placeholder=Neuen Tag hier eingeben
 shortcut.dev.console=F12
 local.server.status.ok=Server ist gestartet.
-local.server.status.not.started=Server is nicht gestartet.
-local.server.action.not.started=Starten
+local.server.status.not.started=Server konnte nicht gestartet werden.
 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 9f40fe8fa1aa3f62f580a3a3a11434386ba2ccd3..2601c54fa92fc323089391423d7eccd2fa1ca988 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
@@ -68,8 +68,7 @@ undefined=undefined
 tagfield.placeholder=Enter new Tag here
 shortcut.dev.console=F12
 local.server.status.ok=Server is running.
-local.server.status.not.started=Server is not running.
-local.server.action.not.started=Start
+local.server.status.not.started=Server couldn't be started.
 local.server.status.not.present=Server not found.
 local.server.action.not.present=Download
 
diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java
new file mode 100644
index 0000000000000000000000000000000000000000..d1f8712c6762a93410f3f3fc44719eba2f8ebd4c
--- /dev/null
+++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java
@@ -0,0 +1,11 @@
+package de.deadlocker8.budgetmaster.logic;
+
+public class LocalServerException extends Exception
+{
+	private static final long serialVersionUID = 3925464782915168752L;
+
+	public LocalServerException(String message)
+	{
+		super(message);
+	}
+}
\ No newline at end of file
diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java
index ca9fb5f6d93f547dbc62bb91a73bce09f5a56245..ae0c767ed6a9f15523052b0280a19f3010a74c1b 100644
--- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java
+++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java
@@ -52,16 +52,23 @@ public class LocalServerHandler
 		}
 		catch(Exception e)
 		{
-			Logger.error(e);
+			Logger.debug(e);
 			return false;
 		}
 	}
 	
-	public void createServerSettings() throws FileNotFoundException
+	public void createServerSettingsIfNotExists() throws FileNotFoundException
 	{
+		File settingsFile = new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/settings.json");
+		if(settingsFile.exists())
+		{
+			return;
+		}
+		Logger.debug("Creating settings file for local server...");
+		
 		String databasePath = PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMaster.db";
 		String settings = "{\"databaseType\": \"sqlite\"," + 
-							"\"databaseUrl\": \"" + databasePath + "\"," + 
+							"\"databaseUrl\": \"" + databasePath.replace("\\", "/") + "\"," + 
 							"\"databaseName\": \"budgetmaster\"," + 
 							"\"databaseUsername\": \"root\"," + 
 							"\"databasePassword\": \"\"," + 
@@ -69,13 +76,14 @@ public class LocalServerHandler
 							"\"serverSecret\": \"BudgetMaster\"," + 
 							"\"keystorePath\": \"default\"," + 
 							"\"keystorePassword\": \"BudgetMaster\"}";
-		PrintWriter writer = new PrintWriter(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/settings.json");
+		PrintWriter writer = new PrintWriter(settingsFile);
 		writer.println(settings);
 		writer.close();
 	}
 	
 	public void downloadServer(String versionName) throws Exception
 	{
+		Logger.debug("Downloading BudgetMasterServer from " + BUILD_FOLDER.replace("{}", "v" + versionName));
 		PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer"));
 		
 		//download into temp directory and file
@@ -96,4 +104,28 @@ public class LocalServerHandler
 		ProcessBuilder pb = new ProcessBuilder("java", "-jar", Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMasterServer.jar").toString()); 				
 		return pb.start();		
 	}
+	
+	public LocalServerStatus getServerStatus()
+	{
+		LocalServerHandler serverHandler = new LocalServerHandler();
+		if(serverHandler.isServerPresent())
+		{
+			Logger.debug("Local server found");
+			if(serverHandler.isServerRunning())
+			{
+				Logger.debug("Local server is running");
+				return LocalServerStatus.ACTIVE;
+			}
+			else
+			{
+				Logger.debug("Local server is NOT running");
+				return LocalServerStatus.INACTIVE;
+			}
+		}
+		else
+		{
+			Logger.debug("Local server NOT found");
+			return LocalServerStatus.MISSING;
+		}		
+	}
 }
\ No newline at end of file
diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec5084a23ec315b64e51ba4f7f00281ec2a006c3
--- /dev/null
+++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java
@@ -0,0 +1,6 @@
+package de.deadlocker8.budgetmaster.logic;
+
+public enum LocalServerStatus
+{
+	ACTIVE, INACTIVE, MISSING;
+}
\ No newline at end of file
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 9fdf6543d702f810477f339fb13eae2d34b229ee..4f8cd1db24fa7baa7168dcbe0f388a5ebc3086da 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
@@ -73,7 +73,6 @@ public class Strings
     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_STATUS_NOT_PRESENT = "local.server.status.not.present";
-    public static final String LOCAL_SERVER_ACTION_NOT_STARTED = "local.server.action.not.started";
     public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present";
     
     //REPORT
diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java
index 4d4fd5d39ca4a53158b0bd56c88f15736f31570a..0a0b2adabe7520255a6644b918521784883d103d 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java
@@ -71,8 +71,10 @@ public class Utils
 		}
 	}
 
-	public static DatabaseHandler getDatabaseHandler(Settings settings)
+	public static DatabaseHandler getDatabaseHandler(Settings settings) throws ClassNotFoundException
 	{
+		Class.forName("org.sqlite.JDBC");
+		
 		if(settings.getDatabaseType().equals("mysql"))
 		{
 			return new MysqlDatabaseHandler(settings);
@@ -83,8 +85,10 @@ public class Utils
 		}
 	}
 
-	public static DatabaseTagHandler getDatabaseTagHandler(Settings settings)
+	public static DatabaseTagHandler getDatabaseTagHandler(Settings settings) throws ClassNotFoundException
 	{
+		Class.forName("org.sqlite.JDBC");
+		
 		if(settings.getDatabaseType().equals("mysql"))
 		{
 			return new MysqlDatabaseTagHandler(settings);
diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java
index 900e3b54e4fdd9ca51e716e9ff9aa86e228b6c9f..b60309e10941d62ec55faf8fc3e8fa88d10a0dd9 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java
@@ -138,64 +138,71 @@ public class SparkServer
 			paymentUpdater.updateRepeatingPayments(DateTime.now());
 			handler.closeConnection();
 		});
-
-		// Category
-		get("/category", new CategoryGetAll(Utils.getDatabaseHandler(settings), gson));
-		get("/category/single", new CategoryGet(Utils.getDatabaseHandler(settings), gson));
-		post("/category", new CategoryAdd(Utils.getDatabaseHandler(settings)));
-		put("/category", new CategoryUpdate(Utils.getDatabaseHandler(settings)));
-		delete("/category", new CategoryDelete(Utils.getDatabaseHandler(settings)));
-
-		// Payment
-		get("/payment/search", new PaymentSearch(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings)));
-		get("/payment/search/maxAmount", new PaymentMaxAmount(Utils.getDatabaseHandler(settings), gson));
-		// Normal
-		get("/payment", new PaymentGet(Utils.getDatabaseHandler(settings), gson));
-		post("/payment", new PaymentAdd(Utils.getDatabaseHandler(settings), gson));
-		put("/payment", new PaymentUpdate(Utils.getDatabaseHandler(settings)));
-		delete("/payment", new PaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings)));
-
-		// Repeating
-		get("/repeatingpayment/single", new RepeatingPaymentGet(Utils.getDatabaseHandler(settings), gson));
-		get("/repeatingpayment", new RepeatingPaymentGetAll(Utils.getDatabaseHandler(settings), gson));
-		post("/repeatingpayment", new RepeatingPaymentAdd(Utils.getDatabaseHandler(settings), gson));
-		delete("/repeatingpayment", new RepeatingPaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings)));
-		
-		// CategoryBudget
-		get("/categorybudget", new CategoryBudgetGet(Utils.getDatabaseHandler(settings), gson));
-		
-		// Rest
-		get("/rest", new RestGet(Utils.getDatabaseHandler(settings), gson));		
-
-		// charts
-		get("/charts/categoryInOutSum", new CategoryInOutSumForMonth(Utils.getDatabaseHandler(settings), gson));
-		get("/charts/monthInOutSum", new MonthInOutSum(Utils.getDatabaseHandler(settings), gson));
-		
-		// tag
-		get("/tag/single", new TagGet(Utils.getDatabaseTagHandler(settings), gson));
-		get("/tag/single/byName", new TagGetByName(Utils.getDatabaseTagHandler(settings), gson));
-		get("/tag", new TagGetAll(Utils.getDatabaseTagHandler(settings), gson));
-		post("/tag", new TagAdd(Utils.getDatabaseTagHandler(settings)));
-		delete("/tag", new TagDelete(Utils.getDatabaseTagHandler(settings)));
-		
-		// tag match
-		get("/tag/match/all/normal", new TagMatchGetAllForPayment(Utils.getDatabaseTagHandler(settings), gson));
-		get("/tag/match/all/repeating", new TagMatchGetAllForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson));
-		get("/tag/match/normal", new TagMatchExistingForPayment(Utils.getDatabaseTagHandler(settings), gson));
-		get("/tag/match/repeating", new TagMatchExistingForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson));
-		post("/tag/match/normal", new TagMatchAddForPayment(Utils.getDatabaseTagHandler(settings)));
-		post("/tag/match/repeating", new TagMatchAddForRepeatingPayment(Utils.getDatabaseTagHandler(settings)));
-		delete("/tag/match/normal", new TagMatchDeleteForPayment(Utils.getDatabaseTagHandler(settings)));
-		delete("/tag/match/repeating", new TagMatchDeleteForRepeatingPayment(Utils.getDatabaseTagHandler(settings)));
-
-		// Database
-		get("/database", new DatabaseExport(settings, gson));
-		post("/database", new DatabaseImport(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings), gson));
-		delete("/database", new DatabaseDelete(Utils.getDatabaseHandler(settings), settings));
 		
-		get("/info", new InformationGet(gson, versionInfo, settings));
-		get("/version", new VersionGet(gson, versionInfo));
-		delete("/log", new LogDelete());
+		try
+		{	
+			// Category
+			get("/category", new CategoryGetAll(Utils.getDatabaseHandler(settings), gson));
+			get("/category/single", new CategoryGet(Utils.getDatabaseHandler(settings), gson));
+			post("/category", new CategoryAdd(Utils.getDatabaseHandler(settings)));
+			put("/category", new CategoryUpdate(Utils.getDatabaseHandler(settings)));
+			delete("/category", new CategoryDelete(Utils.getDatabaseHandler(settings)));
+	
+			// Payment
+			get("/payment/search", new PaymentSearch(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings)));
+			get("/payment/search/maxAmount", new PaymentMaxAmount(Utils.getDatabaseHandler(settings), gson));
+			// Normal
+			get("/payment", new PaymentGet(Utils.getDatabaseHandler(settings), gson));
+			post("/payment", new PaymentAdd(Utils.getDatabaseHandler(settings), gson));
+			put("/payment", new PaymentUpdate(Utils.getDatabaseHandler(settings)));
+			delete("/payment", new PaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings)));
+	
+			// Repeating
+			get("/repeatingpayment/single", new RepeatingPaymentGet(Utils.getDatabaseHandler(settings), gson));
+			get("/repeatingpayment", new RepeatingPaymentGetAll(Utils.getDatabaseHandler(settings), gson));
+			post("/repeatingpayment", new RepeatingPaymentAdd(Utils.getDatabaseHandler(settings), gson));
+			delete("/repeatingpayment", new RepeatingPaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings)));
+			
+			// CategoryBudget
+			get("/categorybudget", new CategoryBudgetGet(Utils.getDatabaseHandler(settings), gson));
+			
+			// Rest
+			get("/rest", new RestGet(Utils.getDatabaseHandler(settings), gson));		
+	
+			// charts
+			get("/charts/categoryInOutSum", new CategoryInOutSumForMonth(Utils.getDatabaseHandler(settings), gson));
+			get("/charts/monthInOutSum", new MonthInOutSum(Utils.getDatabaseHandler(settings), gson));
+			
+			// tag
+			get("/tag/single", new TagGet(Utils.getDatabaseTagHandler(settings), gson));
+			get("/tag/single/byName", new TagGetByName(Utils.getDatabaseTagHandler(settings), gson));
+			get("/tag", new TagGetAll(Utils.getDatabaseTagHandler(settings), gson));
+			post("/tag", new TagAdd(Utils.getDatabaseTagHandler(settings)));
+			delete("/tag", new TagDelete(Utils.getDatabaseTagHandler(settings)));
+			
+			// tag match
+			get("/tag/match/all/normal", new TagMatchGetAllForPayment(Utils.getDatabaseTagHandler(settings), gson));
+			get("/tag/match/all/repeating", new TagMatchGetAllForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson));
+			get("/tag/match/normal", new TagMatchExistingForPayment(Utils.getDatabaseTagHandler(settings), gson));
+			get("/tag/match/repeating", new TagMatchExistingForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson));
+			post("/tag/match/normal", new TagMatchAddForPayment(Utils.getDatabaseTagHandler(settings)));
+			post("/tag/match/repeating", new TagMatchAddForRepeatingPayment(Utils.getDatabaseTagHandler(settings)));
+			delete("/tag/match/normal", new TagMatchDeleteForPayment(Utils.getDatabaseTagHandler(settings)));
+			delete("/tag/match/repeating", new TagMatchDeleteForRepeatingPayment(Utils.getDatabaseTagHandler(settings)));
+	
+			// Database
+			get("/database", new DatabaseExport(settings, gson));
+			post("/database", new DatabaseImport(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings), gson));
+			delete("/database", new DatabaseDelete(Utils.getDatabaseHandler(settings), settings));
+			
+			get("/info", new InformationGet(gson, versionInfo, settings));
+			get("/version", new VersionGet(gson, versionInfo));
+			delete("/log", new LogDelete());
+		}
+		catch(ClassNotFoundException e)
+		{
+			Logger.error(e);
+		}
 
 		after((request, response) -> {
 			DatabaseHandler handler = Utils.getDatabaseHandler(settings);