diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
index 80f6c1b21d99799f090f901874c63c498bff1c79..481578d01f742a0aa31779cf2c502dc7364d36c2 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
@@ -61,9 +61,11 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces
 import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
 import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
 import org.springframework.batch.core.launch.support.RunIdIncrementer;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import javax.persistence.EntityManager;
 import javax.sql.DataSource;
 
 @Configuration
@@ -75,6 +77,8 @@ public class BatchConfiguration
 	final JobBuilderFactory jobBuilderFactory;
 	final StepBuilderFactory stepBuilderFactory;
 
+	final EntityManager entityManager;
+
 	final DataSource primaryDataSource;
 
 	final DestinationImageRepository destinationImageRepository;
@@ -112,10 +116,11 @@ public class BatchConfiguration
 	final DestinationTemplateGroupRepository destinationTemplateGroupRepository;
 
 	@SuppressWarnings("squid:S107")
-	public BatchConfiguration(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, DataSource primaryDataSource, DestinationImageRepository destinationImageRepository, DestinationIconRepository destinationIconRepository, DestinationCategoryRepository destinationCategoryRepository, DestinationAccountRepository destinationAccountRepository, DestinationChartRepository destinationChartRepository, DestinationHintRepository destinationHintRepository, DestinationRepeatingEndRepository destinationRepeatingEndRepository, DestinationRepeatingEndAfterXTimesRepository destinationRepeatingEndAfterXTimesRepository, DestinationRepeatingEndDateRepository destinationRepeatingEndDateRepository, DestinationRepeatingEndNeverRepository destinationRepeatingEndNeverRepository, DestinationRepeatingModifierRepository destinationRepeatingModifierRepository, DestinationRepeatingModifierDaysRepository destinationRepeatingModifierDaysRepository, DestinationRepeatingModifierMonthsRepository destinationRepeatingModifierMonthsRepository, DestinationRepeatingModifierYearsRepository destinationRepeatingModifierYearsRepository, DestinationRepeatingOptionRepository destinationRepeatingOptionRepository, DestinationReportColumnRepository destinationReportColumnRepository, DestinationReportSettingsRepository destinationReportSettingsRepository, DestinationSettingsRepository destinationSettingsRepository, DestinationTagRepository destinationTagRepository, DestinationTemplateTagRepository destinationTemplateTagRepository, DestinationTransactionTagRepository destinationTransactionTagRepository, DestinationUserRepository destinationUserRepository, DestinationTransactionRepository destinationTransactionRepository, DestinationTemplateRepository destinationTemplateRepository, DestinationTemplateGroupRepository destinationTemplateGroupRepository)
+	public BatchConfiguration(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, EntityManager entityManager, DataSource primaryDataSource, DestinationImageRepository destinationImageRepository, DestinationIconRepository destinationIconRepository, DestinationCategoryRepository destinationCategoryRepository, DestinationAccountRepository destinationAccountRepository, DestinationChartRepository destinationChartRepository, DestinationHintRepository destinationHintRepository, DestinationRepeatingEndRepository destinationRepeatingEndRepository, DestinationRepeatingEndAfterXTimesRepository destinationRepeatingEndAfterXTimesRepository, DestinationRepeatingEndDateRepository destinationRepeatingEndDateRepository, DestinationRepeatingEndNeverRepository destinationRepeatingEndNeverRepository, DestinationRepeatingModifierRepository destinationRepeatingModifierRepository, DestinationRepeatingModifierDaysRepository destinationRepeatingModifierDaysRepository, DestinationRepeatingModifierMonthsRepository destinationRepeatingModifierMonthsRepository, DestinationRepeatingModifierYearsRepository destinationRepeatingModifierYearsRepository, DestinationRepeatingOptionRepository destinationRepeatingOptionRepository, DestinationReportColumnRepository destinationReportColumnRepository, DestinationReportSettingsRepository destinationReportSettingsRepository, DestinationSettingsRepository destinationSettingsRepository, DestinationTagRepository destinationTagRepository, DestinationTemplateTagRepository destinationTemplateTagRepository, DestinationTransactionTagRepository destinationTransactionTagRepository, DestinationUserRepository destinationUserRepository, DestinationTransactionRepository destinationTransactionRepository, DestinationTemplateRepository destinationTemplateRepository, DestinationTemplateGroupRepository destinationTemplateGroupRepository)
 	{
 		this.jobBuilderFactory = jobBuilderFactory;
 		this.stepBuilderFactory = stepBuilderFactory;
+		this.entityManager = entityManager;
 		this.primaryDataSource = primaryDataSource;
 
 		this.destinationImageRepository = destinationImageRepository;
@@ -266,7 +271,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationImageRepository))
 				.listener(new GenericChunkListener(TableNames.IMAGE))
