added plugin pattern