diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java
index 7fbacc6987e82355653c3f9a49c0c4337e55a30e..1a43ec0328d0c2aa59962c4ee802df9d88bd7d0c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/PaymentController.java
@@ -108,7 +108,9 @@ public class PaymentController extends BaseController
 					   @RequestParam(value = "isPayment", required = false) boolean isPayment,
 					   @RequestParam(value = "enableRepeating", required = false) boolean enableRepeating,
 					   @RequestParam(value = "repeatingModifierNumber", required = false) int repeatingModifierNumber,
-					   @RequestParam(value = "repeatingModifierType", required = false) String repeatingModifierType)
+					   @RequestParam(value = "repeatingModifierType", required = false) String repeatingModifierType,
+					   @RequestParam(value = "repeatingEndType", required = false) String repeatingEndType,
+					   @RequestParam(value = "repeatingEndValue", required = false) String repeatingEndValue)
 	{
 		PaymentValidator paymentValidator = new PaymentValidator();
 		paymentValidator.validate(payment, bindingResult);
diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java
index 54ad0ed7a10bc7c517c8a54a535af4f0bccacfd3..a8278758358514076d0972f52fde56e2e38aac8f 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java
@@ -14,6 +14,16 @@ public abstract class RepeatingEnd
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	private Integer ID;
 
+	@Transient
+	private String localizationKey;
+
+	RepeatingEnd(String localizationKey)
+	{
+		this.localizationKey = localizationKey;
+	}
+
+	RepeatingEnd() {}
+
 	public Integer getID()
 	{
 		return ID;
@@ -24,5 +34,15 @@ public abstract class RepeatingEnd
 		this.ID = ID;
 	}
 
+	public String getLocalizationKey()
+	{
+		return localizationKey;
+	}
+
+	public void setLocalizationKey(String localizationKey)
+	{
+		this.localizationKey = localizationKey;
+	}
+
 	public abstract boolean isEndReached(List<DateTime> dates);
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java
index 9f5b100871bfee979bd9c2de43a8329dfc7d1406..287ac1c40b098fc0360d4ed8395ade3629f1a992 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java
@@ -12,6 +12,7 @@ public class RepeatingEndAfterXTimes extends RepeatingEnd
 
 	public RepeatingEndAfterXTimes(int times)
 	{
+		super("repeating.end.key.afterXTimes");
 		this.times = times;
 	}
 
diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java
index 131b9f9e5fd52b3337182f9203a2e2b92100da31..3a9904723deda9c3d897e74adc540afb1125b2d9 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java
@@ -14,6 +14,7 @@ public class RepeatingEndDate extends RepeatingEnd
 
 	public RepeatingEndDate(DateTime endDate)
 	{
+		super("repeating.end.key.date");
 		this.endDate = endDate;
 	}
 
diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java
index 4b5747766c9b599d01bbb8ad122f6b3ec0bdd0b9..8f41f8132fa567197e5f6004d307e5745196fa1b 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java
@@ -2,12 +2,18 @@ package de.deadlocker8.budgetmaster.repeating.endoption;
 
 import org.joda.time.DateTime;
 
-import javax.persistence.*;
+import javax.persistence.Entity;
+import javax.persistence.Transient;
 import java.util.List;
 
 @Entity
 public class RepeatingEndNever extends RepeatingEnd
 {
+	public RepeatingEndNever()
+	{
+		super("repeating.end.key.never");
+	}
+
 	@Override
 	@Transient
 	public boolean isEndReached(List<DateTime> dates)
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index b82b391c08c56e972b6a628792ed5e7ecc4ca4b7..50eb64ff4c66cc812c2e74f3d3e92286cb5e22c5 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -330,6 +330,16 @@ repeating.modifier.days=Tage
 repeating.modifier.months=Monate
 repeating.modifier.years=Jahre
 
+repeating.end.key.never = never
+repeating.end.key.afterXTimes = afterXTimes
+repeating.end.key.date = date
+
+repeating.end=Endet
+repeating.end.never=niemals
+repeating.end.afterXTimes.A=nach
+repeating.end.afterXTimes.B=Wiederholungen
+repeating.end.date=am
+
 paymenttab.button.filter=Filter
 paymenttab.label.filter.active=Filter aktiv
 paymenttab.label.incomes=Einnahmen:
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index 635cba0ecba0b2da5980a0d5434d0ca3b711f98c..fe5ccf8fbc7b8bc3ec810c26d3277cfd19a3b7c1 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -330,6 +330,16 @@ repeating.modifier.days=Days
 repeating.modifier.months=Months
 repeating.modifier.years=Years
 
+repeating.end.key.never = never
+repeating.end.key.afterXTimes = afterXTimes
+repeating.end.key.date = date
+
+repeating.end=Ends
+repeating.end.never=never
+repeating.end.afterXTimes.A=after
+repeating.end.afterXTimes.B=times
+repeating.end.date=on
+
 paymenttab.button.filter=Filter
 paymenttab.label.filter.active=Filter active
 paymenttab.label.incomes=Incomes:
diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css
index 66f3bdc4f2de5e4a91b629488c8a0a73af4271c8..07cc944639343d439055f544567a2a47f8a58bff 100644
--- a/src/main/resources/static/css/style.css
+++ b/src/main/resources/static/css/style.css
@@ -293,7 +293,7 @@ ul.dropdown-content.select-dropdown li.selected {
 }
 
 /* chips autocomplete dropdown */
-.autocomplete-content li span{
+.autocomplete-content li span {
     color: #2E79B9;
 }
 
@@ -301,6 +301,15 @@ ul.dropdown-content.select-dropdown li.selected {
     background-color: rgba(0, 0, 0, 0.15);
 }
 
+/* radio buttons */
+input[type="radio"]:checked + label::after, [type="radio"].with-gap:checked + label::after {
+    background-color: #2E79B9;
+}
+
+input[type="radio"]:checked + label::after, [type="radio"].with-gap:checked + label::before, [type="radio"].with-gap:checked + label::after {
+    border: 2px solid #2E79B9;
+}
+
 .account-budget {
     font-size: 20px !important;
 }
diff --git a/src/main/resources/static/js/payments.js b/src/main/resources/static/js/payments.js
index e908fc8c000f8ff38e968644b915f0d0cf71a83a..d752028b6351a82eb5caec6238fded66bdad7d4f 100644
--- a/src/main/resources/static/js/payments.js
+++ b/src/main/resources/static/js/payments.js
@@ -62,15 +62,13 @@ $( document ).ready(function() {
     $('#enableRepeating').change(function(){
         if($(this).is(":checked"))
         {
-            $('#payment-repeating-modifier').prop('disabled', false);
-            $('#payment-repeating-modifier-type').prop('disabled', false);
-            $('#payment-repeating-modifier-type').material_select();
+            $('#payment-repeating-modifier-row').show();
+            $('#payment-repeating-end').show();
         }
         else
         {
-            $('#payment-repeating-modifier').prop('disabled', true);
-            $('#payment-repeating-modifier-type').prop('disabled', true);
-            $('#payment-repeating-modifier-type').material_select();
+            $('#payment-repeating-modifier-row').hide();
+            $('#payment-repeating-end').hide();
         }
     });
 
@@ -149,6 +147,7 @@ function removeTooltip(id)
 
 function validateForm()
 {
+    // handle tags
     var tags = $('.chips-autocomplete').material_chip('data');
     var parent = document.getElementById("hidden-payment-tags");
     for(var i = 0; i < tags.length; i++)
@@ -160,5 +159,26 @@ function validateForm()
         parent.appendChild(input);
     }
 
+    // handle repeating end
+    var endNever = document.getElementById("repeating-end-never");
+    var endAfterXTimes = document.getElementById("repeating-end-after-x-times");
+    var endDate = document.getElementById("repeating-end-date");
+    var endInput = document.getElementById("hidden-payment-repeating-end-value");
+
+    if(endNever.checked)
+    {
+        return true;
+    }
+
+    if(endAfterXTimes.checked)
+    {
+        endInput.value = "12";
+    }
+
+    if(endDate.checked)
+    {
+        endInput.value = "13.05.18";
+    }
+
     return true;
 }
\ No newline at end of file
diff --git a/src/main/resources/templates/payments/newPayment.ftl b/src/main/resources/templates/payments/newPayment.ftl
index c1f2535e1545a600f3d7e0d8680db773d601b3c9..aaa969da121966e04e951236a773042e7eb4cd80 100644
--- a/src/main/resources/templates/payments/newPayment.ftl
+++ b/src/main/resources/templates/payments/newPayment.ftl
@@ -140,7 +140,7 @@
                         </div>
 
                         <#-- repeating modifier -->
-                        <div class="row">
+                        <div class="row" id="payment-repeating-modifier-row">
                             <div class="input-field col s6 m6 l4 offset-l2">
                                 <input id="payment-repeating-modifier" name="repeatingModifierNumber" type="text" <@validation.validation "repeatingModifierNumber"/> value="<#if payment.getRepeatingOption()??>${payment.getRepeatingOption().getModifier().getQuantity()}</#if>">
                                 <label for="payment-repeating-modifier">${locale.getString("payment.new.label.repeating.all")}</label>
@@ -154,16 +154,54 @@
                                         <#if payment.getRepeatingOption()??>
                                             <#if payment.getRepeatingOption().getModifier().getLocalizationKey() == modifierName>
                                                 <option selected value="${modifierName}">${modifierName}</option>
+                                            <#else>
+                                                <option value="${modifierName}">${modifierName}</option>
                                             </#if>
+                                        <#else>
+                                            <option value="${modifierName}">${modifierName}</option>
                                         </#if>
-                                        <option value="${modifierName}">${modifierName}</option>
                                     </#list>
                                 </select>
-                                <input type="hidden" id="hidden-payment-repeating-modifier-type" value="<#if payment.getRepeatingOption()??>${locale.getString(payment.getRepeatingOption().getModifier().getLocalizationKey())}</#if>">
                             </div>
                         </div>
 
                         <#-- repeating end option -->
+                        <div class="row" id="payment-repeating-end">
+                            <div class="col s12 m12 l8 offset-l2">
+                                ${locale.getString("repeating.end")}
+                                <p>
+                                    <#if payment.getRepeatingOption()??>
+                                        <#if payment.getRepeatingOption().getEndOption().getLocalizationKey() == locale.getString("repeating.end.key.never")>
+                                            <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-never" checked value="${locale.getString("repeating.end.key.never")}"/>
+                                        <#else>
+                                            <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-never" value="${locale.getString("repeating.end.key.never")}"/>
+                                        </#if>
+                                    <#else>
+                                        <#-- default -->
+                                        <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-never" checked value="${locale.getString("repeating.end.key.never")}"/>
+                                    </#if>
+                                    <label for="repeating-end-never">${locale.getString("repeating.end.never")}</label>
+                                </p>
+                                <p>
+                                    <#if payment.getRepeatingOption()?? && payment.getRepeatingOption().getEndOption().getLocalizationKey() == locale.getString("repeating.end.key.afterXTimes")>
+                                        <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-after-x-times" checked value="${locale.getString("repeating.end.key.afterXTimes")}"/>
+                                    <#else>
+                                        <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-after-x-times" value="${locale.getString("repeating.end.key.afterXTimes")}"/>
+                                    </#if>
+                                    <label for="repeating-end-after-x-times">${locale.getString("repeating.end.afterXTimes.A")} 8 ${locale.getString("repeating.end.afterXTimes.B")}</label>
+                                </p>
+                                <p>
+                                    <#if payment.getRepeatingOption()?? && payment.getRepeatingOption().getEndOption().getLocalizationKey() == locale.getString("repeating.end.key.date")>
+                                        <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-date" checked value="${locale.getString("repeating.end.key.date")}"/>
+                                    <#else>
+                                        <input class="with-gap" name="repeatingEndType" type="radio" id="repeating-end-date" value="${locale.getString("repeating.end.key.date")}"/>
+                                    </#if>
+                                    <label for="repeating-end-date">${locale.getString("repeating.end.date")} 13.05.2018</label>
+                                </p>
+                                <input type="hidden" id="hidden-payment-repeating-end-value" name="repeatingEndValue" value="">
+                            </div>
+                        </div>
+
                         <br>
 
                         <#-- buttons -->