diff --git a/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java b/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java
index 8264edb062a6251afbd2d95c59f5b61ec51fa936..7a72815d0674d66ea5925873bbe18ece78606aee 100644
--- a/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java
+++ b/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java
@@ -4,14 +4,14 @@ import java.util.ArrayList;
 
 public class FilterSettings
 {
-	private boolean isIncomeAllowed; 
-	private boolean isPaymentAllowed; 
+	private boolean isIncomeAllowed;
+	private boolean isPaymentAllowed;
 	private boolean isNoRepeatingAllowed;
 	private boolean isMonthlyRepeatingAllowed;
 	private boolean isRepeatingEveryXDaysAllowed;
 	private ArrayList<Integer> allowedCategoryIDs;
 	private String name;
-	
+
 	public FilterSettings(boolean isIncomeAllowed, boolean isPaymentAllowed, boolean isNoRepeatingAllowed, boolean isMonthlyRepeatingAllowed, boolean isRepeatingEveryXDaysAllowed, ArrayList<Integer> allowedCategoryIDs, String name)
 	{
 		this.isIncomeAllowed = isIncomeAllowed;
@@ -22,7 +22,7 @@ public class FilterSettings
 		this.allowedCategoryIDs = allowedCategoryIDs;
 		this.name = name;
 	}
-	
+
 	public FilterSettings()
 	{
 		this.isIncomeAllowed = true;
@@ -103,10 +103,72 @@ public class FilterSettings
 	{
 		this.name = name;
 	}
-	
+
 	public String toString()
 	{
 		return "FilterSettings [isIncomeAllowed=" + isIncomeAllowed + ", isPaymentAllowed=" + isPaymentAllowed + ", isNoRepeatingAllowed=" + isNoRepeatingAllowed + ", isMonthlyRepeatingAllowed=" + isMonthlyRepeatingAllowed + ", isRepeatingEveryXDaysAllowed=" + isRepeatingEveryXDaysAllowed
 				+ ", allowedCategoryIDs=" + allowedCategoryIDs + ", name=" + name + "]";
 	}
+
+	public boolean equals(Object other)
+	{
+		if(other == null) return false;
+		if(other == this) return true;
+		if(!(other instanceof FilterSettings)) return false;
+		FilterSettings otherSettings = (FilterSettings)other;
+		if(isIncomeAllowed == otherSettings.isIncomeAllowed() &&
+			isPaymentAllowed == otherSettings.isPaymentAllowed &&
+			isNoRepeatingAllowed == otherSettings.isNoRepeatingAllowed &&
+			isMonthlyRepeatingAllowed == otherSettings.isMonthlyRepeatingAllowed &&
+			isRepeatingEveryXDaysAllowed == otherSettings.isRepeatingEveryXDaysAllowed)
+		{			
+			if(name == null)
+			{
+				if(otherSettings.getName() != null)
+				{					
+					return false;
+				}
+			}
+			else 
+			{				
+				if(otherSettings.getName() == null) 
+				{
+					return false;
+				}	
+				else 
+				{
+					if(!name.equals(otherSettings.getName()))	return false;
+				}
+			}
+			
+			
+			if(allowedCategoryIDs == null)
+			{
+				if(otherSettings.getAllowedCategoryIDs() != null)
+				{
+					return false;				
+				}
+				else
+				{
+					return true;
+				}
+			}
+			else 
+			{
+				if(otherSettings.getAllowedCategoryIDs() == null)
+				{
+					return false;
+				}
+				else
+				{					
+					if(allowedCategoryIDs.equals(otherSettings.getAllowedCategoryIDs())) 
+					{
+						return true;		
+					}
+				}				
+			}				
+		}			
+			
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java b/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java
index 1f4bf8cff6d1c102858758857b63032d6c777bf4..f06a91e6ea961f4796f234a47d4d0a1327ba4690 100644
--- a/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java
+++ b/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java
@@ -10,6 +10,6 @@ public class NormalPayment extends Payment
 	@Override
 	public String toString()
 	{
-		return "Payment [ID=" + super.getID() + ", amount=" + super.getAmount() + ", date=" + super.getDate() + ", categoryID=" + super.getCategoryID() + ", name=" + super.getName() + ", description=" + super.getDescription() + "]";
+		return "NormalPayment [ID=" + super.getID() + ", amount=" + super.getAmount() + ", date=" + super.getDate() + ", categoryID=" + super.getCategoryID() + ", name=" + super.getName() + ", description=" + super.getDescription() + "]";
 	}
 }
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java b/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java
index 39f7112904f4995b2e709ac6ac70882d5760b904..ecb61a71ccee4b7ca9cabcd9e3f5c7bdb26d39ce 100644
--- a/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java
+++ b/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java
@@ -36,23 +36,50 @@ public class PaymentHandler
 	}
 	
 	private ArrayList<Payment> filterByRepeating(FilterSettings filterSettings, ArrayList<Payment> paymentsList)
-	{
+	{		
 		if(filterSettings.isNoRepeatingAllowed() && filterSettings.isMonthlyRepeatingAllowed() && filterSettings.isRepeatingEveryXDaysAllowed())
 		{				
-			return payments;
+			return paymentsList;
 		}
 		
 		ArrayList<Payment> filteredPayments = new ArrayList<>();
 		for(Payment currentPayment : paymentsList)
-		{
-			//TODO
+		{			
+			//NormalPayment or rest
+			if(currentPayment instanceof NormalPayment || currentPayment.getID() == -1)
+			{						
+				if(filterSettings.isNoRepeatingAllowed())
+				{
+					filteredPayments.add(currentPayment);
+				}
+			}
+			//RepeatingPayment
+			else			
+			{
+				RepeatingPaymentEntry repeatingPayment = (RepeatingPaymentEntry)currentPayment;
+				if((repeatingPayment.getRepeatInterval() != 0 && filterSettings.isRepeatingEveryXDaysAllowed()) ||
+					(repeatingPayment.getRepeatMonthDay() != 0 && filterSettings.isMonthlyRepeatingAllowed()))
+				{
+					filteredPayments.add(currentPayment);
+				}
+			}
 		}
 		
-		return new ArrayList<>();		
+		return filteredPayments;		
 	}
 	
 	private ArrayList<Payment> filterByCategory(FilterSettings filterSettings, ArrayList<Payment> paymentsList)
-	{
+	{		
+		if(filterSettings.getAllowedCategoryIDs() == null)			
+		{
+			return paymentsList;
+		}
+		
+		if(filterSettings.getAllowedCategoryIDs().size() == 0)
+		{
+			return new ArrayList<>();
+		}
+		
 		ArrayList<Payment> filteredPayments = new ArrayList<>();
 		for(Payment currentPayment : paymentsList)
 		{
@@ -75,7 +102,7 @@ public class PaymentHandler
 		ArrayList<Payment> filteredPayments = new ArrayList<>();
 		for(Payment currentPayment : paymentsList)
 		{
-			if(currentPayment.getName().contains(filterSettings.getName()))
+			if(currentPayment.getName().toLowerCase().contains(filterSettings.getName().toLowerCase()))
 			{
 				filteredPayments.add(currentPayment);
 			}
@@ -111,6 +138,7 @@ public class PaymentHandler
 	{
 		ArrayList<Payment> filteredPayments = filterByType(filterSettings, payments);
 		filteredPayments = filterByType(filterSettings, filteredPayments);
+		filteredPayments = filterByRepeating(filterSettings, filteredPayments);
 		filteredPayments = filterByCategory(filterSettings, filteredPayments);
 		filteredPayments = filterByName(filterSettings, filteredPayments);
 		
diff --git a/src/de/deadlocker8/budgetmaster/ui/CategoryController.java b/src/de/deadlocker8/budgetmaster/ui/CategoryController.java
index 132ff978a14404d405a50888dcf9feb172bcb0ef..0cdb686ec6f8cef2adb986699347810bbe9e468c 100644
--- a/src/de/deadlocker8/budgetmaster/ui/CategoryController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/CategoryController.java
@@ -157,7 +157,7 @@ public class CategoryController implements Refreshable
 		{
 			ServerConnection connection = new ServerConnection(controller.getSettings());
 			connection.deleteCategory(ID);
-			controller.refresh();
+			controller.refresh(controller.getFilterSettings());
 		}
 		catch(Exception e)
 		{
diff --git a/src/de/deadlocker8/budgetmaster/ui/Controller.java b/src/de/deadlocker8/budgetmaster/ui/Controller.java
index 330ab88bd8240adfd996228b3a7ebad4f07338ee..0c7c7cbf73a750e58bcba1ea941896bd5f470cc6 100644
--- a/src/de/deadlocker8/budgetmaster/ui/Controller.java
+++ b/src/de/deadlocker8/budgetmaster/ui/Controller.java
@@ -9,6 +9,7 @@ import org.joda.time.DateTime;
 
 import de.deadlocker8.budgetmaster.logic.CategoryBudget;
 import de.deadlocker8.budgetmaster.logic.CategoryHandler;
+import de.deadlocker8.budgetmaster.logic.FilterSettings;
 import de.deadlocker8.budgetmaster.logic.NormalPayment;
 import de.deadlocker8.budgetmaster.logic.PaymentHandler;
 import de.deadlocker8.budgetmaster.logic.ServerConnection;
@@ -35,7 +36,7 @@ import javafx.util.Duration;
 import logger.Logger;
 import tools.AlertGenerator;
 
-public class Controller implements Refreshable
+public class Controller
 {
 	@FXML private AnchorPane anchorPaneMain;
 	@FXML private Label labelMonth;
@@ -64,6 +65,7 @@ public class Controller implements Refreshable
 	private ArrayList<CategoryBudget> categoryBudgets;
 	private PaymentHandler paymentHandler;
 	private CategoryHandler categoryHandler;
+	private FilterSettings filterSettings;
 
 	private boolean alertIsShowing = false;
 
@@ -72,6 +74,9 @@ public class Controller implements Refreshable
 		this.stage = stage;
 		currentDate = DateTime.now();
 		labelMonth.setText(currentDate.toString("MMMM yyyy"));
+		
+		filterSettings = new FilterSettings();
+		paymentHandler = new PaymentHandler();
 
 		settings = Utils.loadSettings();
 
@@ -144,7 +149,7 @@ public class Controller implements Refreshable
 		}
 		else
 		{
-			refresh();
+			refresh(filterSettings);
 		}
 	}
 
@@ -199,7 +204,7 @@ public class Controller implements Refreshable
 		currentDate = currentDate.minusMonths(1);
 		labelMonth.setText(currentDate.toString("MMMM yyyy"));
 
-		refresh();
+		refresh(filterSettings);
 	}
 
 	public void nextMonth()
@@ -207,7 +212,7 @@ public class Controller implements Refreshable
 		currentDate = currentDate.plusMonths(1);
 		labelMonth.setText(currentDate.toString("MMMM yyyy"));
 
-		refresh();
+		refresh(filterSettings);
 	}
 	
 	public void today()
@@ -215,7 +220,7 @@ public class Controller implements Refreshable
 		currentDate = DateTime.now();
 		labelMonth.setText(currentDate.toString("MMMM yyyy"));
 
-		refresh();
+		refresh(filterSettings);
 	}
 
 	public DateTime getCurrentDate()
@@ -244,7 +249,7 @@ public class Controller implements Refreshable
 		}
 	}
 
-	private void refreshAllTabs()
+	public void refreshAllTabs()
 	{
 		homeController.refresh();
 		paymentController.refresh();
@@ -267,13 +272,22 @@ public class Controller implements Refreshable
 		return categoryHandler;
 	}
 
+	public FilterSettings getFilterSettings()
+	{
+		return filterSettings;
+	}
+
+	public void setFilterSettings(FilterSettings filterSettings)
+	{
+		this.filterSettings = filterSettings;
+	}
+
 	public void about()
 	{
 		AlertGenerator.showAboutAlert(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"), bundle.getString("author"), icon, stage, null, false);
-	}
+	}	
 	
-	@Override
-	public void refresh()
+	public void refresh(FilterSettings newFilterSettings)
 	{
 		try
 		{
@@ -292,7 +306,8 @@ public class Controller implements Refreshable
 			
 			categoryHandler = new CategoryHandler(connection.getCategories());
 			
-			categoryBudgets = connection.getCategoryBudgets(currentDate.getYear(), currentDate.getMonthOfYear());		
+			categoryBudgets = connection.getCategoryBudgets(currentDate.getYear(), currentDate.getMonthOfYear());	
+			paymentHandler.filter(newFilterSettings);
 		}
 		catch(Exception e)
 		{
diff --git a/src/de/deadlocker8/budgetmaster/ui/FilterController.java b/src/de/deadlocker8/budgetmaster/ui/FilterController.java
index df84d9409393b14aaba6f8d34131c4894161cac7..9110406a5049af02e09f067d620a399a0b4e264f 100644
--- a/src/de/deadlocker8/budgetmaster/ui/FilterController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/FilterController.java
@@ -2,6 +2,7 @@ package de.deadlocker8.budgetmaster.ui;
 
 import java.util.ArrayList;
 
+import de.deadlocker8.budgetmaster.logic.Category;
 import de.deadlocker8.budgetmaster.logic.FilterSettings;
 import fontAwesome.FontIcon;
 import fontAwesome.FontIconType;
@@ -23,29 +24,70 @@ public class FilterController
 	@FXML private VBox vboxCategories;
 	@FXML private TextField textFieldSearch;
 	@FXML private Button buttonCancel;
+	@FXML private Button buttonReset;	
 	@FXML private Button buttonFilter;	
 
 	private Stage stage;
 	private Controller controller;
 	private PaymentController paymentController;
+	private FilterSettings filterSetttings;
 
-	public void init(Stage stage, Controller controller, PaymentController paymentController)
+	public void init(Stage stage, Controller controller, PaymentController paymentController, FilterSettings filterSettings)
 	{
 		this.stage = stage;
 		this.controller = controller;
 		this.paymentController = paymentController;
+		this.filterSetttings = filterSettings;
 
 		FontIcon iconCancel = new FontIcon(FontIconType.TIMES);
 		iconCancel.setSize(17);
 		iconCancel.setStyle("-fx-text-fill: white");
 		buttonCancel.setGraphic(iconCancel);
+		FontIcon iconReset = new FontIcon(FontIconType.UNDO);
+		iconReset.setSize(17);
+		iconReset.setStyle("-fx-text-fill: white");
+		buttonReset.setGraphic(iconReset);
 		FontIcon iconSave = new FontIcon(FontIconType.SAVE);
 		iconSave.setSize(17);
 		iconSave.setStyle("-fx-text-fill: white");
 		buttonFilter.setGraphic(iconSave);
 		
 		buttonCancel.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;");
-		buttonFilter.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;");	
+		buttonReset.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;");
+		buttonFilter.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;");		
+		
+		for(Category currentCategory : controller.getCategoryHandler().getCategories())
+		{
+			CheckBox newCheckBox = new CheckBox();
+			newCheckBox.setText(currentCategory.getName());
+			newCheckBox.setUserData(currentCategory.getID());
+			newCheckBox.setStyle("-fx-font-size: 14;");
+			vboxCategories.getChildren().add(newCheckBox);
+		}
+		
+		preselect();
+	}
+	
+	private void preselect()
+	{
+		checkBoxIncome.setSelected(filterSetttings.isIncomeAllowed());
+		checkBoxPayment.setSelected(filterSetttings.isPaymentAllowed());
+		checkBoxNoRepeating.setSelected(filterSetttings.isNoRepeatingAllowed());
+		checkBoxMonthlyRepeating.setSelected(filterSetttings.isMonthlyRepeatingAllowed());
+		checkBoxRepeatEveryXDays.setSelected(filterSetttings.isRepeatingEveryXDaysAllowed());
+		
+		ArrayList<Integer> allowedCategoryIDs = filterSetttings.getAllowedCategoryIDs();
+		
+		for(Node node : vboxCategories.getChildren())
+		{
+			CheckBox currentCheckBox = (CheckBox)node;
+			if(allowedCategoryIDs == null || allowedCategoryIDs.contains(currentCheckBox.getUserData()))				
+			{
+				currentCheckBox.setSelected(true);
+			}
+		}
+		
+		textFieldSearch.setText(filterSetttings.getName());
 	}
 
 	public void filter()
@@ -54,8 +96,8 @@ public class FilterController
 		boolean isPaymentAllowed = checkBoxPayment.isSelected();
 		
 		boolean isNoRepeatingAllowed = checkBoxNoRepeating.isSelected();
-		boolean isMonthlyRepeatingAllowed = checkBoxNoRepeating.isSelected();
-		boolean isRepeatingEveryXDaysAllowed = checkBoxNoRepeating.isSelected();
+		boolean isMonthlyRepeatingAllowed = checkBoxMonthlyRepeating.isSelected();
+		boolean isRepeatingEveryXDaysAllowed = checkBoxRepeatEveryXDays.isSelected();
 		
 		ArrayList<Integer> allowedCategoryIDs = new ArrayList<>(); 
 		for(Node node : vboxCategories.getChildren())
@@ -67,26 +109,41 @@ public class FilterController
 			}
 		}
 		
+		if(allowedCategoryIDs.size() == controller.getCategoryHandler().getCategories().size())
+		{
+			allowedCategoryIDs = null;
+		}
+		
 		String name = textFieldSearch.getText();
 		if(name.equals(""))
 		{
 			name = null;
 		}
 		
-		//TODO get new list from server first
-		controller.getPaymentHandler().filter(new FilterSettings(isIncomeAllowed, 
-																isPaymentAllowed, 
-																isNoRepeatingAllowed,
-																isMonthlyRepeatingAllowed, 
-																isRepeatingEveryXDaysAllowed, 
-																allowedCategoryIDs, 
-																name));
+		//get new unfiltered list from server
+		controller.refresh(new FilterSettings());
 		
-		stage.close();
-		paymentController.getController().refresh();
+		FilterSettings newFilterSettings = new FilterSettings(isIncomeAllowed, 
+															isPaymentAllowed, 
+															isNoRepeatingAllowed,
+															isMonthlyRepeatingAllowed, 
+															isRepeatingEveryXDaysAllowed, 
+															allowedCategoryIDs, 
+															name);
+		
+		controller.setFilterSettings(newFilterSettings);
+		controller.getPaymentHandler().filter(newFilterSettings);
 		
-		//TODO button reset
-		//TODO set userData for category checkboxes
+		stage.close();
+		paymentController.getController().refreshAllTabs();		
+	}
+	
+	public void reset()
+	{
+		filterSetttings = new FilterSettings();
+		preselect();
+		controller.setFilterSettings(filterSetttings);
+		controller.refresh(filterSetttings);
 	}
 
 	public void cancel()
diff --git a/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml
index 5c3bdeaf59c4bcc0988a45874d1232633e9073cc..2c8c8a596bbd0233f062f8e260dd4dd538c03f13 100644
--- a/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml
+++ b/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml
@@ -4,13 +4,14 @@
 <?import javafx.scene.control.Button?>
 <?import javafx.scene.control.CheckBox?>
 <?import javafx.scene.control.Label?>
+<?import javafx.scene.control.ScrollPane?>
 <?import javafx.scene.control.TextField?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.text.Font?>
 
-<AnchorPane prefHeight="600.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.budgetmaster.ui.NewPaymentController">
+<AnchorPane prefHeight="600.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.budgetmaster.ui.FilterController">
    <children>
       <VBox prefHeight="273.0" prefWidth="465.0" spacing="25.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0">
          <children>
@@ -66,14 +67,18 @@
                   </CheckBox>
                </children>
             </VBox>
-            <VBox prefHeight="33.0" prefWidth="422.0" spacing="10.0">
+            <VBox prefHeight="150.0" prefWidth="422.0" spacing="10.0">
                <children>
                   <Label text="Kategorien">
                      <font>
                         <Font name="System Bold" size="16.0" />
                      </font>
                   </Label>
-                  <VBox fx:id="vboxCategories" prefHeight="200.0" prefWidth="100.0" />
+                  <ScrollPane prefHeight="93.0" prefWidth="422.0" VBox.vgrow="ALWAYS">
+                     <content>
+                        <VBox fx:id="vboxCategories" spacing="5.0" />
+                     </content>
+                  </ScrollPane>
                </children>
             </VBox>
             <VBox prefHeight="33.0" prefWidth="422.0" VBox.vgrow="ALWAYS">
@@ -93,6 +98,14 @@
                         <Font name="System Bold" size="14.0" />
                      </font>
                   </Button>
+                  <Button fx:id="buttonReset" mnemonicParsing="false" onAction="#reset" text="Zurücksetzen">
+                     <font>
+                        <Font name="System Bold" size="14.0" />
+                     </font>
+                     <HBox.margin>
+                        <Insets left="25.0" />
+                     </HBox.margin>
+                  </Button>
                   <Button fx:id="buttonFilter" mnemonicParsing="false" onAction="#filter" text="Filtern">
                      <font>
                         <Font name="System Bold" size="14.0" />
diff --git a/src/de/deadlocker8/budgetmaster/ui/HomeController.java b/src/de/deadlocker8/budgetmaster/ui/HomeController.java
index 2257b415aad135a281963532262da9a5059e6ef9..ab2bb352069d6ad6a76237b90cd55989d57e64f4 100644
--- a/src/de/deadlocker8/budgetmaster/ui/HomeController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/HomeController.java
@@ -84,7 +84,7 @@ public class HomeController implements Refreshable
 			}
 			else
 			{
-				labelBudget.setStyle("-fx-text-fill: #000000");
+				labelBudget.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
 			}
 			labelStartBudget.setText("von " + String.valueOf(Helpers.NUMBER_FORMAT.format(budget.getIncomeSum()).replace(".", ",")) + " " + controller.getSettings().getCurrency() + " verbleibend");
 			
diff --git a/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java b/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java
index 5f34e6cd4186045210fec19f36c31e13bd5d799c..4a94063bfc834cc950c48a9956a696740eb65fb2 100644
--- a/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java
@@ -166,7 +166,7 @@ public class NewCategoryController
 		}
 		
 		stage.close();
