diff --git a/confluent/pluginapi.py b/confluent/pluginapi.py
index d7b405e0..8e11da54 100644
--- a/confluent/pluginapi.py
+++ b/confluent/pluginapi.py
@@ -28,22 +28,26 @@ pluginmap = {}
 def load_plugins():
     # To know our plugins directory, we get the parent path of 'bin'
     path=os.path.dirname(os.path.realpath(__file__))
-    plugindir = os.path.realpath(os.path.join(path,'..','plugins'))
-    sys.path.append(plugindir)
+    plugintop = os.path.realpath(os.path.join(path,'..','plugins'))
     plugins = set()
-    #two passes, to avoid adding both py and pyc files
-    for plugin in os.listdir(plugindir):
-        plugin = os.path.splitext(plugin)[0]
-        plugins.add(plugin)
-    for plugin in plugins:
-        if plugin.startswith('.'):
+    for plugindir in os.listdir(plugintop):
+        plugindir = os.path.join(plugintop,plugindir)
+        if not os.path.isdir(plugindir):
             continue
-        tmpmod = __import__(plugin)
-        if 'plugin_names' in tmpmod.__dict__:
-            for name in tmpmod.plugin_names:
-                pluginmap[name] = tmpmod
-        else:
-            pluginmap[plugin] = tmpmod
+        sys.path.append(plugindir)
+        #two passes, to avoid adding both py and pyc files
+        for plugin in os.listdir(plugindir):
+            plugin = os.path.splitext(plugin)[0]
+            plugins.add(plugin)
+        for plugin in plugins:
+            if plugin.startswith('.'):
+                continue
+            tmpmod = __import__(plugin)
+            if 'plugin_names' in tmpmod.__dict__:
+                for name in tmpmod.plugin_names:
+                    pluginmap[name] = tmpmod
+            else:
+                pluginmap[plugin] = tmpmod
 
 nodetree = {
     '/': ['power/', 'boot/', 'console/', 'attributes/'],
diff --git a/plugins/ipmi.py b/plugins/hardwaremanagement/ipmi.py
similarity index 100%
rename from plugins/ipmi.py
rename to plugins/hardwaremanagement/ipmi.py