Refactoring to reduce code duplication (ChainablePlugin now inherits from SourcePlugin)