diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/importer/AccountImporter.java b/src/main/java/de/deadlocker8/budgetmaster/database/importer/AccountImporter.java
index 6ce884c99d5e4bc4cec40103f1dcd1384a6aefae..6d916131c22f74b9e62cb7da7eb4e4180a9a99b9 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/importer/AccountImporter.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/importer/AccountImporter.java
@@ -41,25 +41,13 @@ public class AccountImporter extends ItemImporter<Account>
 
 			try
 			{
-				final Account sourceAccount = accountsToUpdate.stream()
-						.filter(account -> account.getID().equals(accountMatch.getAccountSource().getID()))
-						.findFirst()
-						.orElseThrow();
-
+				final Account sourceAccount = getSourceAccountForMatch(accountsToUpdate, accountMatch);
 				final Account destinationAccount = repository.findById(accountMatch.getAccountDestination().getID()).orElseThrow();
 
 				final Icon sourceIcon = sourceAccount.getIconReference();
 				if(sourceIcon != null)
 				{
-					LOGGER.debug("Overwriting destination account icon");
-
-					// explicitly delete old icon to avoid remaining references
-					final Icon existingIcon = destinationAccount.getIconReference();
-					destinationAccount.setIconReference(null);
-					iconRepository.delete(existingIcon);
-
-					destinationAccount.setIconReference(sourceIcon);
-					repository.save(destinationAccount);
+					overwriteIcon(destinationAccount, sourceIcon);
 				}
 
 				accountsToUpdate.remove(sourceAccount);
@@ -78,6 +66,27 @@ public class AccountImporter extends ItemImporter<Account>
 		return new ImportResultItem(entityType, numberOfImportedItems, accountMatchList.getAccountMatches().size(), collectedErrorMessages);
 	}
 
+	private void overwriteIcon(Account destinationAccount, Icon sourceIcon)
+	{
+		LOGGER.debug("Overwriting destination account icon");
+
+		// explicitly delete old icon to avoid remaining references
+		final Icon existingIcon = destinationAccount.getIconReference();
+		destinationAccount.setIconReference(null);
+		iconRepository.delete(existingIcon);
+
+		destinationAccount.setIconReference(sourceIcon);
+		repository.save(destinationAccount);
+	}
+
+	private Account getSourceAccountForMatch(List<Account> accountsToUpdate, AccountMatch accountMatch)
+	{
+		return accountsToUpdate.stream()
+				.filter(account -> account.getID().equals(accountMatch.getAccountSource().getID()))
+				.findFirst()
+				.orElseThrow();
+	}
+
 	@Override
 	protected int importSingleItem(Account account)
 	{
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/importer/CategoryImporter.java b/src/main/java/de/deadlocker8/budgetmaster/database/importer/CategoryImporter.java
index 1b7d427705a9716386f2aebb1ea051d6e893d7a2..8af21fbb9f2009596cfd1f22baa4aeb22ebcd8ba 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/importer/CategoryImporter.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/importer/CategoryImporter.java
@@ -8,6 +8,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.text.MessageFormat;
+import java.util.Optional;
 
 public class CategoryImporter extends ItemImporter<Category>
 {
@@ -19,45 +20,55 @@ public class CategoryImporter extends ItemImporter<Category>
 	}
 
 	@Override
-	protected int importSingleItem(Category category)
+	protected int importSingleItem(Category categoryToImport)
 	{
 		if(!(repository instanceof CategoryRepository repository))
 		{
 			throw new IllegalArgumentException("Invalid repository type");
 		}
 
-		LOGGER.debug(MessageFormat.format("Importing category {0}", category.getName()));
+		LOGGER.debug(MessageFormat.format("Importing category {0}", categoryToImport.getName()));
 
-		Category existingCategory;
-		if(category.getType().equals(CategoryType.NONE) || category.getType().equals(CategoryType.REST))
+		final Optional<Category> existingCategoryOptional = findExistingCategory(categoryToImport, repository);
+
+		int newCategoryID;
+		if(existingCategoryOptional.isEmpty())
 		{
-			existingCategory = repository.findByType(category.getType());
+			// category does not exist --> create it
+			final Category newCategory = createCategory(categoryToImport, repository);
+			newCategoryID = newCategory.getID();
 		}
 		else
 		{
-			existingCategory = repository.findByNameAndColorAndType(category.getName(), category.getColor(), category.getType());
+			// category already exists
+			final Category existingCategory = existingCategoryOptional.get();
+			newCategoryID = existingCategory.getID();
+			categoryToImport.setIconReference(existingCategory.getIconReference());
+			LOGGER.debug(MessageFormat.format("Found matching category with ID: {0} for category \"{1}\".", newCategoryID, categoryToImport.getName()));
 		}
+		return newCategoryID;
+	}
 
-		int newCategoryID;
-		if(existingCategory == null)
+	private Optional<Category> findExistingCategory(Category categoryToImport, CategoryRepository repository)
+	{
+		if(categoryToImport.getType().equals(CategoryType.NONE) || categoryToImport.getType().equals(CategoryType.REST))
 		{
-			//category does not exist --> create it
-			LOGGER.debug(MessageFormat.format("No matching category found for category \"{0}\". Creating new one...", category.getName()));
-
-			Category categoryToCreate = new Category(category.getName(), category.getColor(), category.getType(), category.getIconReference());
-			repository.save(categoryToCreate);
-
-			Category newCategory = repository.findByNameAndColorAndType(category.getName(), category.getColor(), category.getType());
-			newCategoryID = newCategory.getID();
+			return Optional.of(repository.findByType(categoryToImport.getType()));
 		}
 		else
 		{
-			//category already exists
-			newCategoryID = existingCategory.getID();
-			category.setIconReference(existingCategory.getIconReference());
-			LOGGER.debug(MessageFormat.format("Found matching category with ID: {0} for category \"{1}\".", newCategoryID, category.getName()));
+			return Optional.ofNullable(repository.findByNameAndColorAndType(categoryToImport.getName(), categoryToImport.getColor(), categoryToImport.getType()));
 		}
-		return newCategoryID;
+	}
+
+	private Category createCategory(Category categoryToImport, CategoryRepository repository)
+	{
+		LOGGER.debug(MessageFormat.format("No matching category found for category \"{0}\". Creating new one...", categoryToImport.getName()));
+
+		final Category categoryToCreate = new Category(categoryToImport.getName(), categoryToImport.getColor(), categoryToImport.getType(), categoryToImport.getIconReference());
+		repository.save(categoryToCreate);
+
+		return repository.findByNameAndColorAndType(categoryToImport.getName(), categoryToImport.getColor(), categoryToImport.getType());
 	}
 
 	@Override
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/importer/ImageImporter.java b/src/main/java/de/deadlocker8/budgetmaster/database/importer/ImageImporter.java
index fed8cc14f90e4794b2deda71a6db4660ba8334e8..7a5f4c6c2621b054d7c8cbda04d59a45e7aa67b9 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/importer/ImageImporter.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/importer/ImageImporter.java
@@ -19,7 +19,7 @@ public class ImageImporter extends ItemImporter<Image>
 			throw new IllegalArgumentException("Invalid repository type");
 		}
 
