diff --git a/inventory_provider/app.py b/inventory_provider/app.py
index 25b9d63b51a4cc095c393f4d1fd2e75eaade4248..96316f2319e545c2e8094b08d024a72c4f0b69a8 100644
--- a/inventory_provider/app.py
+++ b/inventory_provider/app.py
@@ -9,7 +9,7 @@ from inventory_provider import constants
 
 logging.basicConfig(level=logging.WARNING)
 logging.getLogger(constants.SNMP_LOGGER_NAME).setLevel(logging.DEBUG)
-logging.getLogger(constants.THREADING_LOGGER_NAME).setLevel(logging.INFO)
+logging.getLogger(constants.TASK_LOGGER_NAME).setLevel(logging.INFO)
 logging.getLogger(constants.JUNIPER_LOGGER_NAME).setLevel(logging.DEBUG)
 logging.getLogger(constants.DATABASE_LOGGER_NAME).setLevel(logging.DEBUG)
 
diff --git a/inventory_provider/constants.py b/inventory_provider/constants.py
index 6c51564517c231ef643075ebd2703b73725cbd4b..20131656db8b11dfb68d28362e69d7dc536a5367 100644
--- a/inventory_provider/constants.py
+++ b/inventory_provider/constants.py
@@ -1,4 +1,4 @@
 SNMP_LOGGER_NAME = "snmp-logger"
-THREADING_LOGGER_NAME = "threading-logger"
 JUNIPER_LOGGER_NAME = "juniper-logger"
 DATABASE_LOGGER_NAME = "database-logger"
+TASK_LOGGER_NAME = "task-logger"
\ No newline at end of file
diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py
index 9780d11d7772687bbd7387bd25ba7e211e5d8661..d801c8d329f781a1e5ee792c4b429f749eb65d4c 100644
--- a/inventory_provider/juniper.py
+++ b/inventory_provider/juniper.py
@@ -148,4 +148,4 @@ def fetch_interfaces(hostname, ssh_params):
 
     return _loads(
         output[1],
-        object_pairs_hook=_dups_to_list) if output[1] else {}
\ No newline at end of file
+        object_pairs_hook=_dups_to_list) if output[1] else {}
diff --git a/inventory_provider/router_details.py b/inventory_provider/router_details.py
index a546deb9eb603e40c66d9ebb98b9c9392b502d8d..34ae92a1d55a7cd5bf330c84d070959ae7ddb00c 100644
--- a/inventory_provider/router_details.py
+++ b/inventory_provider/router_details.py
@@ -1,97 +1,43 @@
 import json
 import logging
-from multiprocessing import Process, Queue
 
 import redis
 
