diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py
index ccf7f928eb88670a511906f64c9d64d05ddfd571..a51b639d2e939972a1a0a971078363401eaf3daa 100644
--- a/brian_dashboard_manager/grafana/provision.py
+++ b/brian_dashboard_manager/grafana/provision.py
@@ -171,7 +171,7 @@ AGG_DASHBOARDS = {
 
 
 def provision_folder(token_request, folder_name, dash,
-                     ds_name, excluded_dashboards):
+                     config, ds_name, excluded_dashboards):
     """
     Function to provision dashboards within a folder.
     """
@@ -193,7 +193,8 @@ def provision_folder(token_request, folder_name, dash,
 
     is_nren = folder_name == 'NREN Access'
     if is_nren:
-        data = get_nren_interface_data(interfaces)
+        services = fetch_services(config['reporting_provider'])
+        data = get_nren_interface_data(services, interfaces)
         dash_data = get_nren_dashboard_data(data, ds_name, tag)
     else:
         data = get_interface_data(interfaces)
@@ -348,7 +349,7 @@ def _provision_interfaces(config, org_config, ds_name, token):
                 f'Provisioning {org_config["name"]}/{folder_name} dashboards')
             res = executor.submit(
                 provision_folder, token,
-                folder_name, folder, ds_name,
+                folder_name, folder, config, ds_name,
                 excluded_folder_dashboards(org_config, folder_name))
             provisioned.append(res)
 
@@ -630,8 +631,8 @@ def provision(config):
         ds_name = datasource.get('name', 'PollerInfluxDB')
 
         managed_dashboards = itertools.chain(
-            _provision_service_dashboards(
-                config, org_config, ds_name, token_request),
+            # _provision_service_dashboards(
+            #     config, org_config, ds_name, token_request),
             _provision_interfaces(
                 config, org_config, ds_name, token_request),
             _provision_gws_indirect(
diff --git a/brian_dashboard_manager/templating/helpers.py b/brian_dashboard_manager/templating/helpers.py
index fceb3e0d5bc49bcf8bcdcd501b3ed042fa8e1684..ca9323c1145c57def56c2f6d47625da56c2f30f1 100644
--- a/brian_dashboard_manager/templating/helpers.py
+++ b/brian_dashboard_manager/templating/helpers.py
@@ -2,6 +2,7 @@
 Helper functions used to group interfaces together and generate the
 necessary data to generate the dashboards from templates.
 """
+from collections import defaultdict
 import logging
 import json
 from itertools import product
@@ -63,7 +64,7 @@ def letter_generator():
         yield result
 
 
-def get_nren_interface_data(interfaces):
+def get_nren_interface_data(services, interfaces):
     """
     Helper for grouping interfaces into groups of NRENs
     Extracts information from interfaces to be used in panels.
@@ -72,6 +73,66 @@ def get_nren_interface_data(interfaces):
     """
     result = {}
 
+    customers = defaultdict(list)
+
+    for service in services:
+        _customers = service.get('customers')
+        for cust in _customers:
+            customers[cust].append(service)
+
+    for customer, services in customers.items():
+        if not any([s['service_type'] == 'GEANT IP' for s in services]):
+            # NREN access customers must have at least one GEANT IP service
+            continue
+
+        dashboard = result.setdefault(customer, {
+            'AGGREGATES': [],
+            'SERVICES': [],
+            'PHYSICAL': []
+        })
+
+        for service in services:
+            _interfaces = service.get('endpoints')
+            name = service.get('name')
+            sid = service.get('sid')
+            scid = service.get('scid')
+
+            measurement = 'scid_rates'
+
+            lag_service = service['service_type'] == 'ETHERNET'
+
+            if lag_service:
+                if len(_interfaces) > 1:
+                    logger.info(
+                        f'{sid} {name} aggregate service has > 1 interface')
+                    continue
+
+                if 'interface' in _interfaces[0]:
+                    if_name = _interfaces[0].get('interface')
+                    router = _interfaces[0].get('hostname')
+                else:
+                    if_name = _interfaces[0].get('port')
+                    router = _interfaces[0].get('equipment')
+                router = router.replace('.geant.net', '')
+                location = router.split('.')[1].upper()
+                title = f'{location} - {customer} ({if_name}) | {name}'
+                dashboard['AGGREGATES'].append({
+                    'measurement': measurement,
+                    'alias': title,
+                    'scid': scid
+                })
+
+            else:
+                if 'MDVPN' in service['service_type']:
+                    # MDVPN type services don't have data in BRIAN
+                    continue
+                title = f'{name} ({sid})'
+                dashboard['SERVICES'].append({
+                    'measurement': measurement,
+                    'title': title,
+                    'scid': scid
+                })
+
     for interface in interfaces:
 
         description = interface['description'].strip()
@@ -94,13 +155,6 @@ def get_nren_interface_data(interfaces):
             })
 
             if info['interface_type'] == 'AGGREGATE':
-                dashboard['AGGREGATES'].append({
-                    'interface': interface_name,
-                    'hostname': host,
-                    'alias':
-                        f"{location} - {dashboard_name} ({interface_name})"
-                })
-
                 # link aggregates are also shown
                 # under the physical dropdown
                 dashboard['PHYSICAL'].append({
@@ -108,13 +162,6 @@ def get_nren_interface_data(interfaces):
                     'hostname': host,
                     'interface': interface_name
                 })
-
-            elif info['interface_type'] == 'LOGICAL':
-                dashboard['SERVICES'].append({
-                    'title': panel_title,
-                    'hostname': host,
-                    'interface': interface_name
-                })
             elif info['interface_type'] == 'PHYSICAL':
                 dashboard['PHYSICAL'].append({
                     'title': panel_title,
diff --git a/test/test_update.py b/test/test_update.py
index f8be68b42ac38f7073aca9761db92c3c7b9a950c..d529f480e16a9bfb51f4b9c34bc3dc11197f7d32 100644
--- a/test/test_update.py
+++ b/test/test_update.py
@@ -637,7 +637,7 @@ def test_provision_folder(data_config, mocker):
 
     excluded_dashboards = []
     nren_result = provision_folder(None, 'testfolder', dashboards['NREN'],
-                                   'testdatasource', excluded_dashboards)
+                                   [], 'testdatasource', excluded_dashboards)
 
     assert len(nren_result) == 3
     assert nren_result[0]['title'] == 'GEANT'
@@ -646,14 +646,14 @@ def test_provision_folder(data_config, mocker):
 
     excluded_dashboards = ['SWITCH']
     nren_excluded = provision_folder(None, 'testfolder', dashboards['NREN'],
-                                     'testdatasource', excluded_dashboards)
+                                     [], 'testdatasource', excluded_dashboards)
 
     assert len(nren_excluded) == 2
     assert nren_excluded[0]['title'] == 'GEANT'
     assert nren_excluded[1]['title'] == 'KIAE'
 
     cust_result = provision_folder(None, 'testfolder', dashboards['RE_CUST'],
-                                   'testdatasource', ['GEANT'])
+                                   [], 'testdatasource', ['GEANT'])
     assert len(cust_result) == 2
     assert cust_result[0]['title'] == 'KIAE'
     assert cust_result[1]['title'] == 'SWITCH'