diff --git a/src/main/java/kieker/analysis/plugin/filter/sink/ThreadsStatusDisplayFilter.java b/src/main/java/kieker/analysis/plugin/filter/sink/ThreadsStatusDisplayFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e097120d57025b178fe1d871fa4fb40cabe6666
--- /dev/null
+++ b/src/main/java/kieker/analysis/plugin/filter/sink/ThreadsStatusDisplayFilter.java
@@ -0,0 +1,92 @@
+/***************************************************************************
+ * Copyright 2015 Kieker Project (http://kieker-monitoring.net)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+package kieker.analysis.plugin.filter.sink;
+
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+import kieker.analysis.display.XYPlot;
+import kieker.analysis.display.annotation.Display;
+import kieker.common.record.jvm.ThreadsStatusRecord;
+
+import teetime.stage.basic.AbstractFilter;
+
+/**
+ * @author Nils Christian Ehmke, Lars Erik Bluemke
+ *
+ * @since 1.10
+ */
+public class ThreadsStatusDisplayFilter extends AbstractFilter<ThreadsStatusRecord> {
+
+	private static final String TOTAL_THREADS = "Total Threads";
+	private static final String THREADS = "Threads";
+	private static final String DAEMON_THREADS = "Daemon Threads";
+	private static final String PEAK_THREADS = "Peak Threads";
+
+	private final XYPlot xyplot;
+
+	private final int numberOfEntries;
+
+	private final TimeUnit recordsTimeUnit;
+
+	/**
+	 * Creates a new instance of this filter.
+	 *
+	 * @param numberOfEntries
+	 *            Maximal number of entries in a XYPlot
+	 * @param recordsTimeUnit
+	 *            Time unit to interpret the timestamp of a record passed to the input port
+	 *
+	 * @see kieker.analysis.display.XYPlot
+	 */
+	public ThreadsStatusDisplayFilter(final int numberOfEntries, final TimeUnit recordsTimeUnit) {
+		this.numberOfEntries = numberOfEntries;
+		this.recordsTimeUnit = recordsTimeUnit;
+
+		// Create the display objects
+		this.xyplot = new XYPlot(this.numberOfEntries);
+	}
+
+	/**
+	 * This method represents the input port receiving the incoming events.
+	 *
+	 * @param record
+	 *            The record to display and relay.
+	 */
+	@Override
+	public void execute(final ThreadsStatusRecord record) {
+		this.updateDisplays(record);
+	}
+
+	private void updateDisplays(final ThreadsStatusRecord record) {
+		// Calculate the minutes and seconds of the logging timestamp of the record
+		final Date date = new Date(TimeUnit.MILLISECONDS.convert(record.getLoggingTimestamp(), recordsTimeUnit));
+		final String minutesAndSeconds = date.toString().substring(14, 19);
+
+		final String id = record.getHostname() + " - " + record.getVmName();
+
+		this.xyplot.setEntry(id + " - " + ThreadsStatusDisplayFilter.THREADS, minutesAndSeconds, record.getThreadCount());
+		this.xyplot.setEntry(id + " - " + ThreadsStatusDisplayFilter.TOTAL_THREADS, minutesAndSeconds, record.getTotalStartedThreadCount());
+		this.xyplot.setEntry(id + " - " + ThreadsStatusDisplayFilter.PEAK_THREADS, minutesAndSeconds, record.getPeakThreadCount());
+		this.xyplot.setEntry(id + " - " + ThreadsStatusDisplayFilter.DAEMON_THREADS, minutesAndSeconds, record.getDaemonThreadCount());
+	}
+
+	@Display(name = "XYPlot Display")
+	public XYPlot getXYPlot() {
+		return this.xyplot;
+	}
+
+}