diff --git a/brian_dashboard_manager/dashboards/services_ias.json b/brian_dashboard_manager/dashboards/services_ias.json
index 94964d84958a26724cf70b3a31f88a487614c1b0..d0644528905b1caada0daad603c263c0cbf58f23 100755
--- a/brian_dashboard_manager/dashboards/services_ias.json
+++ b/brian_dashboard_manager/dashboards/services_ias.json
@@ -59,7 +59,7 @@
       "search": true,
       "starred": false,
       "tags": [
-        "IAS_UPSTREAM"
+        "UPSTREAM"
       ],
       "targets": [
         {
diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py
index 57b85d05b4502012bedd2b11fa4866be583568ab..90eae8885608bf52e9ad553356d0252ec612ce0e 100644
--- a/brian_dashboard_manager/grafana/provision.py
+++ b/brian_dashboard_manager/grafana/provision.py
@@ -20,7 +20,7 @@ from brian_dashboard_manager.templating.nren_access import generate_nrens
 from brian_dashboard_manager.templating.helpers import is_re_customer, \
     is_cls_peer, is_cls, is_ias_customer, is_ias_private, is_ias_public, \
     is_ias_upstream, is_ias_peer, is_lag_backbone, is_nren, is_phy_upstream, \
-    is_re_peer, is_gcs, is_geantopen, is_l2circuit, is_lhcone_peer, \
+    is_re_peer, is_gcs, is_cae1, is_geantopen, is_l2circuit, is_lhcone_peer, \
     is_lhcone_customer, is_lhcone, is_mdvpn, get_aggregate_dashboard_data, \
     get_interface_data, parse_backbone_name, parse_phy_upstream_name, \
     get_dashboard_data, get_aggregate_interface_data
@@ -196,11 +196,11 @@ def provision(config):
             },
             'IAS UPSTREAM': {
                 'predicate': is_ias_upstream,
-                'tag': 'IAS_UPSTREAM'
+                'tag': ['IAS_UPSTREAM', 'UPSTREAM']
             },
             'GWS PHY Upstream': {
                 'predicate': is_phy_upstream,
-                'tag': 'GWS_UPSTREAM',
+                'tag': ['GWS_UPSTREAM', 'UPSTREAM'],
                 'errors': True,
                 'parse_func': parse_phy_upstream_name
             }
@@ -233,10 +233,10 @@ def provision(config):
                 'predicate': is_lhcone,
                 'tag': 'lhcone',
             },
-            # 'CAE1': {
-            #     'predicate': is_cae1,
-            #     'tag': 'cae',
-            # }
+            'CAE1': {
+                'predicate': is_cae1,
+                'tag': 'cae',
+            }
         }
 
         with ProcessPoolExecutor(max_workers=4) as executor:
@@ -264,7 +264,7 @@ def provision(config):
             if dashboard['title'] not in excluded_dashboards:
                 if dashboard['title'].lower() == 'home':
                     dashboard['uid'] = 'home'
-                    create_dashboard(token_request, dashboard)
+                create_dashboard(token_request, dashboard)
 
         # Home dashboard is always called "Home"
         # Make sure it's set for the organization
diff --git a/brian_dashboard_manager/templating/helpers.py b/brian_dashboard_manager/templating/helpers.py
index 9f9adf29cb3d2094dcaa2943b5e72bf729a2d5c7..1171c9fc88c0f39837382a46aeb6c7e575698555 100644
--- a/brian_dashboard_manager/templating/helpers.py
+++ b/brian_dashboard_manager/templating/helpers.py
@@ -113,7 +113,10 @@ def is_lag_backbone(interface):
 
 
 def is_cae1(interface):
-    return interface.get('router', '').lower() == 'mx1.lon.uk.geant.net'
+    iface_regex = r'^ae12(\.\d+|$)$'
+    is_router = interface.get('router', '').lower() == 'mx1.lon.uk.geant.net'
+    is_iface = re.match(iface_regex, interface.get('name'))
+    return is_router and is_iface
 
 
 def parse_backbone_name(description, *args, **kwargs):
@@ -329,14 +332,19 @@ def get_dashboard_data(data, datasource, tag, errors=False):
         return result
 
     for peer, panels in data.items():
-
-        yield {
+        result = {
             'title': peer,
             'datasource': datasource,
             'panels': get_panel_definitions(panels, datasource),
-            'tag': tag
         }
 
+        if isinstance(tag, list):
+            result['tags'] = tag
+        else:
+            result['tag'] = tag
+
+        yield result
+
 
 def create_aggregate_panel(title, gridpos, targets, datasource):
 
@@ -409,9 +417,15 @@ def get_aggregate_dashboard_data(title, targets, datasource, tag):
             title + f' - {target}', gridPos, targets[target], datasource)
         panels.extend([_in, _out])
 
-    return {
+    result = {
         'title': title,
         'datasource': datasource,
         'panels': panels,
-        'tag': tag
+
     }
+    if isinstance(tag, list):
+        result['tags'] = tag
+    else:
+        result['tag'] = tag
+
+    return result
diff --git a/brian_dashboard_manager/templating/templates/shared/dashboard.json.j2 b/brian_dashboard_manager/templating/templates/shared/dashboard.json.j2
index 3201b6fc060a005e093810a2336acd90eabb340f..1c6564d719aeacd1bec7f47cdacf74ffb465689d 100644
--- a/brian_dashboard_manager/templating/templates/shared/dashboard.json.j2
+++ b/brian_dashboard_manager/templating/templates/shared/dashboard.json.j2
@@ -17,7 +17,15 @@
   "graphTooltip": 0,
   "schemaVersion": 27,
   "style": "dark",
+  {% if not tags %}
   "tags": ["{{ tag }}"],
+  {% else %}
+  "tags": [
+    {% for tag in tags %}
+      "{{ tag }}"{{ "," if not loop.last }}
+    {% endfor %}
+  ],
+  {% endif %}
   "templating": {
     "list": []
   },