diff --git a/src/main/java/kieker/diagnosis/common/FilterUtility.java b/src/main/java/kieker/diagnosis/common/FilterUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..a45f5cf7bd268c5aacf681ed18a8ca86e3289f36
--- /dev/null
+++ b/src/main/java/kieker/diagnosis/common/FilterUtility.java
@@ -0,0 +1,28 @@
+package kieker.diagnosis.common;
+
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import javafx.scene.control.TextField;
+import kieker.diagnosis.model.PropertiesModel;
+
+public final class FilterUtility {
+
+	private FilterUtility() {}
+	
+	public static <T> Predicate<T> useFilter(final TextField filter, final Function<T, String> function) {
+		final String text = filter.getText();
+
+		if ((text == null) || text.isEmpty()) {
+			return (x -> true);
+		} else {
+			final boolean regularExpressionsActive = PropertiesModel.getInstance().isActivateRegularExpressions();
+			if (regularExpressionsActive) {
+				return (x -> function.apply(x).matches(text));
+			} else {
+				return (x -> function.apply(x).toLowerCase().contains(text.toLowerCase()));
+			}
+		}
+	}
+	
+}
diff --git a/src/main/java/kieker/diagnosis/mainview/dialog/settings/SettingsDialogViewController.java b/src/main/java/kieker/diagnosis/mainview/dialog/settings/SettingsDialogViewController.java
index 0d9323fc833a8c79bda1d07efea959902963aea7..ad0343f54656e7fcaa85e9b7a6009735bf7a4d8d 100644
--- a/src/main/java/kieker/diagnosis/mainview/dialog/settings/SettingsDialogViewController.java
+++ b/src/main/java/kieker/diagnosis/mainview/dialog/settings/SettingsDialogViewController.java
@@ -39,12 +39,14 @@ public final class SettingsDialogViewController extends AbstractDialogController
 	@FXML private ComboBox<ComponentNames> componentNames;
 	@FXML private ComboBox<TimeUnit> timeunits;
 	@FXML private ComboBox<Boolean> additionalLogChecks;
+	@FXML private ComboBox<Boolean> activateRegularExpressions;
 
 	public void initialize() {
 		this.timeunits.setItems(FXCollections.observableArrayList(SettingsDialogViewController.TIME_UNITS));
 		this.componentNames.setItems(FXCollections.observableArrayList(ComponentNames.values()));
 		this.operationNames.setItems(FXCollections.observableArrayList(OperationNames.values()));
 		this.additionalLogChecks.setItems(FXCollections.observableArrayList(Boolean.TRUE, Boolean.FALSE));
+		this.activateRegularExpressions.setItems(FXCollections.observableArrayList(Boolean.TRUE, Boolean.FALSE));
 
 		this.loadSettings();
 	}
@@ -59,13 +61,15 @@ public final class SettingsDialogViewController extends AbstractDialogController
 		this.componentNames.getSelectionModel().select(this.propertiesModel.getComponentNames());
 		this.timeunits.getSelectionModel().select(this.propertiesModel.getTimeUnit());
 		this.additionalLogChecks.getSelectionModel().select(this.propertiesModel.isAdditionalLogChecks());
+		this.activateRegularExpressions.getSelectionModel().select(this.propertiesModel.isActivateRegularExpressions());
 	}
-
+ 
 	private void saveSettings() {
 		this.propertiesModel.setOperationNames(this.operationNames.getSelectionModel().getSelectedItem());
 		this.propertiesModel.setComponentNames(this.componentNames.getSelectionModel().getSelectedItem());
 		this.propertiesModel.setTimeUnit(this.timeunits.getSelectionModel().getSelectedItem());
 		this.propertiesModel.setAdditionalLogChecks(this.additionalLogChecks.getSelectionModel().getSelectedItem());
+		this.propertiesModel.setActivateRegularExpressions(this.activateRegularExpressions.getSelectionModel().getSelectedItem());
 	}
 
 }
