more general version of plugin interface