diff --git a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java
index 831183ddebbb2de68afe98701bbc5522366193f4..40d93c169d199eb92297d94c1cf6af0de74b8575 100644
--- a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java
+++ b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java
@@ -331,7 +331,7 @@ public class ServerConnection
 		}
 	}
 	
-	public ArrayList<Payment> getPaymentForSearch(String query, boolean searchName, boolean searchDescription, boolean searchCategoryName) throws Exception
+	public ArrayList<Payment> getPaymentForSearch(String query, boolean searchName, boolean searchDescription, boolean searchCategoryName, boolean searchTags) throws Exception
 	{
 		String urlString = settings.getUrl() + "/payment/search?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&query=" + query;
 		if(searchName)
@@ -349,6 +349,11 @@ public class ServerConnection
 			urlString += "&categoryName=" + 1;
 		}
 		
+		if(searchTags)
+		{
+			urlString += "&tags=" + 1;
+		}
+		
 		URL url = new URL(urlString);
 		HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection();
 		httpsCon.setDoOutput(true);
diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties
index 155447b83f6e0030c20793342ba8e83b97173dd2..398678928caab9286d336a1129c2ac3433185c7c 100644
--- a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties
+++ b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties
@@ -237,6 +237,7 @@ search.by=Suchen in:
 search.by.name=Name
 search.by.description=Notiz
 search.by.category.name=Kategoriename
+search.by.tags=Tags
 search.button.search=Suchen
 
 gui.tab.home=Startseite
diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties
index 57af4d2e68259627b30eded33316958f70c2c07f..6952c2ab55d970ced5e0d04754c864f1e431276f 100644
--- a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties
+++ b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties
@@ -236,6 +236,7 @@ search.headline=Search for payments
 search.by=Search in:
 search.by.name=Name
 search.by.description=Description
