diff --git a/.classpath b/.classpath
index d67069e9013636f5559574bddc8949f675e64448..f23826173add7f3f88b8ef7616a953d76408e784 100644
--- a/.classpath
+++ b/.classpath
@@ -6,6 +6,7 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry kind="src" path="tests"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/_Tools"/>
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
 		<attributes>
@@ -13,5 +14,6 @@
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java b/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java
index e8b733ed5eba88e667dccad5fcddebbadd1b58e8..df7127f7e30ab6ab2a7732b24f9375b07b4a7880 100644
--- a/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java
+++ b/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java
@@ -805,6 +805,7 @@ public class DatabaseHandler
 		}
 		catch(SQLException e)
 		{
+			e.printStackTrace();
 			Logger.error(e);
 		}
 		finally
diff --git a/src/de/deadlocker8/budgetmasterserver/logic/Settings.java b/src/de/deadlocker8/budgetmasterserver/logic/Settings.java
index 121ba938b3b45f8ab641e1b267e2b896a5777491..821531725dcb7c8f81ddbd9061dd996d052f135e 100644
--- a/src/de/deadlocker8/budgetmasterserver/logic/Settings.java
+++ b/src/de/deadlocker8/budgetmasterserver/logic/Settings.java
@@ -6,60 +6,164 @@ public class Settings
 	private String databaseName;
 	private String databaseUsername;
 	private String databasePassword;
-	private int serverPort;	
+	private int serverPort;
 	private String serverSecret;
 	private String keystorePath;
 	private String keystorePassword;
-	
+
 	public Settings()
 	{
-		
+
 	}
-	
+
 	public String getDatabaseUrl()
 	{
 		return databaseUrl;
 	}
 
+	public void setDatabaseUrl(String databaseUrl)
+	{
+		this.databaseUrl = databaseUrl;
+	}
+
 	public String getDatabaseName()
 	{
 		return databaseName;
 	}
 
+	public void setDatabaseName(String databaseName)
+	{
+		this.databaseName = databaseName;
+	}
+
 	public String getDatabaseUsername()
 	{
 		return databaseUsername;
 	}
 
+	public void setDatabaseUsername(String databaseUsername)
+	{
+		this.databaseUsername = databaseUsername;
+	}
+
 	public String getDatabasePassword()
 	{
 		return databasePassword;
 	}
 
+	public void setDatabasePassword(String databasePassword)
+	{
+		this.databasePassword = databasePassword;
+	}
+
 	public int getServerPort()
 	{
 		return serverPort;
 	}
 
+	public void setServerPort(int serverPort)
+	{
+		this.serverPort = serverPort;
+	}
+
 	public String getServerSecret()
 	{
 		return serverSecret;
 	}
 
+	public void setServerSecret(String serverSecret)
+	{
+		this.serverSecret = serverSecret;
+	}
+
 	public String getKeystorePath()
 	{
 		return keystorePath;
 	}
 
+	public void setKeystorePath(String keystorePath)
+	{
+		this.keystorePath = keystorePath;
+	}
+
 	public String getKeystorePassword()
 	{
 		return keystorePassword;
 	}
 
+	public void setKeystorePassword(String keystorePassword)
+	{
+		this.keystorePassword = keystorePassword;
+	}
+
 	@Override
 	public String toString()
 	{
 		return "Settings [databaseUrl=" + databaseUrl + ", databaseName=" + databaseName + ", databaseUsername=" + databaseUsername + ", databasePassword=" + databasePassword + ", serverPort=" + serverPort + ", serverSecret=" + serverSecret + ", keystorePath=" + keystorePath + ", keystorePassword="
 				+ keystorePassword + "]";
 	}
