diff --git a/build/BudgetMaster.exe b/build/BudgetMaster.exe
index ef395b57ce00f9c3d544f7abed500a8cd1b6656a..adad21672f117432ecba5acc5880cd4de2b94f58 100644
Binary files a/build/BudgetMaster.exe and b/build/BudgetMaster.exe differ
diff --git a/build/BudgetMasterClient.jar b/build/BudgetMasterClient.jar
index 6dfd13846f8e36ec5f30cc3a7d34fce9b244e3b6..3fd4c2f6cf2308eab6c361001b09d5bb34572977 100644
Binary files a/build/BudgetMasterClient.jar and b/build/BudgetMasterClient.jar differ
diff --git a/build/BudgetMasterServer.jar b/build/BudgetMasterServer.jar
index 78f8a39be4b9aa71bfe1a8fd5b35a37419b8ef19..7f2b0defbbc1662462382008db0793389329842a 100644
Binary files a/build/BudgetMasterServer.jar and b/build/BudgetMasterServer.jar differ
diff --git a/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java b/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a72815d0674d66ea5925873bbe18ece78606aee
--- /dev/null
+++ b/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java
@@ -0,0 +1,174 @@
+package de.deadlocker8.budgetmaster.logic;
+
+import java.util.ArrayList;
+
+public class FilterSettings
+{
+	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;
+		this.isPaymentAllowed = isPaymentAllowed;
+		this.isNoRepeatingAllowed = isNoRepeatingAllowed;
+		this.isMonthlyRepeatingAllowed = isMonthlyRepeatingAllowed;
+		this.isRepeatingEveryXDaysAllowed = isRepeatingEveryXDaysAllowed;
+		this.allowedCategoryIDs = allowedCategoryIDs;
+		this.name = name;
+	}
+
+	public FilterSettings()
+	{
+		this.isIncomeAllowed = true;
+		this.isPaymentAllowed = true;
+		this.isNoRepeatingAllowed = true;
+		this.isMonthlyRepeatingAllowed = true;
+		this.isRepeatingEveryXDaysAllowed = true;
+		this.allowedCategoryIDs = null;
+		this.name = null;
+	}
+
+	public boolean isIncomeAllowed()
+	{
+		return isIncomeAllowed;
+	}
+
+	public void setIncomeAllowed(boolean isIncomeAllowed)
+	{
+		this.isIncomeAllowed = isIncomeAllowed;
+	}
+
+	public boolean isPaymentAllowed()
+	{
+		return isPaymentAllowed;
+	}
+
+	public void setPaymentAllowed(boolean isPaymentAllowed)
+	{
+		this.isPaymentAllowed = isPaymentAllowed;
+	}
+
+	public boolean isNoRepeatingAllowed()
+	{
+		return isNoRepeatingAllowed;
+	}
+
+	public void setNoRepeatingAllowed(boolean isNoRepeatingAllowed)
+	{
+		this.isNoRepeatingAllowed = isNoRepeatingAllowed;
+	}
+
+	public boolean isMonthlyRepeatingAllowed()
+	{
+		return isMonthlyRepeatingAllowed;
+	}
+
+	public void setMonthlyRepeatingAllowed(boolean isMonthlyRepeatingAllowed)
+	{
+		this.isMonthlyRepeatingAllowed = isMonthlyRepeatingAllowed;
+	}
+
+	public boolean isRepeatingEveryXDaysAllowed()
+	{
+		return isRepeatingEveryXDaysAllowed;
+	}
+
+	public void setRepeatingEveryXDaysAllowed(boolean isRepeatingEveryXDaysAllowed)
+	{
+		this.isRepeatingEveryXDaysAllowed = isRepeatingEveryXDaysAllowed;
+	}
+
+	public ArrayList<Integer> getAllowedCategoryIDs()
+	{
+		return allowedCategoryIDs;
+	}
+
+	public void setAllowedCategoryIDs(ArrayList<Integer> allowedCategoryIDs)
+	{
+		this.allowedCategoryIDs = allowedCategoryIDs;
+	}
+
+	public String getName()
+	{
+		return name;
+	}
+
+	public void setName(String name)
+	{
+		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
new file mode 100644
index 0000000000000000000000000000000000000000..ecb61a71ccee4b7ca9cabcd9e3f5c7bdb26d39ce
--- /dev/null
+++ b/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java
@@ -0,0 +1,152 @@
+package de.deadlocker8.budgetmaster.logic;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.stream.Collectors;
+
+public class PaymentHandler
+{
+	private ArrayList<Payment> payments;
+
+	public PaymentHandler()
+	{	
+		payments = new ArrayList<>();
+	}
+
+	public ArrayList<Payment> getPayments()
+	{
+		return payments;
+	}
+
+	public void setPayments(ArrayList<Payment> payments)
+	{
+		this.payments = payments;
+	}
+	
+	public void sort()
+	{
+		Collections.sort(payments, new Comparator<Payment>() {
+	        @Override
+	        public int compare(Payment payment1, Payment payment2)
+	        {
+	            return  payment2.getDate().compareTo(payment1.getDate());
+	        }
+	    });		
+	}
+	
+	private ArrayList<Payment> filterByRepeating(FilterSettings filterSettings, ArrayList<Payment> paymentsList)
+	{		
+		if(filterSettings.isNoRepeatingAllowed() && filterSettings.isMonthlyRepeatingAllowed() && filterSettings.isRepeatingEveryXDaysAllowed())
+		{				
+			return paymentsList;
+		}
+		
+		ArrayList<Payment> filteredPayments = new ArrayList<>();
+		for(Payment currentPayment : paymentsList)
+		{			
+			//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 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)
+		{
+			if(filterSettings.getAllowedCategoryIDs().contains(currentPayment.getCategoryID()))
+			{
+				filteredPayments.add(currentPayment);
+			}
+		}
+		
+		return filteredPayments;		
+	}
+	
+	private ArrayList<Payment> filterByName(FilterSettings filterSettings, ArrayList<Payment> paymentsList)
+	{
+		if(filterSettings.getName() == null)
+		{
+			return paymentsList;
+		}
+		
+		ArrayList<Payment> filteredPayments = new ArrayList<>();
+		for(Payment currentPayment : paymentsList)
+		{
+			if(currentPayment.getName().toLowerCase().contains(filterSettings.getName().toLowerCase()))
+			{
+				filteredPayments.add(currentPayment);
+			}
+		}
+		
+		return filteredPayments;		
+	} 
+	
+	private ArrayList<Payment> filterByType(FilterSettings filterSettings, ArrayList<Payment> paymentsList)
+	{		
+		if(filterSettings.isIncomeAllowed() && filterSettings.isPaymentAllowed())
+		{			
+			return paymentsList;
+		}
+
+		if(filterSettings.isIncomeAllowed())	
+		{
+			return new ArrayList<Payment>(paymentsList.stream().
+				filter(p -> p.getAmount() > 0).
+				collect(Collectors.toList()));
+		}
+		else if(filterSettings.isPaymentAllowed())	
+		{
+			return new ArrayList<Payment>(paymentsList.stream().
+					filter(p -> p.getAmount() < 0).
+					collect(Collectors.toList()));
+		}
+		
+		return new ArrayList<>();
+	}
+	
+	public void filter(FilterSettings filterSettings)
+	{
+		ArrayList<Payment> filteredPayments = filterByType(filterSettings, payments);
+		filteredPayments = filterByType(filterSettings, filteredPayments);
+		filteredPayments = filterByRepeating(filterSettings, filteredPayments);
+		filteredPayments = filterByCategory(filterSettings, filteredPayments);
+		filteredPayments = filterByName(filterSettings, filteredPayments);
+		
+		payments = filteredPayments;
+	}
+	
+	public String toString()
+	{
+		return "PaymentHandler [payments=" + payments + "]";
+	}
+}
diff --git a/src/de/deadlocker8/budgetmaster/main/_de.properties b/src/de/deadlocker8/budgetmaster/main/_de.properties
index f083d697d2985676e121ab2270c8a15a9d761b3a..4e7b83ceadac1175fddd4a734c5008a4c550d4d2 100644
--- a/src/de/deadlocker8/budgetmaster/main/_de.properties
+++ b/src/de/deadlocker8/budgetmaster/main/_de.properties
@@ -1,7 +1,7 @@
 app.name=BudgetMaster
-version.code=1
-version.name=1.0.0
-version.date=08.04.17
+version.code=2
+version.name=1.1.0
+version.date=12.04.17
 author=Robert Goldmann
 
 folder=Deadlocker/BudgetMaster
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 c70f4fd819f9fcafa3eade3d5e5b974c086aa11a..0c7c7cbf73a750e58bcba1ea941896bd5f470cc6 100644
--- a/src/de/deadlocker8/budgetmaster/ui/Controller.java
+++ b/src/de/deadlocker8/budgetmaster/ui/Controller.java
@@ -2,8 +2,6 @@ package de.deadlocker8.budgetmaster.ui;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.Locale;
 import java.util.ResourceBundle;
 
@@ -11,8 +9,9 @@ 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.Payment;
+import de.deadlocker8.budgetmaster.logic.PaymentHandler;
 import de.deadlocker8.budgetmaster.logic.ServerConnection;
 import de.deadlocker8.budgetmaster.logic.Settings;
 import de.deadlocker8.budgetmaster.logic.Utils;
@@ -37,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,8 +63,9 @@ public class Controller implements Refreshable
 	private Settings settings;
 	private DateTime currentDate;
 	private ArrayList<CategoryBudget> categoryBudgets;
-	private ArrayList<Payment> payments;
+	private PaymentHandler paymentHandler;
 	private CategoryHandler categoryHandler;
+	private FilterSettings filterSettings;
 
 	private boolean alertIsShowing = false;
 
@@ -74,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();
 
@@ -146,7 +149,7 @@ public class Controller implements Refreshable
 		}
 		else
 		{
-			refresh();
+			refresh(filterSettings);
 		}
 	}
 
