I had a brainwave when I came across this and figured I would contribute my thoughts. Standards are always a good thing. No one forces anyone to use them, but it's good practice. Imagine what internet would be like if we didn't have standards (you won't have to think back too far). It was a mess of sloppy code and hacked-up design principles that only one specific browser supported. The Bukkit plugin situation is like this in that there's no standardized protocol for any of this plugin communication, so plugin makers have to resort to checking support for specific plugins and API's. This is messy, and like the old web, it needs to go. I'm just an amateur, and I haven't messed around with Bukkit itself much, but hypothetically this is how I would do it (there might be an easier way to do it that I'm not aware of, I know the ins and outs of Java, but not on a scale like this per-se). I would have an interface in Bukkit, call it say, "Service." The service interface would have a few key methods that register the service, provide service info to bukkit, etc. The Service plugins would implement the Service interface and register themselves under a generic name, for example, "Economy." Plugin makers would have to agree on a service name to use for certain aspects. Then have a Server.getService( String serviceName ) method that returns a handle to the plugin that is registered as the service However, now we have a problem. A "Service" interface isn't specific enough to provide anything meaningful to the plugin. My proposed solution to this problem is that each service plugin, or service host, provide another interface, for example "EconomyService" that details the specifics of a given service. These could be standardized interfaces provided on the Bukkit wiki and community driven. Any service host that wants to provide an economy could simply implement this interface and the "Service" general interface to provide interoperating plugins the ability to query the service using standards-based method calls. The TL;DR of this suggestion is this: Have a general Service interface supplemented by a SpecificService interface provided by the Service Host. The Service Client would then use standards-based calls to interface with the Service. Any plugin could be assured that if standards are followed that these methods would work for any plugin. Feel free to tell me that this is an awful idea, that it's a great idea, or that it just wouldn't work for X reason. Before I even hit post I've identified a few problems. I'm pretty much just laying out ideas to see if anything clicks.