-				.listener(new GenericStepListener(TableNames.IMAGE))
+				.listener(new GenericStepListener(TableNames.IMAGE, entityManager, destinationImageRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -280,7 +285,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationIconRepository))
 				.listener(new GenericChunkListener(TableNames.ICON))
-				.listener(new GenericStepListener(TableNames.ICON))
+				.listener(new GenericStepListener(TableNames.ICON, entityManager, destinationIconRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -294,7 +299,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationCategoryRepository))
 				.listener(new GenericChunkListener(TableNames.CATEGORY))
-				.listener(new GenericStepListener(TableNames.CATEGORY))
+				.listener(new GenericStepListener(TableNames.CATEGORY, entityManager, destinationCategoryRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -308,7 +313,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationAccountRepository))
 				.listener(new GenericChunkListener(TableNames.ACCOUNT))
-				.listener(new GenericStepListener(TableNames.ACCOUNT))
+				.listener(new GenericStepListener(TableNames.ACCOUNT, entityManager, destinationAccountRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -322,7 +327,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationChartRepository))
 				.listener(new GenericChunkListener(TableNames.CHART))
-				.listener(new GenericStepListener(TableNames.CHART))
+				.listener(new GenericStepListener(TableNames.CHART, entityManager, destinationChartRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -336,7 +341,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationHintRepository))
 				.listener(new GenericChunkListener(TableNames.HINT))
-				.listener(new GenericStepListener(TableNames.HINT))
+				.listener(new GenericStepListener(TableNames.HINT, entityManager, destinationHintRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -350,7 +355,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END))
-				.listener(new GenericStepListener(TableNames.REPEATING_END))
+				.listener(new GenericStepListener(TableNames.REPEATING_END, entityManager, destinationRepeatingEndRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -364,7 +369,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndAfterXTimesRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END_AFTER_X_TIMES))
-				.listener(new GenericStepListener(TableNames.REPEATING_END_AFTER_X_TIMES))
+				.listener(new GenericStepListener(TableNames.REPEATING_END_AFTER_X_TIMES, entityManager, destinationRepeatingEndAfterXTimesRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -378,7 +383,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndDateRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END_DATE))
-				.listener(new GenericStepListener(TableNames.REPEATING_END_DATE))
+				.listener(new GenericStepListener(TableNames.REPEATING_END_DATE, entityManager, destinationRepeatingEndDateRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -392,7 +397,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndNeverRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END_NEVER))
-				.listener(new GenericStepListener(TableNames.REPEATING_END_NEVER))
+				.listener(new GenericStepListener(TableNames.REPEATING_END_NEVER, entityManager, destinationRepeatingEndNeverRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -406,7 +411,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER))
-				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER))
+				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER, entityManager, destinationRepeatingModifierRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -420,7 +425,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierDaysRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER_DAYS))
-				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER_DAYS))
+				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER_DAYS, entityManager, destinationRepeatingModifierDaysRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -434,7 +439,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierMonthsRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER_MONTHS))
-				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER_MONTHS))
+				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER_MONTHS, entityManager, destinationRepeatingModifierMonthsRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -448,7 +453,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierYearsRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER_YEARS))
-				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER_YEARS))
+				.listener(new GenericStepListener(TableNames.REPEATING_MODIFIER_YEARS, entityManager, destinationRepeatingModifierYearsRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -462,7 +467,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingOptionRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_OPTION))
-				.listener(new GenericStepListener(TableNames.REPEATING_OPTION))
+				.listener(new GenericStepListener(TableNames.REPEATING_OPTION, entityManager, destinationRepeatingOptionRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -476,7 +481,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationReportColumnRepository))
 				.listener(new GenericChunkListener(TableNames.REPORT_COLUMN))
-				.listener(new GenericStepListener(TableNames.REPORT_COLUMN))
+				.listener(new GenericStepListener(TableNames.REPORT_COLUMN, entityManager, destinationReportColumnRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -490,7 +495,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationReportSettingsRepository))
 				.listener(new GenericChunkListener(TableNames.REPORT_SETTINGS))
-				.listener(new GenericStepListener(TableNames.REPORT_SETTINGS))
+				.listener(new GenericStepListener(TableNames.REPORT_SETTINGS, entityManager, destinationReportSettingsRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -504,7 +509,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationSettingsRepository))
 				.listener(new GenericChunkListener(TableNames.SETTINGS))
