diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParserTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParserTest.java
index 3a4523a3d586587d58c25f9bf3e7e43951ccb5a5..21fa45aa9de25a650ef77f9a7485143ecee0be42 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParserTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParserTest.java
@@ -63,7 +63,7 @@ public class DatabaseParserTest
 		DatabaseParser importer = new DatabaseParser(json, categoryNone);
 		final Database database = importer.parseDatabaseFromJSON();
 		assertThat(database.getTransactions())
-				.hasSize(6);
+				.hasSize(4);
 	}
 
 	@Test
diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java
index f4d4084101ca9d1dc7884d6945d3eb4361ffcc02..70e9b483c3225decddd538a6839c36978e7faf43 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v4Test.java
@@ -1,21 +1,14 @@
 package de.deadlocker8.budgetmaster.unit.database;
 
-import de.deadlocker8.budgetmaster.accounts.Account;
 import de.deadlocker8.budgetmaster.accounts.AccountType;
-import de.deadlocker8.budgetmaster.categories.Category;
 import de.deadlocker8.budgetmaster.categories.CategoryType;
-import de.deadlocker8.budgetmaster.database.Database;
 import de.deadlocker8.budgetmaster.database.DatabaseParser_v4;
-import de.deadlocker8.budgetmaster.repeating.RepeatingOption;
+import de.deadlocker8.budgetmaster.database.model.v4.*;
 import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes;
 import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays;
 import de.deadlocker8.budgetmaster.tags.Tag;