-		Image imageToCreate = new Image(image.getImage(), image.getFileName(), image.getFileExtension());
+		final Image imageToCreate = new Image(image.getImage(), image.getFileName(), image.getFileExtension());
 
 		final Image savedImage = repository.save(imageToCreate);
 		return savedImage.getID();
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/importer/TemplateGroupImporter.java b/src/main/java/de/deadlocker8/budgetmaster/database/importer/TemplateGroupImporter.java
index b5de025e0ece794fe0dd7c1297dfdea908fe5666..3cd321f888dee1e5f80402ca61d413c57b785b51 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/importer/TemplateGroupImporter.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/importer/TemplateGroupImporter.java
@@ -5,6 +5,8 @@ import de.deadlocker8.budgetmaster.templategroup.TemplateGroup;
 import de.deadlocker8.budgetmaster.templategroup.TemplateGroupRepository;
 import de.deadlocker8.budgetmaster.templategroup.TemplateGroupType;
 
+import java.util.Optional;
+
 public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
 {
 	public TemplateGroupImporter(TemplateGroupRepository templateGroupRepository)
@@ -20,17 +22,8 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
 			throw new IllegalArgumentException("Invalid repository type");
 		}
 
-		TemplateGroup existingTemplateGroup;
-		if(templateGroup.getType().equals(TemplateGroupType.DEFAULT))
-		{
-			existingTemplateGroup = repository.findFirstByType(TemplateGroupType.DEFAULT);
-		}
-		else
-		{
-			existingTemplateGroup = repository.findByNameAndType(templateGroup.getName(), templateGroup.getType());
-		}
-
-		if(existingTemplateGroup == null)
+		final Optional<TemplateGroup> existingTemplateGroupOptional = findExistingTemplateGroup(templateGroup, repository);
+		if(existingTemplateGroupOptional.isEmpty())
 		{
 			// template group does not exist --> create it
 			TemplateGroup templateGroupToCreate = new TemplateGroup(templateGroup.getName(), templateGroup.getType());
@@ -41,10 +34,23 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
 		else
 		{
 			// template group already exists
+			final TemplateGroup existingTemplateGroup = existingTemplateGroupOptional.get();
 			return existingTemplateGroup.getID();
 		}
 	}
 
+	private Optional<TemplateGroup> findExistingTemplateGroup(TemplateGroup templateGroup, TemplateGroupRepository repository)
+	{
+		if(templateGroup.getType().equals(TemplateGroupType.DEFAULT))
+		{
+			return Optional.of(repository.findFirstByType(TemplateGroupType.DEFAULT));
+		}
+		else
+		{
+			return Optional.ofNullable(repository.findByNameAndType(templateGroup.getName(), templateGroup.getType()));
+		}
+	}
+
 	@Override
 	protected String getNameForItem(TemplateGroup item)
 	{