diff --git a/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java b/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java
index 4f4293c29d1d88ed2015921ed9d5cc2c2a11887f..0ce98e44d4587a4bf01cca79fdafe24ffc00dbf0 100644
--- a/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java
+++ b/src/de/deadlocker8/budgetmaster/logic/ServerConnection.java
@@ -282,4 +282,25 @@ public class ServerConnection
 		BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
 		reader.close();
 	}
+	
+	/*
+	 * REST
+	 */
+	public int getRestForAllPreviousMonths(int year, int month) throws Exception
+	{
+		URL url = new URL(settings.getUrl() + "/rest?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&year=" + year + "&month=" + month);
+		HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection();
+		httpsCon.setDoOutput(true);
+		httpsCon.setRequestMethod("GET");
+
+		if(httpsCon.getResponseCode() == HttpsURLConnection.HTTP_OK)
+		{
+			String result = Read.getStringFromInputStream(httpsCon.getInputStream());		
+			return gson.fromJson(result, Integer.class);
+		}
+		else
+		{
+			return 0;
+		}
+	}
 }
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmaster/ui/Controller.java b/src/de/deadlocker8/budgetmaster/ui/Controller.java
index b2570461174e25186f7c2ba8c87ddafd17cdf4ff..9cfea20feb8d49ea16fc71f82d2bb88d9adf170c 100644
--- a/src/de/deadlocker8/budgetmaster/ui/Controller.java
+++ b/src/de/deadlocker8/budgetmaster/ui/Controller.java
@@ -11,6 +11,7 @@ import org.joda.time.DateTime;
 
 import de.deadlocker8.budgetmaster.logic.CategoryBudget;
 import de.deadlocker8.budgetmaster.logic.CategoryHandler;
+import de.deadlocker8.budgetmaster.logic.NormalPayment;
 import de.deadlocker8.budgetmaster.logic.Payment;
 import de.deadlocker8.budgetmaster.logic.ServerConnection;
 import de.deadlocker8.budgetmaster.logic.Settings;
@@ -260,9 +261,9 @@ public class Controller implements Refreshable
 		try
 		{
 			ServerConnection connection = new ServerConnection(settings);
-			categoryBudgets = connection.getCategoryBudgets(currentDate.getYear(), currentDate.getMonthOfYear());
+			categoryBudgets = connection.getCategoryBudgets(currentDate.getYear(), currentDate.getMonthOfYear());		
+			
 			payments = new ArrayList<>();
-			//TODO add rest if enabled by user
 			payments.addAll(connection.getPayments(currentDate.getYear(), currentDate.getMonthOfYear()));
 			payments.addAll(connection.getRepeatingPayments(currentDate.getYear(), currentDate.getMonthOfYear()));			
 			Collections.sort(payments, new Comparator<Payment>() {
@@ -271,7 +272,14 @@ public class Controller implements Refreshable
 		        {
 		            return  payment2.getDate().compareTo(payment1.getDate());
 		        }
-		    });
+		    });		
+			if(settings.isRestActivated())
+			{
+				int rest = connection.getRestForAllPreviousMonths(currentDate.getYear(), currentDate.getMonthOfYear());
+				//categoryID 2 = Rest
+				payments.add(new NormalPayment(-1, rest, currentDate.withDayOfMonth(1).toString("yyyy-MM-dd"), 2, "Übertrag"));				
+			}	
+			
 			categoryHandler = new CategoryHandler(connection.getCategories());
 		}
 		catch(Exception e)
diff --git a/src/de/deadlocker8/budgetmaster/ui/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/SettingsController.java
index fd684c6536f701f3f855db44e77026ee37f244cd..92ec0e3fccff33ff627ab70ce8f0f94526e89700 100644
--- a/src/de/deadlocker8/budgetmaster/ui/SettingsController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/SettingsController.java
@@ -76,6 +76,7 @@ public class SettingsController
 					controller.setSettings(settings);
 				}
 				Utils.saveSettings(controller.getSettings());	
+				controller.refresh();
 				controller.showNotification("Erfolgreich gespeichert");
 			}
 			else