-import de.deadlocker8.budgetmaster.templates.Template;
-import de.deadlocker8.budgetmaster.transactions.Transaction;
 import de.thecodelabs.utils.util.Localization;
 import de.thecodelabs.utils.util.Localization.LocalizationDelegate;
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -59,16 +52,11 @@ public class DatabaseParser_v4Test
 		{
 			String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v4Test.json").toURI())));
 			DatabaseParser_v4 importer = new DatabaseParser_v4(json);
-			Database database = importer.parseDatabaseFromJSON();
+			BackupDatabase_v4 database = importer.parseDatabaseFromJSON();
 
-			final Category categoryNone = new Category("Keine Kategorie", "#FFFFFF", CategoryType.NONE);
-			categoryNone.setID(1);
-
-			final Category categoryRest = new Category("Übertrag", "#FFFF00", CategoryType.REST);
-			categoryRest.setID(2);
-
-			final Category category3 = new Category("0815", "#ffcc00", CategoryType.CUSTOM);
-			category3.setID(3);
+			final BackupCategory_v4 categoryNone = new BackupCategory_v4(1, "Keine Kategorie", "#FFFFFF", CategoryType.NONE);
+			final BackupCategory_v4 categoryRest = new BackupCategory_v4(2, "Übertrag", "#FFFF00", CategoryType.REST);
+			final BackupCategory_v4 category3 = new BackupCategory_v4(3, "0815", "#ffcc00", CategoryType.CUSTOM);
 
 			assertThat(database.getCategories()).hasSize(3)
 					.contains(categoryNone, categoryRest, category3);
@@ -86,7 +74,7 @@ public class DatabaseParser_v4Test
 		{
 			String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v4Test.json").toURI())));
 			DatabaseParser_v4 importer = new DatabaseParser_v4(json);
-			Database database = importer.parseDatabaseFromJSON();
+			BackupDatabase_v4 database = importer.parseDatabaseFromJSON();
 
 			assertThat(database.getAccounts()).hasSize(3);
 			assertThat(database.getAccounts().get(0)).hasFieldOrPropertyWithValue("name", "Placeholder");
@@ -106,38 +94,32 @@ public class DatabaseParser_v4Test
 		{
 			String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v4Test.json").toURI())));
 			DatabaseParser_v4 importer = new DatabaseParser_v4(json);
-			Database database = importer.parseDatabaseFromJSON();
-
-			Account account1 = new Account("Default", AccountType.CUSTOM);
-			account1.setID(2);
-
-			Account account2 = new Account("Second Account", AccountType.CUSTOM);
-			account2.setID(3);
+			BackupDatabase_v4 database = importer.parseDatabaseFromJSON();
 
-			Category categoryNone = new Category("Keine Kategorie", "#FFFFFF", CategoryType.NONE);
-			categoryNone.setID(1);
+			BackupAccount_v4 account1 = new BackupAccount_v4(2, "Default", AccountType.CUSTOM);
+			BackupAccount_v4 account2 = new BackupAccount_v4(3, "Second Account", AccountType.CUSTOM);
 
-			Category category3 = new Category("0815", "#ffcc00", CategoryType.CUSTOM);
-			category3.setID(3);
+			BackupCategory_v4 categoryNone = new BackupCategory_v4(1, "Keine Kategorie", "#FFFFFF", CategoryType.NONE);
+			BackupCategory_v4 category3 = new BackupCategory_v4(3, "0815", "#ffcc00", CategoryType.CUSTOM);
 
-			Transaction normalTransaction_1 = new Transaction();
+			BackupTransaction_v4 normalTransaction_1 = new BackupTransaction_v4();
 			normalTransaction_1.setAmount(35000);
-			normalTransaction_1.setDate(DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")));
+			normalTransaction_1.setDate("2018-03-13");
 			normalTransaction_1.setCategory(categoryNone);
 			normalTransaction_1.setName("Income");
 			normalTransaction_1.setDescription("Lorem Ipsum");
 			normalTransaction_1.setTags(new ArrayList<>());
 			normalTransaction_1.setAccount(account1);
-			normalTransaction_1.setIsExpenditure(false);
+			normalTransaction_1.setExpenditure(false);
 
-			Transaction normalTransaction_2 = new Transaction();
+			BackupTransaction_v4 normalTransaction_2 = new BackupTransaction_v4();
 			normalTransaction_2.setAmount(-2000);
-			normalTransaction_2.setDate(DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd")));
+			normalTransaction_2.setDate("2018-06-15");
 			normalTransaction_2.setName("Simple");
 			normalTransaction_2.setDescription("");
 			normalTransaction_2.setAccount(account2);
 			normalTransaction_2.setCategory(category3);
-			normalTransaction_2.setIsExpenditure(true);
+			normalTransaction_2.setExpenditure(true);
 
 			List<Tag> tags = new ArrayList<>();
 			Tag tag = new Tag("0815");
@@ -145,54 +127,40 @@ public class DatabaseParser_v4Test
 			tags.add(tag);
 			normalTransaction_2.setTags(tags);
 
-			Transaction repeatingTransaction_1 = new Transaction();
+			BackupTransaction_v4 repeatingTransaction_1 = new BackupTransaction_v4();
 			repeatingTransaction_1.setAmount(-12300);
-			DateTime repeatingTransactionDate_1 = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd"));
+			String repeatingTransactionDate_1 = "2018-03-13";
 			repeatingTransaction_1.setDate(repeatingTransactionDate_1);
 			repeatingTransaction_1.setCategory(categoryNone);
 			repeatingTransaction_1.setName("Test");
 			repeatingTransaction_1.setDescription("");
 			repeatingTransaction_1.setAccount(account1);
-			RepeatingOption repeatingOption_1 = new RepeatingOption();
-			repeatingOption_1.setModifier(new RepeatingModifierDays(10));
+			BackupRepeatingOption_v4 repeatingOption_1 = new BackupRepeatingOption_v4();
+			repeatingOption_1.setModifier(new BackupRepeatingModifier_v4(10, new RepeatingModifierDays(10).getLocalizationKey()));
 			repeatingOption_1.setStartDate(repeatingTransactionDate_1);
-			repeatingOption_1.setEndOption(new RepeatingEndAfterXTimes(2));
+			BackupRepeatingEndOption_v4 repeatingEndOption = new BackupRepeatingEndOption_v4();
+			repeatingEndOption.setTimes(2);
+			repeatingEndOption.setLocalizationKey(new RepeatingEndAfterXTimes(10).getLocalizationKey());
+			repeatingOption_1.setEndOption(repeatingEndOption);
 			repeatingTransaction_1.setRepeatingOption(repeatingOption_1);
 			repeatingTransaction_1.setTags(new ArrayList<>());
-			repeatingTransaction_1.setIsExpenditure(true);
+			repeatingTransaction_1.setExpenditure(true);
 
-			Transaction repeatingTransaction_2 = new Transaction();
-			repeatingTransaction_2.setAmount(-12300);
-			DateTime repeatingTransactionDate_2 = DateTime.parse("2018-03-23", DateTimeFormat.forPattern("yyyy-MM-dd"));
-			repeatingTransaction_2.setDate(repeatingTransactionDate_2);
-			repeatingTransaction_2.setCategory(categoryNone);
-			repeatingTransaction_2.setName("Test");
-			repeatingTransaction_2.setDescription("");
-			repeatingTransaction_2.setAccount(account1);
-			RepeatingOption repeatingOption_2 = new RepeatingOption();
-			repeatingOption_2.setModifier(new RepeatingModifierDays(10));
-			repeatingOption_2.setStartDate(repeatingTransactionDate_2);
-			repeatingOption_2.setEndOption(new RepeatingEndAfterXTimes(2));
-			repeatingTransaction_2.setRepeatingOption(repeatingOption_2);
-			repeatingTransaction_2.setTags(new ArrayList<>());
-			repeatingTransaction_2.setIsExpenditure(true);
-
-			Transaction transferTransaction = new Transaction();
+			BackupTransaction_v4 transferTransaction = new BackupTransaction_v4();
 			transferTransaction.setAmount(-250);
-			transferTransaction.setDate(DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd")));
+			transferTransaction.setDate("2018-06-15");
 			transferTransaction.setName("Transfer");
 			transferTransaction.setDescription("");
 			transferTransaction.setAccount(account2);
 			transferTransaction.setTransferAccount(account1);
 			transferTransaction.setCategory(category3);
 			transferTransaction.setTags(new ArrayList<>());
-			transferTransaction.setIsExpenditure(true);
+			transferTransaction.setExpenditure(true);
 
-			assertThat(database.getTransactions()).hasSize(6)
+			assertThat(database.getTransactions()).hasSize(4)
 					.contains(normalTransaction_1,
 							normalTransaction_2,
 							repeatingTransaction_1,
-							repeatingTransaction_2,
 							transferTransaction);
 
 		}
@@ -209,28 +177,22 @@ public class DatabaseParser_v4Test
 		{
 			String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v4Test.json").toURI())));
 			DatabaseParser_v4 importer = new DatabaseParser_v4(json);
-			Database database = importer.parseDatabaseFromJSON();
-
-			Account account1 = new Account("Default", AccountType.CUSTOM);
-			account1.setID(2);
-
-			Account account2 = new Account("Second Account", AccountType.CUSTOM);
-			account2.setID(3);
+			BackupDatabase_v4 database = importer.parseDatabaseFromJSON();
 
-			Category categoryNone = new Category("Keine Kategorie", "#FFFFFF", CategoryType.NONE);
-			categoryNone.setID(1);
+			BackupAccount_v4 account1 = new BackupAccount_v4(2, "Default", AccountType.CUSTOM);
+			BackupAccount_v4 account2 = new BackupAccount_v4(3, "Second Account", AccountType.CUSTOM);
 
-			Category category3 = new Category("0815", "#ffcc00", CategoryType.CUSTOM);
-			category3.setID(3);
+			BackupCategory_v4 categoryNone = new BackupCategory_v4(1, "Keine Kategorie", "#FFFFFF", CategoryType.NONE);
+			BackupCategory_v4 category3 = new BackupCategory_v4(3, "0815", "#ffcc00", CategoryType.CUSTOM);
 
-			Template normalTemplate = new Template();
+			BackupTemplate_v4 normalTemplate = new BackupTemplate_v4();
 			normalTemplate.setAmount(1500);
 			normalTemplate.setName("Income");
 			normalTemplate.setTemplateName("My Simple Template");
 			normalTemplate.setDescription("Lorem Ipsum");
 			normalTemplate.setAccount(account1);
 			normalTemplate.setCategory(categoryNone);
-			normalTemplate.setIsExpenditure(false);
+			normalTemplate.setExpenditure(false);
 
 			List<Tag> tags = new ArrayList<>();
 			Tag tag = new Tag("0815");
@@ -238,12 +200,12 @@ public class DatabaseParser_v4Test
 			tags.add(tag);
 			normalTemplate.setTags(tags);
 
-			Template minimalTemplate = new Template();
+			BackupTemplate_v4 minimalTemplate = new BackupTemplate_v4();
 			minimalTemplate.setTemplateName("My Minimal Template");
 			minimalTemplate.setTags(new ArrayList<>());
-			minimalTemplate.setIsExpenditure(true);
+			minimalTemplate.setExpenditure(true);
 
-			Template transferTemplate = new Template();
+			BackupTemplate_v4 transferTemplate = new BackupTemplate_v4();
 			transferTemplate.setTemplateName("My Transfer Template");
 			transferTemplate.setAmount(-35000);
 			transferTemplate.setAccount(account2);
@@ -252,7 +214,7 @@ public class DatabaseParser_v4Test
 			transferTemplate.setDescription("Lorem Ipsum");
 			transferTemplate.setCategory(category3);
 			transferTemplate.setTags(tags);
-			transferTemplate.setIsExpenditure(true);
+			transferTemplate.setExpenditure(true);
 
 			assertThat(database.getTemplates()).hasSize(3)
 					.contains(normalTemplate, minimalTemplate, transferTemplate);
diff --git a/src/test/resources/DatabaseParser_v4Test.json b/src/test/resources/DatabaseParser_v4Test.json
index a78649b1aa2d3a8bf5dd383404711718c7963251..c05ebe607388d72e197fc60e35cc4ce8d7404693 100644
--- a/src/test/resources/DatabaseParser_v4Test.json
+++ b/src/test/resources/DatabaseParser_v4Test.json
@@ -46,7 +46,8 @@
             "isExpenditure": false,
             "account": {
                 "ID": 2,
-                "name": "Default"
+                "name": "Default",
+                "type": "CUSTOM"
             },
             "category": {
                 "ID": 1,
@@ -64,7 +65,8 @@
             "date": "2018-06-15",
             "account": {
                 "ID": 3,
-                "name": "Second Account"
+                "name": "Second Account",
+                "type": "CUSTOM"
             },
             "category": {
                 "ID": 3,
@@ -87,71 +89,8 @@
             "date": "2018-03-13",
             "account": {
                 "ID": 2,
-                "name": "Default"
-            },
-            "category": {
-                "ID": 1,
-                "name": "Keine Kategorie",
-                "color": "#FFFFFF",
-                "type": "NONE"
-            },
-            "name": "Test",
-            "description": "",
-            "tags": [],
-            "repeatingOption": {
-                "ID": 2,
-                "startDate": "2018-03-13",
-                "modifier": {
-                    "ID": 3,
-                    "quantity": 10,
-                    "localizationKey": "repeating.modifier.days"
-                },
-                "endOption": {
-                    "times": 2,
-                    "ID": 3,
-                    "localizationKey": "repeating.end.key.afterXTimes"
-                }
-            }
-        },
-        {
-            "ID": 14,
-            "amount": -12300,
-            "date": "2018-03-23",
-            "account": {
-                "ID": 2,
-                "name": "Default"
-            },
-            "category": {
-                "ID": 1,
-                "name": "Keine Kategorie",
-                "color": "#FFFFFF",
-                "type": "NONE"
-            },
-            "name": "Test",
-            "description": "",
-            "tags": [],
-            "repeatingOption": {
-                "ID": 2,
-                "startDate": "2018-03-13",
-                "modifier": {
-                    "ID": 3,
-                    "quantity": 10,
-                    "localizationKey": "repeating.modifier.days"
-                },
-                "endOption": {
-                    "times": 2,
-                    "ID": 3,
-                    "localizationKey": "repeating.end.key.afterXTimes"
-                }
-            }
-        },
-        {
-            "ID": 15,
-            "amount": -12300,
-            "date": "2018-04-02",
-            "account": {
-                "ID": 2,
-                "name": "Default"
+                "name": "Default",
+                "type": "CUSTOM"
             },
             "category": {
                 "ID": 1,
@@ -183,7 +122,8 @@
             "date": "2018-06-15",
             "account": {
                 "ID": 3,
-                "name": "Second Account"
+                "name": "Second Account",
+                "type": "CUSTOM"
             },
             "category": {
                 "ID": 3,
@@ -207,7 +147,8 @@
             "amount": 1500,
             "account": {
                 "ID": 2,
-                "name": "Default"
+                "name": "Default",
+                "type": "CUSTOM"
             },
             "category": {
                 "ID": 1,
@@ -235,7 +176,8 @@
             "amount": -35000,
             "account": {
                 "ID": 3,
-                "name": "Second Account"
+                "name": "Second Account",
+                "type": "CUSTOM"
             },
             "category": {
                 "ID": 3,