diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 9590db91abfa7e0a2874e57db34d83cdd958067a..f84caf74e48ffe6cca6178d767ebf254dcd41579 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -1154,12 +1154,10 @@ def check_task_status(task_id, parent=None, forget=False):
 @app.task(base=InventoryTask, bind=True, name='update_entry_point')
 @log_task_entry_and_exit
 def update_entry_point(self):
-
-    self.log_info('querying netdash for managed routers')
-    routers = list(juniper.load_routers_from_netdash(
-        InventoryTask.config['managed-routers']))
-    self.log_info(f'found {len(routers)} routers')
-
+    routers = retrieve_and_persist_neteng_managed_device_list(
+        info_callback=self.log_info,
+        warning_callback=self.log_warning
+    )
     lab_routers = InventoryTask.config.get('lab-routers', [])
 
     _erase_next_db_chorded(InventoryTask.config)
@@ -1195,6 +1193,44 @@ def empty_task(self, message):
     logger.warning(f'message from empty task: {message}')
 
 
+def retrieve_and_persist_neteng_managed_device_list(
+        info_callback=lambda s: None,
+        warning_callback=lambda s: None):
+    netdash_equipment = None
+    try:
+        info_callback('querying netdash for managed routers')
+        netdash_equipment = list(juniper.load_routers_from_netdash(
+            InventoryTask.config['managed-routers']))
+    except Exception as e:
+        warning_callback(f'Error retrieving device list: {e}')
+
+    if netdash_equipment:
+        info_callback(f'found {len(netdash_equipment)} routers')
+    else:
+        warning_callback('No devices retrieved, using previous list')
+        try:
+            current_r = get_current_redis(InventoryTask.config)
+            netdash_equipment = current_r.get('netdash')
+            netdash_equipment = json.loads(netdash_equipment.decode('utf-8'))
+            if not netdash_equipment:
+                raise InventoryTaskError(
+                    'No equipment retrieved from previous list')
+        except Exception as e:
+            warning_callback(str(e))
+            update_latch_status(pending=False, failure=True)
+            raise e
+
+    try:
+        next_r = get_next_redis(InventoryTask.config)
+        next_r.set('netdash', json.dumps(netdash_equipment))
+        info_callback(f'saved {len(netdash_equipment)} managed routers')
+    except Exception as e:
+        warning_callback(str(e))
+        update_latch_status(pending=False, failure=True)
+        raise e
+    return netdash_equipment
+
+
 # updated with transaction
 def _erase_next_db_chorded(config):
     """
diff --git a/test/test_worker.py b/test/test_worker.py
index 2952b9ccaf5248aa9e0835995d1db3585a4150a7..3a4190eb99c83906263c6316fcd847119b71ca5f 100644
--- a/test/test_worker.py
+++ b/test/test_worker.py
@@ -1,6 +1,9 @@
+import json
+
 from inventory_provider.tasks import common
 from inventory_provider.tasks.worker import transform_ims_data, \
-    extract_ims_data, persist_ims_data
+    extract_ims_data, persist_ims_data, \
+    retrieve_and_persist_neteng_managed_device_list
 
 
 def test_extract_ims_data(mocker):
@@ -301,3 +304,23 @@ def test_persist_ims_data(mocker, data_config, mocked_redis):
 
     assert [k.decode("utf-8") for k in r.keys("poller_cache:*")] == \
            ["poller_cache:eq1", "poller_cache:eq2"]
+
+
+def test_retrieve_and_persist_neteng_managed_device_list(
+        mocker, data_config, mocked_redis):
+    device_list = ['abc', 'def']
+    r = common._get_redis(data_config)
+
+    mocker.patch(
+        'inventory_provider.tasks.worker.InventoryTask.config'
+    )
+    mocker.patch('inventory_provider.tasks.worker.get_next_redis',
+                 return_value=r)
+    r.delete('netdash')
+    mocked_j = mocker.patch(
+        'inventory_provider.tasks.worker.juniper.load_routers_from_netdash'
+    )
+    mocked_j.return_value = device_list
+    result = retrieve_and_persist_neteng_managed_device_list()
+    assert result == device_list
+    assert json.loads(r.get('netdash')) == device_list