-		categoryController.getController().refresh();
+		categoryController.getController().refresh(controller.getFilterSettings());
 	}
 
 	public void cancel()
diff --git a/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java
index 06c3c5ff48fe075f12d3cc42633caf9521bd1e57..51355b5c2be6edac9a67530244c1cdb6299c48b4 100644
--- a/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java
@@ -368,7 +368,7 @@ public class NewPaymentController
 		}
 
 		stage.close();
-		paymentController.getController().refresh();
+		paymentController.getController().refresh(controller.getFilterSettings());
 	}
 
 	public void cancel()
diff --git a/src/de/deadlocker8/budgetmaster/ui/PaymentController.java b/src/de/deadlocker8/budgetmaster/ui/PaymentController.java
index fd83ab92b91cad1f42e4d17fc7132ec308c8c59f..db5adcc84d3d952eae84f269b1acce9e1e9d976e 100644
--- a/src/de/deadlocker8/budgetmaster/ui/PaymentController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/PaymentController.java
@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 
 import de.deadlocker8.budgetmaster.logic.Budget;
+import de.deadlocker8.budgetmaster.logic.FilterSettings;
 import de.deadlocker8.budgetmaster.logic.Helpers;
 import de.deadlocker8.budgetmaster.logic.NormalPayment;
 import de.deadlocker8.budgetmaster.logic.Payment;
