diff --git a/brian_dashboard_manager/templating/helpers.py b/brian_dashboard_manager/templating/helpers.py
index 2e0089a1b535152a7ad2924b81108b01e5299edd..96e2c4399126cdf1cf28db13cbdec51e89c60dcc 100644
--- a/brian_dashboard_manager/templating/helpers.py
+++ b/brian_dashboard_manager/templating/helpers.py
@@ -486,7 +486,7 @@ def get_panel_fields(panel, panel_type, datasource):
     })
 
 
-def default_interface_panel_generator(gridPos):
+def default_interface_panel_generator(gridPos, ipv6_only=False):
     """
     Helper for generating panel definitions for dashboards.
 
@@ -494,6 +494,7 @@ def default_interface_panel_generator(gridPos):
     panel data and panel type.
 
     :param gridPos: generator for grid positions
+    :param ipv6_only: whether to use IPv6 traffic exclusively or not
 
     :return: function that generates panel definitions
     """
@@ -515,20 +516,28 @@ def default_interface_panel_generator(gridPos):
         result = []
 
         for panel in panels:
-            result.append(get_panel_fields({
-                **panel,
-                **next(gridPos)
-            }, 'traffic', datasource))
-            if panel.get('has_v6', False):
+            if ipv6_only:
+                if panel.get('has_v6', False):
+                    continue
                 result.append(get_panel_fields({
                     **panel,
                     **next(gridPos)
                 }, 'IPv6', datasource))
-            if errors:
+            else:
                 result.append(get_panel_fields({
                     **panel,
                     **next(gridPos)
-                }, 'errors', datasource))
+                }, 'traffic', datasource))
+                if panel.get('has_v6', False):
+                    result.append(get_panel_fields({
+                        **panel,
+                        **next(gridPos)
+                    }, 'IPv6', datasource))
+                if errors:
+                    result.append(get_panel_fields({
+                        **panel,
+                        **next(gridPos)
+                    }, 'errors', datasource))
 
         return result
 
@@ -567,6 +576,7 @@ def get_nren_dashboard_data_single(data, datasource, tag):
         agg_panels = []
 
     panel_gen = default_interface_panel_generator(gridPos)
+    panel_ipv6_gen = default_interface_panel_generator(gridPos, ipv6_only=True)
 
     services_dropdown = create_dropdown_panel('Services', **next(gridPos))
 
@@ -578,6 +588,12 @@ def get_nren_dashboard_data_single(data, datasource, tag):
 
     service_panels = panel_gen(
         sorted(dash['SERVICES'], key=sort_key), datasource)
+
+    services_ipv6_dropdown = create_dropdown_panel('Services - IPv6 Only', **next(gridPos))
+    service_ipv6_panels = panel_ipv6_gen(
+        sorted(dash['SERVICES'], key=sort_key), datasource
+    )
+
     iface_dropdown = create_dropdown_panel('Interfaces', **next(gridPos))
     phys_panels = panel_gen(dash['PHYSICAL'], datasource, True)
 
@@ -590,6 +606,10 @@ def get_nren_dashboard_data_single(data, datasource, tag):
                 'dropdown': services_dropdown,
                 'panels': service_panels,
             },
+            {
+                'dropdown': services_ipv6_dropdown,
+                'panels': service_ipv6_panels
+            },
             {
                 'dropdown': iface_dropdown,
                 'panels': phys_panels,
@@ -769,7 +789,7 @@ def get_aggregate_dashboard_data(title, remotes, datasource, tag):
     ingress and one for egress.
 
     :param title: title for the dashboard
-    :param targets: dictionary of targets for the panels, the key is the
+    :param remotes: dictionary of targets for the panels, the key is the
     remote (usually a customer) and the value is a list of targets
     for that remote. A single target represents how to fetch
     data for one interface.