diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java
index 918a68802b302346b5f84e173611bcb9fc8fef18..9d91747e8e7c09798f789e233aa04bd94d0c4737 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java
@@ -155,8 +155,18 @@ public class TemplateController extends BaseController
 					   @RequestParam(value = "isPayment", required = false) boolean isPayment,
 					   @RequestParam(value = "includeAccount", required = false) boolean includeAccount)
 	{
+		String previousTemplateName = null;
+		boolean isEdit = template.getID() != null;
+		if(isEdit)
+		{
+			final Optional<Template> existingTemplateOptional = templateService.getRepository().findById(template.getID());
+			if(existingTemplateOptional.isPresent())
+			{
+				previousTemplateName = existingTemplateOptional.get().getTemplateName();
+			}
+		}
 
-		TemplateValidator templateValidator = new TemplateValidator(templateService.getExistingTemplateNames());
+		TemplateValidator templateValidator = new TemplateValidator(previousTemplateName, templateService.getExistingTemplateNames());
 		templateValidator.validate(template, bindingResult);
 
 		transactionService.handleAmount(template, isPayment);
@@ -177,4 +187,24 @@ public class TemplateController extends BaseController
 		templateService.getRepository().save(template);
 		return "redirect:/templates";
 	}
+
+	@GetMapping("/templates/{ID}/edit")
+	public String editTemplate(Model model, @PathVariable("ID") Integer ID)
+	{
+		Optional<Template> templateOptional = templateService.getRepository().findById(ID);
+		if(!templateOptional.isPresent())
+		{
+			throw new ResourceNotFoundException();
+		}
+
+		Template template = templateOptional.get();
+
+		templateService.prepareModelNewOrEdit(model, true, template, template.getAmount() <= 0, accountService.getAllAccountsAsc());
+
+		if(template.isTransfer())
+		{
+			return "templates/newTransferTemplate";
+		}
+		return "templates/newTemplate";
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java
index be1effcdc7763e47a6bbb9f6ebb65b257640f341..25321134c9576c0d9ce4b05d38264717090569eb 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java
@@ -11,10 +11,12 @@ import java.util.List;
 
 public class TemplateValidator implements Validator
 {
+	private String previousTemplateName;
 	private List<String> existingTemplateNames;
 
-	public TemplateValidator(List<String> existingTemplateNames)
+	public TemplateValidator(String previousTemplateName, List<String> existingTemplateNames)
 	{
+		this.previousTemplateName = previousTemplateName;
 		this.existingTemplateNames = existingTemplateNames;
 	}
 
@@ -27,9 +29,14 @@ public class TemplateValidator implements Validator
 	{
 		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "templateName", Strings.WARNING_EMPTY_TRANSACTION_NAME);
 
-		Template template = (Template)obj;
 
-		boolean isNameAlreadyUsed = this.existingTemplateNames.stream().anyMatch(template.getTemplateName()::equalsIgnoreCase);
+		final Template template = (Template) obj;
+		if(previousTemplateName != null && previousTemplateName.equals(template.getTemplateName()))
+		{
+			return;
+		}
+
+		final boolean isNameAlreadyUsed = this.existingTemplateNames.contains(template.getTemplateName());
 		if(isNameAlreadyUsed)
 		{
 			errors.rejectValue("templateName", Strings.WARNING_DUPLICATE_TEMPLATE_NAME);
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
index 0c328edb8521013b367e0e6b3bcd9405f01ef60b..bd7fb6366e7f5a6da687792e1bfbdef74eed9e35 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
@@ -245,7 +245,6 @@ public class TransactionController extends BaseController
 		return "transactions/newTransactionNormal";
 	}
 
-
 	@GetMapping("/transactions/{ID}/highlight")
 	public String highlight(Model model, @PathVariable("ID") Integer ID)
 	{