diff --git a/src/main/java/kieker/diagnosis/mainview/subview/aggregatedcalls/AggregatedCallsViewController.java b/src/main/java/kieker/diagnosis/mainview/subview/aggregatedcalls/AggregatedCallsViewController.java
index a1f531ae0129b4625536113f8bdeb99b71b08f84..ae302c8dc2d758433c3c47c744af0aa2a1983b2f 100644
--- a/src/main/java/kieker/diagnosis/mainview/subview/aggregatedcalls/AggregatedCallsViewController.java
+++ b/src/main/java/kieker/diagnosis/mainview/subview/aggregatedcalls/AggregatedCallsViewController.java
@@ -19,6 +19,7 @@ package kieker.diagnosis.mainview.subview.aggregatedcalls;
 import java.util.Optional;
 import java.util.ResourceBundle;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javafx.beans.binding.Bindings;
 import javafx.beans.binding.StringBinding;
@@ -30,6 +31,7 @@ import javafx.fxml.FXML;
 import javafx.scene.control.TableView;
 import javafx.scene.control.TextField;
 import javafx.scene.input.MouseEvent;
+import kieker.diagnosis.common.FilterUtility;
 import kieker.diagnosis.domain.AggregatedOperationCall;
 import kieker.diagnosis.mainview.subview.util.NameConverter;
 import kieker.diagnosis.model.DataModel;
@@ -117,33 +119,20 @@ public final class AggregatedCallsViewController {
 	}
 
 	public void useContainerFilter() {
-		final String text = this.filterContainer.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.sndFilteredData.setPredicate(null);
-		} else {
-			this.sndFilteredData.setPredicate(call -> call.getContainer().toLowerCase().contains(text.toLowerCase()));
-		}
+		final Predicate<AggregatedOperationCall> predicate = FilterUtility.useFilter(this.filterContainer, AggregatedOperationCall::getContainer);
+		this.sndFilteredData.setPredicate(predicate);
 	}
 
 	public void useComponentFilter() {
-		final String text = this.filterComponent.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.thdFilteredData.setPredicate(null);
-		} else {
-			this.thdFilteredData.setPredicate(call -> call.getComponent().toLowerCase().contains(text.toLowerCase()));
-		}
+		final Predicate<AggregatedOperationCall> predicate = FilterUtility.useFilter(this.filterComponent, AggregatedOperationCall::getComponent);
+		this.thdFilteredData.setPredicate(predicate);
 	}
 
 	public void useOperationFilter() {
-		final String text = this.filterOperation.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.fthFilteredData.setPredicate(null);
-		} else {
-			this.fthFilteredData.setPredicate(call -> call.getOperation().toLowerCase().contains(text.toLowerCase()));
-		}
+		final Predicate<AggregatedOperationCall> predicate = FilterUtility.useFilter(this.filterOperation, AggregatedOperationCall::getOperation);
+		this.fthFilteredData.setPredicate(predicate);
 	}
 
+	
+
 }
diff --git a/src/main/java/kieker/diagnosis/mainview/subview/aggregatedtraces/AggregatedTracesViewController.java b/src/main/java/kieker/diagnosis/mainview/subview/aggregatedtraces/AggregatedTracesViewController.java
index 2e394b5c57940bdebf75ace8aa52f4c209e2cc37..01aeee870f4c95c50b2b5223a48bcd74aa85ee07 100644
--- a/src/main/java/kieker/diagnosis/mainview/subview/aggregatedtraces/AggregatedTracesViewController.java
+++ b/src/main/java/kieker/diagnosis/mainview/subview/aggregatedtraces/AggregatedTracesViewController.java
@@ -32,6 +32,7 @@ import javafx.scene.control.TextField;
 import javafx.scene.control.TreeItem;
 import javafx.scene.control.TreeTableView;
 import javafx.scene.input.MouseEvent;
+import kieker.diagnosis.common.FilterUtility;
 import kieker.diagnosis.domain.AggregatedOperationCall;
 import kieker.diagnosis.domain.AggregatedTrace;
 import kieker.diagnosis.mainview.subview.util.LazyOperationCallTreeItem;