-				.listener(new GenericStepListener(TableNames.SETTINGS))
+				.listener(new GenericStepListener(TableNames.SETTINGS, entityManager, destinationSettingsRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -518,7 +523,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTagRepository))
 				.listener(new GenericChunkListener(TableNames.TAG))
-				.listener(new GenericStepListener(TableNames.TAG))
+				.listener(new GenericStepListener(TableNames.TAG, entityManager, destinationTagRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -532,7 +537,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTemplateTagRepository))
 				.listener(new GenericChunkListener(TableNames.TEMPLATE_TAGS))
-				.listener(new GenericStepListener(TableNames.TEMPLATE_TAGS))
+				.listener(new GenericStepListener(TableNames.TEMPLATE_TAGS, entityManager, destinationTemplateTagRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -546,7 +551,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTransactionTagRepository))
 				.listener(new GenericChunkListener(TableNames.TRANSACTION_TAGS))
-				.listener(new GenericStepListener(TableNames.TRANSACTION_TAGS))
+				.listener(new GenericStepListener(TableNames.TRANSACTION_TAGS, entityManager, destinationTransactionTagRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -560,7 +565,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationUserRepository))
 				.listener(new GenericChunkListener(TableNames.USER_SOURCE))
-				.listener(new GenericStepListener(TableNames.USER_SOURCE))
+				.listener(new GenericStepListener(TableNames.USER_SOURCE, entityManager, destinationUserRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -574,7 +579,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTransactionRepository))
 				.listener(new GenericChunkListener(TableNames.TRANSACTION))
-				.listener(new GenericStepListener(TableNames.TRANSACTION))
+				.listener(new GenericStepListener(TableNames.TRANSACTION, entityManager, destinationTransactionRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -588,7 +593,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTemplateRepository))
 				.listener(new GenericChunkListener(TableNames.TEMPLATE))
-				.listener(new GenericStepListener(TableNames.TEMPLATE))
+				.listener(new GenericStepListener(TableNames.TEMPLATE, entityManager, destinationTemplateRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -602,7 +607,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTemplateGroupRepository))
 				.listener(new GenericChunkListener(TableNames.TEMPLATE_GROUP))
