On IRC, onestone came up with an idea which I want to put for discussion: Well, as most of us probably agree, library plugins is quite a needed thing for beryl, and having a proper way to do that can remove code duplication in different plugins, and make a consistent plugin behavior (for example, consistent animation physics)... Here is the general idea: Library plugin interface: struct CompLibraryFunction { CompLibraryFunction *next; CompLibraryFunction *prev; char *name; void *function; } Also adding "CompLibraryFunction *libFunctions;" to CompDisplay; An additional vtable entry for: void libraryFunctionUpdated(CompDisplay *d, char *name, void *function); A function "void addLibraryFunction(CompDisplay *d, char *name, void *function);" and a function "void removeLibraryFunction(CompDisplay *d, char *name);" Both functions would call libraryFunctionUpdated to ensure other plugins know about loading/unloading of functions. Of course, each plugin will save pointers to the function it will use, and update them in libraryFunctionUpdated. One additional thing i'd like to add to this idea is wrapping / unwrapping library functions. The typedef of the shared function will be saved in a header in beryl-plugins/include so that other plugins have access to it. What do you think?