@@ -125,38 +126,20 @@ public final class AggregatedTracesViewController {
 	}
 
 	public void useContainerFilter() {
-		final String text = this.filterContainer.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.sndPredicate = call -> true;
-		} else {
-			this.sndPredicate = call -> call.getContainer().toLowerCase().contains(text.toLowerCase());
-		}
-
+		final Predicate<AggregatedOperationCall> predicate = FilterUtility.useFilter(this.filterContainer, AggregatedOperationCall::getContainer);
+		this.sndPredicate = predicate;
 		this.reloadTreetable();
 	}
 
 	public void useComponentFilter() {
-		final String text = this.filterComponent.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.thdPredicate = call -> true;
-		} else {
-			this.thdPredicate = call -> call.getComponent().toLowerCase().contains(text.toLowerCase());
-		}
-
+		final Predicate<AggregatedOperationCall> predicate = FilterUtility.useFilter(this.filterComponent, AggregatedOperationCall::getComponent);
+		this.thdPredicate = predicate;
 		this.reloadTreetable();
 	}
 
 	public void useOperationFilter() {
-		final String text = this.filterOperation.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.fthPredicate = call -> true;
-		} else {
-			this.fthPredicate = call -> call.getOperation().toLowerCase().contains(text.toLowerCase());
-		}
-
+		final Predicate<AggregatedOperationCall> predicate = FilterUtility.useFilter(this.filterOperation, AggregatedOperationCall::getOperation);
+		this.fthPredicate = predicate;
 		this.reloadTreetable();
 	}
 
diff --git a/src/main/java/kieker/diagnosis/mainview/subview/calls/CallsViewController.java b/src/main/java/kieker/diagnosis/mainview/subview/calls/CallsViewController.java
index 1bc684ed66192232f2e1be44d57d1e23cfd6aac3..7b31d986a3a7f4360c8066f05fb40fa12b9e588a 100644
--- a/src/main/java/kieker/diagnosis/mainview/subview/calls/CallsViewController.java
+++ b/src/main/java/kieker/diagnosis/mainview/subview/calls/CallsViewController.java
@@ -19,6 +19,7 @@ package kieker.diagnosis.mainview.subview.calls;
 import java.util.Optional;
 import java.util.ResourceBundle;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 import javafx.beans.binding.Bindings;
 import javafx.beans.binding.StringBinding;
@@ -30,6 +31,7 @@ import javafx.fxml.FXML;
 import javafx.scene.control.TableView;
 import javafx.scene.control.TextField;
 import javafx.scene.input.MouseEvent;
+import kieker.diagnosis.common.FilterUtility;
 import kieker.diagnosis.domain.OperationCall;
 import kieker.diagnosis.mainview.subview.util.NameConverter;
 import kieker.diagnosis.model.DataModel;
@@ -114,43 +116,23 @@ public final class CallsViewController {
 	}
 
 	public void useContainerFilter() {
-		final String text = this.filterContainer.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.sndFilteredData.setPredicate(null);
-		} else {
-			this.sndFilteredData.setPredicate(call -> call.getContainer().toLowerCase().contains(text.toLowerCase()));
-		}
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterContainer, OperationCall::getContainer);
+		this.sndFilteredData.setPredicate(predicate); 
 	}
 
-	public void useComponentFilter() {
-		final String text = this.filterComponent.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.thdFilteredData.setPredicate(null);
-		} else {
-			this.thdFilteredData.setPredicate(call -> call.getComponent().toLowerCase().contains(text.toLowerCase()));
-		}
+	public void useComponentFilter() {		
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterComponent, OperationCall::getComponent);
+		this.thdFilteredData.setPredicate(predicate); 
 	}
 
 	public void useOperationFilter() {
-		final String text = this.filterOperation.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.fthFilteredData.setPredicate(null);
-		} else {
-			this.fthFilteredData.setPredicate(call -> call.getOperation().toLowerCase().contains(text.toLowerCase()));
-		}
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterOperation, OperationCall::getOperation);
+		this.fthFilteredData.setPredicate(predicate); 
 	}
 
 	public void useTraceIDFilter() {
-		final String text = this.filterTraceID.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.fifFilteredData.setPredicate(null);
-		} else {
-			this.fifFilteredData.setPredicate(call -> Long.toString(call.getTraceID()).contains(text));
-		}
+		final Function<OperationCall, String> function = (call -> Long.toString(call.getTraceID()));
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterTraceID, function);
+		this.fifFilteredData.setPredicate(predicate); 
 	}
-
 }