diff --git a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java
index c9915e262feb2b48ca5523febdc6af633a570074..25018a33b0c7066688942a56372c7ec7f41ae6cd 100644
--- a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java
+++ b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java
@@ -15,6 +15,7 @@ import de.deadlocker8.budgetmaster.logic.Category;
 import de.deadlocker8.budgetmaster.logic.CategoryBudget;
 import de.deadlocker8.budgetmaster.logic.LatestRepeatingPayment;
 import de.deadlocker8.budgetmaster.logic.NormalPayment;
+import de.deadlocker8.budgetmaster.logic.Payment;
 import de.deadlocker8.budgetmaster.logic.RepeatingPayment;
 import de.deadlocker8.budgetmaster.logic.RepeatingPaymentEntry;
 import javafx.scene.paint.Color;
@@ -42,9 +43,7 @@ public class DatabaseHandler
 	/*
 	 * GET
 	 */
-
-	@Deprecated
-	public DateTime getFirstPaymentDate()
+	public DateTime getFirstNormalPaymentDate()
 	{
 		Statement stmt = null;
 		String query = "SELECT MIN(Date) as \"min\" FROM Payment";
@@ -79,38 +78,12 @@ public class DatabaseHandler
 
 		return dateTime;
 	}
-
-	@Deprecated
-	public int getRestForAllPreviousMonths(int year, int month)
-	{
-		DateTime firstDate = getFirstPaymentDate();
-
-		int startYear = firstDate.getYear();
-		int startMonth = firstDate.getMonthOfYear();
-		int totalRest = 0;
-
-		while(startYear < year || startMonth < month)
-		{
-			totalRest += getRest(startYear, startMonth);
-
-			startMonth++;
-			if(startMonth > 12)
-			{
-				startMonth = 1;
-				startYear++;
-			}
-		}
-		return totalRest;
-	}
-
-	@Deprecated
-	public int getRest(int year, int month)
+	
+	public DateTime getFirstRepeatingPaymentDate()
 	{
 		Statement stmt = null;
-		String query = "SELECT SUM(q.amount) as \"rest\" FROM(SELECT Payment.amount as \"amount\" FROM Payment WHERE (YEAR(Date) = " + year + " AND MONTH(Date) = " + month
-				+ " OR RepeatMonthDay != 0 OR RepeatInterval != 0 AND DATEDIFF(NOW(), Date ) % RepeatInterval = 0 AND RepeatEndDate IS NULL OR RepeatInterval != 0 AND DATEDIFF(NOW(), Date ) % RepeatInterval = 0 AND RepeatEndDate IS NOT NULL AND DATEDIFF(RepeatEndDate, NOW()) > 0) GROUP BY Payment.ID ORDER BY Payment.Date) q";
-
-		int result = 0;
+		String query = "SELECT MIN(Date) as \"min\" FROM repeating_payment";
+		DateTime dateTime = null;
 		try
 		{
 			stmt = connection.createStatement();
@@ -118,7 +91,7 @@ public class DatabaseHandler
 
 			while(rs.next())
 			{
-				result = rs.getInt("rest");
+				dateTime = formatter.parseDateTime(rs.getString("min"));
 			}
 		}
 		catch(SQLException e)
@@ -139,7 +112,60 @@ public class DatabaseHandler
 			}
 		}
 
-		return result;
+		return dateTime;
+	}
+
+	public int getRestForAllPreviousMonths(int year, int month)
+	{		
+		DateTime firstNormalPaymentDate = getFirstNormalPaymentDate();
+		DateTime firstRepeatingPaymentDate = getFirstRepeatingPaymentDate();
+		
+		DateTime firstDate = firstNormalPaymentDate;
+		if(firstRepeatingPaymentDate.isBefore(firstNormalPaymentDate))
+		{
+			firstDate = firstRepeatingPaymentDate;
+		}
+		
+		DateTimeFormatter formatter = DateTimeFormat.forPattern("MM.yyyy");
+		String dateString = String.valueOf(month) + "." + year;
+		DateTime currentDate = formatter.parseDateTime(dateString);//	
+	
+		if(firstDate.isAfter(currentDate))
+		{
+			return 0;
+		}
+
+		int startYear = firstDate.getYear();
+		int startMonth = firstDate.getMonthOfYear();
+		int totalRest = 0;
+		
+		while(startYear < year || startMonth < month)
+		{
+			totalRest += getRest(startYear, startMonth);			
+
+			startMonth++;
+			if(startMonth > 12)
+			{
+				startMonth = 1;
+				startYear++;
+			}
+		}
+		return totalRest;
+	}
+
+	public int getRest(int year, int month)
+	{
+		ArrayList<Payment> payments = new ArrayList<>();
+		payments.addAll(getPayments(year, month));
+		payments.addAll(getRepeatingPayments(year, month));
+		
+		int rest = 0;
+		for(Payment currentPayment : payments)
+		{
+			rest += currentPayment.getAmount();
+		}
+		
+		return rest;
 	}
 
 	public ArrayList<Category> getCategories()
diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
index 349ae50310611c17b691889b5581b7a81bb94596..c97cd2c5ebfac816fd34b7c46cc86195fd39368a 100644
--- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
+++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
@@ -27,6 +27,7 @@ import de.deadlocker8.budgetmasterserver.server.payment.repeating.RepeatingPayme
 import de.deadlocker8.budgetmasterserver.server.payment.repeating.RepeatingPaymentDelete;
 import de.deadlocker8.budgetmasterserver.server.payment.repeating.RepeatingPaymentGet;
 import de.deadlocker8.budgetmasterserver.server.payment.repeating.RepeatingPaymentGetAll;
+import de.deadlocker8.budgetmasterserver.server.rest.RestGet;
 import de.deadlocker8.budgetmasterserver.server.updater.RepeatingPaymentUpdater;
 import logger.LogLevel;
 import logger.Logger;
@@ -102,6 +103,9 @@ public class SparkServer
 		get("/repeatingpayment", new RepeatingPaymentGetAll(handler, gson));
 		post("/repeatingpayment", new RepeatingPaymentAdd(handler));
 		delete("/repeatingpayment", new RepeatingPaymentDelete(handler));
+		
+		// Rest
+		get("/rest", new RestGet(handler, gson));
 
 		after((request, response) -> {
 			new RepeatingPaymentUpdater(handler).updateRepeatingPayments();
diff --git a/src/de/deadlocker8/budgetmasterserver/server/rest/RestGet.java b/src/de/deadlocker8/budgetmasterserver/server/rest/RestGet.java
new file mode 100644
index 0000000000000000000000000000000000000000..0962749b594c2111f93c633685446494585704b7
--- /dev/null
+++ b/src/de/deadlocker8/budgetmasterserver/server/rest/RestGet.java
@@ -0,0 +1,62 @@
+package de.deadlocker8.budgetmasterserver.server.rest;
+
+import static spark.Spark.halt;
+
+import com.google.gson.Gson;
+
+import de.deadlocker8.budgetmasterserver.main.DatabaseHandler;
+import spark.Request;
+import spark.Response;
+import spark.Route;
+
+public class RestGet implements Route
+{
+	private DatabaseHandler handler;
+	private Gson gson;
+
+	public RestGet(DatabaseHandler handler, Gson gson)
+	{
+		this.handler = handler;
+		this.gson = gson;
+	}
+
+	@Override
+	public Object handle(Request req, Response res) throws Exception
+	{
+		if(!req.queryParams().contains("year") || !req.queryParams().contains("month"))
+		{
+			halt(400, "Bad Request");
+		}
+		
+		int year = 0;
+		int month = 0;
+		
+		try
+		{				
+			year = Integer.parseInt(req.queryMap("year").value());
+			month = Integer.parseInt(req.queryMap("month").value());
+			
+			if(year < 0 || month < 1 || month > 12)
+			{
+				halt(400, "Bad Request");
+			}
+			
+			try
+			{			
+				int rest = handler.getRestForAllPreviousMonths(year, month);	
+				
+				return gson.toJson(rest);
+			}
+			catch(IllegalStateException ex)
+			{
+				halt(500, "Internal Server Error");
+			}
+		}
+		catch(Exception e)
+		{
+			halt(400, "Bad Request");
+		}
+		
+		return null;
+	}
+}
\ No newline at end of file