diff --git a/src/main/java/envoy/client/ui/ClearableTextField.java b/src/main/java/envoy/client/ui/ClearableTextField.java
new file mode 100644
index 0000000..adc5f94
--- /dev/null
+++ b/src/main/java/envoy/client/ui/ClearableTextField.java
@@ -0,0 +1,252 @@
+package envoy.client.ui;
+
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.StringProperty;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.control.*;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.Background;
+import javafx.scene.layout.ColumnConstraints;
+import javafx.scene.layout.GridPane;
+import javafx.scene.text.Font;
+
+import envoy.client.data.Settings;
+
+/**
+ * This class offers a text field that is automatically equipped with a clear
+ * button.
+ *
+ * Project: envoy-client
+ * File: ClearableTextField.java
+ * Created: 25.06.2020
+ *
+ * @author Leon Hofmeister
+ * @since Envoy Client v0.1-beta
+ */
+@SuppressWarnings("javadoc")
+public class ClearableTextField extends GridPane {
+
+ private final TextField textField;
+
+ private final Button clearButton;
+
+ /**
+ * Constructs a new {@code ClearableTextField} with no initial text and icon
+ * size 16.
+ *
+ * @since Envoy Client v0.1-beta
+ */
+ public ClearableTextField() { this("", 16); }
+
+ /**
+ * Constructs a new {@code ClearableTextField} with initial text and a
+ * predetermined icon size.
+ *
+ * @param text the text that should be displayed by default
+ * @param size the size of the icon
+ * @since Envoy Client v0.1-beta
+ */
+ public ClearableTextField(String text, int size) {
+ // initializing the textField and the button
+ textField = new TextField(text);
+ clearButton = new Button("",
+ new ImageView(IconUtil.load(
+ Settings.getInstance().getCurrentTheme().equals("dark") ? "/icons/clear_button_white.png" : "/icons/clear_button_black.png",
+ size)));
+ clearButton.setOnAction(e -> textField.clear());
+ clearButton.getStyleClass().clear();
+ clearButton.setBackground(Background.EMPTY);
+ // Adding the two elements to the GridPane
+ add(textField, 0, 0, 2, 1);
+ add(clearButton, 1, 0, 1, 1);
+ // Setting the percent - widths of the two columns.
+ // Used to locate the button on the right.
+ final var columnConstraints = new ColumnConstraints();
+ columnConstraints.setPercentWidth(85);
+ getColumnConstraints().add(columnConstraints);
+ final var columnConstraints2 = new ColumnConstraints();
+ columnConstraints2.setPercentWidth(15);
+ columnConstraints2.setPrefWidth(size);
+ getColumnConstraints().add(columnConstraints2);
+ setAlignment(Pos.CENTER);
+ setHgap(10);
+ setVgap(10);
+ setPadding(new Insets(5, 5, 5, 5));
+ setMargin(clearButton, new Insets(5));
+ }
+
+ /**
+ * @return the underlying {@code textField}
+ * @since Envoy Client v0.1-beta
+ */
+ public TextField getTextField() { return textField; }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextInputControl#fontProperty()
+ * @since Envoy Client v0.1-beta
+ */
+ public final ObjectProperty fontProperty() { return textField.fontProperty(); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextField#prefColumnCountProperty()
+ * @since Envoy Client v0.1-beta
+ */
+ public final IntegerProperty prefColumnCountProperty() { return textField.prefColumnCountProperty(); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextField#getPrefColumnCount()
+ * @since Envoy Client v0.1-beta
+ */
+ public final int getPrefColumnCount() { return textField.getPrefColumnCount(); }
+
+ /**
+ * @param value
+ * @see javafx.scene.control.TextField#setPrefColumnCount(int)
+ * @since Envoy Client v0.1-beta
+ */
+ public final void setPrefColumnCount(int value) { textField.setPrefColumnCount(value); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.Control#skinProperty()
+ * @since Envoy Client v0.1-beta
+ */
+ public final ObjectProperty> skinProperty() { return textField.skinProperty(); }
+
+ /**
+ * @param value
+ * @see javafx.scene.control.TextInputControl#setFont(javafx.scene.text.Font)
+ * @since Envoy Client v0.1-beta
+ */
+ public final void setFont(Font value) { textField.setFont(value); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextInputControl#getFont()
+ * @since Envoy Client v0.1-beta
+ */
+ public final Font getFont() { return textField.getFont(); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextInputControl#promptTextProperty()
+ * @since Envoy Client v0.1-beta
+ */
+ public final StringProperty promptTextProperty() { return textField.promptTextProperty(); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextInputControl#getPromptText()
+ * @since Envoy Client v0.1-beta
+ */
+ public final String getPromptText() { return textField.getPromptText(); }
+
+ /**
+ * @param value
+ * @see javafx.scene.control.TextInputControl#setPromptText(java.lang.String)
+ * @since Envoy Client v0.1-beta
+ */
+ public final void setPromptText(String value) { textField.setPromptText(value); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextInputControl#getText()
+ * @since Envoy Client v0.1-beta
+ */
+ public final String getText() { return textField.getText(); }
+
+ /**
+ * @param value
+ * @see javafx.scene.control.TextInputControl#setText(java.lang.String)
+ * @since Envoy Client v0.1-beta
+ */
+ public final void setText(String value) { textField.setText(value); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.TextInputControl#textProperty()
+ * @since Envoy Client v0.1-beta
+ */
+ public final StringProperty textProperty() { return textField.textProperty(); }
+
+ /**
+ * @param value
+ * @see javafx.scene.control.TextInputControl#setEditable(boolean)
+ * @since Envoy Client v0.1-beta
+ */
+ public final void setEditable(boolean value) { textField.setEditable(value); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.Control#tooltipProperty()
+ * @since Envoy Client v0.1-beta
+ */
+ public final ObjectProperty tooltipProperty() { return textField.tooltipProperty(); }
+
+ /**
+ * @param value
+ * @see javafx.scene.control.Control#setTooltip(javafx.scene.control.Tooltip)
+ * @since Envoy Client v0.1-beta
+ */
+ public final void setTooltip(Tooltip value) { textField.setTooltip(value); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.Control#getTooltip()
+ * @since Envoy Client v0.1-beta
+ */
+ public final Tooltip getTooltip() { return textField.getTooltip(); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.Control#contextMenuProperty()
+ * @since Envoy Client v0.1-beta
+ */
+ public final ObjectProperty contextMenuProperty() { return textField.contextMenuProperty(); }
+
+ /**
+ * @param value
+ * @see javafx.scene.control.Control#setContextMenu(javafx.scene.control.ContextMenu)
+ * @since Envoy Client v0.1-beta
+ */
+ public final void setContextMenu(ContextMenu value) { textField.setContextMenu(value); }
+
+ /**
+ * @return
+ * @see javafx.scene.control.Control#getContextMenu()
+ * @since Envoy Client v0.1-beta
+ */
+ public final ContextMenu getContextMenu() { return textField.getContextMenu(); }
+
+ /**
+ * @param minWidth
+ * @param minHeight
+ * @see javafx.scene.layout.Region#setMinSize(double, double)
+ * @since Envoy Client v0.1-beta
+ */
+ @Override
+ public void setMinSize(double minWidth, double minHeight) { textField.setMinSize(minWidth, minHeight); }
+
+ /**
+ * @param prefWidth
+ * @param prefHeight
+ * @see javafx.scene.layout.Region#setPrefSize(double, double)
+ * @since Envoy Client v0.1-beta
+ */
+ @Override
+ public void setPrefSize(double prefWidth, double prefHeight) { textField.setPrefSize(prefWidth, prefHeight); }
+
+ /**
+ * @param maxWidth
+ * @param maxHeight
+ * @see javafx.scene.layout.Region#setMaxSize(double, double)
+ * @since Envoy Client v0.1-beta
+ */
+ @Override
+ public void setMaxSize(double maxWidth, double maxHeight) { textField.setMaxSize(maxWidth, maxHeight); }
+}
diff --git a/src/main/resources/icons/clear_button_black.png b/src/main/resources/icons/clear_button_black.png
new file mode 100644
index 0000000..56b8516
Binary files /dev/null and b/src/main/resources/icons/clear_button_black.png differ
diff --git a/src/main/resources/icons/clear_button_white.png b/src/main/resources/icons/clear_button_white.png
new file mode 100644
index 0000000..e93bd4c
Binary files /dev/null and b/src/main/resources/icons/clear_button_white.png differ