diff --git a/src/main/java/kieker/diagnosis/mainview/subview/traces/TracesViewController.java b/src/main/java/kieker/diagnosis/mainview/subview/traces/TracesViewController.java
index 96bf8d5cccd483905f3388fb0535ed7af61d0932..503327719ab49b8f5eac8a171f3cd35f9e1a9c9f 100644
--- a/src/main/java/kieker/diagnosis/mainview/subview/traces/TracesViewController.java
+++ b/src/main/java/kieker/diagnosis/mainview/subview/traces/TracesViewController.java
@@ -32,6 +32,7 @@ import javafx.scene.control.TextField;
 import javafx.scene.control.TreeItem;
 import javafx.scene.control.TreeTableView;
 import javafx.scene.input.MouseEvent;
+import kieker.diagnosis.common.FilterUtility;
 import kieker.diagnosis.domain.OperationCall;
 import kieker.diagnosis.domain.Trace;
 import kieker.diagnosis.mainview.subview.util.LazyOperationCallTreeItem;
@@ -131,50 +132,27 @@ public final class TracesViewController {
 	}
 
 	public void useContainerFilter() {
-		final String text = this.filterContainer.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.sndPredicate = call -> true;
-		} else {
-			this.sndPredicate = call -> call.getContainer().toLowerCase().contains(text.toLowerCase());
-		}
-
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterContainer, OperationCall::getContainer);
+		this.sndPredicate = predicate;
 		this.reloadTreetable();
 	}
 
 	public void useComponentFilter() {
-		final String text = this.filterComponent.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.thdPredicate = call -> true;
-		} else {
-			this.thdPredicate = call -> call.getComponent().toLowerCase().contains(text.toLowerCase());
-		}
-
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterComponent, OperationCall::getComponent);
+		this.thdPredicate = predicate;
 		this.reloadTreetable();
 	}
 
 	public void useOperationFilter() {
-		final String text = this.filterOperation.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.fthPredicate = call -> true;
-		} else {
-			this.fthPredicate = call -> call.getOperation().toLowerCase().contains(text.toLowerCase());
-		}
-
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterOperation, OperationCall::getOperation);
+		this.fthPredicate = predicate;
 		this.reloadTreetable();
 	}
 
 	public void useTraceIDFilter() {
-		final String text = this.filterTraceID.getText();
-
-		if ((text == null) || text.isEmpty()) {
-			this.fifPredicate = call -> true;
-		} else {
-			this.fifPredicate = call -> Long.toString(call.getTraceID()).contains(text);
-		}
-
+		final Function<OperationCall, String> function = (call -> Long.toString(call.getTraceID()));
+		final Predicate<OperationCall> predicate = FilterUtility.useFilter(this.filterTraceID, function);
+		this.fifPredicate = predicate;
 		this.reloadTreetable();
 	}
 
