Refactored Definition as interface IDefinition - make for easier mix-ins
and there was very little code re-use.
Initial commit
Initial commit