components now extend from AbstractComponent rather than Component