more flexible plugin support