@@ -39,8 +40,10 @@ public class PaymentController implements Refreshable
 	@FXML private Label labelIncomes;
 	@FXML private Label labelPayment;
 	@FXML private Label labelPayments;
+	@FXML private Label labelFilterActive;
 	@FXML private ListView<Payment> listView;
 	@FXML private Button buttonNewIncome;
+	@FXML private Button buttonFilter;
 	@FXML private Button buttonNewPayment;
 
 	private Controller controller;
@@ -94,10 +97,19 @@ public class PaymentController implements Refreshable
 		iconIncome.setSize(18);
 		iconIncome.setStyle("-fx-text-fill: white");
 		buttonNewIncome.setGraphic(iconIncome);
+		FontIcon iconFilter = new FontIcon(FontIconType.FILTER);
+		iconFilter.setSize(18);
+		iconFilter.setStyle("-fx-text-fill: white");
+		buttonFilter.setGraphic(iconFilter);
 		FontIcon iconPayment = new FontIcon(FontIconType.UPLOAD);
 		iconPayment.setSize(18);
 		iconPayment.setStyle("-fx-text-fill: white");
 		buttonNewPayment.setGraphic(iconPayment);
+		
+		FontIcon iconWarning = new FontIcon(FontIconType.WARNING);
+		iconWarning.setSize(13);
+		iconWarning.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
+		labelFilterActive.setGraphic(iconWarning);
 
 		// apply theme
 		anchorPaneMain.setStyle("-fx-background-color: #F4F4F4;");
