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 beb451b946b9070f22b396922992edbc330a4139..bd0b3a64fa42906942fb1ece72d06cca846729de 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
@@ -20,7 +20,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.*;
 
 
 public class DatabaseParser_v4Test
@@ -223,4 +223,15 @@ public class DatabaseParser_v4Test
 			e.printStackTrace();
 		}
 	}
+
+	@Test
+	public void test_convertToInternalShouldFail() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v4Test.json").toURI())));
+		DatabaseParser_v4 parser = new DatabaseParser_v4(json);
+		BackupDatabase_v4 database = parser.parseDatabaseFromJSON();
+
+		assertThatThrownBy(database::convertToInternal)
+				.isInstanceOf(UnsupportedOperationException.class);
+	}
 }
\ No newline at end of file
diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java
index 7393f04cc7e8aab03770ca51b71588503345e980..962e4f50f94768a3a673495d362b1d4fad10f585 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v5Test.java
@@ -4,11 +4,9 @@ import de.deadlocker8.budgetmaster.accounts.AccountState;
 import de.deadlocker8.budgetmaster.accounts.AccountType;
 import de.deadlocker8.budgetmaster.categories.CategoryType;
 import de.deadlocker8.budgetmaster.charts.ChartType;
+import de.deadlocker8.budgetmaster.database.DatabaseParser_v4;
 import de.deadlocker8.budgetmaster.database.DatabaseParser_v5;
-import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingEndOption_v4;
-import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingModifier_v4;
-import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingOption_v4;
-import de.deadlocker8.budgetmaster.database.model.v4.BackupTag_v4;
+import de.deadlocker8.budgetmaster.database.model.v4.*;
 import de.deadlocker8.budgetmaster.database.model.v5.*;
 import de.deadlocker8.budgetmaster.images.ImageFileExtension;
 import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes;
@@ -27,6 +25,7 @@ import java.util.List;
 import java.util.Locale;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 
 public class DatabaseParser_v5Test
@@ -250,4 +249,15 @@ public class DatabaseParser_v5Test
 			e.printStackTrace();
 		}
 	}
+	@Test
+	public void test_convertToInternalShouldFail() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v5Test.json").toURI())));
+		DatabaseParser_v5 parser = new DatabaseParser_v5(json);
+		BackupDatabase_v5 database = parser.parseDatabaseFromJSON();
+
+		assertThatThrownBy(database::convertToInternal)
+				.isInstanceOf(UnsupportedOperationException.class);
+	}
+
 }
