diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 52c2807b0336c0dc8ab11ad6c7320e0f409c0760..b866a70ac73002e39e35bd1aedce91c704d008ef 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -711,11 +711,9 @@ def ims_task(self, use_current=False):
 def extract_ims_data():
 
     c = InventoryTask.config["ims"]
-    ds1 = IMS(c['api'], c['username'], c['password'])
-    ds2 = IMS(c['api'], c['username'], c['password'])
-    ds3 = IMS(c['api'], c['username'], c['password'])
-    ds4 = IMS(c['api'], c['username'], c['password'])
-    ds5 = IMS(c['api'], c['username'], c['password'])
+
+    def _ds() -> IMS:
+        return IMS(c['api'], c['username'], c['password'])
 
     locations = {}
     lg_routers = []
@@ -729,26 +727,26 @@ def extract_ims_data():
 
     def _populate_locations():
         nonlocal locations
-        locations = {k: v for k, v in ims_data.get_node_locations(ds1)}
+        locations = {k: v for k, v in ims_data.get_node_locations(ds=_ds())}
 
     def _populate_lg_routers():
         nonlocal lg_routers
-        lg_routers = list(ims_data.lookup_lg_routers(ds5))
+        lg_routers = list(ims_data.lookup_lg_routers(ds=_ds()))
 
     def _populate_customer_contacts():
         nonlocal customer_contacts
         customer_contacts = \
-            {k: v for k, v in ims_data.get_customer_service_emails(ds2)}
+            {k: v for k, v in ims_data.get_customer_service_emails(ds=_ds())}
 
     def _populate_circuit_ids_to_monitor():
         nonlocal circuit_ids_to_monitor
         circuit_ids_to_monitor = \
-            list(ims_data.get_monitored_circuit_ids(ds3))
+            list(ims_data.get_monitored_circuit_ids(ds=_ds()))
 
     def _populate_additional_circuit_customer_ids():
         nonlocal additional_circuit_customer_ids
         additional_circuit_customer_ids = \
-            ims_data.get_circuit_related_customer_ids(ds4)
+            ims_data.get_circuit_related_customer_ids(ds=_ds())
 
     exceptions = {}
     with concurrent.futures.ThreadPoolExecutor() as executor:
@@ -771,18 +769,19 @@ def extract_ims_data():
 
     def _populate_hierarchy():
         nonlocal hierarchy
-        hierarchy = {d['id']: d for d in ims_data.get_circuit_hierarchy(ds1)}
+        hierarchy = {
+            d['id']: d for d in ims_data.get_circuit_hierarchy(ds=_ds())}
         logger.debug("hierarchy complete")
 
     def _populate_port_id_details():
         nonlocal port_id_details
-        for x in ims_data.get_port_details(ds2):
+        for x in ims_data.get_port_details(ds=_ds()):
             pd = port_id_details[x['port_id']]
             pd.append(x)
         logger.debug("Port details complete")
 
     def _populate_circuit_info():
-        for x in ims_data.get_port_id_services(ds3):
+        for x in ims_data.get_port_id_services(ds=_ds()):
             port_id_services[x['port_a_id']].append(x)
         logger.debug("port circuits complete")