Rework Plugins to properly separate concerns