diff --git a/src/main/java/kieker/diagnosis/model/PropertiesModel.java b/src/main/java/kieker/diagnosis/model/PropertiesModel.java
index 2123c80df22a060166253836d2d4c8a2edae9e5b..3654a1737ddb4d841a518f9b655fb7cc5fc37daa 100644
--- a/src/main/java/kieker/diagnosis/model/PropertiesModel.java
+++ b/src/main/java/kieker/diagnosis/model/PropertiesModel.java
@@ -36,12 +36,14 @@ public final class PropertiesModel {
 	private static final String KEY_COMPONENTS = "components";
 	private static final String KEY_GRAPHVIZ_PATH = "graphvizpath";
 	private static final String KEY_ADDITIONAL_LOG_CHECKS = "additionalLogChecks";
-
+	private static final String KEY_REGULAR_EXPRESSIONS = "regularExpressions";
+	
 	private String graphvizPath;
 	private TimeUnit timeUnit;
 	private ComponentNames componentNames;
 	private OperationNames operationNames;
 	private boolean additionalLogChecks;
+	private boolean activateRegularExpressions;
 
 	public PropertiesModel() {
 		this.loadSettings();
@@ -55,6 +57,7 @@ public final class PropertiesModel {
 		this.componentNames = ComponentNames.valueOf(preferences.get(PropertiesModel.KEY_COMPONENTS, ComponentNames.LONG.name()));
 		this.operationNames = OperationNames.valueOf(preferences.get(PropertiesModel.KEY_OPERATIONS, OperationNames.SHORT.name()));
 		this.additionalLogChecks = Boolean.valueOf(preferences.get(PropertiesModel.KEY_ADDITIONAL_LOG_CHECKS, Boolean.FALSE.toString()));
+		this.activateRegularExpressions  = Boolean.valueOf(preferences.get(PropertiesModel.KEY_REGULAR_EXPRESSIONS, Boolean.FALSE.toString()));
 	}
 
 	private void saveSettings() {
@@ -65,7 +68,8 @@ public final class PropertiesModel {
 		preferences.put(PropertiesModel.KEY_COMPONENTS, this.componentNames.name());
 		preferences.put(PropertiesModel.KEY_OPERATIONS, this.operationNames.name());
 		preferences.put(PropertiesModel.KEY_ADDITIONAL_LOG_CHECKS, Boolean.toString(this.additionalLogChecks));
-
+		preferences.put(PropertiesModel.KEY_REGULAR_EXPRESSIONS, Boolean.toString(this.activateRegularExpressions));
+		
 		try {
 			preferences.flush();
 		} catch (final BackingStoreException e) {
@@ -122,6 +126,15 @@ public final class PropertiesModel {
 		this.saveSettings();
 	}
 
+	public boolean isActivateRegularExpressions() {
+		return activateRegularExpressions;
+	}
+
+	public void setActivateRegularExpressions(boolean activateRegularExpressions) {
+		this.activateRegularExpressions = activateRegularExpressions;
+		this.saveSettings();
+	}
+
 	/**
 	 * @author Nils Christian Ehmke
 	 */
diff --git a/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview.properties b/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview.properties
index 783bdd3c4ba544a8f20f2fc24aac64f9252da077..8dd31c37778428b697459a9476fd215143ae39ab 100644
--- a/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview.properties
+++ b/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview.properties
@@ -19,4 +19,6 @@ title=Settings
 analysis=Analysis
 additionalLogChecks=Activate additional checks during trace reconstruction\:
 SettingsDialog.yes=Yes
-SettingsDialog.no=No
\ No newline at end of file
+SettingsDialog.no=No
+searchAndFilter=Filter Masks
+activateRegularExpressions=Allow regular expressions (Java standard)\:
\ No newline at end of file
diff --git a/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview_de.properties b/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview_de.properties
index 782961c5e8acca19ca28f55fb05304bf1bfc4659..7a8cc1f69c776f00142b8a6af621804498cb6745 100644
--- a/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview_de.properties
+++ b/src/main/resources/locale/kieker/diagnosis/mainview/dialog/settings/settingsdialogview_de.properties
@@ -19,4 +19,6 @@ title=Einstellungen
 analysis=Analyse
 additionalLogChecks=Aktiviere weitere Überprüfungen während der Trace Rekonstruktion\:
 SettingsDialog.yes=Ja
-SettingsDialog.no=Nein
\ No newline at end of file
+SettingsDialog.no=Nein
+searchAndFilter=Filtermasken
+activateRegularExpressions=Erlaube reguläre Ausdrücke (Java-Standard)\:
\ No newline at end of file
diff --git a/src/main/resources/views/kieker/diagnosis/mainview/dialog/settings/SettingsDialogView.fxml b/src/main/resources/views/kieker/diagnosis/mainview/dialog/settings/SettingsDialogView.fxml
index 2563656790e36b90c3595522f65af35f1240d3f5..aa8ca0d00e667612391b59187f145ca30b2212ef 100644
--- a/src/main/resources/views/kieker/diagnosis/mainview/dialog/settings/SettingsDialogView.fxml
+++ b/src/main/resources/views/kieker/diagnosis/mainview/dialog/settings/SettingsDialogView.fxml
@@ -29,6 +29,19 @@
 		</GridPane>
 	</TitledPane>
 	
+	<TitledPane text="%searchAndFilter" collapsible="false" >
+		<GridPane>
+			<hgap>10</hgap>
+			<vgap>10</vgap>
+		
+			<Label text="%activateRegularExpressions" GridPane.columnIndex="1" GridPane.rowIndex="1" />
+			<ComboBox fx:id="activateRegularExpressions" GridPane.columnIndex="2" GridPane.rowIndex="1" GridPane.fillWidth="true" GridPane.hgrow="ALWAYS" maxWidth="Infinity">
+				<converter><kieker.diagnosis.mainview.dialog.settings.BooleanStringConverter/></converter>
+			</ComboBox>
+			
+		</GridPane>
+	</TitledPane>
+	
 	<TitledPane text="%analysis" collapsible="false" >
 		<GridPane>
 			<hgap>10</hgap>