-				.listener(new GenericStepListener(TableNames.TEMPLATE_GROUP))
+				.listener(new GenericStepListener(TableNames.TEMPLATE_GROUP, entityManager, destinationTemplateGroupRepository))
 				.allowStartIfComplete(true)
 				.build();
 	}
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/DestinationRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/DestinationRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..d596a48657198bc884239f3bff38af14145b3b7e
--- /dev/null
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/DestinationRepository.java
@@ -0,0 +1,12 @@
+package de.deadlocker8.budgetmaster.databasemigrator.destination;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+
+import java.util.List;
+
+@NoRepositoryBean
+public interface DestinationRepository<T> extends JpaRepository<T, Integer>
+{
+	List<T> findAllByOrderByIDDesc();
+}
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/ProvidesID.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/ProvidesID.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a4d9a1dd0e5c529b14ce789b63b9e0409cce3c8
--- /dev/null
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/ProvidesID.java
@@ -0,0 +1,8 @@
+package de.deadlocker8.budgetmaster.databasemigrator.destination;
+
+public interface ProvidesID
+{
+	Integer getID();
+
+	void setID(Integer ID);
+}
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java
index 61fac3f64ab87a681f7f9276896d62e3a39a576b..f11acc22be2121bdf2eaef3fec6dd94d8611a915 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.account;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,10 +18,9 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationAccount
+public class DestinationAccount implements ProvidesID
 {
 	@Id
-
 	private Integer ID;
 
 	@Column(unique = true)
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccountRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccountRepository.java
index d5d730179284c60d5f4b7f9b634291128653a76b..46c498e0b1ff03720093eee80ea3537fcafebc62 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccountRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccountRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.account;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationAccountRepository extends JpaRepository<DestinationAccount, Integer>
+public interface DestinationAccountRepository extends DestinationRepository<DestinationAccount>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java
index b2b43510c2baec799543d0727e7068381d59743d..c5dcc73d5fb65b55f334414957922bb4399ddffd 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.category;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,10 +18,9 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationCategory
+public class DestinationCategory implements ProvidesID
 {
 	@Id
-
 	private Integer ID;
 
 	private String name;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategoryRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategoryRepository.java
index 378d2b28feddddf51489d9d056e97161b1a42eae..01963b61cef5c7697785b3e48339a82452e2af31 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategoryRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategoryRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.category;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationCategoryRepository extends JpaRepository<DestinationCategory, Integer>
+public interface DestinationCategoryRepository extends DestinationRepository<DestinationCategory>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java
index 944427a6ad4f50edf82dd44a68dbf981ef4ab0ee..b1bd4f51c4ea459b0c5f2237af0b55b2dbac373a 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.chart;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,7 +18,7 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationChart
+public class DestinationChart implements ProvidesID
 {
 	@Id
 	private Integer ID;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChartRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChartRepository.java
index e83c98f28d0622a45e2ac245dbf7b453597cb651..8e6fbc068aff8bc109c94f330e85f6d9bc0d0d35 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChartRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChartRepository.java
@@ -1,7 +1,8 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.chart;
 
-import org.springframework.data.jpa.repository.JpaRepository;
 
-public interface DestinationChartRepository extends JpaRepository<DestinationChart, Integer>
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
+
+public interface DestinationChartRepository extends DestinationRepository<DestinationChart>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java
index 2b7597863973fd0304797ed68a6a61a8f9cee47d..b21a01f4d5422f93902ea6b69cdd9a57e58d38d2 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.hint;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,11 +18,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationHint
+public class DestinationHint implements ProvidesID
 {
 	@Id
-
-	private int ID;
+	private Integer ID;
 
 	@Column(name = "localization_key")
 	private String localizationKey;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHintRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHintRepository.java
index 287ef557557f9fb57aa6ebb0ff316a48776f5356..ca1e3506660237ca0148f1333ea7c2b1d0d1678a 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHintRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHintRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.hint;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationHintRepository extends JpaRepository<DestinationHint, Integer>
+public interface DestinationHintRepository extends DestinationRepository<DestinationHint>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java
index 7f0eafda64318464efe4484e716d3e55f575ce41..a583b68c32ceefd1dea574bff1a296b3746c6955 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java
@@ -1,5 +1,6 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.icon;
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,10 +17,9 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationIcon
+public class DestinationIcon implements ProvidesID
 {
 	@Id
-
 	private Integer ID;
 
 	@Column(name = "image_id")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIconRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIconRepository.java
index 95db0015463b71d397626aa9ba71978c710be409..e74ad50d62b6836a2d5c92258b58df5ddd9174a3 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIconRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIconRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.icon;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationIconRepository extends JpaRepository<DestinationIcon, Integer>
+public interface DestinationIconRepository extends DestinationRepository<DestinationIcon>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java
index 70eb14e3f7fcdc036beb9f2d4bcecbb94d87f027..9794f25b022f963ba8f93de7b034d0c9ccd86e3b 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java
@@ -1,5 +1,6 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.image;
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -13,7 +14,7 @@ import javax.persistence.*;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationImage
+public class DestinationImage implements ProvidesID
 {
 	@Id
 	private Integer ID;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImageRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImageRepository.java
index 0d8835ab2565d2fa3ee4750de69e2d90dbb62156..f70ffd68da79e8fd2a155a3db7537180de85a693 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImageRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImageRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.image;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationImageRepository extends JpaRepository<DestinationImage, Integer>
+public interface DestinationImageRepository extends DestinationRepository<DestinationImage>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java
index 3fdf7ec655125e1ef603cdb8918725e8adc0a3d5..1f1d1d40d04ed3308250672690183a0325e6a96f 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -18,7 +19,7 @@ import java.time.LocalDate;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingOption
+public class DestinationRepeatingOption implements ProvidesID
 {
 	@Id
 	private Integer ID;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOptionRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOptionRepository.java
index 918d027d309fe6300edda6e2e1ef3f8a498db527..b50e61114d86b707af68891146d1d76c47b410dd 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOptionRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOptionRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingOptionRepository extends JpaRepository<DestinationRepeatingOption, Integer>
+public interface DestinationRepeatingOptionRepository extends DestinationRepository<DestinationRepeatingOption>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java
index 4fd05a4d9987e974c9a78ce6fb41b4a31499a750..c61580dab4aa48a1c4c1fd6c1f901edd59906856 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,7 +18,7 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingEnd
+public class DestinationRepeatingEnd implements ProvidesID
 {
 	@Id
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java
index 3497e366101b401a1166b232023767d94a6ab885..ec2e912f67f0b5cbc67417828ba3a4a6f16a2964 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,7 +17,7 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingEndAfterXTimes
+public class DestinationRepeatingEndAfterXTimes implements ProvidesID
 {
 	@Id
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimesRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimesRepository.java
index 842105548e36bcaea1c37770822e185add0987bb..68a6fb459d5226ff51fbf46c469382befe9e4d55 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimesRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimesRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingEndAfterXTimesRepository extends JpaRepository<DestinationRepeatingEndAfterXTimes, Integer>
+public interface DestinationRepeatingEndAfterXTimesRepository extends DestinationRepository<DestinationRepeatingEndAfterXTimes>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java
index efe4b2e6beabe9ef8db9c258b4cc7f93ae35966a..c3945ae83d86cdb3857c35400aafcd013541787b 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -18,7 +19,7 @@ import java.time.LocalDate;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingEndDate
+public class DestinationRepeatingEndDate implements ProvidesID
 {
 	@Id
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDateRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDateRepository.java
index 0397e0d2b2e7128dd6a1e3340a095e841a35b276..c056605c1330e0ebe52168bb2c0ef7be908edbec 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDateRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDateRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingEndDateRepository extends JpaRepository<DestinationRepeatingEndDate, Integer>
+public interface DestinationRepeatingEndDateRepository extends DestinationRepository<DestinationRepeatingEndDate>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java
index 54b2c40e4bb59877e1de53ba81b9d826047681d9..e76c89238624d4cb489a526eceea572c76e53e70 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,7 +17,7 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingEndNever
+public class DestinationRepeatingEndNever implements ProvidesID
 {
 	@Id
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNeverRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNeverRepository.java
index 2f1b5f5c38a68de5e2b73bb37af8d46dcd5dafd1..c39b24f5bba56e4fc92ce968747ca905056cab2a 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNeverRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNeverRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingEndNeverRepository extends JpaRepository<DestinationRepeatingEndNever, Integer>
+public interface DestinationRepeatingEndNeverRepository extends DestinationRepository<DestinationRepeatingEndNever>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndRepository.java
index cdd307709d978cffa1623e8ee1fd67b9fc62ca6c..482d78022db1ba47d8a468c243a3c002b5009371 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingEndRepository extends JpaRepository<DestinationRepeatingEnd, Integer>
+public interface DestinationRepeatingEndRepository extends DestinationRepository<DestinationRepeatingEnd>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java
index 1b206fce51ef4c6515a06286fcbe09f687144b6d..3e6dcca0eb6c56afb29df7e2aacd2841fa5a26b7 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,10 +18,9 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingModifier
+public class DestinationRepeatingModifier implements ProvidesID
 {
 	@Id
-
 	private Integer ID;
 
 	@Column(name = "localization_key")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java
index f3fa0e5fc8c7d4b759702fc96eaef900b276a090..1a9486ada27a30373e2cb41fa3df61be2764ec86 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,9 +17,8 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingModifierDays
+public class DestinationRepeatingModifierDays implements ProvidesID
 {
 	@Id
-
 	private Integer ID;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDaysRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDaysRepository.java
index 7a9e0f83abf122d14c810182946d9bf60ff56a46..3f0a0a6218d59cc89f94fd855540a68a056d0218 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDaysRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDaysRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingModifierDaysRepository extends JpaRepository<DestinationRepeatingModifierDays, Integer>
+public interface DestinationRepeatingModifierDaysRepository extends DestinationRepository<DestinationRepeatingModifierDays>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java
index 2b1321b6bfb0be3f6d1dc9928a750bcab62ee3fb..5c974fa8f81c7a0177908717116ca7e67803c7da 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,9 +17,8 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingModifierMonths
+public class DestinationRepeatingModifierMonths implements ProvidesID
 {
 	@Id
-
 	private Integer ID;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonthsRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonthsRepository.java
index e396513e6089b8140f1ee0d3420e5b01b394465b..c9c957f166614b635b0bc0a7dcb92802694635ec 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonthsRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonthsRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingModifierMonthsRepository extends JpaRepository<DestinationRepeatingModifierMonths, Integer>
+public interface DestinationRepeatingModifierMonthsRepository extends DestinationRepository<DestinationRepeatingModifierMonths>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierRepository.java
index eef52665e43daef64bfd3fbbb6874bcaee850a4b..f6318d1e29d89a8511c2661fc1f0d154d7be8c86 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingModifierRepository extends JpaRepository<DestinationRepeatingModifier, Integer>
+public interface DestinationRepeatingModifierRepository extends DestinationRepository<DestinationRepeatingModifier>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java
index 934a3bfb50f24e99b9d9fa08f4a197a21145ccd9..2e518802106eb235a1ad050ab775a8ab771b4d3d 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,9 +17,8 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationRepeatingModifierYears
+public class DestinationRepeatingModifierYears implements ProvidesID
 {
 	@Id
-
 	private Integer ID;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYearsRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYearsRepository.java
index 29e7596f14a724dbb14c3bff72376bfe4c040062..d6019bba68512d2747ff96699896e633f5d544ad 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYearsRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYearsRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationRepeatingModifierYearsRepository extends JpaRepository<DestinationRepeatingModifierYears, Integer>
+public interface DestinationRepeatingModifierYearsRepository extends DestinationRepository<DestinationRepeatingModifierYears>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java
index 6ded44721ead9a05e5768ce0013ee9d7dee66d66..4149e7f191005a427eb06c712d3f43d7bec9a9c5 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.report;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,10 +18,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationReportColumn
+public class DestinationReportColumn implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	private boolean activated;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumnRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumnRepository.java
index de796689948517d8337a664d6c5e3742fd8115e4..daf4b76c5c944df9c48befaa38964197c536cebe 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumnRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumnRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.report;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationReportColumnRepository extends JpaRepository<DestinationReportColumn, Integer>
+public interface DestinationReportColumnRepository extends DestinationRepository<DestinationReportColumn>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java
index e06ac4c6326eb1fcef5ba1da8c13348f6be677f9..60917215770cf8f3b7c1535cf04c1c340d1d4446 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.report;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -18,10 +19,10 @@ import java.time.LocalDate;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationReportSettings
+public class DestinationReportSettings implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	private LocalDate date;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettingsRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettingsRepository.java
index 668b603b8ea2b3259d848f794240b50a97e9a44d..f7bc7a176d4af579f28b27949f14bcbfa294e20c 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettingsRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettingsRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.report;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationReportSettingsRepository extends JpaRepository<DestinationReportSettings, Integer>
+public interface DestinationReportSettingsRepository extends DestinationRepository<DestinationReportSettings>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java
index eabc7ae7956cb71dab21f823d82359bf9d87980c..ca256f96cab7813803eec4a0801da3ffde164fdf 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.settings;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -18,10 +19,10 @@ import java.time.LocalDate;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationSettings
+public class DestinationSettings implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	private String currency;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettingsRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettingsRepository.java
index dd08ae9d22e187d83299760b663bdc125681f0ba..1d2d32ec443d3bc5d522add5676919da8405487a 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettingsRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettingsRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.settings;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationSettingsRepository extends JpaRepository<DestinationSettings, Integer>
+public interface DestinationSettingsRepository extends DestinationRepository<DestinationSettings>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java
index fe74791b5a9f9deede429a4dee49e73feab3d21c..fb757f6948a4a1e20e6e3106d709d9e0f3df7ed9 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,11 +17,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationTag
+public class DestinationTag implements ProvidesID
 {
 	@Id
-
-	private int ID;
+	private Integer ID;
 
 	private String name;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTagRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTagRepository.java
index b6de84436938b1753b1769637fa458297093023f..4fafa724e0e85684850771908a120e9d6cbddf70 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTagRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTagRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationTagRepository extends JpaRepository<DestinationTag, Integer>
+public interface DestinationTagRepository extends DestinationRepository<DestinationTag>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java
index 24711155ee045c7c13710a6102b6d3984d9bb6f0..e328392e69590234bd7d740bd52a5c97511deaca 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,10 +18,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationTemplateTag
+public class DestinationTemplateTag implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	@Column(name = "template_id")
 	private int templateID;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTagRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTagRepository.java
index 4631ff716fca763d1ea33cdd0a56e154f17b6919..007b81ccd543b8188b91ed9aa655b305994bff6a 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTagRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTagRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationTemplateTagRepository extends JpaRepository<DestinationTemplateTag, Integer>
+public interface DestinationTemplateTagRepository extends DestinationRepository<DestinationTemplateTag>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java
index 73e2e59be80b3dc2957d7e18f10eaba49e745b68..a76280ea4c1549a8da67283b01b61b839c9f9514 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,10 +18,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationTransactionTag
+public class DestinationTransactionTag implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	@Column(name = "transaction_id")
 	private int transactionID;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTagRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTagRepository.java
index d08722f41051a9057ced281e40aff7814e0ef3ee..28ec52f204a94bb3be7ad0068750f532e2059f30 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTagRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTagRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationTransactionTagRepository extends JpaRepository<DestinationTransactionTag, Integer>
+public interface DestinationTransactionTagRepository extends DestinationRepository<DestinationTransactionTag>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java
index 8eec44ca3f8db3025ee529b755263bd2aace0911..de35e361ff4d4fb6bdf74f0ac800f1469c3eda98 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.template;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,10 +18,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationTemplate
+public class DestinationTemplate implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	@Column(name = "template_name")
 	private String templateName;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplateRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplateRepository.java
index b596663758c518833bfdadc09f91215bc2264387..842f83897d6ef494d23791d037ecc9249f65725d 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplateRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplateRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.template;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationTemplateRepository extends JpaRepository<DestinationTemplate, Integer>
+public interface DestinationTemplateRepository extends DestinationRepository<DestinationTemplate>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java
index e2f37b6d22da5bfca1ac8052bff5ff02ffe7c83f..0eb5e7aedc847909d46ff797002216834f9cc6f1 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.templateGroup;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -16,10 +17,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationTemplateGroup
+public class DestinationTemplateGroup implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	private String name;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroupRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroupRepository.java
index 4f25f86074a353c5971e9c4d31035237dbeeed98..8bc5b0f0ed4d7f2417fe62eb0dddc8a74fc6b96e 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroupRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroupRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.templateGroup;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationTemplateGroupRepository extends JpaRepository<DestinationTemplateGroup, Integer>
+public interface DestinationTemplateGroupRepository extends DestinationRepository<DestinationTemplateGroup>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java
index b8fbe8f4d8ed0391ee690565113a6a9868b2c7d8..0b62f6931457966c5c78a4852ce8822dca4fa1af 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.transaction;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -18,10 +19,10 @@ import java.time.LocalDate;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationTransaction
+public class DestinationTransaction implements ProvidesID
 {
 	@Id
-	private int ID;
+	private Integer ID;
 
 	private Integer amount;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransactionRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransactionRepository.java
index dcd594a9d98679a66cff5dafe9e1a5c58ec43c3b..32c7fe813ef93c20b833f4bc6f8513e8c2e931ce 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransactionRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransactionRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.transaction;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationTransactionRepository extends JpaRepository<DestinationTransaction, Integer>
+public interface DestinationTransactionRepository extends DestinationRepository<DestinationTransaction>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java
index 9e56f602f50cf9278032bc7a3365d9486bccc5a7..75ef2fe454b7bd6c931e5b37e3115a93dd4f7a3f 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java
@@ -1,6 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.user;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
 
@@ -17,11 +18,10 @@ import javax.persistence.Table;
 @Setter
 @EqualsAndHashCode
 @ToString
-public class DestinationUser
+public class DestinationUser implements ProvidesID
 {
 	@Id
-
-	private int ID;
+	private Integer ID;
 
 	private String name;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUserRepository.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUserRepository.java
index 6586eb54843cc9edef051117bf6a4e85633e9817..1fe6dfeab6da06511e45a6329e28003abcd0fe11 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUserRepository.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUserRepository.java
@@ -1,7 +1,7 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.user;
 
-import org.springframework.data.jpa.repository.JpaRepository;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 
-public interface DestinationUserRepository extends JpaRepository<DestinationUser, Integer>
+public interface DestinationUserRepository extends DestinationRepository<DestinationUser>
 {
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java
index 0553b492bccae2acef53a712dc92559674389e34..2dd0f3522cf9ada3b7536c794d0179b779be0f9b 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java
@@ -1,35 +1,71 @@
 package de.deadlocker8.budgetmaster.databasemigrator.listener;
 
+import de.deadlocker8.budgetmaster.databasemigrator.destination.DestinationRepository;
 import de.deadlocker8.budgetmaster.databasemigrator.Utils;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.batch.core.ExitStatus;
 import org.springframework.batch.core.StepExecution;
 import org.springframework.batch.core.StepExecutionListener;
+import org.springframework.transaction.annotation.Transactional;
 
-public class GenericStepListener implements StepExecutionListener
+import javax.persistence.EntityManager;
+import java.text.MessageFormat;
+import java.util.List;
+
+public class GenericStepListener<T extends ProvidesID> implements StepExecutionListener
 {
 	private static final Logger LOGGER = LoggerFactory.getLogger(GenericStepListener.class);
 
-	private final String itemName;
+	private final String tableName;
+	private final EntityManager entityManager;
+	private final DestinationRepository<T> repository;
 
-	public GenericStepListener(String itemName)
+	public GenericStepListener(String tableName, EntityManager entityManager, DestinationRepository<T> repository)
 	{
-		this.itemName = itemName;
+		this.tableName = tableName;
+		this.entityManager = entityManager;
+		this.repository = repository;
 	}
 
 	@Override
+	@Transactional
 	public void beforeStep(StepExecution stepExecution)
 	{
 		LOGGER.info("\n");
-		LOGGER.info(">>> Migrate {}s...", itemName);
+		LOGGER.info(">>> Migrate {}s...", tableName);
+
+		LOGGER.debug("Resetting sequence to 0");
+		entityManager.createNativeQuery(MessageFormat.format("ALTER SEQUENCE {0}_id_seq RESTART WITH 1", tableName))
+				.executeUpdate();
 	}
 
 	@Override
+	@Transactional
 	public ExitStatus afterStep(StepExecution stepExecution)
 	{
 		final int count = Utils.getCommitCount(stepExecution);
-		LOGGER.info(">>> Successfully migrated {} {}s\n", count, itemName);
+		LOGGER.info(">>> Successfully migrated {} {}s\n", count, tableName);
+
+		final int highestUsedID = getHighestUsedID();
+		final int newSequence = highestUsedID + 1;
+		LOGGER.debug("Adjusting sequence to {} ({})", newSequence, highestUsedID);
+		entityManager.createNativeQuery(MessageFormat.format("ALTER SEQUENCE {0}_id_seq RESTART WITH {1}}", tableName, newSequence))
+				.executeUpdate();
+
 		return null;
 	}
+
+	public int getHighestUsedID()
+	{
+		final List<T> itemsOrderedByID = repository.findAllByOrderByIDDesc();
+		if(itemsOrderedByID.isEmpty())
+		{
+			return 0;
+		}
+
+		return itemsOrderedByID.get(0).getID();
+	}
+
 }
diff --git a/BudgetMasterDatabaseMigrator/src/test/java/de/deadlocker8/budgetmaster/databasemigrator/UpdateSequencesTest.java b/BudgetMasterDatabaseMigrator/src/test/java/de/deadlocker8/budgetmaster/databasemigrator/UpdateSequencesTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd5824b0e140277d0b3c123d178bde9d97aa336e
--- /dev/null
+++ b/BudgetMasterDatabaseMigrator/src/test/java/de/deadlocker8/budgetmaster/databasemigrator/UpdateSequencesTest.java
@@ -0,0 +1,67 @@
+package de.deadlocker8.budgetmaster.databasemigrator;
+
+import de.deadlocker8.budgetmaster.databasemigrator.destination.StepNames;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.category.DestinationCategory;
+import de.deadlocker8.budgetmaster.databasemigrator.destination.category.DestinationCategoryRepository;
+import org.junit.jupiter.api.Test;
+import org.springframework.batch.core.ExitStatus;
+import org.springframework.batch.core.JobExecution;
+import org.springframework.batch.core.StepExecution;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.Resource;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Import(UpdateSequencesTest.TestDatabaseConfiguration.class)
+@EnableAutoConfiguration
+class UpdateSequencesTest extends MigratorTestBase
+{
+	@TestConfiguration
+	static class TestDatabaseConfiguration
+	{
+		@Value("classpath:categories.mv.db")
+		private Resource databaseResource;
+
+		@Bean(name = "primaryDataSource")
+		@Primary
+		public DataSource dataSource() throws IOException
+		{
+			final String folderName = databaseResource.getFile().getAbsolutePath().replace(".mv.db", "");
+			String jdbcString = "jdbc:h2:/" + folderName + ";DB_CLOSE_ON_EXIT=TRUE";
+			return DataSourceBuilder.create().username("sa").password("").url(jdbcString).driverClassName("org.h2.Driver").build();
+		}
+	}
+
+	@Autowired
+	private DestinationCategoryRepository categoryRepository;
+
+	@Test
+	void test_updateSequences()
+	{
+		final JobExecution jobExecution = jobLauncherTestUtils.launchStep(StepNames.CATEGORIES, DEFAULT_JOB_PARAMETERS);
+		final List<StepExecution> stepExecutions = new ArrayList<>(jobExecution.getStepExecutions());
+
+		assertThat(jobExecution.getExitStatus()).isEqualTo(ExitStatus.COMPLETED);
+
+		assertThat(stepExecutions).hasSize(1);
+		final StepExecution stepExecution = stepExecutions.get(0);
+		assertThat(stepExecution.getReadCount()).isEqualTo(5);
+		assertThat(stepExecution.getCommitCount()).isEqualTo(6);
+
+		final List<DestinationCategory> categoriesOrderedById = categoryRepository.findAllByOrderByIDDesc();
+		final DestinationCategory savedCategory = categoryRepository.save(new DestinationCategory(null, "New One", "#ffffff", 0, null));
+		assertThat(savedCategory.getID()).isEqualTo(categoriesOrderedById.get(0).getID() + 1);
+	}
+}
\ No newline at end of file