diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java
index 774c5d2173ee7ec73f6f0cf4ccca3b023d7948d1..84c585273f2387c396e61adc07a0656df9630e45 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java
@@ -4,7 +4,7 @@ import de.deadlocker8.budgetmaster.Main;
 import de.deadlocker8.budgetmaster.authentication.UserService;
 import de.deadlocker8.budgetmaster.integration.helpers.IntegrationTestHelper;
 import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTest;
-import de.deadlocker8.budgetmaster.integration.helpers.TransactionTestHelper;
+import de.thecodelabs.utils.util.Localization;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -13,6 +13,7 @@ import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 import org.junit.runner.RunWith;
 import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.firefox.FirefoxDriver;
@@ -25,9 +26,7 @@ import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.File;
-import java.text.SimpleDateFormat;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.List;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -130,4 +129,179 @@ public class NewTransactionFromTemplateTest
 		// assert
 		assertThat(driver.findElement(By.className("buttonIncome")).getAttribute("class")).contains("budgetmaster-green");
 	}
+
+	@Test
+	public void test_selectTemplateHotkeys_initialSelect()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		final List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+
+		// assert
+		assertThat(templateItemHeaders).hasSize(2);
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_keyDown()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		final List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_DOWN);
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).doesNotContain("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).contains("template-selected");
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_keyDown_goBackToTopFromLastItem()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		final List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_DOWN);
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_DOWN);
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_keyUp_goBackToBottomFromFirstItem()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		final List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_UP);
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).doesNotContain("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).contains("template-selected");
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_keyUp()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		final List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_UP);
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_UP);
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_confirmSelection()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		final List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).doesNotContain("template-selected");
+
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ENTER);
+
+		wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Transaction"));
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_searchContainsSelection()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_DOWN);
+
+		List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).doesNotContain("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).contains("template-selected");
+
+		driver.findElement(By.id("searchTemplate")).sendKeys("emp");
+
+		// assert
+		templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+		assertThat(templateItemHeaders).hasSize(2);
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).doesNotContain("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).contains("template-selected");
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_searchNotContainsSelection()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		driver.findElement(By.id("searchTemplate")).sendKeys(Keys.ARROW_DOWN);
+
+		List<WebElement> templateItemHeaders = driver.findElements(By.cssSelector(".template-item .collapsible-header"));
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).doesNotContain("template-selected");
+		assertThat(templateItemHeaders.get(1).getAttribute("class")).contains("template-selected");
+
+		driver.findElement(By.id("searchTemplate")).sendKeys("Income");
+
+		// assert
+		templateItemHeaders = driver.findElements(By.cssSelector(".template-item:not(.hidden) .collapsible-header"));
+		assertThat(templateItemHeaders).hasSize(1);
+		assertThat(templateItemHeaders.get(0).getAttribute("class")).contains("template-selected");
+	}
+
+	@Test
+	public void test_selectTemplateHotkeys_dontBlockEnterInGlobalSearch()
+	{
+		driver.get(helper.getUrl() + "/templates");
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
+
+		WebElement inputSearch = driver.findElement(By.id("search"));
+		inputSearch.sendKeys("e");
+		inputSearch.sendKeys(Keys.ENTER);
+
+		wait = new WebDriverWait(driver, 5);
+		String expected = Localization.getString("menu.search.results", 24);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), expected));
+	}
 }
\ No newline at end of file