don't require direct invocation since this prevents binding the plugin to a lifecycle phase.