added the plugin mechanism