diff --git a/inventory_provider/routes/mic.py b/inventory_provider/routes/mic.py
index 7315674b7c2e44fa5d5433bee42af94806165034..b4d669aee886924b84af25a1d133ea1b38ed4234 100644
--- a/inventory_provider/routes/mic.py
+++ b/inventory_provider/routes/mic.py
@@ -135,43 +135,61 @@ def get_interfaces(node):
     return Response(result, mimetype='application/json')
 
 
-@routes.route('/impact/<site>')
-@routes.route('/impact/<site>/<node>')
+@routes.route('/impact/<site>', defaults={'node': None, 'interface_': None})
+@routes.route('/impact/<site>/<node>', defaults={'interface_': None})
 @routes.route('/impact/<site>/<node>/<interface_>')
-def get_impact(site, node=None, interface_=None):
+def get_impact(site, node, interface_):
     cache_key_end = ':'.join(filter(None, (site, node, interface_)))
     cache_key = f"classifier-cache:mic:impact:{cache_key_end}"
+    logger.debug(cache_key)
     r = common.get_current_redis()
     result = _ignore_cache_or_retrieve(request, cache_key, r)
     if not result:
+        data = []
+        config = current_app.config['INVENTORY_PROVIDER_CONFIG']
         if interface_:
             key_pattern = f"ims:interface_services:{node}:{interface_}"
-            data = [r.get(key_pattern)]
-        elif node:
-            data = []
+            raw_data = r.get(key_pattern)
+            if raw_data:
+                data = json.loads(raw_data.decode('utf-8'))
         else:
-            data = []
-        data = (json.loads(all_data.decode('utf-8')) for all_data in data)
-        # convert list of lists to single dimensional list
-        data = itertools.chain(*data)
-        # extract all related services from each list element and join into a
-        # single list
-        data = itertools.chain(*(d.get('related-services', []) for d in data))
-        data = filter(
-            lambda x: x['circuit_type'] == 'service'
-            and x['status'] == 'operational',
-            data)
-        unique_services = sorted({d['id']: d for d in data}.values(),
-                                 key=lambda x: x['name'])
+            def _get_data(_key_pattern):
+                for doc in common.load_json_docs(
+                        config_params=config,
+                        key_pattern=_key_pattern,
+                        num_threads=20,):
+                    yield from doc['value']
+            if node:
+                key_pattern = f"ims:interface_services:{node}:*"
+            else:
+                key_pattern = "ims:interface_services:*"
+            data = _get_data(key_pattern)
+
         services_by_type = defaultdict(list)
-        for service in unique_services:
-            services_by_type[service['service_type']].append({
-                'id': service['id'],
-                'sid': service['sid'],
-                'name': service['name'],
-                'service_type': service['service_type'],
-                'contacts': service['contacts']
-            })
+        if data:
+
+            rs = itertools.chain(
+                *(d.get('related-services', [])
+                  for d in data if d['pop_name'] == site))
+
+            rs = filter(
+                lambda x: x['circuit_type'] == 'service'
+                and x['status'] == 'operational',
+                rs)
+            unique_services = sorted({d['id']: d for d in rs}.values(),
+                                     key=lambda x: x['name'])
+            try:
+                for service in unique_services:
+                    services_by_type[service['service_type']].append({
+                        'id': service['id'],
+                        'sid': service.get('sid', ''),
+                        'name': service['name'],
+                        'service_type': service['service_type'],
+                        'contacts': service['contacts']
+                    })
+            except Exception as e:
+                logger.debug(json.dumps(service, indent=2))
+                raise e
         result = json.dumps(services_by_type)
 
         r.set(cache_key, result.encode('utf-8'))
diff --git a/test/test_mic_routes.py b/test/test_mic_routes.py
index cb43ae49d7f69cbab5cbd2fdf3da175e987f9f85..e29b64702419cfdcc60d832e6d8fd91d234d0f10 100644
--- a/test/test_mic_routes.py
+++ b/test/test_mic_routes.py
@@ -1,6 +1,7 @@
 import json
 
 import jsonschema
+import pytest
 
 from inventory_provider.routes.mic import SITES_LIST_SCHEMA, \
     NODES_LIST_SCHEMA, INTERFACES_LIST_SCHEMA, IMPACT_SCHEMA
@@ -41,10 +42,12 @@ def test_get_interfaces(client, mocked_redis):
     jsonschema.validate(response_data, INTERFACES_LIST_SCHEMA)
 
 
-def test_get_impact(client, mocked_redis):
-    rv = client.get(
-        '/mic/impact/AMSTERDAM/MX1.AMS.NL/AE21',
-        headers=DEFAULT_REQUEST_HEADERS)
+@pytest.mark.parametrize('endpoint', [
+    '/mic/impact/AMSTERDAM/MX1.AMS.NL/AE21',
+    '/mic/impact/LONDON/MX1.LON.UK',
+    '/mic/impact/GENEVA'])
+def test_get_impact(endpoint, client, mocked_redis):
+    rv = client.get(endpoint, headers=DEFAULT_REQUEST_HEADERS)
     assert rv.status_code == 200
     assert rv.is_json
     response_data = json.loads(rv.data.decode('utf-8'))