diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
index f2ace4e2ea0d08d980c3b9c2c452eeaa70bbba18..0e4b5623cb267e8b6d3b7c13b780bd6e44fa9672 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
@@ -44,7 +44,7 @@ public class TransactionSearchSpecifications
 
 			if(search.isSearchTags())
 			{
-				final Join<Transaction, Tag> tagJoin = transaction.join(Transaction_.tags, JoinType.LEFT);
+				Join<Transaction, Tag> tagJoin = transaction.join(Transaction_.tags, JoinType.LEFT);
 				predicates.add(builder.like(builder.lower(tagJoin.get(Tag_.name).as(String.class)), pattern));
 			}
 
@@ -52,9 +52,9 @@ public class TransactionSearchSpecifications
 			Predicate predicatesCombined = builder.or(predicates.toArray(predicatesArray));
 
 			Predicate accountStatePredicate = transaction.get(Transaction_.account).get("accountState").in(getAllowedAccountStates(search));
-			;
 
 			query.orderBy(builder.desc(transaction.get(Transaction_.date)));
+			query.distinct(true);
 			return builder.and(accountStatePredicate, predicatesCombined);
 		};
 	}
diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
index ba11b5e4e5d7571cad29f7c386291f683e48b253..a8e028f04a3bbefe6ad095b24666d1c692b8dc6c 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
@@ -43,6 +43,7 @@ class TransactionSearchSpecificationsTest
 	private Transaction repeatingTransaction;
 	private Transaction transferTransaction;
 	private Transaction transactionFromHiddenAccount;
+	private Transaction transactionWithMultipleTags;
 
 	@Autowired
 	private CategoryRepository categoryRepository;
@@ -134,6 +135,15 @@ class TransactionSearchSpecificationsTest
 		transactionFromHiddenAccount.setCategory(category2);
 		transactionFromHiddenAccount.setAccount(accountHidden);
 		transactionFromHiddenAccount = transactionRepository.save(transactionFromHiddenAccount);
+
+		transactionWithMultipleTags = new Transaction();
+		transactionWithMultipleTags.setName("I am the TagMaster");
+		transactionWithMultipleTags.setAmount(-525);
+		transactionWithMultipleTags.setDate(new DateTime(2018, 11, 3, 12, 0, 0, 0));
+		transactionWithMultipleTags.setCategory(category1);
+		transactionWithMultipleTags.setAccount(account);
+		transactionWithMultipleTags.setTags(List.of(tag1, tag2));
+		transactionWithMultipleTags = transactionRepository.save(transactionWithMultipleTags);
 	}
 
 	@Test
@@ -199,11 +209,12 @@ class TransactionSearchSpecificationsTest
 		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
 
 		List<Transaction> results = transactionRepository.findAll(spec);
-		assertThat(results).hasSize(4)
+		assertThat(results).hasSize(5)
 				.contains(transaction1)
 				.contains(transaction2)
 				.contains(repeatingTransaction)
-				.contains(transferTransaction);
+				.contains(transferTransaction)
+				.contains(transactionWithMultipleTags);
 	}
 
 	@Test
@@ -213,10 +224,11 @@ class TransactionSearchSpecificationsTest
 		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
 
 		List<Transaction> results = transactionRepository.findAll(spec);
-		assertThat(results).hasSize(3)
+		assertThat(results).hasSize(4)
 				.contains(transaction1)
 				.contains(repeatingTransaction)
-				.contains(transferTransaction);
+				.contains(transferTransaction)
+				.contains(transactionWithMultipleTags);
 	}
 
 	@Test
@@ -246,8 +258,8 @@ class TransactionSearchSpecificationsTest
 		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
 
 		List<Transaction> results = transactionRepository.findAll(spec);
-		assertThat(results).hasSize(1)
-				.contains(transaction1);
+		assertThat(results).hasSize(2)
+				.contains(transaction1, transactionWithMultipleTags);
 	}
 
 	@Test
@@ -257,8 +269,8 @@ class TransactionSearchSpecificationsTest
 		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
 
 		List<Transaction> results = transactionRepository.findAll(spec);
-		assertThat(results).hasSize(1)
-				.contains(transaction1);
+		assertThat(results).hasSize(2)
+				.contains(transaction1, transactionWithMultipleTags);
 	}
 
 	@Test
@@ -280,4 +292,14 @@ class TransactionSearchSpecificationsTest
 		List<Transaction> results = transactionRepository.findAll(spec);
 		assertThat(results).containsExactly(transactionFromHiddenAccount);
 	}
+
+	@Test
+	void getMatches_AvoidDuplicatedEntriesIfSearchTextIsFoundInMultipleCriteria()
+	{
+		Search search = new Search("TagMaster", true, true, true, true, false, 0);
+		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
+
+		List<Transaction> results = transactionRepository.findAll(spec);
+		assertThat(results).containsExactly(transactionWithMultipleTags, repeatingTransaction);
+	}
 }
\ No newline at end of file