fix the plugin factory to have an abstract base class