@@ -201,7 +204,7 @@ public class Controller implements Refreshable
 		currentDate = currentDate.minusMonths(1);
 		labelMonth.setText(currentDate.toString("MMMM yyyy"));
 
-		refresh();
+		refresh(filterSettings);
 	}
 
 	public void nextMonth()
@@ -209,7 +212,7 @@ public class Controller implements Refreshable
 		currentDate = currentDate.plusMonths(1);
 		labelMonth.setText(currentDate.toString("MMMM yyyy"));
 
-		refresh();
+		refresh(filterSettings);
 	}
 	
 	public void today()
@@ -217,7 +220,7 @@ public class Controller implements Refreshable
 		currentDate = DateTime.now();
 		labelMonth.setText(currentDate.toString("MMMM yyyy"));
 
-		refresh();
+		refresh(filterSettings);
 	}
 
 	public DateTime getCurrentDate()
@@ -246,7 +249,7 @@ public class Controller implements Refreshable
 		}
 	}
 
-	private void refreshAllTabs()
+	public void refreshAllTabs()
 	{
 		homeController.refresh();
 		paymentController.refresh();
@@ -259,9 +262,9 @@ public class Controller implements Refreshable
 		return categoryBudgets;
 	}
 
-	public ArrayList<Payment> getPayments()
+	public PaymentHandler getPaymentHandler()
 	{
-		return payments;
+		return paymentHandler;
 	}
 
 	public CategoryHandler getCategoryHandler()
