diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py
index a6967032cd7b72f37078e70c8b8886f39f809cc0..89256f0e787910b924f9d13151b38568b5f1e948 100644
--- a/inventory_provider/db/ims_data.py
+++ b/inventory_provider/db/ims_data.py
@@ -635,17 +635,20 @@ def lookup_geant_nodes(ds: IMS):
 
 
 @log_entry_and_exit
-def get_router_vendors(ds: IMS):
+def get_equipment_details(ds: IMS):
     ed_nav_properties = [
         ims.EQUIP_DEF_PROPERTIES['Nodes'],
         ims.EQUIP_DEF_PROPERTIES['Vendor']
     ]
-    for ed in ds.get_filtered_entities(
-            'equipmentdefinition',
-            'equipmentkind == ROUTER',
-            ed_nav_properties):
-        for r in ed.get('nodes', []):
-            yield r['name'], ed.get('vendor', {}).get('name', None)
+    for ed in ds.get_all_entities('equipmentdefinition', ed_nav_properties):
+        vendor = ed.get('vendor', {})
+        vendor_name = vendor.get('name', 'UNKNOWN') if vendor else 'UNKNOWN'
+        for node in ed.get('nodes', []):
+            yield {
+                'name': node['name'],
+                'model': ed.get('name', 'UNKNOWN'),
+                'vendor': vendor_name
+            }
 
 
 @log_entry_and_exit
diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index e11bf16e3f42708a492c15f390e32125c3c2fa6d..843f805a0e3a8cfff0cb602d4a7e193c28317457 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -509,7 +509,6 @@ def update_entry_point(self):
             ),
             final_task.si().on_error(task_error_handler.s())
         )()
-
         return self.request.id
     except (RedisError, KombuError):
         update_latch_status(InventoryTask.config, pending=False, failure=True)
@@ -1116,6 +1115,7 @@ def _extract_ims_data(
     flexils_data = {}
     customers = {}
     customer_regions = {}
+    equipment_details = []
 
     hierarchy = {}
     port_id_details = defaultdict(list)
@@ -1240,6 +1240,11 @@ def _extract_ims_data(
             d['id']: d for d in ims_data.get_circuit_hierarchy(ds=_ds())}
         logger.debug("hierarchy complete")
 
+    @log_task_entry_and_exit
+    def _populate_equipment_details():
+        nonlocal equipment_details
+        equipment_details = list(ims_data.get_equipment_details(ds=_ds()))
+
     @log_task_entry_and_exit
     def _populate_port_id_details():
         nonlocal port_id_details
@@ -1261,7 +1266,8 @@ def _extract_ims_data(
             executor.submit(_populate_circuit_info): 'circuit_info',
             executor.submit(_populate_flexils_data): 'flexils_data',
             executor.submit(_populate_customers): 'customers',
-            executor.submit(_populate_customer_regions): 'customer_regions'
+            executor.submit(_populate_customer_regions): 'customer_regions',
+            executor.submit(_populate_equipment_details): 'equipment_details'
         }
 
         for future in concurrent.futures.as_completed(futures):
@@ -1287,7 +1293,8 @@ def _extract_ims_data(
         'geant_nodes': geant_nodes,
         'flexils_data': flexils_data,
         'customers': customers,
-        'customer_regions': customer_regions
+        'customer_regions': customer_regions,
+        'equipment_details': equipment_details
     }
 
 
@@ -1968,6 +1975,23 @@ def populate_mic_cache(interface_services, r):
     r.set(cache_key, result.encode('utf-8'))
 
 
+def _populate_equipment_vendors():
+    r = get_next_redis(InventoryTask.config)
+    populate_equipment_vendors(r)
+
+
+def populate_equipment_vendors(r):
+    equipment_details = json.loads(r.get('ims:cache:equipment_details').decode('utf-8'))
+    router_vendors = json.loads(r.get('netdash').decode('utf-8'))
+    equipment_details.extend({
+        'name': r,
+        'model': 'UNKNOWN',
+        'vendor': v} for r, v in router_vendors.items())
+    # equipment_vendors.update(router_vendors)
+    for ed in equipment_details:
+        r.set(f'state-checker:equipment-vendors:{ed["name"]}', json.dumps(ed))
+
+
 @app.task(base=InventoryTask, bind=True, name='final_task')
 @log_task_entry_and_exit
 def final_task(self):
@@ -1976,6 +2000,7 @@ def final_task(self):
     if latch['failure']:
         raise InventoryTaskError('Sub-task failed - check logs for details')
 
+    _populate_equipment_vendors()
     _build_subnet_db(update_callback=self.log_info)
     _build_snmp_peering_db(update_callback=self.log_info)
     _build_router_peering_db(update_callback=self.log_info)
diff --git a/test/test_ims_data.py b/test/test_ims_data.py
index 436be65d8d956a2d936e4b7be86e08422dba0e67..6698e6f5dd40a3f9b9f4d0f4c5e28e9f5e6f131c 100644
--- a/test/test_ims_data.py
+++ b/test/test_ims_data.py
@@ -9,7 +9,8 @@ from inventory_provider.db.ims_data import lookup_lg_routers, \
     get_node_locations, IMS_OPSDB_STATUS_MAP, \
     get_port_id_services, get_port_details, \
     get_circuit_hierarchy, get_ids_and_sids, NODE_LOCATION_SCHEMA, \
-    get_flexils_by_circuitid, SITE_LOCATION_SCHEMA, get_site_locations
+    get_flexils_by_circuitid, SITE_LOCATION_SCHEMA, get_site_locations, \
+    get_equipment_details
 
 
 def _json_test_data(filename):
@@ -464,3 +465,84 @@ def test_get_flexils_by_circuit_id(mocker):
         'dummy_base', 'dummy_username', 'dummy_password')
     res = get_flexils_by_circuitid(ds)
     assert res == expected_result