\ No newline at end of file
diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v6Test.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v6Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..22cfef0df591dc2b13da0cb6787b21d7a70e5e47
--- /dev/null
+++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v6Test.java
@@ -0,0 +1,200 @@
+package de.deadlocker8.budgetmaster.unit.database;
+
+import de.deadlocker8.budgetmaster.accounts.AccountState;
+import de.deadlocker8.budgetmaster.accounts.AccountType;
+import de.deadlocker8.budgetmaster.categories.CategoryType;
+import de.deadlocker8.budgetmaster.charts.ChartType;
+import de.deadlocker8.budgetmaster.database.DatabaseParser_v6;
+import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingEndOption_v4;
+import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingModifier_v4;
+import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingOption_v4;
+import de.deadlocker8.budgetmaster.database.model.v4.BackupTag_v4;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupChart_v5;
+import de.deadlocker8.budgetmaster.database.model.v6.BackupAccount_v6;
+import de.deadlocker8.budgetmaster.database.model.v6.BackupDatabase_v6;
+import de.deadlocker8.budgetmaster.database.model.v6.BackupTemplate_v6;
+import de.deadlocker8.budgetmaster.database.model.v6.BackupTransaction_v6;
+import de.deadlocker8.budgetmaster.images.ImageFileExtension;
+import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes;
+import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays;
+import de.thecodelabs.utils.util.Localization;
+import de.thecodelabs.utils.util.Localization.LocalizationDelegate;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+
+public class DatabaseParser_v6Test
+{
+	@Before
+	public void before()
+	{
+		Localization.setDelegate(new LocalizationDelegate()
+		{
+			@Override
+			public Locale getLocale()
+			{
+				return Locale.ENGLISH;
+			}
+
+			@Override
+			public String getBaseResource()
+			{
+				return "languages/base";
+			}
+		});
+		Localization.load();
+	}
+
+	@Test
+	public void test_Charts() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI())));
+		DatabaseParser_v6 parser = new DatabaseParser_v6(json);
+		BackupDatabase_v6 database = parser.parseDatabaseFromJSON();
+
+		final BackupChart_v5 chart = new BackupChart_v5(9, "The best chart", "/* This list will be dynamically filled with all the transactions between\r\n* the start and and date you select on the \"Show Chart\" page\r\n* and filtered according to your specified filter.\r\n* An example entry for this list and tutorial about how to create custom charts ca be found in the BudgetMaster wiki:\r\n* https://github.com/deadlocker8/BudgetMaster/wiki/How-to-create-custom-charts\r\n*/\r\nvar transactionData \u003d [];\r\n\r\n// Prepare your chart settings here (mandatory)\r\nvar plotlyData \u003d [{\r\n    x: [],\r\n    y: [],\r\n    type: \u0027bar\u0027\r\n}];\r\n\r\n// Add your Plotly layout settings here (optional)\r\nvar plotlyLayout \u003d {};\r\n\r\n// Add your Plotly configuration settings here (optional)\r\nvar plotlyConfig \u003d {\r\n    showSendToCloud: false,\r\n    displaylogo: false,\r\n    showLink: false,\r\n    responsive: true\r\n};\r\n\r\n// Don\u0027t touch this line\r\nPlotly.newPlot(\"containerID\", plotlyData, plotlyLayout, plotlyConfig);\r\n", ChartType.CUSTOM, 7);
+
+		assertThat(database.getCharts()).hasSize(1)
+				.contains(chart);
+	}
+
+	@Test
+	public void test_Categories() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI())));
+		DatabaseParser_v6 parser = new DatabaseParser_v6(json);
+		BackupDatabase_v6 database = parser.parseDatabaseFromJSON();
+
+		final BackupCategory_v5 category = new BackupCategory_v5(3, "0815", "#ffcc00", CategoryType.CUSTOM, "fas fa-icons");
+
+		assertThat(database.getCategories()).hasSize(3)
+				.contains(category);
+	}
+
+	@Test
+	public void test_Accounts() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI())));
+		DatabaseParser_v6 parser = new DatabaseParser_v6(json);
+		BackupDatabase_v6 database = parser.parseDatabaseFromJSON();
+
+		final BackupAccount_v6 account = new BackupAccount_v6(3, "Second Account", AccountState.FULL_ACCESS, AccountType.CUSTOM, 1);
+
+		assertThat(database.getAccounts()).hasSize(3)
+				.contains(account);
+		assertThat(database.getAccounts().get(2).getIconID())
+				.isOne();
+	}
+
+	@Test
+	public void test_Images() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI())));
+		DatabaseParser_v6 parser = new DatabaseParser_v6(json);
+		BackupDatabase_v6 database = parser.parseDatabaseFromJSON();
+
+		assertThat(database.getImages()).hasSize(1);
+		assertThat(database.getImages().get(0)).hasFieldOrPropertyWithValue("fileExtension", ImageFileExtension.PNG);
+		assertThat(database.getImages().get(0).getImage())
+				.isNotNull()
+				.hasSizeGreaterThan(1);
+	}
+
+	@Test
+	public void test_Templates() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI())));
+		DatabaseParser_v6 parser = new DatabaseParser_v6(json);
+		BackupDatabase_v6 database = parser.parseDatabaseFromJSON();
+
+		BackupTemplate_v6 template = new BackupTemplate_v6();
+		template.setTemplateName("Template with icon");
+		template.setExpenditure(true);
+		template.setIconID(1);
+		template.setTags(List.of());
+
+		assertThat(database.getTemplates()).hasSize(4)
+				.contains(template);
+		assertThat(database.getTemplates().get(3).getIconID())
+				.isOne();
+	}
+
+	@Test
+	public void test_Transactions() throws URISyntaxException, IOException
+	{
+		String json = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("DatabaseParser_v6Test.json").toURI())));
+		DatabaseParser_v6 parser = new DatabaseParser_v6(json);
+		BackupDatabase_v6 database = parser.parseDatabaseFromJSON();
+
+		BackupTransaction_v6 normalTransaction_1 = new BackupTransaction_v6();
+		normalTransaction_1.setAmount(35000);
+		normalTransaction_1.setDate("2018-03-13");
+		normalTransaction_1.setCategoryID(1);
+		normalTransaction_1.setName("Income");
+		normalTransaction_1.setDescription("Lorem Ipsum");
+		normalTransaction_1.setTags(new ArrayList<>());
+		normalTransaction_1.setAccountID(2);
+		normalTransaction_1.setExpenditure(false);
+
+		BackupTransaction_v6 normalTransaction_2 = new BackupTransaction_v6();
+		normalTransaction_2.setAmount(-2000);
+		normalTransaction_2.setDate("2018-06-15");
+		normalTransaction_2.setName("Simple");
+		normalTransaction_2.setDescription("");
+		normalTransaction_2.setAccountID(3);
+		normalTransaction_2.setCategoryID(3);
+		normalTransaction_2.setExpenditure(true);
+
+		List<BackupTag_v4> tags = new ArrayList<>();
+		BackupTag_v4 tag = new BackupTag_v4("0815");
+		tags.add(tag);
+		normalTransaction_2.setTags(tags);
+
+		BackupTransaction_v6 repeatingTransaction_1 = new BackupTransaction_v6();
+		repeatingTransaction_1.setAmount(-12300);
+		String repeatingTransaction_1Date = "2018-03-13";
+		repeatingTransaction_1.setDate(repeatingTransaction_1Date);
+		repeatingTransaction_1.setCategoryID(1);
+		repeatingTransaction_1.setName("Test");
+		repeatingTransaction_1.setDescription("");
+		repeatingTransaction_1.setAccountID(2);
+		BackupRepeatingOption_v4 repeatingOption_1 = new BackupRepeatingOption_v4();
+		repeatingOption_1.setModifier(new BackupRepeatingModifier_v4(10, new RepeatingModifierDays(10).getLocalizationKey()));
+		repeatingOption_1.setStartDate(repeatingTransaction_1Date);
+		BackupRepeatingEndOption_v4 endOption = new BackupRepeatingEndOption_v4();
+		endOption.setTimes(2);
+		endOption.setLocalizationKey(new RepeatingEndAfterXTimes(2).getLocalizationKey());
+		repeatingOption_1.setEndOption(endOption);
+		repeatingTransaction_1.setRepeatingOption(repeatingOption_1);
+		repeatingTransaction_1.setTags(new ArrayList<>());
+		repeatingTransaction_1.setExpenditure(true);
+
+		BackupTransaction_v6 transferTransaction = new BackupTransaction_v6();
+		transferTransaction.setAmount(-250);
+		transferTransaction.setDate("2018-06-15");
+		transferTransaction.setName("Transfer");
+		transferTransaction.setDescription("");
+		transferTransaction.setAccountID(3);
+		transferTransaction.setTransferAccountID(2);
+		transferTransaction.setCategoryID(3);
+		transferTransaction.setTags(new ArrayList<>());
+		transferTransaction.setExpenditure(true);
+
+		assertThat(database.getTransactions()).hasSize(4)
+				.contains(normalTransaction_1,
+						normalTransaction_2,
+						repeatingTransaction_1,
+						transferTransaction);
+	}
+}
\ No newline at end of file
diff --git a/src/test/resources/DatabaseParser_v6Test.json b/src/test/resources/DatabaseParser_v6Test.json
index 50a9061bbd72ae643d78b52d5f2e4c0b72440ff1..fe9c3bae8ddc33de4e583074b57509147a4da2d1 100644
--- a/src/test/resources/DatabaseParser_v6Test.json
+++ b/src/test/resources/DatabaseParser_v6Test.json
@@ -49,18 +49,8 @@
             "amount": 35000,
             "isExpenditure": false,
             "date": "2018-03-13",