+
+	@Override
+	public boolean equals(Object obj)
+	{
+		if(this == obj)
+			return true;
+		if(obj == null)
+			return false;
+		if(getClass() != obj.getClass())
+			return false;
+		Settings other = (Settings)obj;
+		if(databaseName == null)
+		{
+			if(other.databaseName != null)
+				return false;
+		}
+		else if(!databaseName.equals(other.databaseName))
+			return false;
+		if(databasePassword == null)
+		{
+			if(other.databasePassword != null)
+				return false;
+		}
+		else if(!databasePassword.equals(other.databasePassword))
+			return false;
+		if(databaseUrl == null)
+		{
+			if(other.databaseUrl != null)
+				return false;
+		}
+		else if(!databaseUrl.equals(other.databaseUrl))
+			return false;
+		if(databaseUsername == null)
+		{
+			if(other.databaseUsername != null)
+				return false;
+		}
+		else if(!databaseUsername.equals(other.databaseUsername))
+			return false;
+		if(keystorePassword == null)
+		{
+			if(other.keystorePassword != null)
+				return false;
+		}
+		else if(!keystorePassword.equals(other.keystorePassword))
+			return false;
+		if(keystorePath == null)
+		{
+			if(other.keystorePath != null)
+				return false;
+		}
+		else if(!keystorePath.equals(other.keystorePath))
+			return false;
+		if(serverPort != other.serverPort)
+			return false;
+		if(serverSecret == null)
+		{
+			if(other.serverSecret != null)
+				return false;
+		}
+		else if(!serverSecret.equals(other.serverSecret))
+			return false;
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/tests/de/deadlocker8/budgetmaster/tests/resources/export.json b/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
new file mode 100644
index 0000000000000000000000000000000000000000..12515b0b63822774520696258cc0d14ecb525eff
--- /dev/null
+++ b/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
@@ -0,0 +1 @@
+{"categories":[{"ID":1,"name":"NONE","color":{"red":1.0,"green":1.0,"blue":1.0,"opacity":1.0}},{"ID":2,"name":"Übertrag","color":{"red":1.0,"green":1.0,"blue":0.0,"opacity":1.0}},{"ID":3,"name":"123 Tü+?est Category","color":{"red":0.9411765,"green":0.972549,"blue":1.0,"opacity":1.0}}],"normalPayments":[{"ID":1,"amount":23,"date":"2017-06-02","categoryID":0,"name":"Test Normal","description":"Lorem Ipsum"}],"repeatingPayments":[{"repeatInterval":7,"repeatEndDate":"2017-06-30","repeatMonthDay":0,"ID":1,"amount":-10012,"date":"2017-06-01","categoryID":1,"name":"Test Repeating","description":"Lorem Ipsum"}]}
\ No newline at end of file
diff --git a/tests/de/deadlocker8/budgetmaster/tests/resources/import.json b/tests/de/deadlocker8/budgetmaster/tests/resources/import.json
new file mode 100644
index 0000000000000000000000000000000000000000..12515b0b63822774520696258cc0d14ecb525eff
--- /dev/null
+++ b/tests/de/deadlocker8/budgetmaster/tests/resources/import.json
@@ -0,0 +1 @@
+{"categories":[{"ID":1,"name":"NONE","color":{"red":1.0,"green":1.0,"blue":1.0,"opacity":1.0}},{"ID":2,"name":"Übertrag","color":{"red":1.0,"green":1.0,"blue":0.0,"opacity":1.0}},{"ID":3,"name":"123 Tü+?est Category","color":{"red":0.9411765,"green":0.972549,"blue":1.0,"opacity":1.0}}],"normalPayments":[{"ID":1,"amount":23,"date":"2017-06-02","categoryID":0,"name":"Test Normal","description":"Lorem Ipsum"}],"repeatingPayments":[{"repeatInterval":7,"repeatEndDate":"2017-06-30","repeatMonthDay":0,"ID":1,"amount":-10012,"date":"2017-06-01","categoryID":1,"name":"Test Repeating","description":"Lorem Ipsum"}]}
\ No newline at end of file
diff --git a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..94bd4b2ae7bb367ba5674c5b06e574c2623891ab
--- /dev/null
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
@@ -0,0 +1,257 @@
+package de.deadlocker8.budgetmaster.tests.server.database;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import de.deadlocker8.budgetmaster.logic.Category;
+import de.deadlocker8.budgetmaster.logic.LatestRepeatingPayment;
+import de.deadlocker8.budgetmaster.logic.NormalPayment;
+import de.deadlocker8.budgetmaster.logic.RepeatingPayment;
+import de.deadlocker8.budgetmasterserver.logic.DatabaseHandler;
+import de.deadlocker8.budgetmasterserver.logic.Settings;
+import de.deadlocker8.budgetmasterserver.logic.Utils;
+import javafx.scene.paint.Color;
+
+public class DatabaseHandlerTest
+{			
+	private static DatabaseHandler databaseHandler;
+	
+	@BeforeClass
+	public static void init()
+	{
+		try
+		{
+			//init
+			Settings settings = Utils.loadSettings();
+			System.out.println(settings);
+			DatabaseHandler handler = new DatabaseHandler(settings);
+			handler.deleteDatabase();
+			handler = new DatabaseHandler(settings);			
+			databaseHandler = handler;
+		}
+		catch(IOException | URISyntaxException e)
+		{
+			fail(e.getMessage());
+		}		
+	}	
+	
+	@Test
+	public void testLastInsertID()
+	{			
+		Category expected = new Category("123 Tü+?est Category", Color.ALICEBLUE);
+		databaseHandler.addCategory(expected.getName(), expected.getColor());
+		//3 because "NONE" and "Übertrag" has already been inserted at database creation	
+		assertEquals(3, databaseHandler.getLastInsertID());		
+	}
+	
+	@Test
+	public void testCategory()
+	{
+		//add
+		Category expected = new Category("123 Tü+?est Category", Color.ALICEBLUE);
+		databaseHandler.addCategory(expected.getName(), expected.getColor());
+		ArrayList<Category> categories = databaseHandler.getCategories();	
+		
+		//get
+		Category category = databaseHandler.getCategory(categories.get(categories.size()-1).getID());
+		assertEquals(expected.getName(), category.getName());
+		assertEquals(expected.getColor(), category.getColor());
+		
+		//update
+		Category expectedUpdated = new Category(category.getID(), "456", Color.RED);
+		databaseHandler.updateCategory(expectedUpdated.getID(), expectedUpdated.getName(), expectedUpdated.getColor());
+		category = databaseHandler.getCategory(expectedUpdated.getID());
+		assertEquals(expectedUpdated.getName(), category.getName());
+		assertEquals(expectedUpdated.getColor(), category.getColor());
+		
+		//misc
+		category = databaseHandler.getCategory("NONE", Color.web("#FFFFFF"));
+		assertEquals(1, category.getID());
+		
+		assertTrue(databaseHandler.categoryExists(1));
+	}
+
+	@Test
+	public void testDeleteCategory()
+	{
+		//add
+		Category expected = new Category("123 Tü+?est Category", Color.ALICEBLUE);
+		databaseHandler.addCategory(expected.getName(), expected.getColor());		
+		
+		int id = databaseHandler.getLastInsertID();
+		
+		databaseHandler.deleteCategory(id);
+		Category category = databaseHandler.getCategory(id);
+		
+		assertNull(category);
+	}
+	
+	@Test
+	public void testNormalPayment()
+	{		
+		//add
+		NormalPayment expectedPayment = new NormalPayment(1, 1000, "2017-03-01", 2, "Buchung", "Lorem Ipsum");
+		
+		databaseHandler.addNormalPayment(expectedPayment.getAmount(),
+										 expectedPayment.getDate(),
+										 expectedPayment.getCategoryID(),
+										 expectedPayment.getName(),
+										 expectedPayment.getDescription());
+		
+		int id = databaseHandler.getLastInsertID();
+		
+		//get
+		NormalPayment payment = databaseHandler.getPayment(id);
+		
+		assertEquals(expectedPayment.getAmount(), payment.getAmount());		
+		assertEquals(expectedPayment.getDate(), payment.getDate());
+		assertEquals(expectedPayment.getCategoryID(), payment.getCategoryID());
+		assertEquals(expectedPayment.getName(), payment.getName());
+		assertEquals(expectedPayment.getDescription(), payment.getDescription());
+		
+		//update
+		NormalPayment expectedUpdated = new NormalPayment(id, 2000, "2017-03-02", 1, "Buchung 2", "Lorem Ipsum");
+		databaseHandler.updateNormalPayment(expectedUpdated.getID(),
+											expectedUpdated.getAmount(),
+											expectedUpdated.getDate(),
+											expectedUpdated.getCategoryID(),
+											expectedUpdated.getName(),
+											expectedUpdated.getDescription());
+		
+		payment = databaseHandler.getPayment(id);
+		
+		assertEquals(expectedUpdated.getAmount(), payment.getAmount());		
+		assertEquals(expectedUpdated.getDate(), payment.getDate());
+		assertEquals(expectedUpdated.getCategoryID(), payment.getCategoryID());
+		assertEquals(expectedUpdated.getName(), payment.getName());
+		assertEquals(expectedUpdated.getDescription(), payment.getDescription());		
+		
+		//misc
+		assertEquals(1, databaseHandler.getPayments(2017, 03).size());
+		assertEquals(0, databaseHandler.getPayments(2015, 03).size());
+		
+		assertEquals(1, databaseHandler.getPaymentsBetween("2016-01-01", "2018-01-01").size());
+		assertEquals(0, databaseHandler.getPaymentsBetween("2018-01-01", "2019-01-01").size());
+	}
+	
+	@Test
+	public void testDeleteNormalPayment()
+	{
+		//add
+		NormalPayment expectedPayment = new NormalPayment(1, 1000, "2017-03-01", 2, "Buchung", "Lorem Ipsum");
+		
+		databaseHandler.addNormalPayment(expectedPayment.getAmount(),
+										 expectedPayment.getDate(),
+										 expectedPayment.getCategoryID(),
+										 expectedPayment.getName(),
+										 expectedPayment.getDescription());
+		
+		int id = databaseHandler.getLastInsertID();
+		
+		databaseHandler.deletePayment(id);
+		NormalPayment payment = databaseHandler.getPayment(id);
+		
+		assertNull(payment);
+	}
+	
+	@Test
+	public void testRepeatingPayment()
+	{	
+		//add
+		RepeatingPayment expectedPayment = new RepeatingPayment(1, 1000, "2017-03-01", 2, "Buchung", "Lorem Ipsum", 0, null, 15);
+		
+		databaseHandler.addRepeatingPayment(expectedPayment.getAmount(),
+											expectedPayment.getDate(),
+											expectedPayment.getCategoryID(),
+											expectedPayment.getName(),
+											expectedPayment.getDescription(),
+											expectedPayment.getRepeatInterval(),
+											expectedPayment.getRepeatEndDate(),
+											expectedPayment.getRepeatMonthDay());
+		//get
+		RepeatingPayment payment = databaseHandler.getRepeatingPayment(databaseHandler.getLastInsertID());
+		
+		assertEquals(expectedPayment.getAmount(), payment.getAmount());		
+		assertEquals(expectedPayment.getDate(), payment.getDate());
+		assertEquals(expectedPayment.getCategoryID(), payment.getCategoryID());
+		assertEquals(expectedPayment.getName(), payment.getName());
+		assertEquals(expectedPayment.getDescription(), payment.getDescription());
+		assertEquals(expectedPayment.getRepeatInterval(), payment.getRepeatInterval());
+		assertEquals(expectedPayment.getRepeatEndDate(), payment.getRepeatEndDate());
+		assertEquals(expectedPayment.getRepeatMonthDay(), payment.getRepeatMonthDay());
+		
+		//RepeatingPaymentEntry
+		databaseHandler.addRepeatingPaymentEntry(expectedPayment.getID(), "2017-03-15");
+		ArrayList<LatestRepeatingPayment> latestPayments = databaseHandler.getLatestRepeatingPaymentEntries();
+		assertEquals(1, latestPayments.size());
+		assertEquals(expectedPayment.getID(), latestPayments.get(0).getRepeatingPaymentID());
+		assertEquals("2017-03-15", latestPayments.get(0).getLastDate());		
+		
+		//misc
+		assertEquals(1, databaseHandler.getRepeatingPayments(2017, 03).size());
+		assertEquals(0, databaseHandler.getRepeatingPayments(2015, 03).size());
+		
+		assertEquals(1, databaseHandler.getRepeatingPaymentsBetween("2016-01-01", "2018-01-01").size());
+		assertEquals(0, databaseHandler.getRepeatingPaymentsBetween("2018-01-01", "2019-01-01").size());
+		
+		assertEquals(1, databaseHandler.getAllRepeatingPayments().size());		
+	}
+	
+	@Test
+	public void testDeleteRepeatingPayment()
+	{
+		RepeatingPayment expectedPayment = new RepeatingPayment(1, 1000, "2017-03-01", 2, "Buchung", "Lorem Ipsum", 0, null, 15);
+		
+		databaseHandler.addRepeatingPayment(expectedPayment.getAmount(),
+											expectedPayment.getDate(),
+											expectedPayment.getCategoryID(),
+											expectedPayment.getName(),
+											expectedPayment.getDescription(),
+											expectedPayment.getRepeatInterval(),
+											expectedPayment.getRepeatEndDate(),
+											expectedPayment.getRepeatMonthDay());
+		
+		int id = databaseHandler.getLastInsertID();
+		
+		databaseHandler.deleteRepeatingPayment(id);
+		RepeatingPayment payment = databaseHandler.getRepeatingPayment(id);
+		
+		assertNull(payment);
+	}
+	
+	@Test
+	public void testRest()
+	{
+		//add payments for previous months
+		NormalPayment expectedPayment = new NormalPayment(1, 1000, "2017-03-01", 2, "Buchung", "Lorem Ipsum");		
+		databaseHandler.addNormalPayment(expectedPayment.getAmount(),
+										 expectedPayment.getDate(),
+										 expectedPayment.getCategoryID(),
+										 expectedPayment.getName(),
+										 expectedPayment.getDescription());		
+		int idPayment1 = databaseHandler.getLastInsertID();
+		
+		expectedPayment = new NormalPayment(2, -800, "2017-02-01", 2, "Buchung", "Lorem Ipsum");		
+		databaseHandler.addNormalPayment(expectedPayment.getAmount(),
+										 expectedPayment.getDate(),
+										 expectedPayment.getCategoryID(),
+										 expectedPayment.getName(),
+										 expectedPayment.getDescription());
+		int idPayment2 = databaseHandler.getLastInsertID();
+		
+		assertEquals(1000, databaseHandler.getRest(2017, 3));		
+		assertEquals(200, databaseHandler.getRestForAllPreviousMonths(2017, 4));
+		
+		databaseHandler.deletePayment(idPayment1);
+		databaseHandler.deletePayment(idPayment2);
+	}
+}
\ No newline at end of file
diff --git a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..21eb640fe951be51244ec4a57e0b1812418c1bc7
--- /dev/null
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
@@ -0,0 +1,130 @@
+package de.deadlocker8.budgetmaster.tests.server.database;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.google.gson.Gson;
+
+import de.deadlocker8.budgetmaster.logic.Category;
+import de.deadlocker8.budgetmaster.logic.NormalPayment;
+import de.deadlocker8.budgetmaster.logic.RepeatingPayment;
+import de.deadlocker8.budgetmasterserver.logic.Database;
+import de.deadlocker8.budgetmasterserver.logic.DatabaseExporter;
+import de.deadlocker8.budgetmasterserver.logic.DatabaseHandler;
+import de.deadlocker8.budgetmasterserver.logic.DatabaseImporter;
+import de.deadlocker8.budgetmasterserver.logic.Settings;
+import de.deadlocker8.budgetmasterserver.logic.Utils;
+import javafx.scene.paint.Color;
+
+public class DatabaseImportExportTest
+{			
+	private static Settings settings;
+	private static DatabaseHandler databaseHandler;
+	
+	@BeforeClass
+	public static void init()
+	{
+		try
+		{
+			//init
+			settings = Utils.loadSettings();			
+			DatabaseHandler handler = new DatabaseHandler(settings);
+			handler.deleteDatabase();
+			handler = new DatabaseHandler(settings);			
+			databaseHandler = handler;
+		}
+		catch(IOException | URISyntaxException e)
+		{
+			fail(e.getMessage());
+		}		
+	}	
+	
+	@Test
+	public void testImport()
+	{	
+		try
+		{
+			File file = Paths.get("tests/de/deadlocker8/budgetmaster/tests/resources/import.json").toFile();
+			Database database = de.deadlocker8.budgetmaster.logic.Utils.loadDatabaseJSON(file);			
+			
+			DatabaseImporter importer = new DatabaseImporter(databaseHandler);
+			importer.importDatabase(database);
+			
+			//test category
+			Category expectedCategory = new Category(3, "123 Tü+?est Category", Color.ALICEBLUE);			
+			ArrayList<Category> categories = databaseHandler.getCategories();	
+			
+			Category category = databaseHandler.getCategory(categories.get(categories.size()-1).getID());
+			assertEquals(expectedCategory.getName(), category.getName());
+			assertEquals(expectedCategory.getColor(), category.getColor());
+			
+			//test normal payment
+			NormalPayment expectedPayment = new NormalPayment(1, 23, "2017-06-02", 0, "Test Normal", "Lorem Ipsum");			
+			NormalPayment payment = databaseHandler.getPayment(1);			
+			assertEquals(expectedPayment.getAmount(), payment.getAmount());		
+			assertEquals(expectedPayment.getDate(), payment.getDate());
+			assertEquals(expectedPayment.getCategoryID(), payment.getCategoryID());
+			assertEquals(expectedPayment.getName(), payment.getName());
+			assertEquals(expectedPayment.getDescription(), payment.getDescription());
+			
+			//test repeating payment
+			RepeatingPayment expectedRepeatingPayment = new RepeatingPayment(1, -10012, "2017-06-01", 1, "Test Repeating", "Lorem Ipsum", 7, "2017-06-30", 0);			
+			RepeatingPayment repeatingPayment = databaseHandler.getRepeatingPayment(1);
+			assertEquals(expectedRepeatingPayment.getAmount(), repeatingPayment.getAmount());
+			assertEquals(expectedRepeatingPayment.getDate(), repeatingPayment.getDate());
+			assertEquals(expectedRepeatingPayment.getCategoryID(), repeatingPayment.getCategoryID());
+			assertEquals(expectedRepeatingPayment.getName(), repeatingPayment.getName());
+			assertEquals(expectedRepeatingPayment.getDescription(), repeatingPayment.getDescription());
+			assertEquals(expectedRepeatingPayment.getRepeatInterval(), repeatingPayment.getRepeatInterval());
+			assertEquals(expectedRepeatingPayment.getRepeatEndDate(), repeatingPayment.getRepeatEndDate());
+			assertEquals(expectedRepeatingPayment.getRepeatMonthDay(), repeatingPayment.getRepeatMonthDay());			
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+			fail(e.getMessage());
+		}		
+	}
+	
+	@Test
+	public void testExport()
+	{	
+		try
+		{
+			databaseHandler.deleteDatabase();
+			databaseHandler = new DatabaseHandler(settings);
+			
+			File file = Paths.get("tests/de/deadlocker8/budgetmaster/tests/resources/import.json").toFile();
+			Database database = de.deadlocker8.budgetmaster.logic.Utils.loadDatabaseJSON(file);			
+			
+			DatabaseImporter importer = new DatabaseImporter(databaseHandler);
+			importer.importDatabase(database);			
+			
+			file = Paths.get("tests/de/deadlocker8/budgetmaster/tests/resources/export.json").toFile();
+			DatabaseExporter exporter = new DatabaseExporter(settings);	
+			Gson gson = new Gson();
+			String databaseJSON = gson.toJson(exporter.exportDatabase());
+			de.deadlocker8.budgetmaster.logic.Utils.saveDatabaseJSON(file, databaseJSON);		
+			
+			String expectedJSON = new String(Files.readAllBytes(Paths.get("tests/de/deadlocker8/budgetmaster/tests/resources/import.json")));
+			String exportedJSON = new String(Files.readAllBytes(Paths.get("tests/de/deadlocker8/budgetmaster/tests/resources/export.json")));		
+			
+			assertEquals(expectedJSON, exportedJSON);
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+			fail(e.getMessage());
+		}		
+	}
+}
\ No newline at end of file
diff --git a/tests/de/deadlocker8/budgetmaster/tests/server/settings/SettingsTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/settings/SettingsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6136a4ca9d728627d118e7ca9a2c84dce306c7ea
--- /dev/null
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/settings/SettingsTest.java
@@ -0,0 +1,40 @@
+package de.deadlocker8.budgetmaster.tests.server.settings;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import org.junit.Test;
+
+import de.deadlocker8.budgetmasterserver.logic.Settings;
+import de.deadlocker8.budgetmasterserver.logic.Utils;
+
+public class SettingsTest
+{		
+	@Test
+	public void testRead()
+	{		
+		try
+		{
+			Settings settings = Utils.loadSettings();
+			
+			Settings expectedSettings = new Settings();
+			expectedSettings.setDatabaseName("b");
+			expectedSettings.setDatabaseUrl("jdbc:mysql://localhost:3306/");
+			expectedSettings.setDatabaseUsername("root");
+			expectedSettings.setDatabasePassword("");
+			expectedSettings.setServerPort(9000);
+			expectedSettings.setServerSecret("geheim");
+			expectedSettings.setKeystorePath("C:/Programmierung/eclipse/workspace/BudgetMaster/certs/keystore_self_signed.jks");
+			expectedSettings.setKeystorePassword("geheim");			
+			
+			assertEquals(expectedSettings, settings);
+		}
+		catch(IOException | URISyntaxException e)
+		{
+			fail(e.getMessage());
+		}
+	}
+}
\ No newline at end of file