+search.by.tags=Tags
 search.by.category.name=Category Name
 search.button.search=Search
 
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
index 74c66a59c1212396ba3aaf9eb294a8ac24bd3017..4823a09651d8fb2a616506ac4ea29e7f497acb6b 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
@@ -284,10 +284,26 @@ public class NewPaymentController extends BaseController implements Styleable
 		try
 		{
 			ServerTagConnection serverTagConnection = new ServerTagConnection(controller.getSettings());			
-			tagField.setAllTags(serverTagConnection.getTags());		
+			tagField.setAllTags(serverTagConnection.getTags());
 		
+			if(payment instanceof RepeatingPayment)
+			{
+				//search gets RepeatingPayments instead of RepeatingPaymenEntries --> convert it to RepeatingPaymentEntry to maintain compatibility
+				RepeatingPayment tempPayment = (RepeatingPayment)payment;
+				payment = new RepeatingPaymentEntry(-1, 
+													tempPayment.getID(), 
+													tempPayment.getDate(), 
+													tempPayment.getAmount(), 
+													tempPayment.getCategoryID(),
+													tempPayment.getName(), 
+													tempPayment.getDescription(), 
+													tempPayment.getRepeatInterval(), 
+													tempPayment.getRepeatEndDate(), 
+													tempPayment.getRepeatMonthDay());
+			}
+			
 			if(payment instanceof RepeatingPaymentEntry)
-			{				
+			{
 				try
 				{					
 					RepeatingPaymentEntry currentPayment = (RepeatingPaymentEntry)payment;
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java
index 43758db12977e21fb8e39a99ffb7eafcad7d0e6f..fb45e4248282c72bcdbb43145393ddd27a4ecf8c 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java
@@ -36,6 +36,7 @@ public class SearchController extends BaseController implements Styleable
 	@FXML private CheckBox checkBoxName;
 	@FXML private CheckBox checkBoxDescription;
 	@FXML private CheckBox checkBoxCategoryName;
+	@FXML private CheckBox checkBoxTags;
 	@FXML private TextField textFieldSearch;
 	@FXML private Button buttonCancel;
 	@FXML private Button buttonSearch;
@@ -128,7 +129,8 @@ public class SearchController extends BaseController implements Styleable
 				ArrayList<Payment> payments = connection.getPaymentForSearch(query, 
 																			checkBoxName.isSelected(), 
 																			checkBoxDescription.isSelected(), 
-																			checkBoxCategoryName.isSelected());
+																			checkBoxCategoryName.isSelected(),
+																			checkBoxTags.isSelected());
 				Platform.runLater(() -> {
 					listView.getItems().clear();
 					if(payments != null)
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java
index 0ccced5ad2754989ec239424971349c11c80bf8e..caefa9ba69cd9f897787bed5145048325f058fa8 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java
@@ -414,11 +414,12 @@ public class SettingsController implements Styleable
 			try
 			{
 				database = FileHelper.loadDatabaseJSON(file);
+				System.out.println(database);
 				if(database.getCategories() == null 
-						|| database.getNormalPayments() == null 
-						|| database.getRepeatingPayments() == null
-						|| database.getTags() == null
-						|| database.getTagMatches() == null)
+					|| database.getNormalPayments() == null 
+					|| database.getRepeatingPayments() == null
+					|| database.getTags() == null
+					|| database.getTagMatches() == null)
 				{
 					AlertGenerator.showAlert(AlertType.ERROR, 
 											Localization.getString(Strings.TITLE_ERROR), 
diff --git a/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml
index 654d4181e82a33604e0b36676de501ad77096a29..16a1809763ebfb26eca024f4742f447b068026fc 100644
--- a/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml
+++ b/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml
@@ -43,6 +43,11 @@
                         <Font size="14.0" />
                      </font>
                   </CheckBox>
+                  <CheckBox fx:id="checkBoxTags" mnemonicParsing="false" text="%search.by.tags">
+                     <font>
+                        <Font size="14.0" />
+                     </font>
+                  </CheckBox>
                </children>
             </HBox>
             <ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java b/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java
index b631d73467f5653d028e5a3d095a5aad153b2a37..c5ff53d88f52e447bd42769901e7c2a94913eccf 100644
--- a/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java
+++ b/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java
@@ -24,7 +24,7 @@ public class Database
 	@SuppressWarnings("unused")
 	private final String TYPE = SaveFileType.BUDGETMASTER_DATABASE.toString();
 	private final int VERSION = 2;
-	private ArrayList<Category> categoriesX;
+	private ArrayList<Category> categories;
 	private ArrayList<NormalPayment> normalPayments;
 	private ArrayList<RepeatingPayment> repeatingPayments;
 	private ArrayList<Tag> tags;
@@ -37,7 +37,7 @@ public class Database
 	
 	public Database(ArrayList<Category> categories, ArrayList<NormalPayment> normalPayments, ArrayList<RepeatingPayment> repeatingPayments, ArrayList<Tag> tags, ArrayList<TagMatch> tagMatches)
 	{	
-		this.categoriesX = categories;
+		this.categories = categories;
 		this.normalPayments = normalPayments;
 		this.repeatingPayments = repeatingPayments;
 		this.tags = tags;
@@ -46,7 +46,7 @@ public class Database
 
 	public ArrayList<Category> getCategories()
 	{
-	    return categoriesX;
+	    return categories;
 	}
 	
 	public ArrayList<NormalPayment> getNormalPayments()
@@ -77,6 +77,6 @@ public class Database
 	@Override
 	public String toString()
 	{
-		return "Database [VERSION=" + VERSION + ", categories=" + categoriesX + ", normalPayments=" + normalPayments + ", repeatingPayments=" + repeatingPayments + ", tags=" + tags + ", tagMatches=" + tagMatches + "]";
+		return "Database [VERSION=" + VERSION + ", categories=" + categories + ", normalPayments=" + normalPayments + ", repeatingPayments=" + repeatingPayments + ", tags=" + tags + ", tagMatches=" + tagMatches + "]";
 	}
 }
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
index 3d2ac6bba7caae97964b8b2f0adf8546e10b17f0..00a21bba4a9d3270aaa91d0e52ff84355ee941a4 100644
--- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
+++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
@@ -119,7 +119,7 @@ public class SparkServer
 		delete("/category", new CategoryDelete(handler));
 
 		// Payment
-		get("/payment/search", new PaymentSearch(handler));
+		get("/payment/search", new PaymentSearch(handler, tagHandler));
 		// Normal
 		get("/payment", new PaymentGet(handler, gson));
 		post("/payment", new PaymentAdd(handler, gson));
diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java b/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java
index 88731a76f288b8c2c974b66d3075934d0132cfd6..42e718dfffea4165b62267f1c71f4c5d2af1edff 100644
--- a/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java
+++ b/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java
@@ -11,7 +11,9 @@ import de.deadlocker8.budgetmaster.logic.payment.NormalPayment;
 import de.deadlocker8.budgetmaster.logic.payment.Payment;
 import de.deadlocker8.budgetmaster.logic.payment.PaymentJSONSerializer;
 import de.deadlocker8.budgetmaster.logic.payment.RepeatingPayment;
+import de.deadlocker8.budgetmaster.logic.tag.Tag;
 import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler;
+import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler;
 import spark.Request;
 import spark.Response;
 import spark.Route;
@@ -19,10 +21,12 @@ import spark.Route;
 public class PaymentSearch implements Route
 {
 	private DatabaseHandler handler;
+	private DatabaseTagHandler tagHandler;
 
-	public PaymentSearch(DatabaseHandler handler)
+	public PaymentSearch(DatabaseHandler handler, DatabaseTagHandler tagHandler)
 	{
 		this.handler = handler;
+		this.tagHandler = tagHandler;
 	}
 
 	@Override
@@ -73,7 +77,7 @@ public class PaymentSearch implements Route
 		if(req.queryMap("query").value().toLowerCase().equals(""))
 			return false;
 		
-		if(!req.queryParams().contains("name") && !req.queryParams().contains("description") && !req.queryParams().contains("categoryName"))
+		if(!req.queryParams().contains("name") && !req.queryParams().contains("description") && !req.queryParams().contains("categoryName") && !req.queryParams().contains("tags"))
 			return false;
 
 		if(req.queryParams().contains("name"))
@@ -104,6 +108,34 @@ public class PaymentSearch implements Route
 				return true;
 			}
 		}
+		
+		if(req.queryParams().contains("tags"))
+		{
+			ArrayList<Integer> tagIDs = new ArrayList<>();
+			if(payment instanceof NormalPayment)
+			{
+				tagIDs = tagHandler.getAllTagsForPayment(payment.getID());				
+			}
+			else
+			{
+				tagIDs = tagHandler.getAllTagsForRepeatingPayment(payment.getID());
+			}
+			
+			if(tagIDs.size() > 0) 
+			{				
+				for(Integer currentTagID : tagIDs)
+				{
+					Tag currentTag = tagHandler.getTagByID(currentTagID);
+					if(currentTag != null)
+					{
+						if(currentTag.getName().toLowerCase().contains(req.queryMap("query").value().toLowerCase())) 
+						{
+							return true;
+						}
+					}
+				}				
+			}
+		}
 
 		return false;
 	}