use PluginError for error handling everywhere