-            "account": {
-                "ID": 2,
-                "name": "Default",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM"
-            },
-            "category": {
-                "ID": 1,
-                "name": "Keine Kategorie",
-                "color": "#FFFFFF",
-                "type": "NONE"
-            },
+            "accountID": 2,
+            "categoryID": 1,
             "name": "Income",
             "description": "Lorem Ipsum",
             "tags": []
@@ -70,20 +60,8 @@
             "amount": -2000,
             "isExpenditure": true,
             "date": "2018-06-15",
-            "account": {
-                "ID": 3,
-                "name": "Second Account",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM",
-                "iconID": 1
-            },
-            "category": {
-                "ID": 3,
-                "name": "0815",
-                "color": "#ffcc00",
-                "type": "CUSTOM",
-                "icon": "fas fa-icons"
-            },
+            "accountID": 3,
+            "categoryID": 3,
             "name": "Simple",
             "description": "",
             "tags": [
@@ -98,18 +76,8 @@
             "amount": -12300,
             "isExpenditure": true,
             "date": "2018-03-13",
-            "account": {
-                "ID": 2,
-                "name": "Default",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM"
-            },
-            "category": {
-                "ID": 1,
-                "name": "Keine Kategorie",
-                "color": "#FFFFFF",
-                "type": "NONE"
-            },
+            "accountID": 2,
+            "categoryID": 1,
             "name": "Test",
             "description": "",
             "tags": [],
@@ -133,47 +101,20 @@
             "amount": -250,
             "isExpenditure": true,
             "date": "2018-06-15",
-            "account": {
-                "ID": 3,
-                "name": "Second Account",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM",
-                "iconID": 1
-            },
-            "category": {
-                "ID": 3,
-                "name": "0815",
-                "color": "#ffcc00",
-                "type": "CUSTOM",
-                "icon": "fas fa-icons"
-            },
+            "accountID": 3,
+            "categoryID": 3,
             "name": "Transfer",
             "description": "",
             "tags": [],
-            "transferAccount": {
-                "ID": 2,
-                "name": "Default",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM"
-            }
+            "transferAccountID": 2
         }
     ],
     "templates": [
         {
             "ID": 5,
             "amount": 1500,
-            "account": {
-                "ID": 2,
-                "name": "Default",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM"
-            },
-            "category": {
-                "ID": 1,
-                "name": "Keine Kategorie",
-                "color": "#FFFFFF",
-                "type": "NONE"
-            },
+            "accountID": 2,
+            "categoryID": 1,
             "name": "Income",
             "templateName": "My Simple Template",
             "description": "Lorem Ipsum",
@@ -191,20 +132,8 @@
         {
             "ID": 7,
             "amount": -35000,
-            "account": {
-                "ID": 3,
-                "name": "Second Account",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM",
-                "iconID": 1
-            },
-            "category": {
-                "ID": 3,
-                "name": "0815",
-                "color": "#ffcc00",
-                "type": "CUSTOM",
-                "icon": "fas fa-icons"
-            },
+            "accountID": 3,
+            "categoryID": 3,
             "name": "Income",
             "templateName": "My Transfer Template",
             "description": "Lorem Ipsum",
@@ -213,16 +142,12 @@
                     "name": "0815"
                 }
             ],
-            "transferAccount": {
-                "ID": 2,
-                "name": "Default",
-                "accountState": "FULL_ACCESS",
-                "type": "CUSTOM"
-            }
+            "transferAccountID": 2
         },
         {
             "ID": 8,
             "templateName": "Template with icon",
+            "isExpenditure": true,
             "tags": [],
             "iconID": 1
         }