diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py
index ce92b869..ff8adbb2 100644
--- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py
+++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py
@@ -273,17 +273,23 @@ def perform_requests(operator, nodes, element, cfg, inputdata):
     configdata = cfg.get_node_attributes(nodes, _configattributes)
     cfg.decrypt = cryptit
     resultdata = queue.LightQueue()
-    pendingnum = len(nodes)
+    livingthreads = set([])
     for node in nodes:
-        _ipmiworkers.spawn_n(
+        livingthreads.add(_ipmiworkers.spawn(
             perform_request, operator, node, element, configdata, inputdata,
-            cfg, resultdata)
-    while pendingnum:
-        datum = resultdata.get()
-        if datum == 'Done':
-            pendingnum -= 1
-        else:
-            yield datum
+            cfg, resultdata))
+    while livingthreads:
+        try:
+            datum = resultdata.get(timeout=10)
+            while datum:
+                if datum != 'Done':
+                    yield datum
+                datum = resultdata.get_nowait()
+        except queue.Empty:
+            pass
+        for t in list(livingthreads):
+            if t.dead:
+                livingthreads.discard(t)
 
 
 def perform_request(operator, node, element,