diff --git a/dashboards/dashboard_fe2ti.py b/dashboards/dashboard_fe2ti.py
index a53f9edd894565ab74b467ef4fdc5d3b379ffca0..577ca307be2aca21cb2c23a273bbbd0a0baf9168 100644
--- a/dashboards/dashboard_fe2ti.py
+++ b/dashboards/dashboard_fe2ti.py
@@ -13,6 +13,7 @@ from dashboards.influx_queries import (Query,
                                        join_variable_and,
                                        show_tag_values)
 from dashboards.legends import Units
+from collections import namedtuple
 
 description_markdown = r"""
 
@@ -31,76 +32,84 @@ description_markdown = r"""
   - Information about the different Hosts on the NHR@FAU [Testcluster](https://hpc.fau.de/systems-services/documentation-instructions/clusters/test-cluster/)
 
 """
+Filter = namedtuple("Filter", ("name", "multi", "default_value"), defaults=('', True, ''))
+PanelInfos = namedtuple("PanelInfos", ("name", "unit"))
+
+
+def get_dashboard_variable(filter: Filter, measurment_name: str, data_source: str):
+    query = show_tag_values(measurment_name, filter.name)
+    kwargs = {}
+    if filter.multi:
+        kwargs.update({'includeAll': True, 'multi': True, })
+    if filter.default_value:
+        kwargs.update({'default': filter.default_value})
+    return get_dashboard_variable_query(filter.name, query, data_source, **kwargs)
+
+
+def get_time_series_panel(field: PanelInfos,
+                          data_source: str,
+                          measurment_name: str,
+                          *,
+                          where=None,
+                          group_by=None,
+                          overrides=None):
+    query = Query(select_=field.name,
+                  from_=measurment_name,
+                  where_=where,
+                  group_by=group_by)
+
+    return TimeSeries(
+        title=field.name,
+        dataSource=data_source,
+        targets=[get_influx_target(str(query))],
+        unit=field.unit,
+        pointSize=9,
+        overrides=overrides,
+    )
 
 
 def dashboard_fe2ti():
     data_source = "fe2ti"
     measurment_name = "fe2ti"
     row_repeat = "micro_problem_size"
-    other_filters = ["branch",
-                     "benchmark_name",
-                     "compiler",
-                     "solver",
-                     "mpi_ranks",
-                     "omp_threads",
-                     "ksp_tol"]
-    row_repeat_var = get_dashboard_variable_query(
-        row_repeat, show_tag_values(measurment_name, row_repeat), data_source, default='8')
-
-    host_var = get_dashboard_variable_query(
-        'host', show_tag_values(measurment_name, 'host'),
-        data_source, includeAll=False, multi=False, default='skylakesp2')
-
-    other_vars = [get_dashboard_variable_query(
-        filter, show_tag_values(measurment_name, filter), data_source)
-        for filter in other_filters
+    other_filters = [
+        Filter("micro_problem_size", True, '8'),
+        Filter("host", False, 'skylakesp2'),
+        Filter("branch"),
+        Filter("benchmark_name"),
+        Filter("compiler"),
+        Filter("solver"),
+        Filter("mpi_ranks"),
+        Filter("omp_threads"),
+        Filter("ksp_tol")
     ]
-    other_filters.append('host')
-    other_vars = [host_var, *other_vars]
-
-    where = join_variable_and([row_repeat, *other_filters])
-    fields = ["Time to solution",
-              "DP [MFLOP/s] STAT Sum",
-              "Operational intensity STAT Sum",
-              'AVX DP [MFLOP/s] STAT Sum" / "DP [MFLOP/s] STAT Sum',
-              'Memory bandwidth [MBytes/s] STAT Sum',
-              'Memory write bandwidth [MBytes/s] STAT Sum',
-              'Memory read bandwidth [MBytes/s] STAT Sum',
-              'Memory data volume [GBytes] STAT Sum',
-              'Memory read data volume [GBytes] STAT Sum',
-              'Memory write data volume [GBytes] STAT Sum',
-              'Energy [J] STAT Sum',
-              'Power [W] STAT Sum',
-              'Clock [MHz] STAT Avg',]
-    units = [Units.seconds,
-             Units.mflop_sec,
-             Units.flop_per_byte,
-             Units.percent,
-             Units.mbytes_per_second,
-             Units.mbytes_per_second,
-             Units.mbytes_per_second,
-             Units.gigabyte,
-             Units.gigabyte,
-             Units.gigabyte,
-             Units.joule,
-             Units.watt,
-             Units.megahertz,
-             ]
-    queries = [Query(select_=field,
-                     from_=measurment_name,
-                     where_=where,
-                     group_by=[row_repeat, *other_filters]
-                     )
-               for field in fields
-               ]
+
+    other_vars = [get_dashboard_variable(filter, measurment_name, data_source) for filter in other_filters]
+    row_repeat_var = other_vars[0]
+
+    where = join_variable_and([f.name for f in other_filters])
+    fields = [PanelInfos("Time to solution", Units.seconds),
+              PanelInfos("DP [MFLOP/s] STAT Sum", Units.mflop_sec),
+              PanelInfos("Operational intensity STAT Sum", Units.flop_per_byte),
+              PanelInfos('AVX DP [MFLOP/s] STAT Sum" / "DP [MFLOP/s] STAT Sum', Units.percent),
+              PanelInfos('Memory bandwidth [MBytes/s] STAT Sum', Units.mbytes_per_second),
+              PanelInfos('Memory write bandwidth [MBytes/s] STAT Sum', Units.mbytes_per_second),
+              PanelInfos('Memory read bandwidth [MBytes/s] STAT Sum', Units.mbytes_per_second),
+              PanelInfos('Memory data volume [GBytes] STAT Sum', Units.gigabyte),
+              PanelInfos('Memory read data volume [GBytes] STAT Sum', Units.gigabyte),
+              PanelInfos('Memory write data volume [GBytes] STAT Sum', Units.gigabyte),
+              PanelInfos('Energy [J] STAT Sum', Units.joule),
+              PanelInfos('Power [W] STAT Sum', Units.watt),
+              PanelInfos('Clock [MHz] STAT Avg', Units.megahertz), ]
+
     options = DashboardOptions(
         title="FE2ti Benchmarks",
         description="Benchmarks for fe2ti",
         tags=['benchmark', 'fe2ti'],
         timezone="browser",
     )
-    annotations = get_commit_annotation(data_source, "red", "commits",
-                                        measurment_name)
+    annotations = get_commit_annotation(data_source, "red", "commits", measurment_name)
+
     overrides = [*[
         get_color_regex_override(f".*[Ss]olver.*: {solver}.*", color)
         for solver, color in [("pardiso", "#56A64B"), ("umfpack", "#F2CC0C"), ("ilu", "#3274D9")]
@@ -111,23 +120,22 @@ def dashboard_fe2ti():
     description_panel = pack_in_row("Legend", get_text_panel(description_markdown, title="FE2TI benchmarks"))
 
     panels = [
-        TimeSeries(
-            title=field,
-            dataSource=data_source,
-            targets=[get_influx_target(str(query))],
-            unit=unit,
-            pointSize=9,
+        get_time_series_panel(
+            field,
+            data_source,
+            measurment_name,
+            where=where,
+            group_by=[f.name for f in other_filters],
             overrides=overrides,
         )
-        for field, query, unit in zip(fields, queries, units)
-    ]
+        for field in fields]
+
     row = pack_in_row(
         title=f"{row_repeat}: ${row_repeat_var.name}",
         panels=[*panels],
         repeat=Repeat('v', row_repeat_var.name),
-
     )
     return build_dashboard(options,
                            rows=[description_panel, row],
-                           templating=[row_repeat_var, *other_vars],
+                           templating=[*other_vars],
                            annotations=annotations)