diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java
index c1647ca760e5ee6508f5e78197ac61b6cb5cef47..8f2adfa3ad25882da8fb2c1296526ed837ddb84e 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java
@@ -3,6 +3,7 @@ package de.deadlocker8.budgetmaster.accounts;
 import com.google.gson.annotations.Expose;
 import de.deadlocker8.budgetmaster.images.Image;
 import de.deadlocker8.budgetmaster.transactions.Transaction;
+import de.deadlocker8.budgetmaster.utils.ProvidesID;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
@@ -11,7 +12,7 @@ import java.util.List;
 import java.util.Objects;
 
 @Entity
-public class Account
+public class Account implements ProvidesID
 {
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/de/deadlocker8/budgetmaster/categories/Category.java b/src/main/java/de/deadlocker8/budgetmaster/categories/Category.java
index 835ce0bbd772e9a21bd56b5719621efefe177413..502aef8cbe4f1129cb4650f516da1fc5175a3dff 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/categories/Category.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/categories/Category.java
@@ -2,6 +2,7 @@ package de.deadlocker8.budgetmaster.categories;
 
 import com.google.gson.annotations.Expose;
 import de.deadlocker8.budgetmaster.transactions.Transaction;
+import de.deadlocker8.budgetmaster.utils.ProvidesID;
 import de.thecodelabs.utils.util.Color;
 import de.thecodelabs.utils.util.ColorUtilsNonJavaFX;
 
@@ -12,7 +13,7 @@ import java.util.List;
 import java.util.Objects;
 
 @Entity
-public class Category
+public class Category implements ProvidesID
 {
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java
index d149ed3a3163720c8f9d08f0ebbc849e909b1116..784bd814ace6fe6f31d2916a1a7bd536bfa3a39c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java
@@ -17,7 +17,7 @@ public class DatabaseParser
 	final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
 
 	private static final int MINIMUM_VERSION = 4;
-	private static final int LATEST_VERSION = 5;
+	private static final int LATEST_VERSION = 6;
 
 	private final String jsonString;
 
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java
index b6d6f738579579890338f9214c36d32dfbbed883..a48e7e8745c7f6f22adf4d7a3e9ad919550858d7 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java
@@ -1,8 +1,19 @@
 package de.deadlocker8.budgetmaster.database.model;
 
+import de.deadlocker8.budgetmaster.utils.ProvidesID;
+
+import java.util.List;
+
 public interface Converter<T, S>
 {
 	T convertToInternalForm(S backupItem);
 
 	S convertToExternalForm(T internalItem);
+
+	default <U extends ProvidesID> U getItemById(List<U> items, Integer ID)
+	{
+		return items.stream()
+				.filter(item -> item.getID().equals(ID))
+				.findFirst().orElse(null);
+	}
 }
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java
index d10a40b4209d3e15f55e756970e9f0b82efd7401..2e1c80c3869eb6a78afd7069c2e1afad274cfbf6 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java
@@ -108,6 +108,12 @@ public class BackupAccount_v5 implements Upgradeable<BackupAccount_v6>
 
 	public BackupAccount_v6 upgrade()
 	{
-		return new BackupAccount_v6(ID, name, accountState, type, icon.getID());
+		Integer iconID = null;
+		if(icon != null)
+		{
+			iconID = icon.getID();
+		}
+
+		return new BackupAccount_v6(ID, name, accountState, type, iconID);
 	}
 }
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java
index 257a0d0b76411f1587b1a9b9e8abce4815c1dba0..09cbdd827fac380aaf4c460cfc12c4d221c5aac7 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java
@@ -106,14 +106,7 @@ public class BackupDatabase_v5 implements BackupDatabase
 
 	public InternalDatabase convertToInternal()
 	{
-		final List<Category> convertedCategories = convertItemsToInternal(categories, new CategoryConverter_v5());
-		final List<Account> convertedAccounts = convertItemsToInternal(accounts, new AccountConverter_v5());
-		final List<Transaction> convertedTransactions = convertItemsToInternal(this.transactions, new TransactionConverter_v5());
-		final List<Template> convertedTemplates = convertItemsToInternal(this.templates, new TemplateConverter_v5());
-		final List<Chart> convertedCharts = convertItemsToInternal(this.charts, new ChartConverter_v5());
-		final List<Image> convertedImages = convertItemsToInternal(this.images, new ImageConverter_v5());
-
-		return new InternalDatabase(convertedCategories, convertedAccounts, convertedTransactions, convertedTemplates, convertedCharts, convertedImages);
+		throw new UnsupportedOperationException();
 	}
 
 	@Override
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/BackupDatabase_v6.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/BackupDatabase_v6.java
index 0847306d3002edc875a536024131676fb648c714..07ecdbeaab95b9c3efa07c2ba57fe0fa52d23a14 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/BackupDatabase_v6.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/BackupDatabase_v6.java
@@ -9,7 +9,7 @@ import de.deadlocker8.budgetmaster.database.model.BackupDatabase;
 import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5;
 import de.deadlocker8.budgetmaster.database.model.v5.BackupChart_v5;
 import de.deadlocker8.budgetmaster.database.model.v5.BackupImage_v5;
-import de.deadlocker8.budgetmaster.database.model.v5.converter.*;
+import de.deadlocker8.budgetmaster.database.model.v6.converter.*;
 import de.deadlocker8.budgetmaster.images.Image;
 import de.deadlocker8.budgetmaster.templates.Template;
 import de.deadlocker8.budgetmaster.transactions.Transaction;
@@ -22,7 +22,7 @@ public class BackupDatabase_v6 implements BackupDatabase
 	private final String TYPE = JSONIdentifier.BUDGETMASTER_DATABASE.toString();
 
 	@SuppressWarnings("FieldCanBeLocal")
-	private final int VERSION = 5;
+	private final int VERSION = 6;
 
 	private List<BackupCategory_v5> categories;
 	private List<BackupAccount_v6> accounts;
@@ -108,15 +108,14 @@ public class BackupDatabase_v6 implements BackupDatabase
 
 	public InternalDatabase convertToInternal()
 	{
-//		final List<Category> convertedCategories = convertItemsToInternal(categories, new CategoryConverter_v5());
-//		final List<Account> convertedAccounts = convertItemsToInternal(accounts, new AccountConverter_v5());
-//		final List<Transaction> convertedTransactions = convertItemsToInternal(this.transactions, new TransactionConverter_v5());
-//		final List<Template> convertedTemplates = convertItemsToInternal(this.templates, new TemplateConverter_v5());
-//		final List<Chart> convertedCharts = convertItemsToInternal(this.charts, new ChartConverter_v5());
-//		final List<Image> convertedImages = convertItemsToInternal(this.images, new ImageConverter_v5());
-//
-//		return new InternalDatabase(convertedCategories, convertedAccounts, convertedTransactions, convertedTemplates, convertedCharts, convertedImages);
-		return null;
+		final List<Image> convertedImages = convertItemsToInternal(this.images, new ImageConverter());
+		final List<Category> convertedCategories = convertItemsToInternal(categories, new CategoryConverter());
+		final List<Account> convertedAccounts = convertItemsToInternal(accounts, new AccountConverter(convertedImages));
+		final List<Transaction> convertedTransactions = convertItemsToInternal(this.transactions, new TransactionConverter(convertedCategories, convertedAccounts));
+		final List<Template> convertedTemplates = convertItemsToInternal(this.templates, new TemplateConverter(convertedImages, convertedCategories, convertedAccounts));
+		final List<Chart> convertedCharts = convertItemsToInternal(this.charts, new ChartConverter());
+
+		return new InternalDatabase(convertedCategories, convertedAccounts, convertedTransactions, convertedTemplates, convertedCharts, convertedImages);
 	}
 
 	@Override
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/AccountConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/AccountConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..0310f11c640b870556fec5a42579fad844934baa
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/AccountConverter.java
@@ -0,0 +1,64 @@
+package de.deadlocker8.budgetmaster.database.model.v6.converter;
+
+import de.deadlocker8.budgetmaster.accounts.Account;
+import de.deadlocker8.budgetmaster.database.model.Converter;
+import de.deadlocker8.budgetmaster.database.model.v6.BackupAccount_v6;
+import de.deadlocker8.budgetmaster.images.Image;
+
+import java.util.List;
+
+public class AccountConverter implements Converter<Account, BackupAccount_v6>
+{
+	private final List<Image> availableIcons;
+
+	public AccountConverter(List<Image> availableIcons)
+	{
+		this.availableIcons = availableIcons;
+	}
+
+	public Account convertToInternalForm(BackupAccount_v6 backupAccount)
+	{
+		if(backupAccount == null)
+		{
+			return null;
+		}
+
+		final Account account = new Account();
+		account.setID(backupAccount.getID());
+		account.setName(backupAccount.getName());
+		account.setDefault(false);
+		account.setSelected(false);
+		account.setAccountState(backupAccount.getAccountState());
+		account.setType(backupAccount.getType());
+		account.setIcon(getIconById(backupAccount.getIconID()));
+		return account;
+	}
+
+	private Image getIconById(Integer iconID)
+	{
+		return availableIcons.stream()
+				.filter(icon -> icon.getID().equals(iconID))
+				.findFirst().orElse(null);
+	}
+
+	@Override
+	public BackupAccount_v6 convertToExternalForm(Account internalAccount)
+	{
+		if(internalAccount == null)
+		{
+			return null;
+		}
+
+		final BackupAccount_v6 account = new BackupAccount_v6();
+		account.setID(internalAccount.getID());
+		account.setName(internalAccount.getName());
+		account.setAccountState(internalAccount.getAccountState());
+		account.setType(internalAccount.getType());
+
+		if(internalAccount.getIcon() != null)
+		{
+			account.setIconID(internalAccount.getIcon().getID());
+		}
+		return account;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/CategoryConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/CategoryConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7050d2153382039e0211ff8ba3c1eb234fa605a
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/CategoryConverter.java
@@ -0,0 +1,41 @@
+package de.deadlocker8.budgetmaster.database.model.v6.converter;
+
+import de.deadlocker8.budgetmaster.categories.Category;
+import de.deadlocker8.budgetmaster.database.model.Converter;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5;
+
+public class CategoryConverter implements Converter<Category, BackupCategory_v5>
+{
+	public Category convertToInternalForm(BackupCategory_v5 backupCategory)
+	{
+		if(backupCategory == null)
+		{
+			return null;
+		}
+
+		final Category category = new Category();
+		category.setID(backupCategory.getID());
+		category.setName(backupCategory.getName());
+		category.setColor(backupCategory.getColor());
+		category.setType(backupCategory.getType());
+		category.setIcon(backupCategory.getIcon());
+		return category;
+	}
+
+	@Override
+	public BackupCategory_v5 convertToExternalForm(Category internalItem)
+	{
+		if(internalItem == null)
+		{
+			return null;
+		}
+
+		final BackupCategory_v5 category = new BackupCategory_v5();
+		category.setID(internalItem.getID());
+		category.setName(internalItem.getName());
+		category.setColor(internalItem.getColor());
+		category.setType(internalItem.getType());
+		category.setIcon(internalItem.getIcon());
+		return category;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/ChartConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/ChartConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba1dbcfcc0e01d4d30ca910d065af3ad1f2782f5
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/ChartConverter.java
@@ -0,0 +1,41 @@
+package de.deadlocker8.budgetmaster.database.model.v6.converter;
+
+import de.deadlocker8.budgetmaster.charts.Chart;
+import de.deadlocker8.budgetmaster.database.model.Converter;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupChart_v5;
+
+public class ChartConverter implements Converter<Chart, BackupChart_v5>
+{
+	public Chart convertToInternalForm(BackupChart_v5 backupChart)
+	{
+		if(backupChart == null)
+		{
+			return null;
+		}
+
+		final Chart chart = new Chart();
+		chart.setID(backupChart.getID());
+		chart.setName(backupChart.getName());
+		chart.setType(backupChart.getType());
+		chart.setVersion(backupChart.getVersion());
+		chart.setScript(backupChart.getScript());
+		return chart;
+	}
+
+	@Override
+	public BackupChart_v5 convertToExternalForm(Chart internalItem)
+	{
+		if(internalItem == null)
+		{
+			return null;
+		}
+
+		final BackupChart_v5 chart = new BackupChart_v5();
+		chart.setID(internalItem.getID());
+		chart.setName(internalItem.getName());
+		chart.setType(internalItem.getType());
+		chart.setVersion(internalItem.getVersion());
+		chart.setScript(internalItem.getScript());
+		return chart;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/ImageConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/ImageConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..78d5ba28fa088fa5f412d2decc21114770a4baee
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/ImageConverter.java
@@ -0,0 +1,39 @@
+package de.deadlocker8.budgetmaster.database.model.v6.converter;
+
+import de.deadlocker8.budgetmaster.database.model.Converter;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupImage_v5;
+import de.deadlocker8.budgetmaster.images.Image;
+
+public class ImageConverter implements Converter<Image, BackupImage_v5>
+{
+	public Image convertToInternalForm(BackupImage_v5 backupImage)
+	{
+		if(backupImage == null)
+		{
+			return null;
+		}
+
+		final Image image = new Image();
+		image.setID(backupImage.getID());
+		image.setFileName(backupImage.getFileName());
+		image.setFileExtension(backupImage.getFileExtension());
+		image.setImage(backupImage.getImage());
+		return image;
+	}
+
+	@Override
+	public BackupImage_v5 convertToExternalForm(Image internalItem)
+	{
+		if(internalItem == null)
+		{
+			return null;
+		}
+
+		final BackupImage_v5 image = new BackupImage_v5();
+		image.setID(internalItem.getID());
+		image.setFileName(internalItem.getFileName());
+		image.setFileExtension(internalItem.getFileExtension());
+		image.setImage(internalItem.getImage());
+		return image;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/TemplateConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/TemplateConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..1611f4ca871276fbddf12044caa1e2d11aab3b90
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/TemplateConverter.java
@@ -0,0 +1,113 @@
+package de.deadlocker8.budgetmaster.database.model.v6.converter;
+
+import de.deadlocker8.budgetmaster.accounts.Account;
+import de.deadlocker8.budgetmaster.categories.Category;
+import de.deadlocker8.budgetmaster.database.model.Converter;
+import de.deadlocker8.budgetmaster.database.model.v4.BackupTag_v4;
+import de.deadlocker8.budgetmaster.database.model.v5.converter.TagConverter_v5;
+import de.deadlocker8.budgetmaster.database.model.v6.BackupTemplate_v6;
+import de.deadlocker8.budgetmaster.images.Image;
+import de.deadlocker8.budgetmaster.tags.Tag;
+import de.deadlocker8.budgetmaster.templates.Template;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TemplateConverter implements Converter<Template, BackupTemplate_v6>
+{
+	private final List<Image> availableIcons;
+	private final List<Category> availableCategories;
+	private final List<Account> availableAccounts;
+
+	public TemplateConverter(List<Image> availableIcons, List<Category> availableCategories, List<Account> availableAccounts)
+	{
+		this.availableIcons = availableIcons;
+		this.availableCategories = availableCategories;
+		this.availableAccounts = availableAccounts;
+	}
+
+	public Template convertToInternalForm(BackupTemplate_v6 backupTemplate)
+	{
+		if(backupTemplate == null)
+		{
+			return null;
+		}
+
+		final Template template = new Template();
+		template.setAmount(backupTemplate.getAmount());
+		template.setName(backupTemplate.getName());
+		template.setCategory(getItemById(availableCategories, backupTemplate.getCategoryID()));
+		template.setDescription(backupTemplate.getDescription());
+
+		if(backupTemplate.getExpenditure() == null)
+		{
+			template.setIsExpenditure(true);
+		}
+		else
+		{
+			template.setIsExpenditure(backupTemplate.getExpenditure());
+		}
+
+		template.setAccount(getItemById(availableAccounts, backupTemplate.getAccountID()));
+		template.setTransferAccount(getItemById(availableAccounts, backupTemplate.getTransferAccountID()));
+
+		List<Tag> convertedTags = new ArrayList<>();
+		TagConverter_v5 tagConverter = new TagConverter_v5();
+		for(BackupTag_v4 tag : backupTemplate.getTags())
+		{
+			convertedTags.add(tagConverter.convertToInternalForm(tag));
+		}
+		template.setTags(convertedTags);
+
+		template.setTemplateName(backupTemplate.getTemplateName());
+		template.setIcon(getItemById(availableIcons, backupTemplate.getIconID()));
+		return template;
+	}
+
+	@Override
+	public BackupTemplate_v6 convertToExternalForm(Template internalItem)
+	{
+		if(internalItem == null)
+		{
+			return null;
+		}
+
+		final BackupTemplate_v6 template = new BackupTemplate_v6();
+		template.setAmount(internalItem.getAmount());
+		template.setName(internalItem.getName());
+
+		if(internalItem.getCategory() != null)
+		{
+			template.setCategoryID(internalItem.getCategory().getID());
+		}
+
+		template.setDescription(internalItem.getDescription());
+		template.setExpenditure(internalItem.getExpenditure());
+
+		if(internalItem.getAccount() != null)
+		{
+			template.setAccountID(internalItem.getAccount().getID());
+		}
+
+		if(internalItem.getTransferAccount() != null)
+		{
+			template.setTransferAccountID(internalItem.getTransferAccount().getID());
+		}
+
+		List<BackupTag_v4> convertedTags = new ArrayList<>();
+		TagConverter_v5 tagConverter = new TagConverter_v5();
+		for(Tag tag : internalItem.getTags())
+		{
+			convertedTags.add(tagConverter.convertToExternalForm(tag));
+		}
+		template.setTags(convertedTags);
+
+		template.setTemplateName(internalItem.getTemplateName());
+
+		if(internalItem.getIcon() != null)
+		{
+			template.setIconID(internalItem.getIcon().getID());
+		}
+		return template;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/TransactionConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/TransactionConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..19416cc06a6e483b960e0c678dd36edd11103f19
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v6/converter/TransactionConverter.java
@@ -0,0 +1,95 @@
+package de.deadlocker8.budgetmaster.database.model.v6.converter;
+
+import de.deadlocker8.budgetmaster.accounts.Account;
+import de.deadlocker8.budgetmaster.categories.Category;
+import de.deadlocker8.budgetmaster.database.model.Converter;
+import de.deadlocker8.budgetmaster.database.model.v4.BackupTag_v4;
+import de.deadlocker8.budgetmaster.database.model.v5.converter.RepeatingOptionConverter_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.converter.TagConverter_v5;
+import de.deadlocker8.budgetmaster.database.model.v6.BackupTransaction_v6;
+import de.deadlocker8.budgetmaster.tags.Tag;
+import de.deadlocker8.budgetmaster.transactions.Transaction;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TransactionConverter implements Converter<Transaction, BackupTransaction_v6>
+{
+	private final List<Category> availableCategories;
+	private final List<Account> availableAccounts;
+
+	public TransactionConverter(List<Category> availableCategories, List<Account> availableAccounts)
+	{
+		this.availableCategories = availableCategories;
+		this.availableAccounts = availableAccounts;
+	}
+
+	public Transaction convertToInternalForm(BackupTransaction_v6 backupTransaction)
+	{
+		if(backupTransaction == null)
+		{
+			return null;
+		}
+
+		final Transaction transaction = new Transaction();
+		transaction.setAmount(backupTransaction.getAmount());
+		transaction.setName(backupTransaction.getName());
+		transaction.setCategory(getItemById(availableCategories, backupTransaction.getCategoryID()));
+		transaction.setDescription(backupTransaction.getDescription());
+		transaction.setIsExpenditure(backupTransaction.getExpenditure());
+		transaction.setAccount(getItemById(availableAccounts, backupTransaction.getAccountID()));
+		transaction.setTransferAccount(getItemById(availableAccounts, backupTransaction.getTransferAccountID()));
+
+		DateTime date = DateTime.parse(backupTransaction.getDate(), DateTimeFormat.forPattern("yyyy-MM-dd"));
+		date = date.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0);
+		transaction.setDate(date);
+
+		List<Tag> convertedTags = new ArrayList<>();
+		TagConverter_v5 tagConverter = new TagConverter_v5();
+		for(BackupTag_v4 tag : backupTransaction.getTags())
+		{
+			convertedTags.add(tagConverter.convertToInternalForm(tag));
+		}
+		transaction.setTags(convertedTags);
+
+		transaction.setRepeatingOption(new RepeatingOptionConverter_v5().convertToInternalForm(backupTransaction.getRepeatingOption()));
+		return transaction;
+	}
+
+	@Override
+	public BackupTransaction_v6 convertToExternalForm(Transaction internalItem)
+	{
+		if(internalItem == null)
+		{
+			return null;
+		}
+
+		final BackupTransaction_v6 transaction = new BackupTransaction_v6();
+		transaction.setAmount(internalItem.getAmount());
+		transaction.setName(internalItem.getName());
+		transaction.setCategoryID(internalItem.getCategory().getID());
+		transaction.setDescription(internalItem.getDescription());
+		transaction.setExpenditure(internalItem.getExpenditure());
+		transaction.setAccountID(internalItem.getAccount().getID());
+
+		if(internalItem.getTransferAccount() != null)
+		{
+			transaction.setTransferAccountID(internalItem.getTransferAccount().getID());
+		}
+
+		transaction.setDate(internalItem.getDate().toString(DateTimeFormat.forPattern("yyyy-MM-dd")));
+
+		List<BackupTag_v4> convertedTags = new ArrayList<>();
+		TagConverter_v5 tagConverter = new TagConverter_v5();
+		for(Tag tag : internalItem.getTags())
+		{
+			convertedTags.add(tagConverter.convertToExternalForm(tag));
+		}
+		transaction.setTags(convertedTags);
+
+		transaction.setRepeatingOption(new RepeatingOptionConverter_v5().convertToExternalForm(internalItem.getRepeatingOption()));
+		return transaction;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/images/Image.java b/src/main/java/de/deadlocker8/budgetmaster/images/Image.java
index fdcdc2739b3c0e878af4b22a3c7ad42979ed9b35..5dfce63bdc876d0f37fbfd8ba4d577839fef0d06 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/images/Image.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/images/Image.java
@@ -2,6 +2,7 @@ package de.deadlocker8.budgetmaster.images;
 
 import com.google.gson.annotations.Expose;
 import de.deadlocker8.budgetmaster.accounts.Account;
+import de.deadlocker8.budgetmaster.utils.ProvidesID;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.tomcat.util.codec.binary.Base64;
 
@@ -12,7 +13,7 @@ import java.util.List;
 import java.util.Objects;
 
 @Entity
-public class Image
+public class Image implements ProvidesID
 {
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/ProvidesID.java b/src/main/java/de/deadlocker8/budgetmaster/utils/ProvidesID.java
new file mode 100644
index 0000000000000000000000000000000000000000..783961088ae17a25321a68fbc4b99717609d88ab
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/utils/ProvidesID.java
@@ -0,0 +1,6 @@
+package de.deadlocker8.budgetmaster.utils;
+
+public interface ProvidesID
+{
+	Integer getID();
+}