@@ -269,38 +272,42 @@ 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
 		{
 			ServerConnection connection = new ServerConnection(settings);			
 			
-			payments = new ArrayList<>();
-			payments.addAll(connection.getPayments(currentDate.getYear(), currentDate.getMonthOfYear()));
-			payments.addAll(connection.getRepeatingPayments(currentDate.getYear(), currentDate.getMonthOfYear()));			
-			Collections.sort(payments, new Comparator<Payment>() {
-		        @Override
-		        public int compare(Payment payment1, Payment payment2)
-		        {
-		            return  payment2.getDate().compareTo(payment1.getDate());
-		        }
-		    });		
+			paymentHandler = new PaymentHandler();
+			paymentHandler.getPayments().addAll(connection.getPayments(currentDate.getYear(), currentDate.getMonthOfYear()));
+			paymentHandler.getPayments().addAll(connection.getRepeatingPayments(currentDate.getYear(), currentDate.getMonthOfYear()));			
+			paymentHandler.sort();
 			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", ""));				
+				paymentHandler.getPayments().add(new NormalPayment(-1, rest, currentDate.withDayOfMonth(1).toString("yyyy-MM-dd"), 2, "Übertrag", ""));				
 			}
 			
 			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
new file mode 100644
index 0000000000000000000000000000000000000000..49b2a1505ffed5d3cb1363c181fcc66bb0015d05
--- /dev/null
+++ b/src/de/deadlocker8/budgetmaster/ui/FilterController.java
@@ -0,0 +1,167 @@
+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;
+import javafx.fxml.FXML;
+import javafx.scene.Node;
+import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+public class FilterController
+{
+	@FXML private CheckBox checkBoxIncome;
+	@FXML private CheckBox checkBoxPayment;
+	@FXML private CheckBox checkBoxNoRepeating;
+	@FXML private CheckBox checkBoxMonthlyRepeating;
+	@FXML private CheckBox checkBoxRepeatEveryXDays;
+	@FXML private VBox vboxCategories;
+	@FXML private TextField textFieldSearch;
+	@FXML private Button buttonCancel;
+	@FXML private Button buttonReset;
+	@FXML private Button buttonFilter;
+	@FXML private Button buttonCategoryAll;
+	@FXML private Button buttonCategoryNone;
+
+	private Stage stage;
+	private Controller controller;
+	private PaymentController paymentController;
+	private FilterSettings filterSetttings;
+
+	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.FILTER);
+		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;");
+		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;");
+		buttonCategoryAll.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 13;");
+		buttonCategoryNone.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 13;");
+
+		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()
+	{
+		boolean isIncomeAllowed = checkBoxIncome.isSelected();
+		boolean isPaymentAllowed = checkBoxPayment.isSelected();
+
+		boolean isNoRepeatingAllowed = checkBoxNoRepeating.isSelected();
+		boolean isMonthlyRepeatingAllowed = checkBoxMonthlyRepeating.isSelected();
+		boolean isRepeatingEveryXDaysAllowed = checkBoxRepeatEveryXDays.isSelected();
+
+		ArrayList<Integer> allowedCategoryIDs = new ArrayList<>();
+		for(Node node : vboxCategories.getChildren())
+		{
+			CheckBox currentCheckBox = (CheckBox)node;
+			if(currentCheckBox.isSelected())
+			{
+				allowedCategoryIDs.add((int)currentCheckBox.getUserData());
+			}
+		}
+
+		if(allowedCategoryIDs.size() == controller.getCategoryHandler().getCategories().size())
+		{
+			allowedCategoryIDs = null;
+		}
+
+		String name = textFieldSearch.getText();
+		if(name != null && name.equals(""))
+		{
+			name = null;
+		}
+
+		// get new unfiltered list from server
+		controller.refresh(new FilterSettings());
+
+		FilterSettings newFilterSettings = new FilterSettings(isIncomeAllowed, isPaymentAllowed, isNoRepeatingAllowed, isMonthlyRepeatingAllowed, isRepeatingEveryXDaysAllowed, allowedCategoryIDs, name);
+
+		controller.setFilterSettings(newFilterSettings);
+		controller.getPaymentHandler().filter(newFilterSettings);
+
+		stage.close();
+		paymentController.getController().refreshAllTabs();
+	}
+
+	public void reset()
+	{
+		filterSetttings = new FilterSettings();
+		preselect();
+		controller.setFilterSettings(filterSetttings);
+		controller.refresh(filterSetttings);
+	}
+
+	public void cancel()
+	{
+		stage.close();
+	}	
+
+	public void enableAllCategories()
+	{
+		for(Node node : vboxCategories.getChildren())
+		{
+			((CheckBox)node).setSelected(true);
+		}
+	}
+	
+	public void disableAllCategories()
+	{
+		for(Node node : vboxCategories.getChildren())
+		{
+			((CheckBox)node).setSelected(false);
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..643fd670ecbe7c76ad87e023a0608e9037bac18c
--- /dev/null
+++ b/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?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.Region?>
+<?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.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>
+            <Label text="Filtern nach:">
+               <font>
+                  <Font name="System Bold" size="18.0" />
+               </font>
+            </Label>
+            <VBox prefHeight="15.0" prefWidth="422.0" spacing="10.0">
+               <children>
+                  <Label text="Art">
+                     <font>
+                        <Font name="System Bold" size="16.0" />
+                     </font>
+                  </Label>
+                  <HBox prefHeight="10.0" prefWidth="422.0" spacing="25.0">
+                     <children>
+                        <CheckBox fx:id="checkBoxIncome" mnemonicParsing="false" text="Einnahme">
+                           <font>
+                              <Font size="14.0" />
+                           </font>
+                        </CheckBox>
+                        <CheckBox fx:id="checkBoxPayment" mnemonicParsing="false" text="Ausgabe">
+                           <font>
+                              <Font size="14.0" />
+                           </font>
+                        </CheckBox>
+                     </children>
+                  </HBox>
+               </children>
+            </VBox>
+            <VBox prefHeight="33.0" prefWidth="422.0" spacing="10.0">
+               <children>
+                  <Label text="Wiederholung">
+                     <font>
+                        <Font name="System Bold" size="16.0" />
+                     </font>
+                  </Label>
+                  <CheckBox fx:id="checkBoxNoRepeating" mnemonicParsing="false" text="keine Wiederholung">
+                     <font>
+                        <Font size="14.0" />
+                     </font>
+                  </CheckBox>
+                  <CheckBox fx:id="checkBoxMonthlyRepeating" mnemonicParsing="false" text="monatlich">
+                     <font>
+                        <Font size="14.0" />
+                     </font>
+                  </CheckBox>
+                  <CheckBox fx:id="checkBoxRepeatEveryXDays" mnemonicParsing="false" text="alle X Tage">
+                     <font>
+                        <Font size="14.0" />
+                     </font>
+                  </CheckBox>
+               </children>
+            </VBox>
+            <VBox prefHeight="150.0" prefWidth="422.0" spacing="10.0">
+               <children>
+                  <HBox spacing="10.0">
+                     <children>
+                        <Label text="Kategorien">
+                           <font>
+                              <Font name="System Bold" size="16.0" />
+                           </font>
+                        </Label>
+                        <Region prefWidth="200.0" HBox.hgrow="ALWAYS" />
+                        <Button fx:id="buttonCategoryAll" mnemonicParsing="false" onAction="#enableAllCategories" text="Alle">
+                           <font>
+                              <Font name="System Bold" size="13.0" />
+                           </font>
+                        </Button>
+                        <Button fx:id="buttonCategoryNone" mnemonicParsing="false" onAction="#disableAllCategories" text="Keine">
+                           <font>
+                              <Font name="System Bold" size="13.0" />
+                           </font>
+                        </Button>
+                     </children>
+                  </HBox>
+                  <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">
+               <children>
+                  <Label text="Name">
+                     <font>
+                        <Font name="System Bold" size="16.0" />
+                     </font>
+                  </Label>
+                  <TextField fx:id="textFieldSearch" />
+               </children>
+            </VBox>
+            <HBox alignment="CENTER" prefHeight="30.0" prefWidth="465.0" spacing="10.0">
+               <children>
+                  <Button fx:id="buttonCancel" mnemonicParsing="false" onAction="#cancel" text="Abbrechen">
+                     <font>
+                        <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" />
+                     </font>
+                     <HBox.margin>
+                        <Insets left="25.0" />
+                     </HBox.margin>
+                  </Button>
+               </children>
+               <VBox.margin>
+                  <Insets top="10.0" />
+               </VBox.margin>
+            </HBox>
+         </children>
+      </VBox>
+   </children>
+</AnchorPane>
diff --git a/src/de/deadlocker8/budgetmaster/ui/HomeController.java b/src/de/deadlocker8/budgetmaster/ui/HomeController.java
index 6035ff1ea0fe95add2391f1745baada876f0d366..ab2bb352069d6ad6a76237b90cd55989d57e64f4 100644
--- a/src/de/deadlocker8/budgetmaster/ui/HomeController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/HomeController.java
@@ -73,9 +73,9 @@ public class HomeController implements Refreshable
 	
 	private void refreshCounter()
 	{
-		if(controller.getPayments() != null)
+		if(controller.getPaymentHandler().getPayments() != null)
 		{
-			Budget budget = new Budget(controller.getPayments());	
+			Budget budget = new Budget(controller.getPaymentHandler().getPayments());	
 			double remaining = budget.getIncomeSum() + budget.getPaymentSum();
 			labelBudget.setText(String.valueOf(Helpers.NUMBER_FORMAT.format(remaining).replace(".", ",")) + " " + controller.getSettings().getCurrency());
 			if(remaining <= 0)
@@ -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 5a3009bfdaaf3ed58b29e8ec1c99df5f31622b2c..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();
@@ -160,7 +174,7 @@ public class PaymentController implements Refreshable
 	{
 		listView.getItems().clear();
 
-		ArrayList<Payment> payments = controller.getPayments();
+		ArrayList<Payment> payments = controller.getPaymentHandler().getPayments();
 		if(payments != null)
 		{
 			listView.getItems().setAll(payments);
@@ -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
diff --git a/src/de/deadlocker8/budgetmasterserver/main/_de.properties b/src/de/deadlocker8/budgetmasterserver/main/_de.properties
index ed61ad0100bb678c945a6c00046ce13b823c4836..b231f1d78f4e46819869a44ca52fbc7a2efe6b88 100644
--- a/src/de/deadlocker8/budgetmasterserver/main/_de.properties
+++ b/src/de/deadlocker8/budgetmasterserver/main/_de.properties
@@ -1,5 +1,5 @@
 app.name=BudgetMasterServer
-version.code=1
-version.name=1.0.0
-version.date=08.04.17
+version.code=2
+version.name=1.1.0
+version.date=12.04.17
 author=Robert Goldmann
\ No newline at end of file