@@ -105,7 +117,9 @@ public class PaymentController implements Refreshable
 		labelIncomes.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
 		labelPayment.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
 		labelPayments.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
+		labelFilterActive.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
 		buttonNewIncome.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;");
+		buttonFilter.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;");
 		buttonNewPayment.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;");
 
 		refresh();
@@ -185,7 +199,7 @@ public class PaymentController implements Refreshable
 		{
 			ServerConnection connection = new ServerConnection(controller.getSettings());
 			connection.deleteNormalPayment(payment);
-			controller.refresh();
+			controller.refresh(controller.getFilterSettings());
 		}
 		catch(Exception e)
 		{
@@ -200,7 +214,7 @@ public class PaymentController implements Refreshable
 		{
 			ServerConnection connection = new ServerConnection(controller.getSettings());
 			connection.deleteRepeatingPayment(payment);
-			controller.refresh();
+			controller.refresh(controller.getFilterSettings());
 		}
 		catch(Exception e)
 		{
@@ -219,7 +233,7 @@ public class PaymentController implements Refreshable
 			connection.deleteRepeatingPayment(payment);
 			connection.addRepeatingPayment(newRepeatingPayment);
 
-			controller.refresh();
+			controller.refresh(controller.getFilterSettings());
 		}
 		catch(Exception e)
 		{
@@ -227,6 +241,29 @@ public class PaymentController implements Refreshable
 			controller.showConnectionErrorAlert();
 		}
 	}