+
+
+def test_get_equipment_details(mocker):
+    ims_data = [
+        {
+            'id': 1001,
+            'name': 'Dummy ED 1',
+            'vendorId': 9001,
+            'vendor': {
+                'id': 9001,
+                'name': 'Dummy Vendor 1',
+                    'typeId': 1,
+                    'slaOnSiteId': None,
+                    'slaMainTimeToRepairId': None,
+            },
+            'nodes': [
+                {
+                    'id': 7001,
+                    'name': 'Dummy Node 1',
+                    'equipmentDefinitionId': 1001,
+                    'inventoryStatusId': 3,
+                    'siteId': 6001,
+                    'ringId': 5001,
+                },
+                {
+                    'id': 7002,
+                    'name': 'Dummy Node 2',
+                    'equipmentDefinitionId': 1001,
+                    'inventoryStatusId': 2,
+                    'siteId': 6001,
+                    'ringId': 5002,
+                }
+            ]
+        },
+        {
+            'id': 1002,
+            'name': 'Dummy ED 2',
+            'vendorId': 9002,
+            'vendor': {
+                'id': 9002,
+                'name': 'Dummy Vendor 2',
+                    'typeId': 1,
+                    'slaOnSiteId': None,
+                    'slaMainTimeToRepairId': None,
+            },
+            'nodes': [
+                {
+                    'id': 7003,
+                    'name': 'Dummy Node 3',
+                    'equipmentDefinitionId': 1002,
+                    'inventoryStatusId': 3,
+                    'siteId': 6001,
+                    'ringId': 5001,
+                }
+            ]
+        },
+        {
+            'id': 1003,
+            'name': 'Dummy ED 3',
+            'vendorId': 9002,
+            'vendor': {
+                'id': 9002,
+                'name': 'Dummy Vendor 2',
+                    'typeId': 1,
+                    'slaOnSiteId': None,
+                    'slaMainTimeToRepairId': None,
+            },
+            'nodes': []
+        }
+    ]
+    ims = mocker.patch('inventory_provider.db.ims.IMS')
+    ims.return_value.get_all_entities.return_value = ims_data
+
+    ds = inventory_provider.db.ims.IMS('xxx', 'xxx', 'xxx')
+    equipment_details = list(get_equipment_details(ds))
+    expected_result = [
+        {'name': 'Dummy Node 1', 'model': 'Dummy ED 1', 'vendor': 'Dummy Vendor 1'},
+        {'name': 'Dummy Node 2', 'model': 'Dummy ED 1', 'vendor': 'Dummy Vendor 1'},
+        {'name': 'Dummy Node 3', 'model': 'Dummy ED 2', 'vendor': 'Dummy Vendor 2'}
+    ]
+    assert equipment_details == expected_result