-from inventory_provider import constants, juniper
-from inventory_provider import snmp
-
-
-def get_router_interfaces_q(router, params, q):
-    threading_logger = logging.getLogger(constants.THREADING_LOGGER_NAME)
-    threading_logger.debug("[ENTER>>] get_router_interfaces_q: %r" % router)
-    q.put(list(snmp.get_router_interfaces(router, params)))
-    threading_logger.debug("[<<EXIT]  get_router_interfaces_q: %r" % router)
-
-
-def ssh_exec_commands_q(hostname, ssh_params, commands, q):
-    threading_logger = logging.getLogger(constants.THREADING_LOGGER_NAME)
-    threading_logger.debug("[ENTER>>] exec_router_commands_q: %r" % hostname)
-    q.put(list(juniper.ssh_exec_commands(hostname, ssh_params, commands)))
-    threading_logger.debug("[<<EXIT] exec_router_commands_q: %r" % hostname)
-
-
-def get_router_details(router, params):
-
-    threading_logger = logging.getLogger(constants.THREADING_LOGGER_NAME)
-
-    threading_logger.debug("[ENTER>>]get_router_details: %r" % router)
-
-    commands = list(juniper.shell_commands())
-
-    snmpifc_proc_queue = Queue()
-    snmpifc_proc = Process(
-        target=get_router_interfaces_q,
-        args=(router, params, snmpifc_proc_queue))
-    snmpifc_proc.start()
-
-    commands_proc_queue = Queue()
-    commands_proc = Process(
-        target=ssh_exec_commands_q,
-        args=(
-            router["hostname"],
-            params["ssh"],
-            [c["command"] for c in commands],
-            commands_proc_queue))
-    commands_proc.start()
-
-    threading_logger.debug("waiting for commands result: %r" % router)
-    command_output = commands_proc_queue.get()
-    assert len(command_output) == len(commands)
-
-    r = redis.StrictRedis(
-        host=params["redis"]["hostname"],
-        port=params["redis"]["port"])
-    for c, o in zip(commands, command_output):
-        if c["key"]:
-            r.hset(
-                name=router["hostname"],
-                key=c["key"],
-                value=json.dumps(c["parser"](o)))
-    commands_proc.join()
-    threading_logger.debug("... got commands result & joined: %r" % router)
-
-    threading_logger.debug("waiting for snmp ifc results: %r" % router)
-    r.hset(
-        name=router["hostname"],
-        key="snmp-interfaces",
-        value=json.dumps(snmpifc_proc_queue.get()))
-    snmpifc_proc.join()
-    threading_logger.debug("... got snmp ifc result & joined: %r" % router)
-
-    threading_logger.debug("[<<EXIT]get_router_details: %r" % router)
+from inventory_provider.tasks.app import app
+from inventory_provider.constants import TASK_LOGGER_NAME
+
+
+def get_router_details(router):
+    task_logger = logging.getLogger(TASK_LOGGER_NAME)
+    task_logger.debug("launching task: "
+                      "inventory_provider.tasks.worker.juniper_refresh_bgp")
+    app.send_task(
+        'inventory_provider.tasks.worker.juniper_refresh_bgp',
+        args=[router["hostname"]])
+    task_logger.debug("launching task: "
+                      "inventory_provider.tasks.worker.juniper_refresh_vrr")
+    app.send_task(
+        'inventory_provider.tasks.worker.juniper_refresh_vrr',
+        args=[router["hostname"]])
+    task_logger.debug("launching task: "
+                      "inventory_provider"
+                      ".tasks.worker.juniper_refresh_interfaces")
+    app.send_task(
+        'inventory_provider.tasks.worker.juniper_refresh_interfaces',
+        args=[router["hostname"]])
+    task_logger.debug("launching task: "
+                      "inventory_provider"
+                      ".tasks.worker.snmp_refresh_interfaces")
+    app.send_task(
+        'inventory_provider.tasks.worker.snmp_refresh_interfaces',
+        args=[router["hostname"], router["community"]])
 
 
 def update_network_details(params):
-
-    threading_logger = logging.getLogger(constants.THREADING_LOGGER_NAME)
-
-    processes = []
+    task_logger = logging.getLogger(TASK_LOGGER_NAME)
     for r in params["routers"]:
-        p = Process(target=get_router_details, args=(r, params))
-        p.start()
-        processes.append({"router": r, "process": p})
-
-    result = {}
-    for p in processes:
-        threading_logger.debug(
-            "waiting for get_router_details result: %r" % p["router"])
-        p["process"].join()
-        threading_logger.debug(
-            "got result and joined get_router_details proc: %r" % p["router"])
-
-    return result
+        task_logger.info("fetching router details for: %r" % r)
+        get_router_details(r)
 
 
 def load_network_details(redis_params):
@@ -110,3 +56,15 @@ def load_network_details(redis_params):
         result[hostname.decode("utf-8")] = host
 
     return result
+
+
+if __name__ == "__main__":
+    from inventory_provider import config
+    with open("config.json") as f:
+        params = config.load(f)
+
+    # update_network_details(params)
+
+    network_info = load_network_details(params["redis"])
+    with open("./router-info.json", "w") as f:
+        f.write(json.dumps(network_info))
\ No newline at end of file