diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java
index 76f7b85a889995755ba8735624a5f5412d411a90..b6f443aceffc89a78fd9c35d54126474073d2d62 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java
@@ -10,6 +10,7 @@ import jakarta.persistence.criteria.CriteriaBuilder;
 import jakarta.persistence.criteria.Join;
 import jakarta.persistence.criteria.JoinType;
 import jakarta.persistence.criteria.Predicate;
+
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
@@ -102,17 +103,21 @@ public class TransactionSpecifications
 			if(!tagIDs.isEmpty())
 			{
 				Join<Transaction, Tag> join = transaction.join(Transaction_.tags, JoinType.LEFT);
-				Predicate tagPredicate = builder.disjunction();
+				final List<Predicate> tagPredicates = new ArrayList<>();
+
 				for(Integer tagID : tagIDs)
 				{
-					tagPredicate.getExpressions().add(builder.equal(join.get(Tag_.ID), tagID));
+					tagPredicates.add(builder.equal(join.get(Tag_.ID), tagID));
 				}
 
 				// transactions without any tags should be included in results
-				tagPredicate.getExpressions().add(builder.isEmpty(transaction.get(Transaction_.tags)));
+				tagPredicates.add(builder.isEmpty(transaction.get(Transaction_.tags)));
+
+				final Predicate[] predicatesArray = new Predicate[tagPredicates.size()];
+				final Predicate tagPredicatesCombined = builder.or(tagPredicates.toArray(predicatesArray));
 
-				predicates.add(tagPredicate);
-				transferPredicates.add(tagPredicate);
+				predicates.add(tagPredicatesCombined);
+				transferPredicates.add(tagPredicatesCombined);
 			}
 
 			if(name != null && name.length() > 0)