going for a composition approach rather than inheritance