class PluginMount(type):
    """
    A plugin mount point derived from:
    http://martyalchin.com/2008/jan/10/simple-plugin-framework/
    Acts as a metaclass which creates anything inheriting from Plugin
    """

    def __init__(cls, name, base, attr):
        """Called when a Plugin derived class is imported

        Gathers all __host_commands__ to __host_cmds__
        and all __server_commands__ to __server_cmds__
        Generate __cmd_states__"""
        if not hasattr(cls, "__cmd_states__"):
            cls.__cmd_states__ = {}
        if not hasattr(cls, "__host_cmds__"):
            cls.__host_cmds__ = {}
        if not hasattr(cls, "__server_cmds__"):
            cls.__server_cmds__ = {}

        tmp = cls()
        if hasattr(cls, "__host_commands__"):
            for cmd in tmp.__host_commands__:
                cls.__host_cmds__[cmd] = tmp.__host_commands__[cmd][0]
                try:
                    cls.__cmd_states__[cmd] = tmp.__host_commands__[cmd][1:]
                except:
                    print("Command %s is not callable from any state" %cmd)
                    cls.__cmd_states__[cmd] = []
        if hasattr(cls, "__server_commands__"):
            for cmd in tmp.__server_commands__:
                cls.__server_cmds__[cmd] = tmp.__server_commands__[cmd][0]
                try:
                    cls.__cmd_states__[cmd] = tmp.__server_commands__[cmd][1:]
                except:
                    print("Command %s is not callable from any state" %cmd)
                    cls.__cmd_states__[cmd] = []
        #print("%s was loaded" % name)

class Plugin(object):
    """Plugin class (to be extended by plugins)"""
    __metaclass__ = PluginMount

@@ -330,20 +330,22 @@
 s all __
-host
+server
 _command
@@ -353,20 +353,22 @@
 __ to __
-host
+server
 _cmds__%0A
@@ -389,42 +389,28 @@
 l __
-server_commands__ to __server_cmds
+cmd_help__ to __help
 __%0A 
@@ -439,24 +439,95 @@
 states__%22%22%22%0A
+        if not hasattr(cls, %22__help__%22):%0A            cls.__help__ = %7B%7D%0A
         if n
@@ -601,89 +601,8 @@
  %7B%7D%0A
-        if not hasattr(cls, %22__host_cmds__%22):%0A            cls.__host_cmds__ = %7B%7D%0A
     
@@ -707,418 +707,8 @@
 s()%0A
-        if hasattr(cls, %22__host_commands__%22):%0A            for cmd in tmp.__host_commands__:%0A                cls.__host_cmds__%5Bcmd%5D = tmp.__host_commands__%5Bcmd%5D%5B0%5D%0A                try:%0A                    cls.__cmd_states__%5Bcmd%5D = tmp.__host_commands__%5Bcmd%5D%5B1:%5D%0A                except:%0A                    print(%22Command %25s is not callable from any state%22 %25cmd)%0A                    cls.__cmd_states__%5Bcmd%5D = %5B%5D%0A
     
@@ -1123,16 +1123,156 @@
 d%5D = %5B%5D%0A
+        if hasattr(cls, %22__cmd_help__%22):%0A            for cmd in tmp.__cmd_help__:%0A                cls.__help__%5Bcmd%5D = tmp.__cmd_help__%5Bcmd%5D%0A
         

Update mount.py