+	
+	public void filter()
+	{
+		try
+		{
+			FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml"));
+			Parent root = (Parent)fxmlLoader.load();
+			Stage newStage = new Stage();
+			newStage.initOwner(controller.getStage());
+			newStage.initModality(Modality.APPLICATION_MODAL);	
+			newStage.setTitle("Filter");
+			newStage.setScene(new Scene(root));
+			newStage.getIcons().add(controller.getIcon());
+			newStage.setResizable(false);
+			FilterController newController = fxmlLoader.getController();			
+			newController.init(newStage, controller, this, controller.getFilterSettings());
+			newStage.show();
+		}
+		catch(IOException e)
+		{
+			Logger.error(e);
+		}
+	}
 
 	public Controller getController()
 	{
@@ -238,6 +275,15 @@ public class PaymentController implements Refreshable
 	{
 		refreshListView();
 		refreshCounter();
+		
+		if(controller.getFilterSettings().equals(new FilterSettings()))
+		{
+			labelFilterActive.setVisible(false);
+		}
+		else
+		{
+			labelFilterActive.setVisible(true);
+		}
 
 		Label labelPlaceholder = new Label("Keine Daten verfügbar");		
 		labelPlaceholder.setStyle("-fx-font-size: 16");
diff --git a/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml b/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml
index c4e1cfb32007347f48279cf2f4163540eee1957b..6222f5e8f8219b798a02de61cdcab31573d41e66 100644
--- a/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml
+++ b/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml
@@ -22,6 +22,21 @@
                      </font>
                   </Button>
                   <Region HBox.hgrow="ALWAYS" />
+                  <VBox alignment="CENTER" spacing="10.0">
+                     <children>
+                        <Button fx:id="buttonFilter" mnemonicParsing="false" onAction="#filter" text="Filter">
+                           <font>
+                              <Font name="System Bold" size="14.0" />
+                           </font>
+                        </Button>
+                        <Label fx:id="labelFilterActive" text="Filter aktiv">
+                           <font>
+                              <Font name="System Bold" size="13.0" />
+                           </font>
+                        </Label>
+                     </children>
+                  </VBox>
+                  <Region HBox.hgrow="ALWAYS" />
                   <Button fx:id="buttonNewPayment" mnemonicParsing="false" onAction="#newPayment" text=" Neue Ausgabe">
                      <font>
                         <Font name="System Bold" size="14.0" />
diff --git a/src/de/deadlocker8/budgetmaster/ui/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/SettingsController.java
index d82df810dbb1aaf7349dd76e6e6c2cce5bd943ec..471619dc9dbe1c4788c6de5b70a64e7354e13d9f 100644
--- a/src/de/deadlocker8/budgetmaster/ui/SettingsController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/SettingsController.java
@@ -98,7 +98,7 @@ public class SettingsController
 						Logger.error(e);
 						AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Speichern der Einstellungen ist ein Fehler aufgetreten", controller.getIcon(), controller.getStage(), null, false);
 					}	
-					controller.refresh();
+					controller.refresh(controller.getFilterSettings());
 					controller.showNotification("Erfolgreich gespeichert");
 				}
 				else