diff --git a/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java b/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java
index e487c56b5aa64b720e2df793b05a83995d14ad34..f1e4863c8be3901bb95c310ce78e2e0afc1c4d40 100644
--- a/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java
+++ b/src/de/deadlocker8/budgetmasterserver/logic/DatabaseHandler.java
@@ -789,10 +789,6 @@ public class DatabaseHandler
 		{
 			correctRepeatEndDate = null;
 		}
-		else
-		{
-			correctRepeatEndDate = "'" + correctRepeatEndDate + "'";
-		}
 
 		try
 		{
diff --git a/tests/de/deadlocker8/budgetmaster/tests/resources/export.json b/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
index 73b25d2749c63d8c4f581b686e66c233fd0e2e9a..12515b0b63822774520696258cc0d14ecb525eff 100644
--- a/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
+++ b/tests/de/deadlocker8/budgetmaster/tests/resources/export.json
@@ -1 +1 @@
-{"categories":[{"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}},{"ID":4,"name":"123 Tü+?est Category","color":{"red":0.9411765,"green":0.972549,"blue":1.0,"opacity":1.0}}],"normalPayments":[],"repeatingPayments":[]}
\ No newline at end of file
+{"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/DatabaseExportTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseExportTest.java
deleted file mode 100644
index 04722b374764fbbfb7c74a89020fde77ab4df878..0000000000000000000000000000000000000000
--- a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseExportTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-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 org.junit.BeforeClass;
-import org.junit.Test;
-
-import com.google.gson.Gson;
-
-import de.deadlocker8.budgetmasterserver.logic.DatabaseExporter;
-import de.deadlocker8.budgetmasterserver.logic.Settings;
-import de.deadlocker8.budgetmasterserver.logic.Utils;
-
-public class DatabaseExportTest
-{			
-	private static Settings settings; 
-	
-	@BeforeClass
-	public static void init()
-	{
-		try
-		{
-			//init
-			settings = Utils.loadSettings();	
-		}
-		catch(IOException | URISyntaxException e)
-		{
-			fail(e.getMessage());
-		}		
-	}	
-	
-	@Test
-	public void testExport()
-	{	
-		try
-		{
-			File 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/database/DatabaseHandlerTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
index 55f27edd0d5ff22be3426c1efd9fa458a60c9a35..94bd4b2ae7bb367ba5674c5b06e574c2623891ab 100644
--- a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseHandlerTest.java
@@ -2,6 +2,7 @@ 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;
@@ -12,6 +13,7 @@ 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;
@@ -54,20 +56,41 @@ public class DatabaseHandlerTest
 	@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()
 	{
-		databaseHandler.deleteCategory(1);
-		Category category = databaseHandler.getCategory(1);
+		//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);
 	}
@@ -75,27 +98,67 @@ public class DatabaseHandlerTest
 	@Test
 	public void testNormalPayment()
 	{		
-		NormalPayment expectedPayment = new NormalPayment(1, 1000, "2017-03-01", 2, "Buchung", "Lorem Ipsum");	
+		//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());
-		NormalPayment payment = databaseHandler.getPayment(1);
+		
+		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()
 	{
-		databaseHandler.deletePayment(1);
-		NormalPayment payment = databaseHandler.getPayment(1);
+		//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);
 	}
@@ -103,6 +166,7 @@ public class DatabaseHandlerTest
 	@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(),
@@ -112,9 +176,9 @@ public class DatabaseHandlerTest
 											expectedPayment.getDescription(),
 											expectedPayment.getRepeatInterval(),
 											expectedPayment.getRepeatEndDate(),
-											expectedPayment.getRepeatMonthDay());		
-		
-		RepeatingPayment payment = databaseHandler.getRepeatingPayment(1);
+											expectedPayment.getRepeatMonthDay());
+		//get
+		RepeatingPayment payment = databaseHandler.getRepeatingPayment(databaseHandler.getLastInsertID());
 		
 		assertEquals(expectedPayment.getAmount(), payment.getAmount());		
 		assertEquals(expectedPayment.getDate(), payment.getDate());
@@ -124,14 +188,70 @@ public class DatabaseHandlerTest
 		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()
 	{
-		databaseHandler.deleteRepeatingPayment(1);
-		RepeatingPayment payment = databaseHandler.getRepeatingPayment(1);
+		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/DatabaseImportTest.java b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
similarity index 70%
rename from tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportTest.java
rename to tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
index c4c2dce82554b96ec962925925f001e2b6297947..21eb640fe951be51244ec4a57e0b1812418c1bc7 100644
--- a/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportTest.java
+++ b/tests/de/deadlocker8/budgetmaster/tests/server/database/DatabaseImportExportTest.java
@@ -6,24 +6,29 @@ 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 DatabaseImportTest
+public class DatabaseImportExportTest
 {			
+	private static Settings settings;
 	private static DatabaseHandler databaseHandler;
 	
 	@BeforeClass
@@ -32,7 +37,7 @@ public class DatabaseImportTest
 		try
 		{
 			//init
-			Settings settings = Utils.loadSettings();			
+			settings = Utils.loadSettings();			
 			DatabaseHandler handler = new DatabaseHandler(settings);
 			handler.deleteDatabase();
 			handler = new DatabaseHandler(settings);			
@@ -74,8 +79,8 @@ public class DatabaseImportTest
 			
 			//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());		
+			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());
@@ -90,4 +95,36 @@ public class DatabaseImportTest
 			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