As most of us probably agree, library plugins are 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). On IRC, onestone came up with an idea which I want to share for discussion. Here is the general idea: Library plugin interface: struct CompLibraryFunction { CompLibraryFunction *next; CompLibraryFunction *prev; char *name; void *function; } The CompDisplay structure gets a new member "CompLibraryFunction *libFunctions;". Each plugin's vtable gets an additional function pointer: void libraryFunctionUpdated(CompDisplay *d, char *name, void *function); Additionally, there would be two new functions in core: 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?