diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
index b4907d6c2fcafd310a964c49cc51db7eac4d5071..8f15cc4b831137e6d9d79f28509f7bae654ede60 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSearchSpecifications.java
@@ -7,12 +7,12 @@ import de.deadlocker8.budgetmaster.tags.Tag;
 import de.deadlocker8.budgetmaster.tags.Tag_;
 import org.springframework.data.jpa.domain.Specification;
 
-import javax.persistence.criteria.Join;
-import javax.persistence.criteria.JoinType;
-import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.*;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 
 public class TransactionSearchSpecifications
 {
@@ -92,10 +92,10 @@ public class TransactionSearchSpecifications
 
 			final Predicate allPredicates = builder.and(accountStatePredicate, predicatesCombined);
 
-			if(search.getStartDate() != null && search.getEndDate() != null)
+			final Optional<Predicate> datePredicateOptional = getDatePredicate(builder, transaction, search);
+			if(datePredicateOptional.isPresent())
 			{
-				final Predicate dateConstraint = builder.between(transaction.get(Transaction_.date), search.getStartDate(), search.getEndDate());
-				return builder.and(dateConstraint, allPredicates);
+				return builder.and(datePredicateOptional.get(), allPredicates);
 			}
 
 			return allPredicates;
@@ -115,4 +115,24 @@ public class TransactionSearchSpecifications
 
 		return allowedAccountStates;
 	}
+
+	private static Optional<Predicate> getDatePredicate(CriteriaBuilder builder, Root<Transaction> transaction, Search search)
+	{
+		if(search.getStartDate() != null && search.getEndDate() != null)
+		{
+			return Optional.of(builder.between(transaction.get(Transaction_.date), search.getStartDate(), search.getEndDate()));
+		}
+
+		if(search.getStartDate() != null)
+		{
+			return Optional.of(builder.between(transaction.get(Transaction_.date), search.getStartDate(), LocalDate.of(2100, 1, 1)));
+		}
+
+		if(search.getEndDate() != null)
+		{
+			return Optional.of(builder.between(transaction.get(Transaction_.date), LocalDate.of(2000, 1, 1), search.getEndDate()));
+		}
+
+		return Optional.empty();
+	}
 }
diff --git a/BudgetMasterServer/src/main/resources/static/js/search.js b/BudgetMasterServer/src/main/resources/static/js/search.js
index 5f0d6f57b6b1b1e2e1f0a2dc432ffb5e31b0f44c..317ebea9644233112f61af4a064d5ecc6d8bdb26 100644
--- a/BudgetMasterServer/src/main/resources/static/js/search.js
+++ b/BudgetMasterServer/src/main/resources/static/js/search.js
@@ -66,18 +66,18 @@ $(document).ready(function()
 
 function createSearchDatePickerEnd(minDate, selectedDate)
 {
+    let shouldSetDefaultDate = endDate !== null;
     if(selectedDate < minDate)
     {
+        shouldSetDefaultDate = selectedDate !== null;
         selectedDate = minDate;
     }
 
-
-
     return M.Datepicker.init(document.getElementById('search-datepicker-end'), {
         yearRange: 50,
         firstDay: 1,
         showClearBtn: false,
-        setDefaultDate: true,
+        setDefaultDate: shouldSetDefaultDate,
         minDate: minDate,
         defaultDate: selectedDate,
         autoClose: true,
diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
index 2315d8ae21af618cec0439c4ab4651d6d7406d3b..62045b38e441a674e2727069773aa1d2a40a7c7b 100644
--- a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
+++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java
@@ -346,4 +346,26 @@ class TransactionSearchSpecificationsTest
 		assertThat(results).hasSize(4)
 				.contains(transaction2, transferTransaction, repeatingTransaction, transactionFromHiddenAccount);
 	}
+
+	@Test
+	void getMatches_OnlyStartDateDefined()
+	{
+		Search search = new Search("", true, true, true, true, true, 0, LocalDate.of(2018, 1, 1), null);
+		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
+
+		List<Transaction> results = transactionRepository.findAll(spec);
+		assertThat(results).hasSize(5)
+				.contains(transaction2, transferTransaction, repeatingTransaction, transactionFromHiddenAccount, transactionWithMultipleTags);
+	}
+
+	@Test
+	void getMatches_OnlyEndDateDefined()
+	{
+		Search search = new Search("", true, true, true, true, true, 0, null, LocalDate.of(2019, 1, 1));
+		Specification spec = TransactionSearchSpecifications.withDynamicQuery(search);
+
+		List<Transaction> results = transactionRepository.findAll(spec);
+		assertThat(results).hasSize(5)
+				.contains(transaction1, transaction2, transferTransaction, repeatingTransaction, transactionFromHiddenAccount);
+	}
 }
\ No newline at end of file