Convert from an interface to an abstract plugin patten.

This is to simplify the plugin classes.